Initialize async generator hooks. Returns Ok(()) if successful, Err if firstiter hook raised an exception.
(zelf: &Py<Self>, vm: &VirtualMachine)
| 61 | /// Initialize async generator hooks. |
| 62 | /// Returns Ok(()) if successful, Err if firstiter hook raised an exception. |
| 63 | fn init_hooks(zelf: &Py<Self>, vm: &VirtualMachine) -> PyResult<()> { |
| 64 | // = async_gen_init_hooks |
| 65 | if zelf.ag_hooks_inited.load() { |
| 66 | return Ok(()); |
| 67 | } |
| 68 | |
| 69 | zelf.ag_hooks_inited.store(true); |
| 70 | |
| 71 | // Get and store finalizer from VM |
| 72 | let finalizer = vm.async_gen_finalizer.borrow().clone(); |
| 73 | if let Some(finalizer) = finalizer { |
| 74 | *zelf.ag_finalizer.lock() = Some(finalizer); |
| 75 | } |
| 76 | |
| 77 | // Call firstiter hook |
| 78 | let firstiter = vm.async_gen_firstiter.borrow().clone(); |
| 79 | if let Some(firstiter) = firstiter { |
| 80 | let obj: PyObjectRef = zelf.to_owned().into(); |
| 81 | firstiter.call((obj,), vm)?; |
| 82 | } |
| 83 | |
| 84 | Ok(()) |
| 85 | } |
| 86 | |
| 87 | /// Call finalizer hook if set. |
| 88 | fn call_finalizer(zelf: &Py<Self>, vm: &VirtualMachine) { |