File tree Expand file tree Collapse file tree 1 file changed +14
-20
lines changed
Expand file tree Collapse file tree 1 file changed +14
-20
lines changed Original file line number Diff line number Diff line change @@ -600,30 +600,24 @@ impl Type {
600600 is_nullable,
601601 never_return,
602602 } => {
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) ;
613615 let erased_args = args
614616 . 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) ) )
624618 . collect ( ) ;
625619
626- if num_erased > 0 {
620+ if erased_any {
627621 return Some ( Type :: FuncPtr {
628622 ret : Box :: new ( erased_ret) ,
629623 args : erased_args,
You can’t perform that action at this time.
0 commit comments