File tree 1 file changed +14
-20
lines changed
1 file changed +14
-20
lines changed Original file line number Diff line number Diff line change @@ -600,30 +600,24 @@ impl Type {
600
600
is_nullable,
601
601
never_return,
602
602
} => {
603
- // Predict that ret+args will all be erased, but decrement the count whenever we're
604
- // wrong. If the count drops to 0, then type erasure was a no-op after all.
605
- let mut num_erased = 1 + args. len ( ) ;
606
- let erased_ret = eraser
607
- . erase_transparent_types ( library, ret, mappings)
608
- . unwrap_or_else ( || {
609
- num_erased -= 1 ;
610
- ret. as_ref ( ) . clone ( )
611
- } ) ;
612
-
603
+ // Attempt to erase ret and all args; if any of them were actually erased, then
604
+ // assemble and return the simplified function signature that results.
605
+ let mut erased_any = false ;
606
+ let mut try_erase = |ty| {
607
+ if let Some ( erased) = eraser. erase_transparent_types ( library, ty, mappings) {
608
+ erased_any = true ;
609
+ erased
610
+ } else {
611
+ ty. clone ( )
612
+ }
613
+ } ;
614
+ let erased_ret = try_erase ( ret) ;
613
615
let erased_args = args
614
616
. iter ( )
615
- . map ( |( name, ty) | {
616
- let erased_ty = eraser
617
- . erase_transparent_types ( library, ty, mappings)
618
- . unwrap_or_else ( || {
619
- num_erased -= 1 ;
620
- ty. clone ( )
621
- } ) ;
622
- ( name. clone ( ) , erased_ty)
623
- } )
617
+ . map ( |( name, ty) | ( name. clone ( ) , try_erase ( ty) ) )
624
618
. collect ( ) ;
625
619
626
- if num_erased > 0 {
620
+ if erased_any {
627
621
return Some ( Type :: FuncPtr {
628
622
ret : Box :: new ( erased_ret) ,
629
623
args : erased_args,
You can’t perform that action at this time.
0 commit comments