/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>,
+ Copyright (C) 1997--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>,
Erik Sandberg <mandolaerik@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
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.
SCM *tail = ℓ
for (SCM p = ell; scm_is_pair (p); p = scm_cdr (p))
{
- if (unsmob_performer (scm_car (*tail)))
+ if (Performer::is_smob (scm_car (*tail)))
*tail = scm_cdr (*tail);
else
tail = SCM_CDRLOC (*tail);
SCM *tail = ℓ
for (SCM p = ell; scm_is_pair (p); p = scm_cdr (p))
{
- if (unsmob_engraver (scm_car (*tail)))
+ if (Engraver::is_smob (scm_car (*tail)))
*tail = scm_cdr (*tail);
else
tail = SCM_CDRLOC (*tail);
void
Translator_group::create_child_translator (SCM sev)
{
- Stream_event *ev = unsmob_stream_event (sev);
+ Stream_event *ev = Stream_event::unsmob (sev);
// get from AnnounceNewContext
SCM cs = ev->get_property ("context");
Context *new_context = Context::unsmob (cs);
for (SCM s = simple_trans_list_; scm_is_pair (s); s = scm_cdr (s))
{
Translator *tr = Translator::unsmob (scm_car (s));
- Translator_void_method_ptr ptrs[TRANSLATOR_METHOD_PRECOMPUTE_COUNT];
+ Translator::Callback ptrs[TRANSLATOR_METHOD_PRECOMPUTE_COUNT];
tr->fetch_precomputable_methods (ptrs);
assert (tr);
{
}
-#include "ly-smobs.icc"
-IMPLEMENT_SMOBS (Translator_group);
-IMPLEMENT_DEFAULT_EQUAL_P (Translator_group);
-IMPLEMENT_TYPE_P (Translator_group, "ly:translator-group?");
+const char Translator_group::type_p_name_[] = "ly:translator-group?";
int
-Translator_group::print_smob (SCM s, SCM port, scm_print_state *)
+Translator_group::print_smob (SCM port, scm_print_state *)
{
- Translator_group *me = (Translator_group *) SCM_CELL_WORD_1 (s);
scm_puts ("#<Translator_group ", port);
- scm_puts (me->class_name (), port);
- scm_display (me->simple_trans_list_, port);
+ scm_puts (class_name (), port);
+ scm_display (simple_trans_list_, port);
scm_puts (" >", port);
return 1;
}
SCM
-Translator_group::mark_smob (SCM smob)
+Translator_group::mark_smob ()
{
- Translator_group *me = (Translator_group *)SCM_CELL_WORD_1 (smob);
-
- me->derived_mark ();
- scm_gc_mark (me->protected_events_);
- return me->simple_trans_list_;
+ derived_mark ();
+ scm_gc_mark (protected_events_);
+ return simple_trans_list_;
}