Chromium Code Reviews| Index: src/accessors.cc |
| =================================================================== |
| --- src/accessors.cc (revision 6865) |
| +++ src/accessors.cc (working copy) |
| @@ -446,8 +446,14 @@ |
| 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); |
| + ASSERT(found_it); // There has to be one because we hit the getter |
|
Mads Ager (chromium)
2011/02/22 12:24:31
Period at end of comment. Maybe move the comment t
|
| + } |
| + |
| 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 +473,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. |