]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix reporting of read error line/columns in the init file
authorLars Ingebrigtsen <larsi@gnus.org>
Fri, 25 Mar 2022 16:20:35 +0000 (17:20 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Fri, 25 Mar 2022 16:20:35 +0000 (17:20 +0100)
* src/lread.c (invalid_syntax_lisp): The comments here said that
we were supposed to be called with point in the readcharfun
buffer.  This was not the case (at least) when reading the Emacs
init file, so the reported line/column was always wrong (1 and 0,
respectively) (bug#54550).

src/lread.c

index d7b56c5087ebd329bbf4cccef2ac61f0e757f428..6130300b0a2621fd5a5bc83f8dce4927dedd3a55 100644 (file)
@@ -550,13 +550,21 @@ invalid_syntax_lisp (Lisp_Object s, Lisp_Object readcharfun)
 {
   if (BUFFERP (readcharfun))
     {
+      ptrdiff_t line, column;
+
+      /* Get the line/column in the readcharfun buffer.  */
+      {
+       specpdl_ref count = SPECPDL_INDEX ();
+
+       record_unwind_protect_excursion ();
+       set_buffer_internal (XBUFFER (readcharfun));
+       line = count_lines (BEGV_BYTE, PT_BYTE) + 1;
+       column = current_column ();
+       unbind_to (count, Qnil);
+      }
+
       xsignal (Qinvalid_read_syntax,
-              list3 (s,
-                     /* We should already be in the readcharfun
-                        buffer when this error is called, so no need
-                        to switch to it first. */
-                     make_fixnum (count_lines (BEGV_BYTE, PT_BYTE) + 1),
-                     make_fixnum (current_column ())));
+              list3 (s, make_fixnum (line), make_fixnum (column)));
     }
   else
     xsignal1 (Qinvalid_read_syntax, s);