X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fincludable-lexer.cc;h=cb8dc7d9cbe74d299fbd27fc3294a9795a6988fc;hb=9458fa215af0294e9c38d62cc3a237a85fe50509;hp=9da3464bc45ba532a591bba9381d25e75eb20deb;hpb=a6ee9dcd388111e842064a8d46ab06c4897a00d2;p=lilypond.git diff --git a/lily/includable-lexer.cc b/lily/includable-lexer.cc index 9da3464bc4..cb8dc7d9cb 100644 --- a/lily/includable-lexer.cc +++ b/lily/includable-lexer.cc @@ -3,14 +3,15 @@ source file of the LilyPond music typesetter - (c) 1997--2002 Han-Wen Nienhuys + (c) 1997--2004 Han-Wen Nienhuys */ #include +#include "config.hh" -#include "file-path.hh" #include "includable-lexer.hh" +#include "file-path.hh" #include "source-file.hh" #include "source.hh" #include "warn.hh" @@ -26,59 +27,63 @@ #define YYSTATE YY_START #endif +/* Flex >= 2.5.29 has include stack; but we don't use that yet. */ +#if !HAVE_FLEXLEXER_YY_CURRENT_BUFFER +#define yy_current_buffer \ + (yy_buffer_stack != 0 ? yy_buffer_stack[yy_buffer_stack_top] : 0) +#endif + Includable_lexer::Includable_lexer () { +#if HAVE_FLEXLEXER_YY_CURRENT_BUFFER yy_current_buffer = 0; +#endif allow_includes_b_ = true; } -/** set the new input to s, remember old file. -*/ +/** Set the new input file to NAME, remember old file. */ void -Includable_lexer::new_input (String s, Sources * global_sources) +Includable_lexer::new_input (String name, Sources *sources) { if (!allow_includes_b_) { - LexerError ("include files are disallowed."); + LexerError (_ ("include files are not allowed").to_str0 ()); return; } - Source_file * sl = global_sources->get_file (s); - if (!sl) + Source_file *file = sources->get_file (name); + if (!file) { - String msg = _f ("can't find file: `%s'", s); + String msg = _f ("can't find file: `%s'", name); msg += "\n"; - msg += _f ("(search path: `%s')", global_sources->path_C_->string ().to_str0 ()); + msg += _f ("(search path: `%s')", + sources->path_->to_string ().to_str0 ()); msg += "\n"; LexerError (msg.to_str0 ()); - return; } - filename_strings_.push (sl->name_string ()); + filename_strings_.push (file->name_string ()); char_count_stack_.push (0); if (yy_current_buffer) state_stack_.push (yy_current_buffer); if (verbose_global_b) - progress_indication (String ("[") + s); + progress_indication (String ("[") + name); - include_stack_.push (sl); - - /* - ugh. We'd want to create a buffer from the bytes directly. - - Whoops. The size argument to yy_create_buffer is not the - filelength but a BUFFERSIZE. Maybe this is why reading stdin fucks up. + include_stack_.push (file); - */ - yy_switch_to_buffer (yy_create_buffer (sl->get_istream (), YY_BUF_SIZE)); + /* Ugh. We'd want to create a buffer from the bytes directly. + Whoops. The size argument to yy_create_buffer is not the + filelength but a BUFFERSIZE. Maybe this is why reading stdin fucks up. */ + yy_switch_to_buffer (yy_create_buffer (file->get_istream (), YY_BUF_SIZE)); } + void -Includable_lexer::new_input (String name, String data, Sources* sources) +Includable_lexer::new_input (String name, String data, Sources *sources) { - Source_file* file = new Source_file (name, data); + Source_file *file = new Source_file (name, data); sources->add (file); filename_strings_.push (name); @@ -94,7 +99,8 @@ Includable_lexer::new_input (String name, String data, Sources* sources) } /** pop the inputstack. conceptually this is a destructor, but it - does not destruct the Source_file that Includable_lexer::new_input creates. */ + does not destruct the Source_file that Includable_lexer::new_input + creates. */ bool Includable_lexer::close_input () { @@ -103,30 +109,31 @@ Includable_lexer::close_input () if (verbose_global_b) progress_indication ("]"); yy_delete_buffer (yy_current_buffer); +#if HAVE_FLEXLEXER_YY_CURRENT_BUFFER yy_current_buffer = 0; - if (state_stack_.empty ()) +#endif + if (state_stack_.is_empty ()) { +#if HAVE_FLEXLEXER_YY_CURRENT_BUFFER yy_current_buffer = 0; +#endif return false; } - else - { - yy_switch_to_buffer (state_stack_.pop ()); - return true; - } + yy_switch_to_buffer (state_stack_.pop ()); + return true; } char const* Includable_lexer::here_str0 () const { - if (include_stack_.empty ()) + if (include_stack_.is_empty ()) return 0; return include_stack_.top ()->to_str0 () + char_count_stack_.top (); } Includable_lexer::~Includable_lexer () { - while (!include_stack_.empty ()) + while (!include_stack_.is_empty ()) { close_input (); } @@ -144,7 +151,7 @@ Includable_lexer::add_lexed_char (int count) Source_file* Includable_lexer::get_source_file () const { - if (include_stack_.empty ()) + if (include_stack_.is_empty ()) return 0; else return include_stack_.top ();