Index: sdk/lib/async/async_error.dart |
diff --git a/sdk/lib/async/async_error.dart b/sdk/lib/async/async_error.dart |
index fa90e8779b1042a31981f5ee19ed926be0b36df3..161b9ef4abfd924b1564fa32c5185b1abc7116c5 100644 |
--- a/sdk/lib/async/async_error.dart |
+++ b/sdk/lib/async/async_error.dart |
@@ -4,70 +4,14 @@ |
part of dart.async; |
-/** |
- * Error result of an asynchronous computation. |
- */ |
-class AsyncError { |
- /** The actual error thrown by the computation. */ |
- final error; |
- /** Stack trace corresponding to the error, if available. */ |
- final Object stackTrace; |
- /** Asynchronous error leading to this error, if error handling fails. */ |
- final AsyncError cause; |
+final Expando _stackTraceExpando = new Expando("asynchronous error"); |
- // TODO(lrn): When possible, combine into one constructor with both optional |
- // positional and named arguments. |
- AsyncError(this.error, [this.stackTrace]): cause = null; |
- AsyncError.withCause(this.error, this.stackTrace, this.cause); |
- |
- void _writeOn(StringSink buffer) { |
- buffer.write("'"); |
- String message; |
- try { |
- message = error.toString(); |
- } catch (e) { |
- message = Error.safeToString(error); |
- } |
- buffer.write(message); |
- buffer.write("'\n"); |
- if (stackTrace != null) { |
- buffer.write("Stack trace:\n"); |
- buffer.writeln(stackTrace.toString()); |
- } |
- } |
- |
- String toString() { |
- StringBuffer buffer = new StringBuffer(); |
- buffer.write("AsyncError: "); |
- _writeOn(buffer); |
- AsyncError cause = this.cause; |
- while (cause != null) { |
- buffer.write("Caused by: "); |
- cause._writeOn(buffer); |
- cause = cause.cause; |
- } |
- return buffer.toString(); |
- } |
- |
- throwDelayed() { |
- reportError() { |
- print("Uncaught Error: $error"); |
- if (stackTrace != null) { |
- print("Stack Trace:\n$stackTrace\n"); |
- } |
- } |
- |
- try { |
- Timer.run(() { |
- reportError(); |
- // TODO(floitsch): we potentially want to call the global error handler |
- // directly so that we can pass the stack trace. |
- throw error; |
- }); |
- } catch (e) { |
- // Unfortunately there is not much more we can do... |
- reportError(); |
- } |
- } |
+void _attachStackTrace(o, st) { |
+ if (o == null || o is bool || o is num || o is String) return; |
+ _stackTraceExpando[o] = st; |
} |
+getAttachedStackTrace(o) { |
+ if (o == null || o is bool || o is num || o is String) return null; |
+ return _stackTraceExpando[o]; |
+} |