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 : #ifndef V8_DEBUG_DEBUG_FRAMES_H_
6 : #define V8_DEBUG_DEBUG_FRAMES_H_
7 :
8 : #include "src/deoptimizer.h"
9 : #include "src/frames.h"
10 : #include "src/isolate.h"
11 : #include "src/objects.h"
12 : #include "src/wasm/wasm-interpreter.h"
13 :
14 : namespace v8 {
15 : namespace internal {
16 :
17 : class FrameInspector {
18 : public:
19 : FrameInspector(StandardFrame* frame, int inlined_frame_index,
20 : Isolate* isolate);
21 :
22 : ~FrameInspector(); // NOLINT (modernize-use-equals-default)
23 :
24 : int GetParametersCount();
25 : Handle<JSFunction> GetFunction() const { return function_; }
26 : Handle<Script> GetScript() { return script_; }
27 : Handle<Object> GetParameter(int index);
28 : Handle<Object> GetExpression(int index);
29 : int GetSourcePosition() { return source_position_; }
30 : bool IsConstructor() { return is_constructor_; }
31 : Handle<Object> GetContext();
32 : Handle<Object> GetReceiver() { return receiver_; }
33 :
34 : Handle<String> GetFunctionName() { return function_name_; }
35 :
36 : bool IsWasm();
37 : bool IsJavaScript();
38 :
39 : inline JavaScriptFrame* javascript_frame() {
40 426309 : return frame_->is_arguments_adaptor() ? ArgumentsAdaptorFrame::cast(frame_)
41 852618 : : JavaScriptFrame::cast(frame_);
42 : }
43 :
44 : int inlined_frame_index() const { return inlined_frame_index_; }
45 :
46 : private:
47 : bool ParameterIsShadowedByContextLocal(Handle<ScopeInfo> info,
48 : Handle<String> parameter_name);
49 :
50 : StandardFrame* frame_;
51 : int inlined_frame_index_;
52 : std::unique_ptr<DeoptimizedFrameInfo> deoptimized_frame_;
53 : wasm::WasmInterpreter::FramePtr wasm_interpreted_frame_;
54 : Isolate* isolate_;
55 : Handle<Script> script_;
56 : Handle<Object> receiver_;
57 : Handle<JSFunction> function_;
58 : Handle<String> function_name_;
59 : int source_position_ = -1;
60 : bool is_optimized_ = false;
61 : bool is_interpreted_ = false;
62 : bool has_adapted_arguments_ = false;
63 : bool is_constructor_ = false;
64 :
65 : DISALLOW_COPY_AND_ASSIGN(FrameInspector);
66 : };
67 : } // namespace internal
68 : } // namespace v8
69 :
70 : #endif // V8_DEBUG_DEBUG_FRAMES_H_
|