================
@@ -0,0 +1,193 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_TARGET_BORROWEDSTACKFRAME_H
+#define LLDB_TARGET_BORROWEDSTACKFRAME_H
+
+#include "lldb/Target/StackFrame.h"
+
+namespace lldb_private {
+
+/// \class BorrowedStackFrame BorrowedStackFrame.h
+/// "lldb/Target/BorrowedStackFrame.h"
+///
+/// A wrapper around an existing StackFrame that supersedes its frame index.
+///
+/// This class is useful when you need to present an existing stack frame
+/// with a different index, such as when creating synthetic frame views or
+/// renumbering frames without copying all the underlying data.
+///
+/// All methods delegate to the borrowed frame except for GetFrameIndex()
+/// which uses the overridden index.
+
+class BorrowedStackFrame : public StackFrame {
+public:
+  /// Construct a BorrowedStackFrame that wraps an existing frame.
+  ///
+  /// \param [in] borrowed_frame_sp
+  ///   The existing StackFrame to borrow from. This frame's data will be
+  ///   used for all operations except frame index queries.
+  ///
+  /// \param [in] override_frame_index
+  ///   The frame index to report instead of the borrowed frame's index.
+  BorrowedStackFrame(const lldb::StackFrameSP &borrowed_frame_sp,
+                     uint32_t override_frame_index);
+
+  ~BorrowedStackFrame() override = default;
+
+  // Override frame index methods
+  uint32_t GetFrameIndex() const override { return m_override_frame_index; }
+  void SetFrameIndex(uint32_t index) { m_override_frame_index = index; }
+
+  uint32_t GetConcreteFrameIndex() const override {
+    return m_borrowed_frame_sp->GetConcreteFrameIndex();
+  }
+
+  // Delegate all other virtual methods to the borrowed frame
+  StackID &GetStackID() override { return m_borrowed_frame_sp->GetStackID(); }
+
+  const Address &GetFrameCodeAddress() override {
+    return m_borrowed_frame_sp->GetFrameCodeAddress();
+  }
+
+  Address GetFrameCodeAddressForSymbolication() override {
+    return m_borrowed_frame_sp->GetFrameCodeAddressForSymbolication();
+  }
+
+  bool ChangePC(lldb::addr_t pc) override {
+    return m_borrowed_frame_sp->ChangePC(pc);
+  }
+
+  const SymbolContext &
+  GetSymbolContext(lldb::SymbolContextItem resolve_scope) override {
+    return m_borrowed_frame_sp->GetSymbolContext(resolve_scope);
+  }
+
+  llvm::Error GetFrameBaseValue(Scalar &value) override {
+    return m_borrowed_frame_sp->GetFrameBaseValue(value);
+  }
+
+  DWARFExpressionList *GetFrameBaseExpression(Status *error_ptr) override {
+    return m_borrowed_frame_sp->GetFrameBaseExpression(error_ptr);
+  }
+
+  Block *GetFrameBlock() override {
+    return m_borrowed_frame_sp->GetFrameBlock();
+  }
+
+  lldb::RegisterContextSP GetRegisterContext() override {
+    return m_borrowed_frame_sp->GetRegisterContext();
+  }
+
+  VariableList *GetVariableList(bool get_file_globals,
+                                Status *error_ptr) override {
+    return m_borrowed_frame_sp->GetVariableList(get_file_globals, error_ptr);
+  }
+
+  lldb::VariableListSP
+  GetInScopeVariableList(bool get_file_globals,
+                         bool must_have_valid_location = false) override {
+    return m_borrowed_frame_sp->GetInScopeVariableList(
+        get_file_globals, must_have_valid_location);
+  }
+
+  lldb::ValueObjectSP GetValueForVariableExpressionPath(
+      llvm::StringRef var_expr, lldb::DynamicValueType use_dynamic,
+      uint32_t options, lldb::VariableSP &var_sp, Status &error) override {
+    return m_borrowed_frame_sp->GetValueForVariableExpressionPath(
+        var_expr, use_dynamic, options, var_sp, error);
+  }
+
+  bool HasDebugInformation() override {
+    return m_borrowed_frame_sp->HasDebugInformation();
+  }
+
+  const char *Disassemble() override {
+    return m_borrowed_frame_sp->Disassemble();
+  }
+
+  lldb::ValueObjectSP
+  GetValueObjectForFrameVariable(const lldb::VariableSP &variable_sp,
+                                 lldb::DynamicValueType use_dynamic) override {
+    return m_borrowed_frame_sp->GetValueObjectForFrameVariable(variable_sp,
+                                                               use_dynamic);
+  }
+
+  bool IsInlined() override { return m_borrowed_frame_sp->IsInlined(); }
+
+  bool IsSynthetic() const override {
----------------
medismailben wrote:

Correct

https://github.com/llvm/llvm-project/pull/170191
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to