From a9a451e2316c2e94815e33d51eb42eaae3649384 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Sun, 9 Sep 2012 21:01:03 +0200 Subject: [PATCH] Issue 2826: Let do_yyparse return a value rather than going through parseStringResult This is a much more dignified manner of interaction. --- Documentation/de/notation/notation-appendices.itely | 1 - Documentation/es/notation/notation-appendices.itely | 2 -- Documentation/fr/notation/notation-appendices.itely | 2 -- Documentation/notation/notation-appendices.itely | 2 -- lily/include/lily-parser.hh | 4 ++-- lily/lily-parser.cc | 4 +--- lily/parser.yy | 11 +++++++---- 7 files changed, 10 insertions(+), 16 deletions(-) diff --git a/Documentation/de/notation/notation-appendices.itely b/Documentation/de/notation/notation-appendices.itely index fa23864dad..f3d73f961d 100644 --- a/Documentation/de/notation/notation-appendices.itely +++ b/Documentation/de/notation/notation-appendices.itely @@ -1635,7 +1635,6 @@ LilyPond benutzt folgende Parser-Variablen: @item mode @item output-count @item output-suffix -@item parseStringResult @item partCombineListener @item pitchnames @item toplevel-bookparts diff --git a/Documentation/es/notation/notation-appendices.itely b/Documentation/es/notation/notation-appendices.itely index 0a8fe0f779..8322909bb8 100644 --- a/Documentation/es/notation/notation-appendices.itely +++ b/Documentation/es/notation/notation-appendices.itely @@ -1656,7 +1656,6 @@ LilyPond. @cindex modo @cindex output-count @cindex output-suffix -@cindex parseStringResult @cindex partCombineListener @cindex pitchnames @cindex toplevel-bookparts @@ -1684,7 +1683,6 @@ LilyPond utiliza las siguientes variables del analizador sintáctico: @item mode @item output-count @item output-suffix -@item parseStringResult @item partCombineListener @item pitchnames @item toplevel-bookparts diff --git a/Documentation/fr/notation/notation-appendices.itely b/Documentation/fr/notation/notation-appendices.itely index 9653d907e3..ee1e153a6f 100644 --- a/Documentation/fr/notation/notation-appendices.itely +++ b/Documentation/fr/notation/notation-appendices.itely @@ -1646,7 +1646,6 @@ programmes binaires de LilyPond. @cindex mode @cindex output-count @cindex output-suffix -@cindex parseStringResult @cindex partCombineListener @cindex pitchnames @cindex toplevel-bookparts @@ -1674,7 +1673,6 @@ LilyPond utilise les variables suivantes : @item mode @item output-count @item output-suffix -@item parseStringResult @item partCombineListener @item pitchnames @item toplevel-bookparts diff --git a/Documentation/notation/notation-appendices.itely b/Documentation/notation/notation-appendices.itely index 2eb3182e46..e74dae6184 100644 --- a/Documentation/notation/notation-appendices.itely +++ b/Documentation/notation/notation-appendices.itely @@ -1559,7 +1559,6 @@ binary installation. @cindex mode @cindex output-count @cindex output-suffix -@cindex parseStringResult @cindex partCombineListener @cindex pitchnames @cindex toplevel-bookparts @@ -1587,7 +1586,6 @@ LilyPond uses the following parser variables: @item mode @item output-count @item output-suffix -@item parseStringResult @item partCombineListener @item pitchnames @item toplevel-bookparts diff --git a/lily/include/lily-parser.hh b/lily/include/lily-parser.hh index 2e065ff31d..810076c8a2 100644 --- a/lily/include/lily-parser.hh +++ b/lily/include/lily-parser.hh @@ -60,7 +60,7 @@ public: void clear (); void do_init_file (); - void do_yyparse (); + SCM do_yyparse (); void include_string (string ly_code); void parse_file (string init, string name, string out_name); void parse_string (string ly_code); @@ -68,7 +68,7 @@ public: void parser_error (string); void parser_error (Input const &, string); // The following is called as yyerror - static void parser_error (Input const *i, Lily_parser *parser, string s); + static void parser_error (Input const *i, Lily_parser *parser, SCM *, string s); void set_yydebug (bool); SCM make_scope () const; diff --git a/lily/lily-parser.cc b/lily/lily-parser.cc index 67b7bcac1f..7b35f0e8e4 100644 --- a/lily/lily-parser.cc +++ b/lily/lily-parser.cc @@ -171,9 +171,7 @@ Lily_parser::parse_string_expression (string ly_code, string filename, SCM parser = lexer_->lookup_identifier_symbol (ly_symbol2scm ("parser")); lexer_->set_identifier (ly_symbol2scm ("parser"), self_scm ()); lexer_->push_extra_token (EMBEDDED_LILY); - do_yyparse (); - SCM result = lexer_->lookup_identifier_symbol (ly_symbol2scm ("parseStringResult")); - // parseStringResult is set in the grammar rule for embedded_lilypond + SCM result = do_yyparse (); lexer_->set_identifier (ly_symbol2scm ("parser"), parser); scm_set_current_module (mod); diff --git a/lily/parser.yy b/lily/parser.yy index b7d9df1214..bacdcf2369 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -40,6 +40,7 @@ %} %parse-param {Lily_parser *parser} +%parse-param {SCM *retval} %lex-param {Lily_parser *parser} %error-verbose %debug @@ -144,7 +145,7 @@ using namespace std; #include "warn.hh" void -Lily_parser::parser_error (Input const *i, Lily_parser *parser, string s) +Lily_parser::parser_error (Input const *i, Lily_parser *parser, SCM *, string s) { parser->parser_error (*i, s); } @@ -568,7 +569,7 @@ start_symbol: parser->lexer_->push_note_state (nn); } embedded_lilypond { parser->lexer_->pop_state (); - parser->lexer_->set_identifier (ly_symbol2scm ("parseStringResult"), $3); + *retval = $3; } ; @@ -3251,10 +3252,12 @@ Lily_parser::set_yydebug (bool x) yydebug = x; } -void +SCM Lily_parser::do_yyparse () { - yyparse (this); + SCM retval = SCM_UNDEFINED; + yyparse (this, &retval); + return retval; } -- 2.39.5