blob: e757abc8b3226de3c80b69532b9071d9b2379cbd [file] [log] [blame] [edit]
dart_library.library('dart/isolate', null, /* Imports */[
"dart/_runtime",
'dart/core',
'dart/async'
], /* Lazy imports */[
'dart/_isolate_helper'
], function(exports, dart, core, async, _isolate_helper) {
'use strict';
let dartx = dart.dartx;
class Capability extends core.Object {
static new() {
return new _isolate_helper.CapabilityImpl();
}
}
dart.setSignature(Capability, {
constructors: () => ({new: [Capability, []]})
});
class IsolateSpawnException extends core.Object {
IsolateSpawnException(message) {
this.message = message;
}
toString() {
return `IsolateSpawnException: ${this.message}`;
}
}
IsolateSpawnException[dart.implements] = () => [core.Exception];
dart.setSignature(IsolateSpawnException, {
constructors: () => ({IsolateSpawnException: [IsolateSpawnException, [core.String]]})
});
let _pause = Symbol('_pause');
class Isolate extends core.Object {
Isolate(controlPort, opts) {
let pauseCapability = opts && 'pauseCapability' in opts ? opts.pauseCapability : null;
let terminateCapability = opts && 'terminateCapability' in opts ? opts.terminateCapability : null;
this.controlPort = controlPort;
this.pauseCapability = pauseCapability;
this.terminateCapability = terminateCapability;
}
static get current() {
return Isolate._currentIsolateCache;
}
static spawn(entryPoint, message, opts) {
let paused = opts && 'paused' in opts ? opts.paused : false;
try {
return _isolate_helper.IsolateNatives.spawnFunction(entryPoint, message, paused).then(dart.fn(msg => new Isolate(dart.as(dart.dindex(msg, 1), SendPort), {pauseCapability: dart.as(dart.dindex(msg, 2), Capability), terminateCapability: dart.as(dart.dindex(msg, 3), Capability)}), Isolate, [dart.dynamic]));
} catch (e) {
let st = dart.stackTrace(e);
return async.Future$(Isolate).error(e, st);
}
}
static spawnUri(uri, args, message, opts) {
let paused = opts && 'paused' in opts ? opts.paused : false;
let packageRoot = opts && 'packageRoot' in opts ? opts.packageRoot : null;
if (packageRoot != null)
dart.throw(new core.UnimplementedError("packageRoot"));
try {
if (dart.is(args, core.List)) {
for (let i = 0; dart.notNull(i) < dart.notNull(args[dartx.length]); i = dart.notNull(i) + 1) {
if (!(typeof args[dartx.get](i) == 'string')) {
dart.throw(new core.ArgumentError(`Args must be a list of Strings ${args}`));
}
}
} else if (args != null) {
dart.throw(new core.ArgumentError(`Args must be a list of Strings ${args}`));
}
return _isolate_helper.IsolateNatives.spawnUri(uri, args, message, paused).then(dart.fn(msg => new Isolate(dart.as(dart.dindex(msg, 1), SendPort), {pauseCapability: dart.as(dart.dindex(msg, 2), Capability), terminateCapability: dart.as(dart.dindex(msg, 3), Capability)}), Isolate, [dart.dynamic]));
} catch (e) {
let st = dart.stackTrace(e);
return async.Future$(Isolate).error(e, st);
}
}
pause(resumeCapability) {
if (resumeCapability === void 0)
resumeCapability = null;
if (resumeCapability == null)
resumeCapability = Capability.new();
this[_pause](resumeCapability);
return resumeCapability;
}
[_pause](resumeCapability) {
let message = core.List.new(3);
message[dartx.set](0, "pause");
message[dartx.set](1, this.pauseCapability);
message[dartx.set](2, resumeCapability);
this.controlPort.send(message);
}
resume(resumeCapability) {
let message = core.List.new(2);
message[dartx.set](0, "resume");
message[dartx.set](1, resumeCapability);
this.controlPort.send(message);
}
addOnExitListener(responsePort) {
let message = core.List.new(2);
message[dartx.set](0, "add-ondone");
message[dartx.set](1, responsePort);
this.controlPort.send(message);
}
removeOnExitListener(responsePort) {
let message = core.List.new(2);
message[dartx.set](0, "remove-ondone");
message[dartx.set](1, responsePort);
this.controlPort.send(message);
}
setErrorsFatal(errorsAreFatal) {
let message = core.List.new(3);
message[dartx.set](0, "set-errors-fatal");
message[dartx.set](1, this.terminateCapability);
message[dartx.set](2, errorsAreFatal);
this.controlPort.send(message);
}
kill(priority) {
if (priority === void 0)
priority = Isolate.BEFORE_NEXT_EVENT;
this.controlPort.send(["kill", this.terminateCapability, priority]);
}
ping(responsePort, pingType) {
if (pingType === void 0)
pingType = Isolate.IMMEDIATE;
let message = core.List.new(3);
message[dartx.set](0, "ping");
message[dartx.set](1, responsePort);
message[dartx.set](2, pingType);
this.controlPort.send(message);
}
addErrorListener(port) {
let message = core.List.new(2);
message[dartx.set](0, "getErrors");
message[dartx.set](1, port);
this.controlPort.send(message);
}
removeErrorListener(port) {
let message = core.List.new(2);
message[dartx.set](0, "stopErrors");
message[dartx.set](1, port);
this.controlPort.send(message);
}
get errors() {
let controller = null;
let port = null;
function handleError(message) {
let errorDescription = dart.as(dart.dindex(message, 0), core.String);
let stackDescription = dart.as(dart.dindex(message, 1), core.String);
let error = new RemoteError(errorDescription, stackDescription);
controller.addError(error, error.stackTrace);
}
dart.fn(handleError, dart.void, [dart.dynamic]);
controller = async.StreamController.broadcast({sync: true, onListen: dart.fn((() => {
port = RawReceivePort.new(handleError);
this.addErrorListener(port.sendPort);
}).bind(this)), onCancel: dart.fn((() => {
this.removeErrorListener(port.sendPort);
port.close();
port = null;
}).bind(this))});
return controller.stream;
}
}
dart.setSignature(Isolate, {
constructors: () => ({Isolate: [Isolate, [SendPort], {pauseCapability: Capability, terminateCapability: Capability}]}),
methods: () => ({
pause: [Capability, [], [Capability]],
[_pause]: [dart.void, [Capability]],
resume: [dart.void, [Capability]],
addOnExitListener: [dart.void, [SendPort]],
removeOnExitListener: [dart.void, [SendPort]],
setErrorsFatal: [dart.void, [core.bool]],
kill: [dart.void, [], [core.int]],
ping: [dart.void, [SendPort], [core.int]],
addErrorListener: [dart.void, [SendPort]],
removeErrorListener: [dart.void, [SendPort]]
}),
statics: () => ({
spawn: [async.Future$(Isolate), [dart.functionType(dart.void, [dart.dynamic]), dart.dynamic], {paused: core.bool}],
spawnUri: [async.Future$(Isolate), [core.Uri, core.List$(core.String), dart.dynamic], {paused: core.bool, packageRoot: core.Uri}]
}),
names: ['spawn', 'spawnUri']
});
Isolate.IMMEDIATE = 0;
Isolate.BEFORE_NEXT_EVENT = 1;
Isolate.AS_EVENT = 2;
dart.defineLazyProperties(Isolate, {
get _currentIsolateCache() {
return _isolate_helper.IsolateNatives.currentIsolate;
}
});
class SendPort extends core.Object {}
SendPort[dart.implements] = () => [Capability];
class ReceivePort extends core.Object {
static new() {
return new _isolate_helper.ReceivePortImpl();
}
static fromRawReceivePort(rawPort) {
return new _isolate_helper.ReceivePortImpl.fromRawReceivePort(rawPort);
}
}
ReceivePort[dart.implements] = () => [async.Stream];
dart.setSignature(ReceivePort, {
constructors: () => ({
new: [ReceivePort, []],
fromRawReceivePort: [ReceivePort, [RawReceivePort]]
})
});
class RawReceivePort extends core.Object {
static new(handler) {
if (handler === void 0)
handler = null;
return new _isolate_helper.RawReceivePortImpl(handler);
}
}
dart.setSignature(RawReceivePort, {
constructors: () => ({new: [RawReceivePort, [], [dart.functionType(dart.void, [dart.dynamic])]]})
});
class _IsolateUnhandledException extends core.Object {
_IsolateUnhandledException(message, source, stackTrace) {
this.message = message;
this.source = source;
this.stackTrace = stackTrace;
}
toString() {
return 'IsolateUnhandledException: exception while handling message: ' + `${this.message} \n ` + `${dart.toString(this.source)[dartx.replaceAll]("\n", "\n ")}\n` + 'original stack trace:\n ' + `${dart.toString(this.stackTrace)[dartx.replaceAll]("\n", "\n ")}`;
}
}
_IsolateUnhandledException[dart.implements] = () => [core.Exception];
dart.setSignature(_IsolateUnhandledException, {
constructors: () => ({_IsolateUnhandledException: [_IsolateUnhandledException, [dart.dynamic, dart.dynamic, core.StackTrace]]})
});
let _description = Symbol('_description');
class RemoteError extends core.Object {
RemoteError(description, stackDescription) {
this[_description] = description;
this.stackTrace = new _RemoteStackTrace(stackDescription);
}
toString() {
return this[_description];
}
}
RemoteError[dart.implements] = () => [core.Error];
dart.setSignature(RemoteError, {
constructors: () => ({RemoteError: [RemoteError, [core.String, core.String]]})
});
let _trace = Symbol('_trace');
class _RemoteStackTrace extends core.Object {
_RemoteStackTrace(trace) {
this[_trace] = trace;
}
toString() {
return this[_trace];
}
}
_RemoteStackTrace[dart.implements] = () => [core.StackTrace];
dart.setSignature(_RemoteStackTrace, {
constructors: () => ({_RemoteStackTrace: [_RemoteStackTrace, [core.String]]})
});
// Exports:
exports.Capability = Capability;
exports.IsolateSpawnException = IsolateSpawnException;
exports.Isolate = Isolate;
exports.SendPort = SendPort;
exports.ReceivePort = ReceivePort;
exports.RawReceivePort = RawReceivePort;
exports.RemoteError = RemoteError;
});