| Index: src/ppc/lithium-codegen-ppc.cc
|
| diff --git a/src/ppc/lithium-codegen-ppc.cc b/src/ppc/lithium-codegen-ppc.cc
|
| index 6c740793bf1a0c7fcf018799b0f85637738e4e91..c392b100c591de80ce118325ce21a88550339e8b 100644
|
| --- a/src/ppc/lithium-codegen-ppc.cc
|
| +++ b/src/ppc/lithium-codegen-ppc.cc
|
| @@ -570,36 +570,80 @@ void LCodeGen::WriteTranslation(LEnvironment* environment,
|
| int height = translation_size - environment->parameter_count();
|
|
|
| WriteTranslation(environment->outer(), translation);
|
| - bool has_closure_id =
|
| - !info()->closure().is_null() &&
|
| - !info()->closure().is_identical_to(environment->closure());
|
| - int closure_id = has_closure_id
|
| - ? DefineDeoptimizationLiteral(environment->closure())
|
| - : Translation::kSelfLiteralId;
|
|
|
| switch (environment->frame_type()) {
|
| - case JS_FUNCTION:
|
| - translation->BeginJSFrame(environment->ast_id(), closure_id, height);
|
| + case JS_FUNCTION: {
|
| + int shared_id = DefineDeoptimizationLiteral(
|
| + environment->entry() ? environment->entry()->shared()
|
| + : info()->shared_info());
|
| + translation->BeginJSFrame(environment->ast_id(), shared_id, height);
|
| + if (info()->closure().is_identical_to(environment->closure())) {
|
| + translation->StoreJSFrameFunction();
|
| + } else {
|
| + int closure_id = DefineDeoptimizationLiteral(environment->closure());
|
| + translation->StoreLiteral(closure_id);
|
| + }
|
| break;
|
| - case JS_CONSTRUCT:
|
| - translation->BeginConstructStubFrame(closure_id, translation_size);
|
| + }
|
| + case JS_CONSTRUCT: {
|
| + int shared_id = DefineDeoptimizationLiteral(
|
| + environment->entry() ? environment->entry()->shared()
|
| + : info()->shared_info());
|
| + translation->BeginConstructStubFrame(shared_id, translation_size);
|
| + if (info()->closure().is_identical_to(environment->closure())) {
|
| + translation->StoreJSFrameFunction();
|
| + } else {
|
| + int closure_id = DefineDeoptimizationLiteral(environment->closure());
|
| + translation->StoreLiteral(closure_id);
|
| + }
|
| break;
|
| - case JS_GETTER:
|
| + }
|
| + case JS_GETTER: {
|
| DCHECK(translation_size == 1);
|
| DCHECK(height == 0);
|
| - translation->BeginGetterStubFrame(closure_id);
|
| + int shared_id = DefineDeoptimizationLiteral(
|
| + environment->entry() ? environment->entry()->shared()
|
| + : info()->shared_info());
|
| + translation->BeginGetterStubFrame(shared_id);
|
| + if (info()->closure().is_identical_to(environment->closure())) {
|
| + translation->StoreJSFrameFunction();
|
| + } else {
|
| + int closure_id = DefineDeoptimizationLiteral(environment->closure());
|
| + translation->StoreLiteral(closure_id);
|
| + }
|
| break;
|
| - case JS_SETTER:
|
| + }
|
| + case JS_SETTER: {
|
| DCHECK(translation_size == 2);
|
| DCHECK(height == 0);
|
| - translation->BeginSetterStubFrame(closure_id);
|
| + int shared_id = DefineDeoptimizationLiteral(
|
| + environment->entry() ? environment->entry()->shared()
|
| + : info()->shared_info());
|
| + translation->BeginSetterStubFrame(shared_id);
|
| + if (info()->closure().is_identical_to(environment->closure())) {
|
| + translation->StoreJSFrameFunction();
|
| + } else {
|
| + int closure_id = DefineDeoptimizationLiteral(environment->closure());
|
| + translation->StoreLiteral(closure_id);
|
| + }
|
| + break;
|
| + }
|
| + case ARGUMENTS_ADAPTOR: {
|
| + int shared_id = DefineDeoptimizationLiteral(
|
| + environment->entry() ? environment->entry()->shared()
|
| + : info()->shared_info());
|
| + translation->BeginArgumentsAdaptorFrame(shared_id, translation_size);
|
| + if (info()->closure().is_identical_to(environment->closure())) {
|
| + translation->StoreJSFrameFunction();
|
| + } else {
|
| + int closure_id = DefineDeoptimizationLiteral(environment->closure());
|
| + translation->StoreLiteral(closure_id);
|
| + }
|
| break;
|
| + }
|
| case STUB:
|
| translation->BeginCompiledStubFrame(translation_size);
|
| break;
|
| - case ARGUMENTS_ADAPTOR:
|
| - translation->BeginArgumentsAdaptorFrame(closure_id, translation_size);
|
| - break;
|
| }
|
|
|
| int object_index = 0;
|
|
|