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

Side by Side Diff: runtime/lib/isolate_patch.dart

Issue 2759973004: Fix observatory tests broken by running dartfmt. Temporarily reverted formatting for evaluate_activ… (Closed)
Patch Set: Created 3 years, 9 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
« no previous file with comments | « runtime/lib/invocation_mirror_patch.dart ('k') | runtime/lib/map_patch.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 import "dart:collection" show HashMap; 5 import "dart:collection" show HashMap;
6 import "dart:_internal" hide Symbol; 6 import "dart:_internal" hide Symbol;
7 7
8 @patch class ReceivePort { 8 @patch
9 @patch factory ReceivePort() = _ReceivePortImpl; 9 class ReceivePort {
10 @patch
11 factory ReceivePort() = _ReceivePortImpl;
10 12
11 @patch factory ReceivePort.fromRawReceivePort(RawReceivePort rawPort) = 13 @patch
14 factory ReceivePort.fromRawReceivePort(RawReceivePort rawPort) =
12 _ReceivePortImpl.fromRawReceivePort; 15 _ReceivePortImpl.fromRawReceivePort;
13 } 16 }
14 17
15 @patch class Capability { 18 @patch
16 @patch factory Capability() = _CapabilityImpl; 19 class Capability {
20 @patch
21 factory Capability() = _CapabilityImpl;
17 } 22 }
18 23
19 class _CapabilityImpl implements Capability { 24 class _CapabilityImpl implements Capability {
20 factory _CapabilityImpl() native "CapabilityImpl_factory"; 25 factory _CapabilityImpl() native "CapabilityImpl_factory";
21 26
22 bool operator==(var other) { 27 bool operator ==(var other) {
23 return (other is _CapabilityImpl) && _equals(other); 28 return (other is _CapabilityImpl) && _equals(other);
24 } 29 }
25 30
26 int get hashCode { 31 int get hashCode {
27 return _get_hashcode(); 32 return _get_hashcode();
28 } 33 }
29 34
30 _equals(other) native "CapabilityImpl_equals"; 35 _equals(other) native "CapabilityImpl_equals";
31 _get_hashcode() native "CapabilityImpl_get_hashcode"; 36 _get_hashcode() native "CapabilityImpl_get_hashcode";
32 } 37 }
33 38
34 @patch class RawReceivePort { 39 @patch
40 class RawReceivePort {
35 /** 41 /**
36 * Opens a long-lived port for receiving messages. 42 * Opens a long-lived port for receiving messages.
37 * 43 *
38 * A [RawReceivePort] is low level and does not work with [Zone]s. It 44 * A [RawReceivePort] is low level and does not work with [Zone]s. It
39 * can not be paused. The data-handler must be set before the first 45 * can not be paused. The data-handler must be set before the first
40 * event is received. 46 * event is received.
41 */ 47 */
42 @patch factory RawReceivePort([void handler(event)]) { 48 @patch
49 factory RawReceivePort([void handler(event)]) {
43 _RawReceivePortImpl result = new _RawReceivePortImpl(); 50 _RawReceivePortImpl result = new _RawReceivePortImpl();
44 result.handler = handler; 51 result.handler = handler;
45 return result; 52 return result;
46 } 53 }
47 } 54 }
48 55
49 class _ReceivePortImpl extends Stream implements ReceivePort { 56 class _ReceivePortImpl extends Stream implements ReceivePort {
50 _ReceivePortImpl() : this.fromRawReceivePort(new RawReceivePort()); 57 _ReceivePortImpl() : this.fromRawReceivePort(new RawReceivePort());
51 58
52 _ReceivePortImpl.fromRawReceivePort(this._rawPort) { 59 _ReceivePortImpl.fromRawReceivePort(this._rawPort) {
53 _controller = new StreamController(onCancel: close, sync: true); 60 _controller = new StreamController(onCancel: close, sync: true);
54 _rawPort.handler = _controller.add; 61 _rawPort.handler = _controller.add;
55 } 62 }
56 63
57 SendPort get sendPort { 64 SendPort get sendPort {
58 return _rawPort.sendPort; 65 return _rawPort.sendPort;
59 } 66 }
60 67
61 StreamSubscription listen(void onData(var message), 68 StreamSubscription listen(void onData(var message),
62 { Function onError, 69 {Function onError, void onDone(), bool cancelOnError}) {
63 void onDone(),
64 bool cancelOnError }) {
65 return _controller.stream.listen(onData, 70 return _controller.stream.listen(onData,
66 onError: onError, 71 onError: onError, onDone: onDone, cancelOnError: cancelOnError);
67 onDone: onDone,
68 cancelOnError: cancelOnError);
69 } 72 }
70 73
71 close() { 74 close() {
72 _rawPort.close(); 75 _rawPort.close();
73 _controller.close(); 76 _controller.close();
74 } 77 }
75 78
76 final RawReceivePort _rawPort; 79 final RawReceivePort _rawPort;
77 StreamController _controller; 80 StreamController _controller;
78 } 81 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 117
115 close() { 118 close() {
116 // Close the port and remove it from the handler map. 119 // Close the port and remove it from the handler map.
117 _handlerMap.remove(this._closeInternal()); 120 _handlerMap.remove(this._closeInternal());
118 } 121 }
119 122
120 SendPort get sendPort { 123 SendPort get sendPort {
121 return _get_sendport(); 124 return _get_sendport();
122 } 125 }
123 126
124 bool operator==(var other) { 127 bool operator ==(var other) {
125 return (other is _RawReceivePortImpl) && 128 return (other is _RawReceivePortImpl) &&
126 (this._get_id() == other._get_id()); 129 (this._get_id() == other._get_id());
127 } 130 }
128 131
129 int get hashCode { 132 int get hashCode {
130 return sendPort.hashCode; 133 return sendPort.hashCode;
131 } 134 }
132 135
133 /**** Internal implementation details ****/ 136 /**** Internal implementation details ****/
134 _get_id() native "RawReceivePortImpl_get_id"; 137 _get_id() native "RawReceivePortImpl_get_id";
(...skipping 25 matching lines...) Expand all
160 // id to handler mapping. 163 // id to handler mapping.
161 static _initHandlerMap() { 164 static _initHandlerMap() {
162 // TODO(18511): Workaround bad CheckSmi hoisting. 165 // TODO(18511): Workaround bad CheckSmi hoisting.
163 var tempMap = new HashMap(); 166 var tempMap = new HashMap();
164 // Collect feedback that not all keys are Smis. 167 // Collect feedback that not all keys are Smis.
165 tempMap["."] = 1; 168 tempMap["."] = 1;
166 tempMap["."] = 2; 169 tempMap["."] = 2;
167 170
168 return new HashMap(); 171 return new HashMap();
169 } 172 }
173
170 static final Map _handlerMap = _initHandlerMap(); 174 static final Map _handlerMap = _initHandlerMap();
171 } 175 }
172 176
173
174 class _SendPortImpl implements SendPort { 177 class _SendPortImpl implements SendPort {
175 /*--- public interface ---*/ 178 /*--- public interface ---*/
176 void send(var message) { 179 void send(var message) {
177 _sendInternal(message); 180 _sendInternal(message);
178 } 181 }
179 182
180 bool operator==(var other) { 183 bool operator ==(var other) {
181 return (other is _SendPortImpl) && (this._get_id() == other._get_id()); 184 return (other is _SendPortImpl) && (this._get_id() == other._get_id());
182 } 185 }
183 186
184 int get hashCode { 187 int get hashCode {
185 return _get_hashcode(); 188 return _get_hashcode();
186 } 189 }
187 190
188 /*--- private implementation ---*/ 191 /*--- private implementation ---*/
189 _get_id() native "SendPortImpl_get_id"; 192 _get_id() native "SendPortImpl_get_id";
190 _get_hashcode() native "SendPortImpl_get_hashcode"; 193 _get_hashcode() native "SendPortImpl_get_hashcode";
191 194
192 // Forward the implementation of sending messages to the VM. 195 // Forward the implementation of sending messages to the VM.
193 void _sendInternal(var message) native "SendPortImpl_sendInternal_"; 196 void _sendInternal(var message) native "SendPortImpl_sendInternal_";
194 } 197 }
195 198
196 typedef _NullaryFunction(); 199 typedef _NullaryFunction();
197 typedef _UnaryFunction(args); 200 typedef _UnaryFunction(args);
198 typedef _BinaryFunction(args, message); 201 typedef _BinaryFunction(args, message);
199 202
200 /** 203 /**
201 * Takes the real entry point as argument and invokes it with the 204 * Takes the real entry point as argument and invokes it with the
202 * initial message. Defers execution of the entry point until the 205 * initial message. Defers execution of the entry point until the
203 * isolate is in the message loop. 206 * isolate is in the message loop.
204 */ 207 */
205 void _startMainIsolate(Function entryPoint, 208 void _startMainIsolate(Function entryPoint, List<String> args) {
206 List<String> args) { 209 _startIsolate(
207 _startIsolate(null, // no parent port 210 null, // no parent port
208 entryPoint, 211 entryPoint,
209 args, 212 args,
210 null, // no message 213 null, // no message
211 true, // isSpawnUri 214 true, // isSpawnUri
212 null, // no control port 215 null, // no control port
213 null); // no capabilities 216 null); // no capabilities
214 } 217 }
215 218
216 /** 219 /**
217 * Takes the real entry point as argument and invokes it with the initial 220 * Takes the real entry point as argument and invokes it with the initial
218 * message. 221 * message.
219 */ 222 */
220 void _startIsolate(SendPort parentPort, 223 void _startIsolate(
221 Function entryPoint, 224 SendPort parentPort,
222 List<String> args, 225 Function entryPoint,
223 var message, 226 List<String> args,
224 bool isSpawnUri, 227 var message,
225 RawReceivePort controlPort, 228 bool isSpawnUri,
226 List capabilities) { 229 RawReceivePort controlPort,
230 List capabilities) {
227 // The control port (aka the main isolate port) does not handle any messages. 231 // The control port (aka the main isolate port) does not handle any messages.
228 if (controlPort != null) { 232 if (controlPort != null) {
229 controlPort.handler = (_) {}; // Nobody home on the control port. 233 controlPort.handler = (_) {}; // Nobody home on the control port.
230 } 234 }
231 235
232 if (parentPort != null) { 236 if (parentPort != null) {
233 // Build a message to our parent isolate providing access to the 237 // Build a message to our parent isolate providing access to the
234 // current isolate's control port and capabilities. 238 // current isolate's control port and capabilities.
235 // 239 //
236 // TODO(floitsch): Send an error message if we can't find the entry point. 240 // TODO(floitsch): Send an error message if we can't find the entry point.
237 var readyMessage = new List(2); 241 var readyMessage = new List(2);
238 readyMessage[0] = controlPort.sendPort; 242 readyMessage[0] = controlPort.sendPort;
239 readyMessage[1] = capabilities; 243 readyMessage[1] = capabilities;
(...skipping 21 matching lines...) Expand all
261 entryPoint(); 265 entryPoint();
262 } 266 }
263 } else { 267 } else {
264 entryPoint(message); 268 entryPoint(message);
265 } 269 }
266 }; 270 };
267 // Make sure the message handler is triggered. 271 // Make sure the message handler is triggered.
268 port.sendPort.send(null); 272 port.sendPort.send(null);
269 } 273 }
270 274
271 @patch class Isolate { 275 @patch
276 class Isolate {
272 static final _currentIsolate = _getCurrentIsolate(); 277 static final _currentIsolate = _getCurrentIsolate();
273 static final _rootUri = _getCurrentRootUri(); 278 static final _rootUri = _getCurrentRootUri();
274 279
275 @patch static Isolate get current => _currentIsolate; 280 @patch
281 static Isolate get current => _currentIsolate;
276 282
277 @patch static Future<Uri> get packageRoot { 283 @patch
284 static Future<Uri> get packageRoot {
278 var hook = VMLibraryHooks.packageRootUriFuture; 285 var hook = VMLibraryHooks.packageRootUriFuture;
279 if (hook == null) { 286 if (hook == null) {
280 throw new UnsupportedError("Isolate.packageRoot"); 287 throw new UnsupportedError("Isolate.packageRoot");
281 } 288 }
282 return hook(); 289 return hook();
283 } 290 }
284 291
285 @patch static Future<Uri> get packageConfig { 292 @patch
293 static Future<Uri> get packageConfig {
286 var hook = VMLibraryHooks.packageConfigUriFuture; 294 var hook = VMLibraryHooks.packageConfigUriFuture;
287 if (hook == null) { 295 if (hook == null) {
288 throw new UnsupportedError("Isolate.packageConfig"); 296 throw new UnsupportedError("Isolate.packageConfig");
289 } 297 }
290 return hook(); 298 return hook();
291 } 299 }
292 300
293 @patch static Future<Uri> resolvePackageUri(Uri packageUri) { 301 @patch
302 static Future<Uri> resolvePackageUri(Uri packageUri) {
294 var hook = VMLibraryHooks.resolvePackageUriFuture; 303 var hook = VMLibraryHooks.resolvePackageUriFuture;
295 if (hook == null) { 304 if (hook == null) {
296 throw new UnsupportedError("Isolate.resolvePackageUri"); 305 throw new UnsupportedError("Isolate.resolvePackageUri");
297 } 306 }
298 return hook(packageUri); 307 return hook(packageUri);
299 } 308 }
300 309
301 static bool _packageSupported() => 310 static bool _packageSupported() =>
302 (VMLibraryHooks.packageRootUriFuture != null) && 311 (VMLibraryHooks.packageRootUriFuture != null) &&
303 (VMLibraryHooks.packageConfigUriFuture != null) && 312 (VMLibraryHooks.packageConfigUriFuture != null) &&
304 (VMLibraryHooks.resolvePackageUriFuture != null); 313 (VMLibraryHooks.resolvePackageUriFuture != null);
305 314
306 @patch static Future<Isolate> spawn( 315 @patch
307 void entryPoint(message), var message, 316 static Future<Isolate> spawn(void entryPoint(message), var message,
308 {bool paused: false, bool errorsAreFatal, 317 {bool paused: false,
309 SendPort onExit, SendPort onError}) async { 318 bool errorsAreFatal,
319 SendPort onExit,
320 SendPort onError}) async {
310 // `paused` isn't handled yet. 321 // `paused` isn't handled yet.
311 RawReceivePort readyPort; 322 RawReceivePort readyPort;
312 try { 323 try {
313 // Check for the type of `entryPoint` on the spawning isolate to make 324 // Check for the type of `entryPoint` on the spawning isolate to make
314 // error-handling easier. 325 // error-handling easier.
315 if (entryPoint is! _UnaryFunction) { 326 if (entryPoint is! _UnaryFunction) {
316 throw new ArgumentError(entryPoint); 327 throw new ArgumentError(entryPoint);
317 } 328 }
318 // The VM will invoke [_startIsolate] with entryPoint as argument. 329 // The VM will invoke [_startIsolate] with entryPoint as argument.
319 readyPort = new RawReceivePort(); 330 readyPort = new RawReceivePort();
320 331
321 // We do not inherit the package root or package config settings 332 // We do not inherit the package root or package config settings
322 // from the parent isolate, instead we use the values that were 333 // from the parent isolate, instead we use the values that were
323 // set on the command line. 334 // set on the command line.
324 var packageRoot = VMLibraryHooks.packageRootString; 335 var packageRoot = VMLibraryHooks.packageRootString;
325 var packageConfig = VMLibraryHooks.packageConfigString; 336 var packageConfig = VMLibraryHooks.packageConfigString;
326 var script = VMLibraryHooks.platformScript; 337 var script = VMLibraryHooks.platformScript;
327 if (script == null) { 338 if (script == null) {
328 // We do not have enough information to support spawning the new 339 // We do not have enough information to support spawning the new
329 // isolate. 340 // isolate.
330 throw new UnsupportedError("Isolate.spawn"); 341 throw new UnsupportedError("Isolate.spawn");
331 } 342 }
332 if (script.scheme == "package") { 343 if (script.scheme == "package") {
333 script = await Isolate.resolvePackageUri(script); 344 script = await Isolate.resolvePackageUri(script);
334 } 345 }
335 346
336 _spawnFunction(readyPort.sendPort, script.toString(), entryPoint, message, 347 _spawnFunction(readyPort.sendPort, script.toString(), entryPoint, message,
337 paused, errorsAreFatal, onExit, onError, 348 paused, errorsAreFatal, onExit, onError, packageRoot, packageConfig);
338 packageRoot, packageConfig);
339 return await _spawnCommon(readyPort); 349 return await _spawnCommon(readyPort);
340 } catch (e, st) { 350 } catch (e, st) {
341 if (readyPort != null) { 351 if (readyPort != null) {
342 readyPort.close(); 352 readyPort.close();
343 } 353 }
344 return await new Future<Isolate>.error(e, st); 354 return await new Future<Isolate>.error(e, st);
345 } 355 }
346 } 356 }
347 357
348 @patch static Future<Isolate> spawnUri( 358 @patch
349 Uri uri, List<String> args, var message, 359 static Future<Isolate> spawnUri(Uri uri, List<String> args, var message,
350 {bool paused: false, 360 {bool paused: false,
351 SendPort onExit, 361 SendPort onExit,
352 SendPort onError, 362 SendPort onError,
353 bool errorsAreFatal, 363 bool errorsAreFatal,
354 bool checked, 364 bool checked,
355 Map<String, String> environment, 365 Map<String, String> environment,
356 Uri packageRoot, 366 Uri packageRoot,
357 Uri packageConfig, 367 Uri packageConfig,
358 bool automaticPackageResolution: false}) async { 368 bool automaticPackageResolution: false}) async {
359 RawReceivePort readyPort; 369 RawReceivePort readyPort;
360 if (environment != null) { 370 if (environment != null) {
361 throw new UnimplementedError("environment"); 371 throw new UnimplementedError("environment");
362 } 372 }
363 373
364 // Verify that no mutually exclusive arguments have been passed. 374 // Verify that no mutually exclusive arguments have been passed.
365 if (automaticPackageResolution) { 375 if (automaticPackageResolution) {
366 if (packageRoot != null) { 376 if (packageRoot != null) {
367 throw new ArgumentError("Cannot simultaneously request " 377 throw new ArgumentError("Cannot simultaneously request "
368 "automaticPackageResolution and specify a" 378 "automaticPackageResolution and specify a"
369 "packageRoot."); 379 "packageRoot.");
370 } 380 }
371 if (packageConfig != null) { 381 if (packageConfig != null) {
372 throw new ArgumentError("Cannot simultaneously request " 382 throw new ArgumentError("Cannot simultaneously request "
373 "automaticPackageResolution and specify a" 383 "automaticPackageResolution and specify a"
374 "packageConfig."); 384 "packageConfig.");
375 } 385 }
376 } else { 386 } else {
377 if ((packageRoot != null) && (packageConfig != null)) { 387 if ((packageRoot != null) && (packageConfig != null)) {
378 throw new ArgumentError("Cannot simultaneously specify a " 388 throw new ArgumentError("Cannot simultaneously specify a "
379 "packageRoot and a packageConfig."); 389 "packageRoot and a packageConfig.");
380 } 390 }
381 } 391 }
382 try { 392 try {
383 // Resolve the uri against the current isolate's root Uri first. 393 // Resolve the uri against the current isolate's root Uri first.
384 var spawnedUri = _rootUri.resolveUri(uri); 394 var spawnedUri = _rootUri.resolveUri(uri);
385 395
386 // Inherit this isolate's package resolution setup if not overridden. 396 // Inherit this isolate's package resolution setup if not overridden.
387 if (!automaticPackageResolution && 397 if (!automaticPackageResolution &&
388 (packageRoot == null) && 398 (packageRoot == null) &&
389 (packageConfig == null)) { 399 (packageConfig == null)) {
(...skipping 16 matching lines...) Expand all
406 if (packageConfig.scheme == "package") { 416 if (packageConfig.scheme == "package") {
407 packageConfig = await Isolate.resolvePackageUri(packageConfig); 417 packageConfig = await Isolate.resolvePackageUri(packageConfig);
408 } 418 }
409 } 419 }
410 420
411 // The VM will invoke [_startIsolate] and not `main`. 421 // The VM will invoke [_startIsolate] and not `main`.
412 readyPort = new RawReceivePort(); 422 readyPort = new RawReceivePort();
413 var packageRootString = packageRoot?.toString(); 423 var packageRootString = packageRoot?.toString();
414 var packageConfigString = packageConfig?.toString(); 424 var packageConfigString = packageConfig?.toString();
415 425
416 _spawnUri(readyPort.sendPort, spawnedUri.toString(), 426 _spawnUri(
417 args, message, 427 readyPort.sendPort,
418 paused, onExit, onError, 428 spawnedUri.toString(),
419 errorsAreFatal, checked, 429 args,
420 null, /* environment */ 430 message,
421 packageRootString, packageConfigString); 431 paused,
432 onExit,
433 onError,
434 errorsAreFatal,
435 checked,
436 null,
437 /* environment */
438 packageRootString,
439 packageConfigString);
422 return await _spawnCommon(readyPort); 440 return await _spawnCommon(readyPort);
423 } catch (e, st) { 441 } catch (e, st) {
424 if (readyPort != null) { 442 if (readyPort != null) {
425 readyPort.close(); 443 readyPort.close();
426 } 444 }
427 rethrow; 445 rethrow;
428 } 446 }
429 } 447 }
430 448
431 static Future<Isolate> _spawnCommon(RawReceivePort readyPort) { 449 static Future<Isolate> _spawnCommon(RawReceivePort readyPort) {
432 Completer completer = new Completer<Isolate>.sync(); 450 Completer completer = new Completer<Isolate>.sync();
433 readyPort.handler = (readyMessage) { 451 readyPort.handler = (readyMessage) {
434 readyPort.close(); 452 readyPort.close();
435 if (readyMessage is List && readyMessage.length == 2) { 453 if (readyMessage is List && readyMessage.length == 2) {
436 SendPort controlPort = readyMessage[0]; 454 SendPort controlPort = readyMessage[0];
437 List capabilities = readyMessage[1]; 455 List capabilities = readyMessage[1];
438 completer.complete(new Isolate(controlPort, 456 completer.complete(new Isolate(controlPort,
439 pauseCapability: capabilities[0], 457 pauseCapability: capabilities[0],
440 terminateCapability: capabilities[1])); 458 terminateCapability: capabilities[1]));
441 } else if (readyMessage is String) { 459 } else if (readyMessage is String) {
442 // We encountered an error while starting the new isolate. 460 // We encountered an error while starting the new isolate.
443 completer.completeError(new IsolateSpawnException( 461 completer.completeError(new IsolateSpawnException(
444 'Unable to spawn isolate: ${readyMessage}')); 462 'Unable to spawn isolate: ${readyMessage}'));
445 } else { 463 } else {
446 // This shouldn't happen. 464 // This shouldn't happen.
447 completer.completeError(new IsolateSpawnException( 465 completer.completeError(new IsolateSpawnException(
448 "Internal error: unexpected format for ready message: " 466 "Internal error: unexpected format for ready message: "
449 "'${readyMessage}'")); 467 "'${readyMessage}'"));
450 } 468 }
451 }; 469 };
452 return completer.future; 470 return completer.future;
453 } 471 }
454 472
455 // TODO(iposva): Cleanup to have only one definition. 473 // TODO(iposva): Cleanup to have only one definition.
456 // These values need to be kept in sync with the class IsolateMessageHandler 474 // These values need to be kept in sync with the class IsolateMessageHandler
457 // in vm/isolate.cc. 475 // in vm/isolate.cc.
458 static const _PAUSE = 1; 476 static const _PAUSE = 1;
459 static const _RESUME = 2; 477 static const _RESUME = 2;
460 static const _PING = 3; 478 static const _PING = 3;
461 static const _KILL = 4; 479 static const _KILL = 4;
462 static const _ADD_EXIT = 5; 480 static const _ADD_EXIT = 5;
463 static const _DEL_EXIT = 6; 481 static const _DEL_EXIT = 6;
464 static const _ADD_ERROR = 7; 482 static const _ADD_ERROR = 7;
465 static const _DEL_ERROR = 8; 483 static const _DEL_ERROR = 8;
466 static const _ERROR_FATAL = 9; 484 static const _ERROR_FATAL = 9;
467 485
486 static void _spawnFunction(
487 SendPort readyPort,
488 String uri,
489 Function topLevelFunction,
490 var message,
491 bool paused,
492 bool errorsAreFatal,
493 SendPort onExit,
494 SendPort onError,
495 String packageRoot,
496 String packageConfig) native "Isolate_spawnFunction";
468 497
469 static void _spawnFunction(SendPort readyPort, String uri, 498 static void _spawnUri(
470 Function topLevelFunction, 499 SendPort readyPort,
471 var message, bool paused, bool errorsAreFatal, 500 String uri,
472 SendPort onExit, SendPort onError, 501 List<String> args,
473 String packageRoot, String packageConfig) 502 var message,
474 native "Isolate_spawnFunction"; 503 bool paused,
475 504 SendPort onExit,
476 static void _spawnUri(SendPort readyPort, String uri, 505 SendPort onError,
477 List<String> args, var message, 506 bool errorsAreFatal,
478 bool paused, SendPort onExit, SendPort onError, 507 bool checked,
479 bool errorsAreFatal, bool checked, 508 List environment,
480 List environment, 509 String packageRoot,
481 String packageRoot, String packageConfig) 510 String packageConfig) native "Isolate_spawnUri";
482 native "Isolate_spawnUri";
483 511
484 static void _sendOOB(port, msg) native "Isolate_sendOOB"; 512 static void _sendOOB(port, msg) native "Isolate_sendOOB";
485 513
486 @patch void _pause(Capability resumeCapability) { 514 @patch
515 void _pause(Capability resumeCapability) {
487 var msg = new List(4) 516 var msg = new List(4)
488 ..[0] = 0 // Make room for OOB message type. 517 ..[0] = 0 // Make room for OOB message type.
489 ..[1] = _PAUSE 518 ..[1] = _PAUSE
490 ..[2] = pauseCapability 519 ..[2] = pauseCapability
491 ..[3] = resumeCapability; 520 ..[3] = resumeCapability;
492 _sendOOB(controlPort, msg); 521 _sendOOB(controlPort, msg);
493 } 522 }
494 523
495 @patch void resume(Capability resumeCapability) { 524 @patch
525 void resume(Capability resumeCapability) {
496 var msg = new List(4) 526 var msg = new List(4)
497 ..[0] = 0 // Make room for OOB message type. 527 ..[0] = 0 // Make room for OOB message type.
498 ..[1] = _RESUME 528 ..[1] = _RESUME
499 ..[2] = pauseCapability 529 ..[2] = pauseCapability
500 ..[3] = resumeCapability; 530 ..[3] = resumeCapability;
501 _sendOOB(controlPort, msg); 531 _sendOOB(controlPort, msg);
502 } 532 }
503 533
504 @patch void addOnExitListener(SendPort responsePort, 534 @patch
505 {Object response}) { 535 void addOnExitListener(SendPort responsePort, {Object response}) {
506 var msg = new List(4) 536 var msg = new List(4)
507 ..[0] = 0 // Make room for OOB message type. 537 ..[0] = 0 // Make room for OOB message type.
508 ..[1] = _ADD_EXIT 538 ..[1] = _ADD_EXIT
509 ..[2] = responsePort 539 ..[2] = responsePort
510 ..[3] = response; 540 ..[3] = response;
511 _sendOOB(controlPort, msg); 541 _sendOOB(controlPort, msg);
512 } 542 }
513 543
514 @patch void removeOnExitListener(SendPort responsePort) { 544 @patch
545 void removeOnExitListener(SendPort responsePort) {
515 var msg = new List(3) 546 var msg = new List(3)
516 ..[0] = 0 // Make room for OOB message type. 547 ..[0] = 0 // Make room for OOB message type.
517 ..[1] = _DEL_EXIT 548 ..[1] = _DEL_EXIT
518 ..[2] = responsePort; 549 ..[2] = responsePort;
519 _sendOOB(controlPort, msg); 550 _sendOOB(controlPort, msg);
520 } 551 }
521 552
522 @patch void setErrorsFatal(bool errorsAreFatal) { 553 @patch
554 void setErrorsFatal(bool errorsAreFatal) {
523 var msg = new List(4) 555 var msg = new List(4)
524 ..[0] = 0 // Make room for OOB message type. 556 ..[0] = 0 // Make room for OOB message type.
525 ..[1] = _ERROR_FATAL 557 ..[1] = _ERROR_FATAL
526 ..[2] = terminateCapability 558 ..[2] = terminateCapability
527 ..[3] = errorsAreFatal; 559 ..[3] = errorsAreFatal;
528 _sendOOB(controlPort, msg); 560 _sendOOB(controlPort, msg);
529 } 561 }
530 562
531 @patch void kill({int priority: BEFORE_NEXT_EVENT}) { 563 @patch
564 void kill({int priority: BEFORE_NEXT_EVENT}) {
532 var msg = new List(4) 565 var msg = new List(4)
533 ..[0] = 0 // Make room for OOB message type. 566 ..[0] = 0 // Make room for OOB message type.
534 ..[1] = _KILL 567 ..[1] = _KILL
535 ..[2] = terminateCapability 568 ..[2] = terminateCapability
536 ..[3] = priority; 569 ..[3] = priority;
537 _sendOOB(controlPort, msg); 570 _sendOOB(controlPort, msg);
538 } 571 }
539 572
540 @patch void ping(SendPort responsePort, {Object response, 573 @patch
541 int priority: IMMEDIATE}) { 574 void ping(SendPort responsePort, {Object response, int priority: IMMEDIATE}) {
542 var msg = new List(5) 575 var msg = new List(5)
543 ..[0] = 0 // Make room for OOM message type. 576 ..[0] = 0 // Make room for OOM message type.
544 ..[1] = _PING 577 ..[1] = _PING
545 ..[2] = responsePort 578 ..[2] = responsePort
546 ..[3] = priority 579 ..[3] = priority
547 ..[4] = response; 580 ..[4] = response;
548 _sendOOB(controlPort, msg); 581 _sendOOB(controlPort, msg);
549 } 582 }
550 583
551 @patch void addErrorListener(SendPort port) { 584 @patch
585 void addErrorListener(SendPort port) {
552 var msg = new List(3) 586 var msg = new List(3)
553 ..[0] = 0 // Make room for OOB message type. 587 ..[0] = 0 // Make room for OOB message type.
554 ..[1] = _ADD_ERROR 588 ..[1] = _ADD_ERROR
555 ..[2] = port; 589 ..[2] = port;
556 _sendOOB(controlPort, msg); 590 _sendOOB(controlPort, msg);
557 } 591 }
558 592
559 @patch void removeErrorListener(SendPort port) { 593 @patch
594 void removeErrorListener(SendPort port) {
560 var msg = new List(3) 595 var msg = new List(3)
561 ..[0] = 0 // Make room for OOB message type. 596 ..[0] = 0 // Make room for OOB message type.
562 ..[1] = _DEL_ERROR 597 ..[1] = _DEL_ERROR
563 ..[2] = port; 598 ..[2] = port;
564 _sendOOB(controlPort, msg); 599 _sendOOB(controlPort, msg);
565 } 600 }
566 601
567 static Isolate _getCurrentIsolate() { 602 static Isolate _getCurrentIsolate() {
568 List portAndCapabilities = _getPortAndCapabilitiesOfCurrentIsolate(); 603 List portAndCapabilities = _getPortAndCapabilitiesOfCurrentIsolate();
569 return new Isolate(portAndCapabilities[0], 604 return new Isolate(portAndCapabilities[0],
570 pauseCapability: portAndCapabilities[1], 605 pauseCapability: portAndCapabilities[1],
571 terminateCapability: portAndCapabilities[2]); 606 terminateCapability: portAndCapabilities[2]);
572 } 607 }
573 608
574 static List _getPortAndCapabilitiesOfCurrentIsolate() 609 static List _getPortAndCapabilitiesOfCurrentIsolate()
575 native "Isolate_getPortAndCapabilitiesOfCurrentIsolate"; 610 native "Isolate_getPortAndCapabilitiesOfCurrentIsolate";
576 611
577 static Uri _getCurrentRootUri() { 612 static Uri _getCurrentRootUri() {
578 try { 613 try {
579 return Uri.parse(_getCurrentRootUriStr()); 614 return Uri.parse(_getCurrentRootUriStr());
580 } catch (e, s) { 615 } catch (e, s) {
581 return null; 616 return null;
582 } 617 }
583 } 618 }
584 619
585 static String _getCurrentRootUriStr() 620 static String _getCurrentRootUriStr() native "Isolate_getCurrentRootUriStr";
586 native "Isolate_getCurrentRootUriStr";
587 } 621 }
OLDNEW
« no previous file with comments | « runtime/lib/invocation_mirror_patch.dart ('k') | runtime/lib/map_patch.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698