From db30296baed2d9c3c80eb89f6fae256e81ee2fbc Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Tue, 9 May 2017 19:44:09 -0400 Subject: [PATCH] Put re-loaded file back at start of load-history (bug#26837) * src/lread.c (readevalloop): Fix the "whole buffer" check to operate in the correct buffer. (Feval_buffer): Move point back to the start after checking for lexical binding. * test/src/lread-tests.el (lread-test-bug26837): New test. * test/data/somelib.el, test/data/somelib2.el: New test data files. --- src/lread.c | 3 ++- test/data/somelib.el | 7 +++++++ test/data/somelib2.el | 7 +++++++ test/src/lread-tests.el | 13 +++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 test/data/somelib.el create mode 100644 test/data/somelib2.el diff --git a/src/lread.c b/src/lread.c index 6467043b1da..f0ad0c28e56 100644 --- a/src/lread.c +++ b/src/lread.c @@ -1885,7 +1885,7 @@ readevalloop (Lisp_Object readcharfun, /* On the first cycle, we can easily test here whether we are reading the whole buffer. */ if (b && first_sexp) - whole_buffer = (PT == BEG && ZV == Z); + whole_buffer = (BUF_PT (b) == BUF_BEG (b) && BUF_ZV (b) == BUF_Z (b)); instream = stream; read_next: @@ -2008,6 +2008,7 @@ This function preserves the position of point. */) record_unwind_protect (save_excursion_restore, save_excursion_save ()); BUF_TEMP_SET_PT (XBUFFER (buf), BUF_BEGV (XBUFFER (buf))); specbind (Qlexical_binding, lisp_file_lexically_bound_p (buf) ? Qt : Qnil); + BUF_TEMP_SET_PT (XBUFFER (buf), BUF_BEGV (XBUFFER (buf))); readevalloop (buf, 0, filename, !NILP (printflag), unibyte, Qnil, Qnil, Qnil); unbind_to (count, Qnil); diff --git a/test/data/somelib.el b/test/data/somelib.el new file mode 100644 index 00000000000..7b8d4037396 --- /dev/null +++ b/test/data/somelib.el @@ -0,0 +1,7 @@ +;;; -*- lexical-binding: t; -*- + +;; blah + +(defun somefunc () t) + +(provide 'somelib) diff --git a/test/data/somelib2.el b/test/data/somelib2.el new file mode 100644 index 00000000000..05156145a22 --- /dev/null +++ b/test/data/somelib2.el @@ -0,0 +1,7 @@ +;;; -*- lexical-binding: t; -*- + +;; blah + +(defun somefunc2 () t) + +(provide 'somelib2) diff --git a/test/src/lread-tests.el b/test/src/lread-tests.el index 84342348d45..0427fe64e4a 100644 --- a/test/src/lread-tests.el +++ b/test/src/lread-tests.el @@ -142,4 +142,17 @@ literals (Bug#20852)." "unescaped character literals " "\", (, ), ;, [, ] detected!"))))) +(ert-deftest lread-test-bug26837 () + "Test for http://debbugs.gnu.org/26837 ." + (let ((load-path (cons + (file-name-as-directory + (expand-file-name "data" (getenv "EMACS_TEST_DIRECTORY"))) + load-path))) + (load "somelib" nil t) + (should (string-suffix-p "/somelib.el" (caar load-history))) + (load "somelib2" nil t) + (should (string-suffix-p "/somelib2.el" (caar load-history))) + (load "somelib" nil t) + (should (string-suffix-p "/somelib.el" (caar load-history))))) + ;;; lread-tests.el ends here -- 2.39.2