| Index: src/v8natives.js
|
| ===================================================================
|
| --- src/v8natives.js (revision 4250)
|
| +++ src/v8natives.js (working copy)
|
| @@ -221,7 +221,7 @@
|
|
|
| // ECMA-262 - 15.2.4.6
|
| function ObjectIsPrototypeOf(V) {
|
| - if (!IS_OBJECT(V) && !IS_FUNCTION(V)) return false;
|
| + if (!IS_OBJECT(V) && !IS_FUNCTION(V) && !IS_UNDETECTABLE(V)) return false;
|
| return %IsInPrototypeChain(this, V);
|
| }
|
|
|
| @@ -236,7 +236,7 @@
|
|
|
| // Extensions for providing property getters and setters.
|
| function ObjectDefineGetter(name, fun) {
|
| - if (this == null) {
|
| + if (this == null && !IS_UNDETECTABLE(this)) {
|
| throw new $TypeError('Object.prototype.__defineGetter__: this is Null');
|
| }
|
| if (!IS_FUNCTION(fun)) {
|
| @@ -247,7 +247,7 @@
|
|
|
|
|
| function ObjectLookupGetter(name) {
|
| - if (this == null) {
|
| + if (this == null && !IS_UNDETECTABLE(this)) {
|
| throw new $TypeError('Object.prototype.__lookupGetter__: this is Null');
|
| }
|
| return %LookupAccessor(ToObject(this), ToString(name), GETTER);
|
| @@ -255,7 +255,7 @@
|
|
|
|
|
| function ObjectDefineSetter(name, fun) {
|
| - if (this == null) {
|
| + if (this == null && !IS_UNDETECTABLE(this)) {
|
| throw new $TypeError('Object.prototype.__defineSetter__: this is Null');
|
| }
|
| if (!IS_FUNCTION(fun)) {
|
| @@ -267,7 +267,7 @@
|
|
|
|
|
| function ObjectLookupSetter(name) {
|
| - if (this == null) {
|
| + if (this == null && !IS_UNDETECTABLE(this)) {
|
| throw new $TypeError('Object.prototype.__lookupSetter__: this is Null');
|
| }
|
| return %LookupAccessor(ToObject(this), ToString(name), SETTER);
|
| @@ -275,7 +275,8 @@
|
|
|
|
|
| function ObjectKeys(obj) {
|
| - if ((!IS_OBJECT(obj) || IS_NULL_OR_UNDEFINED(obj)) && !IS_FUNCTION(obj))
|
| + if ((!IS_OBJECT(obj) || IS_NULL_OR_UNDEFINED(obj)) && !IS_FUNCTION(obj) &&
|
| + !IS_UNDETECTABLE(obj))
|
| throw MakeTypeError("obj_ctor_property_non_object", ["keys"]);
|
| return %LocalKeys(obj);
|
| }
|
| @@ -594,7 +595,8 @@
|
|
|
| // ES5 section 15.2.3.2.
|
| function ObjectGetPrototypeOf(obj) {
|
| - if ((!IS_OBJECT(obj) || IS_NULL_OR_UNDEFINED(obj)) && !IS_FUNCTION(obj))
|
| + if ((!IS_OBJECT(obj) || IS_NULL_OR_UNDEFINED(obj)) && !IS_FUNCTION(obj) &&
|
| + !IS_UNDETECTABLE(obj))
|
| throw MakeTypeError("obj_ctor_property_non_object", ["getPrototypeOf"]);
|
| return obj.__proto__;
|
| }
|
| @@ -602,7 +604,8 @@
|
|
|
| // ES5 section 15.2.3.3
|
| function ObjectGetOwnPropertyDescriptor(obj, p) {
|
| - if ((!IS_OBJECT(obj) || IS_NULL_OR_UNDEFINED(obj)) && !IS_FUNCTION(obj))
|
| + if ((!IS_OBJECT(obj) || IS_NULL_OR_UNDEFINED(obj)) && !IS_FUNCTION(obj) &&
|
| + !IS_UNDETECTABLE(obj))
|
| throw MakeTypeError("obj_ctor_property_non_object", ["getOwnPropertyDescriptor"]);
|
| var desc = GetOwnProperty(obj, p);
|
| return FromPropertyDescriptor(desc);
|
| @@ -611,7 +614,8 @@
|
|
|
| // ES5 section 15.2.3.4.
|
| function ObjectGetOwnPropertyNames(obj) {
|
| - if ((!IS_OBJECT(obj) || IS_NULL_OR_UNDEFINED(obj)) && !IS_FUNCTION(obj))
|
| + if ((!IS_OBJECT(obj) || IS_NULL_OR_UNDEFINED(obj)) && !IS_FUNCTION(obj) &&
|
| + !IS_UNDETECTABLE(obj))
|
| throw MakeTypeError("obj_ctor_property_non_object", ["getOwnPropertyNames"]);
|
|
|
| // Find all the indexed properties.
|
| @@ -664,7 +668,8 @@
|
|
|
| // ES5 section 15.2.3.6.
|
| function ObjectDefineProperty(obj, p, attributes) {
|
| - if ((!IS_OBJECT(obj) || IS_NULL_OR_UNDEFINED(obj)) && !IS_FUNCTION(obj))
|
| + if ((!IS_OBJECT(obj) || IS_NULL_OR_UNDEFINED(obj)) && !IS_FUNCTION(obj) &&
|
| + !IS_UNDETECTABLE(obj))
|
| throw MakeTypeError("obj_ctor_property_non_object", ["defineProperty"]);
|
| var name = ToString(p);
|
| var desc = ToPropertyDescriptor(attributes);
|
| @@ -675,7 +680,8 @@
|
|
|
| // ES5 section 15.2.3.7.
|
| function ObjectDefineProperties(obj, properties) {
|
| - if ((!IS_OBJECT(obj) || IS_NULL_OR_UNDEFINED(obj)) && !IS_FUNCTION(obj))
|
| + if ((!IS_OBJECT(obj) || IS_NULL_OR_UNDEFINED(obj)) && !IS_FUNCTION(obj) &&
|
| + !IS_UNDETECTABLE(obj))
|
| throw MakeTypeError("obj_ctor_property_non_object", ["defineProperties"]);
|
| var props = ToObject(properties);
|
| var key_values = [];
|
|
|