| Index: src/accessors.cc
|
| ===================================================================
|
| --- src/accessors.cc (revision 6892)
|
| +++ src/accessors.cc (working copy)
|
| @@ -446,8 +446,15 @@
|
| bool found_it = false;
|
| JSFunction* function = FindInPrototypeChain<JSFunction>(object, &found_it);
|
| if (!found_it) return Heap::undefined_value();
|
| + while (!function->should_have_prototype()) {
|
| + found_it = false;
|
| + function = FindInPrototypeChain<JSFunction>(object->GetPrototype(),
|
| + &found_it);
|
| + // There has to be one because we hit the getter.
|
| + ASSERT(found_it);
|
| + }
|
| +
|
| if (!function->has_prototype()) {
|
| - if (!function->should_have_prototype()) return Heap::undefined_value();
|
| Object* prototype;
|
| { MaybeObject* maybe_prototype = Heap::AllocateFunctionPrototype(function);
|
| if (!maybe_prototype->ToObject(&prototype)) return maybe_prototype;
|
| @@ -467,6 +474,13 @@
|
| bool found_it = false;
|
| JSFunction* function = FindInPrototypeChain<JSFunction>(object, &found_it);
|
| if (!found_it) return Heap::undefined_value();
|
| + if (!function->should_have_prototype()) {
|
| + // Since we hit this accessor, object will have no prototype property.
|
| + return object->SetLocalPropertyIgnoreAttributes(Heap::prototype_symbol(),
|
| + value,
|
| + NONE);
|
| + }
|
| +
|
| if (function->has_initial_map()) {
|
| // If the function has allocated the initial map
|
| // replace it with a copy containing the new prototype.
|
|
|