| 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
|
| ));
|
| }
|
|
|
|
|