| Index: src/object-observe.js
|
| diff --git a/src/object-observe.js b/src/object-observe.js
|
| index 3ed27716837d9980a818f6c8d30cd665692eb78b..2923ec86a71695b629a80057c7b4dcff1f90e162 100644
|
| --- a/src/object-observe.js
|
| +++ b/src/object-observe.js
|
| @@ -82,14 +82,11 @@ function ObjectObserve(object, callback) {
|
| }
|
|
|
| var objectInfo = objectInfoMap.get(object);
|
| - if (IS_UNDEFINED(objectInfo)) {
|
| - objectInfo = CreateObjectInfo(object);
|
| - }
|
| + if (IS_UNDEFINED(objectInfo)) objectInfo = CreateObjectInfo(object);
|
| %SetIsObserved(object, true);
|
|
|
| var changeObservers = objectInfo.changeObservers;
|
| - if (changeObservers.indexOf(callback) < 0)
|
| - changeObservers.push(callback);
|
| + if (changeObservers.indexOf(callback) < 0) changeObservers.push(callback);
|
|
|
| return object;
|
| }
|
| @@ -108,8 +105,7 @@ function ObjectUnobserve(object, callback) {
|
| var index = changeObservers.indexOf(callback);
|
| if (index >= 0) {
|
| changeObservers.splice(index, 1);
|
| - if (changeObservers.length === 0)
|
| - %SetIsObserved(object, false);
|
| + if (changeObservers.length === 0) %SetIsObserved(object, false);
|
| }
|
|
|
| return object;
|
| @@ -141,30 +137,21 @@ function NotifyChange(type, object, name, oldValue) {
|
| var notifierPrototype = {};
|
|
|
| function ObjectNotifierNotify(changeRecord) {
|
| + var target = notifierTargetMap.get(this);
|
| if (!IS_SPEC_OBJECT(this))
|
| throw MakeTypeError("called_on_non_object", ["notify"]);
|
| -
|
| - var target = notifierTargetMap.get(this);
|
| if (IS_UNDEFINED(target))
|
| throw MakeTypeError("observe_notify_non_notifier");
|
| -
|
| if (!IS_STRING(changeRecord.type))
|
| throw MakeTypeError("observe_type_non_string");
|
|
|
| var objectInfo = objectInfoMap.get(target);
|
| - if (IS_UNDEFINED(objectInfo))
|
| + if (IS_UNDEFINED(objectInfo) || objectInfo.changeObservers.length === 0)
|
| return;
|
|
|
| - if (!objectInfo.changeObservers.length)
|
| - return;
|
| -
|
| - var newRecord = {
|
| - object: target
|
| - };
|
| + var newRecord = { object: target };
|
| for (var prop in changeRecord) {
|
| - if (prop === 'object')
|
| - continue;
|
| -
|
| + if (prop === 'object') continue;
|
| %DefineOrRedefineDataProperty(newRecord, prop, changeRecord[prop],
|
| READ_ONLY + DONT_DELETE);
|
| }
|
| @@ -177,17 +164,13 @@ function ObjectGetNotifier(object) {
|
| if (!IS_SPEC_OBJECT(object))
|
| throw MakeTypeError("observe_non_object", ["getNotifier"]);
|
|
|
| - if (ObjectIsFrozen(object))
|
| - return null;
|
| + if (ObjectIsFrozen(object)) return null;
|
|
|
| var objectInfo = objectInfoMap.get(object);
|
| - if (IS_UNDEFINED(objectInfo))
|
| - objectInfo = CreateObjectInfo(object);
|
| + if (IS_UNDEFINED(objectInfo)) objectInfo = CreateObjectInfo(object);
|
|
|
| if (IS_NULL(objectInfo.notifier)) {
|
| - objectInfo.notifier = {
|
| - __proto__: notifierPrototype
|
| - };
|
| + objectInfo.notifier = { __proto__: notifierPrototype };
|
| notifierTargetMap.set(objectInfo.notifier, object);
|
| }
|
|
|
| @@ -197,11 +180,11 @@ function ObjectGetNotifier(object) {
|
| function DeliverChangeRecordsForObserver(observer) {
|
| var observerInfo = observerInfoMap.get(observer);
|
| if (IS_UNDEFINED(observerInfo))
|
| - return;
|
| + return false;
|
|
|
| var pendingChangeRecords = observerInfo.pendingChangeRecords;
|
| if (IS_NULL(pendingChangeRecords))
|
| - return;
|
| + return false;
|
|
|
| observerInfo.pendingChangeRecords = null;
|
| delete observationState.pendingObservers[observerInfo.priority];
|
| @@ -210,13 +193,14 @@ function DeliverChangeRecordsForObserver(observer) {
|
| try {
|
| %Call(void 0, delivered, observer);
|
| } catch (ex) {}
|
| + return true;
|
| }
|
|
|
| function ObjectDeliverChangeRecords(callback) {
|
| if (!IS_SPEC_FUNCTION(callback))
|
| throw MakeTypeError("observe_non_function", ["deliverChangeRecords"]);
|
|
|
| - DeliverChangeRecordsForObserver(callback);
|
| + while (DeliverChangeRecordsForObserver(callback)) {}
|
| }
|
|
|
| function DeliverChangeRecords() {
|
|
|