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 = []; |