Index: src/array.js |
diff --git a/src/array.js b/src/array.js |
index 32a370fda862f81c293b3b39f6a075438ae96ec5..281c507f5a6d6e83b4dd196e3170a0538950fa33 100644 |
--- a/src/array.js |
+++ b/src/array.js |
@@ -1314,13 +1314,12 @@ function ArrayIsArray(obj) { |
// ------------------------------------------------------------------- |
-function SetUpArray() { |
- %CheckIsBootstrapping(); |
- // Set up non-enumerable constructor property on the Array.prototype |
+function SetupArray() { |
+ // Setup non-enumerable constructor property on the Array.prototype |
// object. |
%SetProperty($Array.prototype, "constructor", $Array, DONT_ENUM); |
- // Set up non-enumerable functions on the Array object. |
+ // Setup non-enumerable functions on the Array object. |
InstallFunctions($Array, DONT_ENUM, $Array( |
"isArray", ArrayIsArray |
)); |
@@ -1338,7 +1337,7 @@ function SetUpArray() { |
return f; |
} |
- // Set up non-enumerable functions of the Array.prototype object and |
+ // Setup non-enumerable functions of the Array.prototype object and |
// set their names. |
// Manipulate the length of some of the functions to meet |
// expectations set by ECMA-262 or Mozilla. |
@@ -1369,13 +1368,19 @@ function SetUpArray() { |
%FinishArrayPrototypeSetup($Array.prototype); |
// The internal Array prototype doesn't need to be fancy, since it's never |
- // exposed to user code. |
- // Adding only the functions that are actually used. |
- SetUpLockedPrototype(InternalArray, $Array(), $Array( |
- "join", getFunction("join", ArrayJoin), |
- "pop", getFunction("pop", ArrayPop), |
- "push", getFunction("push", ArrayPush) |
- )); |
+ // exposed to user code, so no hidden prototypes or DONT_ENUM attributes |
+ // are necessary. |
+ // The null __proto__ ensures that we never inherit any user created |
+ // getters or setters from, e.g., Object.prototype. |
+ InternalArray.prototype.__proto__ = null; |
+ // Adding only the functions that are actually used, and a toString. |
+ InternalArray.prototype.join = getFunction("join", ArrayJoin); |
+ InternalArray.prototype.pop = getFunction("pop", ArrayPop); |
+ InternalArray.prototype.push = getFunction("push", ArrayPush); |
+ InternalArray.prototype.toString = function() { |
+ return "Internal Array, length " + this.length; |
+ }; |
} |
-SetUpArray(); |
+ |
+SetupArray(); |