]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4377: Run a script for using derived_unsmob where obvious
authorDavid Kastrup <dak@gnu.org>
Thu, 7 May 2015 19:22:20 +0000 (21:22 +0200)
committerDavid Kastrup <dak@gnu.org>
Tue, 12 May 2015 10:28:26 +0000 (12:28 +0200)
Script is:

matched="[^()]*"
for i in 1 2 3 4 5
do
    matched="\\(($matched)\\|[^()]\\)*"
done
filelist="$(git grep -l '\<dynamic_cast[^>]*> ([_a-zA-Z]*::unsmob\>')"
typelist="$(sed -n 's/^.*\<dynamic_cast\s*<\([_a-zA-Z]\+\)\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/\<dynamic_cast\s*<\('"$typ"'\)\s*\*> (\([_a-zA-Z]*\)::unsmob\s*(\('"$matched"'\))\s*)/\1::unsmob (\3)/g' $filelist
    else
sed -i 's/\<dynamic_cast\s*<\('"$typ"'\)\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<T *>(xxx::unsmob (yyy))

with

    derived_unsmob<T> (yyy)

where appropriate.  If T::unsmob already exists, it is used
instead (apart from inside of its own definition, of course).

29 files changed:
lily/all-font-metrics.cc
lily/break-align-engraver.cc
lily/break-substitution.cc
lily/figured-bass-continuation.cc
lily/figured-bass-engraver.cc
lily/global-context-scheme.cc
lily/key-signature-interface.cc
lily/ledger-line-spanner.cc
lily/line-spanner.cc
lily/measure-grouping-spanner.cc
lily/open-type-font-scheme.cc
lily/ottava-bracket.cc
lily/page-breaking.cc
lily/pango-font-scheme.cc
lily/paper-book.cc
lily/paper-column-engraver.cc
lily/paper-column.cc
lily/paper-score-scheme.cc
lily/performer-group.cc
lily/piano-pedal-bracket.cc
lily/score.cc
lily/spacing-engraver.cc
lily/spacing-loose-columns.cc
lily/spanner-scheme.cc
lily/stem.cc
lily/system.cc
lily/tie-column.cc
lily/translator-dispatch-list.cc
lily/translator-group.cc

index c39cee79d35c686ad9c1f3e70168d2feda3ad061..bc8ba15dae43fcd93f8e81fe9bdfe4c15b4ca04d 100644 (file)
@@ -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<Pango_font *> (Font_metric::unsmob (val));
+  return derived_unsmob<Pango_font> (val);
 }
 
 #endif
@@ -136,7 +136,7 @@ All_font_metrics::find_otf (const string &name)
       Font_metric::unsmob (val)->unprotect ();
     }
 
-  return dynamic_cast<Open_type_font *> (Font_metric::unsmob (val));
+  return derived_unsmob<Open_type_font> (val);
 }
 
 Font_metric *
index fe07cac0c8355eea8a6f9e13125f4d2612eeeebf..9883976f0c3399f01974ad20557fad750f6748a4 100644 (file)
@@ -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<Engraver *> (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;
 
index 2028226447841ca161048899d32d7aa6ea6035f1..f26e9510bc9dd565c7288ea83c182bee8a49a895 100644 (file)
@@ -51,7 +51,7 @@ substitute_grob (Grob *sc)
   else
     {
       System *line
-        = dynamic_cast<System *> (Grob::unsmob (break_criterion));
+        = derived_unsmob<System> (break_criterion);
       if (sc->get_system () != line)
         sc = sc->find_broken_piece (line);
 
index b3c36dace52317879c411b0138feae3b3850518b..cdec42d6f2884fc21e589f906a80fde50056a42c 100644 (file)
@@ -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<Spanner *> (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<Spanner *> (Grob::unsmob (grob));
+  Spanner *me = Spanner::unsmob (grob);
 
   Real thick
     = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"))
index 00f571ed3a35a5c62ec2ac77337656dd1b1478e2..4222fbe7b0a4258831678135e7cbd21917255265 100644 (file)
@@ -407,7 +407,7 @@ void
 Figured_bass_engraver::create_grobs ()
 {
   Grob *muscol
-    = dynamic_cast<Item *> (Grob::unsmob (get_property ("currentMusicalColumn")));
+    = Item::unsmob (get_property ("currentMusicalColumn"));
   if (!alignment_)
     {
       alignment_ = make_spanner ("BassFigureAlignment", SCM_EOL);
index 3dc5afa3ada95dcf4fca77e009f7349d6ad93baf..e39b36699a80a7699cf955f7f03877224564d87a 100644 (file)
@@ -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<Global_context *> (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<Global_context *> (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<Global_context *> (Context::unsmob (ctx));
+  Global_context *g = Global_context::unsmob (ctx);
 
   Cpu_timer timer;
 
index ad8c3fd0f55420cbfcd49167da0f4e9a181bc7f1..9720b680f5e4b756715e066d79c1ff7f6aa52e51 100644 (file)
@@ -42,7 +42,7 @@ MAKE_SCHEME_CALLBACK (Key_signature_interface, print, 1);
 SCM
 Key_signature_interface::print (SCM smob)
 {
-  Item *me = dynamic_cast<Item *> (Grob::unsmob (smob));
+  Item *me = Item::unsmob (smob);
 
   Real inter = Staff_symbol_referencer::staff_space (me) / 2.0;
 
index 900187b333d68309210fd595b17742db56808e71..6904698d7d86b9efe1c1b0f5f1c93a82b9ae6f73 100644 (file)
@@ -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<Spanner *> (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<Spanner *> (Grob::unsmob (smob));
+  Spanner *me = Spanner::unsmob (smob);
 
   extract_grob_set (me, "note-heads", heads);
 
index 9b0e2bf33b7c587b98d8789432a9170da18003aa..e4f1e4c4548914e0c67dbac3b1e35b4c7303bba7 100644 (file)
@@ -263,7 +263,7 @@ MAKE_SCHEME_CALLBACK (Line_spanner, print, 1);
 SCM
 Line_spanner::print (SCM smob)
 {
-  Spanner *me = dynamic_cast<Spanner *> (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"));
index 050cc465f6dc7b55e03a1db1b88cde74870ed577..a5cb9fd32159017dc0271a209fb4794b1f34f836 100644 (file)
@@ -29,7 +29,7 @@ MAKE_SCHEME_CALLBACK (Measure_grouping, print, 1);
 SCM
 Measure_grouping::print (SCM grob)
 {
-  Spanner *me = dynamic_cast<Spanner *> (Grob::unsmob (grob));
+  Spanner *me = Spanner::unsmob (grob);
 
   SCM which = me->get_property ("style");
   Real height = robust_scm2double (me->get_property ("height"), 1);
index ed45d86b192a9cc5c7d05533b550da2f052175cd..76c5bd8db2280a99ae9dab1d3df252b335e0bbdc 100644 (file)
@@ -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<Modified_font_metric *> (Font_metric::unsmob (font));
+    = derived_unsmob<Modified_font_metric> (font);
   Open_type_font *otf = fm
                         ? dynamic_cast<Open_type_font *> (fm->original_font ())
-                        : dynamic_cast<Open_type_font *> (Font_metric::unsmob (font));
+                        : derived_unsmob<Open_type_font> (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<Modified_font_metric *> (Font_metric::unsmob (font));
+    = derived_unsmob<Modified_font_metric> (font);
   Open_type_font *otf = fm
                         ? dynamic_cast<Open_type_font *> (fm->original_font ())
-                        : dynamic_cast<Open_type_font *> (Font_metric::unsmob (font));
+                        : derived_unsmob<Open_type_font> (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<Modified_font_metric *> (Font_metric::unsmob (font));
+    = derived_unsmob<Modified_font_metric> (font);
   Open_type_font *otf = fm
                         ? dynamic_cast<Open_type_font *> (fm->original_font ())
-                        : dynamic_cast<Open_type_font *> (Font_metric::unsmob (font));
+                        : derived_unsmob<Open_type_font> (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<Modified_font_metric *> (Font_metric::unsmob (font));
+    = derived_unsmob<Modified_font_metric> (font);
   Open_type_font *otf = fm
                         ? dynamic_cast<Open_type_font *> (fm->original_font ())
-                        : dynamic_cast<Open_type_font *> (Font_metric::unsmob (font));
+                        : derived_unsmob<Open_type_font> (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<Modified_font_metric *> (Font_metric::unsmob (font));
+    = derived_unsmob<Modified_font_metric> (font);
   Open_type_font *otf = fm
                         ? dynamic_cast<Open_type_font *> (fm->original_font ())
-                        : dynamic_cast<Open_type_font *> (Font_metric::unsmob (font));
+                        : derived_unsmob<Open_type_font> (font);
 
   SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "OpenType font");
 
index f34afd16951c07d0136e82182407da3ce78b0770..78aef5d09bbea5889e3db721ba1bf2f63bd0269a 100644 (file)
@@ -49,7 +49,7 @@ MAKE_SCHEME_CALLBACK (Ottava_bracket, print, 1);
 SCM
 Ottava_bracket::print (SCM smob)
 {
-  Spanner *me = dynamic_cast<Spanner *> (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);
index 350a2c472dab46801ec1d9871792575339cee436..5a3e64623788854b5adf8ff674302e7bb3ccc613 100644 (file)
@@ -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<Paper_score *> (Music_output::unsmob (scm_car (s))))
+      if (Paper_score *ps = Paper_score::unsmob (scm_car (s)))
         {
           system_specs_.push_back (System_spec (ps));
         }
index 7f6c60909e205d91f06798d75e099f2ad1664e13..e6d89b47f30f6544dd98f03cda564a75679e5174 100644 (file)
@@ -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<Pango_font *> (Font_metric::unsmob (f)));
+  return scm_from_bool (derived_unsmob<Pango_font> (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<Pango_font *> (Font_metric::unsmob (f));
+  Pango_font *pf = derived_unsmob<Pango_font> (f);
 
   SCM alist = SCM_EOL;
   if (pf)
index 7dce3a9507e7d48badcd24bca281f1f5578359ec..fbaccb3babeb7be5e5e028ccbc343359323cdcd8 100644 (file)
@@ -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<Paper_score *> (Music_output::unsmob (sys)))
+  if (Paper_score *ps = Paper_score::unsmob (sys))
     {
       vector<Grob *> 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<Paper_score *> (Music_output::unsmob (sys)))
+  if (Paper_score *ps = Paper_score::unsmob (sys))
     {
       vector<Grob *> 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<Paper_score *> (Music_output::unsmob (scm_car (s))))
+              = Paper_score::unsmob (scm_car (s)))
             {
               SCM system_list
                 = scm_vector_to_list (pscore->get_paper_systems ());
index a2d046b9fb16bbf3463d937a31de94639e4a182e..b92abe8171da0747fce745c7cc9b7ff1af81e428 100644 (file)
@@ -98,7 +98,7 @@ Paper_column_engraver::make_columns ()
 void
 Paper_column_engraver::initialize ()
 {
-  system_ = dynamic_cast<System *> (Grob::unsmob (get_property ("rootSystem")));
+  system_ = derived_unsmob<System> (get_property ("rootSystem"));
   make_columns ();
 
   system_->set_bound (LEFT, command_column_);
index 155e37bdec40d1afa45c35d94d2497c7ac9cbecc..a6e44849b60eee620e02e5a2263fe025afba1387 100644 (file)
@@ -266,7 +266,7 @@ MAKE_DOCUMENTED_SCHEME_CALLBACK (Paper_column, print, 1,
 SCM
 Paper_column::print (SCM p)
 {
-  Paper_column *me = dynamic_cast<Paper_column *> (Grob::unsmob (p));
+  Paper_column *me = derived_unsmob<Paper_column> (p);
 
   string r = ::to_string (Paper_column::get_rank (me));
 
index 5ee1fc5dde20585f38e5705861852ac6bb4e3659..6d2b397d9a27f72883185d0458d9d62f8f923b8b 100644 (file)
@@ -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<Paper_score *> (Music_output::unsmob (paper_score));
+  Paper_score *pscore = Paper_score::unsmob (paper_score);
   return pscore->get_paper_systems ();
 }
index 980590ca1a1b29697fcd06542c1865677621f7dd..794fdaf48f528eaeeec839f121d035a2a2debf0c 100644 (file)
@@ -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<Performer *> (Translator::unsmob (scm_car (p)));
+      Performer *e = Performer::unsmob (scm_car (p));
       if (e)
         (e->*method) ();
     }
index d01776882c83b7aa4ccdfe2e438eac458bb5867f..3eecc6fa831b6a7d20801af48ad3b762b01164cc 100644 (file)
@@ -33,7 +33,7 @@ MAKE_SCHEME_CALLBACK (Piano_pedal_bracket, print, 1);
 SCM
 Piano_pedal_bracket::print (SCM smob)
 {
-  Spanner *me = dynamic_cast<Spanner *> (Grob::unsmob (smob));
+  Spanner *me = Spanner::unsmob (smob);
   Spanner *orig = dynamic_cast<Spanner *> (me->original ());
 
   Drul_array<bool> broken (false, false);
index 5ce7e3ba95efedf2fcd143453468601db3cd1a52..2388ba7cf2df308cb44dfb5b13c65d6f3400428a 100644 (file)
@@ -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<Global_context *> (Context::unsmob (context)))
+      if (Global_context::unsmob (context))
         {
           SCM s = ly_format_output (context);
 
index 42fb3d9bf26b7c7ab91199f65c647d2d1c9d47b8..a8e21253e6ec6667af647a213069ce30e1a45ff3 100644 (file)
@@ -194,7 +194,7 @@ void
 Spacing_engraver::stop_translation_timestep ()
 {
   Paper_column *musical_column
-    = dynamic_cast<Paper_column *> (Grob::unsmob (get_property ("currentMusicalColumn")));
+    = derived_unsmob<Paper_column> (get_property ("currentMusicalColumn"));
 
   if (!spacing_)
     start_spanner ();
index 4ff82e6b75e56bd8f882e7b139507f9a728e0648..aad9dd0db7d089b36161838ebf2bb65bbe5dad0b 100644 (file)
@@ -60,8 +60,8 @@ set_loose_columns (System *which, Column_x_positions const *posns)
           if (!loose->get_system ())
             break;
 
-          Paper_column *le = dynamic_cast<Paper_column *> (Grob::unsmob (scm_car (between)));
-          Paper_column *re = dynamic_cast<Paper_column *> (Grob::unsmob (scm_cdr (between)));
+          Paper_column *le = derived_unsmob<Paper_column> (scm_car (between));
+          Paper_column *re = derived_unsmob<Paper_column> (scm_cdr (between));
 
           if (! (le && re))
             break;
index b364f48177cbd9b9af867e802be4b333eecf478a..7ace84024cbf2f3543ebedf628162874078a34a4 100644 (file)
@@ -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<Spanner *> (Grob::unsmob (spanner));
+  Spanner *me = Spanner::unsmob (spanner);
 
   SCM s = SCM_EOL;
   for (vsize i = me->broken_intos_.size (); i--;)
index 6b4b95b015ef140c1a98427ba7a6cfcfa0430421..0c2625b9e4c454b9bd108001801b6d3e3b63098d 100644 (file)
@@ -952,7 +952,7 @@ Spanner *
 Stem::get_beam (Grob *me)
 {
   SCM b = me->get_object ("beam");
-  return dynamic_cast<Spanner *> (Grob::unsmob (b));
+  return Spanner::unsmob (b);
 }
 
 Stem_info
index 61779473c3573612599f600a3b6559e7db4c2fbf..4f98412745ac87b10803b501266c6fc112075075 100644 (file)
@@ -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<System *> (Grob::unsmob (smob));
+  System *me = derived_unsmob<System> (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<System *> (Grob::unsmob (smob));
+  System *me = derived_unsmob<System> (smob);
   Grob *align = Grob::unsmob (me->get_object ("vertical_alignment"));
   SCM ret = SCM_EOL;
 
index ad89411d5d89c1ea23cd3519a8f21befb0c7d277..ca3d320e9eb108260d8d78590de1c8930b572d59 100644 (file)
@@ -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<Spanner *> (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<Spanner *> (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 ()
index ed968c571a5d504484cd99b1951af5b3b14b7c38..79647bc7837f02aa63303d4986afdb091e3d71db 100644 (file)
@@ -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<Engraver *> (Translator::unsmob (scm_car (s)));
+        = Engraver::unsmob (scm_car (s));
 
       if (!eng)
         continue;
index 2e6039a9af93a2c5c10b93535d0009a882d1f795..df3eb6456549e79ad14f57946610c49edc6081b4 100644 (file)
@@ -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<Performer *> (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.