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}