Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(750)

Side by Side Diff: sdk/lib/async/stream_pipe.dart

Issue 18915008: Let StreamSubscription.cancel return a Future. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Mark failing tests. Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/async/stream_impl.dart ('k') | tests/lib/async/stream_controller_async_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 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 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.async; 5 part of dart.async;
6 6
7 /** 7 /**
8 * Utility function to attach a stack trace to an [error] if it doesn't have 8 * Utility function to attach a stack trace to an [error] if it doesn't have
9 * one already. 9 * one already.
10 */ 10 */
11 _asyncError(Object error, Object stackTrace) { 11 _asyncError(Object error, Object stackTrace) {
12 if (stackTrace == null) return error; 12 if (stackTrace == null) return error;
13 if (getAttachedStackTrace(error) != null) return error; 13 if (getAttachedStackTrace(error) != null) return error;
14 _attachStackTrace(error, stackTrace); 14 _attachStackTrace(error, stackTrace);
15 return error; 15 return error;
16 } 16 }
17 17
18 /** Runs user code and takes actions depending on success or failure. */ 18 /** Runs user code and takes actions depending on success or failure. */
19 _runUserCode(userCode(), 19 _runUserCode(userCode(),
20 onSuccess(value), 20 onSuccess(value),
21 onError(error, StackTrace stackTrace)) { 21 onError(error, StackTrace stackTrace)) {
22 try { 22 try {
23 onSuccess(userCode()); 23 onSuccess(userCode());
24 } catch (e, s) { 24 } catch (e, s) {
25 onError(_asyncError(e, s), s); 25 onError(_asyncError(e, s), s);
26 } 26 }
27 } 27 }
28 28
29 /** Helper function to cancel a subscription and wait for the potential future,
30 before completing with an error. */
31 void _cancelAndError(StreamSubscription subscription,
32 _Future future,
33 error,
34 StackTrace stackTrace) {
35 var cancelFuture = subscription.cancel();
36 if (cancelFuture is Future) {
37 cancelFuture.whenComplete(() => future._completeError(error, stackTrace));
38 } else {
39 future._completeError(error, stackTrace);
40 }
41 }
42
29 /** Helper function to make an onError argument to [_runUserCode]. */ 43 /** Helper function to make an onError argument to [_runUserCode]. */
30 _cancelAndError(StreamSubscription subscription, _Future future) => 44 _cancelAndErrorClosure(StreamSubscription subscription, _Future future) =>
31 (error, StackTrace stackTrace) { 45 ((error, StackTrace stackTrace) => _cancelAndError(
32 subscription.cancel(); 46 subscription, future, error, stackTrace));
33 future._completeError(error, stackTrace); 47
34 }; 48 /** Helper function to cancel a subscription and wait for the potential future,
49 before completing with a value. */
50 void _cancelAndValue(StreamSubscription subscription, _Future future, value) {
51 var cancelFuture = subscription.cancel();
52 if (cancelFuture is Future) {
53 cancelFuture.whenComplete(() => future._complete(value));
54 } else {
55 future._complete(value);
56 }
57 }
35 58
36 59
37 /** 60 /**
38 * A [Stream] that forwards subscriptions to another stream. 61 * A [Stream] that forwards subscriptions to another stream.
39 * 62 *
40 * This stream implements [Stream], but forwards all subscriptions 63 * This stream implements [Stream], but forwards all subscriptions
41 * to an underlying stream, and wraps the returned subscription to 64 * to an underlying stream, and wraps the returned subscription to
42 * modify the events on the way. 65 * modify the events on the way.
43 * 66 *
44 * This class is intended for internal use only. 67 * This class is intended for internal use only.
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 sink._addError(_asyncError(e, s), s); 408 sink._addError(_asyncError(e, s), s);
386 return null; 409 return null;
387 } 410 }
388 if (!isEqual) { 411 if (!isEqual) {
389 sink._add(inputEvent); 412 sink._add(inputEvent);
390 _previous = inputEvent; 413 _previous = inputEvent;
391 } 414 }
392 } 415 }
393 } 416 }
394 } 417 }
OLDNEW
« no previous file with comments | « sdk/lib/async/stream_impl.dart ('k') | tests/lib/async/stream_controller_async_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698