Chromium Code Reviews| Index: sdk/lib/async/async_error.dart |
| diff --git a/sdk/lib/async/async_error.dart b/sdk/lib/async/async_error.dart |
| index 05fbb88b211b769782bcc8d43639fdbc52ff98c5..d5732165b2b1f026de27c4633b9de972d35c5c69 100644 |
| --- a/sdk/lib/async/async_error.dart |
| +++ b/sdk/lib/async/async_error.dart |
| @@ -11,6 +11,23 @@ void _attachStackTrace(o, st) { |
| _stackTraceExpando[o] = st; |
| } |
| +_invokeErrorHandler(Function errorHandler, |
| + Object error, StackTrace stackTrace) { |
| + if (errorHandler is ZoneBinaryCallback) { |
| + return errorHandler(error, stackTrace); |
| + } else { |
| + return errorHandler(error); |
| + } |
| +} |
| + |
| +Function _registerErrorHandler(Function errorHandler, Zone zone) { |
| + if (errorHandler is ZoneBinaryCallback) { |
| + return zone.registerBinaryCallback(errorHandler); |
| + } else { |
| + return zone.registerUnaryCallback(errorHandler); |
| + } |
| +} |
| + |
| /** |
| * *This is an experimental API.* |
| * |
| @@ -25,3 +42,38 @@ getAttachedStackTrace(o) { |
| if (o == null || o is bool || o is num || o is String) return null; |
| return _stackTraceExpando[o]; |
| } |
| + |
| +class _AsyncError implements Error { |
| + final error; |
| + final StackTrace stackTrace; |
| + |
| + _AsyncError(this.error, this.stackTrace); |
| +} |
| + |
| +class _UncaughtAsyncError extends _AsyncError { |
| + _UncaughtAsyncError(error, StackTrace stackTrace) |
| + : super(error, _getBestStackTrace(error, stackTrace)) { |
| + // Clear the attached stack trace. |
| + _attachStackTrace(error, null); |
| + } |
| + |
| + static StackTrace _getBestStackTrace(error, StackTrace stackTrace) { |
| + if (stackTrace != null) return stackTrace; |
| + var trace = getAttachedStackTrace(error); |
| + if (trace != null) return trace; |
| + if (error is Error) { |
| + Error e = error; |
|
Lasse Reichstein Nielsen
2013/10/07 12:39:20
Soon to be redundant cast! :)
|
| + return e.stackTrace; |
| + } |
| + return null; |
| + } |
| + |
| + String toString() { |
| + String result = "Uncaught Error: ${error}"; |
| + |
| + if (stackTrace != null) { |
| + result += "\nStack Trace:\n$stackTrace"; |
| + } |
| + return result; |
| + } |
| +} |