File tree Expand file tree Collapse file tree 1 file changed +21
-0
lines changed
Expand file tree Collapse file tree 1 file changed +21
-0
lines changed Original file line number Diff line number Diff line change @@ -142,6 +142,19 @@ pub(crate) fn impl_pyimpl(attr: AttributeArgs, item: Item) -> Result<TokenStream
142142 }
143143 Item :: Trait ( mut trai) => {
144144 let mut context = ImplContext :: default ( ) ;
145+ let mut has_extend_slots = false ;
146+ for item in & trai. items {
147+ let has = match item {
148+ syn:: TraitItem :: Method ( method) => {
149+ & method. sig . ident . to_string ( ) == "extend_slots"
150+ }
151+ _ => false ,
152+ } ;
153+ if has {
154+ has_extend_slots = has;
155+ break ;
156+ }
157+ }
145158 extract_items_into_context ( & mut context, trai. items . iter_mut ( ) ) ;
146159
147160 let ExtractedImplAttrs {
@@ -155,6 +168,13 @@ pub(crate) fn impl_pyimpl(attr: AttributeArgs, item: Item) -> Result<TokenStream
155168 let extend_impl = & context. impl_extend_items . validate ( ) ?;
156169 let slots_impl = & context. extend_slots_items . validate ( ) ?;
157170 let class_extensions = & context. class_extensions ;
171+ let call_extend_slots = if has_extend_slots {
172+ quote ! {
173+ Self :: extend_slots( slots) ;
174+ }
175+ } else {
176+ quote ! { }
177+ } ;
158178 let extra_methods = iter_chain ! [
159179 parse_quote! {
160180 fn __extend_py_class(
@@ -172,6 +192,7 @@ pub(crate) fn impl_pyimpl(attr: AttributeArgs, item: Item) -> Result<TokenStream
172192 fn __extend_slots( slots: & mut :: rustpython_vm:: types:: PyTypeSlots ) {
173193 #with_slots
174194 #slots_impl
195+ #call_extend_slots
175196 }
176197 } ,
177198 ] ;
You can’t perform that action at this time.
0 commit comments