@@ -13,12 +13,12 @@ use crate::debug::{DefinitionLocation, LocationName};
13
13
use crate :: element:: ExcludeKind ;
14
14
use crate :: entity:: { ControlFlowExt , ToEntity } ;
15
15
use crate :: field:: FieldDesc ;
16
- use crate :: func:: { FuncCppBody , FuncDesc , FuncKind , FuncRustBody , FuncRustExtern , ReturnKind } ;
16
+ use crate :: func:: { FuncCppBody , FuncDesc , FuncKind , ReturnKind } ;
17
17
use crate :: type_ref:: { Constness , CppNameStyle , StrEnc , StrType , TypeRef , TypeRefDesc , TypeRefTypeHint } ;
18
18
use crate :: writer:: rust_native:: element:: RustElement ;
19
19
use 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 ,
22
22
} ;
23
23
24
24
mod desc;
@@ -419,6 +419,8 @@ impl<'tu, 'ge> Class<'tu, 'ge> {
419
419
out. extend ( fields. flat_map ( |fld| {
420
420
iter:: from_fn ( {
421
421
let doc_comment = Rc :: from ( fld. doc_comment ( ) ) ;
422
+ let def_loc = fld. file_line_name ( ) . location ;
423
+ let rust_module = fld. rust_module ( ) ;
422
424
let mut fld_type_ref = fld. type_ref ( ) ;
423
425
let fld_type_kind = fld_type_ref. kind ( ) ;
424
426
if fld_type_kind
@@ -432,72 +434,64 @@ impl<'tu, 'ge> Class<'tu, 'ge> {
432
434
}
433
435
let fld_type_kind = fld_type_ref. kind ( ) ;
434
436
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) ;
435
438
let fld_const = fld. constness ( ) ;
436
439
let passed_by_ref = fld_type_kind. can_return_as_direct_reference ( ) ;
437
440
let ( mut read_const_yield, mut read_mut_yield) = if passed_by_ref && fld_const. is_mut ( ) {
438
441
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
+ ) )
456
456
} else {
457
457
None
458
458
} ;
459
459
let read_mut_func = if constness_filter. map_or ( true , |c| c. is_mut ( ) ) {
460
460
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
+ ) )
478
475
} else {
479
476
None
480
477
} ;
481
478
( read_const_func, read_mut_func)
482
479
} else {
483
480
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
+ ) )
501
495
} else {
502
496
None
503
497
} ;
@@ -509,28 +503,24 @@ impl<'tu, 'ge> Class<'tu, 'ge> {
509
503
{
510
504
let cpp_name = fld. cpp_name ( CppNameStyle :: Declaration ) ;
511
505
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
+ ) )
534
524
} else {
535
525
None
536
526
} ;
0 commit comments