| Index: src/accessors.cc
|
| diff --git a/src/accessors.cc b/src/accessors.cc
|
| index e441de47ee84289198ba5e368f517dfd91f89403..648f1135bc7f3f1fb2009a1b1cc46c821a59c70e 100644
|
| --- a/src/accessors.cc
|
| +++ b/src/accessors.cc
|
| @@ -450,26 +450,23 @@ Handle<Object> Accessors::FunctionGetPrototype(Handle<Object> object) {
|
|
|
| MaybeObject* Accessors::FunctionGetPrototype(Object* object, void*) {
|
| Isolate* isolate = Isolate::Current();
|
| - JSFunction* function = FindInstanceOf<JSFunction>(isolate, object);
|
| - if (function == NULL) return isolate->heap()->undefined_value();
|
| - while (!function->should_have_prototype()) {
|
| - function = FindInstanceOf<JSFunction>(isolate, function->GetPrototype());
|
| + JSFunction* function_raw = FindInstanceOf<JSFunction>(isolate, object);
|
| + if (function_raw == NULL) return isolate->heap()->undefined_value();
|
| + while (!function_raw->should_have_prototype()) {
|
| + function_raw = FindInstanceOf<JSFunction>(isolate,
|
| + function_raw->GetPrototype());
|
| // There has to be one because we hit the getter.
|
| - ASSERT(function != NULL);
|
| + ASSERT(function_raw != NULL);
|
| }
|
|
|
| - if (!function->has_prototype()) {
|
| - Object* prototype;
|
| - { MaybeObject* maybe_prototype
|
| - = isolate->heap()->AllocateFunctionPrototype(function);
|
| - if (!maybe_prototype->ToObject(&prototype)) return maybe_prototype;
|
| - }
|
| - Object* result;
|
| - { MaybeObject* maybe_result = function->SetPrototype(prototype);
|
| - if (!maybe_result->ToObject(&result)) return maybe_result;
|
| - }
|
| + if (!function_raw->has_prototype()) {
|
| + HandleScope scope(isolate);
|
| + Handle<JSFunction> function(function_raw);
|
| + Handle<Object> proto = isolate->factory()->NewFunctionPrototype(function);
|
| + JSFunction::SetPrototype(function, proto);
|
| + function_raw = *function;
|
| }
|
| - return function->prototype();
|
| + return function_raw->prototype();
|
| }
|
|
|
|
|
| @@ -503,9 +500,7 @@ MaybeObject* Accessors::FunctionSetPrototype(JSObject* object,
|
| old_value = isolate->factory()->NewFunctionPrototype(function);
|
| }
|
|
|
| - Handle<Object> result;
|
| - MaybeObject* maybe_result = function->SetPrototype(*value);
|
| - if (!maybe_result->ToHandle(&result, isolate)) return maybe_result;
|
| + JSFunction::SetPrototype(function, value);
|
| ASSERT(function->prototype() == *value);
|
|
|
| if (is_observed && !old_value->SameValue(*value)) {
|
|
|