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
142
142
}
143
143
Item :: Trait ( mut trai) => {
144
144
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
+ }
145
158
extract_items_into_context ( & mut context, trai. items . iter_mut ( ) ) ;
146
159
147
160
let ExtractedImplAttrs {
@@ -155,6 +168,13 @@ pub(crate) fn impl_pyimpl(attr: AttributeArgs, item: Item) -> Result<TokenStream
155
168
let extend_impl = & context. impl_extend_items . validate ( ) ?;
156
169
let slots_impl = & context. extend_slots_items . validate ( ) ?;
157
170
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
+ } ;
158
178
let extra_methods = iter_chain ! [
159
179
parse_quote! {
160
180
fn __extend_py_class(
@@ -172,6 +192,7 @@ pub(crate) fn impl_pyimpl(attr: AttributeArgs, item: Item) -> Result<TokenStream
172
192
fn __extend_slots( slots: & mut :: rustpython_vm:: types:: PyTypeSlots ) {
173
193
#with_slots
174
194
#slots_impl
195
+ #call_extend_slots
175
196
}
176
197
} ,
177
198
] ;
You can’t perform that action at this time.
0 commit comments