From ee3d5a54b9f628307c88a9d17ae2188edbe270ab Mon Sep 17 00:00:00 2001 From: Bas Schoenmaeckers Date: Tue, 19 May 2026 12:48:00 +0200 Subject: [PATCH] Add type name c-api functions --- crates/capi/src/object.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/crates/capi/src/object.rs b/crates/capi/src/object.rs index 89995f8e908..9866d9041f9 100644 --- a/crates/capi/src/object.rs +++ b/crates/capi/src/object.rs @@ -66,6 +66,33 @@ pub unsafe extern "C" fn PyType_IsSubtype(a: *const PyTypeObject, b: *const PyTy }) } +#[unsafe(no_mangle)] +pub unsafe extern "C" fn PyType_GetName(ptr: *const PyTypeObject) -> *mut PyObject { + with_vm(|vm| unsafe { &*ptr }.__name__(vm)) +} + +#[unsafe(no_mangle)] +pub unsafe extern "C" fn PyType_GetQualName(ptr: *const PyTypeObject) -> *mut PyObject { + with_vm(|vm| unsafe { &*ptr }.__qualname__(vm)) +} + +#[unsafe(no_mangle)] +pub unsafe extern "C" fn PyType_GetFullyQualifiedName(ptr: *const PyTypeObject) -> *mut PyObject { + with_vm(|vm| { + let ty = unsafe { &*ptr }; + let qualname = ty.__qualname__(vm).try_downcast::(vm)?; + let module = ty.__module__(vm); + + if let Some(module) = module.downcast_ref::() + && module.as_wtf8() != "builtins" + { + Ok(vm.ctx.new_str(format!("{module}.{qualname}"))) + } else { + Ok(qualname) + } + }) +} + #[unsafe(no_mangle)] pub extern "C" fn Py_GetConstantBorrowed(constant_id: c_uint) -> *mut PyObject { with_vm(|vm| {