[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Fix #818. (issue2128043)
From: |
n . puttock |
Subject: |
Fix #818. (issue2128043) |
Date: |
Sat, 04 Sep 2010 16:40:03 +0000 |
Reviewers: ,
Message:
Hi everybody,
This patch appears to fix the bus error/segfault reported in issue 818,
but it's unclear to me why it works.
Please review.
Thanks,
Neil
Description:
Fix #818.
Use unsmob_engraver ()/unsmob_performer () instead of
explicit casting in translator-group.cc when filtering
translators added via \with { }
* lily/include/performer.hh, lily/performer.hh
add unsmob_performer ()
* lily/translator-group.cc (filter_engravers/filter_performers):
use unsmob_* () instead of dynamic_cast when checking
translator is of correct class to remove
Please review this at http://codereview.appspot.com/2128043/
Affected files:
M lily/include/performer.hh
M lily/performer.cc
M lily/translator-group.cc
Index: lily/include/performer.hh
diff --git a/lily/include/performer.hh b/lily/include/performer.hh
index
11a5c32c8a59bdf4976d231afcbac05b49cc288e..0b0497e322b2fdacf9ab32fe09fde3bc7842f98a
100644
--- a/lily/include/performer.hh
+++ b/lily/include/performer.hh
@@ -40,5 +40,7 @@ protected:
virtual void create_audio_elements ();
};
+Performer *unsmob_performer (SCM perf);
+
#endif /* PERFORMER_HH */
Index: lily/performer.cc
diff --git a/lily/performer.cc b/lily/performer.cc
index
c177f9e975e2760df30700a2470095ccc00c8313..60a0519d42b31336abaa8b1bff32022a46305581
100644
--- a/lily/performer.cc
+++ b/lily/performer.cc
@@ -19,6 +19,7 @@
*/
#include "context.hh"
+#include "performer.hh"
#include "performer-group.hh"
#include "warn.hh"
@@ -48,3 +49,9 @@ Performer::announce_element (Audio_element_info i)
get_daddy_performer ()->announce_element (i);
}
+
+Performer *
+unsmob_performer (SCM perf)
+{
+ return dynamic_cast<Performer *> (unsmob_translator (perf));
+}
Index: lily/translator-group.cc
diff --git a/lily/translator-group.cc b/lily/translator-group.cc
index
84a97bf52e206bdf980ab6bae228fabac470cbab..6093e4780f8c951a33bb3c148971f2cc546948c4
100644
--- a/lily/translator-group.cc
+++ b/lily/translator-group.cc
@@ -23,11 +23,13 @@
#include "context-def.hh"
#include "context.hh"
#include "dispatcher.hh"
+#include "engraver.hh"
#include "engraver-group.hh"
#include "international.hh"
#include "main.hh"
#include "music.hh"
#include "output-def.hh"
+#include "performer.hh"
#include "performer-group.hh"
#include "scheme-engraver.hh"
#include "scm-hash.hh"
@@ -90,7 +92,7 @@ filter_performers (SCM ell)
SCM *tail = ℓ
for (SCM p = ell; scm_is_pair (p); p = scm_cdr (p))
{
- if (dynamic_cast<Performer *> (unsmob_translator (scm_car (*tail))))
+ if (unsmob_performer (scm_car (*tail)))
*tail = scm_cdr (*tail);
else
tail = SCM_CDRLOC (*tail);
@@ -104,7 +106,7 @@ filter_engravers (SCM ell)
SCM *tail = ℓ
for (SCM p = ell; scm_is_pair (p); p = scm_cdr (p))
{
- if (dynamic_cast<Engraver *> (unsmob_translator (scm_car (*tail))))
+ if (unsmob_engraver (scm_car (*tail)))
*tail = scm_cdr (*tail);
else
tail = SCM_CDRLOC (*tail);
- Fix #818. (issue2128043),
n . puttock <=