Revision: 5960
Author: [email protected]
Date: Fri Dec 10 03:27:15 2010
Log: Fix issue 965.
Review URL: http://codereview.chromium.org/5773002
http://code.google.com/p/v8/source/detail?r=5960
Modified:
/branches/bleeding_edge/src/v8natives.js
/branches/bleeding_edge/test/mjsunit/object-define-property.js
=======================================
--- /branches/bleeding_edge/src/v8natives.js Tue Dec 7 03:01:02 2010
+++ /branches/bleeding_edge/src/v8natives.js Fri Dec 10 03:27:15 2010
@@ -615,7 +615,13 @@
} else {
flag |= READ_ONLY;
}
- %DefineOrRedefineDataProperty(obj, p, desc.getValue(), flag);
+ var value; // Default value is undefined.
+ if (desc.hasValue()) {
+ value = desc.getValue();
+ } else if (!IS_UNDEFINED(current)) {
+ value = current.getValue();
+ }
+ %DefineOrRedefineDataProperty(obj, p, value, flag);
} else {
if (desc.hasGetter() && IS_FUNCTION(desc.getGet())) {
%DefineOrRedefineAccessorProperty(obj, p, GETTER, desc.getGet(),
flag);
=======================================
--- /branches/bleeding_edge/test/mjsunit/object-define-property.js Tue Dec
7 03:01:02 2010
+++ /branches/bleeding_edge/test/mjsunit/object-define-property.js Fri Dec
10 03:27:15 2010
@@ -866,4 +866,36 @@
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 = 37;
+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);
+
+var o = { };
+Object.defineProperty(o, "x", { writable: false });
+assertEquals(undefined, o.x);
+o.x = 37;
+assertEquals(undefined, o.x);
+
+o = { get x() { return 87; } };
+Object.defineProperty(o, "x", { writable: false });
+assertEquals(undefined, o.x);
+o.x = 37;
+assertEquals(undefined, o.x);
+
+// Ignore inherited properties.
+o = { __proto__ : { x : 87 } };
+Object.defineProperty(o, "x", { writable: false });
+assertEquals(undefined, o.x);
+o.x = 37;
+assertEquals(undefined, o.x);
+
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev