• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2021 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_DEOPTIMIZER_DEOPTIMIZED_FRAME_INFO_H_
6 #define V8_DEOPTIMIZER_DEOPTIMIZED_FRAME_INFO_H_
7 
8 #include <vector>
9 
10 #include "src/deoptimizer/translated-state.h"
11 
12 namespace v8 {
13 namespace internal {
14 
15 // Class used to represent an unoptimized frame when the debugger
16 // needs to inspect a frame that is part of an optimized frame. The
17 // internally used FrameDescription objects are not GC safe so for use
18 // by the debugger frame information is copied to an object of this type.
19 // Represents parameters in unadapted form so their number might mismatch
20 // formal parameter count.
21 class DeoptimizedFrameInfo : public Malloced {
22  public:
23   DeoptimizedFrameInfo(TranslatedState* state,
24                        TranslatedState::iterator frame_it, Isolate* isolate);
25 
26   // Get the frame context.
GetContext()27   Handle<Object> GetContext() { return context_; }
28 
29   // Get an incoming argument.
GetParameter(int index)30   Handle<Object> GetParameter(int index) {
31     DCHECK(0 <= index && index < parameters_count());
32     return parameters_[index];
33   }
34 
35   // Get an expression from the expression stack.
GetExpression(int index)36   Handle<Object> GetExpression(int index) {
37     DCHECK(0 <= index && index < expression_count());
38     return expression_stack_[index];
39   }
40 
41  private:
42   // Return the number of incoming arguments.
parameters_count()43   int parameters_count() { return static_cast<int>(parameters_.size()); }
44 
45   // Return the height of the expression stack.
expression_count()46   int expression_count() { return static_cast<int>(expression_stack_.size()); }
47 
48   // Set an incoming argument.
SetParameter(int index,Handle<Object> obj)49   void SetParameter(int index, Handle<Object> obj) {
50     DCHECK(0 <= index && index < parameters_count());
51     parameters_[index] = obj;
52   }
53 
54   // Set an expression on the expression stack.
SetExpression(int index,Handle<Object> obj)55   void SetExpression(int index, Handle<Object> obj) {
56     DCHECK(0 <= index && index < expression_count());
57     expression_stack_[index] = obj;
58   }
59 
60   Handle<Object> context_;
61   std::vector<Handle<Object>> parameters_;
62   std::vector<Handle<Object>> expression_stack_;
63 
64   friend class Deoptimizer;
65 };
66 
67 }  // namespace internal
68 }  // namespace v8
69 
70 #endif  // V8_DEOPTIMIZER_DEOPTIMIZED_FRAME_INFO_H_
71