diff options
Diffstat (limited to 'deps/v8/src/deoptimizer/deoptimizer.cc')
-rw-r--r-- | deps/v8/src/deoptimizer/deoptimizer.cc | 47 |
1 files changed, 21 insertions, 26 deletions
diff --git a/deps/v8/src/deoptimizer/deoptimizer.cc b/deps/v8/src/deoptimizer/deoptimizer.cc index ea460aa36f..6bf26d5bf3 100644 --- a/deps/v8/src/deoptimizer/deoptimizer.cc +++ b/deps/v8/src/deoptimizer/deoptimizer.cc @@ -477,15 +477,6 @@ const char* Deoptimizer::MessageFor(DeoptimizeKind kind, bool reuse_code) { } } -namespace { - -uint16_t InternalFormalParameterCountWithReceiver(SharedFunctionInfo sfi) { - static constexpr int kTheReceiver = 1; - return sfi.internal_formal_parameter_count() + kTheReceiver; -} - -} // namespace - Deoptimizer::Deoptimizer(Isolate* isolate, JSFunction function, DeoptimizeKind kind, unsigned deopt_exit_index, Address from, int fp_to_sp_delta) @@ -541,7 +532,7 @@ Deoptimizer::Deoptimizer(Isolate* isolate, JSFunction function, } unsigned size = ComputeInputFrameSize(); const int parameter_count = - InternalFormalParameterCountWithReceiver(function.shared()); + function.shared().internal_formal_parameter_count_with_receiver(); input_ = new (size) FrameDescription(size, parameter_count); if (kSupportsFixedDeoptExitSizes) { @@ -903,9 +894,10 @@ void Deoptimizer::DoComputeOutputFrames() { isolate_, input_->GetFramePointerAddress(), stack_fp_, &state_iterator, input_data.LiteralArray(), input_->GetRegisterValues(), trace_file, function_.IsHeapObject() - ? function_.shared().internal_formal_parameter_count() + ? function_.shared() + .internal_formal_parameter_count_without_receiver() : 0, - actual_argument_count_); + actual_argument_count_ - kJSArgcReceiverSlots); // Do the input frame to output frame(s) translation. size_t count = translated_state_.frames().size(); @@ -1026,7 +1018,8 @@ void Deoptimizer::DoComputeUnoptimizedFrame(TranslatedFrame* translated_frame, const int bytecode_offset = goto_catch_handler ? catch_handler_pc_offset_ : real_bytecode_offset; - const int parameters_count = InternalFormalParameterCountWithReceiver(shared); + const int parameters_count = + shared.internal_formal_parameter_count_with_receiver(); // If this is the bottom most frame or the previous frame was the arguments // adaptor fake frame, then we already have extra arguments in the stack @@ -1068,7 +1061,7 @@ void Deoptimizer::DoComputeUnoptimizedFrame(TranslatedFrame* translated_frame, const bool advance_bc = (!is_topmost || (deopt_kind_ == DeoptimizeKind::kLazy)) && !goto_catch_handler; - const bool is_baseline = shared.HasBaselineData(); + const bool is_baseline = shared.HasBaselineCode(); Code dispatch_builtin = builtins->code(DispatchBuiltinFor(is_baseline, advance_bc)); @@ -1100,11 +1093,13 @@ void Deoptimizer::DoComputeUnoptimizedFrame(TranslatedFrame* translated_frame, } // Note: parameters_count includes the receiver. + // TODO(v8:11112): Simplify once the receiver is always included in argc. if (verbose_tracing_enabled() && is_bottommost && - actual_argument_count_ > parameters_count - 1) { - PrintF(trace_scope_->file(), - " -- %d extra argument(s) already in the stack --\n", - actual_argument_count_ - parameters_count + 1); + actual_argument_count_ - kJSArgcReceiverSlots > parameters_count - 1) { + PrintF( + trace_scope_->file(), + " -- %d extra argument(s) already in the stack --\n", + actual_argument_count_ - kJSArgcReceiverSlots - parameters_count + 1); } frame_writer.PushStackJSArguments(value_iterator, parameters_count); @@ -1185,7 +1180,7 @@ void Deoptimizer::DoComputeUnoptimizedFrame(TranslatedFrame* translated_frame, (translated_state_.frames()[frame_index - 1]).kind(); argc = previous_frame_kind == TranslatedFrame::kArgumentsAdaptor ? output_[frame_index - 1]->parameter_count() - : parameters_count - 1; + : parameters_count - (kJSArgcIncludesReceiver ? 0 : 1); } frame_writer.PushRawValue(argc, "actual argument count\n"); @@ -1334,7 +1329,8 @@ void Deoptimizer::DoComputeArgumentsAdaptorFrame( TranslatedFrame::iterator value_iterator = translated_frame->begin(); const int argument_count_without_receiver = translated_frame->height() - 1; const int formal_parameter_count = - translated_frame->raw_shared_info().internal_formal_parameter_count(); + translated_frame->raw_shared_info() + .internal_formal_parameter_count_without_receiver(); const int extra_argument_count = argument_count_without_receiver - formal_parameter_count; // The number of pushed arguments is the maximum of the actual argument count @@ -1350,8 +1346,8 @@ void Deoptimizer::DoComputeArgumentsAdaptorFrame( } // Allocate and store the output frame description. - FrameDescription* output_frame = new (output_frame_size) - FrameDescription(output_frame_size, argument_count_without_receiver); + FrameDescription* output_frame = new (output_frame_size) FrameDescription( + output_frame_size, JSParameterCount(argument_count_without_receiver)); // The top address of the frame is computed from the previous frame's top and // this frame's size. const intptr_t top_address = @@ -1470,9 +1466,8 @@ void Deoptimizer::DoComputeConstructStubFrame(TranslatedFrame* translated_frame, frame_writer.PushTranslatedValue(value_iterator++, "context"); // Number of incoming arguments. - const uint32_t parameters_count_without_receiver = parameters_count - 1; - frame_writer.PushRawObject(Smi::FromInt(parameters_count_without_receiver), - "argc\n"); + const uint32_t argc = parameters_count - (kJSArgcIncludesReceiver ? 0 : 1); + frame_writer.PushRawObject(Smi::FromInt(argc), "argc\n"); // The constructor function was mentioned explicitly in the // CONSTRUCT_STUB_FRAME. @@ -2067,7 +2062,7 @@ unsigned Deoptimizer::ComputeInputFrameSize() const { // static unsigned Deoptimizer::ComputeIncomingArgumentSize(SharedFunctionInfo shared) { - int parameter_slots = InternalFormalParameterCountWithReceiver(shared); + int parameter_slots = shared.internal_formal_parameter_count_with_receiver(); return parameter_slots * kSystemPointerSize; } |