rustpython_vm/
recursion.rs1use crate::{AsObject, PyObject, VirtualMachine};
2
3pub struct ReprGuard<'vm> {
4 vm: &'vm VirtualMachine,
5 id: usize,
6}
7
8impl<'vm> ReprGuard<'vm> {
10 pub fn enter(vm: &'vm VirtualMachine, obj: &PyObject) -> Option<Self> {
13 let mut guards = vm.repr_guards.borrow_mut();
14
15 let id = obj.get_id();
18 if guards.contains(&id) {
19 return None;
20 }
21 guards.insert(id);
22 Some(ReprGuard { vm, id })
23 }
24}
25
26impl<'vm> Drop for ReprGuard<'vm> {
27 fn drop(&mut self) {
28 self.vm.repr_guards.borrow_mut().remove(&self.id);
29 }
30}