anchor.diff:      if (closureClass == null) {
         // Either the class was not cached yet, or there are optional parameters.
         // Create a new closure class.
  -      SourceString name = const SourceString("BoundClosure");
  +      String name;
  +      if (canBeShared) {
  +        if (inInterceptor) {
  +          name = 'BoundClosure\$i${parameterCount}';
  +        } else {
  +          name = 'BoundClosure\$${parameterCount}';
  +        }
  +      } else {
  +        name = 'Bound_${member.name.slowToString()}'
  +            '_${member.enclosingElement.name.slowToString()}';
  +      }
  +
         ClassElement closureClassElement = new ClosureClassElement(
  -          name, compiler, member, member.getCompilationUnit());
  +          new SourceString(name), compiler, member, member.getCompilationUnit());
         String mangledName = namer.getName(closureClassElement);
         String superName = namer.getName(closureClassElement.superclass);
         needsClosureClass = true;
  
positive.code:     String getterName = namer.getterName(member);
      String targetName = namer.instanceMethodName(member);
  
      List<js.Parameter> parameters = <js.Parameter>[];
      List<js.Expression> arguments = <js.Expression>[];
      arguments.add(new js.This());
      arguments.add(js.string(targetName));
      if (inInterceptor) {
        parameters.add(new js.Parameter(extraArg));
        arguments.add(new js.VariableUse(extraArg));
      }
  
      js.Expression getterFunction =
          new js.Fun(parameters,
              new js.Block(
                  <js.Statement>[
                      new js.Return(
                          new js.New(
                              new js.VariableUse(closureClass),
                              arguments))]));
  
      defineStub(getterName, getterFunction);
    }
  
negative.code: 
        String invocationName = namer.instanceMethodName(callElement);
  
        List<String> parameters = <String>[];
        List<js.Expression> arguments = <js.Expression>[];
        if (inInterceptor) {
          arguments.add(js.use('this').dot(fieldNames[2]));
        }
        for (int i = 0; i < parameterCount; i++) {
          String name = 'p$i';
          parameters.add(name);
          arguments.add(js.use(name));
        }
  
        js.Expression fun =
            js.fun(parameters,
                js.block1(
                    js.return_(
                        new js.PropertyAccess(
                            js.use('this').dot(fieldNames[0]),
                            js.use('this').dot(fieldNames[1]))
                        .callWith(arguments))));
        boundClosureBuilder.addProperty(invocationName, fun);
  
        addParameterStubs(callElement, boundClosureBuilder.addProperty);
  