X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flily-lexer.cc;h=c196808a2fef49b9a3c62ec0cafd964477021bfe;hb=23108a9515e7f76b44fac0b323afb169d708bfa1;hp=6c1336744b3286f6e2f0ca21d13ad8c5d4a508ca;hpb=151736d38b944c26870f4d208c77112b102b78b3;p=lilypond.git diff --git a/lily/lily-lexer.cc b/lily/lily-lexer.cc index 6c1336744b..c196808a2f 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--2011 Han-Wen Nienhuys + Copyright (C) 1997--2012 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 @@ -58,21 +58,17 @@ static Keyword_ent the_key_tab[] {"drums", DRUMS}, {"figuremode", FIGUREMODE}, {"figures", FIGURES}, - {"grobdescriptions", GROBDESCRIPTIONS}, {"header", HEADER}, - {"key", KEY}, {"layout", LAYOUT}, {"lyricmode", LYRICMODE}, {"lyrics", LYRICS}, {"lyricsto", LYRICSTO}, - {"mark", MARK}, {"markup", MARKUP}, - {"markuplines", MARKUPLINES}, + {"markuplist", MARKUPLIST}, {"midi", MIDI}, {"name", NAME}, {"new", NEWCONTEXT}, {"notemode", NOTEMODE}, - {"once", ONCE}, {"override", OVERRIDE}, {"paper", PAPER}, {"remove", REMOVE}, @@ -84,8 +80,6 @@ static Keyword_ent the_key_tab[] {"set", SET}, {"simultaneous", SIMULTANEOUS}, {"tempo", TEMPO}, - {"time", TIME_T}, - {"times", TIMES}, {"type", TYPE}, {"unset", UNSET}, {"with", WITH}, @@ -102,17 +96,18 @@ Lily_lexer::Lily_lexer (Sources *sources, Lily_parser *parser) scopes_ = SCM_EOL; error_level_ = 0; is_main_input_ = false; + main_input_level_ = 0; start_module_ = SCM_EOL; - chord_repetition_ = Chord_repetition (); extra_tokens_ = SCM_EOL; smobify_self (); add_scope (ly_make_module (false)); - push_note_state (scm_c_make_hash_table (0)); + push_note_state (SCM_EOL); chordmodifier_tab_ = scm_make_vector (scm_from_int (1), SCM_EOL); } -Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser) +Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser, + SCM override_input) : Includable_lexer () { parser_ = parser; @@ -120,29 +115,20 @@ Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser) chordmodifier_tab_ = src.chordmodifier_tab_; pitchname_tab_stack_ = src.pitchname_tab_stack_; sources_ = src.sources_; + scopes_ = src.scopes_; start_module_ = SCM_EOL; - chord_repetition_ = src.chord_repetition_; - error_level_ = src.error_level_; + error_level_ = 0; is_main_input_ = src.is_main_input_; + main_input_level_ = 0; - scopes_ = SCM_EOL; extra_tokens_ = SCM_EOL; + if (unsmob_input (override_input)) + override_input_ = *unsmob_input (override_input); smobify_self (); - SCM scopes = SCM_EOL; - SCM *tail = &scopes; - for (SCM s = src.scopes_; scm_is_pair (s); s = scm_cdr (s)) - { - SCM newmod = ly_make_module (false); - ly_module_copy (newmod, scm_car (s)); - *tail = scm_cons (newmod, SCM_EOL); - tail = SCM_CDRLOC (*tail); - } - - scopes_ = scopes; - push_note_state (scm_c_make_hash_table (0)); + push_note_state (SCM_EOL); } Lily_lexer::~Lily_lexer () @@ -352,6 +338,13 @@ Lily_lexer::here_input () const return Input (*lexloc_); } +Input const & +Lily_lexer::override_input (Input const &in) const +{ + return override_input_.get_source_file () + ? override_input_ : in; +} + void Lily_lexer::prepare_for_next_token () { @@ -380,7 +373,7 @@ IMPLEMENT_DEFAULT_EQUAL_P (Lily_lexer); SCM Lily_lexer::mark_smob (SCM s) { - ASSERT_LIVE_IS_ALLOWED (); + ASSERT_LIVE_IS_ALLOWED (s); Lily_lexer *lexer = (Lily_lexer *) SCM_CELL_WORD_1 (s);