last_beam_start_ = src.last_beam_start_;
smobify_self ();
- lexer_ = new My_lily_lexer (*src.lexer_);
+ if (src.lexer_)
+ lexer_ = new My_lily_lexer (*src.lexer_);
}
My_lily_parser::~My_lily_parser ()
My_lily_parser::parse_file (String init, String name, String out_name)
{
lexer_ = new My_lily_lexer (sources_);
+ // TODO: use $parser
+ lexer_->set_identifier (ly_symbol2scm ("parser"),
+ self_scm ());
output_basename_ = out_name;
lexer_->main_input_name_ = name;
lexer_ = (parent == 0 ? new My_lily_lexer (sources_)
: new My_lily_lexer (*parent));
+
+ SCM oldmod = scm_current_module ();
+ scm_set_current_module (ly_car (lexer_->scopes_));
+
+ // TODO: use $parser
+ lexer_->set_identifier (ly_symbol2scm ("parser"),
+ self_scm ());
+
lexer_->main_input_name_ = "<string>";
lexer_->main_input_b_ = true;
parent->main_input_b_ = lexer_->main_input_b_;
}
+ scm_set_current_module (oldmod);
delete lexer_;
lexer_ = 0;
}
SCM_ASSERT_TYPE (ly_c_string_p (name), name, SCM_ARG1, __FUNCTION__, "string");
char const *file = SCM_STRING_CHARS (name);
char const *extensions[] = {"ly", "", 0};
+
String file_name = global_path.find (file, extensions);
-
+
/* By default, use base name of input file for output file name,
write output to cwd; do not use root and directory parts of input
file name. */
File_name out_file_name (file_name);
+
+ global_path.append (out_file_name.dir_);
+
out_file_name.ext_ = "";
out_file_name.root_ = "";
out_file_name.dir_ = "";
My_lily_parser *parser = new My_lily_parser (&sources);
- // TODO: use $parser
- parser->lexer_->set_identifier (ly_symbol2scm ("parser"),
- parser->self_scm ());
parser->parse_file (init, file_name, out_file);
bool error = parser->error_level_;
SCM_ASSERT_TYPE (ly_c_symbol_p (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);
return SCM_UNSPECIFIED;
}