X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flexer.ll;h=0df70e20082f50bb4a6f131b00d6f55382f9b6af;hb=85d4958c021936c64b6ef9d514a6a2b0d269cc58;hp=9b1d6eb5aabb1f18d778715b502bc1532dac9eca;hpb=2a12b7b4a23ccfe7b1dc5e0e769fab1aa9124474;p=lilypond.git diff --git a/lily/lexer.ll b/lily/lexer.ll index 9b1d6eb5aa..0df70e2008 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -314,7 +314,7 @@ BOM_UTF8 \357\273\277 yy_push_state (state); } else - error (_ ("\\maininput not allowed outside init files")); + LexerError (_ ("\\maininput not allowed outside init files").c_str ()); } \\include { @@ -374,8 +374,8 @@ BOM_UTF8 \357\273\277 } \"[^""]* { // backup rule - error (_ ("end quote missing")); - exit (1); + LexerError (_ ("end quote missing").c_str ()); + yy_pop_state (); } /* Flex picks the longest matching pattern including trailing @@ -925,6 +925,11 @@ Lily_lexer::scan_escaped_word (string str) return i; SCM sid = lookup_identifier (str); + if (Music *m = unsmob_music (sid)) + { + m->set_spot (override_input (last_input_)); + } + if (sid != SCM_UNDEFINED) return scan_scm_id (sid); @@ -1084,19 +1089,26 @@ Lily_lexer::eval_scm (SCM readerdata, char extra_token) sval = scm_struct_ref (sval, SCM_INUM0); if (scm_is_pair (sval)) { - for (SCM v = scm_reverse (scm_cdr (sval)); - scm_is_pair (v); - v = scm_cdr (v)) + for (SCM p = scm_reverse (scm_cdr (sval)); + scm_is_pair (p); + p = scm_cdr (p)) { + SCM v = scm_car (p); + if (Music *m = unsmob_music (v)) + { + if (!unsmob_input (m->get_property ("origin"))) + m->set_spot (override_input (last_input_)); + } + int token; switch (extra_token) { case '$': - token = scan_scm_id (scm_car (v)); + token = scan_scm_id (v); if (!scm_is_eq (yylval, SCM_UNSPECIFIED)) push_extra_token (token, yylval); break; case '#': - push_extra_token (SCM_IDENTIFIER, scm_car (v)); + push_extra_token (SCM_IDENTIFIER, v); break; } } @@ -1105,6 +1117,12 @@ Lily_lexer::eval_scm (SCM readerdata, char extra_token) sval = SCM_UNSPECIFIED; } + if (Music *m = unsmob_music (sval)) + { + if (!unsmob_input (m->get_property ("origin"))) + m->set_spot (override_input (last_input_)); + } + return sval; }