if (s.length_i () && (s[s.length_i () - 1] == ';'))
s = s.left_str (s.length_i () - 1);
DEBUG_OUT << "#include `\\" << s << "'\n";
- Identifier * id = lookup_identifier (s);
- if (id)
- {
- String* s_l = id->access_content_String (false);
- DEBUG_OUT << "#include `" << *s_l << "'\n";
- new_input (*s_l, source_global_l);
-
- yy_pop_state ();
- }
- else
- {
- String msg (_f ("undefined identifier: `%s'", s ));
+ SCM sid = lookup_identifier (s);
+ if (gh_string_p (sid)) {
+ new_input (ly_scm2string (sid), source_global_l);
+ yy_pop_state ();
+ } else {
+ String msg (_f ("wrong or undefined identifier: `%s'", s ));
LexerError (msg.ch_C ());
}
}
if (l != -1) {
return l;
}
- Identifier * id = lookup_identifier (str);
+ SCM sid = lookup_identifier (str);
+ if (gh_string_p (sid)) {
+ yylval.scm = sid;
+ return STRING_IDENTIFIER;
+ }
+
+ Identifier * id = unsmob_identifier (sid);
if (id) {
yylval.id = id;
return id->token_code_i_;
+ } else if (sid != SCM_UNDEFINED) {
+ yylval.scm = sid;
+ return SCM_IDENTIFIER;
}
+
if ((YYSTATE != notes) && (YYSTATE != chords)) {
SCM pitch = scm_hashq_ref (pitchname_tab_, sym, SCM_BOOL_F);
return keytable_p_->lookup (s.ch_C ());
}
-Identifier*
+SCM
My_lily_lexer::lookup_identifier (String s)
{
SCM sym = ly_symbol2scm (s.ch_C());
for (int i = scope_l_arr_.size (); i--; )
if (scope_l_arr_[i]->elem_b (sym))
- return scope_l_arr_[i]->elem(sym);
- return 0;
+ return scope_l_arr_[i]->scm_elem(sym);
+ return SCM_UNDEFINED;
}
void
}
void
-My_lily_lexer::set_identifier (String name_str, Identifier* i, bool )
+My_lily_lexer::set_identifier (String name_str, SCM s)
{
- Identifier *old =0;
- if (scope_l_arr_.top ()->elem_b (name_str))
- old = scope_l_arr_.top ()->elem(name_str);
-
-
- if (old)
- {
- delete old;
- }
if (lookup_keyword (name_str) >= 0)
{
warning ( _f ("Identifier name is a keyword: `%s'", name_str));
}
- scope_l_arr_.top ()->elem (name_str) = i;
+ scope_l_arr_.top ()->set (name_str, s);
}
My_lily_lexer::~My_lily_lexer()