@@ -650,82 +650,79 @@ fn expand_cxx_function_shim(efn: &ExternFn, types: &Types) -> TokenStream {
650
650
}
651
651
} ;
652
652
let mut expr;
653
- if efn. throws && efn. ret . is_none ( ) {
654
- expr = call;
655
- } else {
656
- expr = match & efn. ret {
657
- None => call,
658
- Some ( ret) => match ret {
659
- Type :: Ident ( ident) if ident. rust == RustString => {
660
- quote_spanned ! ( span=> #call. into_string( ) )
661
- }
662
- Type :: RustBox ( ty) => {
663
- if types. is_considered_improper_ctype ( & ty. inner ) {
664
- quote_spanned ! ( span=> :: cxx:: alloc:: boxed:: Box :: from_raw( #call. cast( ) ) )
665
- } else {
666
- quote_spanned ! ( span=> :: cxx:: alloc:: boxed:: Box :: from_raw( #call) )
667
- }
653
+ if let Some ( ret) = & efn. ret {
654
+ expr = match ret {
655
+ Type :: Ident ( ident) if ident. rust == RustString => {
656
+ quote_spanned ! ( span=> #call. into_string( ) )
657
+ }
658
+ Type :: RustBox ( ty) => {
659
+ if types. is_considered_improper_ctype ( & ty. inner ) {
660
+ quote_spanned ! ( span=> :: cxx:: alloc:: boxed:: Box :: from_raw( #call. cast( ) ) )
661
+ } else {
662
+ quote_spanned ! ( span=> :: cxx:: alloc:: boxed:: Box :: from_raw( #call) )
668
663
}
669
- Type :: RustVec ( vec ) => {
670
- if vec. inner == RustString {
671
- quote_spanned ! ( span=> #call . into_vec_string ( ) )
672
- } else {
673
- quote_spanned ! ( span=> #call . into_vec ( ) )
674
- }
664
+ }
665
+ Type :: RustVec ( vec) => {
666
+ if vec . inner == RustString {
667
+ quote_spanned ! ( span=> #call . into_vec_string ( ) )
668
+ } else {
669
+ quote_spanned ! ( span=> #call . into_vec ( ) )
675
670
}
676
- Type :: UniquePtr ( ty ) => {
677
- if types . is_considered_improper_ctype ( & ty . inner ) {
678
- quote_spanned ! ( span=> :: cxx :: UniquePtr :: from_raw ( #call . cast ( ) ) )
679
- } else {
680
- quote_spanned ! ( span=> :: cxx :: UniquePtr :: from_raw ( #call ) )
681
- }
671
+ }
672
+ Type :: UniquePtr ( ty ) => {
673
+ if types . is_considered_improper_ctype ( & ty . inner ) {
674
+ quote_spanned ! ( span=> :: cxx :: UniquePtr :: from_raw ( #call . cast ( ) ) )
675
+ } else {
676
+ quote_spanned ! ( span=> :: cxx :: UniquePtr :: from_raw ( #call ) )
682
677
}
683
- Type :: Ref ( ty) => match & ty. inner {
684
- Type :: Ident ( ident) if ident. rust == RustString => match ty. mutable {
685
- false => quote_spanned ! ( span=> #call. as_string( ) ) ,
686
- true => quote_spanned ! ( span=> #call. as_mut_string( ) ) ,
687
- } ,
688
- Type :: RustVec ( vec) if vec. inner == RustString => match ty. mutable {
689
- false => quote_spanned ! ( span=> #call. as_vec_string( ) ) ,
690
- true => quote_spanned ! ( span=> #call. as_mut_vec_string( ) ) ,
691
- } ,
692
- Type :: RustVec ( _) => match ty. mutable {
693
- false => quote_spanned ! ( span=> #call. as_vec( ) ) ,
694
- true => quote_spanned ! ( span=> #call. as_mut_vec( ) ) ,
695
- } ,
696
- inner if types. is_considered_improper_ctype ( inner) => {
697
- let mutability = ty. mutability ;
698
- let deref_mut = quote_spanned ! ( span=> & #mutability * #call. cast( ) ) ;
699
- match ty. pinned {
700
- false => deref_mut,
701
- true => {
702
- quote_spanned ! ( span=> :: cxx:: core:: pin:: Pin :: new_unchecked( #deref_mut) )
703
- }
704
- }
705
- }
706
- _ => call,
678
+ }
679
+ Type :: Ref ( ty) => match & ty. inner {
680
+ Type :: Ident ( ident) if ident. rust == RustString => match ty. mutable {
681
+ false => quote_spanned ! ( span=> #call. as_string( ) ) ,
682
+ true => quote_spanned ! ( span=> #call. as_mut_string( ) ) ,
707
683
} ,
708
- Type :: Ptr ( ty) => {
709
- if types. is_considered_improper_ctype ( & ty. inner ) {
710
- quote_spanned ! ( span=> #call. cast( ) )
711
- } else {
712
- call
713
- }
714
- }
715
- Type :: Str ( _) => quote_spanned ! ( span=> #call. as_str( ) ) ,
716
- Type :: SliceRef ( slice) => {
717
- let inner = & slice. inner ;
718
- match slice. mutable {
719
- false => quote_spanned ! ( span=> #call. as_slice:: <#inner>( ) ) ,
720
- true => quote_spanned ! ( span=> #call. as_mut_slice:: <#inner>( ) ) ,
684
+ Type :: RustVec ( vec) if vec. inner == RustString => match ty. mutable {
685
+ false => quote_spanned ! ( span=> #call. as_vec_string( ) ) ,
686
+ true => quote_spanned ! ( span=> #call. as_mut_vec_string( ) ) ,
687
+ } ,
688
+ Type :: RustVec ( _) => match ty. mutable {
689
+ false => quote_spanned ! ( span=> #call. as_vec( ) ) ,
690
+ true => quote_spanned ! ( span=> #call. as_mut_vec( ) ) ,
691
+ } ,
692
+ inner if types. is_considered_improper_ctype ( inner) => {
693
+ let mutability = ty. mutability ;
694
+ let deref_mut = quote_spanned ! ( span=> & #mutability * #call. cast( ) ) ;
695
+ match ty. pinned {
696
+ false => deref_mut,
697
+ true => {
698
+ quote_spanned ! ( span=> :: cxx:: core:: pin:: Pin :: new_unchecked( #deref_mut) )
699
+ }
721
700
}
722
701
}
723
702
_ => call,
724
703
} ,
704
+ Type :: Ptr ( ty) => {
705
+ if types. is_considered_improper_ctype ( & ty. inner ) {
706
+ quote_spanned ! ( span=> #call. cast( ) )
707
+ } else {
708
+ call
709
+ }
710
+ }
711
+ Type :: Str ( _) => quote_spanned ! ( span=> #call. as_str( ) ) ,
712
+ Type :: SliceRef ( slice) => {
713
+ let inner = & slice. inner ;
714
+ match slice. mutable {
715
+ false => quote_spanned ! ( span=> #call. as_slice:: <#inner>( ) ) ,
716
+ true => quote_spanned ! ( span=> #call. as_mut_slice:: <#inner>( ) ) ,
717
+ }
718
+ }
719
+ _ => call,
725
720
} ;
726
721
if efn. throws {
727
722
expr = quote_spanned ! ( span=> :: cxx:: core:: result:: Result :: Ok ( #expr) ) ;
728
723
}
724
+ } else {
725
+ expr = call;
729
726
}
730
727
let dispatch = quote_spanned ! ( span=> unsafe { #setup #expr } ) ;
731
728
let visibility = efn. visibility ;
0 commit comments