SCM
Lily_parser::mark_smob (SCM s)
{
- Lily_parser *parser = (Lily_parser*) ly_cdr (s);
+ Lily_parser *parser = (Lily_parser*) SCM_CELL_WORD_1 (s);
return (parser->lexer_) ? parser->lexer_->self_scm () : SCM_EOL;
}
Lily_parser::print_smob (SCM s, SCM port, scm_print_state*)
{
scm_puts ("#<my_lily_parser ", port);
- Lily_parser *parser = (Lily_parser*) ly_cdr (s);
+ Lily_parser *parser = (Lily_parser*) SCM_CELL_WORD_1 (s);
(void) parser;
scm_puts (" >", port);
return 1;
void
Lily_parser::parse_string (String ly_code)
{
-#if 0
- SCM parent_prot = lexer_ ? lexer_->self_scm () : SCM_EOL;
-#endif
-
Lily_lexer * parent = lexer_;
lexer_ = (parent == 0 ? new Lily_lexer (sources_)
: new Lily_lexer (*parent));
SCM oldmod = scm_current_module ();
- scm_set_current_module (ly_car (lexer_->scopes_));
+ scm_set_current_module (scm_car (lexer_->scopes_));
// TODO: use $parser
lexer_->set_identifier (ly_symbol2scm ("parser"),
error_level_ = error_level_ | lexer_->error_level_;
-#if 0
- if (Lily_lexer::unsmob (parent_prot))
- {
- /*
- what the fuck is this good for?
- */
- parent->encoding_ = lexer_->encoding_;
- parent->chordmodifier_tab_ = lexer_->chordmodifier_tab_;
- parent->pitchname_tab_stack_ = lexer_->pitchname_tab_stack_;
- parent->sources_ = lexer_->sources_;
- parent->scopes_ = lexer_->scopes_;
- parent->error_level_ = lexer_->error_level_;
- parent->main_input_b_ = lexer_->main_input_b_;
- }
-
- scm_remember_upto_here_1 (parent_prot);
-#endif
-
scm_set_current_module (oldmod);
lexer_ = 0;
}
"Parse a single @code{.ly} file. "
"Upon failure, throw @code{ly-file-failed} key.")
{
- SCM_ASSERT_TYPE (ly_c_string_p (name), name, SCM_ARG1, __FUNCTION__, "string");
+ SCM_ASSERT_TYPE (scm_is_string (name), name, SCM_ARG1, __FUNCTION__, "string");
char const *file = scm_i_string_chars (name);
char const *extensions[] = {"ly", "", 0};
"Parse the string LY_CODE. "
"Upon failure, throw @code{ly-file-failed} key.")
{
- SCM_ASSERT_TYPE (ly_c_string_p (ly_code), ly_code, SCM_ARG1, __FUNCTION__, "string");
+ SCM_ASSERT_TYPE (scm_is_string (ly_code), ly_code, SCM_ARG1, __FUNCTION__, "string");
Sources sources;
sources.set_path (&global_path);
"Bind SYMBOL to VAL in PARSER_SMOB's module.")
{
Lily_parser *parser = unsmob_my_lily_parser (parser_smob);
- SCM_ASSERT_TYPE (ly_c_symbol_p (symbol), symbol, SCM_ARG2, __FUNCTION__, "symbol");
+ SCM_ASSERT_TYPE (scm_is_symbol (symbol), symbol, SCM_ARG2, __FUNCTION__, "symbol");
SCM_ASSERT_TYPE (parser, parser_smob, SCM_ARG2, __FUNCTION__, "parser");
parser->lexer_->set_identifier (scm_symbol_to_string (symbol), val);
{
Lily_parser *parser = unsmob_my_lily_parser (parser_smob);
- SCM_ASSERT_TYPE (ly_c_symbol_p (symbol), symbol, SCM_ARG2, __FUNCTION__, "symbol");
+ SCM_ASSERT_TYPE (scm_is_symbol (symbol), symbol, SCM_ARG2, __FUNCTION__, "symbol");
SCM_ASSERT_TYPE (parser, parser_smob, SCM_ARG2, __FUNCTION__, "parser");
SCM val= parser->lexer_->lookup_identifier (ly_scm2string (scm_symbol_to_string (symbol)));
Lily_parser *parser = unsmob_my_lily_parser (parser_smob);
SCM_ASSERT_TYPE (parser, parser_smob, SCM_ARG1, __FUNCTION__, "parser");
- SCM_ASSERT_TYPE (ly_c_string_p (ly_code), ly_code, SCM_ARG2, __FUNCTION__, "string");
+ SCM_ASSERT_TYPE (scm_is_string (ly_code), ly_code, SCM_ARG2, __FUNCTION__, "string");
parser->parse_string (ly_scm2string (ly_code));
paper = paper ? paper->clone () : new Output_def;
paper->set_variable (ly_symbol2scm ("is-paper"), SCM_BOOL_T);
- paper->parent_ = unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultbookpaper"));
return paper;
}
Lily_parser *parser = unsmob_my_lily_parser (parser_smob);
Score *score = unsmob_score (score_smob);
+ if (score->error_found_)
+ return SCM_UNSPECIFIED;
+
SCM_ASSERT_TYPE (parser, parser_smob, SCM_ARG1, __FUNCTION__, "parser");
SCM_ASSERT_TYPE (score, score_smob, SCM_ARG2, __FUNCTION__, "score");
SCM os = scm_makfrom0str (outname.to_string ().to_str0 ());
SCM bookpaper = get_bookpaper (parser)->self_scm ();
for (int i = 0; i < score->defs_.size (); i++)
- default_rendering (score->music_, score->defs_[i]->self_scm (),
+ default_rendering (score->get_music (), score->defs_[i]->self_scm (),
bookpaper,
header, os);
if (score->defs_.is_empty ())
{
Output_def *paper = get_paper (parser);
- default_rendering (score->music_, paper->self_scm (),
+ default_rendering (score->get_music(), paper->self_scm (),
get_bookpaper (parser)->self_scm (),
header, os);
scm_gc_unprotect_object (paper->self_scm ());
Output_def *paper = get_paper (parser);
Paper_book* pb = book->process (outname.to_string (), paper);
+ if (pb)
+ {
+ pb->output (outname.to_string ());
+ scm_gc_unprotect_object (pb->self_scm ());
+ }
- pb->output (outname.to_string ());
-
scm_gc_unprotect_object (paper->self_scm ());
- scm_gc_unprotect_object (pb->self_scm ());
-
return SCM_UNSPECIFIED;
}