================
@@ -55,6 +56,38 @@ StackFrameList::~StackFrameList() {
   Clear();
 }
 
+SyntheticStackFrameList::SyntheticStackFrameList(
+    Thread &thread, const lldb::StackFrameListSP &prev_frames_sp,
+    bool show_inline_frames)
+    : StackFrameList(thread, prev_frames_sp, show_inline_frames) {}
+
+bool SyntheticStackFrameList::FetchFramesUpTo(
+    uint32_t end_idx, InterruptionControl allow_interrupt) {
+  // Check if the thread has a synthetic frame provider
+  if (auto provider_sp = m_thread.GetFrameProvider()) {
+    // Use the synthetic frame provider to generate frames lazily
+    // Keep fetching until we reach end_idx or the provider returns an error
+    StackFrameListSP real_frames = std::make_shared<StackFrameList>(
+        m_thread, m_prev_frames_sp, m_show_inlined_frames);
+    for (uint32_t idx = m_frames.size(); idx <= end_idx; idx++) {
+      auto frame_or_err = provider_sp->GetFrameAtIndex(real_frames, idx);
+      if (!frame_or_err) {
----------------
jimingham wrote:

You should check for WasInterrupted here.  Since the provider is generating 
frames lazily, it should be fine with us not asking for all the frames we had 
originally intended.

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

Reply via email to