This approach works by letting Lily_lexer::pop_state not cross the
maininput threshold. Since Lily_lexer::pop_state is the "cooked" form
of yy_pop_state (also hiding the extratoken machinery), this keeps the
"maininput" state firmly under the lexer's control and avoids exiting
it prematurely.
{
LexerError (_ ("Unfinished main input").c_str ());
do {
- pop_state ();
+ yy_pop_state ();
} while (YYSTATE != maininput);
}
- pop_state ();
+ extra_tokens_ = SCM_EOL;
+ yy_pop_state ();
}
if (!close_input () || !is_main_input_)
/* Returns YY_NULL */
if (YYSTATE == notes || YYSTATE == chords)
pitchname_tab_stack_ = scm_cdr (pitchname_tab_stack_);
- yy_pop_state ();
+ // don't cross the maininput threshold
+ if (YYSTATE != maininput)
+ yy_pop_state ();
if (extra) {
hidden_state_ = YYSTATE;