Index: src/v8natives.js |
=================================================================== |
--- src/v8natives.js (revision 5068) |
+++ src/v8natives.js (working copy) |
@@ -745,6 +745,23 @@ |
} |
+// ES5 section 15.2.3.8. |
+function ObjectSeal(obj) { |
+ if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
+ !IS_UNDETECTABLE(obj)) { |
+ throw MakeTypeError("obj_ctor_property_non_object", ["seal"]); |
+ } |
+ var names = ObjectGetOwnPropertyNames(obj); |
+ for (var key in names) { |
+ var name = names[key]; |
+ var desc = GetOwnProperty(obj, name); |
+ if (desc.isConfigurable()) desc.setConfigurable(false); |
+ DefineOwnProperty(obj, name, desc, true); |
+ } |
+ ObjectPreventExtension(obj); |
+} |
+ |
+ |
// ES5 section 15.2.3.9. |
function ObjectFreeze(obj) { |
if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
@@ -774,6 +791,25 @@ |
} |
+// ES5 section 15.2.3.11 |
+function ObjectIsSealed(obj) { |
+ if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
+ !IS_UNDETECTABLE(obj)) { |
+ throw MakeTypeError("obj_ctor_property_non_object", ["isSealed"]); |
+ } |
+ var names = ObjectGetOwnPropertyNames(obj); |
+ for (var key in names) { |
+ var name = names[key]; |
+ var desc = GetOwnProperty(obj, name); |
+ if (desc.isConfigurable()) return false; |
+ } |
+ if (!ObjectIsExtensible(obj)) { |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+ |
// ES5 section 15.2.3.12 |
function ObjectIsFrozen(obj) { |
if ((!IS_SPEC_OBJECT_OR_NULL(obj) || IS_NULL_OR_UNDEFINED(obj)) && |
@@ -843,7 +879,9 @@ |
"getOwnPropertyNames", ObjectGetOwnPropertyNames, |
"isExtensible", ObjectIsExtensible, |
"isFrozen", ObjectIsFrozen, |
- "preventExtensions", ObjectPreventExtension |
+ "isSealed", ObjectIsSealed, |
+ "preventExtensions", ObjectPreventExtension, |
+ "seal", ObjectSeal |
)); |
} |