@@ -13,12 +13,12 @@ use crate::debug::{DefinitionLocation, LocationName};
1313use crate :: element:: ExcludeKind ;
1414use crate :: entity:: { ControlFlowExt , ToEntity } ;
1515use crate :: field:: FieldDesc ;
16- use crate :: func:: { FuncCppBody , FuncDesc , FuncKind , FuncRustBody , FuncRustExtern , ReturnKind } ;
16+ use crate :: func:: { FuncCppBody , FuncDesc , FuncKind , ReturnKind } ;
1717use crate :: type_ref:: { Constness , CppNameStyle , StrEnc , StrType , TypeRef , TypeRefDesc , TypeRefTypeHint } ;
1818use crate :: writer:: rust_native:: element:: RustElement ;
1919use crate :: {
20- settings, ClassKindOverride , Const , DefaultElement , Element , EntityExt , Enum , Field , Func , FuncTypeHint , GeneratedType ,
21- GeneratorEnv , NameDebug , StrExt ,
20+ settings, ClassKindOverride , Const , DefaultElement , Element , EntityExt , Enum , Field , Func , GeneratedType , GeneratorEnv ,
21+ NameDebug , StrExt ,
2222} ;
2323
2424mod desc;
@@ -419,6 +419,8 @@ impl<'tu, 'ge> Class<'tu, 'ge> {
419419 out. extend ( fields. flat_map ( |fld| {
420420 iter:: from_fn ( {
421421 let doc_comment = Rc :: from ( fld. doc_comment ( ) ) ;
422+ let def_loc = fld. file_line_name ( ) . location ;
423+ let rust_module = fld. rust_module ( ) ;
422424 let mut fld_type_ref = fld. type_ref ( ) ;
423425 let fld_type_kind = fld_type_ref. kind ( ) ;
424426 if fld_type_kind
@@ -432,72 +434,64 @@ impl<'tu, 'ge> Class<'tu, 'ge> {
432434 }
433435 let fld_type_kind = fld_type_ref. kind ( ) ;
434436 let fld_type_ref_return_as_naked = fld_type_kind. return_as_naked ( fld_type_ref. type_hint ( ) ) ;
437+ let return_kind = ReturnKind :: infallible ( fld_type_ref_return_as_naked) ;
435438 let fld_const = fld. constness ( ) ;
436439 let passed_by_ref = fld_type_kind. can_return_as_direct_reference ( ) ;
437440 let ( mut read_const_yield, mut read_mut_yield) = if passed_by_ref && fld_const. is_mut ( ) {
438441 let read_const_func = if constness_filter. map_or ( true , |c| c. is_const ( ) ) {
439- Some ( Func :: new_desc ( FuncDesc {
440- type_hint : FuncTypeHint :: None ,
441- kind : FuncKind :: FieldAccessor ( self . clone ( ) , fld. clone ( ) ) ,
442- cpp_name : fld. cpp_name ( CppNameStyle :: Reference ) . into ( ) ,
443- rust_custom_leafname : None ,
444- rust_module : fld. rust_module ( ) . into ( ) ,
445- constness : Constness :: Const ,
446- return_kind : ReturnKind :: infallible ( fld_type_ref_return_as_naked) ,
447- doc_comment : Rc :: clone ( & doc_comment) ,
448- def_loc : fld. file_line_name ( ) . location ,
449- rust_generic_decls : Rc :: new ( [ ] ) ,
450- arguments : Rc :: new ( [ ] ) ,
451- return_type_ref : fld_type_ref. as_ref ( ) . clone ( ) . with_inherent_constness ( Constness :: Const ) ,
452- cpp_body : FuncCppBody :: ManualCall ( "{{name}}" . into ( ) ) ,
453- rust_body : FuncRustBody :: Auto ,
454- rust_extern_definition : FuncRustExtern :: Auto ,
455- } ) )
442+ Some ( Func :: new_desc (
443+ FuncDesc :: new (
444+ FuncKind :: FieldAccessor ( self . clone ( ) , fld. clone ( ) ) ,
445+ Constness :: Const ,
446+ return_kind,
447+ fld. cpp_name ( CppNameStyle :: Reference ) ,
448+ rust_module. clone ( ) ,
449+ [ ] ,
450+ fld_type_ref. as_ref ( ) . clone ( ) . with_inherent_constness ( Constness :: Const ) ,
451+ )
452+ . def_loc ( def_loc. clone ( ) )
453+ . doc_comment ( Rc :: clone ( & doc_comment) )
454+ . cpp_body ( FuncCppBody :: ManualCall ( "{{name}}" . into ( ) ) ) ,
455+ ) )
456456 } else {
457457 None
458458 } ;
459459 let read_mut_func = if constness_filter. map_or ( true , |c| c. is_mut ( ) ) {
460460 let cpp_name = fld. cpp_name ( CppNameStyle :: Declaration ) ;
461- Some ( Func :: new_desc ( FuncDesc {
462- type_hint : FuncTypeHint :: None ,
463- kind : FuncKind :: FieldAccessor ( self . clone ( ) , fld. clone ( ) ) ,
464- cpp_name : format ! ( "{cpp_name}Mut" ) . into ( ) ,
465- rust_custom_leafname : None ,
466- rust_module : fld. rust_module ( ) . into ( ) ,
467- constness : Constness :: Mut ,
468- return_kind : ReturnKind :: infallible ( fld_type_ref_return_as_naked) ,
469- doc_comment : Rc :: clone ( & doc_comment) ,
470- def_loc : fld. file_line_name ( ) . location ,
471- rust_generic_decls : Rc :: new ( [ ] ) ,
472- arguments : Rc :: new ( [ ] ) ,
473- return_type_ref : fld_type_ref. as_ref ( ) . clone ( ) . with_inherent_constness ( Constness :: Mut ) ,
474- cpp_body : FuncCppBody :: ManualCall ( "{{name}}" . into ( ) ) ,
475- rust_body : FuncRustBody :: Auto ,
476- rust_extern_definition : FuncRustExtern :: Auto ,
477- } ) )
461+ Some ( Func :: new_desc (
462+ FuncDesc :: new (
463+ FuncKind :: FieldAccessor ( self . clone ( ) , fld. clone ( ) ) ,
464+ Constness :: Mut ,
465+ return_kind,
466+ format ! ( "{cpp_name}Mut" ) ,
467+ rust_module. clone ( ) ,
468+ [ ] ,
469+ fld_type_ref. as_ref ( ) . clone ( ) . with_inherent_constness ( Constness :: Mut ) ,
470+ )
471+ . def_loc ( def_loc. clone ( ) )
472+ . doc_comment ( Rc :: clone ( & doc_comment) )
473+ . cpp_body ( FuncCppBody :: ManualCall ( "{{name}}" . into ( ) ) ) ,
474+ ) )
478475 } else {
479476 None
480477 } ;
481478 ( read_const_func, read_mut_func)
482479 } else {
483480 let read_const_func = if constness_filter. map_or ( true , |c| c == fld_const) {
484- Some ( Func :: new_desc ( FuncDesc {
485- type_hint : FuncTypeHint :: None ,
486- kind : FuncKind :: FieldAccessor ( self . clone ( ) , fld. clone ( ) ) ,
487- cpp_name : fld. cpp_name ( CppNameStyle :: Reference ) . into ( ) ,
488- rust_custom_leafname : None ,
489- rust_module : fld. rust_module ( ) . into ( ) ,
490- constness : fld_const,
491- return_kind : ReturnKind :: infallible ( fld_type_ref_return_as_naked) ,
492- doc_comment : Rc :: clone ( & doc_comment) ,
493- def_loc : fld. file_line_name ( ) . location ,
494- rust_generic_decls : Rc :: new ( [ ] ) ,
495- arguments : Rc :: new ( [ ] ) ,
496- return_type_ref : fld_type_ref. as_ref ( ) . clone ( ) ,
497- cpp_body : FuncCppBody :: ManualCall ( "{{name}}" . into ( ) ) ,
498- rust_body : FuncRustBody :: Auto ,
499- rust_extern_definition : FuncRustExtern :: Auto ,
500- } ) )
481+ Some ( Func :: new_desc (
482+ FuncDesc :: new (
483+ FuncKind :: FieldAccessor ( self . clone ( ) , fld. clone ( ) ) ,
484+ fld_const,
485+ return_kind,
486+ fld. cpp_name ( CppNameStyle :: Reference ) ,
487+ rust_module. clone ( ) ,
488+ [ ] ,
489+ fld_type_ref. as_ref ( ) . clone ( ) ,
490+ )
491+ . def_loc ( def_loc. clone ( ) )
492+ . doc_comment ( Rc :: clone ( & doc_comment) )
493+ . cpp_body ( FuncCppBody :: ManualCall ( "{{name}}" . into ( ) ) ) ,
494+ ) )
501495 } else {
502496 None
503497 } ;
@@ -509,28 +503,24 @@ impl<'tu, 'ge> Class<'tu, 'ge> {
509503 {
510504 let cpp_name = fld. cpp_name ( CppNameStyle :: Declaration ) ;
511505 let ( first_letter, rest) = cpp_name. split_at ( 1 ) ;
512- let write_func = Func :: new_desc ( FuncDesc {
513- type_hint : FuncTypeHint :: None ,
514- kind : FuncKind :: FieldAccessor ( self . clone ( ) , fld. clone ( ) ) ,
515- cpp_name : format ! ( "set{}{rest}" , first_letter. to_uppercase( ) ) . into ( ) ,
516- rust_custom_leafname : None ,
517- rust_module : fld. rust_module ( ) . into ( ) ,
518- constness : Constness :: Mut ,
519- doc_comment,
520- def_loc : fld. file_line_name ( ) . location ,
521- rust_generic_decls : Rc :: new ( [ ] ) ,
522- arguments : Rc :: new ( [ Field :: new_desc ( FieldDesc {
523- cpp_fullname : "val" . into ( ) ,
524- type_ref : fld_type_ref. as_ref ( ) . clone ( ) . with_inherent_constness ( Constness :: Const ) ,
525- default_value : fld. default_value ( ) . map ( |v| v. into ( ) ) ,
526- } ) ] ) ,
527- return_kind : ReturnKind :: InfallibleNaked ,
528- return_type_ref : TypeRefDesc :: void ( ) ,
529- cpp_body : FuncCppBody :: ManualCall ( "{{name}} = {{args}}" . into ( ) ) ,
530- rust_body : FuncRustBody :: Auto ,
531- rust_extern_definition : FuncRustExtern :: Auto ,
532- } ) ;
533- Some ( write_func)
506+ Some ( Func :: new_desc (
507+ FuncDesc :: new (
508+ FuncKind :: FieldAccessor ( self . clone ( ) , fld. clone ( ) ) ,
509+ Constness :: Mut ,
510+ ReturnKind :: InfallibleNaked ,
511+ format ! ( "set{}{rest}" , first_letter. to_uppercase( ) ) ,
512+ rust_module. clone ( ) ,
513+ [ Field :: new_desc ( FieldDesc {
514+ cpp_fullname : "val" . into ( ) ,
515+ type_ref : fld_type_ref. as_ref ( ) . clone ( ) . with_inherent_constness ( Constness :: Const ) ,
516+ default_value : fld. default_value ( ) . map ( |v| v. into ( ) ) ,
517+ } ) ] ,
518+ TypeRefDesc :: void ( ) ,
519+ )
520+ . doc_comment ( doc_comment)
521+ . def_loc ( def_loc)
522+ . cpp_body ( FuncCppBody :: ManualCall ( "{{name}} = {{args}}" . into ( ) ) ) ,
523+ ) )
534524 } else {
535525 None
536526 } ;
0 commit comments