Chromium Code Reviews| Index: client/dart.js |
| =================================================================== |
| --- client/dart.js (revision 9437) |
| +++ client/dart.js (working copy) |
| @@ -53,6 +53,12 @@ |
| typeof(message) == 'number' || |
| typeof(message) == 'boolean') { |
| return message; |
| + } else if (message instanceof Array) { |
| + var values = new Array(message.length); |
| + for (var i = 0; i < message.length; i++) { |
| + values[i] = serialize(message[i]); |
| + } |
| + return [ 'list', message.length, values ]; |
| } else if (message instanceof LocalSendPortSync) { |
| return [ 'sendport', 'nativejs', message.receivePort.id ]; |
| } else if (message instanceof DartSendPortSync) { |
| @@ -63,7 +69,7 @@ |
| var keys = Object.getOwnPropertyNames(message); |
| var values = new Array(keys.length); |
| for (var i = 0; i < keys.length; i++) { |
| - values[i] = message[keys[i]]; |
| + values[i] = serialize(message[keys[i]]); |
| } |
| return [ 'map', id, keys, values ]; |
| } |
| @@ -83,6 +89,7 @@ |
| switch (x[0]) { |
| case 'map': return deserializeMap(x); |
| case 'sendport': return deserializeSendPort(x); |
| + case 'list': return deserializeList(x); |
| default: throw 'unimplemented'; |
| } |
| } |
| @@ -105,7 +112,7 @@ |
| switch (tag) { |
| case 'nativejs': |
| var id = x[2]; |
| - return new LocalSendPortSync(id); |
| + return new LocalSendPortSync(ReceivePortSync.map[id]); |
|
sammccall
2012/07/06 16:01:41
I think this was just an oversight before?
|
| case 'dart': |
| var isolateId = x[2]; |
| var portId = x[3]; |
| @@ -115,6 +122,16 @@ |
| } |
| } |
| + function deserializeList(x) { |
| + var length = x[1]; |
| + var values = x[2]; |
| + var result = new Array(length); |
| + for (var i = 0; i < length; i++) { |
| + result[i] = values[i]; |
| + } |
| + return result; |
| + } |
| + |
| window.registerPort = function(name, port) { |
| var stringified = JSON.stringify(serialize(port)); |
| window.localStorage['dart-port:' + name] = stringified; |