12
12
13
13
#![ stable( feature = "rust1" , since = "1.0.0" ) ]
14
14
15
- use convert:: TryFrom ;
15
+ use convert:: { Infallible , TryFrom } ;
16
16
use fmt;
17
17
use intrinsics;
18
18
use str:: FromStr ;
@@ -2507,16 +2507,24 @@ impl fmt::Display for TryFromIntError {
2507
2507
}
2508
2508
}
2509
2509
2510
+ #[ unstable( feature = "try_from" , issue = "33417" ) ]
2511
+ impl From < Infallible > for TryFromIntError {
2512
+ fn from ( infallible : Infallible ) -> TryFromIntError {
2513
+ match infallible {
2514
+ }
2515
+ }
2516
+ }
2517
+
2510
2518
// no possible bounds violation
2511
2519
macro_rules! try_from_unbounded {
2512
2520
( $source: ty, $( $target: ty) ,* ) => { $(
2513
2521
#[ unstable( feature = "try_from" , issue = "33417" ) ]
2514
2522
impl TryFrom <$source> for $target {
2515
- type Error = TryFromIntError ;
2523
+ type Error = Infallible ;
2516
2524
2517
2525
#[ inline]
2518
- fn try_from( u : $source) -> Result <$target , TryFromIntError > {
2519
- Ok ( u as $target)
2526
+ fn try_from( value : $source) -> Result <Self , Self :: Error > {
2527
+ Ok ( value as $target)
2520
2528
}
2521
2529
}
2522
2530
) * }
@@ -2588,31 +2596,17 @@ macro_rules! rev {
2588
2596
}
2589
2597
2590
2598
/// intra-sign conversions
2591
- try_from_unbounded ! ( u8 , u8 , u16 , u32 , u64 , u128 ) ;
2592
- try_from_unbounded ! ( u16 , u16 , u32 , u64 , u128 ) ;
2593
- try_from_unbounded ! ( u32 , u32 , u64 , u128 ) ;
2594
- try_from_unbounded ! ( u64 , u64 , u128 ) ;
2595
- try_from_unbounded ! ( u128 , u128 ) ;
2596
2599
try_from_upper_bounded ! ( u16 , u8 ) ;
2597
2600
try_from_upper_bounded ! ( u32 , u16 , u8 ) ;
2598
2601
try_from_upper_bounded ! ( u64 , u32 , u16 , u8 ) ;
2599
2602
try_from_upper_bounded ! ( u128 , u64 , u32 , u16 , u8 ) ;
2600
2603
2601
- try_from_unbounded ! ( i8 , i8 , i16 , i32 , i64 , i128 ) ;
2602
- try_from_unbounded ! ( i16 , i16 , i32 , i64 , i128 ) ;
2603
- try_from_unbounded ! ( i32 , i32 , i64 , i128 ) ;
2604
- try_from_unbounded ! ( i64 , i64 , i128 ) ;
2605
- try_from_unbounded ! ( i128 , i128 ) ;
2606
2604
try_from_both_bounded ! ( i16 , i8 ) ;
2607
2605
try_from_both_bounded ! ( i32 , i16 , i8 ) ;
2608
2606
try_from_both_bounded ! ( i64 , i32 , i16 , i8 ) ;
2609
2607
try_from_both_bounded ! ( i128 , i64 , i32 , i16 , i8 ) ;
2610
2608
2611
2609
// unsigned-to-signed
2612
- try_from_unbounded ! ( u8 , i16 , i32 , i64 , i128 ) ;
2613
- try_from_unbounded ! ( u16 , i32 , i64 , i128 ) ;
2614
- try_from_unbounded ! ( u32 , i64 , i128 ) ;
2615
- try_from_unbounded ! ( u64 , i128 ) ;
2616
2610
try_from_upper_bounded ! ( u8 , i8 ) ;
2617
2611
try_from_upper_bounded ! ( u16 , i8 , i16 ) ;
2618
2612
try_from_upper_bounded ! ( u32 , i8 , i16 , i32 ) ;
@@ -2631,15 +2625,13 @@ try_from_both_bounded!(i64, u32, u16, u8);
2631
2625
try_from_both_bounded ! ( i128 , u64 , u32 , u16 , u8 ) ;
2632
2626
2633
2627
// usize/isize
2634
- try_from_unbounded ! ( usize , usize ) ;
2635
2628
try_from_upper_bounded ! ( usize , isize ) ;
2636
2629
try_from_lower_bounded ! ( isize , usize ) ;
2637
- try_from_unbounded ! ( isize , isize ) ;
2638
2630
2639
2631
#[ cfg( target_pointer_width = "16" ) ]
2640
2632
mod ptr_try_from_impls {
2641
2633
use super :: TryFromIntError ;
2642
- use convert:: TryFrom ;
2634
+ use convert:: { Infallible , TryFrom } ;
2643
2635
2644
2636
try_from_upper_bounded ! ( usize , u8 ) ;
2645
2637
try_from_unbounded ! ( usize , u16 , u32 , u64 , u128 ) ;
@@ -2651,21 +2643,21 @@ mod ptr_try_from_impls {
2651
2643
try_from_both_bounded ! ( isize , i8 ) ;
2652
2644
try_from_unbounded ! ( isize , i16 , i32 , i64 , i128 ) ;
2653
2645
2654
- rev ! ( try_from_unbounded, usize , u8 , u16 ) ;
2646
+ rev ! ( try_from_unbounded, usize , u16 ) ;
2655
2647
rev ! ( try_from_upper_bounded, usize , u32 , u64 , u128 ) ;
2656
2648
rev ! ( try_from_lower_bounded, usize , i8 , i16 ) ;
2657
2649
rev ! ( try_from_both_bounded, usize , i32 , i64 , i128 ) ;
2658
2650
2659
2651
rev ! ( try_from_unbounded, isize , u8 ) ;
2660
2652
rev ! ( try_from_upper_bounded, isize , u16 , u32 , u64 , u128 ) ;
2661
- rev ! ( try_from_unbounded, isize , i8 , i16 ) ;
2653
+ rev ! ( try_from_unbounded, isize , i16 ) ;
2662
2654
rev ! ( try_from_both_bounded, isize , i32 , i64 , i128 ) ;
2663
2655
}
2664
2656
2665
2657
#[ cfg( target_pointer_width = "32" ) ]
2666
2658
mod ptr_try_from_impls {
2667
2659
use super :: TryFromIntError ;
2668
- use convert:: TryFrom ;
2660
+ use convert:: { Infallible , TryFrom } ;
2669
2661
2670
2662
try_from_upper_bounded ! ( usize , u8 , u16 ) ;
2671
2663
try_from_unbounded ! ( usize , u32 , u64 , u128 ) ;
@@ -2677,21 +2669,21 @@ mod ptr_try_from_impls {
2677
2669
try_from_both_bounded ! ( isize , i8 , i16 ) ;
2678
2670
try_from_unbounded ! ( isize , i32 , i64 , i128 ) ;
2679
2671
2680
- rev ! ( try_from_unbounded, usize , u8 , u16 , u32 ) ;
2672
+ rev ! ( try_from_unbounded, usize , u16 , u32 ) ;
2681
2673
rev ! ( try_from_upper_bounded, usize , u64 , u128 ) ;
2682
2674
rev ! ( try_from_lower_bounded, usize , i8 , i16 , i32 ) ;
2683
2675
rev ! ( try_from_both_bounded, usize , i64 , i128 ) ;
2684
2676
2685
2677
rev ! ( try_from_unbounded, isize , u8 , u16 ) ;
2686
2678
rev ! ( try_from_upper_bounded, isize , u32 , u64 , u128 ) ;
2687
- rev ! ( try_from_unbounded, isize , i8 , i16 , i32 ) ;
2679
+ rev ! ( try_from_unbounded, isize , i16 , i32 ) ;
2688
2680
rev ! ( try_from_both_bounded, isize , i64 , i128 ) ;
2689
2681
}
2690
2682
2691
2683
#[ cfg( target_pointer_width = "64" ) ]
2692
2684
mod ptr_try_from_impls {
2693
2685
use super :: TryFromIntError ;
2694
- use convert:: TryFrom ;
2686
+ use convert:: { Infallible , TryFrom } ;
2695
2687
2696
2688
try_from_upper_bounded ! ( usize , u8 , u16 , u32 ) ;
2697
2689
try_from_unbounded ! ( usize , u64 , u128 ) ;
@@ -2703,14 +2695,14 @@ mod ptr_try_from_impls {
2703
2695
try_from_both_bounded ! ( isize , i8 , i16 , i32 ) ;
2704
2696
try_from_unbounded ! ( isize , i64 , i128 ) ;
2705
2697
2706
- rev ! ( try_from_unbounded, usize , u8 , u16 , u32 , u64 ) ;
2698
+ rev ! ( try_from_unbounded, usize , u16 , u32 , u64 ) ;
2707
2699
rev ! ( try_from_upper_bounded, usize , u128 ) ;
2708
2700
rev ! ( try_from_lower_bounded, usize , i8 , i16 , i32 , i64 ) ;
2709
2701
rev ! ( try_from_both_bounded, usize , i128 ) ;
2710
2702
2711
2703
rev ! ( try_from_unbounded, isize , u8 , u16 , u32 ) ;
2712
2704
rev ! ( try_from_upper_bounded, isize , u64 , u128 ) ;
2713
- rev ! ( try_from_unbounded, isize , i8 , i16 , i32 , i64 ) ;
2705
+ rev ! ( try_from_unbounded, isize , i16 , i32 , i64 ) ;
2714
2706
rev ! ( try_from_both_bounded, isize , i128 ) ;
2715
2707
}
2716
2708
0 commit comments