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 12namespace v8 { 13namespace 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. 21class DeoptimizedFrameInfo : public Malloced { 22 public: 23 DeoptimizedFrameInfo(TranslatedState* state, 24 TranslatedState::iterator frame_it, Isolate* isolate); 25 26 // Get the frame context. 27 Handle<Object> GetContext() { return context_; } 28 29 // Get an incoming argument. 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. 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. 43 int parameters_count() { return static_cast<int>(parameters_.size()); } 44 45 // Return the height of the expression stack. 46 int expression_count() { return static_cast<int>(expression_stack_.size()); } 47 48 // Set an incoming argument. 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. 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