@@ -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,7 @@ 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+ self . as_raw ( ) == 0
417423 }
418424
419425 /// Returns `true` if the ordering is not the `Equal` variant.
@@ -432,7 +438,7 @@ impl Ordering {
432438 #[ rustc_const_stable( feature = "ordering_helpers" , since = "1.53.0" ) ]
433439 #[ stable( feature = "ordering_helpers" , since = "1.53.0" ) ]
434440 pub const fn is_ne ( self ) -> bool {
435- ! matches ! ( self , Equal )
441+ self . as_raw ( ) != 0
436442 }
437443
438444 /// Returns `true` if the ordering is the `Less` variant.
@@ -451,7 +457,7 @@ impl Ordering {
451457 #[ rustc_const_stable( feature = "ordering_helpers" , since = "1.53.0" ) ]
452458 #[ stable( feature = "ordering_helpers" , since = "1.53.0" ) ]
453459 pub const fn is_lt ( self ) -> bool {
454- matches ! ( self , Less )
460+ self . as_raw ( ) < 0
455461 }
456462
457463 /// Returns `true` if the ordering is the `Greater` variant.
@@ -470,7 +476,7 @@ impl Ordering {
470476 #[ rustc_const_stable( feature = "ordering_helpers" , since = "1.53.0" ) ]
471477 #[ stable( feature = "ordering_helpers" , since = "1.53.0" ) ]
472478 pub const fn is_gt ( self ) -> bool {
473- matches ! ( self , Greater )
479+ self . as_raw ( ) > 0
474480 }
475481
476482 /// Returns `true` if the ordering is either the `Less` or `Equal` variant.
@@ -489,7 +495,7 @@ impl Ordering {
489495 #[ rustc_const_stable( feature = "ordering_helpers" , since = "1.53.0" ) ]
490496 #[ stable( feature = "ordering_helpers" , since = "1.53.0" ) ]
491497 pub const fn is_le ( self ) -> bool {
492- ! matches ! ( self , Greater )
498+ self . as_raw ( ) <= 0
493499 }
494500
495501 /// Returns `true` if the ordering is either the `Greater` or `Equal` variant.
@@ -508,7 +514,7 @@ impl Ordering {
508514 #[ rustc_const_stable( feature = "ordering_helpers" , since = "1.53.0" ) ]
509515 #[ stable( feature = "ordering_helpers" , since = "1.53.0" ) ]
510516 pub const fn is_ge ( self ) -> bool {
511- ! matches ! ( self , Less )
517+ self . as_raw ( ) >= 0
512518 }
513519
514520 /// Reverses the `Ordering`.
@@ -1369,7 +1375,9 @@ pub trait PartialOrd<Rhs: ?Sized = Self>: PartialEq<Rhs> {
13691375 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
13701376 #[ rustc_diagnostic_item = "cmp_partialord_lt" ]
13711377 fn lt ( & self , other : & Rhs ) -> bool {
1372- self . partial_cmp ( other) . is_some_and ( Ordering :: is_lt)
1378+ // FIXME(#137901): weirdly, passing these as `Ordering::is_lt` doesn't
1379+ // MIR-inline, thus the "unnecessary" closure form here.
1380+ self . partial_cmp ( other) . is_some_and ( |c| c. is_lt ( ) )
13731381 }
13741382
13751383 /// Tests less than or equal to (for `self` and `other`) and is used by the
@@ -1387,7 +1395,7 @@ pub trait PartialOrd<Rhs: ?Sized = Self>: PartialEq<Rhs> {
13871395 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
13881396 #[ rustc_diagnostic_item = "cmp_partialord_le" ]
13891397 fn le ( & self , other : & Rhs ) -> bool {
1390- self . partial_cmp ( other) . is_some_and ( Ordering :: is_le)
1398+ self . partial_cmp ( other) . is_some_and ( |c| c . is_le ( ) )
13911399 }
13921400
13931401 /// Tests greater than (for `self` and `other`) and is used by the `>`
@@ -1405,7 +1413,7 @@ pub trait PartialOrd<Rhs: ?Sized = Self>: PartialEq<Rhs> {
14051413 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
14061414 #[ rustc_diagnostic_item = "cmp_partialord_gt" ]
14071415 fn gt ( & self , other : & Rhs ) -> bool {
1408- self . partial_cmp ( other) . is_some_and ( Ordering :: is_gt)
1416+ self . partial_cmp ( other) . is_some_and ( |c| c . is_gt ( ) )
14091417 }
14101418
14111419 /// Tests greater than or equal to (for `self` and `other`) and is used by
@@ -1423,7 +1431,7 @@ pub trait PartialOrd<Rhs: ?Sized = Self>: PartialEq<Rhs> {
14231431 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
14241432 #[ rustc_diagnostic_item = "cmp_partialord_ge" ]
14251433 fn ge ( & self , other : & Rhs ) -> bool {
1426- self . partial_cmp ( other) . is_some_and ( Ordering :: is_ge)
1434+ self . partial_cmp ( other) . is_some_and ( |c| c . is_ge ( ) )
14271435 }
14281436}
14291437
0 commit comments