| Index: sdk/lib/core/future_impl.dart
|
| diff --git a/sdk/lib/core/future_impl.dart b/sdk/lib/core/future_impl.dart
|
| index 2c22e46123115e6b3dd852f5ed4fc5333f1975c7..bbae82d1667ffaff49b056c537143ee23b10d050 100644
|
| --- a/sdk/lib/core/future_impl.dart
|
| +++ b/sdk/lib/core/future_impl.dart
|
| @@ -27,11 +27,6 @@ class _FutureImpl<T> implements Future<T> {
|
| bool _exceptionHandled = false;
|
|
|
| /**
|
| - * true if an exception in this future should be thrown to the top level.
|
| - */
|
| - bool _throwOnException = false;
|
| -
|
| - /**
|
| * Listeners waiting to receive the value of this future.
|
| */
|
| final List<Function> _successListeners;
|
| @@ -93,21 +88,12 @@ class _FutureImpl<T> implements Future<T> {
|
| if (hasValue) {
|
| onSuccess(value);
|
| } else if (!isComplete) {
|
| - _throwOnException = true;
|
| _successListeners.add(onSuccess);
|
| } else if (!_exceptionHandled) {
|
| throw new FutureUnhandledException(_exception, stackTrace);
|
| }
|
| }
|
|
|
| - void _handleSuccess(void onSuccess(T value)) {
|
| - if (hasValue) {
|
| - onSuccess(value);
|
| - } else if (!isComplete) {
|
| - _successListeners.add(onSuccess);
|
| - }
|
| - }
|
| -
|
| void handleException(bool onException(Object exception)) {
|
| if (_exceptionHandled) return;
|
| if (_isComplete) {
|
| @@ -149,7 +135,7 @@ class _FutureImpl<T> implements Future<T> {
|
| listener(value);
|
| }
|
| } else {
|
| - if (!_exceptionHandled && _throwOnException) {
|
| + if (!_exceptionHandled && _successListeners.length > 0) {
|
| throw new FutureUnhandledException(_exception, stackTrace);
|
| }
|
| }
|
| @@ -188,7 +174,7 @@ class _FutureImpl<T> implements Future<T> {
|
|
|
| _forwardException(this, completer);
|
|
|
| - _handleSuccess((v) {
|
| + then((v) {
|
| var transformed = null;
|
| try {
|
| transformed = transformation(v);
|
| @@ -206,7 +192,7 @@ class _FutureImpl<T> implements Future<T> {
|
| final completer = new Completer();
|
|
|
| _forwardException(this, completer);
|
| - _handleSuccess((v) {
|
| + then((v) {
|
| var future = null;
|
| try {
|
| future = transformation(v);
|
| @@ -237,10 +223,10 @@ class _FutureImpl<T> implements Future<T> {
|
| } catch (innerException, stackTrace) {
|
| completer.completeException(innerException, stackTrace);
|
| }
|
| - return false;
|
| + return true;
|
| });
|
|
|
| - _handleSuccess(completer.complete);
|
| + then(completer.complete);
|
|
|
| return completer.future;
|
| }
|
| @@ -250,7 +236,7 @@ class _FutureImpl<T> implements Future<T> {
|
| */
|
| _forward(Future future, Completer completer) {
|
| _forwardException(future, completer);
|
| - future._handleSuccess(completer.complete);
|
| + future.then(completer.complete);
|
| }
|
|
|
| /**
|
| @@ -259,7 +245,7 @@ class _FutureImpl<T> implements Future<T> {
|
| _forwardException(Future future, Completer completer) {
|
| future.handleException((e) {
|
| completer.completeException(e, future.stackTrace);
|
| - return false;
|
| + return true;
|
| });
|
| }
|
| }
|
|
|