-
/*
identifier.hh -- part of LilyPond
#ifndef IDENTIFIER_HH
#define IDENTIFIER_HH
-#include "identparent.hh"
-#include "symtable.hh"
-#include "input-staff.hh"
-#include "input-music.hh"
-#include "lookup.hh"
-#include "script-def.hh"
-#include "request.hh"
+#include "proto.hh"
+#include "string.hh"
+
+/* boolean argument to accesor is copy_b..*/
+#define IDACCESSOR( Input_staff, staff)\
+ virtual Input_staff * staff(bool) { error(#Input_staff); return 0; }
+
+
+struct Identifier {
+ void *data;
+ String name;
+ bool init_b_;
+ bool accessed_b_;
+ int token_code_i_;
+ char const *defined_ch_C_;
+
+ Identifier(String n, int code) ;
+ virtual ~Identifier() {}
-#define make_id_class(Idclass, Class, accessor) \
+ void print()const;
+ virtual char const *classname() const{ return "new Identifier"; }
+ void error(String);
+ IDACCESSOR(Input_staff, staff)
+ IDACCESSOR(Input_music, music)
+ IDACCESSOR(Music_voice, mvoice)
+ IDACCESSOR(Script_def, script)
+ IDACCESSOR(Symtables, symtables)
+ IDACCESSOR(Music_general_chord, mchord)
+ IDACCESSOR(Lookup,lookup)
+ IDACCESSOR(Real,real)
+ IDACCESSOR(Request, request)
+ IDACCESSOR(Input_score, score)
+
+protected:
+ virtual void do_print()const=0;
+private:
+ Identifier(Identifier const&){}
+};
+
+#define declare_id_class(Idclass, Class, accessor) \
struct Idclass : Identifier {\
- virtual const char *classname() { return #Class; }\
- Idclass(String s, Class*st, int code):Identifier(s,code) { data = st; }\
- virtual Class* accessor(bool copy) {\
- if (copy)\
- return new Class(* (Class*) data);\
- else\
- return (Class*) data;\
- }\
- ~Idclass() { delete accessor(false); }\
- virtual void do_print()const; \
+ virtual char const *classname()const;\
+ Idclass(String s, Class*st, int code);\
+ virtual Class* accessor(bool copy);\
+ ~Idclass();\
+ virtual void do_print()const; \
}\
-make_id_class(Real_id, Real, real);
-make_id_class(Script_id, Script_def, script);
-make_id_class(Lookup_id, Lookup, lookup);
-make_id_class(Symtables_id, Symtables, symtables);
-make_id_class(Staff_id, Input_staff, staff);
-make_id_class(M_chord_id, Music_general_chord, mchord);
-make_id_class(M_voice_id, Music_voice, mvoice);
-make_id_class(Request_id, Request, request);
-#endif // IDENTIFIER_HH
+declare_id_class(Real_id, Real, real);
+declare_id_class(Script_id, Script_def, script);
+declare_id_class(Lookup_id, Lookup, lookup);
+declare_id_class(Symtables_id, Symtables, symtables);
+declare_id_class(Staff_id, Input_staff, staff);
+declare_id_class(M_chord_id, Music_general_chord, mchord);
+declare_id_class(M_voice_id, Music_voice, mvoice);
+declare_id_class(Score_id, Input_score, score);
+declare_id_class(Request_id, Request, request);
+
+#endif // IDENTIFIER_