| Index: lib/runtime/dart/_isolate_helper.js
|
| diff --git a/lib/runtime/dart/_isolate_helper.js b/lib/runtime/dart/_isolate_helper.js
|
| index 56ac0bc7c9048508b22a2d4a0e6902370299acc5..6dd604ccde5bab75e8164c98212c27eb37b9cc4a 100644
|
| --- a/lib/runtime/dart/_isolate_helper.js
|
| +++ b/lib/runtime/dart/_isolate_helper.js
|
| @@ -66,36 +66,36 @@ var _isolate_helper;
|
| throw new core.UnsupportedError(`${message} ${x}`);
|
| }
|
| makeRef(serializationId) {
|
| - return new List.from(["ref", serializationId]);
|
| + return new core.List.from(["ref", serializationId]);
|
| }
|
| isPrimitive(x) {
|
| - return dart.notNull(x === null) || dart.notNull(typeof x == string) || dart.notNull(dart.is(x, core.num)) || dart.notNull(typeof x == boolean);
|
| + return dart.notNull(x === null) || dart.notNull(typeof x == 'string') || dart.notNull(dart.is(x, core.num)) || dart.notNull(typeof x == 'boolean');
|
| }
|
| serializePrimitive(primitive) {
|
| return primitive;
|
| }
|
| serializeByteBuffer(buffer) {
|
| - return new List.from(["buffer", buffer]);
|
| + return new core.List.from(["buffer", buffer]);
|
| }
|
| serializeTypedData(data) {
|
| - return new List.from(["typed", data]);
|
| + return new core.List.from(["typed", data]);
|
| }
|
| serializeJSIndexable(indexable) {
|
| - dart.assert(!(typeof indexable == string));
|
| + dart.assert(!(typeof indexable == 'string'));
|
| let serialized = dart.as(this.serializeArray(dart.as(indexable, _interceptors.JSArray)), core.List);
|
| if (dart.is(indexable, _interceptors.JSFixedArray))
|
| - return new List.from(["fixed", serialized]);
|
| + return new core.List.from(["fixed", serialized]);
|
| if (dart.is(indexable, _interceptors.JSExtendableArray))
|
| - return new List.from(["extendable", serialized]);
|
| + return new core.List.from(["extendable", serialized]);
|
| if (dart.is(indexable, _interceptors.JSMutableArray))
|
| - return new List.from(["mutable", serialized]);
|
| + return new core.List.from(["mutable", serialized]);
|
| if (dart.is(indexable, _interceptors.JSArray))
|
| - return new List.from(["const", serialized]);
|
| + return new core.List.from(["const", serialized]);
|
| this.unsupported(indexable, "Can't serialize indexable: ");
|
| return null;
|
| }
|
| serializeArray(x) {
|
| - let serialized = new List.from([]);
|
| + let serialized = new core.List.from([]);
|
| serialized.length = x.length;
|
| for (let i = 0; dart.notNull(i) < dart.notNull(x.length); i = dart.notNull(i) + 1) {
|
| serialized.set(i, this.serialize(x.get(i)));
|
| @@ -110,49 +110,49 @@ var _isolate_helper;
|
| }
|
| serializeMap(x) {
|
| let serializeTearOff = this.serialize;
|
| - return new List.from(['map', x.keys.map(dart.as(serializeTearOff, dart.throw_("Unimplemented type (dynamic) → dynamic"))).toList(), x.values.map(dart.as(serializeTearOff, dart.throw_("Unimplemented type (dynamic) → dynamic"))).toList()]);
|
| + return new core.List.from(['map', x.keys.map(dart.as(serializeTearOff, dart.throw_("Unimplemented type (dynamic) → dynamic"))).toList(), x.values.map(dart.as(serializeTearOff, dart.throw_("Unimplemented type (dynamic) → dynamic"))).toList()]);
|
| }
|
| serializeJSObject(x) {
|
| if (!!x.constructor && x.constructor !== Object) {
|
| this.unsupported(x, "Only plain JS Objects are supported:");
|
| }
|
| let keys = dart.as(Object.keys(x), core.List);
|
| - let values = new List.from([]);
|
| + let values = new core.List.from([]);
|
| values.length = keys.length;
|
| for (let i = 0; dart.notNull(i) < dart.notNull(keys.length); i = dart.notNull(i) + 1) {
|
| values.set(i, this.serialize(x[keys.get(i)]));
|
| }
|
| - return new List.from(['js-object', keys, values]);
|
| + return new core.List.from(['js-object', keys, values]);
|
| }
|
| serializeWorkerSendPort(x) {
|
| if (this[_serializeSendPorts]) {
|
| - return new List.from(['sendport', x[_workerId], x[_isolateId], x[_receivePortId]]);
|
| + return new core.List.from(['sendport', x[_workerId], x[_isolateId], x[_receivePortId]]);
|
| }
|
| - return new List.from(['raw sendport', x]);
|
| + return new core.List.from(['raw sendport', x]);
|
| }
|
| serializeJsSendPort(x) {
|
| if (this[_serializeSendPorts]) {
|
| let workerId = exports._globalState.currentManagerId;
|
| - return new List.from(['sendport', workerId, x[_isolateId], x[_receivePort][_id]]);
|
| + return new core.List.from(['sendport', workerId, x[_isolateId], x[_receivePort][_id]]);
|
| }
|
| - return new List.from(['raw sendport', x]);
|
| + return new core.List.from(['raw sendport', x]);
|
| }
|
| serializeCapability(x) {
|
| - return new List.from(['capability', x[_id]]);
|
| + return new core.List.from(['capability', x[_id]]);
|
| }
|
| serializeClosure(x) {
|
| let name = IsolateNatives._getJSFunctionName(x);
|
| if (name === null) {
|
| this.unsupported(x, "Closures can't be transmitted:");
|
| }
|
| - return new List.from(['function', name]);
|
| + return new core.List.from(['function', name]);
|
| }
|
| serializeDartObject(x) {
|
| let classExtractor = _foreign_helper.JS_EMBEDDED_GLOBAL('', _js_embedded_names.CLASS_ID_EXTRACTOR);
|
| let fieldsExtractor = _foreign_helper.JS_EMBEDDED_GLOBAL('', _js_embedded_names.CLASS_FIELDS_EXTRACTOR);
|
| let classId = classExtractor(x);
|
| let fields = dart.as(fieldsExtractor(x), core.List);
|
| - return new List.from(['dart', classId, this.serializeArrayInPlace(dart.as(fields, _interceptors.JSArray))]);
|
| + return new core.List.from(['dart', classId, this.serializeArrayInPlace(dart.as(fields, _interceptors.JSArray))]);
|
| }
|
| }
|
| let _adjustSendPorts = Symbol('_adjustSendPorts');
|
| @@ -169,37 +169,65 @@ var _isolate_helper;
|
| throw new core.ArgumentError(`Bad serialized message: ${x}`);
|
| switch (dart.dload(x, 'first')) {
|
| case "ref":
|
| + {
|
| return this.deserializeRef(x);
|
| + }
|
| case "buffer":
|
| + {
|
| return this.deserializeByteBuffer(x);
|
| + }
|
| case "typed":
|
| + {
|
| return this.deserializeTypedData(x);
|
| + }
|
| case "fixed":
|
| + {
|
| return this.deserializeFixed(x);
|
| + }
|
| case "extendable":
|
| + {
|
| return this.deserializeExtendable(x);
|
| + }
|
| case "mutable":
|
| + {
|
| return this.deserializeMutable(x);
|
| + }
|
| case "const":
|
| + {
|
| return this.deserializeConst(x);
|
| + }
|
| case "map":
|
| + {
|
| return this.deserializeMap(x);
|
| + }
|
| case "sendport":
|
| + {
|
| return this.deserializeSendPort(x);
|
| + }
|
| case "raw sendport":
|
| + {
|
| return this.deserializeRawSendPort(x);
|
| + }
|
| case "js-object":
|
| + {
|
| return this.deserializeJSObject(x);
|
| + }
|
| case "function":
|
| + {
|
| return this.deserializeClosure(x);
|
| + }
|
| case "dart":
|
| + {
|
| return this.deserializeDartObject(x);
|
| + }
|
| default:
|
| + {
|
| throw `couldn't deserialize: ${x}`;
|
| + }
|
| }
|
| }
|
| isPrimitive(x) {
|
| - return dart.notNull(x === null) || dart.notNull(typeof x == string) || dart.notNull(dart.is(x, core.num)) || dart.notNull(typeof x == boolean);
|
| + return dart.notNull(x === null) || dart.notNull(typeof x == 'string') || dart.notNull(dart.is(x, core.num)) || dart.notNull(typeof x == 'boolean');
|
| }
|
| deserializePrimitive(x) {
|
| return x;
|
| @@ -347,7 +375,7 @@ var _isolate_helper;
|
| function startRootIsolate(entry, args) {
|
| args = args;
|
| if (args === null)
|
| - args = new List.from([]);
|
| + args = new core.List.from([]);
|
| if (!dart.is(args, core.List)) {
|
| throw new core.ArgumentError(`Arguments to main must be a List: ${args}`);
|
| }
|
| @@ -456,7 +484,7 @@ var _isolate_helper;
|
| this.controlPort = new RawReceivePortImpl._controlPort();
|
| this.pauseCapability = new isolate.Capability();
|
| this.terminateCapability = new isolate.Capability();
|
| - this.delayedEvents = dart.as(new List.from([]), core.List$(_IsolateEvent));
|
| + this.delayedEvents = dart.as(new core.List.from([]), core.List$(_IsolateEvent));
|
| this.pauseTokens = dart.as(new core.Set(), core.Set$(isolate.Capability));
|
| this.errorPorts = dart.as(new core.Set(), core.Set$(isolate.SendPort));
|
| this.initialized = false;
|
| @@ -490,7 +518,7 @@ var _isolate_helper;
|
| }
|
| addDoneListener(responsePort) {
|
| if (this.doneHandlers === null) {
|
| - this.doneHandlers = new List.from([]);
|
| + this.doneHandlers = new core.List.from([]);
|
| }
|
| if (dart.dinvoke(this.doneHandlers, 'contains', responsePort))
|
| return;
|
| @@ -605,32 +633,50 @@ var _isolate_helper;
|
| handleControlMessage(message) {
|
| switch (dart.dindex(message, 0)) {
|
| case "pause":
|
| + {
|
| this.addPause(dart.as(dart.dindex(message, 1), isolate.Capability), dart.as(dart.dindex(message, 2), isolate.Capability));
|
| break;
|
| + }
|
| case "resume":
|
| + {
|
| this.removePause(dart.as(dart.dindex(message, 1), isolate.Capability));
|
| break;
|
| + }
|
| case 'add-ondone':
|
| + {
|
| this.addDoneListener(dart.as(dart.dindex(message, 1), isolate.SendPort));
|
| break;
|
| + }
|
| case 'remove-ondone':
|
| + {
|
| this.removeDoneListener(dart.as(dart.dindex(message, 1), isolate.SendPort));
|
| break;
|
| + }
|
| case 'set-errors-fatal':
|
| + {
|
| this.setErrorsFatal(dart.as(dart.dindex(message, 1), isolate.Capability), dart.as(dart.dindex(message, 2), core.bool));
|
| break;
|
| + }
|
| case "ping":
|
| + {
|
| this.handlePing(dart.as(dart.dindex(message, 1), isolate.SendPort), dart.as(dart.dindex(message, 2), core.int));
|
| break;
|
| + }
|
| case "kill":
|
| + {
|
| this.handleKill(dart.as(dart.dindex(message, 1), isolate.Capability), dart.as(dart.dindex(message, 2), core.int));
|
| break;
|
| + }
|
| case "getErrors":
|
| + {
|
| this.addErrorListener(dart.as(dart.dindex(message, 1), isolate.SendPort));
|
| break;
|
| + }
|
| case "stopErrors":
|
| + {
|
| this.removeErrorListener(dart.as(dart.dindex(message, 1), isolate.SendPort));
|
| break;
|
| + }
|
| default:
|
| }
|
| }
|
| @@ -840,6 +886,7 @@ var _isolate_helper;
|
| let msg = _deserializeMessage(_getEventData(e));
|
| switch (dart.dindex(msg, 'command')) {
|
| case 'start':
|
| + {
|
| exports._globalState.currentManagerId = dart.as(dart.dindex(msg, 'id'), core.int);
|
| let functionName = dart.as(dart.dindex(msg, 'functionName'), core.String);
|
| let entryPoint = dart.as(functionName === null ? exports._globalState.entry : _getJSFunctionFromName(functionName), core.Function);
|
| @@ -855,34 +902,47 @@ var _isolate_helper;
|
| exports._globalState.currentContext = context;
|
| exports._globalState.topEventLoop.run();
|
| break;
|
| + }
|
| case 'spawn-worker':
|
| + {
|
| if (enableSpawnWorker !== null)
|
| handleSpawnWorkerRequest(msg);
|
| break;
|
| + }
|
| case 'message':
|
| + {
|
| let port = dart.as(dart.dindex(msg, 'port'), isolate.SendPort);
|
| if (port !== null) {
|
| dart.dinvoke(dart.dindex(msg, 'port'), 'send', dart.dindex(msg, 'msg'));
|
| }
|
| exports._globalState.topEventLoop.run();
|
| break;
|
| + }
|
| case 'close':
|
| + {
|
| exports._globalState.managers.remove(workerIds.get(sender));
|
| sender.terminate();
|
| exports._globalState.topEventLoop.run();
|
| break;
|
| + }
|
| case 'log':
|
| + {
|
| _log(dart.dindex(msg, 'msg'));
|
| break;
|
| + }
|
| case 'print':
|
| + {
|
| if (exports._globalState.isWorker) {
|
| exports._globalState.mainManager.postMessage(_serializeMessage(dart.map({command: 'print', msg: msg})));
|
| } else {
|
| core.print(dart.dindex(msg, 'msg'));
|
| }
|
| break;
|
| + }
|
| case 'error':
|
| + {
|
| throw dart.dindex(msg, 'msg');
|
| + }
|
| }
|
| }
|
| static handleSpawnWorkerRequest(msg) {
|
| @@ -891,7 +951,7 @@ var _isolate_helper;
|
| dart.dinvoke(replyPort, 'send', msg);
|
| }, "(List<dynamic>) → dynamic"), {
|
| onError: (errorMessage) => {
|
| - dart.dinvoke(replyPort, 'send', new List.from([_SPAWN_FAILED_SIGNAL, errorMessage]));
|
| + dart.dinvoke(replyPort, 'send', new core.List.from([_SPAWN_FAILED_SIGNAL, errorMessage]));
|
| }
|
| });
|
| }
|
| @@ -987,7 +1047,7 @@ var _isolate_helper;
|
| static [_startIsolate$](topLevel, args, message, isSpawnUri, startPaused, replyTo) {
|
| let context = dart.as(_foreign_helper.JS_CURRENT_ISOLATE_CONTEXT(), _IsolateContext);
|
| _js_helper.Primitives.initializeStatics(context.id);
|
| - replyTo.send(new List.from([_SPAWNED_SIGNAL, context.controlPort.sendPort, context.pauseCapability, context.terminateCapability]));
|
| + replyTo.send(new core.List.from([_SPAWNED_SIGNAL, context.controlPort.sendPort, context.pauseCapability, context.terminateCapability]));
|
| // Function runStartFunction: () → void
|
| function runStartFunction() {
|
| context.initialized = true;
|
|
|