File tree Expand file tree Collapse file tree 1 file changed +8
-1
lines changed
Expand file tree Collapse file tree 1 file changed +8
-1
lines changed Original file line number Diff line number Diff line change @@ -696,10 +696,17 @@ pub fn parse(
696696 } else {
697697 return Failure ( parser. span , token:: Eof ) ;
698698 }
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) ;
699704 }
705+
700706 // Another possibility is that we need to call out to parse some rust nonterminal
701707 // (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 {
703710 let nts = bb_items
704711 . iter ( )
705712 . map ( |item| match item. top_elts . get_tt ( item. idx ) {
You can’t perform that action at this time.
0 commit comments