Like Frame::next_external_frame but also skips frames matching prefixes.
(
frame: &crate::frame::FrameRef,
skip_file_prefixes: Option<&PyTupleRef>,
vm: &VirtualMachine,
)
| 526 | |
| 527 | /// Like Frame::next_external_frame but also skips frames matching prefixes. |
| 528 | fn next_external_frame_with_skip( |
| 529 | frame: &crate::frame::FrameRef, |
| 530 | skip_file_prefixes: Option<&PyTupleRef>, |
| 531 | vm: &VirtualMachine, |
| 532 | ) -> Option<crate::frame::FrameRef> { |
| 533 | let mut f = frame.f_back(vm); |
| 534 | loop { |
| 535 | let current: crate::frame::FrameRef = f.take()?; |
| 536 | if current.is_internal_frame() |
| 537 | || skip_file_prefixes.is_some_and(|p| is_filename_to_skip(¤t, p)) |
| 538 | { |
| 539 | f = current.f_back(vm); |
| 540 | } else { |
| 541 | return Some(current); |
| 542 | } |
| 543 | } |
| 544 | } |
| 545 | |
| 546 | /// filename, module, and registry are new refs, globals is borrowed |
| 547 | /// Returns `Ok` on success, or `Err` on error (no new refs) |
no test coverage detected