| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/crankshaft/arm64/lithium-arm64.h" | 5 #include "src/crankshaft/arm64/lithium-arm64.h" |
| 6 | 6 |
| 7 #include <sstream> | 7 #include <sstream> |
| 8 | 8 |
| 9 #include "src/crankshaft/arm64/lithium-codegen-arm64.h" | 9 #include "src/crankshaft/arm64/lithium-codegen-arm64.h" |
| 10 #include "src/crankshaft/hydrogen-osr.h" | 10 #include "src/crankshaft/hydrogen-osr.h" |
| (...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 instr = AssignEnvironment(instr); | 713 instr = AssignEnvironment(instr); |
| 714 } | 714 } |
| 715 chunk_->AddInstruction(instr, current_block_); | 715 chunk_->AddInstruction(instr, current_block_); |
| 716 | 716 |
| 717 if (instr->IsCall()) { | 717 if (instr->IsCall()) { |
| 718 HEnvironment* hydrogen_env = current_block_->last_environment(); | 718 HEnvironment* hydrogen_env = current_block_->last_environment(); |
| 719 HValue* hydrogen_value_for_lazy_bailout = hydrogen_val; | 719 HValue* hydrogen_value_for_lazy_bailout = hydrogen_val; |
| 720 DCHECK_NOT_NULL(hydrogen_env); | 720 DCHECK_NOT_NULL(hydrogen_env); |
| 721 if (instr->IsSyntacticTailCall()) { | 721 if (instr->IsSyntacticTailCall()) { |
| 722 // If it was a syntactic tail call we need to drop the current frame and | 722 // If it was a syntactic tail call we need to drop the current frame and |
| 723 // an arguments adaptor frame on top of it (if the latter is present). | 723 // all the frames on top of it that are either an arguments adaptor frame |
| 724 // or a tail caller frame. |
| 724 hydrogen_env = hydrogen_env->outer(); | 725 hydrogen_env = hydrogen_env->outer(); |
| 725 if (hydrogen_env != nullptr && | 726 while (hydrogen_env != nullptr && |
| 726 hydrogen_env->frame_type() == ARGUMENTS_ADAPTOR) { | 727 (hydrogen_env->frame_type() == ARGUMENTS_ADAPTOR || |
| 728 hydrogen_env->frame_type() == TAIL_CALLER_FUNCTION)) { |
| 727 hydrogen_env = hydrogen_env->outer(); | 729 hydrogen_env = hydrogen_env->outer(); |
| 728 } | 730 } |
| 729 if (hydrogen_env != nullptr) { | 731 if (hydrogen_env != nullptr) { |
| 730 // Push return value on top of outer environment. | 732 // Push return value on top of outer environment. |
| 731 hydrogen_env = hydrogen_env->Copy(); | 733 hydrogen_env = hydrogen_env->Copy(); |
| 732 hydrogen_env->Push(hydrogen_val); | 734 hydrogen_env->Push(hydrogen_val); |
| 733 } else { | 735 } else { |
| 734 // Although we don't need this lazy bailout for normal execution | 736 // Although we don't need this lazy bailout for normal execution |
| 735 // (because when we tail call from the outermost function we should pop | 737 // (because when we tail call from the outermost function we should pop |
| 736 // its frame) we still need it when debugger is on. | 738 // its frame) we still need it when debugger is on. |
| (...skipping 1911 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2648 | 2650 |
| 2649 LInstruction* LChunkBuilder::DoWrapReceiver(HWrapReceiver* instr) { | 2651 LInstruction* LChunkBuilder::DoWrapReceiver(HWrapReceiver* instr) { |
| 2650 LOperand* receiver = UseRegister(instr->receiver()); | 2652 LOperand* receiver = UseRegister(instr->receiver()); |
| 2651 LOperand* function = UseRegister(instr->function()); | 2653 LOperand* function = UseRegister(instr->function()); |
| 2652 LWrapReceiver* result = new(zone()) LWrapReceiver(receiver, function); | 2654 LWrapReceiver* result = new(zone()) LWrapReceiver(receiver, function); |
| 2653 return AssignEnvironment(DefineAsRegister(result)); | 2655 return AssignEnvironment(DefineAsRegister(result)); |
| 2654 } | 2656 } |
| 2655 | 2657 |
| 2656 } // namespace internal | 2658 } // namespace internal |
| 2657 } // namespace v8 | 2659 } // namespace v8 |
| OLD | NEW |