Object.observe/unobserve now return object
authorrossberg@chromium.org <rossberg@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 20 Nov 2012 10:38:14 +0000 (10:38 +0000)
committerrossberg@chromium.org <rossberg@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 20 Nov 2012 10:38:14 +0000 (10:38 +0000)
BUG=v8:2418

Review URL: https://codereview.chromium.org/11419078
Patch from Rafael Weinstein <rafaelw@chromium.org>.

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13009 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/object-observe.js
test/mjsunit/harmony/object-observe.js

index ea5de1f..c9ae652 100644 (file)
@@ -88,10 +88,10 @@ function ObjectObserve(object, callback) {
   }
 
   var changeObservers = objectInfo.changeObservers;
-  if (changeObservers.indexOf(callback) >= 0)
-    return;
+  if (changeObservers.indexOf(callback) < 0)
+    changeObservers.push(callback);
 
-  changeObservers.push(callback);
+  return object;
 }
 
 function ObjectUnobserve(object, callback) {
@@ -102,14 +102,14 @@ function ObjectUnobserve(object, callback) {
 
   var objectInfo = objectInfoMap.get(object);
   if (IS_UNDEFINED(objectInfo))
-    return;
+    return object;
 
   var changeObservers = objectInfo.changeObservers;
   var index = changeObservers.indexOf(callback);
-  if (index < 0)
-    return;
+  if (index >= 0)
+    changeObservers.splice(index, 1);
 
-  changeObservers.splice(index, 1);
+  return object;
 }
 
 function EnqueueChangeRecord(changeRecord, observers) {
index e2cc3f9..922a5f3 100644 (file)
@@ -98,10 +98,12 @@ Object.defineProperty(changeRecordWithAccessor, 'name', {
 assertThrows(function() { Object.observe("non-object", observer.callback); }, TypeError);
 assertThrows(function() { Object.observe(obj, nonFunction); }, TypeError);
 assertThrows(function() { Object.observe(obj, frozenFunction); }, TypeError);
+assertEquals(obj, Object.observe(obj, observer.callback));
 
 // Object.unobserve
 assertThrows(function() { Object.unobserve(4, observer.callback); }, TypeError);
 assertThrows(function() { Object.unobserve(obj, nonFunction); }, TypeError);
+assertEquals(obj, Object.unobserve(obj, observer.callback));
 
 // Object.getNotifier
 var notifier = Object.getNotifier(obj);