| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 // --------------------------------------------------------------------------- | 5 // --------------------------------------------------------------------------- |
| 6 // Support for JS interoperability | 6 // Support for JS interoperability |
| 7 // --------------------------------------------------------------------------- | 7 // --------------------------------------------------------------------------- |
| 8 function SendPortSync() { | 8 function SendPortSync() { |
| 9 } | 9 } |
| 10 | 10 |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 function DartProxy(id, sendPort) { | 329 function DartProxy(id, sendPort) { |
| 330 this.id = id; | 330 this.id = id; |
| 331 this.port = sendPort; | 331 this.port = sendPort; |
| 332 } | 332 } |
| 333 | 333 |
| 334 // Serializes JS types to SendPortSync format: | 334 // Serializes JS types to SendPortSync format: |
| 335 // - primitives -> primitives | 335 // - primitives -> primitives |
| 336 // - sendport -> sendport | 336 // - sendport -> sendport |
| 337 // - Function -> [ 'funcref', function-id, sendport ] | 337 // - Function -> [ 'funcref', function-id, sendport ] |
| 338 // - Object -> [ 'objref', object-id, sendport ] | 338 // - Object -> [ 'objref', object-id, sendport ] |
| 339 // - Array -> [ 'arrayref', object-id, sendport ] |
| 339 function serialize(message) { | 340 function serialize(message) { |
| 340 if (message == null) { | 341 if (message == null) { |
| 341 return null; // Convert undefined to null. | 342 return null; // Convert undefined to null. |
| 342 } else if (typeof(message) == 'string' || | 343 } else if (typeof(message) == 'string' || |
| 343 typeof(message) == 'number' || | 344 typeof(message) == 'number' || |
| 344 typeof(message) == 'boolean') { | 345 typeof(message) == 'boolean') { |
| 345 // Primitives are passed directly through. | 346 // Primitives are passed directly through. |
| 346 return message; | 347 return message; |
| 347 } else if (message instanceof SendPortSync) { | 348 } else if (message instanceof SendPortSync) { |
| 348 // Non-proxied objects are serialized. | 349 // Non-proxied objects are serialized. |
| 349 return message; | 350 return message; |
| 350 } else if (typeof(message) == 'function') { | 351 } else if (typeof(message) == 'function') { |
| 351 if ('_dart_id' in message) { | 352 if ('_dart_id' in message) { |
| 352 // Remote function proxy. | 353 // Remote function proxy. |
| 353 var remoteId = message._dart_id; | 354 var remoteId = message._dart_id; |
| 354 var remoteSendPort = message._dart_port; | 355 var remoteSendPort = message._dart_port; |
| 355 return [ 'funcref', remoteId, remoteSendPort ]; | 356 return [ 'funcref', remoteId, remoteSendPort ]; |
| 356 } else { | 357 } else { |
| 357 // Local function proxy. | 358 // Local function proxy. |
| 358 return [ 'funcref', | 359 return [ 'funcref', |
| 359 proxiedObjectTable.add(message), | 360 proxiedObjectTable.add(message), |
| 360 proxiedObjectTable.sendPort ]; | 361 proxiedObjectTable.sendPort ]; |
| 361 } | 362 } |
| 362 } else if (message instanceof DartProxy) { | 363 } else if (message instanceof DartProxy) { |
| 363 // Remote object proxy. | 364 // Remote object proxy. |
| 364 return [ 'objref', message.id, message.port ]; | 365 return [ 'objref', message.id, message.port ]; |
| 365 } else { | 366 } else { |
| 366 // Local object proxy. | 367 // Local object proxy. |
| 367 return [ 'objref', | 368 return [ message instanceof Array ? 'arrayref' : 'objref', |
| 368 proxiedObjectTable.add(message), | 369 proxiedObjectTable.add(message), |
| 369 proxiedObjectTable.sendPort ]; | 370 proxiedObjectTable.sendPort ]; |
| 370 } | 371 } |
| 371 } | 372 } |
| 372 | 373 |
| 373 function deserialize(message) { | 374 function deserialize(message) { |
| 374 if (message == null) { | 375 if (message == null) { |
| 375 return null; // Convert undefined to null. | 376 return null; // Convert undefined to null. |
| 376 } else if (typeof(message) == 'string' || | 377 } else if (typeof(message) == 'string' || |
| 377 typeof(message) == 'number' || | 378 typeof(message) == 'number' || |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 port.receive(f); | 531 port.receive(f); |
| 531 window.registerPort(name, port.toSendPort()); | 532 window.registerPort(name, port.toSendPort()); |
| 532 } | 533 } |
| 533 | 534 |
| 534 makeGlobalPort('dart-js-context', context); | 535 makeGlobalPort('dart-js-context', context); |
| 535 makeGlobalPort('dart-js-create', construct); | 536 makeGlobalPort('dart-js-create', construct); |
| 536 makeGlobalPort('dart-js-instanceof', proxyInstanceof); | 537 makeGlobalPort('dart-js-instanceof', proxyInstanceof); |
| 537 makeGlobalPort('dart-js-delete-property', proxyDeleteProperty); | 538 makeGlobalPort('dart-js-delete-property', proxyDeleteProperty); |
| 538 makeGlobalPort('dart-js-convert', proxyConvert); | 539 makeGlobalPort('dart-js-convert', proxyConvert); |
| 539 })(); | 540 })(); |
| OLD | NEW |