X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flily-lexer.cc;h=6c1336744b3286f6e2f0ca21d13ad8c5d4a508ca;hb=8c83a31308b5b44c696614db2b72a0a845cc116c;hp=3b9a3882b19158170de3132cf7088f10b98e9a65;hpb=187f5d255574bb4cfe744cbccf10aec821d6ae6e;p=lilypond.git diff --git a/lily/lily-lexer.cc b/lily/lily-lexer.cc index 3b9a3882b1..6c1336744b 100644 --- a/lily/lily-lexer.cc +++ b/lily/lily-lexer.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2010 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -37,7 +37,8 @@ using namespace std; #include "lily-parser.hh" static Keyword_ent the_key_tab[] -= { += +{ {"accepts", ACCEPTS}, {"addlyrics", ADDLYRICS}, {"alias", ALIAS}, @@ -74,8 +75,6 @@ static Keyword_ent the_key_tab[] {"once", ONCE}, {"override", OVERRIDE}, {"paper", PAPER}, - {"partial", PARTIAL}, - {"relative", RELATIVE}, {"remove", REMOVE}, {"repeat", REPEAT}, {"rest", REST}, @@ -84,11 +83,9 @@ static Keyword_ent the_key_tab[] {"sequential", SEQUENTIAL}, {"set", SET}, {"simultaneous", SIMULTANEOUS}, - {"skip", SKIP}, {"tempo", TEMPO}, {"time", TIME_T}, {"times", TIMES}, - {"transpose", TRANSPOSE}, {"type", TYPE}, {"unset", UNSET}, {"with", WITH}, @@ -107,6 +104,7 @@ Lily_lexer::Lily_lexer (Sources *sources, Lily_parser *parser) is_main_input_ = false; start_module_ = SCM_EOL; chord_repetition_ = Chord_repetition (); + extra_tokens_ = SCM_EOL; smobify_self (); add_scope (ly_make_module (false)); @@ -129,6 +127,7 @@ Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser) is_main_input_ = src.is_main_input_; scopes_ = SCM_EOL; + extra_tokens_ = SCM_EOL; smobify_self (); @@ -209,8 +208,8 @@ Lily_lexer::keyword_list () const for (vsize i = 0; i < keytable_->table_.size (); i++) { *tail = scm_acons (scm_from_locale_string (keytable_->table_[i].name_), - scm_from_int (keytable_->table_[i].tokcode_), - SCM_EOL); + scm_from_int (keytable_->table_[i].tokcode_), + SCM_EOL); tail = SCM_CDRLOC (*tail); } @@ -225,7 +224,7 @@ Lily_lexer::lookup_identifier_symbol (SCM sym) { SCM var = ly_module_lookup (scm_car (s), sym); if (var != SCM_BOOL_F) - return scm_variable_ref (var); + return scm_variable_ref (var); } return SCM_UNDEFINED; @@ -246,8 +245,8 @@ Lily_lexer::start_main_input () new_input (main_input_name_, sources_); scm_module_define (scm_car (scopes_), - ly_symbol2scm ("input-file-name"), - ly_string2scm (main_input_name_)); + ly_symbol2scm ("input-file-name"), + ly_string2scm (main_input_name_)); } void @@ -286,19 +285,19 @@ Lily_lexer::set_identifier (SCM path, SCM val) if (scm_is_symbol (sym)) { if (lookup_keyword (ly_symbol2string (sym)) >= 0) - { - string symstr = ly_symbol2string (sym); - warning (_f ("identifier name is a keyword: `%s'", symstr.c_str ())); - } + { + string symstr = ly_symbol2string (sym); + warning (_f ("identifier name is a keyword: `%s'", symstr.c_str ())); + } SCM mod = scm_car (scopes_); if (scm_is_pair (path)) - { - SCM prev = scm_module_lookup (mod, sym); - if (prev != SCM_UNDEFINED) - val = nested_property_alist (prev, path, val); - } + { + SCM prev = ly_module_lookup (mod, sym); + if (prev != SCM_BOOL_F) + val = nested_property_alist (scm_variable_ref (prev), path, val); + } scm_module_define (mod, sym, val); } else @@ -309,7 +308,7 @@ void Lily_lexer::LexerError (char const *s) { if (include_stack_.empty ()) - message (_f ("error at EOF: %s", s) + "\n"); + non_fatal_error (s, _f ("%s:EOF", s)); else { error_level_ |= 1; @@ -318,6 +317,18 @@ Lily_lexer::LexerError (char const *s) } } +void +Lily_lexer::LexerWarning (char const *s) +{ + if (include_stack_.empty ()) + warning (s, _f ("%s:EOF", s)); + else + { + Input spot (*lexloc_); + spot.warning (s); + } +} + char Lily_lexer::escaped_char (char c) const { @@ -356,7 +367,7 @@ Lily_lexer::add_lexed_char (int count) { char const *start = here_str0 (); lexloc_->set (get_source_file (), - start, start + count); + start, start + count); char_count_stack_.back () += count; } @@ -378,11 +389,12 @@ Lily_lexer::mark_smob (SCM s) scm_gc_mark (lexer->parser_->self_scm ()); scm_gc_mark (lexer->pitchname_tab_stack_); scm_gc_mark (lexer->start_module_); + scm_gc_mark (lexer->extra_tokens_); return lexer->scopes_; } int -Lily_lexer::print_smob (SCM s, SCM port, scm_print_state*) +Lily_lexer::print_smob (SCM s, SCM port, scm_print_state *) { Lily_lexer *lexer = Lily_lexer::unsmob (s);