OLD | NEW |
| (Empty) |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 part of dart.async; | |
6 | |
7 _invokeErrorHandler(Function errorHandler, | |
8 Object error, StackTrace stackTrace) { | |
9 if (errorHandler is ZoneBinaryCallback) { | |
10 return errorHandler(error, stackTrace); | |
11 } else { | |
12 ZoneUnaryCallback unaryErrorHandler = errorHandler; | |
13 return unaryErrorHandler(error); | |
14 } | |
15 } | |
16 | |
17 Function _registerErrorHandler/*<R>*/(Function errorHandler, Zone zone) { | |
18 if (errorHandler is ZoneBinaryCallback) { | |
19 // TODO(leafp): These are commented out, because the async libraries | |
20 // pass a (...) -> void into this function which fails whenever R | |
21 // is something interesting. This needs to be sorted out in the main | |
22 // SDK as to what the intent is here: if this is really supposed to | |
23 // return an R, then the function that gets passed in is wrong. If not, | |
24 // then this code doesn't need to track the return type at all. | |
25 // return zone.registerBinaryCallback/*<R, dynamic, StackTrace>*/( | |
26 // errorHandler as dynamic/*=ZoneBinaryCallback<R, dynamic, StackTrac
e>*/); | |
27 return zone.registerBinaryCallback/*<dynamic, dynamic, StackTrace>*/( | |
28 errorHandler as dynamic/*=ZoneBinaryCallback<dynamic, dynamic, StackTrac
e>*/); | |
29 } else { | |
30 // return zone.registerUnaryCallback/*<R, dynamic>*/( | |
31 // errorHandler as dynamic/*=ZoneUnaryCallback<R, dynamic>*/); | |
32 return zone.registerUnaryCallback/*<dynamic, dynamic>*/( | |
33 errorHandler as dynamic/*=ZoneUnaryCallback<dynamic, dynamic>*/); | |
34 } | |
35 } | |
36 | |
37 class _UncaughtAsyncError extends AsyncError { | |
38 _UncaughtAsyncError(error, StackTrace stackTrace) | |
39 : super(error, _getBestStackTrace(error, stackTrace)); | |
40 | |
41 static StackTrace _getBestStackTrace(error, StackTrace stackTrace) { | |
42 if (stackTrace != null) return stackTrace; | |
43 if (error is Error) { | |
44 return error.stackTrace; | |
45 } | |
46 return null; | |
47 } | |
48 | |
49 String toString() { | |
50 String result = "Uncaught Error: ${error}"; | |
51 | |
52 if (stackTrace != null) { | |
53 result += "\nStack Trace:\n$stackTrace"; | |
54 } | |
55 return result; | |
56 } | |
57 } | |
OLD | NEW |