#include "main.hh"
#include "paper-book.hh"
#include "source-file.hh"
+#include "lily-imports.hh"
/* Pass string to scm parser, read one expression.
Return result value and #chars read.
if (ps->safe_)
{
static SCM module = SCM_BOOL_F;
- if (module == SCM_BOOL_F)
+ if (scm_is_false (module))
{
- SCM function = ly_lily_module_constant ("make-safe-lilypond-module");
- module = scm_gc_protect_object (scm_call_0 (function));
+ module = scm_gc_protect_object (Lily::make_safe_lilypond_module ());
}
- // We define the parser so trusted Scheme functions can
- // access the real namespace underlying the parser.
- if (ps->parser_)
- scm_module_define (module, ly_symbol2scm ("parser"),
- ps->parser_->self_scm ());
return scm_eval (ps->form_, module);
}
return scm_primitive_eval (ps->form_);
{
Parse_start *ps = (Parse_start *) data;
- ps->location_.error (_ ("GUILE signaled an error for the expression beginning here"));
+ ps->location_.non_fatal_error
+ (_ ("GUILE signaled an error for the expression beginning here"));
if (scm_ilength (args) > 2)
scm_display_error_message (scm_cadr (args), scm_caddr (args), scm_current_error_port ());
}
SCM
-protected_ly_eval_scm (Parse_start *ps)
+protected_ly_eval_scm (void *ps)
{
/*
Catch #t : catch all Scheme level errors.
*/
return scm_internal_catch (SCM_BOOL_T,
catch_protected_eval_body,
- (void *) ps,
- &parse_handler, (void *) ps);
+ ps,
+ &parse_handler, ps);
}
bool parse_protect_global = true;
{
Parse_start ps (form, i, safe, parser);
- SCM ans = parse_protect_global ? protected_ly_eval_scm (&ps)
- : internal_ly_eval_scm (&ps);
+ SCM ans = scm_c_with_fluid
+ (Lily::f_location,
+ i.smobbed_copy (),
+ parse_protect_global ? protected_ly_eval_scm
+ : catch_protected_eval_body, (void *) &ps);
+
scm_remember_upto_here_1 (form);
return ans;
}