X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fparse-scm.cc;h=51acd6e6ca658793d5b41e2f146bad608d45bd6e;hb=61f2895a1f65408ae7583c5498f0e8a12c886fc8;hp=fabc5c2e891d943161c56f765c25fae3558c1967;hpb=474c8729dc274a30558102a015a01fa5882673db;p=lilypond.git diff --git a/lily/parse-scm.cc b/lily/parse-scm.cc index fabc5c2e89..51acd6e6ca 100644 --- a/lily/parse-scm.cc +++ b/lily/parse-scm.cc @@ -31,9 +31,20 @@ internal_ly_parse_scm (Parse_start *ps) scm_seek (port, scm_long2num (off), scm_long2num (SEEK_SET)); SCM from = scm_ftell (port); + scm_set_port_line_x (port, scm_from_int (ps->start_location_.line_number () -1)); + scm_set_port_column_x (port, scm_from_int (ps->start_location_.column_number () -1)); + 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)) { @@ -51,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 @@ -78,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; }