Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: lib/runtime/dart/_isolate_helper.js

Issue 1156993015: fixes #193, factory constructors as static methods (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 var _isolate_helper = dart.defineLibrary(_isolate_helper, {}); 1 var _isolate_helper = dart.defineLibrary(_isolate_helper, {});
2 var core = dart.import(core); 2 var core = dart.import(core);
3 var _native_typed_data = dart.import(_native_typed_data); 3 var _native_typed_data = dart.import(_native_typed_data);
4 var _interceptors = dart.lazyImport(_interceptors); 4 var _interceptors = dart.lazyImport(_interceptors);
5 var _js_helper = dart.lazyImport(_js_helper); 5 var _js_helper = dart.lazyImport(_js_helper);
6 var isolate = dart.import(isolate); 6 var isolate = dart.import(isolate);
7 var _foreign_helper = dart.import(_foreign_helper); 7 var _foreign_helper = dart.import(_foreign_helper);
8 var _js_embedded_names = dart.import(_js_embedded_names); 8 var _js_embedded_names = dart.import(_js_embedded_names);
9 var collection = dart.import(collection); 9 var collection = dart.import(collection);
10 var async = dart.import(async); 10 var async = dart.import(async);
(...skipping 15 matching lines...) Expand all
26 dart.fn(_clone); 26 dart.fn(_clone);
27 let _serializeSendPorts = Symbol('_serializeSendPorts'); 27 let _serializeSendPorts = Symbol('_serializeSendPorts');
28 let _workerId = Symbol('_workerId'); 28 let _workerId = Symbol('_workerId');
29 let _isolateId = Symbol('_isolateId'); 29 let _isolateId = Symbol('_isolateId');
30 let _receivePortId = Symbol('_receivePortId'); 30 let _receivePortId = Symbol('_receivePortId');
31 let _id = Symbol('_id'); 31 let _id = Symbol('_id');
32 let _receivePort = Symbol('_receivePort'); 32 let _receivePort = Symbol('_receivePort');
33 class _Serializer extends core.Object { 33 class _Serializer extends core.Object {
34 _Serializer(opts) { 34 _Serializer(opts) {
35 let serializeSendPorts = opts && 'serializeSendPorts' in opts ? opts.seria lizeSendPorts : true; 35 let serializeSendPorts = opts && 'serializeSendPorts' in opts ? opts.seria lizeSendPorts : true;
36 this.serializedObjectIds = new (core.Map$(core.Object, core.int)).identity (); 36 this.serializedObjectIds = core.Map$(core.Object, core.int).identity();
37 this[_serializeSendPorts] = dart.as(serializeSendPorts, core.bool); 37 this[_serializeSendPorts] = dart.as(serializeSendPorts, core.bool);
38 } 38 }
39 serialize(x) { 39 serialize(x) {
40 if (this.isPrimitive(x)) 40 if (this.isPrimitive(x))
41 return this.serializePrimitive(x); 41 return this.serializePrimitive(x);
42 let serializationId = this.serializedObjectIds.get(x); 42 let serializationId = this.serializedObjectIds.get(x);
43 if (serializationId != null) 43 if (serializationId != null)
44 return this.makeRef(serializationId); 44 return this.makeRef(serializationId);
45 serializationId = this.serializedObjectIds.length; 45 serializationId = this.serializedObjectIds.length;
46 this.serializedObjectIds.set(x, serializationId); 46 this.serializedObjectIds.set(x, serializationId);
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 serializeJsSendPort: [core.Object, [_NativeJsSendPort]], 183 serializeJsSendPort: [core.Object, [_NativeJsSendPort]],
184 serializeCapability: [core.Object, [CapabilityImpl]], 184 serializeCapability: [core.Object, [CapabilityImpl]],
185 serializeClosure: [core.Object, [_js_helper.Closure]], 185 serializeClosure: [core.Object, [_js_helper.Closure]],
186 serializeDartObject: [core.Object, [core.Object]] 186 serializeDartObject: [core.Object, [core.Object]]
187 }) 187 })
188 }); 188 });
189 let _adjustSendPorts = Symbol('_adjustSendPorts'); 189 let _adjustSendPorts = Symbol('_adjustSendPorts');
190 class _Deserializer extends core.Object { 190 class _Deserializer extends core.Object {
191 _Deserializer(opts) { 191 _Deserializer(opts) {
192 let adjustSendPorts = opts && 'adjustSendPorts' in opts ? opts.adjustSendP orts : true; 192 let adjustSendPorts = opts && 'adjustSendPorts' in opts ? opts.adjustSendP orts : true;
193 this.deserializedObjects = new core.List(); 193 this.deserializedObjects = core.List.new();
194 this[_adjustSendPorts] = dart.as(adjustSendPorts, core.bool); 194 this[_adjustSendPorts] = dart.as(adjustSendPorts, core.bool);
195 } 195 }
196 deserialize(x) { 196 deserialize(x) {
197 if (this.isPrimitive(x)) 197 if (this.isPrimitive(x))
198 return this.deserializePrimitive(x); 198 return this.deserializePrimitive(x);
199 if (!dart.is(x, _interceptors.JSArray)) 199 if (!dart.is(x, _interceptors.JSArray))
200 throw new core.ArgumentError(`Bad serialized message: ${x}`); 200 throw new core.ArgumentError(`Bad serialized message: ${x}`);
201 switch (dart.dload(x, 'first')) { 201 switch (dart.dload(x, 'first')) {
202 case "ref": 202 case "ref":
203 { 203 {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 deserializeArrayInPlace(x) { 283 deserializeArrayInPlace(x) {
284 for (let i = 0; dart.notNull(i) < dart.notNull(x[core.$length]); i = dart. notNull(i) + 1) { 284 for (let i = 0; dart.notNull(i) < dart.notNull(x[core.$length]); i = dart. notNull(i) + 1) {
285 x[core.$set](i, this.deserialize(x[core.$get](i))); 285 x[core.$set](i, this.deserialize(x[core.$get](i)));
286 } 286 }
287 return x; 287 return x;
288 } 288 }
289 deserializeFixed(x) { 289 deserializeFixed(x) {
290 dart.assert(dart.equals(dart.dindex(x, 0), 'fixed')); 290 dart.assert(dart.equals(dart.dindex(x, 0), 'fixed'));
291 let result = dart.as(dart.dindex(x, 1), core.List); 291 let result = dart.as(dart.dindex(x, 1), core.List);
292 this.deserializedObjects[core.$add](result); 292 this.deserializedObjects[core.$add](result);
293 return new _interceptors.JSArray.markFixed(this.deserializeArrayInPlace(da rt.as(result, _interceptors.JSArray))); 293 return _interceptors.JSArray.markFixed(this.deserializeArrayInPlace(dart.a s(result, _interceptors.JSArray)));
294 } 294 }
295 deserializeExtendable(x) { 295 deserializeExtendable(x) {
296 dart.assert(dart.equals(dart.dindex(x, 0), 'extendable')); 296 dart.assert(dart.equals(dart.dindex(x, 0), 'extendable'));
297 let result = dart.as(dart.dindex(x, 1), core.List); 297 let result = dart.as(dart.dindex(x, 1), core.List);
298 this.deserializedObjects[core.$add](result); 298 this.deserializedObjects[core.$add](result);
299 return new _interceptors.JSArray.markGrowable(this.deserializeArrayInPlace (dart.as(result, _interceptors.JSArray))); 299 return _interceptors.JSArray.markGrowable(this.deserializeArrayInPlace(dar t.as(result, _interceptors.JSArray)));
300 } 300 }
301 deserializeMutable(x) { 301 deserializeMutable(x) {
302 dart.assert(dart.equals(dart.dindex(x, 0), 'mutable')); 302 dart.assert(dart.equals(dart.dindex(x, 0), 'mutable'));
303 let result = dart.as(dart.dindex(x, 1), core.List); 303 let result = dart.as(dart.dindex(x, 1), core.List);
304 this.deserializedObjects[core.$add](result); 304 this.deserializedObjects[core.$add](result);
305 return this.deserializeArrayInPlace(dart.as(result, _interceptors.JSArray) ); 305 return this.deserializeArrayInPlace(dart.as(result, _interceptors.JSArray) );
306 } 306 }
307 deserializeConst(x) { 307 deserializeConst(x) {
308 dart.assert(dart.equals(dart.dindex(x, 0), 'const')); 308 dart.assert(dart.equals(dart.dindex(x, 0), 'const'));
309 let result = dart.as(dart.dindex(x, 1), core.List); 309 let result = dart.as(dart.dindex(x, 1), core.List);
310 this.deserializedObjects[core.$add](result); 310 this.deserializedObjects[core.$add](result);
311 return new _interceptors.JSArray.markFixed(this.deserializeArrayInPlace(da rt.as(result, _interceptors.JSArray))); 311 return _interceptors.JSArray.markFixed(this.deserializeArrayInPlace(dart.a s(result, _interceptors.JSArray)));
312 } 312 }
313 deserializeMap(x) { 313 deserializeMap(x) {
314 dart.assert(dart.equals(dart.dindex(x, 0), 'map')); 314 dart.assert(dart.equals(dart.dindex(x, 0), 'map'));
315 let keys = dart.as(dart.dindex(x, 1), core.List); 315 let keys = dart.as(dart.dindex(x, 1), core.List);
316 let values = dart.as(dart.dindex(x, 2), core.List); 316 let values = dart.as(dart.dindex(x, 2), core.List);
317 let result = dart.map(); 317 let result = dart.map();
318 this.deserializedObjects[core.$add](result); 318 this.deserializedObjects[core.$add](result);
319 keys = keys[core.$map](dart.bind(this, 'deserialize'))[core.$toList](); 319 keys = keys[core.$map](dart.bind(this, 'deserialize'))[core.$toList]();
320 for (let i = 0; dart.notNull(i) < dart.notNull(keys[core.$length]); i = da rt.notNull(i) + 1) { 320 for (let i = 0; dart.notNull(i) < dart.notNull(keys[core.$length]); i = da rt.notNull(i) + 1) {
321 result.set(keys[core.$get](i), this.deserialize(values[core.$get](i))); 321 result.set(keys[core.$get](i), this.deserialize(values[core.$get](i)));
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 this.rootContext = null; 477 this.rootContext = null;
478 this.topEventLoop = null; 478 this.topEventLoop = null;
479 this.fromCommandLine = null; 479 this.fromCommandLine = null;
480 this.isWorker = null; 480 this.isWorker = null;
481 this.supportsWorkers = null; 481 this.supportsWorkers = null;
482 this.isolates = null; 482 this.isolates = null;
483 this.mainManager = null; 483 this.mainManager = null;
484 this.managers = null; 484 this.managers = null;
485 this[_nativeDetectEnvironment](); 485 this[_nativeDetectEnvironment]();
486 this.topEventLoop = new _EventLoop(); 486 this.topEventLoop = new _EventLoop();
487 this.isolates = new (core.Map$(core.int, _IsolateContext))(); 487 this.isolates = core.Map$(core.int, _IsolateContext).new();
488 this.managers = new (core.Map$(core.int, core.Object))(); 488 this.managers = core.Map$(core.int, core.Object).new();
489 if (this.isWorker) { 489 if (this.isWorker) {
490 this.mainManager = new _MainManagerStub(); 490 this.mainManager = new _MainManagerStub();
491 this[_nativeInitWorkerMessageHandler](); 491 this[_nativeInitWorkerMessageHandler]();
492 } 492 }
493 } 493 }
494 [_nativeDetectEnvironment]() { 494 [_nativeDetectEnvironment]() {
495 let isWindowDefined = exports.globalWindow != null; 495 let isWindowDefined = exports.globalWindow != null;
496 let isWorkerDefined = exports.globalWorker != null; 496 let isWorkerDefined = exports.globalWorker != null;
497 this.isWorker = !dart.notNull(isWindowDefined) && dart.notNull(exports.glo balPostMessageDefined); 497 this.isWorker = !dart.notNull(isWindowDefined) && dart.notNull(exports.glo balPostMessageDefined);
498 this.supportsWorkers = dart.notNull(this.isWorker) || dart.notNull(isWorke rDefined) && IsolateNatives.thisScript != null; 498 this.supportsWorkers = dart.notNull(this.isWorker) || dart.notNull(isWorke rDefined) && IsolateNatives.thisScript != null;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 let _setGlobals = Symbol('_setGlobals'); 540 let _setGlobals = Symbol('_setGlobals');
541 let _addRegistration = Symbol('_addRegistration'); 541 let _addRegistration = Symbol('_addRegistration');
542 let _close = Symbol('_close'); 542 let _close = Symbol('_close');
543 class _IsolateContext extends core.Object { 543 class _IsolateContext extends core.Object {
544 _IsolateContext() { 544 _IsolateContext() {
545 this.id = (() => { 545 this.id = (() => {
546 let o = exports._globalState, x = o.nextIsolateId; 546 let o = exports._globalState, x = o.nextIsolateId;
547 o.nextIsolateId = dart.notNull(x) + 1; 547 o.nextIsolateId = dart.notNull(x) + 1;
548 return x; 548 return x;
549 })(); 549 })();
550 this.ports = new (core.Map$(core.int, RawReceivePortImpl))(); 550 this.ports = core.Map$(core.int, RawReceivePortImpl).new();
551 this.weakPorts = new (core.Set$(core.int))(); 551 this.weakPorts = core.Set$(core.int).new();
552 this.isolateStatics = _foreign_helper.JS_CREATE_ISOLATE(); 552 this.isolateStatics = _foreign_helper.JS_CREATE_ISOLATE();
553 this.controlPort = new RawReceivePortImpl._controlPort(); 553 this.controlPort = new RawReceivePortImpl._controlPort();
554 this.pauseCapability = new isolate.Capability(); 554 this.pauseCapability = isolate.Capability.new();
555 this.terminateCapability = new isolate.Capability(); 555 this.terminateCapability = isolate.Capability.new();
556 this.delayedEvents = dart.setType([], core.List$(_IsolateEvent)); 556 this.delayedEvents = dart.setType([], core.List$(_IsolateEvent));
557 this.pauseTokens = new (core.Set$(isolate.Capability))(); 557 this.pauseTokens = core.Set$(isolate.Capability).new();
558 this.errorPorts = new (core.Set$(isolate.SendPort))(); 558 this.errorPorts = core.Set$(isolate.SendPort).new();
559 this.initialized = false; 559 this.initialized = false;
560 this.isPaused = false; 560 this.isPaused = false;
561 this.doneHandlers = null; 561 this.doneHandlers = null;
562 this[_scheduledControlEvents] = null; 562 this[_scheduledControlEvents] = null;
563 this[_isExecutingEvent] = false; 563 this[_isExecutingEvent] = false;
564 this.errorsAreFatal = true; 564 this.errorsAreFatal = true;
565 this.registerWeak(this.controlPort[_id], this.controlPort); 565 this.registerWeak(this.controlPort[_id], this.controlPort);
566 } 566 }
567 addPause(authentification, resume) { 567 addPause(authentification, resume) {
568 if (!dart.equals(this.pauseCapability, authentification)) 568 if (!dart.equals(this.pauseCapability, authentification))
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 let respond = () => { 611 let respond = () => {
612 responsePort.send(null); 612 responsePort.send(null);
613 }; 613 };
614 dart.fn(respond, dart.void, []); 614 dart.fn(respond, dart.void, []);
615 if (pingType == isolate.Isolate.AS_EVENT) { 615 if (pingType == isolate.Isolate.AS_EVENT) {
616 exports._globalState.topEventLoop.enqueue(this, respond, "ping"); 616 exports._globalState.topEventLoop.enqueue(this, respond, "ping");
617 return; 617 return;
618 } 618 }
619 dart.assert(pingType == isolate.Isolate.BEFORE_NEXT_EVENT); 619 dart.assert(pingType == isolate.Isolate.BEFORE_NEXT_EVENT);
620 if (this[_scheduledControlEvents] == null) { 620 if (this[_scheduledControlEvents] == null) {
621 this[_scheduledControlEvents] = new collection.Queue(); 621 this[_scheduledControlEvents] = collection.Queue.new();
622 } 622 }
623 dart.dsend(this[_scheduledControlEvents], 'addLast', respond); 623 dart.dsend(this[_scheduledControlEvents], 'addLast', respond);
624 } 624 }
625 handleKill(authentification, priority) { 625 handleKill(authentification, priority) {
626 if (!dart.equals(this.terminateCapability, authentification)) 626 if (!dart.equals(this.terminateCapability, authentification))
627 return; 627 return;
628 if (priority == isolate.Isolate.IMMEDIATE || priority == isolate.Isolate.B EFORE_NEXT_EVENT && !dart.notNull(this[_isExecutingEvent])) { 628 if (priority == isolate.Isolate.IMMEDIATE || priority == isolate.Isolate.B EFORE_NEXT_EVENT && !dart.notNull(this[_isExecutingEvent])) {
629 this.kill(); 629 this.kill();
630 return; 630 return;
631 } 631 }
632 if (priority == isolate.Isolate.AS_EVENT) { 632 if (priority == isolate.Isolate.AS_EVENT) {
633 exports._globalState.topEventLoop.enqueue(this, dart.bind(this, 'kill'), "kill"); 633 exports._globalState.topEventLoop.enqueue(this, dart.bind(this, 'kill'), "kill");
634 return; 634 return;
635 } 635 }
636 dart.assert(priority == isolate.Isolate.BEFORE_NEXT_EVENT); 636 dart.assert(priority == isolate.Isolate.BEFORE_NEXT_EVENT);
637 if (this[_scheduledControlEvents] == null) { 637 if (this[_scheduledControlEvents] == null) {
638 this[_scheduledControlEvents] = new collection.Queue(); 638 this[_scheduledControlEvents] = collection.Queue.new();
639 } 639 }
640 dart.dsend(this[_scheduledControlEvents], 'addLast', dart.bind(this, 'kill ')); 640 dart.dsend(this[_scheduledControlEvents], 'addLast', dart.bind(this, 'kill '));
641 } 641 }
642 addErrorListener(port) { 642 addErrorListener(port) {
643 this.errorPorts.add(port); 643 this.errorPorts.add(port);
644 } 644 }
645 removeErrorListener(port) { 645 removeErrorListener(port) {
646 this.errorPorts.remove(port); 646 this.errorPorts.remove(port);
647 } 647 }
648 handleUncaughtError(error, stackTrace) { 648 handleUncaughtError(error, stackTrace) {
649 if (this.errorPorts[core.$isEmpty]) { 649 if (this.errorPorts[core.$isEmpty]) {
650 if (dart.notNull(this.errorsAreFatal) && dart.notNull(core.identical(thi s, exports._globalState.rootContext))) { 650 if (dart.notNull(this.errorsAreFatal) && dart.notNull(core.identical(thi s, exports._globalState.rootContext))) {
651 return; 651 return;
652 } 652 }
653 if (self.console && self.console.error) { 653 if (self.console && self.console.error) {
654 self.console.error(error, stackTrace); 654 self.console.error(error, stackTrace);
655 } else { 655 } else {
656 core.print(error); 656 core.print(error);
657 if (stackTrace != null) 657 if (stackTrace != null)
658 core.print(stackTrace); 658 core.print(stackTrace);
659 } 659 }
660 return; 660 return;
661 } 661 }
662 let message = new core.List(2); 662 let message = core.List.new(2);
663 message[core.$set](0, dart.toString(error)); 663 message[core.$set](0, dart.toString(error));
664 message[core.$set](1, stackTrace == null ? null : dart.toString(stackTrace )); 664 message[core.$set](1, stackTrace == null ? null : dart.toString(stackTrace ));
665 for (let port of this.errorPorts) 665 for (let port of this.errorPorts)
666 port.send(message); 666 port.send(message);
667 } 667 }
668 eval(code) { 668 eval(code) {
669 let old = exports._globalState.currentContext; 669 let old = exports._globalState.currentContext;
670 exports._globalState.currentContext = this; 670 exports._globalState.currentContext = this;
671 this[_setGlobals](); 671 this[_setGlobals]();
672 let result = null; 672 let result = null;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 break; 747 break;
748 } 748 }
749 default: 749 default:
750 } 750 }
751 } 751 }
752 lookup(portId) { 752 lookup(portId) {
753 return this.ports.get(portId); 753 return this.ports.get(portId);
754 } 754 }
755 [_addRegistration](portId, port) { 755 [_addRegistration](portId, port) {
756 if (this.ports.containsKey(portId)) { 756 if (this.ports.containsKey(portId)) {
757 throw new core.Exception("Registry: ports must be registered only once." ); 757 throw core.Exception.new("Registry: ports must be registered only once." );
758 } 758 }
759 this.ports.set(portId, port); 759 this.ports.set(portId, port);
760 } 760 }
761 register(portId, port) { 761 register(portId, port) {
762 this[_addRegistration](portId, port); 762 this[_addRegistration](portId, port);
763 this[_updateGlobalState](); 763 this[_updateGlobalState]();
764 } 764 }
765 registerWeak(portId, port) { 765 registerWeak(portId, port) {
766 this.weakPorts.add(portId); 766 this.weakPorts.add(portId);
767 this[_addRegistration](portId, port); 767 this[_addRegistration](portId, port);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 register: [dart.void, [core.int, RawReceivePortImpl]], 819 register: [dart.void, [core.int, RawReceivePortImpl]],
820 registerWeak: [dart.void, [core.int, RawReceivePortImpl]], 820 registerWeak: [dart.void, [core.int, RawReceivePortImpl]],
821 [_updateGlobalState]: [dart.void, []], 821 [_updateGlobalState]: [dart.void, []],
822 kill: [dart.void, []], 822 kill: [dart.void, []],
823 unregister: [dart.void, [core.int]] 823 unregister: [dart.void, [core.int]]
824 }) 824 })
825 }); 825 });
826 let _runHelper = Symbol('_runHelper'); 826 let _runHelper = Symbol('_runHelper');
827 class _EventLoop extends core.Object { 827 class _EventLoop extends core.Object {
828 _EventLoop() { 828 _EventLoop() {
829 this.events = new (collection.Queue$(_IsolateEvent))(); 829 this.events = collection.Queue$(_IsolateEvent).new();
830 this[_activeJsAsyncCount] = 0; 830 this[_activeJsAsyncCount] = 0;
831 } 831 }
832 enqueue(isolate, fn, msg) { 832 enqueue(isolate, fn, msg) {
833 this.events.addLast(new _IsolateEvent(dart.as(isolate, _IsolateContext), d art.as(fn, core.Function), dart.as(msg, core.String))); 833 this.events.addLast(new _IsolateEvent(dart.as(isolate, _IsolateContext), d art.as(fn, core.Function), dart.as(msg, core.String)));
834 } 834 }
835 prequeue(event) { 835 prequeue(event) {
836 this.events.addFirst(event); 836 this.events.addFirst(event);
837 } 837 }
838 dequeue() { 838 dequeue() {
839 if (this.events[core.$isEmpty]) 839 if (this.events[core.$isEmpty])
840 return null; 840 return null;
841 return this.events.removeFirst(); 841 return this.events.removeFirst();
842 } 842 }
843 checkOpenReceivePortsFromCommandLine() { 843 checkOpenReceivePortsFromCommandLine() {
844 if (dart.notNull(exports._globalState.rootContext != null) && dart.notNull (exports._globalState.isolates.containsKey(exports._globalState.rootContext.id)) && dart.notNull(exports._globalState.fromCommandLine) && dart.notNull(exports._ globalState.rootContext.ports.isEmpty)) { 844 if (dart.notNull(exports._globalState.rootContext != null) && dart.notNull (exports._globalState.isolates.containsKey(exports._globalState.rootContext.id)) && dart.notNull(exports._globalState.fromCommandLine) && dart.notNull(exports._ globalState.rootContext.ports.isEmpty)) {
845 throw new core.Exception("Program exited with open ReceivePorts."); 845 throw core.Exception.new("Program exited with open ReceivePorts.");
846 } 846 }
847 } 847 }
848 runIteration() { 848 runIteration() {
849 let event = this.dequeue(); 849 let event = this.dequeue();
850 if (event == null) { 850 if (event == null) {
851 this.checkOpenReceivePortsFromCommandLine(); 851 this.checkOpenReceivePortsFromCommandLine();
852 exports._globalState.maybeCloseWorker(); 852 exports._globalState.maybeCloseWorker();
853 return false; 853 return false;
854 } 854 }
855 event.process(); 855 event.process();
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 }, core.Object, [core.String])}); 1061 }, core.Object, [core.String])});
1062 } 1062 }
1063 static _log(msg) { 1063 static _log(msg) {
1064 if (exports._globalState.isWorker) { 1064 if (exports._globalState.isWorker) {
1065 exports._globalState.mainManager.postMessage(_serializeMessage(dart.map( {command: 'log', msg: msg}))); 1065 exports._globalState.mainManager.postMessage(_serializeMessage(dart.map( {command: 'log', msg: msg})));
1066 } else { 1066 } else {
1067 try { 1067 try {
1068 IsolateNatives._consoleLog(msg); 1068 IsolateNatives._consoleLog(msg);
1069 } catch (e) { 1069 } catch (e) {
1070 let trace = dart.stackTrace(e); 1070 let trace = dart.stackTrace(e);
1071 throw new core.Exception(trace); 1071 throw core.Exception.new(trace);
1072 } 1072 }
1073 1073
1074 } 1074 }
1075 } 1075 }
1076 static _consoleLog(msg) { 1076 static _consoleLog(msg) {
1077 _js_helper.requiresPreamble(); 1077 _js_helper.requiresPreamble();
1078 self.console.log(msg); 1078 self.console.log(msg);
1079 } 1079 }
1080 static _getJSFunctionFromName(functionName) { 1080 static _getJSFunctionFromName(functionName) {
1081 let globalFunctionsContainer = _foreign_helper.JS_EMBEDDED_GLOBAL("", _js_ embedded_names.GLOBAL_FUNCTIONS); 1081 let globalFunctionsContainer = _foreign_helper.JS_EMBEDDED_GLOBAL("", _js_ embedded_names.GLOBAL_FUNCTIONS);
(...skipping 18 matching lines...) Expand all
1100 static spawnUri(uri, args, message, startPaused) { 1100 static spawnUri(uri, args, message, startPaused) {
1101 IsolateNatives.enableSpawnWorker = true; 1101 IsolateNatives.enableSpawnWorker = true;
1102 let isLight = false; 1102 let isLight = false;
1103 let isSpawnUri = true; 1103 let isSpawnUri = true;
1104 return IsolateNatives.spawn(null, dart.toString(uri), args, message, isLig ht, isSpawnUri, startPaused); 1104 return IsolateNatives.spawn(null, dart.toString(uri), args, message, isLig ht, isSpawnUri, startPaused);
1105 } 1105 }
1106 static spawn(functionName, uri, args, message, isLight, isSpawnUri, startPau sed) { 1106 static spawn(functionName, uri, args, message, isLight, isSpawnUri, startPau sed) {
1107 if (uri != null && dart.notNull(uri.endsWith(".dart"))) { 1107 if (uri != null && dart.notNull(uri.endsWith(".dart"))) {
1108 uri = dart.notNull(uri) + ".js"; 1108 uri = dart.notNull(uri) + ".js";
1109 } 1109 }
1110 let port = new isolate.ReceivePort(); 1110 let port = isolate.ReceivePort.new();
1111 let completer = new (async.Completer$(core.List))(); 1111 let completer = async.Completer$(core.List).new();
1112 port.first.then(dart.fn(msg => { 1112 port.first.then(dart.fn(msg => {
1113 if (dart.equals(dart.dindex(msg, 0), _SPAWNED_SIGNAL)) { 1113 if (dart.equals(dart.dindex(msg, 0), _SPAWNED_SIGNAL)) {
1114 completer.complete(msg); 1114 completer.complete(msg);
1115 } else { 1115 } else {
1116 dart.assert(dart.equals(dart.dindex(msg, 0), _SPAWN_FAILED_SIGNAL)); 1116 dart.assert(dart.equals(dart.dindex(msg, 0), _SPAWN_FAILED_SIGNAL));
1117 completer.completeError(dart.dindex(msg, 1)); 1117 completer.completeError(dart.dindex(msg, 1));
1118 } 1118 }
1119 })); 1119 }));
1120 let signalReply = port.sendPort; 1120 let signalReply = port.sendPort;
1121 if (dart.notNull(exports._globalState.useWorkers) && !dart.notNull(isLight )) { 1121 if (dart.notNull(exports._globalState.useWorkers) && !dart.notNull(isLight )) {
1122 IsolateNatives._startWorker(functionName, uri, args, message, isSpawnUri , startPaused, signalReply, dart.fn(message => completer.completeError(message), dart.void, [core.String])); 1122 IsolateNatives._startWorker(functionName, uri, args, message, isSpawnUri , startPaused, signalReply, dart.fn(message => completer.completeError(message), dart.void, [core.String]));
1123 } else { 1123 } else {
1124 IsolateNatives._startNonWorker(functionName, uri, args, message, isSpawn Uri, startPaused, signalReply); 1124 IsolateNatives._startNonWorker(functionName, uri, args, message, isSpawn Uri, startPaused, signalReply);
1125 } 1125 }
1126 return completer.future; 1126 return completer.future;
1127 } 1127 }
1128 static _startWorker(functionName, uri, args, message, isSpawnUri, startPause d, replyPort, onError) { 1128 static _startWorker(functionName, uri, args, message, isSpawnUri, startPause d, replyPort, onError) {
1129 if (args != null) 1129 if (args != null)
1130 args = new (core.List$(core.String)).from(args); 1130 args = core.List$(core.String).from(args);
1131 if (exports._globalState.isWorker) { 1131 if (exports._globalState.isWorker) {
1132 exports._globalState.mainManager.postMessage(_serializeMessage(dart.map( {command: 'spawn-worker', functionName: functionName, args: args, msg: message, uri: uri, isSpawnUri: isSpawnUri, startPaused: startPaused, replyPort: replyPort }))); 1132 exports._globalState.mainManager.postMessage(_serializeMessage(dart.map( {command: 'spawn-worker', functionName: functionName, args: args, msg: message, uri: uri, isSpawnUri: isSpawnUri, startPaused: startPaused, replyPort: replyPort })));
1133 } else { 1133 } else {
1134 IsolateNatives._spawnWorker(functionName, uri, args, message, isSpawnUri , startPaused, replyPort, onError); 1134 IsolateNatives._spawnWorker(functionName, uri, args, message, isSpawnUri , startPaused, replyPort, onError);
1135 } 1135 }
1136 } 1136 }
1137 static _startNonWorker(functionName, uri, args, message, isSpawnUri, startPa used, replyPort) { 1137 static _startNonWorker(functionName, uri, args, message, isSpawnUri, startPa used, replyPort) {
1138 if (uri != null) { 1138 if (uri != null) {
1139 throw new core.UnsupportedError("Currently spawnUri is not supported wit hout web workers."); 1139 throw new core.UnsupportedError("Currently spawnUri is not supported wit hout web workers.");
1140 } 1140 }
1141 message = _clone(message); 1141 message = _clone(message);
1142 if (args != null) 1142 if (args != null)
1143 args = new (core.List$(core.String)).from(args); 1143 args = core.List$(core.String).from(args);
1144 exports._globalState.topEventLoop.enqueue(new _IsolateContext(), dart.fn(( ) => { 1144 exports._globalState.topEventLoop.enqueue(new _IsolateContext(), dart.fn(( ) => {
1145 let func = IsolateNatives._getJSFunctionFromName(functionName); 1145 let func = IsolateNatives._getJSFunctionFromName(functionName);
1146 IsolateNatives._startIsolate(dart.as(func, core.Function), args, message , isSpawnUri, startPaused, replyPort); 1146 IsolateNatives._startIsolate(dart.as(func, core.Function), args, message , isSpawnUri, startPaused, replyPort);
1147 }), 'nonworker start'); 1147 }), 'nonworker start');
1148 } 1148 }
1149 static get currentIsolate() { 1149 static get currentIsolate() {
1150 let context = dart.as(_foreign_helper.JS_CURRENT_ISOLATE_CONTEXT(), _Isola teContext); 1150 let context = dart.as(_foreign_helper.JS_CURRENT_ISOLATE_CONTEXT(), _Isola teContext);
1151 return new isolate.Isolate(context.controlPort.sendPort, {pauseCapability: context.pauseCapability, terminateCapability: context.terminateCapability}); 1151 return new isolate.Isolate(context.controlPort.sendPort, {pauseCapability: context.pauseCapability, terminateCapability: context.terminateCapability});
1152 } 1152 }
1153 static _startIsolate(topLevel, args, message, isSpawnUri, startPaused, reply To) { 1153 static _startIsolate(topLevel, args, message, isSpawnUri, startPaused, reply To) {
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
1245 return new (core.Expando$(core.int))(); 1245 return new (core.Expando$(core.int))();
1246 } 1246 }
1247 }); 1247 });
1248 let _checkReplyTo = Symbol('_checkReplyTo'); 1248 let _checkReplyTo = Symbol('_checkReplyTo');
1249 class _BaseSendPort extends core.Object { 1249 class _BaseSendPort extends core.Object {
1250 _BaseSendPort(isolateId) { 1250 _BaseSendPort(isolateId) {
1251 this[_isolateId] = isolateId; 1251 this[_isolateId] = isolateId;
1252 } 1252 }
1253 [_checkReplyTo](replyTo) { 1253 [_checkReplyTo](replyTo) {
1254 if (dart.notNull(replyTo != null) && !dart.is(replyTo, _NativeJsSendPort) && !dart.is(replyTo, _WorkerSendPort)) { 1254 if (dart.notNull(replyTo != null) && !dart.is(replyTo, _NativeJsSendPort) && !dart.is(replyTo, _WorkerSendPort)) {
1255 throw new core.Exception("SendPort.send: Illegal replyTo port type"); 1255 throw core.Exception.new("SendPort.send: Illegal replyTo port type");
1256 } 1256 }
1257 } 1257 }
1258 } 1258 }
1259 _BaseSendPort[dart.implements] = () => [isolate.SendPort]; 1259 _BaseSendPort[dart.implements] = () => [isolate.SendPort];
1260 dart.setSignature(_BaseSendPort, { 1260 dart.setSignature(_BaseSendPort, {
1261 constructors: () => ({_BaseSendPort: [_BaseSendPort, [core.int]]}), 1261 constructors: () => ({_BaseSendPort: [_BaseSendPort, [core.int]]}),
1262 methods: () => ({[_checkReplyTo]: [dart.void, [isolate.SendPort]]}) 1262 methods: () => ({[_checkReplyTo]: [dart.void, [isolate.SendPort]]})
1263 }); 1263 });
1264 let _isClosed = Symbol('_isClosed'); 1264 let _isClosed = Symbol('_isClosed');
1265 let _add = Symbol('_add'); 1265 let _add = Symbol('_add');
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
1398 ReceivePortImpl() { 1398 ReceivePortImpl() {
1399 this.fromRawReceivePort(new RawReceivePortImpl(null)); 1399 this.fromRawReceivePort(new RawReceivePortImpl(null));
1400 } 1400 }
1401 weak() { 1401 weak() {
1402 this.fromRawReceivePort(new RawReceivePortImpl.weak(null)); 1402 this.fromRawReceivePort(new RawReceivePortImpl.weak(null));
1403 } 1403 }
1404 fromRawReceivePort(rawPort) { 1404 fromRawReceivePort(rawPort) {
1405 this[_rawPort] = rawPort; 1405 this[_rawPort] = rawPort;
1406 this[_controller] = null; 1406 this[_controller] = null;
1407 super.Stream(); 1407 super.Stream();
1408 this[_controller] = new async.StreamController({onCancel: dart.bind(this, 'close'), sync: true}); 1408 this[_controller] = async.StreamController.new({onCancel: dart.bind(this, 'close'), sync: true});
1409 this[_rawPort].handler = dart.bind(this[_controller], 'add'); 1409 this[_rawPort].handler = dart.bind(this[_controller], 'add');
1410 } 1410 }
1411 listen(onData, opts) { 1411 listen(onData, opts) {
1412 let onError = opts && 'onError' in opts ? opts.onError : null; 1412 let onError = opts && 'onError' in opts ? opts.onError : null;
1413 let onDone = opts && 'onDone' in opts ? opts.onDone : null; 1413 let onDone = opts && 'onDone' in opts ? opts.onDone : null;
1414 let cancelOnError = opts && 'cancelOnError' in opts ? opts.cancelOnError : null; 1414 let cancelOnError = opts && 'cancelOnError' in opts ? opts.cancelOnError : null;
1415 return this[_controller].stream.listen(onData, {onError: onError, onDone: onDone, cancelOnError: cancelOnError}); 1415 return this[_controller].stream.listen(onData, {onError: onError, onDone: onDone, cancelOnError: cancelOnError});
1416 } 1416 }
1417 close() { 1417 close() {
1418 this[_rawPort].close(); 1418 this[_rawPort].close();
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
1557 exports.leaveJsAsync = leaveJsAsync; 1557 exports.leaveJsAsync = leaveJsAsync;
1558 exports.isWorker = isWorker; 1558 exports.isWorker = isWorker;
1559 exports.startRootIsolate = startRootIsolate; 1559 exports.startRootIsolate = startRootIsolate;
1560 exports.IsolateNatives = IsolateNatives; 1560 exports.IsolateNatives = IsolateNatives;
1561 exports.RawReceivePortImpl = RawReceivePortImpl; 1561 exports.RawReceivePortImpl = RawReceivePortImpl;
1562 exports.ReceivePortImpl = ReceivePortImpl; 1562 exports.ReceivePortImpl = ReceivePortImpl;
1563 exports.TimerImpl = TimerImpl; 1563 exports.TimerImpl = TimerImpl;
1564 exports.hasTimer = hasTimer; 1564 exports.hasTimer = hasTimer;
1565 exports.CapabilityImpl = CapabilityImpl; 1565 exports.CapabilityImpl = CapabilityImpl;
1566 })(_isolate_helper, core, _native_typed_data, _interceptors, _js_helper, isolate , _foreign_helper, _js_embedded_names, collection, async); 1566 })(_isolate_helper, core, _native_typed_data, _interceptors, _js_helper, isolate , _foreign_helper, _js_embedded_names, collection, async);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698