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

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

Issue 14251006: Remove AsyncError with Expando. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Created 7 years, 8 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.dart ('k') | sdk/lib/async/stream_impl.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 // Controller for creating and adding events to a stream. 8 // Controller for creating and adding events to a stream.
9 // ------------------------------------------------------------------- 9 // -------------------------------------------------------------------
10 10
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 bool get hasListener => stream._hasListener; 112 bool get hasListener => stream._hasListener;
113 113
114 /** 114 /**
115 * Send or queue a data event. 115 * Send or queue a data event.
116 */ 116 */
117 void add(T value) => stream._add(value); 117 void add(T value) => stream._add(value);
118 118
119 /** 119 /**
120 * Send or enqueue an error event. 120 * Send or enqueue an error event.
121 * 121 *
122 * If [error] is not an [AsyncError], [error] and an optional [stackTrace]
123 * is combined into an [AsyncError] and sent this stream's listeners.
124 *
125 * Otherwise, if [error] is an [AsyncError], it is used directly as the
126 * error object reported to listeners, and the [stackTrace] is ignored.
127 *
128 * If a subscription has requested to be unsubscribed on errors, 122 * If a subscription has requested to be unsubscribed on errors,
129 * it will be unsubscribed after receiving this event. 123 * it will be unsubscribed after receiving this event.
130 */ 124 */
131 void addError(Object error, [Object stackTrace]) { 125 void addError(Object error, [Object stackTrace]) {
132 AsyncError asyncError; 126 if (stackTrace != null) {
133 if (error is AsyncError) { 127 // Force stack trace overwrite. Even if the error already contained
134 asyncError = error; 128 // a stack trace.
135 } else { 129 _attachStackTrace(error, stackTrace);
136 asyncError = new AsyncError(error, stackTrace);
137 } 130 }
138 stream._addError(asyncError); 131 stream._addError(error);
139 } 132 }
140 133
141 /** 134 /**
142 * Send or enqueue a "done" message. 135 * Send or enqueue a "done" message.
143 * 136 *
144 * The "done" message should be sent at most once by a stream, and it 137 * The "done" message should be sent at most once by a stream, and it
145 * should be the last message sent. 138 * should be the last message sent.
146 */ 139 */
147 void close() { stream._close(); } 140 void close() { stream._close(); }
148 } 141 }
149 142
150 typedef void _NotificationHandler(); 143 typedef void _NotificationHandler();
151 144
152 class _MultiControllerStream<T> extends _MultiStreamImpl<T> { 145 class _MultiControllerStream<T> extends _MultiStreamImpl<T> {
153 _NotificationHandler _onListen; 146 _NotificationHandler _onListen;
154 _NotificationHandler _onPause; 147 _NotificationHandler _onPause;
155 _NotificationHandler _onResume; 148 _NotificationHandler _onResume;
156 _NotificationHandler _onCancel; 149 _NotificationHandler _onCancel;
157 150
158 // TODO(floitsch): share this code with _SingleControllerStream. 151 // TODO(floitsch): share this code with _SingleControllerStream.
159 void _runGuarded(_NotificationHandler notificationHandler) { 152 void _runGuarded(_NotificationHandler notificationHandler) {
160 if (notificationHandler == null) return; 153 if (notificationHandler == null) return;
161 try { 154 try {
162 notificationHandler(); 155 notificationHandler();
163 } catch (e, s) { 156 } catch (e, s) {
164 new AsyncError(e, s).throwDelayed(); 157 _throwDelayed(e, s);
165 } 158 }
166 } 159 }
167 160
168 _MultiControllerStream(this._onListen, 161 _MultiControllerStream(this._onListen,
169 this._onPause, 162 this._onPause,
170 this._onResume, 163 this._onResume,
171 this._onCancel); 164 this._onCancel);
172 165
173 void _onSubscriptionStateChange() { 166 void _onSubscriptionStateChange() {
174 _runGuarded(_hasListener ? _onListen : _onCancel); 167 _runGuarded(_hasListener ? _onListen : _onCancel);
175 } 168 }
176 169
177 void _onPauseStateChange() { 170 void _onPauseStateChange() {
178 _runGuarded(_isPaused ? _onPause : _onResume); 171 _runGuarded(_isPaused ? _onPause : _onResume);
179 } 172 }
180 } 173 }
181 174
182 class _SingleControllerStream<T> extends _SingleStreamImpl<T> { 175 class _SingleControllerStream<T> extends _SingleStreamImpl<T> {
183 _NotificationHandler _onListen; 176 _NotificationHandler _onListen;
184 _NotificationHandler _onPause; 177 _NotificationHandler _onPause;
185 _NotificationHandler _onResume; 178 _NotificationHandler _onResume;
186 _NotificationHandler _onCancel; 179 _NotificationHandler _onCancel;
187 180
188 // TODO(floitsch): share this code with _MultiControllerStream. 181 // TODO(floitsch): share this code with _MultiControllerStream.
189 _runGuarded(_NotificationHandler notificationHandler) { 182 _runGuarded(_NotificationHandler notificationHandler) {
190 if (notificationHandler == null) return; 183 if (notificationHandler == null) return;
191 try { 184 try {
192 notificationHandler(); 185 notificationHandler();
193 } catch (e, s) { 186 } catch (e, s) {
194 new AsyncError(e, s).throwDelayed(); 187 _throwDelayed(e, s);
195 } 188 }
196 } 189 }
197 190
198 _SingleControllerStream(this._onListen, 191 _SingleControllerStream(this._onListen,
199 this._onPause, 192 this._onPause,
200 this._onResume, 193 this._onResume,
201 this._onCancel); 194 this._onCancel);
202 195
203 void _onSubscriptionStateChange() { 196 void _onSubscriptionStateChange() {
204 _runGuarded(_hasListener ? _onListen : _onCancel); 197 _runGuarded(_hasListener ? _onListen : _onCancel);
205 } 198 }
206 199
207 void _onPauseStateChange() { 200 void _onPauseStateChange() {
208 _runGuarded(_isPaused ? _onPause : _onResume); 201 _runGuarded(_isPaused ? _onPause : _onResume);
209 } 202 }
210 } 203 }
OLDNEW
« no previous file with comments | « sdk/lib/async/stream.dart ('k') | sdk/lib/async/stream_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698