Skip to content

Commit

Permalink
Merge pull request #1346 from PyO3/py39-dict-and-weakref-tweaks
Browse files Browse the repository at this point in the history
Use inline fn instead of macro_rules to construct PyMemberDef
  • Loading branch information
davidhewitt committed Dec 28, 2020
2 parents 1e5e93d + 2e024b5 commit acbfaf4
Showing 1 changed file with 11 additions and 12 deletions.
23 changes: 11 additions & 12 deletions src/pyclass.rs
Original file line number Diff line number Diff line change
Expand Up @@ -354,28 +354,27 @@ fn py_class_method_defs<T: PyMethods>() -> (
/// Only works on Python 3.9 and up.
#[cfg(Py_3_9)]
fn py_class_members<T: PyClass>() -> Vec<ffi::structmember::PyMemberDef> {
macro_rules! offset_def {
($name:literal, $offset:expr) => {
ffi::structmember::PyMemberDef {
name: $name.as_ptr() as _,
type_code: ffi::structmember::T_PYSSIZET,
offset: $offset,
flags: ffi::structmember::READONLY,
doc: std::ptr::null_mut(),
}
};
#[inline(always)]
fn offset_def(name: &'static str, offset: usize) -> ffi::structmember::PyMemberDef {
ffi::structmember::PyMemberDef {
name: name.as_ptr() as _,
type_code: ffi::structmember::T_PYSSIZET,
offset: offset as _,
flags: ffi::structmember::READONLY,
doc: std::ptr::null_mut(),
}
}

let mut members = Vec::new();

// __dict__ support
if let Some(dict_offset) = PyCell::<T>::dict_offset() {
members.push(offset_def!("__dictoffset__\0", dict_offset as _));
members.push(offset_def("__dictoffset__\0", dict_offset));
}

// weakref support
if let Some(weakref_offset) = PyCell::<T>::weakref_offset() {
members.push(offset_def!("__weaklistoffset__\0", weakref_offset as _));
members.push(offset_def("__weaklistoffset__\0", weakref_offset));
}

if !members.is_empty() {
Expand Down

0 comments on commit acbfaf4

Please sign in to comment.