X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fparse-scm.cc;h=51acd6e6ca658793d5b41e2f146bad608d45bd6e;hb=a40e959dba858a468bede003e1f07438c6700fad;hp=c4d535d85dbe94b3be7833b40997bc16d06c7479;hpb=3cc66e28a7194cf2bed29c9c85f9b6bd5dbc0fa4;p=lilypond.git 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; }