anchor.diff:      addDartInstance(newList, dartValue);
       return newList;
     } else if (dartValue is Map) {
  -    var newMap = new JsObject(context['Object']);
  +    var newMap = new JsObject(_Object);
       dartValue.forEach((k, v) {
         newMap[k] = jsValue(v);
       });
       addDartInstance(newMap, dartValue);
       return newMap;
     } else if (dartValue is DateTime) {
  -    return new JsObject(context['Date'], [dartValue.millisecondsSinceEpoch]);
  +    return new JsObject(_Date, [dartValue.millisecondsSinceEpoch]);
     }
     return dartValue;
   }
  
positive.code:     if (dartClass != null) return dartClass;
  
      var constructor = jsValue['constructor'];
      if (constructor == context['Date']) {
        return new DateTime.fromMillisecondsSinceEpoch(
            jsValue.callMethod('getTime'));
      } else if (constructor == context['Object']) {
        var dartMap = {};
        var keys = context['Object'].callMethod('keys', [jsValue]);
        for (var key in keys) {
          dartMap[key] = dartValue(jsValue[key]);
        }
  
negative.code: /// TODO(jakemac): Use expando to cache js arrays that mirror dart lists?
  dynamic jsValue(dartValue) {
    if (dartValue is JsObject) {
      // A JsObject created from dart, and then passed to JS. Set itself as the
      // dart instance so it doesn't get converted to a Map/List on the way back.
      addDartInstance(dartValue, dartValue);
      return dartValue;
    } else if (dartValue is JsProxyInterface) {
      return dartValue.jsProxy;
  