From e19c3cf18510ac6426cc4449f5de03ae671f4dcd Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sat, 3 Feb 2007 18:54:50 +0100 Subject: [PATCH] only skip 1 char if there is a scheme read error. otherwise skip entire SCM. --- lily/parse-scm.cc | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/lily/parse-scm.cc b/lily/parse-scm.cc index c4d535d85d..51acd6e6ca 100644 --- a/lily/parse-scm.cc +++ b/lily/parse-scm.cc @@ -37,6 +37,14 @@ internal_ly_parse_scm (Parse_start *ps) SCM answer = SCM_UNSPECIFIED; SCM form = scm_read (port); + + /* Reset read_buf for scm_ftell. + Shouldn't scm_read () do this for us? */ + scm_fill_input (port); + SCM to = scm_ftell (port); + ps->nchars = scm_to_int (to) - scm_to_int (from); + + /* Read expression from port. */ if (!SCM_EOF_OBJECT_P (form)) { @@ -54,12 +62,6 @@ internal_ly_parse_scm (Parse_start *ps) answer = scm_primitive_eval (form); } - /* Reset read_buf for scm_ftell. - Shouldn't scm_read () do this for us? */ - scm_fill_input (port); - SCM to = scm_ftell (port); - ps->nchars = scm_to_int (to) - scm_to_int (from); - /* Don't close the port here; if we re-enter this function via a continuation, then the next time we enter it, we'll get an error. It's a string port anyway, so there's no advantage to closing it @@ -81,18 +83,14 @@ SCM parse_handler (void *data, SCM tag, SCM args) { Parse_start *ps = (Parse_start *) data; - (void) tag; ps->start_location_.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 ()); - /* - The following is a kludge; we should probably search for - [a-z][0-9] (a note), and start before that. - */ - ps->nchars = 1; + if (tag == ly_symbol2scm ("read-error")) + ps->nchars = 1; return SCM_UNDEFINED; } -- 2.39.2