Index: src/js/v8natives.js |
diff --git a/src/js/v8natives.js b/src/js/v8natives.js |
index 3148c4bcbbec1d1dec0aa062437b679a51e4e44d..d2cbf9675a09114ba25cf9f22ac60184fd2001e7 100644 |
--- a/src/js/v8natives.js |
+++ b/src/js/v8natives.js |
@@ -1032,47 +1032,42 @@ |
// ES5 section 15.2.3.6. |
function ObjectDefineProperty(obj, p, attributes) { |
- // The new pure-C++ implementation doesn't support Proxies yet, nor O.o. |
- // TODO(jkummerow): Implement missing features and remove fallback path. |
- if (%_IsJSProxy(obj) || %IsObserved(obj)) { |
- if (!IS_SPEC_OBJECT(obj)) { |
- throw MakeTypeError(kCalledOnNonObject, "Object.defineProperty"); |
- } |
- var name = TO_NAME(p); |
- if (%_IsJSProxy(obj)) { |
- // Clone the attributes object for protection. |
- // TODO(rossberg): not spec'ed yet, so not sure if this should involve |
- // non-own properties as it does (or non-enumerable ones, as it doesn't?). |
- var attributesClone = { __proto__: null }; |
- for (var a in attributes) { |
- attributesClone[a] = attributes[a]; |
+ if (!IS_SPEC_OBJECT(obj)) { |
+ throw MakeTypeError(kCalledOnNonObject, "Object.defineProperty"); |
+ } |
+ var name = TO_NAME(p); |
+ if (%_IsJSProxy(obj)) { |
+ // Clone the attributes object for protection. |
+ // TODO(rossberg): not spec'ed yet, so not sure if this should involve |
+ // non-own properties as it does (or non-enumerable ones, as it doesn't?). |
+ var attributesClone = { __proto__: null }; |
+ for (var a in attributes) { |
+ attributesClone[a] = attributes[a]; |
+ } |
+ DefineProxyProperty(obj, name, attributesClone, true); |
+ // The following would implement the spec as in the current proposal, |
+ // but after recent comments on es-discuss, is most likely obsolete. |
+ /* |
+ var defineObj = FromGenericPropertyDescriptor(desc); |
+ var names = ObjectGetOwnPropertyNames(attributes); |
+ var standardNames = |
+ {value: 0, writable: 0, get: 0, set: 0, enumerable: 0, configurable: 0}; |
+ for (var i = 0; i < names.length; i++) { |
+ var N = names[i]; |
+ if (!(%HasOwnProperty(standardNames, N))) { |
+ var attr = GetOwnPropertyJS(attributes, N); |
+ DefineOwnProperty(descObj, N, attr, true); |
} |
- DefineProxyProperty(obj, name, attributesClone, true); |
- // The following would implement the spec as in the current proposal, |
- // but after recent comments on es-discuss, is most likely obsolete. |
- /* |
- var defineObj = FromGenericPropertyDescriptor(desc); |
- var names = ObjectGetOwnPropertyNames(attributes); |
- var standardNames = |
- {value: 0, writable: 0, get: 0, set: 0, enumerable: 0, configurable: 0}; |
- for (var i = 0; i < names.length; i++) { |
- var N = names[i]; |
- if (!(%HasOwnProperty(standardNames, N))) { |
- var attr = GetOwnPropertyJS(attributes, N); |
- DefineOwnProperty(descObj, N, attr, true); |
- } |
- } |
- // This is really confusing the types, but it is what the proxies spec |
- // currently requires: |
- desc = descObj; |
- */ |
- } else { |
- var desc = ToPropertyDescriptor(attributes); |
- DefineOwnProperty(obj, name, desc, true); |
- } |
- return obj; |
- } |
- return %ObjectDefineProperty(obj, p, attributes); |
+ } |
+ // This is really confusing the types, but it is what the proxies spec |
+ // currently requires: |
+ desc = descObj; |
+ */ |
+ } else { |
+ var desc = ToPropertyDescriptor(attributes); |
+ DefineOwnProperty(obj, name, desc, true); |
+ } |
+ return obj; |
} |
@@ -1100,24 +1095,19 @@ |
// ES5 section 15.2.3.7. |
function ObjectDefineProperties(obj, properties) { |
- // The new pure-C++ implementation doesn't support Proxies yet, nor O.o. |
- // TODO(jkummerow): Implement missing features and remove fallback path. |
- if (%_IsJSProxy(obj) || %_IsJSProxy(properties) || %IsObserved(obj)) { |
- if (!IS_SPEC_OBJECT(obj)) { |
- throw MakeTypeError(kCalledOnNonObject, "Object.defineProperties"); |
- } |
- var props = TO_OBJECT(properties); |
- var names = GetOwnEnumerablePropertyNames(props); |
- var descriptors = new InternalArray(); |
- for (var i = 0; i < names.length; i++) { |
- descriptors.push(ToPropertyDescriptor(props[names[i]])); |
- } |
- for (var i = 0; i < names.length; i++) { |
- DefineOwnProperty(obj, names[i], descriptors[i], true); |
- } |
- return obj; |
- } |
- return %ObjectDefineProperties(obj, properties); |
+ if (!IS_SPEC_OBJECT(obj)) { |
+ throw MakeTypeError(kCalledOnNonObject, "Object.defineProperties"); |
+ } |
+ var props = TO_OBJECT(properties); |
+ var names = GetOwnEnumerablePropertyNames(props); |
+ var descriptors = new InternalArray(); |
+ for (var i = 0; i < names.length; i++) { |
+ descriptors.push(ToPropertyDescriptor(props[names[i]])); |
+ } |
+ for (var i = 0; i < names.length; i++) { |
+ DefineOwnProperty(obj, names[i], descriptors[i], true); |
+ } |
+ return obj; |
} |