(
zelf_obj: PyObjectRef,
obj: Option<PyObjectRef>,
_cls: Option<PyObjectRef>,
vm: &VirtualMachine,
)
| 199 | |
| 200 | impl GetDescriptor for PySuper { |
| 201 | fn descr_get( |
| 202 | zelf_obj: PyObjectRef, |
| 203 | obj: Option<PyObjectRef>, |
| 204 | _cls: Option<PyObjectRef>, |
| 205 | vm: &VirtualMachine, |
| 206 | ) -> PyResult { |
| 207 | let (zelf, obj) = Self::_unwrap(&zelf_obj, obj, vm)?; |
| 208 | if vm.is_none(&obj) || zelf.inner.read().obj.is_some() { |
| 209 | return Ok(zelf_obj); |
| 210 | } |
| 211 | let zelf_class = zelf.as_object().class(); |
| 212 | if zelf_class.is(vm.ctx.types.super_type) { |
| 213 | let typ = zelf.inner.read().typ.clone(); |
| 214 | Ok(Self { |
| 215 | inner: PyRwLock::new(PySuperInner::new(typ, obj, vm)?), |
| 216 | } |
| 217 | .into_ref(&vm.ctx) |
| 218 | .into()) |
| 219 | } else { |
| 220 | let (obj, typ) = { |
| 221 | let lock = zelf.inner.read(); |
| 222 | let obj = lock.obj.as_ref().map(|(o, _)| o.to_owned()); |
| 223 | let typ = lock.typ.clone(); |
| 224 | (obj, typ) |
| 225 | }; |
| 226 | let obj = vm.unwrap_or_none(obj); |
| 227 | PyType::call(zelf.class(), (typ, obj).into_args(vm), vm) |
| 228 | } |
| 229 | } |
| 230 | } |
| 231 | |
| 232 | impl Representable for PySuper { |
nothing calls this directly
no test coverage detected