| Index: pkg/browser/lib/interop.js
|
| diff --git a/pkg/browser/lib/interop.js b/pkg/browser/lib/interop.js
|
| index 40e1700ad76d53fe7d69ec4819c10387678d1789..4f3d6c4f9d6a3ed01bfac985378e2b2237eaa36a 100644
|
| --- a/pkg/browser/lib/interop.js
|
| +++ b/pkg/browser/lib/interop.js
|
| @@ -300,6 +300,33 @@ function DartProxy(o) {
|
| // Direct function invocation.
|
| return [ 'return',
|
| serialize(receiver.apply(args[0], args.slice(1))) ];
|
| + } else if (kind == 'asMap') {
|
| + if (member == 'containsValue') {
|
| + var found = false;
|
| + for (var p in receiver) {
|
| + if (receiver[p] === args[0]) {
|
| + found = true;
|
| + break;
|
| + }
|
| + }
|
| + return [ 'return', serialize(found) ];
|
| + } else if (member == 'addAll') {
|
| + var map = args[0];
|
| + for (var p in map) {
|
| + receiver[p] = map[p];
|
| + }
|
| + return [ 'return', null ];
|
| + } else if (member == 'values') {
|
| + var values = [];
|
| + for (var p in receiver) {
|
| + values.push(receiver[p]);
|
| + }
|
| + return [ 'return', serialize(values) ];
|
| + } else if (member == 'length') {
|
| + return [ 'return', serialize(Object.keys(receiver).length) ];
|
| + } else {
|
| + return [ 'throws', 'unsupported operation'];
|
| + }
|
| } else if (member == '[]' && args.length == 1) {
|
| // Index getter.
|
| return [ 'return', serialize(receiver[args[0]]) ];
|
| @@ -336,6 +363,7 @@ function DartProxy(o) {
|
| // - sendport -> sendport
|
| // - Function -> [ 'funcref', function-id, sendport ]
|
| // - Object -> [ 'objref', object-id, sendport ]
|
| + // - Array -> [ 'arrayref', object-id, sendport ]
|
| function serialize(message) {
|
| if (message == null) {
|
| return null; // Convert undefined to null.
|
| @@ -364,7 +392,7 @@ function DartProxy(o) {
|
| return [ 'objref', message.id, message.port ];
|
| } else {
|
| // Local object proxy.
|
| - return [ 'objref',
|
| + return [ message instanceof Array ? 'arrayref' : 'objref',
|
| proxiedObjectTable.add(message),
|
| proxiedObjectTable.sendPort ];
|
| }
|
|
|