anchor.diff:  
       state.info.functions.add(info);
       return info;
  +  }
  +
  +  /// Adds closure information to [info], using all nested closures in [member].
  +  void _addClosureInfo(Info info, ir.Member member,
  +      {LibraryEntity libraryEntity, MemberEntity memberEntity}) {
  +    final localFunctionInfoCollector = LocalFunctionInfoCollector();
  +    member.accept(localFunctionInfoCollector);
  +    List<ClosureInfo> nestedClosures = <ClosureInfo>[];
  +    localFunctionInfoCollector.localFunctions.forEach((key, value) {
  +      FunctionEntity closureEntity;
  +      environment.forEachNestedClosure(memberEntity, (closure) {
  +        if (closure.enclosingClass.name == value.name) {
  +          closureEntity = closure;
  +        }
  +      });
  +      final closureClassEntity = closureEntity.enclosingClass;
  +      final closureInfo =
  +          ClosureInfo(name: value.name, outputUnit: null, size: null);
  +      state.entityToInfo[closureClassEntity] = closureInfo;
  +
  +      FunctionEntity callMethod = closedWorld.elementEnvironment
  +          .lookupClassMember(closureClassEntity, Identifiers.call);
  +      final functionInfo = visitFunction(key.function,
  +          functionEntity: callMethod, localFunctionInfo: value);
  +      state.entityToInfo[closureEntity] = functionInfo;
  +
  +      closureInfo.function = functionInfo;
  +      functionInfo.parent = closureInfo;
  +      state.info.closures.add(closureInfo);
  +
  +      closureInfo.parent = info;
  +      nestedClosures.add(closureInfo);
  +    });
  +    if (info is FunctionInfo) info.closures = nestedClosures;
  +    if (info is FieldInfo) info.closures = nestedClosures;
     }
   }
   
  
positive.code:     int size = dumpInfoTask.sizeOf(function);
      // TODO(sigmund): consider adding a small info to represent unreachable
      // code here.
      if (size == 0 && !shouldKeep(function)) return null;
  
      var compareName = function.name;
      if (function.isConstructor) {
        compareName = compareName == ""
  
negative.code:   }
  
    FunctionInfo visitFunction(ir.FunctionNode function,
        {FunctionEntity functionEntity, LocalFunctionInfo localFunctionInfo}) {
      final parent = function.parent;
      String name =
          parent is ir.LocalFunction ? 'call' : parent.toStringInternal();
      bool isConstructor = parent is ir.Constructor;
      bool isFactory = parent is ir.Procedure && parent.isFactory;
      // Kernel `isStatic` refers to static members, constructors, and top-level
  