[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#36068: 27.0.50; Warning: unescaped character literals `?)' detected,
From: |
Noam Postavsky |
Subject: |
bug#36068: 27.0.50; Warning: unescaped character literals `?)' detected, `?\)' expected! |
Date: |
Tue, 04 Jun 2019 21:29:52 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) |
tags 36068 + patch
quit
>> Ah, I think the problem can be triggered any time you `read' an unescaped
>> literal outside of `load'. E.g., from emacs -Q:
>>
>> M-: (read "?)") RET
>
> Even byte-compiling a file containing such an unescaped literal sets
> lread--unescaped-character-literals in the global scope. I think this
> is where the real bug is.
Yes, agreed. Here's a patch.
>From ffa9c9e17bd6724107b6c3b5c49221b58d7c92ab Mon Sep 17 00:00:00 2001
From: Noam Postavsky <npostavs@gmail.com>
Date: Tue, 4 Jun 2019 21:26:06 -0400
Subject: [PATCH] Don't keep warning about unescaped literals (Bug#36068)
* lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Restore lost
let-binding of lread--unescaped-character-literals, so that unescaped
literals warning will only apply to the form just read.
* test/lisp/emacs-lisp/bytecomp-tests.el
(bytecomp-tests--unescaped-char-literals): Expand test to check that
we don't keep warning about old unescaped literals.
---
lisp/emacs-lisp/bytecomp.el | 5 +++--
test/lisp/emacs-lisp/bytecomp-tests.el | 32 +++++++++++++++++++-------------
2 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index dfbda8d43e..f8a5c264ab 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -2091,8 +2091,9 @@ (defun byte-compile-from-buffer (inbuffer)
(not (eobp)))
(setq byte-compile-read-position (point)
byte-compile-last-position byte-compile-read-position)
- (let ((form (read inbuffer))
- (warning (byte-run--unescaped-character-literals-warning)))
+ (let* ((lread--unescaped-character-literals nil)
+ (form (read inbuffer))
+ (warning (byte-run--unescaped-character-literals-warning)))
(when warning (byte-compile-warn "%s" warning))
(byte-compile-toplevel-file-form form)))
;; Compile pending forms at end of file.
diff --git a/test/lisp/emacs-lisp/bytecomp-tests.el
b/test/lisp/emacs-lisp/bytecomp-tests.el
index f45c9209c1..83162d250f 100644
--- a/test/lisp/emacs-lisp/bytecomp-tests.el
+++ b/test/lisp/emacs-lisp/bytecomp-tests.el
@@ -559,19 +559,25 @@ (ert-deftest bytecomp-tests--unescaped-char-literals ()
"Check that byte compiling warns about unescaped character
literals (Bug#20852)."
(should (boundp 'lread--unescaped-character-literals))
- (bytecomp-tests--with-temp-file source
- (write-region "(list ?) ?( ?; ?\" ?[ ?])" nil source)
- (bytecomp-tests--with-temp-file destination
- (let* ((byte-compile-dest-file-function (lambda (_) destination))
- (byte-compile-error-on-warn t)
- (byte-compile-debug t)
- (err (should-error (byte-compile-file source))))
- (should (equal (cdr err)
- (list (concat "unescaped character literals "
- "`?\"', `?(', `?)', `?;', `?[', `?]' "
- "detected, "
- "`?\\\"', `?\\(', `?\\)', `?\\;', `?\\[',
"
- "`?\\]' expected!"))))))))
+ (let ((byte-compile-error-on-warn t)
+ (byte-compile-debug t))
+ (bytecomp-tests--with-temp-file source
+ (write-region "(list ?) ?( ?; ?\" ?[ ?])" nil source)
+ (bytecomp-tests--with-temp-file destination
+ (let* ((byte-compile-dest-file-function (lambda (_) destination))
+ (err (should-error (byte-compile-file source))))
+ (should (equal (cdr err)
+ `(,(concat "unescaped character literals "
+ "`?\"', `?(', `?)', `?;', `?[', `?]' "
+ "detected, "
+ "`?\\\"', `?\\(', `?\\)', `?\\;', `?\\[', "
+ "`?\\]' expected!")))))))
+ ;; But don't warn in subsequent compilations (Bug#36068).
+ (bytecomp-tests--with-temp-file source
+ (write-region "(list 1 2 3)" nil source)
+ (bytecomp-tests--with-temp-file destination
+ (let ((byte-compile-dest-file-function (lambda (_) destination)))
+ (should (byte-compile-file source)))))))
(ert-deftest bytecomp-tests--old-style-backquotes ()
"Check that byte compiling warns about old-style backquotes."
--
2.11.0
- bug#36068: 27.0.50; Warning: unescaped character literals `?)' detected, `?\)' expected!, Michael Heerdegen, 2019/06/02
- bug#36068: 27.0.50; Warning: unescaped character literals `?)' detected, `?\)' expected!, Noam Postavsky, 2019/06/03
- bug#36068: 27.0.50; Warning: unescaped character literals `?)' detected, `?\)' expected!, Michael Heerdegen, 2019/06/03
- bug#36068: 27.0.50; Warning: unescaped character literals `?)' detected, `?\)' expected!, npostavs, 2019/06/03
- bug#36068: 27.0.50; Warning: unescaped character literals `?)' detected, `?\)' expected!, Michael Heerdegen, 2019/06/03
- bug#36068: 27.0.50; Warning: unescaped character literals `?)' detected, `?\)' expected!, Eli Zaretskii, 2019/06/03
- bug#36068: 27.0.50; Warning: unescaped character literals `?)' detected, `?\)' expected!, Andreas Schwab, 2019/06/03
- bug#36068: 27.0.50; Warning: unescaped character literals `?)' detected, `?\)' expected!, npostavs, 2019/06/03
- bug#36068: 27.0.50; Warning: unescaped character literals `?)' detected, `?\)' expected!, Andreas Schwab, 2019/06/03
- bug#36068: 27.0.50; Warning: unescaped character literals `?)' detected, `?\)' expected!,
Noam Postavsky <=
- bug#36068: 27.0.50; Warning: unescaped character literals `?)' detected, `?\)' expected!, Noam Postavsky, 2019/06/10