LCOV - code coverage report
Current view: top level - src/debug - debug-frames.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 32 39 82.1 %
Date: 2019-01-20 Functions: 9 11 81.8 %

          Line data    Source code
       1             : // Copyright 2015 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #include "src/debug/debug-frames.h"
       6             : 
       7             : #include "src/accessors.h"
       8             : #include "src/frames-inl.h"
       9             : #include "src/wasm/wasm-interpreter.h"
      10             : #include "src/wasm/wasm-objects-inl.h"
      11             : 
      12             : namespace v8 {
      13             : namespace internal {
      14             : 
      15      261186 : FrameInspector::FrameInspector(StandardFrame* frame, int inlined_frame_index,
      16             :                                Isolate* isolate)
      17             :     : frame_(frame),
      18             :       inlined_frame_index_(inlined_frame_index),
      19      522372 :       isolate_(isolate) {
      20             :   // Extract the relevant information from the frame summary and discard it.
      21      261186 :   FrameSummary summary = FrameSummary::Get(frame, inlined_frame_index);
      22             : 
      23      261186 :   is_constructor_ = summary.is_constructor();
      24      261186 :   source_position_ = summary.SourcePosition();
      25      261186 :   function_name_ = summary.FunctionName();
      26      261186 :   script_ = Handle<Script>::cast(summary.script());
      27      261186 :   receiver_ = summary.receiver();
      28             : 
      29      261186 :   if (summary.IsJavaScript()) {
      30      260150 :     function_ = summary.AsJavaScript().function();
      31             :   }
      32             : 
      33             :   JavaScriptFrame* js_frame =
      34      261186 :       frame->is_java_script() ? javascript_frame() : nullptr;
      35             :   DCHECK(js_frame || frame->is_wasm());
      36      521336 :   has_adapted_arguments_ = js_frame && js_frame->has_adapted_arguments();
      37      523302 :   is_optimized_ = frame_->is_optimized();
      38      522372 :   is_interpreted_ = frame_->is_interpreted();
      39             : 
      40             :   // Calculate the deoptimized frame.
      41      261186 :   if (is_optimized_) {
      42             :     DCHECK_NOT_NULL(js_frame);
      43             :     deoptimized_frame_.reset(Deoptimizer::DebuggerInspectableFrame(
      44       24844 :         js_frame, inlined_frame_index, isolate));
      45      472684 :   } else if (frame_->is_wasm_interpreter_entry()) {
      46        2790 :     wasm_interpreted_frame_ =
      47             :         WasmInterpreterEntryFrame::cast(frame_)
      48             :             ->debug_info()
      49             :             ->GetInterpretedFrame(frame_->fp(), inlined_frame_index);
      50             :     DCHECK(wasm_interpreted_frame_);
      51      261186 :   }
      52      261186 : }
      53             : 
      54             : // NOLINTNEXTLINE
      55      261186 : FrameInspector::~FrameInspector() {
      56             :   // Destructor needs to be defined in the .cc file, because it instantiates
      57             :   // std::unique_ptr destructors but the types are not known in the header.
      58      261186 : }
      59             : 
      60           0 : int FrameInspector::GetParametersCount() {
      61           0 :   if (is_optimized_) return deoptimized_frame_->parameters_count();
      62           0 :   if (wasm_interpreted_frame_)
      63           0 :     return wasm_interpreted_frame_->GetParameterCount();
      64           0 :   return frame_->ComputeParametersCount();
      65             : }
      66             : 
      67       23881 : Handle<Object> FrameInspector::GetParameter(int index) {
      68       23881 :   if (is_optimized_) return deoptimized_frame_->GetParameter(index);
      69             :   // TODO(clemensh): Handle wasm_interpreted_frame_.
      70       11641 :   return handle(frame_->GetParameter(index), isolate_);
      71             : }
      72             : 
      73     3996881 : Handle<Object> FrameInspector::GetExpression(int index) {
      74             :   return is_optimized_ ? deoptimized_frame_->GetExpression(index)
      75    11981347 :                        : handle(frame_->GetExpression(index), isolate_);
      76             : }
      77             : 
      78      475273 : Handle<Object> FrameInspector::GetContext() {
      79             :   return deoptimized_frame_ ? deoptimized_frame_->GetContext()
      80      950546 :                             : handle(frame_->context(), isolate_);
      81             : }
      82             : 
      83      382916 : bool FrameInspector::IsWasm() { return frame_->is_wasm(); }
      84             : 
      85      293699 : bool FrameInspector::IsJavaScript() { return frame_->is_java_script(); }
      86             : 
      87           0 : bool FrameInspector::ParameterIsShadowedByContextLocal(
      88             :     Handle<ScopeInfo> info, Handle<String> parameter_name) {
      89             :   VariableMode mode;
      90             :   InitializationFlag init_flag;
      91             :   MaybeAssignedFlag maybe_assigned_flag;
      92             :   return ScopeInfo::ContextSlotIndex(info, parameter_name, &mode, &init_flag,
      93           0 :                                      &maybe_assigned_flag) != -1;
      94             : }
      95             : }  // namespace internal
      96      183867 : }  // namespace v8

Generated by: LCOV version 1.10