X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flily-lexer.cc;h=921dd2ad7a488f4a8ab50b4d2592ca86b68d68ba;hb=4015468c822eae4e9421ca6640b0ecf6e75e8d7d;hp=39aeb78dd14c0fe9cd9bce93f50cb365f748e5c3;hpb=b455c62eeff33f6014a7f8c1ddc690047ae011ec;p=lilypond.git diff --git a/lily/lily-lexer.cc b/lily/lily-lexer.cc index 39aeb78dd1..921dd2ad7a 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--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 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 @@ -96,6 +96,7 @@ 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; extra_tokens_ = SCM_EOL; smobify_self (); @@ -105,7 +106,8 @@ Lily_lexer::Lily_lexer (Sources *sources, Lily_parser *parser) 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; @@ -118,8 +120,11 @@ Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser) error_level_ = 0; is_main_input_ = src.is_main_input_; + main_input_level_ = 0; extra_tokens_ = SCM_EOL; + if (Input::unsmob (override_input)) + override_input_ = *Input::unsmob (override_input); smobify_self (); @@ -173,7 +178,7 @@ Lily_lexer::set_current_scope () } int -Lily_lexer::lookup_keyword (string s) +Lily_lexer::lookup_keyword (const string &s) { return keytable_->lookup (s.c_str ()); } @@ -212,7 +217,7 @@ Lily_lexer::lookup_identifier_symbol (SCM sym) } SCM -Lily_lexer::lookup_identifier (string name) +Lily_lexer::lookup_identifier (const string &name) { return lookup_identifier_symbol (ly_symbol2scm (name.c_str ())); } @@ -231,13 +236,13 @@ Lily_lexer::start_main_input () } void -Lily_lexer::new_input (string str, string d, Sources *ss) +Lily_lexer::new_input (const string &str, string d, Sources *ss) { Includable_lexer::new_input (str, d, ss); } void -Lily_lexer::new_input (string str, Sources *ss) +Lily_lexer::new_input (const string &str, Sources *ss) { if (is_main_input_ && be_safe_global) { @@ -333,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 () { @@ -352,11 +364,8 @@ Lily_lexer::add_lexed_char (int count) char_count_stack_.back () += count; } -#include "ly-smobs.icc" -IMPLEMENT_SMOBS (Lily_lexer); -IMPLEMENT_TYPE_P (Lily_lexer, "ly:lily-lexer?"); -IMPLEMENT_DEFAULT_EQUAL_P (Lily_lexer); +const char Lily_lexer::type_p_name_[] = "ly:lily-lexer?"; SCM Lily_lexer::mark_smob (SCM s)