From: Philipp Stephani Date: Mon, 9 Oct 2017 14:08:15 +0000 (+0200) Subject: Revert "Raise an error when detecting old-style backquotes." X-Git-Tag: emacs-27.0.90~6255 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=6abff55b5514515c5a28397b34aee478926af232;p=emacs.git Revert "Raise an error when detecting old-style backquotes." This reverts commit 9613690f6e51e2f2aa2bcbbede3e209d08cfaaad. --- diff --git a/etc/NEWS b/etc/NEWS index 0f4c6ae40f3..2332ba4d1f8 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -87,9 +87,6 @@ them through 'format' first. Even that is discouraged: for ElDoc support, you should set 'eldoc-documentation-function' instead of calling 'eldoc-message' directly. -** Old-style backquotes now generate an error. They have been -generating warnings for a decade. - * Lisp Changes in Emacs 27.1 diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 45fa188d6c8..590db570c56 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -2048,8 +2048,14 @@ With argument ARG, insert value in current buffer after the form." (not (eobp))) (setq byte-compile-read-position (point) byte-compile-last-position byte-compile-read-position) - (let* ((lread--unescaped-character-literals nil) + (let* ((lread--old-style-backquotes nil) + (lread--unescaped-character-literals nil) (form (read inbuffer))) + ;; Warn about the use of old-style backquotes. + (when lread--old-style-backquotes + (byte-compile-warn "!! The file uses old-style backquotes !! +This functionality has been obsolete for more than 10 years already +and will be removed soon. See (elisp)Backquote in the manual.")) (when lread--unescaped-character-literals (byte-compile-warn "unescaped character literals %s detected!" diff --git a/src/lread.c b/src/lread.c index c073fc4ce6d..6bc93b14817 100644 --- a/src/lread.c +++ b/src/lread.c @@ -1003,11 +1003,14 @@ load_error_handler (Lisp_Object data) return Qnil; } -static _Noreturn void -load_error_old_style_backquotes (void) +static void +load_warn_old_style_backquotes (Lisp_Object file) { - AUTO_STRING (format, "Loading `%s': old-style backquotes detected!"); - xsignal1 (Qerror, CALLN (Fformat_message, format, Vload_file_name)); + if (!NILP (Vlread_old_style_backquotes)) + { + AUTO_STRING (format, "Loading `%s': old-style backquotes detected!"); + CALLN (Fmessage, format, file); + } } static void @@ -1279,6 +1282,10 @@ Return t if the file exists and loads successfully. */) version = -1; + /* Check for the presence of old-style quotes and warn about them. */ + specbind (Qlread_old_style_backquotes, Qnil); + record_unwind_protect (load_warn_old_style_backquotes, file); + /* Check for the presence of unescaped character literals and warn about them. */ specbind (Qlread_unescaped_character_literals, Qnil); @@ -3171,7 +3178,10 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) first_in_list exception (old-style can still be obtained via "(\`" anyway). */ if (!new_backquote_flag && first_in_list && next_char == ' ') - load_error_old_style_backquotes (); + { + Vlread_old_style_backquotes = Qt; + goto default_label; + } else { Lisp_Object value; @@ -3222,7 +3232,10 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) return list2 (comma_type, value); } else - load_error_old_style_backquotes (); + { + Vlread_old_style_backquotes = Qt; + goto default_label; + } } case '?': { @@ -3410,6 +3423,7 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) row. */ FALLTHROUGH; default: + default_label: if (c <= 040) goto retry; if (c == NO_BREAK_SPACE) goto retry; @@ -4982,6 +4996,12 @@ variables, this must be set in the first line of a file. */); doc: /* List of buffers being read from by calls to `eval-buffer' and `eval-region'. */); Veval_buffer_list = Qnil; + DEFVAR_LISP ("lread--old-style-backquotes", Vlread_old_style_backquotes, + doc: /* Set to non-nil when `read' encounters an old-style backquote. +For internal use only. */); + Vlread_old_style_backquotes = Qnil; + DEFSYM (Qlread_old_style_backquotes, "lread--old-style-backquotes"); + DEFVAR_LISP ("lread--unescaped-character-literals", Vlread_unescaped_character_literals, doc: /* List of deprecated unescaped character literals encountered by `read'. diff --git a/test/lisp/emacs-lisp/bytecomp-tests.el b/test/lisp/emacs-lisp/bytecomp-tests.el index 1f85c269780..30d2a4753cf 100644 --- a/test/lisp/emacs-lisp/bytecomp-tests.el +++ b/test/lisp/emacs-lisp/bytecomp-tests.el @@ -534,18 +534,23 @@ literals (Bug#20852)." (ert-deftest bytecomp-tests--old-style-backquotes () "Check that byte compiling warns about old-style backquotes." + (should (boundp 'lread--old-style-backquotes)) (bytecomp-tests--with-temp-file source (write-region "(` (a b))" nil source) (bytecomp-tests--with-temp-file destination (let* ((byte-compile-dest-file-function (lambda (_) destination)) - (byte-compile-debug t) - (err (should-error (byte-compile-file source)))) + (byte-compile-error-on-warn t) + (byte-compile-debug t) + (err (should-error (byte-compile-file source)))) (should (equal (cdr err) - '("Loading `nil': old-style backquotes detected!"))))))) + (list "!! The file uses old-style backquotes !! +This functionality has been obsolete for more than 10 years already +and will be removed soon. See (elisp)Backquote in the manual."))))))) (ert-deftest bytecomp-tests-function-put () "Check `function-put' operates during compilation." + (should (boundp 'lread--old-style-backquotes)) (bytecomp-tests--with-temp-file source (dolist (form '((function-put 'bytecomp-tests--foo 'foo 1) (function-put 'bytecomp-tests--foo 'bar 2) diff --git a/test/src/lread-tests.el b/test/src/lread-tests.el index 3f41982eba1..ac730b4f005 100644 --- a/test/src/lread-tests.el +++ b/test/src/lread-tests.el @@ -173,13 +173,13 @@ literals (Bug#20852)." (should (string-suffix-p "/somelib.el" (caar load-history))))) (ert-deftest lread-tests--old-style-backquotes () - "Check that loading doesn't accept old-style backquotes." + "Check that loading warns about old-style backquotes." (lread-tests--with-temp-file file-name (write-region "(` (a b))" nil file-name) - (let ((data (should-error (load file-name nil :nomessage :nosuffix)))) - (should (equal (cdr data) - (list (concat (format-message "Loading `%s': " file-name) - "old-style backquotes detected!"))))))) + (should (equal (load file-name nil :nomessage :nosuffix) t)) + (should (equal (lread-tests--last-message) + (concat (format-message "Loading `%s': " file-name) + "old-style backquotes detected!"))))) (ert-deftest lread-lread--substitute-object-in-subtree () (let ((x (cons 0 1)))