Reviewers: Rico,

Description:
Fix issue 965.

Please review this at http://codereview.chromium.org/5773002/

Affected files:
  M src/v8natives.js
  M test/mjsunit/object-define-property.js


Index: src/v8natives.js
diff --git a/src/v8natives.js b/src/v8natives.js
index 50a2774d122072654cabadc5b8e0a9d8a4f81921..afa18cb4ddc20d0df8b0f9a29cfa075329edb8ec 100644
--- a/src/v8natives.js
+++ b/src/v8natives.js
@@ -615,7 +615,9 @@ function DefineOwnProperty(obj, p, desc, should_throw) {
     } else {
       flag |= READ_ONLY;
     }
-    %DefineOrRedefineDataProperty(obj, p, desc.getValue(), flag);
+    var value =
+ desc.hasValue() ? desc.getValue() : (current && current.getValue());
+    %DefineOrRedefineDataProperty(obj, p, value, flag);
   } else {
     if (desc.hasGetter() && IS_FUNCTION(desc.getGet())) {
%DefineOrRedefineAccessorProperty(obj, p, GETTER, desc.getGet(), flag);
Index: test/mjsunit/object-define-property.js
diff --git a/test/mjsunit/object-define-property.js b/test/mjsunit/object-define-property.js index b258aa75bf375e279e207746c383168d5ba62dd6..57d79b595f7b1171bdcaea7902e220b7d990ecd5 100644
--- a/test/mjsunit/object-define-property.js
+++ b/test/mjsunit/object-define-property.js
@@ -866,4 +866,15 @@ assertFalse(desc.writable);
 assertFalse(desc.enumerable);
 assertFalse(desc.configurable);

+// See issue 968: http://code.google.com/p/v8/issues/detail?id=968
+var o = { x : 42 };
+Object.defineProperty(o, "x", { writable: false });
+assertEquals(42, o.x);
+
+o = { x : 42 };
+Object.defineProperty(o, "x", {});
+assertEquals(42, o.x);
+o.x = 37;
+// Writability is preserved.
+assertEquals(37, o.x);



--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to