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

Side by Side Diff: sdk/lib/_internal/lib/isolate_helper.dart

Issue 93873014: Update isolate documentation. Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add isolateMessageException Created 7 years 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 | Annotate | Revision Log
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 library _isolate_helper; 5 library _isolate_helper;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:collection' show Queue, HashMap; 8 import 'dart:collection' show Queue, HashMap;
9 import 'dart:isolate'; 9 import 'dart:isolate';
10 import 'dart:_js_helper' show 10 import 'dart:_js_helper' show
11 Closure, 11 Closure,
12 Null, 12 Null,
13 Primitives, 13 Primitives,
14 convertDartClosureToJS; 14 convertDartClosureToJS;
15 import 'dart:_foreign_helper' show DART_CLOSURE_TO_JS, 15 import 'dart:_foreign_helper' show DART_CLOSURE_TO_JS,
16 JS, 16 JS,
17 JS_CREATE_ISOLATE, 17 JS_CREATE_ISOLATE,
18 JS_CURRENT_ISOLATE_CONTEXT, 18 JS_CURRENT_ISOLATE_CONTEXT,
19 JS_CURRENT_ISOLATE, 19 JS_CURRENT_ISOLATE,
20 JS_SET_CURRENT_ISOLATE, 20 JS_SET_CURRENT_ISOLATE,
21 IsolateContext; 21 IsolateContext;
22 import 'dart:_interceptors' show JSExtendableArray; 22 import 'dart:_interceptors' show JSExtendableArray;
23 23
24 ReceivePort controlPort; 24 ReceivePort controlPort;
25 25
26 class IsolateDeserializationError extends Error {
27 final String _message;
28 IsolateDeserializationError(this._message);
29
30 toString() => "IsolateDeserializationError: $_message";
31 }
32
26 /** 33 /**
27 * Called by the compiler to support switching 34 * Called by the compiler to support switching
28 * between isolates when we get a callback from the DOM. 35 * between isolates when we get a callback from the DOM.
29 */ 36 */
30 _callInIsolate(_IsolateContext isolate, Function function) { 37 _callInIsolate(_IsolateContext isolate, Function function) {
31 var result = isolate.eval(function); 38 var result = isolate.eval(function);
32 _globalState.topEventLoop.run(); 39 _globalState.topEventLoop.run();
33 return result; 40 return result;
34 } 41 }
35 42
(...skipping 1034 matching lines...) Expand 10 before | Expand all | Expand 10 after
1070 // Overridable fallback. 1077 // Overridable fallback.
1071 return visitObject(x); 1078 return visitObject(x);
1072 } 1079 }
1073 1080
1074 visitPrimitive(x); 1081 visitPrimitive(x);
1075 visitList(List x); 1082 visitList(List x);
1076 visitMap(Map x); 1083 visitMap(Map x);
1077 visitSendPort(SendPort x); 1084 visitSendPort(SendPort x);
1078 1085
1079 visitObject(Object x) { 1086 visitObject(Object x) {
1080 // TODO(floitsch): make this a real exception. (which one)? 1087 throw new IsolateMessageException("Illegal value $x passed");
Lasse Reichstein Nielsen 2013/12/11 10:38:28 Could we put the value of x into the object? If th
floitsch 2013/12/11 12:14:16 Yes. I would like that. The problem is that it wou
1081 throw "Message serialization: Illegal value $x passed";
1082 } 1088 }
1083 1089
1084 static bool isPrimitive(x) { 1090 static bool isPrimitive(x) {
1085 return (x == null) || (x is String) || (x is num) || (x is bool); 1091 return (x == null) || (x is String) || (x is num) || (x is bool);
1086 } 1092 }
1087 } 1093 }
1088 1094
1089 1095
1090 /** A visitor that recursively copies a message. */ 1096 /** A visitor that recursively copies a message. */
1091 class _Copier extends _MessageTraverser { 1097 class _Copier extends _MessageTraverser {
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 var key = _deserializeHelper(keys[i]); 1232 var key = _deserializeHelper(keys[i]);
1227 var value = _deserializeHelper(values[i]); 1233 var value = _deserializeHelper(values[i]);
1228 result[key] = value; 1234 result[key] = value;
1229 } 1235 }
1230 return result; 1236 return result;
1231 } 1237 }
1232 1238
1233 deserializeSendPort(List x); 1239 deserializeSendPort(List x);
1234 1240
1235 deserializeObject(List x) { 1241 deserializeObject(List x) {
1236 // TODO(floitsch): Use real exception (which one?). 1242 throw new IsolateDeserializationError("Unexpected serialized object");
Lasse Reichstein Nielsen 2013/12/11 10:38:28 How does this error occur? It happens during dese
floitsch 2013/12/11 12:14:16 It's a sanity check, and could happen once we have
1237 throw "Unexpected serialized object";
1238 } 1243 }
1239 } 1244 }
1240 1245
1241 class TimerImpl implements Timer { 1246 class TimerImpl implements Timer {
1242 final bool _once; 1247 final bool _once;
1243 bool _inEventLoop = false; 1248 bool _inEventLoop = false;
1244 int _handle; 1249 int _handle;
1245 1250
1246 TimerImpl(int milliseconds, void callback()) 1251 TimerImpl(int milliseconds, void callback())
1247 : _once = true { 1252 : _once = true {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1312 _handle = null; 1317 _handle = null;
1313 } else { 1318 } else {
1314 throw new UnsupportedError("Canceling a timer."); 1319 throw new UnsupportedError("Canceling a timer.");
1315 } 1320 }
1316 } 1321 }
1317 1322
1318 bool get isActive => _handle != null; 1323 bool get isActive => _handle != null;
1319 } 1324 }
1320 1325
1321 bool hasTimer() => JS('', '#.setTimeout', globalThis) != null; 1326 bool hasTimer() => JS('', '#.setTimeout', globalThis) != null;
OLDNEW
« no previous file with comments | « runtime/vm/symbols.h ('k') | sdk/lib/isolate/isolate.dart » ('j') | sdk/lib/isolate/isolate.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698