inline_python/
run.rs

1use crate::Context;
2use pyo3::{Bound, PyObject, PyResult, Python, ffi, types::PyAny};
3
4pub fn run_python_code<'p>(
5    py: Python<'p>,
6    context: &Context,
7    bytecode: &[u8],
8) -> PyResult<Bound<'p, PyAny>> {
9    unsafe {
10        let ptr = ffi::PyMarshal_ReadObjectFromString(
11            bytecode.as_ptr() as *const _,
12            bytecode.len() as isize,
13        );
14        let code = PyObject::from_owned_ptr_or_err(py, ptr)?;
15        let result = ffi::PyEval_EvalCode(
16            code.as_ptr(),
17            context.globals.as_ptr(),
18            std::ptr::null_mut(),
19        );
20        Bound::from_owned_ptr_or_err(py, result)
21    }
22}