X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flily-parser.cc;h=15cb06c4d7319af1b0915e501c467dd4c8f34268;hb=936cf9ea496f7340c91f92a7c0ddda91960bf960;hp=65160851e16ee39ceb01f7805f7112fd228676b3;hpb=9f3572d98bb948c9689cd1f75401a029451fa001;p=lilypond.git diff --git a/lily/lily-parser.cc b/lily/lily-parser.cc index 65160851e1..15cb06c4d7 100644 --- a/lily/lily-parser.cc +++ b/lily/lily-parser.cc @@ -36,7 +36,7 @@ Lily_parser::Lily_parser (Sources *sources) smobify_self (); - lexer_ = new Lily_lexer (sources_); + lexer_ = new Lily_lexer (sources_, this); lexer_->unprotect (); } @@ -50,8 +50,10 @@ Lily_parser::Lily_parser (Lily_parser const &src) smobify_self (); if (src.lexer_) - lexer_ = new Lily_lexer (*src.lexer_); - + { + lexer_ = new Lily_lexer (*src.lexer_, this); + } + lexer_->unprotect (); } @@ -95,7 +97,6 @@ Lily_parser::parse_file (string init, string name, string out_name) lexer_->main_input_name_ = name; message (_ ("Parsing...")); - // progress_indication ("\n"); set_yydebug (0); @@ -123,12 +124,12 @@ Lily_parser::parse_file (string init, string name, string out_name) if (!define_spots_.empty ()) { - define_spots_.back ().warning (_ ("braces don't match")); + define_spots_.back ().warning (_ ("braces do not match")); error_level_ = 1; } error_level_ = error_level_ | lexer_->error_level_; - lexer_ = 0; + clear (); } void @@ -139,9 +140,7 @@ Lily_parser::parse_string (string ly_code) self_scm ()); lexer_->main_input_name_ = ""; - lexer_->is_main_input_ = true; - - set_yydebug (0); + lexer_->is_main_input_ = true; lexer_->new_input (lexer_->main_input_name_, ly_code, sources_); SCM mod = lexer_->set_current_scope (); @@ -158,6 +157,18 @@ Lily_parser::parse_string (string ly_code) error_level_ = error_level_ | lexer_->error_level_; } +void +Lily_parser::clear () +{ + if (lexer_) + { + while (lexer_->has_scope ()) + lexer_->remove_scope (); + } + + lexer_ = 0; +} + char const * Lily_parser::here_str0 () const { @@ -229,13 +240,19 @@ get_header (Lily_parser *parser) { SCM id = parser->lexer_->lookup_identifier ("$defaultheader"); if (!ly_is_module (id)) - id = ly_make_anonymous_module (be_safe_global); + id = parser->make_scope (); else { - SCM nid = ly_make_anonymous_module (false); - ly_module_copy(nid,id); + SCM nid = parser->make_scope (); + ly_module_copy (nid, id); id = nid; } return id; } + +SCM +Lily_parser::make_scope () const +{ + return ly_make_anonymous_module (be_safe_global); +}