File tree 1 file changed +8
-1
lines changed
1 file changed +8
-1
lines changed Original file line number Diff line number Diff line change @@ -696,10 +696,17 @@ pub fn parse(
696
696
} else {
697
697
return Failure ( parser. span , token:: Eof ) ;
698
698
}
699
+ } else {
700
+ // Performance hack: eof_items may share matchers via Rc with other things that we want
701
+ // to modify. Dropping eof_items now may drop these refcounts to 1, preventing an
702
+ // unnecessary implicit clone later in Rc::make_mut.
703
+ drop ( eof_items) ;
699
704
}
705
+
700
706
// Another possibility is that we need to call out to parse some rust nonterminal
701
707
// (black-box) parser. However, if there is not EXACTLY ONE of these, something is wrong.
702
- else if ( !bb_items. is_empty ( ) && !next_items. is_empty ( ) ) || bb_items. len ( ) > 1 {
708
+ assert ! ( !token_name_eq( & parser. token, & token:: Eof ) ) ;
709
+ if ( !bb_items. is_empty ( ) && !next_items. is_empty ( ) ) || bb_items. len ( ) > 1 {
703
710
let nts = bb_items
704
711
. iter ( )
705
712
. map ( |item| match item. top_elts . get_tt ( item. idx ) {
You can’t perform that action at this time.
0 commit comments