| 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;
|
| + return e.stackTrace;
|
| + }
|
| + return null;
|
| + }
|
| +
|
| + String toString() {
|
| + String result = "Uncaught Error: ${error}";
|
| +
|
| + if (stackTrace != null) {
|
| + result += "\nStack Trace:\n$stackTrace";
|
| + }
|
| + return result;
|
| + }
|
| +}
|
|
|