| Index: src/object-observe.js
|
| diff --git a/src/object-observe.js b/src/object-observe.js
|
| index 499b27eca1bef61b76b367f591fbc66413cd09bd..7ccc619ad4b5b23dd2bda7a3098471d83c154fe6 100644
|
| --- a/src/object-observe.js
|
| +++ b/src/object-observe.js
|
| @@ -63,6 +63,7 @@ if (IS_UNDEFINED(observationState.callbackInfoMap)) {
|
| observationState.notifierObjectInfoMap = %ObservationWeakMapCreate();
|
| observationState.pendingObservers = null;
|
| observationState.nextCallbackPriority = 0;
|
| + observationState.microtaskScheduled = false;
|
| }
|
|
|
| function ObservationWeakMap(map) {
|
| @@ -395,6 +396,7 @@ function ObserverEnqueueIfActive(observer, objectInfo, changeRecord,
|
| observationState.pendingObservers[callbackInfo.priority] = callback;
|
| callbackInfo.push(changeRecord);
|
| %SetMicrotaskPending(true);
|
| + EnqueueObserveMicrotask();
|
| }
|
|
|
| function ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord, type) {
|
| @@ -575,6 +577,7 @@ function ObjectDeliverChangeRecords(callback) {
|
| }
|
|
|
| function ObserveMicrotaskRunner() {
|
| + observationState.microtaskScheduled = false;
|
| var pendingObservers = observationState.pendingObservers;
|
| if (pendingObservers) {
|
| observationState.pendingObservers = null;
|
| @@ -583,7 +586,14 @@ function ObserveMicrotaskRunner() {
|
| }
|
| }
|
| }
|
| -RunMicrotasks.runners.push(ObserveMicrotaskRunner);
|
| +
|
| +function EnqueueObserveMicrotask() {
|
| + if (observationState.microtaskScheduled)
|
| + return;
|
| +
|
| + RunMicrotasks.queue.push(ObserveMicrotaskRunner);
|
| + observationState.microtaskScheduled = true;
|
| +}
|
|
|
| function SetupObjectObserve() {
|
| %CheckIsBootstrapping();
|
|
|