| Index: src/v8natives.js | 
| diff --git a/src/v8natives.js b/src/v8natives.js | 
| index 5f870c8208f7c2add547a7d5ab378e11498958e8..754fdd6fc7d34c0b5864006d3cd0945c6b960f4a 100644 | 
| --- a/src/v8natives.js | 
| +++ b/src/v8natives.js | 
| @@ -26,7 +26,6 @@ | 
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
|  | 
| // This file relies on the fact that the following declarations have been made | 
| -// | 
| // in runtime.js: | 
| // var $Object = global.Object; | 
| // var $Boolean = global.Boolean; | 
| @@ -43,7 +42,6 @@ var $isFinite = GlobalIsFinite; | 
|  | 
| // ---------------------------------------------------------------------------- | 
|  | 
| - | 
| // Helper function used to install functions on objects. | 
| function InstallFunctions(object, attributes, functions) { | 
| if (functions.length >= 8) { | 
| @@ -198,6 +196,7 @@ function GlobalEval(x) { | 
| // Set up global object. | 
| function SetUpGlobal() { | 
| %CheckIsBootstrapping(); | 
| + | 
| // ECMA 262 - 15.1.1.1. | 
| %SetProperty(global, "NaN", $NaN, DONT_ENUM | DONT_DELETE | READ_ONLY); | 
|  | 
| @@ -220,27 +219,10 @@ function SetUpGlobal() { | 
|  | 
| SetUpGlobal(); | 
|  | 
| -// ---------------------------------------------------------------------------- | 
| -// Boolean (first part of definition) | 
| - | 
| - | 
| -%SetCode($Boolean, function(x) { | 
| -  if (%_IsConstructCall()) { | 
| -    %_SetValueOf(this, ToBoolean(x)); | 
| -  } else { | 
| -    return ToBoolean(x); | 
| -  } | 
| -}); | 
| - | 
| -%FunctionSetPrototype($Boolean, new $Boolean(false)); | 
| - | 
| -%SetProperty($Boolean.prototype, "constructor", $Boolean, DONT_ENUM); | 
|  | 
| // ---------------------------------------------------------------------------- | 
| // Object | 
|  | 
| -$Object.prototype.constructor = $Object; | 
| - | 
| // ECMA-262 - 15.2.4.2 | 
| function ObjectToString() { | 
| if (IS_UNDEFINED(this) && !IS_UNDETECTABLE(this)) return "[object Undefined]"; | 
| @@ -1357,7 +1339,7 @@ function ObjectPoisonProto(obj) { | 
| } | 
|  | 
|  | 
| -%SetCode($Object, function(x) { | 
| +function ObjectConstructor(x) { | 
| if (%_IsConstructCall()) { | 
| if (x == null) return this; | 
| return ToObject(x); | 
| @@ -1365,7 +1347,7 @@ function ObjectPoisonProto(obj) { | 
| if (x == null) return { }; | 
| return ToObject(x); | 
| } | 
| -}); | 
| +} | 
|  | 
|  | 
| // ---------------------------------------------------------------------------- | 
| @@ -1374,6 +1356,8 @@ function ObjectPoisonProto(obj) { | 
| function SetUpObject() { | 
| %CheckIsBootstrapping(); | 
|  | 
| +  $Object.prototype.constructor = $Object; | 
| +  %SetCode($Object, ObjectConstructor); | 
| %FunctionSetName(ObjectPoisonProto, "__proto__"); | 
| %FunctionRemovePrototype(ObjectPoisonProto); | 
| %SetExpectedNumberOfProperties($Object, 4); | 
| @@ -1415,9 +1399,19 @@ function SetUpObject() { | 
|  | 
| SetUpObject(); | 
|  | 
| + | 
| // ---------------------------------------------------------------------------- | 
| // Boolean | 
|  | 
| +function BooleanConstructor(x) { | 
| +  if (%_IsConstructCall()) { | 
| +    %_SetValueOf(this, ToBoolean(x)); | 
| +  } else { | 
| +    return ToBoolean(x); | 
| +  } | 
| +} | 
| + | 
| + | 
| function BooleanToString() { | 
| // NOTE: Both Boolean objects and values can enter here as | 
| // 'this'. This is not as dictated by ECMA-262. | 
| @@ -1444,9 +1438,13 @@ function BooleanValueOf() { | 
|  | 
| // ---------------------------------------------------------------------------- | 
|  | 
| - | 
| function SetUpBoolean () { | 
| %CheckIsBootstrapping(); | 
| + | 
| +  %SetCode($Boolean, BooleanConstructor); | 
| +  %FunctionSetPrototype($Boolean, new $Boolean(false)); | 
| +  %SetProperty($Boolean.prototype, "constructor", $Boolean, DONT_ENUM); | 
| + | 
| InstallFunctions($Boolean.prototype, DONT_ENUM, $Array( | 
| "toString", BooleanToString, | 
| "valueOf", BooleanValueOf | 
| @@ -1459,17 +1457,15 @@ SetUpBoolean(); | 
| // ---------------------------------------------------------------------------- | 
| // Number | 
|  | 
| -// Set the Number function and constructor. | 
| -%SetCode($Number, function(x) { | 
| +function NumberConstructor(x) { | 
| var value = %_ArgumentsLength() == 0 ? 0 : ToNumber(x); | 
| if (%_IsConstructCall()) { | 
| %_SetValueOf(this, value); | 
| } else { | 
| return value; | 
| } | 
| -}); | 
| +} | 
|  | 
| -%FunctionSetPrototype($Number, new $Number(0)); | 
|  | 
| // ECMA-262 section 15.7.4.2. | 
| function NumberToString(radix) { | 
| @@ -1607,6 +1603,10 @@ function NumberIsNaN(number) { | 
|  | 
| function SetUpNumber() { | 
| %CheckIsBootstrapping(); | 
| + | 
| +  %SetCode($Number, NumberConstructor); | 
| +  %FunctionSetPrototype($Number, new $Number(0)); | 
| + | 
| %OptimizeObjectForAddingMultipleProperties($Number.prototype, 8); | 
| // Set up the constructor property on the Number prototype object. | 
| %SetProperty($Number.prototype, "constructor", $Number, DONT_ENUM); | 
| @@ -1659,8 +1659,6 @@ SetUpNumber(); | 
| // ---------------------------------------------------------------------------- | 
| // Function | 
|  | 
| -$Function.prototype.constructor = $Function; | 
| - | 
| function FunctionSourceString(func) { | 
| while (%IsJSFunctionProxy(func)) { | 
| func = %GetCallTrap(func); | 
| @@ -1784,12 +1782,15 @@ function NewFunction(arg1) {  // length == 1 | 
| return %SetNewFunctionAttributes(f); | 
| } | 
|  | 
| -%SetCode($Function, NewFunction); | 
|  | 
| // ---------------------------------------------------------------------------- | 
|  | 
| function SetUpFunction() { | 
| %CheckIsBootstrapping(); | 
| + | 
| +  $Function.prototype.constructor = $Function; | 
| +  %SetCode($Function, NewFunction); | 
| + | 
| InstallFunctions($Function.prototype, DONT_ENUM, $Array( | 
| "bind", FunctionBind, | 
| "toString", FunctionToString | 
|  |