@@ -36,11 +36,6 @@ enum ClassItem {
3636 py_name : String ,
3737 setter : bool ,
3838 } ,
39- GetSet {
40- item_ident : Ident ,
41- py_name : String ,
42- setter : bool ,
43- } ,
4439 Slot {
4540 slot_ident : Ident ,
4641 item_ident : Ident ,
@@ -296,27 +291,6 @@ impl Class {
296291 } )
297292 }
298293
299- fn extract_data ( sig : & Signature , meta : Meta ) -> Result < ClassItem , Diagnostic > {
300- let nesteds = meta_to_vec ( meta) . map_err ( |meta| {
301- err_span ! (
302- meta,
303- "#[pydata = \" ...\" ] cannot be a name/value, you probably meant \
304- #[pydata(name = \" ...\" )]"
305- )
306- } ) ?;
307- let item_meta = ClassItemMeta :: from_nested_meta (
308- "pydata" ,
309- sig,
310- & nesteds,
311- ClassItemMeta :: PROPERTY_NAMES ,
312- ) ?;
313- Ok ( ClassItem :: GetSet {
314- py_name : item_meta. property_name ( ) ?,
315- item_ident : sig. ident . clone ( ) ,
316- setter : item_meta. setter ( ) ?,
317- } )
318- }
319-
320294 fn extract_slot ( sig : & Signature , meta : Meta ) -> Result < ClassItem , Diagnostic > {
321295 let pyslot_err = "#[pyslot] must be of the form #[pyslot] or #[pyslot(slotname)]" ;
322296 let nesteds = meta_to_vec ( meta) . map_err ( |meta| err_span ! ( meta, "{}" , pyslot_err) ) ?;
@@ -367,8 +341,6 @@ impl Class {
367341 self . add_item ( Self :: extract_classmethod ( sig, meta) ?, meta_span) ?;
368342 } else if name == "pyproperty" {
369343 self . add_item ( Self :: extract_property ( sig, meta) ?, meta_span) ?;
370- } else if name == "pydata" {
371- self . add_item ( Self :: extract_data ( sig, meta) ?, meta_span) ?;
372344 } else if name == "pyslot" {
373345 self . add_item ( Self :: extract_slot ( sig, meta) ?, meta_span) ?;
374346 } else {
@@ -410,57 +382,6 @@ fn extract_impl_items(mut items: Vec<ItemSig>) -> Result<TokenStream2, Diagnosti
410382 ) ;
411383 }
412384
413- let mut data_items: HashMap < & str , ( Option < & Ident > , Option < & Ident > ) > = HashMap :: new ( ) ;
414- for item in class. items . iter ( ) {
415- if let ClassItem :: GetSet {
416- ref item_ident,
417- ref py_name,
418- setter,
419- } = item
420- {
421- let entry = data_items. entry ( py_name) . or_default ( ) ;
422- let func = if * setter { & mut entry. 1 } else { & mut entry. 0 } ;
423- if func. is_some ( ) {
424- bail_span ! (
425- item_ident,
426- "Multiple data accessors with name {:?}" ,
427- py_name
428- )
429- }
430- * func = Some ( item_ident) ;
431- }
432- }
433- let data_items = data_items
434- . into_iter ( )
435- . map ( |( name, data) | {
436- let getter_func = match data. 0 {
437- Some ( func) => func,
438- None => {
439- push_err_span ! (
440- diagnostics,
441- data. 0 . unwrap( ) ,
442- "Data {:?} is missing a getter" ,
443- name
444- ) ;
445- return TokenStream2 :: new ( ) ;
446- }
447- } ;
448- let ( new, setter) = match data. 1 {
449- Some ( func) => ( quote ! { with_get_set } , quote ! { , & Self :: #func } ) ,
450- None => ( quote ! { with_get } , quote ! { } ) ,
451- } ;
452- let str_name = name. to_string ( ) ;
453- quote ! {
454- class. set_str_attr(
455- #name,
456- :: rustpython_vm:: pyobject:: PyObject :: new(
457- :: rustpython_vm:: obj:: objgetset:: PyGetSet :: #new( #str_name. into( ) , & Self :: #getter_func #setter) ,
458- ctx. getset_type( ) , None )
459- ) ;
460- }
461- } )
462- . collect :: < Vec < _ > > ( ) ;
463-
464385 let mut properties: HashMap < & str , ( Option < & Ident > , Option < & Ident > ) > = HashMap :: new ( ) ;
465386 for item in class. items . iter ( ) {
466387 if let ClassItem :: Property {
@@ -485,8 +406,8 @@ fn extract_impl_items(mut items: Vec<ItemSig>) -> Result<TokenStream2, Diagnosti
485406 let properties = properties
486407 . into_iter ( )
487408 . map ( |( name, prop) | {
488- let getter = match prop. 0 {
489- Some ( getter ) => getter ,
409+ let getter_func = match prop. 0 {
410+ Some ( func ) => func ,
490411 None => {
491412 push_err_span ! (
492413 diagnostics,
@@ -497,14 +418,17 @@ fn extract_impl_items(mut items: Vec<ItemSig>) -> Result<TokenStream2, Diagnosti
497418 return TokenStream2 :: new ( ) ;
498419 }
499420 } ;
500- let add_setter = prop. 1 . map ( |setter| quote ! ( . add_setter( Self :: #setter) ) ) ;
421+ let ( new, setter) = match prop. 1 {
422+ Some ( func) => ( quote ! { with_get_set } , quote ! { , & Self :: #func } ) ,
423+ None => ( quote ! { with_get } , quote ! { } ) ,
424+ } ;
425+ let str_name = name. to_string ( ) ;
501426 quote ! {
502427 class. set_str_attr(
503428 #name,
504- :: rustpython_vm:: obj:: objproperty:: PropertyBuilder :: new( ctx)
505- . add_getter( Self :: #getter)
506- #add_setter
507- . create( ) ,
429+ :: rustpython_vm:: pyobject:: PyObject :: new(
430+ :: rustpython_vm:: obj:: objgetset:: PyGetSet :: #new( #str_name. into( ) , & Self :: #getter_func #setter) ,
431+ ctx. getset_type( ) , None )
508432 ) ;
509433 }
510434 } )
@@ -553,7 +477,6 @@ fn extract_impl_items(mut items: Vec<ItemSig>) -> Result<TokenStream2, Diagnosti
553477 Ok ( quote ! {
554478 #( #methods) *
555479 #( #properties) *
556- #( #data_items) *
557480 } )
558481}
559482
0 commit comments