From 809acd76be2af232cb4cbc43f86dad820bf97ae0 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Thu, 7 May 2015 21:22:20 +0200 Subject: [PATCH] Issue 4377: Run a script for using derived_unsmob where obvious Script is: matched="[^()]*" for i in 1 2 3 4 5 do matched="\\(($matched)\\|[^()]\\)*" done filelist="$(git grep -l '\]*> ([_a-zA-Z]*::unsmob\>')" typelist="$(sed -n 's/^.*\ (\([_a-zA-Z]*\)::unsmob\>.*$/\1/p' $filelist | sort -u )" for typ in $typelist do # crazy: we have unsmob definitions that are not even used if git grep -q "$typ::unsmob" || git grep -q "\\<$typ"'\s*\*\s*unsmob\s*(SCM' then echo "There already is $typ::unsmob" sed -i '/unsmob (SCM/,/;/!s/\ (\([_a-zA-Z]*\)::unsmob\s*(\('"$matched"'\))\s*)/\1::unsmob (\3)/g' $filelist else sed -i 's/\ (\([_a-zA-Z]*\)::unsmob\s*(\('"$matched"'\))\s*)/derived_unsmob<\1> (\3)/g' $filelist fi done The awkward bit at the start of the script is for matching matched parentheses. This replaces the construct dynamic_cast(xxx::unsmob (yyy)) with derived_unsmob (yyy) where appropriate. If T::unsmob already exists, it is used instead (apart from inside of its own definition, of course). --- lily/all-font-metrics.cc | 4 ++-- lily/break-align-engraver.cc | 2 +- lily/break-substitution.cc | 2 +- lily/figured-bass-continuation.cc | 4 ++-- lily/figured-bass-engraver.cc | 2 +- lily/global-context-scheme.cc | 6 +++--- lily/key-signature-interface.cc | 2 +- lily/ledger-line-spanner.cc | 4 ++-- lily/line-spanner.cc | 2 +- lily/measure-grouping-spanner.cc | 2 +- lily/open-type-font-scheme.cc | 20 ++++++++++---------- lily/ottava-bracket.cc | 2 +- lily/page-breaking.cc | 2 +- lily/pango-font-scheme.cc | 4 ++-- lily/paper-book.cc | 6 +++--- lily/paper-column-engraver.cc | 2 +- lily/paper-column.cc | 2 +- lily/paper-score-scheme.cc | 2 +- lily/performer-group.cc | 2 +- lily/piano-pedal-bracket.cc | 2 +- lily/score.cc | 2 +- lily/spacing-engraver.cc | 2 +- lily/spacing-loose-columns.cc | 4 ++-- lily/spanner-scheme.cc | 2 +- lily/stem.cc | 2 +- lily/system.cc | 4 ++-- lily/tie-column.cc | 4 ++-- lily/translator-dispatch-list.cc | 2 +- lily/translator-group.cc | 2 +- 29 files changed, 49 insertions(+), 49 deletions(-) diff --git a/lily/all-font-metrics.cc b/lily/all-font-metrics.cc index c39cee79d3..bc8ba15dae 100644 --- a/lily/all-font-metrics.cc +++ b/lily/all-font-metrics.cc @@ -103,7 +103,7 @@ All_font_metrics::find_pango_font (PangoFontDescription const *description, scm_from_double (1.0)); } g_free (pango_fn); - return dynamic_cast (Font_metric::unsmob (val)); + return derived_unsmob (val); } #endif @@ -136,7 +136,7 @@ All_font_metrics::find_otf (const string &name) Font_metric::unsmob (val)->unprotect (); } - return dynamic_cast (Font_metric::unsmob (val)); + return derived_unsmob (val); } Font_metric * diff --git a/lily/break-align-engraver.cc b/lily/break-align-engraver.cc index fe07cac0c8..9883976f0c 100644 --- a/lily/break-align-engraver.cc +++ b/lily/break-align-engraver.cc @@ -118,7 +118,7 @@ Break_align_engraver::create_alignment (Grob_info inf) Context *origin = inf.origin_contexts (this)[0]; Translator_group *tg = origin->implementation (); - Engraver *random_source = dynamic_cast (Translator::unsmob (scm_car (tg->get_simple_trans_list ()))); + Engraver *random_source = Engraver::unsmob (scm_car (tg->get_simple_trans_list ())); if (!random_source) random_source = this; diff --git a/lily/break-substitution.cc b/lily/break-substitution.cc index 2028226447..f26e9510bc 100644 --- a/lily/break-substitution.cc +++ b/lily/break-substitution.cc @@ -51,7 +51,7 @@ substitute_grob (Grob *sc) else { System *line - = dynamic_cast (Grob::unsmob (break_criterion)); + = derived_unsmob (break_criterion); if (sc->get_system () != line) sc = sc->find_broken_piece (line); diff --git a/lily/figured-bass-continuation.cc b/lily/figured-bass-continuation.cc index b3c36dace5..cdec42d6f2 100644 --- a/lily/figured-bass-continuation.cc +++ b/lily/figured-bass-continuation.cc @@ -41,7 +41,7 @@ MAKE_SCHEME_CALLBACK (Figured_bass_continuation, center_on_figures, 1); SCM Figured_bass_continuation::center_on_figures (SCM grob) { - Spanner *me = dynamic_cast (Grob::unsmob (grob)); + Spanner *me = Spanner::unsmob (grob); extract_grob_set (me, "figures", figures); if (figures.empty ()) return scm_from_double (0.0); @@ -57,7 +57,7 @@ MAKE_SCHEME_CALLBACK (Figured_bass_continuation, print, 1); SCM Figured_bass_continuation::print (SCM grob) { - Spanner *me = dynamic_cast (Grob::unsmob (grob)); + Spanner *me = Spanner::unsmob (grob); Real thick = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness")) diff --git a/lily/figured-bass-engraver.cc b/lily/figured-bass-engraver.cc index 00f571ed3a..4222fbe7b0 100644 --- a/lily/figured-bass-engraver.cc +++ b/lily/figured-bass-engraver.cc @@ -407,7 +407,7 @@ void Figured_bass_engraver::create_grobs () { Grob *muscol - = dynamic_cast (Grob::unsmob (get_property ("currentMusicalColumn"))); + = Item::unsmob (get_property ("currentMusicalColumn")); if (!alignment_) { alignment_ = make_spanner ("BassFigureAlignment", SCM_EOL); diff --git a/lily/global-context-scheme.cc b/lily/global-context-scheme.cc index 3dc5afa3ad..e39b36699a 100644 --- a/lily/global-context-scheme.cc +++ b/lily/global-context-scheme.cc @@ -34,7 +34,7 @@ LY_DEFINE (ly_format_output, "ly:format-output", " process it and return the @code{Music_output} object" " in its final state.") { - Global_context *g = dynamic_cast (Context::unsmob (context)); + Global_context *g = Global_context::unsmob (context); LY_ASSERT_SMOB (Global_context, context, 1); @@ -52,7 +52,7 @@ LY_DEFINE (ly_make_global_translator, "ly:make-global-translator", "Create a translator group and connect it to the global context" " @var{global}. The translator group is returned.") { - Global_context *g = dynamic_cast (Context::unsmob (global)); + Global_context *g = Global_context::unsmob (global); LY_ASSERT_SMOB (Global_context, global, 1); Translator_group *tg = new Translator_group (); @@ -96,7 +96,7 @@ LY_DEFINE (ly_interpret_music_expression, "ly:interpret-music-expression", return SCM_BOOL_F; } - Global_context *g = dynamic_cast (Context::unsmob (ctx)); + Global_context *g = Global_context::unsmob (ctx); Cpu_timer timer; diff --git a/lily/key-signature-interface.cc b/lily/key-signature-interface.cc index ad8c3fd0f5..9720b680f5 100644 --- a/lily/key-signature-interface.cc +++ b/lily/key-signature-interface.cc @@ -42,7 +42,7 @@ MAKE_SCHEME_CALLBACK (Key_signature_interface, print, 1); SCM Key_signature_interface::print (SCM smob) { - Item *me = dynamic_cast (Grob::unsmob (smob)); + Item *me = Item::unsmob (smob); Real inter = Staff_symbol_referencer::staff_space (me) / 2.0; diff --git a/lily/ledger-line-spanner.cc b/lily/ledger-line-spanner.cc index 900187b333..6904698d7d 100644 --- a/lily/ledger-line-spanner.cc +++ b/lily/ledger-line-spanner.cc @@ -66,7 +66,7 @@ MAKE_SCHEME_CALLBACK (Ledger_line_spanner, set_spacing_rods, 1); SCM Ledger_line_spanner::set_spacing_rods (SCM smob) { - Spanner *me = dynamic_cast (Grob::unsmob (smob)); + Spanner *me = Spanner::unsmob (smob); // find size of note heads. Grob *staff = Staff_symbol_referencer::get_staff_symbol (me); @@ -164,7 +164,7 @@ MAKE_SCHEME_CALLBACK (Ledger_line_spanner, print, 1); SCM Ledger_line_spanner::print (SCM smob) { - Spanner *me = dynamic_cast (Grob::unsmob (smob)); + Spanner *me = Spanner::unsmob (smob); extract_grob_set (me, "note-heads", heads); diff --git a/lily/line-spanner.cc b/lily/line-spanner.cc index 9b0e2bf33b..e4f1e4c454 100644 --- a/lily/line-spanner.cc +++ b/lily/line-spanner.cc @@ -263,7 +263,7 @@ MAKE_SCHEME_CALLBACK (Line_spanner, print, 1); SCM Line_spanner::print (SCM smob) { - Spanner *me = dynamic_cast (Grob::unsmob (smob)); + Spanner *me = Spanner::unsmob (smob); // Triggers simple-Y calculations bool simple_y = to_boolean (me->get_property ("simple-Y")) && !to_boolean (me->get_property ("cross-staff")); diff --git a/lily/measure-grouping-spanner.cc b/lily/measure-grouping-spanner.cc index 050cc465f6..a5cb9fd321 100644 --- a/lily/measure-grouping-spanner.cc +++ b/lily/measure-grouping-spanner.cc @@ -29,7 +29,7 @@ MAKE_SCHEME_CALLBACK (Measure_grouping, print, 1); SCM Measure_grouping::print (SCM grob) { - Spanner *me = dynamic_cast (Grob::unsmob (grob)); + Spanner *me = Spanner::unsmob (grob); SCM which = me->get_property ("style"); Real height = robust_scm2double (me->get_property ("height"), 1); diff --git a/lily/open-type-font-scheme.cc b/lily/open-type-font-scheme.cc index ed45d86b19..76c5bd8db2 100644 --- a/lily/open-type-font-scheme.cc +++ b/lily/open-type-font-scheme.cc @@ -37,10 +37,10 @@ LY_DEFINE (ly_otf_font_glyph_info, "ly:otf-font-glyph-info", 2, 0, 0, " information about named glyph @var{glyph} (a string).") { Modified_font_metric *fm - = dynamic_cast (Font_metric::unsmob (font)); + = derived_unsmob (font); Open_type_font *otf = fm ? dynamic_cast (fm->original_font ()) - : dynamic_cast (Font_metric::unsmob (font)); + : derived_unsmob (font); SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font"); LY_ASSERT_TYPE (scm_is_string, glyph, 2); @@ -55,10 +55,10 @@ LY_DEFINE (ly_otf_font_table_data, "ly:otf-font-table-data", 2, 0, 0, " for non-existent @var{tag}.") { Modified_font_metric *fm - = dynamic_cast (Font_metric::unsmob (font)); + = derived_unsmob (font); Open_type_font *otf = fm ? dynamic_cast (fm->original_font ()) - : dynamic_cast (Font_metric::unsmob (font)); + : derived_unsmob (font); SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font"); LY_ASSERT_TYPE (scm_is_string, tag, 2); @@ -78,10 +78,10 @@ LY_DEFINE (ly_otf_font_p, "ly:otf-font?", 1, 0, 0, "Is @var{font} an OpenType font?") { Modified_font_metric *fm - = dynamic_cast (Font_metric::unsmob (font)); + = derived_unsmob (font); Open_type_font *otf = fm ? dynamic_cast (fm->original_font ()) - : dynamic_cast (Font_metric::unsmob (font)); + : derived_unsmob (font); return scm_from_bool (otf); } @@ -91,10 +91,10 @@ LY_DEFINE (ly_otf_glyph_count, "ly:otf-glyph-count", 1, 0, 0, "Return the number of glyphs in @var{font}.") { Modified_font_metric *fm - = dynamic_cast (Font_metric::unsmob (font)); + = derived_unsmob (font); Open_type_font *otf = fm ? dynamic_cast (fm->original_font ()) - : dynamic_cast (Font_metric::unsmob (font)); + : derived_unsmob (font); SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font"); @@ -106,10 +106,10 @@ LY_DEFINE (ly_otf_glyph_list, "ly:otf-glyph-list", 1, 0, 0, "Return a list of glyph names for @var{font}.") { Modified_font_metric *fm - = dynamic_cast (Font_metric::unsmob (font)); + = derived_unsmob (font); Open_type_font *otf = fm ? dynamic_cast (fm->original_font ()) - : dynamic_cast (Font_metric::unsmob (font)); + : derived_unsmob (font); SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font"); diff --git a/lily/ottava-bracket.cc b/lily/ottava-bracket.cc index f34afd1695..78aef5d09b 100644 --- a/lily/ottava-bracket.cc +++ b/lily/ottava-bracket.cc @@ -49,7 +49,7 @@ MAKE_SCHEME_CALLBACK (Ottava_bracket, print, 1); SCM Ottava_bracket::print (SCM smob) { - Spanner *me = dynamic_cast (Grob::unsmob (smob)); + Spanner *me = Spanner::unsmob (smob); Interval span_points; Grob *common = me->get_bound (LEFT)->common_refpoint (me->get_bound (RIGHT), X_AXIS); diff --git a/lily/page-breaking.cc b/lily/page-breaking.cc index 350a2c472d..5a3e646237 100644 --- a/lily/page-breaking.cc +++ b/lily/page-breaking.cc @@ -689,7 +689,7 @@ Page_breaking::create_system_list () SCM specs = book_->get_system_specs (); for (SCM s = specs; scm_is_pair (s); s = scm_cdr (s)) { - if (Paper_score *ps = dynamic_cast (Music_output::unsmob (scm_car (s)))) + if (Paper_score *ps = Paper_score::unsmob (scm_car (s))) { system_specs_.push_back (System_spec (ps)); } diff --git a/lily/pango-font-scheme.cc b/lily/pango-font-scheme.cc index 7f6c60909e..e6d89b47f3 100644 --- a/lily/pango-font-scheme.cc +++ b/lily/pango-font-scheme.cc @@ -35,7 +35,7 @@ LY_DEFINE (ly_pango_font_p, "ly:pango-font?", (SCM f), "Is @var{f} a pango font?") { - return scm_from_bool (dynamic_cast (Font_metric::unsmob (f))); + return scm_from_bool (derived_unsmob (f)); } LY_DEFINE (ly_pango_font_physical_fonts, "ly:pango-font-physical-fonts", @@ -44,7 +44,7 @@ LY_DEFINE (ly_pango_font_physical_fonts, "ly:pango-font-physical-fonts", "Return alist of @code{(ps-name file-name font-index)} lists" " for Pango font@tie{}@var{f}.") { - Pango_font *pf = dynamic_cast (Font_metric::unsmob (f)); + Pango_font *pf = derived_unsmob (f); SCM alist = SCM_EOL; if (pf) diff --git a/lily/paper-book.cc b/lily/paper-book.cc index 7dce3a9507..fbaccb3bab 100644 --- a/lily/paper-book.cc +++ b/lily/paper-book.cc @@ -326,7 +326,7 @@ Paper_book::score_title (SCM header) void set_page_permission (SCM sys, SCM symbol, SCM permission) { - if (Paper_score *ps = dynamic_cast (Music_output::unsmob (sys))) + if (Paper_score *ps = Paper_score::unsmob (sys)) { vector cols = ps->get_columns (); if (cols.size ()) @@ -370,7 +370,7 @@ set_system_penalty (SCM sys, SCM header) void set_labels (SCM sys, SCM labels) { - if (Paper_score *ps = dynamic_cast (Music_output::unsmob (sys))) + if (Paper_score *ps = Paper_score::unsmob (sys)) { vector cols = ps->get_columns (); if (cols.size ()) @@ -578,7 +578,7 @@ Paper_book::systems () for (SCM s = specs; scm_is_pair (s); s = scm_cdr (s)) { if (Paper_score * pscore - = dynamic_cast (Music_output::unsmob (scm_car (s)))) + = Paper_score::unsmob (scm_car (s))) { SCM system_list = scm_vector_to_list (pscore->get_paper_systems ()); diff --git a/lily/paper-column-engraver.cc b/lily/paper-column-engraver.cc index a2d046b9fb..b92abe8171 100644 --- a/lily/paper-column-engraver.cc +++ b/lily/paper-column-engraver.cc @@ -98,7 +98,7 @@ Paper_column_engraver::make_columns () void Paper_column_engraver::initialize () { - system_ = dynamic_cast (Grob::unsmob (get_property ("rootSystem"))); + system_ = derived_unsmob (get_property ("rootSystem")); make_columns (); system_->set_bound (LEFT, command_column_); diff --git a/lily/paper-column.cc b/lily/paper-column.cc index 155e37bdec..a6e44849b6 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -266,7 +266,7 @@ MAKE_DOCUMENTED_SCHEME_CALLBACK (Paper_column, print, 1, SCM Paper_column::print (SCM p) { - Paper_column *me = dynamic_cast (Grob::unsmob (p)); + Paper_column *me = derived_unsmob (p); string r = ::to_string (Paper_column::get_rank (me)); diff --git a/lily/paper-score-scheme.cc b/lily/paper-score-scheme.cc index 5ee1fc5dde..6d2b397d9a 100644 --- a/lily/paper-score-scheme.cc +++ b/lily/paper-score-scheme.cc @@ -27,6 +27,6 @@ LY_DEFINE (ly_paper_score_paper_systems, "ly:paper-score-paper-systems", { LY_ASSERT_SMOB (Paper_score, paper_score, 1); - Paper_score *pscore = dynamic_cast (Music_output::unsmob (paper_score)); + Paper_score *pscore = Paper_score::unsmob (paper_score); return pscore->get_paper_systems (); } diff --git a/lily/performer-group.cc b/lily/performer-group.cc index 980590ca1a..794fdaf48f 100644 --- a/lily/performer-group.cc +++ b/lily/performer-group.cc @@ -71,7 +71,7 @@ performer_each (SCM list, Performer_method method) { for (SCM p = list; scm_is_pair (p); p = scm_cdr (p)) { - Performer *e = dynamic_cast (Translator::unsmob (scm_car (p))); + Performer *e = Performer::unsmob (scm_car (p)); if (e) (e->*method) (); } diff --git a/lily/piano-pedal-bracket.cc b/lily/piano-pedal-bracket.cc index d01776882c..3eecc6fa83 100644 --- a/lily/piano-pedal-bracket.cc +++ b/lily/piano-pedal-bracket.cc @@ -33,7 +33,7 @@ MAKE_SCHEME_CALLBACK (Piano_pedal_bracket, print, 1); SCM Piano_pedal_bracket::print (SCM smob) { - Spanner *me = dynamic_cast (Grob::unsmob (smob)); + Spanner *me = Spanner::unsmob (smob); Spanner *orig = dynamic_cast (me->original ()); Drul_array broken (false, false); diff --git a/lily/score.cc b/lily/score.cc index 5ce7e3ba95..2388ba7cf2 100644 --- a/lily/score.cc +++ b/lily/score.cc @@ -139,7 +139,7 @@ Score::book_rendering (Output_def *layoutbook, /* TODO: fix or junk --no-layout. */ SCM context = ly_run_translator (music_, scaled); - if (dynamic_cast (Context::unsmob (context))) + if (Global_context::unsmob (context)) { SCM s = ly_format_output (context); diff --git a/lily/spacing-engraver.cc b/lily/spacing-engraver.cc index 42fb3d9bf2..a8e21253e6 100644 --- a/lily/spacing-engraver.cc +++ b/lily/spacing-engraver.cc @@ -194,7 +194,7 @@ void Spacing_engraver::stop_translation_timestep () { Paper_column *musical_column - = dynamic_cast (Grob::unsmob (get_property ("currentMusicalColumn"))); + = derived_unsmob (get_property ("currentMusicalColumn")); if (!spacing_) start_spanner (); diff --git a/lily/spacing-loose-columns.cc b/lily/spacing-loose-columns.cc index 4ff82e6b75..aad9dd0db7 100644 --- a/lily/spacing-loose-columns.cc +++ b/lily/spacing-loose-columns.cc @@ -60,8 +60,8 @@ set_loose_columns (System *which, Column_x_positions const *posns) if (!loose->get_system ()) break; - Paper_column *le = dynamic_cast (Grob::unsmob (scm_car (between))); - Paper_column *re = dynamic_cast (Grob::unsmob (scm_cdr (between))); + Paper_column *le = derived_unsmob (scm_car (between)); + Paper_column *re = derived_unsmob (scm_cdr (between)); if (! (le && re)) break; diff --git a/lily/spanner-scheme.cc b/lily/spanner-scheme.cc index b364f48177..7ace84024c 100644 --- a/lily/spanner-scheme.cc +++ b/lily/spanner-scheme.cc @@ -52,7 +52,7 @@ LY_DEFINE (ly_spanner_broken_into, "ly:spanner-broken-into", "Return broken-into list for @var{spanner}.") { LY_ASSERT_TYPE (Spanner::unsmob, spanner, 1); - Spanner *me = dynamic_cast (Grob::unsmob (spanner)); + Spanner *me = Spanner::unsmob (spanner); SCM s = SCM_EOL; for (vsize i = me->broken_intos_.size (); i--;) diff --git a/lily/stem.cc b/lily/stem.cc index 6b4b95b015..0c2625b9e4 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -952,7 +952,7 @@ Spanner * Stem::get_beam (Grob *me) { SCM b = me->get_object ("beam"); - return dynamic_cast (Grob::unsmob (b)); + return Spanner::unsmob (b); } Stem_info diff --git a/lily/system.cc b/lily/system.cc index 61779473c3..4f98412745 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -949,7 +949,7 @@ MAKE_SCHEME_CALLBACK (System, calc_pure_height, 3); SCM System::calc_pure_height (SCM smob, SCM start_scm, SCM end_scm) { - System *me = dynamic_cast (Grob::unsmob (smob)); + System *me = derived_unsmob (smob); int start = scm_to_int (start_scm); int end = scm_to_int (end_scm); @@ -993,7 +993,7 @@ enum static SCM get_maybe_spaceable_staves (SCM smob, int filter) { - System *me = dynamic_cast (Grob::unsmob (smob)); + System *me = derived_unsmob (smob); Grob *align = Grob::unsmob (me->get_object ("vertical_alignment")); SCM ret = SCM_EOL; diff --git a/lily/tie-column.cc b/lily/tie-column.cc index ad89411d5d..ca3d320e9e 100644 --- a/lily/tie-column.cc +++ b/lily/tie-column.cc @@ -62,10 +62,10 @@ MAKE_SCHEME_CALLBACK (Tie_column, before_line_breaking, 1); SCM Tie_column::before_line_breaking (SCM smob) { - Spanner *me = dynamic_cast (Grob::unsmob (smob)); + Spanner *me = Spanner::unsmob (smob); for (SCM s = me->get_property ("ties"); scm_is_pair (s); s = scm_cdr (s)) { - Spanner *tie = dynamic_cast (Grob::unsmob (scm_car (s))); + Spanner *tie = Spanner::unsmob (scm_car (s)); for (LEFT_and_RIGHT (dir)) { if (dir * tie->get_bound (dir)->get_column ()->get_rank () diff --git a/lily/translator-dispatch-list.cc b/lily/translator-dispatch-list.cc index ed968c571a..79647bc783 100644 --- a/lily/translator-dispatch-list.cc +++ b/lily/translator-dispatch-list.cc @@ -47,7 +47,7 @@ Engraver_dispatch_list::create (SCM trans_list, for (SCM s = trans_list; scm_is_pair (s); s = scm_cdr (s)) { Engraver *eng - = dynamic_cast (Translator::unsmob (scm_car (s))); + = Engraver::unsmob (scm_car (s)); if (!eng) continue; diff --git a/lily/translator-group.cc b/lily/translator-group.cc index 2e6039a9af..df3eb64565 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -90,7 +90,7 @@ Translator_group::finalize () Both filter_performers and filter_engravers used to use a direct dynamic_cast on the unsmobbed translator to be filtered, i.e., - if (dynamic_cast (Translator::unsmob (scm_car (*tail)))) + if (Performer::unsmob (scm_car (*tail))) but this caused mysterious optimisation issues in several GUB builds. See issue #818 for the background to this change. -- 2.39.2