]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.1.0
authorfred <fred>
Tue, 26 Mar 2002 21:28:22 +0000 (21:28 +0000)
committerfred <fred>
Tue, 26 Mar 2002 21:28:22 +0000 (21:28 +0000)
18 files changed:
lily/line-of-score.cc
lily/midi-item.cc
lily/multi-measure-rest-engraver.cc
lily/music-list.cc
lily/music-output-def.cc
lily/musical-request.cc
lily/my-lily-parser.cc
lily/note-performer.cc
lily/p-score.cc
lily/plet-swallow-engraver.cc
lily/score-element.cc
lily/score-priority-engraver.cc
lily/script-engraver.cc
lily/spanner.cc
lily/stem-engraver.cc
lily/ties-engraver.cc
lily/time-signature-performer.cc
lily/translator-group.cc

index 79332395180425084d9972b36b38ea833e73e1be..9e2e7edb0324927b4b50b3673610a581757cae7f 100644 (file)
@@ -50,7 +50,7 @@ Line_of_score::set_breaking (Array<Column_x_positions> const &breaking, int j) c
        
   if (breaking.size() >1) 
     {
-      line_l = (Line_of_score*)clone()->access_Spanner ();
+      line_l = dynamic_cast <Line_of_score*> (clone());
     }
   else 
     line_l = (Line_of_score*) this;
index 53f36d6a1ef9aa0aff0d1889ba03ee5e6af36f9a..362508ee647c51c1b034c3583d7cbe47692cdd26 100644 (file)
@@ -354,7 +354,7 @@ Midi_key::Midi_key (Audio_item* audio_item_l)
 String
 Midi_key::str () const
 {
-  Key_change_req* k = audio_item_l_->req_l_->access_Command_req ()->access_Key_change_req ();
+  Key_change_req* k = dynamic_cast <Key_change_req *> (audio_item_l_->req_l_);
   int sharps_i = k->sharps_i ();
   int flats_i = k->flats_i ();
 
@@ -383,7 +383,7 @@ Midi_time_signature::Midi_time_signature (Audio_item* audio_item_l)
 String
 Midi_time_signature::str () const
 {
-  Time_signature_change_req* m = audio_item_l_->req_l_->access_Command_req ()->access_Time_signature_change_req ();
+  Time_signature_change_req* m = dynamic_cast <Time_signature_change_req *> (audio_item_l_->req_l_);
   int num_i = m->beats_i_;
   int den_i = m->one_beat_i_;
 
@@ -404,7 +404,7 @@ Midi_note::Midi_note (Audio_item* audio_item_l)
 Moment
 Midi_note::duration () const
 {
-  Moment m = audio_item_l_->req_l_->access_Musical_req ()->access_Rhythmic_req ()->duration ();
+  Moment m = dynamic_cast <Rhythmic_req *> (audio_item_l_->req_l_)->duration ();
   if (m < Moment (1, 1000))
     {
       warning (_ ("silly duration"));
@@ -416,8 +416,7 @@ Midi_note::duration () const
 int
 Midi_note::pitch_i () const
 {
-  int p = audio_item_l_->req_l_->access_Musical_req ()->access_Melodic_req 
-    ()->pitch_.semitone_pitch () 
+  int p = dynamic_cast <Melodic_req*> (audio_item_l_->req_l_)->pitch_.semitone_pitch () 
     + ((Audio_note*)audio_item_l_)->transposing_i_;
   if (p == INT_MAX)
     {
@@ -452,8 +451,7 @@ Midi_note_off::Midi_note_off (Midi_note* midi_note_l)
 int
 Midi_note_off::pitch_i () const
 {
-  return audio_item_l_->req_l_->access_Musical_req ()->access_Melodic_req 
-    ()->pitch_.semitone_pitch ()
+  return dynamic_cast <Melodic_req *> (audio_item_l_->req_l_)->pitch_.semitone_pitch ()
     + ((Audio_note*)audio_item_l_)->transposing_i_;
 }
 
index e8b23b67b39a2ba516ef6f0ecbbc863334af7c25..03578a58153053d8da994bf152d9acc0acea0bc3 100644 (file)
@@ -26,7 +26,7 @@ Multi_measure_rest_engraver::Multi_measure_rest_engraver ()
 bool
 Multi_measure_rest_engraver::do_try_request (Request* req_l)
 {
 if (!req_l->access_Musical_req () || !req_l->access_Musical_req ()->access_Multi_measure_rest_req ())
if (!dynamic_cast<Multi_measure_rest_req *> (req_l))
     return false;
 
   if (multi_measure_req_l_)
@@ -34,7 +34,7 @@ Multi_measure_rest_engraver::do_try_request (Request* req_l)
        || req_start_mom_ != now_moment ())
       return false;
   
-  multi_measure_req_l_ = req_l->access_Musical_req ()->access_Multi_measure_rest_req ();
+  multi_measure_req_l_ = dynamic_cast<Multi_measure_rest_req *> (req_l);
   req_start_mom_ = now_moment ();
   
   rest_req_stop_mom_ = req_start_mom_ + multi_measure_req_l_->duration_.length ();
index 8f2944669908e1bcebf65353c14c6c9e4c9b1b71..7c47ded02722de0c675d8a534f2b8b57704609ac 100644 (file)
@@ -118,10 +118,10 @@ Request_chord::to_relative_octave (Musical_pitch last)
 {
   for (iter (music_p_list_p_->top(),i); i.ok (); i++)
     {
-      Musical_req *m =((Request*)i.ptr ())->access_Musical_req ();
-      if (m && m->access_Melodic_req ())
-       {         
-         Musical_pitch &pit = m->access_Melodic_req ()->pitch_;
+      Musical_req *m = dynamic_cast<Musical_req*> (i.ptr ());
+      if (m && dynamic_cast <Melodic_req *> (m))
+       {
+         Musical_pitch &pit = dynamic_cast <Melodic_req *> (m)->pitch_;
          pit.to_relative_octave (last);
          return pit;
        }
index 86a20a731e862e20bc8a2bdd42501d555b8d56f0..8e28cdf4bb49caf176fa3d02b86f80428f14c836 100644 (file)
@@ -60,7 +60,7 @@ Translator*
 Music_output_def::find_translator_l (String name) const
 {
   if (translator_p_dict_p_->elem_b (name))
-    return (*translator_p_dict_p_)[name]->access_Translator ();
+    return  (*translator_p_dict_p_)[name]->access_Translator ();
 
   if (global_translator_dict_p->elem_b (name))
     return (*global_translator_dict_p)[name];
@@ -76,7 +76,7 @@ Music_output_def::get_global_translator_p ()
   if (!t)
     error (_("Can't find Score context"));
   t = t->clone ();
-  Global_translator *g = t->access_Translator_group ()->global_l ();
+  Global_translator *g = dynamic_cast <Translator_group *> (t)->global_l ();
   t->add_processing ();
   
   return g;
@@ -98,6 +98,6 @@ Music_output_def::get_default_output () const
     return "";  
   Identifier * id = (*scope_p_) ["output"];
 
-  String *p = id->access_String ();
+  String *p = dynamic_cast <String *> (id);
   return p ? *p : String ("");
 }
index 3ee6004add9f0e2d330c6cf08213de3d38037da7..6c72cb538ada9bff71a691b52f1d3454d72d7105 100644 (file)
@@ -104,7 +104,7 @@ IMPLEMENT_IS_TYPE_B1 (Melodic_req,Musical_req);
 bool
 Melodic_req::do_equal_b (Request*r) const
 {
-  Melodic_req* m= r->access_Musical_req ()->access_Melodic_req ();
+  Melodic_req* m= dynamic_cast <Melodic_req *> (r);
   return !compare (*m, *this);
 }
 
@@ -129,7 +129,7 @@ Rhythmic_req::compare (Rhythmic_req const &r1, Rhythmic_req const &r2)
 bool
 Rhythmic_req::do_equal_b (Request*r) const
 {
-  Rhythmic_req* rh = r->access_Musical_req ()->access_Rhythmic_req ();
+  Rhythmic_req* rh = dynamic_cast <Rhythmic_req *> (r);
 
   return !compare (*this, *rh);
 }
@@ -269,7 +269,7 @@ Plet_req::do_print () const
 bool
 Span_req:: do_equal_b (Request*r) const
 {
-  Span_req * s = r->access_Span_req ();
+  Span_req * s = dynamic_cast <Span_req *> (r);
   return spantype == s->spantype;
 }
 
@@ -292,7 +292,7 @@ Script_req::Script_req (Script_req const&s)
 bool
 Script_req::do_equal_b (Request*r) const
 {
-  Script_req * s = r->access_Script_req ();
+  Script_req * s = dynamic_cast <Script_req *> (r);
 
   return  scriptdef_p_->equal_b (*s->scriptdef_p_);
 }
@@ -400,7 +400,7 @@ Absolute_dynamic_req::do_print () const
 bool
 Absolute_dynamic_req::do_equal_b (Request *r) const
 {
-  Absolute_dynamic_req *a = r->access_Musical_req ()->access_Dynamic_req ()->access_Absolute_dynamic_req ();
+  Absolute_dynamic_req *a = dynamic_cast <Absolute_dynamic_req *> (r);
   return loudness_ == a->loudness_;
 }
 
@@ -449,7 +449,7 @@ Absolute_dynamic_req::Absolute_dynamic_req ()
 bool
 Span_dynamic_req::do_equal_b (Request *req) const
 {
-  Span_dynamic_req * s = req->access_Musical_req ()->access_Span_dynamic_req ();
+  Span_dynamic_req * s = dynamic_cast <Span_dynamic_req *> (req);
 
   return Span_req::do_equal_b (req) && s->dynamic_dir_ == dynamic_dir_;
 }
index 9f7e8c7fb3ac77a384229cf8062acfac19c35f00..f3cdf87abaaa5ab9183586980a0e509094a2fc3b 100644 (file)
@@ -240,22 +240,22 @@ My_lily_parser::get_parens_request (int t)
   switch (t)
     {
     case BEAMPLET:
-      reqs.top ()->access_Span_req ()->spantype = Span_req::START;
+      dynamic_cast<Span_req*> (reqs.top ())->spantype = Span_req::START;
       /* fall through */
     case '<':
     case '>':
     case '(':
     case '[':
     case PLET:
-      reqs[0]->access_Span_req ()->spantype = Span_req::START;
+      dynamic_cast<Span_req*> (reqs.top ())->spantype = Span_req::START;
       break;
     case MAEBTELP:
-      reqs.top ()->access_Span_req ()->spantype = Span_req::STOP;
+      dynamic_cast<Span_req*> (reqs.top ())->spantype = Span_req::STOP;
       /* fall through */
     case '!':
     case ')':
     case ']':
-      reqs[0]->access_Span_req ()->spantype = Span_req::STOP;
+      dynamic_cast<Span_req*> (reqs[0])->spantype = Span_req::STOP;
       break;
 
     default:
@@ -263,9 +263,9 @@ My_lily_parser::get_parens_request (int t)
     }
 
   for (int i = 0; i < reqs.size (); i++)
-    if (reqs[i]->access_Musical_req ()->access_Span_dynamic_req ())
+    if (dynamic_cast<Span_dynamic_req*> (reqs[i]))
       {
-       Span_dynamic_req* s_l= reqs[i]->access_Musical_req ()->access_Span_dynamic_req ();
+       Span_dynamic_req* s_l= dynamic_cast<Span_dynamic_req*> (reqs[i]);
        s_l->dynamic_dir_ = (t == '<') ? UP:DOWN;
       }
 
index 12c8601da3a3e23c85363e67d3a3fb17f0ad0780..5f8923c284e48a70f38547b1aa1d1f0942c6b0c3 100644 (file)
@@ -32,7 +32,7 @@ void
 Note_performer::do_process_requests () 
 {
   // this is _really_ braindead, but it generates some output
-  if (!note_req_l_ || !note_req_l_->access_Melodic_req ()  || !note_req_l_->access_Rhythmic_req ())
+  if (!note_req_l_ || !dynamic_cast <Melodic_req *> (note_req_l_)  || !dynamic_cast <Rhythmic_req *> (note_req_l_))
     return;
 
   int transposing_i = 0;
@@ -53,10 +53,10 @@ Note_performer::do_try_request (Request* req_l)
   if (note_req_l_)
     return false;
   
-  if (!req_l->access_Musical_req () || !req_l->access_Musical_req ()->access_Note_req ())
-    return false;
-
-  note_req_l_ = req_l->access_Musical_req ()->access_Melodic_req ();
-
-  return true;
+  if (Note_req *nr = dynamic_cast <Note_req *> (req_l))
+    {
+      note_req_l_ = nr;
+      return true;
+    }
+  return false;
 }
index 2dbc75925bfbb21147fd1f53691ce34208159276..be107cd929467a8b64e2c3cb35222caa53fde825 100644 (file)
 #include "word-wrap.hh"
 #include "gourlay-breaking.hh"
 #include "paper-stream.hh"
-#include "ps-stream.hh"
-#include "tex-stream.hh"
 #include "paper-outputter.hh"
-#include "ps-outputter.hh"
-#include "tex-outputter.hh"
 #include "file-results.hh"
 #include "misc.hh"
 
@@ -151,7 +147,7 @@ Paper_score::set_breaking (Array<Column_x_positions> const &breaking)
     }
   for (iter (elem_p_list_.top (),i); i.ok  () ;)
     {
-      Item *i_l =i->access_Item ();
+      Item *i_l =dynamic_cast <Item *> (i);
       if (i_l && !i_l->line_l ())
        {
          i_l->unlink ();
@@ -210,8 +206,8 @@ Paper_score::process ()
 
   Array<Column_x_positions> breaking = calc_breaking ();
 
-  Paper_stream* paper_stream_p = global_lookup_l->paper_stream_p ();
-  outputter_l_ = global_lookup_l->paper_outputter_p (paper_stream_p, paper_l_, header_l_, origin_str_);
+  Paper_stream* paper_stream_p = paper_l_->paper_stream_p ();
+  outputter_l_ = paper_l_->paper_outputter_p (paper_stream_p, header_l_, origin_str_);
 
   Link_array<Line_of_score> lines;
   for (int i=0; i < breaking.size (); i++)
@@ -324,10 +320,10 @@ Paper_score::broken_col_range (Item const*l_item_l, Item const*r_item_l) const
   Item const*r=r_item_l;
 
   while (! l->is_type_b(Paper_column::static_name ()))
-    l = l->axis_group_l_a_[X_AXIS]->access_Score_element ()->access_Item ();
+    l = dynamic_cast<Item*> (l->axis_group_l_a_[X_AXIS]);
 
   while (! r->is_type_b(Paper_column::static_name ()))
-    r = r->axis_group_l_a_[X_AXIS]->access_Score_element ()->access_Item ();
+    r = dynamic_cast<Item*>(r->axis_group_l_a_[X_AXIS]);
 
   PCursor<Paper_column*> start (l ? find_col ((Paper_column*)l)+1 : col_p_list_.top ());
   PCursor<Paper_column*> stop (r ? find_col ((Paper_column*)r) : col_p_list_.bottom ());
index 0e98605b6c1dcd8802dc14b71f7356f2d95e063c..47da034354f9f714569e89005797e8842e0f2cdf 100644 (file)
@@ -15,7 +15,5 @@ ADD_THIS_TRANSLATOR(Plet_swallow_engraver);
 bool
 Plet_swallow_engraver::do_try_request (Request* req_l)
 {
-  if (req_l && req_l->access_Musical_req () && req_l->access_Musical_req ()->access_Plet_req ())
-    return true;
-  return false;
+  return  dynamic_cast <Plet_req *> (req_l);
 }
index b92945e2850dd65f9299103400e2f4c2c026d18c..cbaadfc4f4b880c7c3e43090003c3f42c7b6479d 100644 (file)
@@ -9,7 +9,6 @@
 
 #include <string.h>
 
-#include "tex-outputter.hh"
 #include "p-score.hh"
 #include "paper-def.hh"
 #include "lookup.hh"
@@ -22,6 +21,7 @@
 #include "p-col.hh"
 #include "molecule.hh"
 #include "misc.hh"
+#include "paper-outputter.hh"
 
 #define PARANOID
 
@@ -291,17 +291,17 @@ Score_element::handle_broken_dependencies()
       Score_element * elt = dependency (i);
       if (elt->line_l() != line)
        {
-         if (elt->access_Spanner ()) 
+         if (dynamic_cast <Spanner *> (elt)) 
            {
-             Spanner * sp = elt->access_Spanner ();
+             Spanner * sp = dynamic_cast <Spanner *> (elt);
              Spanner * broken = sp->find_broken_piece (line);
              substitute_dependency (sp, broken);
 
              add_dependency (broken);
            }
-         else if (elt->access_Item ())
+         else if (dynamic_cast <Item *> (elt))
            {
-             Item * my_item = elt->access_Item ()->find_prebroken_piece (line);
+             Item * my_item = dynamic_cast <Item *> (elt)->find_prebroken_piece (line);
                
              substitute_dependency (elt, my_item);
              if (my_item)
@@ -338,11 +338,11 @@ Score_element::handle_prebroken_dependencies()
   for (int i=0; i < dependency_size(); i++) 
     {
       Score_element * elt = dependency (i);
-      Item *it_l = elt->access_Item ();
+      Item *it_l = dynamic_cast <Item *> (elt);
       if (it_l && it_l->breakable_b_)
-       if (access_Item ()) 
+       if (Item *me = dynamic_cast<Item*> (this) )
          {
-           Score_element *new_l = it_l->find_prebroken_piece (access_Item ()->break_status_dir_);
+           Score_element *new_l = it_l->find_prebroken_piece (me->break_status_dir_);
            if (new_l != elt) 
              {
                new_arr.push (new_l);
index 310e44e101e9cde3959fd2aa35692d2473b089c4..3de5ea9f00128d9dce9f91b62bc6d810ee48229a 100644 (file)
@@ -35,7 +35,7 @@ Score_priority_engraver::do_pre_move_processing()
 void
 Score_priority_engraver::acknowledge_element (Score_element_info inf)
 {
-  Item * item_l = inf.elem_l_->access_Item ();
+  Item * item_l = dynamic_cast <Item *> (inf.elem_l_);
   if (item_l && item_l->breakable_b_ && !item_l->empty_b ())
     {
       /*
@@ -68,7 +68,7 @@ Score_priority_engraver::acknowledge_element (Score_element_info inf)
          */
          if (unbound_elem->axis_group_l_a_[X_AXIS] == hg)
            return;
-         unbound_elem = unbound_elem->axis_group_l_a_[X_AXIS]->access_Score_element ();
+         unbound_elem = dynamic_cast<Score_element*> (unbound_elem->axis_group_l_a_[X_AXIS]);
        }
 
       hg->add_element (unbound_elem);
index 671ca17e38f425cfb13c26ecb41aea0f3bca7efa..f27577e44b17e5228dfb110f148fb5a48021240c 100644 (file)
@@ -21,7 +21,7 @@ Script_engraver::Script_engraver()
 bool
 Script_engraver::do_try_request (Request *r_l)
 {
-  if (!r_l->access_Musical_req () || ! r_l->access_Musical_req ()->access_Musical_script_req ())
+  if (!dynamic_cast <Musical_script_req *> (r_l))
     return false ;
   
   for (int i=0; i < script_req_l_arr_.size(); i++) 
@@ -29,7 +29,7 @@ Script_engraver::do_try_request (Request *r_l)
       if (r_l->equal_b (script_req_l_arr_[i]))
        return true;
     }
-  script_req_l_arr_.push (r_l->access_Script_req ());
+  script_req_l_arr_.push (dynamic_cast <Script_req *> (r_l));
   
   return true;
 }
index 0a1a74e5bd09c62a67acc44958a1c111fd8da743..83ad5f2091d9548584496f5488e239225fe553ce 100644 (file)
@@ -10,8 +10,8 @@
 #include "spanner.hh"
 #include "p-col.hh"
 #include "p-score.hh"
-#include "tex-outputter.hh"
 #include "molecule.hh"
+#include "paper-outputter.hh"
 
 IMPLEMENT_IS_TYPE_B1(Spanner,Score_element);
 
@@ -53,7 +53,7 @@ Spanner::break_into_pieces ()
 
   for (int i=1; i < break_cols.size(); i++) 
     {
-      Spanner* span_p = clone()->access_Spanner ();
+      Spanner* span_p = dynamic_cast<Spanner*> (clone());
       Item *left = break_cols[i-1];
       Item *right = break_cols[i];
       if (!right->line_l())
index 8fa6d56761046bcda99ad5dd613f2a5c32a8d015..e21c8c901234ad7525f1562925f10900852ba323 100644 (file)
@@ -38,10 +38,10 @@ Stem_engraver::acknowledge_element(Score_element_info i)
 {
   if (i.elem_l_->is_type_b (Rhythmic_head::static_name()))
     {
-      Rhythmic_head *h  = (Rhythmic_head*) i.elem_l_->access_Item ();
+      Rhythmic_head *h  = (Rhythmic_head*) dynamic_cast <Item *> (i.elem_l_);
       if (!stem_p_) 
        {
-         Rhythmic_req * r = i.req_l_->access_Musical_req ()->access_Rhythmic_req ();
+         Rhythmic_req * r = dynamic_cast <Rhythmic_req *> (i.req_l_);
          stem_p_ = new Stem;
          int durlog_i = r->duration_.durlog_i_;
          stem_p_->flag_i_ = durlog_i;
@@ -103,11 +103,11 @@ Stem_engraver::do_pre_move_processing()
 bool
 Stem_engraver::do_try_request (Request* r)
 {
-  Musical_req* mus_l = r->access_Musical_req ();
+  Musical_req* mus_l = dynamic_cast <Musical_req *> (r);
   if (!mus_l)
     return false;
   
-  Abbreviation_req* a = mus_l->access_Abbreviation_req ();
+  Abbreviation_req* a = dynamic_cast <Abbreviation_req *> (mus_l);
   if (!a)
     return false;
 
index 9ed1ef3b04d5255ede50fd6da0222ced5c2dd7fb..f79dab5ac9384c89fc7394ca3d2635b314b7ff89 100644 (file)
@@ -28,15 +28,15 @@ Ties_engraver::do_post_move_processing()
 bool
 Ties_engraver::do_try_request (Request*req)
 {
-  if (! req->access_Musical_req ())
+  if (! dynamic_cast <Musical_req *> (req))
       return false;
 
-  Tie_req * r=  req->access_Musical_req ()->access_Tie_req ();
-  if (!r)
-    return false;
-  
-  req_l_ = r;
-  return true;
+  if(Tie_req * r=  dynamic_cast <Tie_req *> (req))
+    {  
+      req_l_ = r;
+      return true;
+    }
+  return false;
 }
 
 
@@ -47,8 +47,8 @@ Ties_engraver::acknowledge_element (Score_element_info i)
     return;
   if (i.elem_l_->is_type_b (Note_head::static_name ()))
     {
-      Note_head * h = (Note_head*)i.elem_l_->access_Item ();
-      Melodic_req *m = i.req_l_->access_Musical_req ()->access_Melodic_req ();
+      Note_head * h = dynamic_cast <Note_head *> (i.elem_l_);
+      Melodic_req *m = dynamic_cast <Melodic_req *> (i.req_l_);
       
       head_mel_tuple_arr_.push (Head_melodic_tuple (h, m));
     }
index df41bf56b00729da02178b7b5cc82387cb5c677a..644055017060c0a99ede69d429a2ad37633f55ef 100644 (file)
@@ -45,8 +45,8 @@ Time_signature_performer::do_try_request (Request* req_l)
   if (time_signature_req_l_)
     return false;
 
-  if (req_l->access_Command_req ())
-    time_signature_req_l_ = req_l->access_Command_req ()->access_Time_signature_change_req ();
+  if (dynamic_cast <Command_req *> (req_l))
+    time_signature_req_l_ = dynamic_cast <Time_signature_change_req *> (req_l);
 
   if (time_signature_req_l_)
     return true;
index 77d0f18b6ebe26e20fe1b90367f96a4a4f587bb0..5d9a3e31fbbae6d1cc3b4c668b0179c0f5b16450 100644 (file)
@@ -88,7 +88,7 @@ Translator_group::removable_b() const
 {
   for (PCursor<Translator*> i (trans_p_list_.top ()); i.ok (); i++)
     {
-      if (i->access_Translator_group ())
+      if (dynamic_cast <Translator_group *> (i.ptr ()))
        return false;
     }
 
@@ -118,9 +118,9 @@ Translator_group::path_to_acceptable_translator (String type) const
   for (int i=0; i < accepts_str_arr_.size (); i++)
     {
       Translator *t = output_def_l ()->find_translator_l (accepts_str_arr_[i]);
-      if (!t || !t->access_Translator_group ())
+      if (!t || !dynamic_cast <Translator_group *> (t))
        continue;
-      accepted_arr.push (t->access_Translator_group ());
+      accepted_arr.push (dynamic_cast <Translator_group *> (t));
     }
 
 
@@ -166,7 +166,7 @@ Translator_group::find_create_translator_l (String n, String id)
       // start at 1.  The first one (index 0) will be us.
       for (int i=0; i < path.size (); i++)
        {
-         Translator_group * new_group = path[i]->clone ()->access_Translator_group ();
+         Translator_group * new_group = dynamic_cast<Translator_group*>(path[i]->clone ());
          current->add_translator (new_group);
          current = new_group;
        }
@@ -221,8 +221,8 @@ Translator_group::group_l_arr () const
   Link_array<Translator_group> groups;
   for (PCursor<Translator*> i (trans_p_list_.top ()); i.ok (); i++)
     {
-      if (i->access_Translator_group ())
-       groups.push (i->access_Translator_group ());
+      if (dynamic_cast <Translator_group *> (i.ptr ()))
+       groups.push (dynamic_cast <Translator_group *> (i.ptr ()));
     }
   return groups;
 }
@@ -233,7 +233,7 @@ Translator_group::nongroup_l_arr () const
   Link_array<Translator> groups;
   for (PCursor<Translator*> i (trans_p_list_.top ()); i.ok (); i++)
     {
-      if (!i->access_Translator_group ())
+      if (!dynamic_cast <Translator_group *> (i.ptr ()))
        groups.push (i.ptr ());
     }
   return groups;
@@ -300,7 +300,7 @@ Translator_group::get_default_interpreter()
          warning (_f ("can't find or create `%s\'", accepts_str_arr_[0]));
          t = this;
        }
-      Translator_group * g= t->clone ()->access_Translator_group ();
+      Translator_group * g= dynamic_cast <Translator_group*>(t->clone ());
       add_translator (g);
 
       if (!g->is_bottom_translator_b ())