This repository was archived by the owner on May 28, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 19 files changed +44
-0
lines changed
rustc_data_structures/src Expand file tree Collapse file tree 19 files changed +44
-0
lines changed Original file line number Diff line number Diff line change 1515#![ feature( if_let_guard) ]
1616#![ feature( let_chains) ]
1717#![ feature( min_specialization) ]
18+ #![ feature( spec_option_partial_eq) ]
1819#![ feature( negative_impls) ]
1920#![ feature( slice_internals) ]
2021#![ feature( stmt_expr_attributes) ]
Original file line number Diff line number Diff line change 66#![ feature( min_specialization) ]
77#![ feature( never_type) ]
88#![ feature( rustc_attrs) ]
9+ #![ feature( spec_option_partial_eq) ]
910#![ feature( stmt_expr_attributes) ]
1011#![ feature( trusted_step) ]
1112#![ feature( try_blocks) ]
Original file line number Diff line number Diff line change 1313#![ feature( cell_leak) ]
1414#![ feature( control_flow_enum) ]
1515#![ feature( extend_one) ]
16+ #![ feature( spec_option_partial_eq) ]
1617#![ feature( hash_raw_entry) ]
1718#![ feature( hasher_prefixfree_extras) ]
1819#![ feature( maybe_uninit_uninit_array) ]
Original file line number Diff line number Diff line change 99#![ feature( never_type) ]
1010#![ feature( rustc_attrs) ]
1111#![ feature( variant_count) ]
12+ #![ feature( spec_option_partial_eq) ]
1213#![ recursion_limit = "256" ]
1314#![ deny( rustc:: untranslatable_diagnostic) ]
1415#![ deny( rustc:: diagnostic_outside_of_impl) ]
Original file line number Diff line number Diff line change @@ -65,6 +65,7 @@ This API is completely unstable and subject to change.
6565#![ feature( is_sorted) ]
6666#![ feature( iter_intersperse) ]
6767#![ feature( let_chains) ]
68+ #![ feature( spec_option_partial_eq) ]
6869#![ feature( min_specialization) ]
6970#![ feature( never_type) ]
7071#![ feature( once_cell) ]
Original file line number Diff line number Diff line change 33#![ feature( try_blocks) ]
44#![ feature( never_type) ]
55#![ feature( min_specialization) ]
6+ #![ feature( spec_option_partial_eq) ]
67#![ feature( control_flow_enum) ]
78#![ feature( drain_filter) ]
89#![ allow( rustc:: potential_query_instability) ]
Original file line number Diff line number Diff line change 66#![ feature( new_uninit) ]
77#![ feature( step_trait) ]
88#![ feature( stmt_expr_attributes) ]
9+ #![ feature( spec_option_partial_eq) ]
910#![ feature( test) ]
1011
1112pub mod bit_set;
Original file line number Diff line number Diff line change 1919#![ feature( extend_one) ]
2020#![ feature( let_chains) ]
2121#![ feature( if_let_guard) ]
22+ #![ feature( spec_option_partial_eq) ]
2223#![ feature( min_specialization) ]
2324#![ feature( never_type) ]
2425#![ feature( try_blocks) ]
Original file line number Diff line number Diff line change 3434#![ feature( iter_intersperse) ]
3535#![ feature( iter_order_by) ]
3636#![ feature( let_chains) ]
37+ #![ feature( spec_option_partial_eq) ]
3738#![ feature( min_specialization) ]
3839#![ feature( never_type) ]
3940#![ recursion_limit = "256" ]
Original file line number Diff line number Diff line change @@ -192,6 +192,30 @@ impl Parse for Newtype {
192192 }
193193 }
194194 } ;
195+ let spec_partial_eq_impl = if let Lit :: Int ( max) = & max {
196+ if let Ok ( max_val) = max. base10_parse :: < u32 > ( ) {
197+ quote ! {
198+ impl core:: option:: SpecOptionPartialEq for #name {
199+ #[ inline]
200+ fn eq( l: & Option <Self >, r: & Option <Self >) -> bool {
201+ if #max_val < u32 :: MAX {
202+ l. map( |i| i. private) . unwrap_or( #max_val+1 ) == r. map( |i| i. private) . unwrap_or( #max_val+1 )
203+ } else {
204+ match ( l, r) {
205+ ( Some ( l) , Some ( r) ) => r == l,
206+ ( None , None ) => true ,
207+ _ => false
208+ }
209+ }
210+ }
211+ }
212+ }
213+ } else {
214+ quote ! { }
215+ }
216+ } else {
217+ quote ! { }
218+ } ;
195219
196220 Ok ( Self ( quote ! {
197221 #( #attrs) *
@@ -293,6 +317,8 @@ impl Parse for Newtype {
293317
294318 #step
295319
320+ #spec_partial_eq_impl
321+
296322 impl From <#name> for u32 {
297323 #[ inline]
298324 fn from( v: #name) -> u32 {
You can’t perform that action at this time.
0 commit comments