| Index: src/bootstrapper.cc
|
| ===================================================================
|
| --- src/bootstrapper.cc (revision 1886)
|
| +++ src/bootstrapper.cc (working copy)
|
| @@ -1483,14 +1483,19 @@
|
| JSFunction::cast(global->GetProperty(Heap::Array_symbol())));
|
| Handle<JSObject> visible_prototype =
|
| Handle<JSObject>(JSObject::cast(function->prototype()));
|
| - // Remember to skip the hidden prototype:
|
| - Handle<JSObject> hidden_prototype =
|
| - Handle<JSObject>(JSObject::cast(visible_prototype->GetPrototype()));
|
| - AddSpecialFunction(hidden_prototype, "pop",
|
| + // Remember to put push and pop on the hidden prototype if it's there.
|
| + Handle<JSObject> push_and_pop_prototype;
|
| + Handle<Object> superproto(visible_prototype->GetPrototype());
|
| + if (superproto->IsJSObject() &&
|
| + JSObject::cast(*superproto)->map()->is_hidden_prototype()) {
|
| + push_and_pop_prototype = Handle<JSObject>::cast(superproto);
|
| + } else {
|
| + push_and_pop_prototype = visible_prototype;
|
| + }
|
| + AddSpecialFunction(push_and_pop_prototype, "pop",
|
| Handle<Code>(Builtins::builtin(Builtins::ArrayPop)));
|
| - AddSpecialFunction(hidden_prototype, "push",
|
| + AddSpecialFunction(push_and_pop_prototype, "push",
|
| Handle<Code>(Builtins::builtin(Builtins::ArrayPush)));
|
| - ASSERT(hidden_prototype->map()->is_hidden_prototype());
|
| }
|
|
|
|
|
|
|