Index: lib/runtime/dart/async.js |
diff --git a/lib/runtime/dart/async.js b/lib/runtime/dart/async.js |
index 15bf2596ad81c5f980b3efee9a4c7268351f6e0c..d0ed699a5b04ac71f075b5ce997317db3b2c25e5 100644 |
--- a/lib/runtime/dart/async.js |
+++ b/lib/runtime/dart/async.js |
@@ -156,7 +156,7 @@ var async; |
let subscription = null; |
// Function onListen: () → void |
function onListen() { |
- let add = controller.add; |
+ let add = controller.add.bind(controller); |
dart.assert(dart.is(controller, _StreamController) || dart.is(controller, _BroadcastStreamController)); |
let eventSink = controller; |
let addError = eventSink[_addError]; |
@@ -172,11 +172,11 @@ var async; |
if (dart.is(newValue, Future)) { |
subscription.pause(); |
- dart.dsend(dart.dsend(newValue, 'then', add, {onError: addError}), 'whenComplete', subscription.resume); |
+ dart.dsend(dart.dsend(newValue, 'then', add, {onError: addError}), 'whenComplete', dart.bind(subscription, 'resume')); |
} else { |
controller.add(newValue); |
} |
- }, {onError: dart.as(addError, core.Function), onDone: controller.close}); |
+ }, {onError: dart.as(addError, core.Function), onDone: controller.close.bind(controller)}); |
} |
if (this.isBroadcast) { |
controller = new StreamController.broadcast({ |
@@ -222,9 +222,9 @@ var async; |
if (newStream != null) { |
subscription.pause(); |
- controller.addStream(newStream).whenComplete(subscription.resume); |
+ controller.addStream(newStream).whenComplete(dart.bind(subscription, 'resume')); |
} |
- }, {onError: dart.as(eventSink[_addError], core.Function), onDone: controller.close}); |
+ }, {onError: dart.as(eventSink[_addError], core.Function), onDone: controller.close.bind(controller)}); |
} |
if (this.isBroadcast) { |
controller = new StreamController.broadcast({ |
@@ -279,7 +279,7 @@ var async; |
seenFirst = true; |
} |
}, { |
- onError: result[_completeError], |
+ onError: result[_completeError].bind(result), |
onDone: () => { |
if (!dart.notNull(seenFirst)) { |
try { |
@@ -356,7 +356,7 @@ var async; |
} |
}, dart.as(_cancelAndErrorClosure(subscription, future), dart.functionType(dart.dynamic, [dart.dynamic, core.StackTrace]))); |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
future[_complete](false); |
}, |
@@ -371,7 +371,7 @@ var async; |
_runUserCode(() => action(element), _ => { |
}, dart.as(_cancelAndErrorClosure(subscription, future), dart.functionType(dart.dynamic, [dart.dynamic, core.StackTrace]))); |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
future[_complete](null); |
}, |
@@ -389,7 +389,7 @@ var async; |
} |
}, dart.as(_cancelAndErrorClosure(subscription, future), dart.functionType(dart.dynamic, [dart.dynamic, core.StackTrace]))); |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
future[_complete](true); |
}, |
@@ -407,7 +407,7 @@ var async; |
} |
}, dart.as(_cancelAndErrorClosure(subscription, future), dart.functionType(dart.dynamic, [dart.dynamic, core.StackTrace]))); |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
future[_complete](false); |
}, |
@@ -421,7 +421,7 @@ var async; |
this.listen(_ => { |
count = dart.notNull(count) + 1; |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
future[_complete](count); |
}, |
@@ -435,7 +435,7 @@ var async; |
subscription = this.listen(_ => { |
_cancelAndValue(subscription, future, false); |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
future[_complete](true); |
}, |
@@ -449,7 +449,7 @@ var async; |
this.listen(data => { |
result[core.$add](data); |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
future[_complete](result); |
}, |
@@ -463,7 +463,7 @@ var async; |
this.listen(data => { |
result.add(data); |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
future[_complete](result); |
}, |
@@ -499,7 +499,7 @@ var async; |
subscription = this.listen(value => { |
_cancelAndValue(subscription, future, value); |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
try { |
throw _internal.IterableElementError.noElement(); |
@@ -522,7 +522,7 @@ var async; |
foundResult = true; |
result = value; |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
if (foundResult) { |
future[_complete](result); |
@@ -559,7 +559,7 @@ var async; |
foundResult = true; |
result = value; |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
if (foundResult) { |
future[_complete](result); |
@@ -588,10 +588,10 @@ var async; |
} |
}, dart.as(_cancelAndErrorClosure(subscription, future), dart.functionType(dart.dynamic, [dart.dynamic, core.StackTrace]))); |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
if (defaultValue != null) { |
- _runUserCode(defaultValue, future[_complete], future[_completeError]); |
+ _runUserCode(defaultValue, future[_complete].bind(future), future[_completeError].bind(future)); |
return; |
} |
try { |
@@ -620,14 +620,14 @@ var async; |
} |
}, dart.as(_cancelAndErrorClosure(subscription, future), dart.functionType(dart.dynamic, [dart.dynamic, core.StackTrace]))); |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
if (foundResult) { |
future[_complete](result); |
return; |
} |
if (defaultValue != null) { |
- _runUserCode(defaultValue, future[_complete], future[_completeError]); |
+ _runUserCode(defaultValue, future[_complete].bind(future), future[_completeError].bind(future)); |
return; |
} |
try { |
@@ -665,7 +665,7 @@ var async; |
} |
}, dart.as(_cancelAndErrorClosure(subscription, future), dart.functionType(dart.dynamic, [dart.dynamic, core.StackTrace]))); |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: () => { |
if (foundResult) { |
future[_complete](result); |
@@ -696,7 +696,7 @@ var async; |
} |
elementIndex = dart.notNull(elementIndex) + 1; |
}, { |
- onError: future[_completeError], |
+ onError: future[_completeError].bind(future), |
onDone: (() => { |
future[_completeError](new core.RangeError.index(index, this, "index", null, elementIndex)); |
}).bind(this), |
@@ -722,7 +722,7 @@ var async; |
timer.cancel(); |
dart.assert(dart.is(controller, _StreamController) || dart.is(controller, _BroadcastStreamController)); |
let eventSink = controller; |
- dart.dsend(eventSink, _addError, error, stackTrace); |
+ dart.dcall(eventSink[_addError], error, stackTrace); |
timer = zone.createTimer(timeLimit, dart.as(timeout, dart.functionType(dart.void, []))); |
} |
// Function onDone: () → void |
@@ -941,11 +941,11 @@ var async; |
let wasInputPaused = this[_isInputPaused]; |
this[_state] = dart.notNull(this[_state]) + dart.notNull(_BufferingStreamSubscription[_STATE_PAUSE_COUNT]) | dart.notNull(_BufferingStreamSubscription[_STATE_INPUT_PAUSED]); |
if (resumeSignal != null) |
- resumeSignal.whenComplete(this.resume); |
+ resumeSignal.whenComplete(this.resume.bind(this)); |
if (!dart.notNull(wasPaused) && dart.notNull(this[_pending] != null)) |
this[_pending].cancelSchedule(); |
if (!dart.notNull(wasInputPaused) && !dart.notNull(this[_inCallback])) |
- this[_guardCallback](this[_onPause]); |
+ this[_guardCallback](this[_onPause].bind(this)); |
} |
resume() { |
if (this[_isCanceled]) |
@@ -959,7 +959,7 @@ var async; |
dart.assert(this[_mayResumeInput]); |
this[_state] = dart.notNull(this[_state]) & ~dart.notNull(_BufferingStreamSubscription[_STATE_INPUT_PAUSED]); |
if (!dart.notNull(this[_inCallback])) |
- this[_guardCallback](this[_onResume]); |
+ this[_guardCallback](this[_onResume].bind(this)); |
} |
} |
} |
@@ -1624,7 +1624,7 @@ var async; |
if (resumeSignal === void 0) |
resumeSignal = null; |
if (resumeSignal != null) |
- resumeSignal.then(this[_resume]); |
+ resumeSignal.then(this[_resume].bind(this)); |
this[_pauseCount] = dart.notNull(this[_pauseCount]) + 1; |
} |
resume() { |
@@ -1821,7 +1821,7 @@ var async; |
let nextIteration = null; |
nextIteration = Zone.current.bindUnaryCallback(keepGoing => { |
if (keepGoing) { |
- new Future.sync(f).then(dart.as(nextIteration, __CastType4), {onError: doneSignal[_completeError]}); |
+ new Future.sync(f).then(dart.as(nextIteration, __CastType4), {onError: doneSignal[_completeError].bind(doneSignal)}); |
} else { |
doneSignal[_complete](null); |
} |
@@ -3123,7 +3123,7 @@ var async; |
class _AddStreamState extends core.Object { |
_AddStreamState(controller, source, cancelOnError) { |
this.addStreamFuture = new _Future(); |
- this.addSubscription = source.listen(controller[_add], {onError: dart.as(cancelOnError ? _AddStreamState.makeErrorHandler(controller) : controller[_addError], core.Function), onDone: controller[_close], cancelOnError: cancelOnError}); |
+ this.addSubscription = source.listen(controller[_add].bind(controller), {onError: dart.as(cancelOnError ? _AddStreamState.makeErrorHandler(controller) : controller[_addError].bind(controller), core.Function), onDone: controller[_close].bind(controller), cancelOnError: cancelOnError}); |
} |
static makeErrorHandler(controller) { |
return (e, s) => { |
@@ -3414,7 +3414,7 @@ var async; |
[_schedule]() { |
if (this[_isScheduled]) |
return; |
- this[_zone].scheduleMicrotask(this[_sendDone]); |
+ this[_zone].scheduleMicrotask(this[_sendDone].bind(this)); |
this[_state] = dart.notNull(this[_state]) | dart.notNull(_DoneStreamSubscription[_SCHEDULED]); |
} |
onData(handleData) {} |
@@ -3427,7 +3427,7 @@ var async; |
resumeSignal = null; |
this[_state] = dart.notNull(this[_state]) + dart.notNull(_DoneStreamSubscription[_PAUSED]); |
if (resumeSignal != null) |
- resumeSignal.whenComplete(this.resume); |
+ resumeSignal.whenComplete(this.resume.bind(this)); |
} |
resume() { |
if (this.isPaused) { |
@@ -3482,7 +3482,7 @@ var async; |
this[_controller] = null; |
this[_subscription] = null; |
super.Stream(); |
- this[_controller] = new (_AsBroadcastStreamController$(T))(this[_onListen], this[_onCancel]); |
+ this[_controller] = new (_AsBroadcastStreamController$(T))(this[_onListen].bind(this), this[_onCancel].bind(this)); |
} |
get isBroadcast() { |
return true; |
@@ -3495,7 +3495,7 @@ var async; |
return new (_DoneStreamSubscription$(T))(onDone); |
} |
if (this[_subscription] == null) { |
- this[_subscription] = this[_source].listen(this[_controller].add, {onError: this[_controller].addError, onDone: this[_controller].close}); |
+ this[_subscription] = this[_source].listen(dart.bind(this[_controller], 'add'), {onError: dart.bind(this[_controller], 'addError'), onDone: dart.bind(this[_controller], 'close')}); |
} |
cancelOnError = core.identical(true, cancelOnError); |
return this[_controller][_subscribe](onData, onError, onDone, cancelOnError); |
@@ -3599,7 +3599,7 @@ var async; |
this[_current] = null; |
this[_futureOrPrefetch] = null; |
this[_state] = _StreamIteratorImpl[_STATE_FOUND]; |
- this[_subscription] = stream.listen(this[_onData], {onError: this[_onError], onDone: this[_onDone], cancelOnError: true}); |
+ this[_subscription] = stream.listen(this[_onData].bind(this), {onError: this[_onError].bind(this), onDone: this[_onDone].bind(this), cancelOnError: true}); |
} |
get current() { |
return this[_current]; |
@@ -3805,7 +3805,7 @@ var async; |
this[_stream] = stream; |
this[_subscription] = null; |
super._BufferingStreamSubscription(onData, onError, onDone, cancelOnError); |
- this[_subscription] = this[_stream][_source].listen(this[_handleData], {onError: this[_handleError], onDone: this[_handleDone]}); |
+ this[_subscription] = this[_stream][_source].listen(this[_handleData].bind(this), {onError: this[_handleError].bind(this), onDone: this[_handleDone].bind(this)}); |
} |
[_add](data) { |
if (this[_isClosed]) |
@@ -4157,7 +4157,7 @@ var async; |
super._BufferingStreamSubscription(onData, onError, onDone, cancelOnError); |
let eventSink = new (_EventSinkWrapper$(T))(this); |
this[_transformerSink] = mapper(eventSink); |
- this[_subscription] = source.listen(this[_handleData], {onError: this[_handleError], onDone: this[_handleDone]}); |
+ this[_subscription] = source.listen(this[_handleData].bind(this), {onError: this[_handleError].bind(this), onDone: this[_handleDone].bind(this)}); |
} |
get [_isSubscribed]() { |
return this[_subscription] != null; |