| Index: lib/html/src/Isolates.dart
|
| diff --git a/lib/html/src/Isolates.dart b/lib/html/src/Isolates.dart
|
| index 88989491f3ba980a183781f6d5c75e8ed8162761..ea025abe571c56f81315e9ccef77e39e92e4b565 100644
|
| --- a/lib/html/src/Isolates.dart
|
| +++ b/lib/html/src/Isolates.dart
|
| @@ -29,6 +29,12 @@ class _JsSerializer extends _Serializer {
|
| x._receivePort._isolateId, x._receivePort._portId ];
|
| }
|
|
|
| + visitObject(Object x) {
|
| + if (x is Function) return visitFunction(x);
|
| + // TODO: Handle DOM elements and proxy other objects.
|
| + throw "Unserializable object $x";
|
| + }
|
| +
|
| visitFunction(Function func) {
|
| return [ 'funcref',
|
| _makeFunctionRef(func), visitSendPortSync(_sendPort()), null ];
|
| @@ -87,6 +93,8 @@ _deserialize(var message) {
|
|
|
| class _JsDeserializer extends _Deserializer {
|
|
|
| + static final _UNSPECIFIED = const Object();
|
| +
|
| deserializeSendPort(List x) {
|
| String tag = x[1];
|
| switch (tag) {
|
| @@ -102,6 +110,27 @@ class _JsDeserializer extends _Deserializer {
|
| }
|
| }
|
|
|
| + deserializeObject(List x) {
|
| + String tag = x[0];
|
| + switch (tag) {
|
| + case 'funcref': return deserializeFunction(x);
|
| + default: throw 'Illegal object type: $x';
|
| + }
|
| + }
|
| +
|
| + deserializeFunction(List x) {
|
| + var id = x[1];
|
| + SendPortSync port = deserializeSendPort(x[2]);
|
| + // TODO: Support varargs when there is support in the language.
|
| + return ([arg0 = _UNSPECIFIED, arg1 = _UNSPECIFIED,
|
| + arg2 = _UNSPECIFIED, arg3 = _UNSPECIFIED]) {
|
| + var args = [arg0, arg1, arg2, arg3];
|
| + var last = args.indexOf(_UNSPECIFIED);
|
| + if (last >= 0) args = args.getRange(0, last);
|
| + var message = [id, args];
|
| + return port.callSync(message);
|
| + };
|
| + }
|
| }
|
|
|
| // The receiver is JS.
|
|
|