@@ -397,6 +397,12 @@ pub enum Ordering {
397397} 
398398
399399impl  Ordering  { 
400+     #[ inline]  
401+     const  fn  as_raw ( self )  -> i8  { 
402+         // FIXME(const-hack): just use `PartialOrd` against `Equal` once that's const 
403+         crate :: intrinsics:: discriminant_value ( & self ) 
404+     } 
405+ 
400406    /// Returns `true` if the ordering is the `Equal` variant. 
401407     /// 
402408     /// # Examples 
@@ -413,7 +419,11 @@ impl Ordering {
413419    #[ rustc_const_stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
414420    #[ stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
415421    pub  const  fn  is_eq ( self )  -> bool  { 
416-         matches ! ( self ,  Equal ) 
422+         // All the `is_*` methods are implemented as comparisons against zero 
423+         // to follow how clang's libcxx implements their equivalents in 
424+         // <https://github.com/llvm/llvm-project/blob/60486292b79885b7800b082754153202bef5b1f0/libcxx/include/__compare/is_eq.h#L23-L28> 
425+ 
426+         self . as_raw ( )  == 0 
417427    } 
418428
419429    /// Returns `true` if the ordering is not the `Equal` variant. 
@@ -432,7 +442,7 @@ impl Ordering {
432442    #[ rustc_const_stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
433443    #[ stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
434444    pub  const  fn  is_ne ( self )  -> bool  { 
435-         ! matches ! ( self ,   Equal ) 
445+         self . as_raw ( )  !=  0 
436446    } 
437447
438448    /// Returns `true` if the ordering is the `Less` variant. 
@@ -451,7 +461,7 @@ impl Ordering {
451461    #[ rustc_const_stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
452462    #[ stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
453463    pub  const  fn  is_lt ( self )  -> bool  { 
454-         matches ! ( self ,   Less ) 
464+         self . as_raw ( )  <  0 
455465    } 
456466
457467    /// Returns `true` if the ordering is the `Greater` variant. 
@@ -470,7 +480,7 @@ impl Ordering {
470480    #[ rustc_const_stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
471481    #[ stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
472482    pub  const  fn  is_gt ( self )  -> bool  { 
473-         matches ! ( self ,   Greater ) 
483+         self . as_raw ( )  >  0 
474484    } 
475485
476486    /// Returns `true` if the ordering is either the `Less` or `Equal` variant. 
@@ -489,7 +499,7 @@ impl Ordering {
489499    #[ rustc_const_stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
490500    #[ stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
491501    pub  const  fn  is_le ( self )  -> bool  { 
492-         ! matches ! ( self ,   Greater ) 
502+         self . as_raw ( )  <=  0 
493503    } 
494504
495505    /// Returns `true` if the ordering is either the `Greater` or `Equal` variant. 
@@ -508,7 +518,7 @@ impl Ordering {
508518    #[ rustc_const_stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
509519    #[ stable( feature = "ordering_helpers" ,  since = "1.53.0" ) ]  
510520    pub  const  fn  is_ge ( self )  -> bool  { 
511-         ! matches ! ( self ,   Less ) 
521+         self . as_raw ( )  >=  0 
512522    } 
513523
514524    /// Reverses the `Ordering`. 
@@ -1369,7 +1379,9 @@ pub trait PartialOrd<Rhs: ?Sized = Self>: PartialEq<Rhs> {
13691379    #[ stable( feature = "rust1" ,  since = "1.0.0" ) ]  
13701380    #[ rustc_diagnostic_item = "cmp_partialord_lt" ]  
13711381    fn  lt ( & self ,  other :  & Rhs )  -> bool  { 
1372-         self . partial_cmp ( other) . is_some_and ( Ordering :: is_lt) 
1382+         // FIXME(#137901): weirdly, passing these as `Ordering::is_lt` doesn't 
1383+         // MIR-inline, thus the "unnecessary" closure form here. 
1384+         self . partial_cmp ( other) . is_some_and ( |c| c. is_lt ( ) ) 
13731385    } 
13741386
13751387    /// Tests less than or equal to (for `self` and `other`) and is used by the 
@@ -1387,7 +1399,7 @@ pub trait PartialOrd<Rhs: ?Sized = Self>: PartialEq<Rhs> {
13871399    #[ stable( feature = "rust1" ,  since = "1.0.0" ) ]  
13881400    #[ rustc_diagnostic_item = "cmp_partialord_le" ]  
13891401    fn  le ( & self ,  other :  & Rhs )  -> bool  { 
1390-         self . partial_cmp ( other) . is_some_and ( Ordering :: is_le) 
1402+         self . partial_cmp ( other) . is_some_and ( |c| c . is_le ( ) ) 
13911403    } 
13921404
13931405    /// Tests greater than (for `self` and `other`) and is used by the `>` 
@@ -1405,7 +1417,7 @@ pub trait PartialOrd<Rhs: ?Sized = Self>: PartialEq<Rhs> {
14051417    #[ stable( feature = "rust1" ,  since = "1.0.0" ) ]  
14061418    #[ rustc_diagnostic_item = "cmp_partialord_gt" ]  
14071419    fn  gt ( & self ,  other :  & Rhs )  -> bool  { 
1408-         self . partial_cmp ( other) . is_some_and ( Ordering :: is_gt) 
1420+         self . partial_cmp ( other) . is_some_and ( |c| c . is_gt ( ) ) 
14091421    } 
14101422
14111423    /// Tests greater than or equal to (for `self` and `other`) and is used by 
@@ -1423,7 +1435,7 @@ pub trait PartialOrd<Rhs: ?Sized = Self>: PartialEq<Rhs> {
14231435    #[ stable( feature = "rust1" ,  since = "1.0.0" ) ]  
14241436    #[ rustc_diagnostic_item = "cmp_partialord_ge" ]  
14251437    fn  ge ( & self ,  other :  & Rhs )  -> bool  { 
1426-         self . partial_cmp ( other) . is_some_and ( Ordering :: is_ge) 
1438+         self . partial_cmp ( other) . is_some_and ( |c| c . is_ge ( ) ) 
14271439    } 
14281440} 
14291441
0 commit comments