This is a much more dignified manner of interaction.
@item mode
@item output-count
@item output-suffix
-@item parseStringResult
@item partCombineListener
@item pitchnames
@item toplevel-bookparts
@cindex modo
@cindex output-count
@cindex output-suffix
-@cindex parseStringResult
@cindex partCombineListener
@cindex pitchnames
@cindex toplevel-bookparts
@item mode
@item output-count
@item output-suffix
-@item parseStringResult
@item partCombineListener
@item pitchnames
@item toplevel-bookparts
@cindex mode
@cindex output-count
@cindex output-suffix
-@cindex parseStringResult
@cindex partCombineListener
@cindex pitchnames
@cindex toplevel-bookparts
@item mode
@item output-count
@item output-suffix
-@item parseStringResult
@item partCombineListener
@item pitchnames
@item toplevel-bookparts
@cindex mode
@cindex output-count
@cindex output-suffix
-@cindex parseStringResult
@cindex partCombineListener
@cindex pitchnames
@cindex toplevel-bookparts
@item mode
@item output-count
@item output-suffix
-@item parseStringResult
@item partCombineListener
@item pitchnames
@item toplevel-bookparts
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);
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;
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);
%}
%parse-param {Lily_parser *parser}
+%parse-param {SCM *retval}
%lex-param {Lily_parser *parser}
%error-verbose
%debug
#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);
}
parser->lexer_->push_note_state (nn);
} embedded_lilypond {
parser->lexer_->pop_state ();
- parser->lexer_->set_identifier (ly_symbol2scm ("parseStringResult"), $3);
+ *retval = $3;
}
;
yydebug = x;
}
-void
+SCM
Lily_parser::do_yyparse ()
{
- yyparse (this);
+ SCM retval = SCM_UNDEFINED;
+ yyparse (this, &retval);
+ return retval;
}