| Index: sdk/lib/async/stream_impl.dart
|
| diff --git a/sdk/lib/async/stream_impl.dart b/sdk/lib/async/stream_impl.dart
|
| index 3ed70b1d2587ce636f033b2d413fea6c81e47095..13285a66d03d104bdb99b20fd59fb98747c89811 100644
|
| --- a/sdk/lib/async/stream_impl.dart
|
| +++ b/sdk/lib/async/stream_impl.dart
|
| @@ -179,8 +179,17 @@ abstract class _StreamImpl<T> extends Stream<T> {
|
|
|
| /** Update the stream's own pause count only. */
|
| void _updatePauseCount(int by) {
|
| - _state += by << _STREAM_PAUSE_COUNT_SHIFT;
|
| + int oldState = _state;
|
| + // We can't just _state += by << _STREAM_PAUSE_COUNT_SHIFT, since dart2js
|
| + // converts the result of the left-shift to a positive number.
|
| + if (by >= 0) {
|
| + _state = oldState + (by << _STREAM_PAUSE_COUNT_SHIFT);
|
| + } else {
|
| + _state = oldState - ((-by) << _STREAM_PAUSE_COUNT_SHIFT);
|
| + }
|
| assert(_state >= 0);
|
| + assert((_state >> _STREAM_PAUSE_COUNT_SHIFT) ==
|
| + (oldState >> _STREAM_PAUSE_COUNT_SHIFT) + by);
|
| }
|
|
|
| void _setClosed() {
|
|
|