From 0e91bb16e020081fbbecab38fb7a8ed1c1a761dd Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Tue, 6 Oct 2015 15:36:28 +0200 Subject: [PATCH] Issue 4630/2: Add override_input to music created from loc_on_music This makes sure that music created from default arguments of function calls appears to generate from surrounding music function calls rather than the music function body. --- lily/parser.yy | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/lily/parser.yy b/lily/parser.yy index ad10401441..df8e6bc209 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -228,7 +228,7 @@ static Music *make_music_with_input (SCM name, Input where); SCM check_scheme_arg (Lily_parser *parser, Input loc, SCM arg, SCM args, SCM pred, SCM disp = SCM_UNDEFINED); SCM make_music_from_simple (Lily_parser *parser, Input loc, SCM pitch); -SCM loc_on_music (Input loc, SCM arg); +SCM loc_on_music (Lily_parser *parser, Input loc, SCM arg); SCM make_chord_elements (Input loc, SCM pitch, SCM dur, SCM modification_list); SCM make_chord_step (SCM step, Rational alter); SCM make_simple_markup (SCM a); @@ -1882,7 +1882,7 @@ function_arglist_backup: $$ = scm_cons ($$, $3); else { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (SCM_ARG, $4, @4); } } @@ -1893,7 +1893,7 @@ function_arglist_backup: { $$ = scm_cons ($4, $3); } else { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (EVENT_IDENTIFIER, $4, @4); } } @@ -1909,7 +1909,7 @@ function_arglist_backup: } else if (scm_is_true (scm_call_1 ($2, $4))) $$ = scm_cons ($4, $3); else { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (PITCH_IDENTIFIER, $4, @4); } } @@ -1925,7 +1925,7 @@ function_arglist_backup: } else if (scm_is_true (scm_call_1 ($2, $4))) $$ = scm_cons ($4, $3); else { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (TONICNAME_PITCH, $4, @4); } } @@ -1934,7 +1934,7 @@ function_arglist_backup: if (scm_is_true (scm_call_1 ($2, $4))) $$ = scm_cons ($4, $3); else { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (SCM_IDENTIFIER, $4, @4); } } @@ -1948,7 +1948,7 @@ function_arglist_backup: SCM d = make_duration ($4); if (SCM_UNBNDP (d) || scm_is_false (scm_call_1 ($2, d))) { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (UNSIGNED, $4, @4); } else { MYREPARSE (@4, $2, DURATION_IDENTIFIER, d); @@ -1963,7 +1963,7 @@ function_arglist_backup: $$ = $3; MYREPARSE (@4, $2, REAL, $4); } else { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (REAL, $4, @4); } } @@ -1973,7 +1973,7 @@ function_arglist_backup: { $$ = scm_cons ($4, $3); } else { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (NUMBER_IDENTIFIER, $4, @4); } } @@ -1990,7 +1990,7 @@ function_arglist_backup: if (scm_is_true (scm_call_1 ($2, $$))) $$ = scm_cons ($$, $3); else { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (UNSIGNED, $5, @5); parser->lexer_->push_extra_token (@4, '-'); } @@ -2003,7 +2003,7 @@ function_arglist_backup: MYREPARSE (@5, $2, REAL, n); $$ = $3; } else { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (REAL, n, @5); } } @@ -2013,7 +2013,7 @@ function_arglist_backup: if (scm_is_true (scm_call_1 ($2, n))) { $$ = scm_cons (n, $3); } else { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (NUMBER_IDENTIFIER, n, @5); } } @@ -2024,7 +2024,7 @@ function_arglist_backup: MYREPARSE (@4, $2, DURATION_IDENTIFIER, $4); $$ = $3; } else { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (DURATION_IDENTIFIER, $4, @4); } } @@ -2039,7 +2039,7 @@ function_arglist_backup: else $$ = scm_cons (res, $3); else { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (SCM_IDENTIFIER, $4, @4); } } @@ -2054,7 +2054,7 @@ function_arglist_backup: else $$ = scm_cons (res, $3); else { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); MYBACKUP (STRING, $4, @4); } } @@ -2088,7 +2088,7 @@ function_arglist: function_arglist_nonbackup | EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip_nonbackup DEFAULT { - $$ = scm_cons (loc_on_music (@4, $1), $3); + $$ = scm_cons (loc_on_music (parser, @4, $1), $3); } ; @@ -2096,7 +2096,7 @@ function_arglist_skip_nonbackup: function_arglist_nonbackup | EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip_nonbackup { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); } ; @@ -2334,7 +2334,7 @@ function_arglist_optional: function_arglist_backup | EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip_backup DEFAULT { - $$ = scm_cons (loc_on_music (@4, $1), $3); + $$ = scm_cons (loc_on_music (parser, @4, $1), $3); } | function_arglist_skip_backup BACKUP ; @@ -2343,7 +2343,7 @@ function_arglist_skip_backup: function_arglist_backup | EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip_backup { - $$ = scm_cons (loc_on_music (@3, $1), $3); + $$ = scm_cons (loc_on_music (parser, @3, $1), $3); } ; @@ -3955,12 +3955,12 @@ SCM check_scheme_arg (Lily_parser *parser, Input loc, return args; } -SCM loc_on_music (Input loc, SCM arg) +SCM loc_on_music (Lily_parser *parser, Input loc, SCM arg) { if (Music *m = unsmob (arg)) { m = m->clone (); - m->set_spot (loc); + m->set_spot (parser->lexer_->override_input (loc)); return m->unprotect (); } return arg; -- 2.39.2