diff --git a/crates/capi/src/import.rs b/crates/capi/src/import.rs new file mode 100644 index 00000000000..d380d1f8266 --- /dev/null +++ b/crates/capi/src/import.rs @@ -0,0 +1,22 @@ +use crate::{PyObject, pystate::with_vm}; +use rustpython_vm::builtins::PyStr; + +#[unsafe(no_mangle)] +pub unsafe extern "C" fn PyImport_Import(name: *mut PyObject) -> *mut PyObject { + with_vm(|vm| { + let name = unsafe { (&*name).try_downcast_ref::(vm)? }; + vm.import(name, 0) + }) +} + +#[cfg(false)] +mod tests { + use pyo3::prelude::*; + + #[test] + fn test_import() { + Python::attach(|py| { + let _module = py.import("sys").unwrap(); + }) + } +} diff --git a/crates/capi/src/lib.rs b/crates/capi/src/lib.rs index 4dc17536a8a..40546d69d3f 100644 --- a/crates/capi/src/lib.rs +++ b/crates/capi/src/lib.rs @@ -8,6 +8,7 @@ use std::sync::MutexGuard; extern crate alloc; +pub mod import; pub mod object; pub mod pyerrors; pub mod pylifecycle;