Index: src/v8natives.js |
=================================================================== |
--- src/v8natives.js (revision 5046) |
+++ src/v8natives.js (working copy) |
@@ -723,7 +723,7 @@ |
// ES5 section 15.2.3.7. |
function ObjectDefineProperties(obj, properties) { |
- if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
+ if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
!IS_UNDETECTABLE(obj)) |
throw MakeTypeError("obj_ctor_property_non_object", ["defineProperties"]); |
var props = ToObject(properties); |
@@ -745,6 +745,24 @@ |
} |
+// ES5 section 15.2.3.9. |
+function ObjectFreeze(obj) { |
+ if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
+ !IS_UNDETECTABLE(obj)) { |
+ throw MakeTypeError("obj_ctor_property_non_object", ["freeze"]); |
+ } |
+ var names = ObjectGetOwnPropertyNames(obj); |
+ for (var key in names) { |
+ var name = names[key]; |
+ var desc = GetOwnProperty(obj, name); |
+ if (IsDataDescriptor(desc)) desc.setWritable(false); |
+ if (desc.isConfigurable()) desc.setConfigurable(false); |
+ DefineOwnProperty(obj, name, desc, true); |
+ } |
+ ObjectPreventExtension(obj); |
+} |
+ |
+ |
// ES5 section 15.2.3.10 |
function ObjectPreventExtension(obj) { |
if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
@@ -756,6 +774,26 @@ |
} |
+// ES5 section 15.2.3.12 |
+function ObjectIsFrozen(obj) { |
+ if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
+ !IS_UNDETECTABLE(obj)) { |
+ throw MakeTypeError("obj_ctor_property_non_object", ["isFrozen"]); |
+ } |
+ var names = ObjectGetOwnPropertyNames(obj); |
+ for (var key in names) { |
+ var name = names[key]; |
+ var desc = GetOwnProperty(obj, name); |
+ if (IsDataDescriptor(desc) && desc.writable) return false; |
+ if (desc.configurable) return false; |
+ } |
+ if (!ObjectIsExtensible(obj)) { |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+ |
// ES5 section 15.2.3.13 |
function ObjectIsExtensible(obj) { |
if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
@@ -799,10 +837,12 @@ |
"create", ObjectCreate, |
"defineProperty", ObjectDefineProperty, |
"defineProperties", ObjectDefineProperties, |
+ "freeze", ObjectFreeze, |
"getPrototypeOf", ObjectGetPrototypeOf, |
"getOwnPropertyDescriptor", ObjectGetOwnPropertyDescriptor, |
"getOwnPropertyNames", ObjectGetOwnPropertyNames, |
"isExtensible", ObjectIsExtensible, |
+ "isFrozen", ObjectIsFrozen, |
"preventExtensions", ObjectPreventExtension |
)); |
} |