]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/parse-scm.cc
Updates. Add targets: tar, dist, release.
[lilypond.git] / lily / parse-scm.cc
index bd183b2bf2bf0396abeabed828c09cd4b050e9d5..77bf40143531341925760004d55fc59956fc1d70 100644 (file)
@@ -1,3 +1,12 @@
+/*
+  parse-scm --
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+
 #include <stdio.h>
 
 #include "ly-module.hh"
    
    Thanks to Gary Houston <ghouston@freewire.co.uk>  */
 SCM
-internal_ly_parse_scm (Parse_start * ps, bool safe)
+internal_ly_parse_scm (Parse_start * ps)
 {
-  Source_filesf =ps->start_location_.source_file_;
+  Source_file *sf =ps->start_location_.source_file_;
   SCM port = sf->get_port ();
 
-  int off = ps->start_location_.defined_str0_ - sf->to_str0();
+  int off = ps->start_location_.defined_str0_ - sf->to_str0 ();
   
   scm_seek (port, scm_long2num (off), scm_long2num (SEEK_SET));
   SCM from = scm_ftell (port);
@@ -26,19 +35,12 @@ internal_ly_parse_scm (Parse_start * ps, bool safe)
   SCM form;
   SCM answer = SCM_UNSPECIFIED;
 
-  /* Read expression from port */
+  /* Read expression from port */
   if (!SCM_EOF_OBJECT_P (form = scm_read (port)))
     {
-      if (safe)
-       {
-         static SCM safe_module;
-         if (!safe_module)
-           {
-             safe_module = scm_primitive_eval (ly_symbol2scm ("safe-module"));
-             ly_import_module (safe_module, scm_c_resolve_module ("lily"));
-           }
-         answer = scm_eval (form, safe_module);
-       }
+      SCM function = ly_scheme_function ("make-safe-lilypond-module");
+      if (ps->safe_)
+       answer = scm_eval (form, function);
       else
        answer = scm_primitive_eval (form);
     }
@@ -62,21 +64,15 @@ SCM
 catch_protected_parse_body (void *p)
 {
   Parse_start *ps = (Parse_start*) p;
-  return internal_ly_parse_scm (ps, false);
-}
-
-SCM
-safe_catch_protected_parse_body (void *p)
-{
-  Parse_start *ps = (Parse_start*) p;
-  return internal_ly_parse_scm (ps, true);
+  
+  return internal_ly_parse_scm (ps);
 }
 
 SCM 
-parse_handler (void * data, SCM tag, SCM args)
+parse_handler (void *data, SCM tag, SCM args)
 {
-  Parse_start* ps = (Parse_start*) data;
-  (void) tag;                  // prevent warning
+  Parse_start* ps = (Parse_start *) data;
+  (void) tag;
   
   ps->start_location_.error (_("GUILE signaled an error for the expression beginning here"));
 
@@ -105,27 +101,28 @@ parse_handler (void * data, SCM tag, SCM args)
 #endif
 
 SCM
-protected_ly_parse_scm (Parse_start *ps, bool safe)
+protected_ly_parse_scm (Parse_start *ps)
 {
   return scm_internal_catch (ly_symbol2scm (READ_ERROR),
-                            (safe ? &safe_catch_protected_parse_body
-                             : catch_protected_parse_body),
+                            &catch_protected_parse_body,
                             (void*) ps,
                             &parse_handler, (void*) ps);
 }
 
 bool parse_protect_global = true; 
 
-/* Try parsing.  Upon failure return SCM_UNDEFINED. */
+/* Try parsing.  Upon failure return SCM_UNDEFINED.
+   FIXME: shouldn't we return SCM_UNSCPECIFIED -- jcn  */
 SCM
-ly_parse_scm (char consts, int *n, Input i, bool safe)
+ly_parse_scm (char const *s, int *n, Input i, bool safe)
 {
-  Parse_start ps ;
+  Parse_start ps;
   ps.str = s;
   ps.start_location_ = i;
-
-  SCM ans = parse_protect_global ? protected_ly_parse_scm (&ps, safe)
-    : internal_ly_parse_scm (&ps, safe);
+  ps.safe_ = safe;
+  
+  SCM ans = parse_protect_global ? protected_ly_parse_scm (&ps)
+    : internal_ly_parse_scm (&ps);
   *n = ps.nchars;
 
   return ans;