@@ -64,20 +64,18 @@ impl<Pat: PartialEq> RuleWithNamedFields<Pat> {
64
64
. collect ( ) ;
65
65
for ( field, paths) in & self . fields {
66
66
for path in paths {
67
- if path. len ( ) == 0 {
68
- return None ;
69
- }
70
- if path. len ( ) == 1 {
71
- if variants[ path[ 0 ] ] . name != "" {
72
- return None ;
67
+ match path[ ..] {
68
+ [ ] => return None ,
69
+ [ variant] if variants[ variant] . name != "" => return None ,
70
+ [ variant] => variants[ variant] . name = field,
71
+ // FIXME: use [variant, rest @ ..] when possible.
72
+ _ => {
73
+ variants[ path[ 0 ] ]
74
+ . fields
75
+ . entry ( & field[ ..] )
76
+ . or_insert_with ( OrderSet :: new)
77
+ . insert ( path[ 1 ..] . to_vec ( ) ) ;
73
78
}
74
- variants[ path[ 0 ] ] . name = field;
75
- } else {
76
- variants[ path[ 0 ] ]
77
- . fields
78
- . entry ( & field[ ..] )
79
- . or_insert_with ( OrderSet :: new)
80
- . insert ( path[ 1 ..] . to_vec ( ) ) ;
81
79
}
82
80
}
83
81
}
@@ -711,17 +709,12 @@ impl<Pat: Ord + Hash + RustInputPat> Rule<Pat> {
711
709
Thunk :: new ( move |cont| match ( self , rc_self_and_rules) {
712
710
( Rule :: Empty , _) => cont,
713
711
( Rule :: Eat ( pat) , _) => {
714
- // HACK(eddyb) remove extra variables post-NLL
715
712
let pat = pat. rust_matcher ( ) ;
716
- let cont = check ( quote ! ( let Some ( _range) = p. input_consume_left( _range, #pat) ) )
717
- . apply ( cont) ;
718
- cont
713
+ check ( quote ! ( let Some ( _range) = p. input_consume_left( _range, #pat) ) ) . apply ( cont)
719
714
}
720
715
( Rule :: NegativeLookahead ( pat) , _) => {
721
- // HACK(eddyb) remove extra variables post-NLL
722
716
let pat = pat. rust_matcher ( ) ;
723
- let cont = check ( quote ! ( p. input_consume_left( _range, #pat) . is_none( ) ) ) . apply ( cont) ;
724
- cont
717
+ check ( quote ! ( p. input_consume_left( _range, #pat) . is_none( ) ) ) . apply ( cont)
725
718
}
726
719
( Rule :: Call ( r) , _) => call ( Rc :: new ( CodeLabel :: NamedRule ( r. clone ( ) ) ) ) . apply ( cont) ,
727
720
( Rule :: Concat ( [ left, right] ) , None ) => {
0 commit comments