anchor.diff:      seen.add(object);
     }
   
  -  Object scanAndReplaceObject(final object) {
  +  Object replaceSendPort(final object) 
  +    => scanAndReplaceObject(object, true);
  +  
  +  Object replaceRemoteSendPort(final object) 
  +    => scanAndReplaceObject(object, false);
  +  
  +  Object scanAndReplaceObject(final object, bool replaceSendPort) {
       if (object is num) {
         return object;
       } else if (object is bool) {
  
positive.code:       
        m.keys.forEach((String key) {
          if (key is String) {
            m[key] = scanAndReplaceObject(m[key]);
          } else {
            throw new NotSerializableObjectException("Key must be string.");
          }
        });
        seen.remove(object);
        return object;
      } else if (object is SendPort) {
        return new _LocalIsolate(object).toRemoteSendPort();
      } else {
        checkCycle(object);
        var r = scanAndReplaceObject(object.toJson());
        seen.remove(object);
        return r;
      }
  
negative.code:       List a = object;
        if (a.length > 0) {
          a = a.map((Object o) {
            return scanAndReplaceObject(o, replaceSendPort);
          }).toList(growable:false);
        }
        seen.remove(object);
  