OLD | NEW |
1 dart_library.library('dart/isolate', null, /* Imports */[ | 1 dart_library.library('dart/isolate', null, /* Imports */[ |
2 "dart_runtime/dart", | 2 "dart_runtime/dart", |
3 'dart/core', | 3 'dart/core', |
4 'dart/async' | 4 'dart/async' |
5 ], /* Lazy imports */[ | 5 ], /* Lazy imports */[ |
6 'dart/_isolate_helper' | 6 'dart/_isolate_helper' |
7 ], function(exports, dart, core, async, _isolate_helper) { | 7 ], function(exports, dart, core, async, _isolate_helper) { |
8 'use strict'; | 8 'use strict'; |
9 let dartx = dart.dartx; | 9 let dartx = dart.dartx; |
10 class Capability extends core.Object { | 10 class Capability extends core.Object { |
(...skipping 19 matching lines...) Expand all Loading... |
30 let _pause = Symbol('_pause'); | 30 let _pause = Symbol('_pause'); |
31 class Isolate extends core.Object { | 31 class Isolate extends core.Object { |
32 Isolate(controlPort, opts) { | 32 Isolate(controlPort, opts) { |
33 let pauseCapability = opts && 'pauseCapability' in opts ? opts.pauseCapabi
lity : null; | 33 let pauseCapability = opts && 'pauseCapability' in opts ? opts.pauseCapabi
lity : null; |
34 let terminateCapability = opts && 'terminateCapability' in opts ? opts.ter
minateCapability : null; | 34 let terminateCapability = opts && 'terminateCapability' in opts ? opts.ter
minateCapability : null; |
35 this.controlPort = controlPort; | 35 this.controlPort = controlPort; |
36 this.pauseCapability = pauseCapability; | 36 this.pauseCapability = pauseCapability; |
37 this.terminateCapability = terminateCapability; | 37 this.terminateCapability = terminateCapability; |
38 } | 38 } |
39 static get current() { | 39 static get current() { |
40 return Isolate._currentIsolateCache; | 40 return dart.as(Isolate._currentIsolateCache, Isolate); |
41 } | 41 } |
42 static spawn(entryPoint, message, opts) { | 42 static spawn(entryPoint, message, opts) { |
43 let paused = opts && 'paused' in opts ? opts.paused : false; | 43 let paused = opts && 'paused' in opts ? opts.paused : false; |
44 try { | 44 try { |
45 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])); | 45 return dart.as(dart.dcall(dart.dcall(_isolate_helper.IsolateNatives.spaw
nFunction, 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)}), Is
olate, [dart.dynamic])), async.Future$(Isolate)); |
46 } catch (e) { | 46 } catch (e) { |
47 let st = dart.stackTrace(e); | 47 let st = dart.stackTrace(e); |
48 return async.Future$(Isolate).error(e, st); | 48 return async.Future$(Isolate).error(e, st); |
49 } | 49 } |
50 | 50 |
51 } | 51 } |
52 static spawnUri(uri, args, message, opts) { | 52 static spawnUri(uri, args, message, opts) { |
53 let paused = opts && 'paused' in opts ? opts.paused : false; | 53 let paused = opts && 'paused' in opts ? opts.paused : false; |
54 let packageRoot = opts && 'packageRoot' in opts ? opts.packageRoot : null; | 54 let packageRoot = opts && 'packageRoot' in opts ? opts.packageRoot : null; |
55 if (packageRoot != null) | 55 if (packageRoot != null) |
56 dart.throw(new core.UnimplementedError("packageRoot")); | 56 dart.throw(new core.UnimplementedError("packageRoot")); |
57 try { | 57 try { |
58 if (dart.is(args, core.List)) { | 58 if (dart.is(args, core.List)) { |
59 for (let i = 0; dart.notNull(i) < dart.notNull(args[dartx.length]); i
= dart.notNull(i) + 1) { | 59 for (let i = 0; dart.notNull(i) < dart.notNull(args[dartx.length]); i
= dart.notNull(i) + 1) { |
60 if (!(typeof args[dartx.get](i) == 'string')) { | 60 if (!(typeof args[dartx.get](i) == 'string')) { |
61 dart.throw(new core.ArgumentError(`Args must be a list of Strings
${args}`)); | 61 dart.throw(new core.ArgumentError(`Args must be a list of Strings
${args}`)); |
62 } | 62 } |
63 } | 63 } |
64 } else if (args != null) { | 64 } else if (args != null) { |
65 dart.throw(new core.ArgumentError(`Args must be a list of Strings ${ar
gs}`)); | 65 dart.throw(new core.ArgumentError(`Args must be a list of Strings ${ar
gs}`)); |
66 } | 66 } |
67 return _isolate_helper.IsolateNatives.spawnUri(uri, args, message, pause
d).then(dart.fn(msg => new Isolate(dart.as(dart.dindex(msg, 1), SendPort), {paus
eCapability: dart.as(dart.dindex(msg, 2), Capability), terminateCapability: dart
.as(dart.dindex(msg, 3), Capability)}), Isolate, [dart.dynamic])); | 67 return dart.as(dart.dcall(dart.dcall(_isolate_helper.IsolateNatives.spaw
nUri, uri, args, message, paused).then, dart.fn(msg => new Isolate(dart.as(dart.
dindex(msg, 1), SendPort), {pauseCapability: dart.as(dart.dindex(msg, 2), Capabi
lity), terminateCapability: dart.as(dart.dindex(msg, 3), Capability)}), Isolate,
[dart.dynamic])), async.Future$(Isolate)); |
68 } catch (e) { | 68 } catch (e) { |
69 let st = dart.stackTrace(e); | 69 let st = dart.stackTrace(e); |
70 return async.Future$(Isolate).error(e, st); | 70 return async.Future$(Isolate).error(e, st); |
71 } | 71 } |
72 | 72 |
73 } | 73 } |
74 pause(resumeCapability) { | 74 pause(resumeCapability) { |
75 if (resumeCapability === void 0) | 75 if (resumeCapability === void 0) |
76 resumeCapability = null; | 76 resumeCapability = null; |
77 if (resumeCapability == null) | 77 if (resumeCapability == null) |
78 resumeCapability = Capability.new(); | 78 resumeCapability = Capability.new(); |
79 this[_pause](resumeCapability); | 79 dart.dcall(this[_pause], resumeCapability); |
80 return resumeCapability; | 80 return resumeCapability; |
81 } | 81 } |
82 [_pause](resumeCapability) { | 82 [_pause](resumeCapability) { |
83 let message = core.List.new(3); | 83 let message = core.List.new(3); |
84 message[dartx.set](0, "pause"); | 84 message[dartx.set](0, "pause"); |
85 message[dartx.set](1, this.pauseCapability); | 85 message[dartx.set](1, this.pauseCapability); |
86 message[dartx.set](2, resumeCapability); | 86 message[dartx.set](2, resumeCapability); |
87 this.controlPort.send(message); | 87 dart.dcall(this.controlPort.send, message); |
88 } | 88 } |
89 resume(resumeCapability) { | 89 resume(resumeCapability) { |
90 let message = core.List.new(2); | 90 let message = core.List.new(2); |
91 message[dartx.set](0, "resume"); | 91 message[dartx.set](0, "resume"); |
92 message[dartx.set](1, resumeCapability); | 92 message[dartx.set](1, resumeCapability); |
93 this.controlPort.send(message); | 93 dart.dcall(this.controlPort.send, message); |
94 } | 94 } |
95 addOnExitListener(responsePort) { | 95 addOnExitListener(responsePort) { |
96 let message = core.List.new(2); | 96 let message = core.List.new(2); |
97 message[dartx.set](0, "add-ondone"); | 97 message[dartx.set](0, "add-ondone"); |
98 message[dartx.set](1, responsePort); | 98 message[dartx.set](1, responsePort); |
99 this.controlPort.send(message); | 99 dart.dcall(this.controlPort.send, message); |
100 } | 100 } |
101 removeOnExitListener(responsePort) { | 101 removeOnExitListener(responsePort) { |
102 let message = core.List.new(2); | 102 let message = core.List.new(2); |
103 message[dartx.set](0, "remove-ondone"); | 103 message[dartx.set](0, "remove-ondone"); |
104 message[dartx.set](1, responsePort); | 104 message[dartx.set](1, responsePort); |
105 this.controlPort.send(message); | 105 dart.dcall(this.controlPort.send, message); |
106 } | 106 } |
107 setErrorsFatal(errorsAreFatal) { | 107 setErrorsFatal(errorsAreFatal) { |
108 let message = core.List.new(3); | 108 let message = core.List.new(3); |
109 message[dartx.set](0, "set-errors-fatal"); | 109 message[dartx.set](0, "set-errors-fatal"); |
110 message[dartx.set](1, this.terminateCapability); | 110 message[dartx.set](1, this.terminateCapability); |
111 message[dartx.set](2, errorsAreFatal); | 111 message[dartx.set](2, errorsAreFatal); |
112 this.controlPort.send(message); | 112 dart.dcall(this.controlPort.send, message); |
113 } | 113 } |
114 kill(priority) { | 114 kill(priority) { |
115 if (priority === void 0) | 115 if (priority === void 0) |
116 priority = Isolate.BEFORE_NEXT_EVENT; | 116 priority = Isolate.BEFORE_NEXT_EVENT; |
117 this.controlPort.send(["kill", this.terminateCapability, priority]); | 117 dart.dcall(this.controlPort.send, ["kill", this.terminateCapability, prior
ity]); |
118 } | 118 } |
119 ping(responsePort, pingType) { | 119 ping(responsePort, pingType) { |
120 if (pingType === void 0) | 120 if (pingType === void 0) |
121 pingType = Isolate.IMMEDIATE; | 121 pingType = Isolate.IMMEDIATE; |
122 let message = core.List.new(3); | 122 let message = core.List.new(3); |
123 message[dartx.set](0, "ping"); | 123 message[dartx.set](0, "ping"); |
124 message[dartx.set](1, responsePort); | 124 message[dartx.set](1, responsePort); |
125 message[dartx.set](2, pingType); | 125 message[dartx.set](2, pingType); |
126 this.controlPort.send(message); | 126 dart.dcall(this.controlPort.send, message); |
127 } | 127 } |
128 addErrorListener(port) { | 128 addErrorListener(port) { |
129 let message = core.List.new(2); | 129 let message = core.List.new(2); |
130 message[dartx.set](0, "getErrors"); | 130 message[dartx.set](0, "getErrors"); |
131 message[dartx.set](1, port); | 131 message[dartx.set](1, port); |
132 this.controlPort.send(message); | 132 dart.dcall(this.controlPort.send, message); |
133 } | 133 } |
134 removeErrorListener(port) { | 134 removeErrorListener(port) { |
135 let message = core.List.new(2); | 135 let message = core.List.new(2); |
136 message[dartx.set](0, "stopErrors"); | 136 message[dartx.set](0, "stopErrors"); |
137 message[dartx.set](1, port); | 137 message[dartx.set](1, port); |
138 this.controlPort.send(message); | 138 dart.dcall(this.controlPort.send, message); |
139 } | 139 } |
140 get errors() { | 140 get errors() { |
141 let controller = null; | 141 let controller = null; |
142 let port = null; | 142 let port = null; |
143 function handleError(message) { | 143 function handleError(message) { |
144 let errorDescription = dart.as(dart.dindex(message, 0), core.String); | 144 let errorDescription = dart.as(dart.dindex(message, 0), core.String); |
145 let stackDescription = dart.as(dart.dindex(message, 1), core.String); | 145 let stackDescription = dart.as(dart.dindex(message, 1), core.String); |
146 let error = new RemoteError(errorDescription, stackDescription); | 146 let error = new RemoteError(errorDescription, stackDescription); |
147 controller.addError(error, error.stackTrace); | 147 dart.dcall(controller.addError, error, dart.dload(error, 'stackTrace')); |
148 } | 148 } |
149 dart.fn(handleError, dart.void, [dart.dynamic]); | 149 dart.fn(handleError, dart.void, [dart.dynamic]); |
150 controller = async.StreamController.broadcast({sync: true, onListen: dart.
fn((() => { | 150 controller = async.StreamController.broadcast({sync: true, onListen: dart.
fn((() => { |
151 port = RawReceivePort.new(handleError); | 151 port = RawReceivePort.new(handleError); |
152 this.addErrorListener(port.sendPort); | 152 dart.dcall(this.addErrorListener, port.sendPort); |
153 }).bind(this)), onCancel: dart.fn((() => { | 153 }).bind(this)), onCancel: dart.fn((() => { |
154 this.removeErrorListener(port.sendPort); | 154 dart.dcall(this.removeErrorListener, port.sendPort); |
155 port.close(); | 155 dart.dcall(port.close); |
156 port = null; | 156 port = null; |
157 }).bind(this))}); | 157 }).bind(this))}); |
158 return controller.stream; | 158 return controller.stream; |
159 } | 159 } |
160 } | 160 } |
161 dart.setSignature(Isolate, { | 161 dart.setSignature(Isolate, { |
162 constructors: () => ({Isolate: [Isolate, [SendPort], {pauseCapability: Capab
ility, terminateCapability: Capability}]}), | 162 constructors: () => ({Isolate: [Isolate, [SendPort], {pauseCapability: Capab
ility, terminateCapability: Capability}]}), |
163 methods: () => ({ | 163 methods: () => ({ |
164 pause: [Capability, [], [Capability]], | 164 pause: [Capability, [], [Capability]], |
165 [_pause]: [dart.void, [Capability]], | 165 [_pause]: [dart.void, [Capability]], |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 dart.setSignature(RawReceivePort, { | 213 dart.setSignature(RawReceivePort, { |
214 constructors: () => ({new: [RawReceivePort, [], [dart.functionType(dart.void
, [dart.dynamic])]]}) | 214 constructors: () => ({new: [RawReceivePort, [], [dart.functionType(dart.void
, [dart.dynamic])]]}) |
215 }); | 215 }); |
216 class _IsolateUnhandledException extends core.Object { | 216 class _IsolateUnhandledException extends core.Object { |
217 _IsolateUnhandledException(message, source, stackTrace) { | 217 _IsolateUnhandledException(message, source, stackTrace) { |
218 this.message = message; | 218 this.message = message; |
219 this.source = source; | 219 this.source = source; |
220 this.stackTrace = stackTrace; | 220 this.stackTrace = stackTrace; |
221 } | 221 } |
222 toString() { | 222 toString() { |
223 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)[dart
x.replaceAll]("\n", "\n ")}`; | 223 return 'IsolateUnhandledException: exception while handling message: ' + `
${this.message} \n ` + `${dart.dsend(dart.dsend(this.source, 'toString'), 'repl
aceAll', "\n", "\n ")}\n` + 'original stack trace:\n ' + `${dart.dcall(dart.dc
all(this.stackTrace.toString)[dartx.replaceAll], "\n", "\n ")}`; |
224 } | 224 } |
225 } | 225 } |
226 _IsolateUnhandledException[dart.implements] = () => [core.Exception]; | 226 _IsolateUnhandledException[dart.implements] = () => [core.Exception]; |
227 dart.setSignature(_IsolateUnhandledException, { | 227 dart.setSignature(_IsolateUnhandledException, { |
228 constructors: () => ({_IsolateUnhandledException: [_IsolateUnhandledExceptio
n, [dart.dynamic, dart.dynamic, core.StackTrace]]}) | 228 constructors: () => ({_IsolateUnhandledException: [_IsolateUnhandledExceptio
n, [dart.dynamic, dart.dynamic, core.StackTrace]]}) |
229 }); | 229 }); |
230 let _description = Symbol('_description'); | 230 let _description = Symbol('_description'); |
231 class RemoteError extends core.Object { | 231 class RemoteError extends core.Object { |
232 RemoteError(description, stackDescription) { | 232 RemoteError(description, stackDescription) { |
233 this[_description] = description; | 233 this[_description] = description; |
(...skipping 22 matching lines...) Expand all Loading... |
256 }); | 256 }); |
257 // Exports: | 257 // Exports: |
258 exports.Capability = Capability; | 258 exports.Capability = Capability; |
259 exports.IsolateSpawnException = IsolateSpawnException; | 259 exports.IsolateSpawnException = IsolateSpawnException; |
260 exports.Isolate = Isolate; | 260 exports.Isolate = Isolate; |
261 exports.SendPort = SendPort; | 261 exports.SendPort = SendPort; |
262 exports.ReceivePort = ReceivePort; | 262 exports.ReceivePort = ReceivePort; |
263 exports.RawReceivePort = RawReceivePort; | 263 exports.RawReceivePort = RawReceivePort; |
264 exports.RemoteError = RemoteError; | 264 exports.RemoteError = RemoteError; |
265 }); | 265 }); |
OLD | NEW |