* [PATCH 1/2] Add new variable to force new-style backquote interpretation. [not found] <CAArVCkRj3AhF0EDaSKu7a4zu1rYOx8Ac7+Hhj6gcC3sJQRGLtg@mail.gmail.com> @ 2017-12-29 20:59 ` Philipp Stephani 2017-12-29 20:59 ` [PATCH 2/2] Improve error message for old-style backquotes Philipp Stephani 2017-12-30 6:19 ` [PATCH 1/2] Add new variable to force new-style backquote interpretation Paul Eggert 0 siblings, 2 replies; 9+ messages in thread From: Philipp Stephani @ 2017-12-29 20:59 UTC (permalink / raw) To: emacs-devel; +Cc: Philipp Stephani * src/lread.c (syms_of_lread): Add new variable 'force-new-style-backquotes'. (read_internal_start): Use it. * test/src/lread-tests.el (lread-tests--force-new-style-backquotes): New test. * etc/NEWS: Document new variable. --- etc/NEWS | 3 ++- src/lread.c | 19 ++++++++++++++----- test/src/lread-tests.el | 8 ++++++++ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 64c74c0d56..33841c087d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -181,7 +181,8 @@ 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. +generating warnings for a decade. To interpret old-style backquotes +as new-style, bind the new variable 'force-new-style-backquotes' to t. \f * Lisp Changes in Emacs 27.1 diff --git a/src/lread.c b/src/lread.c index 52897b4fcc..57cb0a5e48 100644 --- a/src/lread.c +++ b/src/lread.c @@ -147,10 +147,10 @@ static ptrdiff_t prev_saved_doc_string_length; /* This is the file position that string came from. */ static file_offset prev_saved_doc_string_position; -/* True means inside a new-style backquote - with no surrounding parentheses. - Fread initializes this to false, so we need not specbind it - or worry about what happens to it when there is an error. */ +/* True means inside a new-style backquote with no surrounding + parentheses. Fread initializes this to the value of + `force_new_style_backquotes', so we need not specbind it or worry + about what happens to it when there is an error. */ static bool new_backquote_flag; /* A list of file names for files being loaded in Fload. Used to @@ -2187,7 +2187,7 @@ read_internal_start (Lisp_Object stream, Lisp_Object start, Lisp_Object end) Lisp_Object retval; readchar_count = 0; - new_backquote_flag = 0; + new_backquote_flag = force_new_style_backquotes; /* We can get called from readevalloop which may have set these already. */ if (! HASH_TABLE_P (read_objects_map) @@ -5006,6 +5006,15 @@ Note that if you customize this, obviously it will not affect files that are loaded before your customizations are read! */); load_prefer_newer = 0; + DEFVAR_BOOL ("force-new-style-backquotes", force_new_style_backquotes, + doc: /* Non-nil means to always use the current syntax for backquotes. +If nil, `load' and `read' raise errors when encountering some +old-style variants of backquote and comma. If non-nil, these +constructs are always interpreted as described in the Info node +`(elisp)Backquotes', even if that interpretation is incompatible with +previous versions of Emacs. */); + force_new_style_backquotes = false; + /* Vsource_directory was initialized in init_lread. */ DEFSYM (Qcurrent_load_list, "current-load-list"); diff --git a/test/src/lread-tests.el b/test/src/lread-tests.el index 3f41982eba..4dfed13be7 100644 --- a/test/src/lread-tests.el +++ b/test/src/lread-tests.el @@ -181,6 +181,14 @@ lread-tests--last-message (list (concat (format-message "Loading `%s': " file-name) "old-style backquotes detected!"))))))) +(ert-deftest lread-tests--force-new-style-backquotes () + (let ((data (should-error (read "(` (a b))")))) + (should (equal (cdr data) + '("Loading `nil': old-style backquotes detected!")))) + (should (equal (let ((force-new-style-backquotes t)) + (read "(` (a b))")) + '(`(a b))))) + (ert-deftest lread-lread--substitute-object-in-subtree () (let ((x (cons 0 1))) (setcar x x) -- 2.15.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/2] Improve error message for old-style backquotes 2017-12-29 20:59 ` [PATCH 1/2] Add new variable to force new-style backquote interpretation Philipp Stephani @ 2017-12-29 20:59 ` Philipp Stephani 2017-12-30 6:19 ` [PATCH 1/2] Add new variable to force new-style backquote interpretation Paul Eggert 1 sibling, 0 replies; 9+ messages in thread From: Philipp Stephani @ 2017-12-29 20:59 UTC (permalink / raw) To: emacs-devel; +Cc: Philipp Stephani * src/lread.c (load_error_old_style_backquotes): Improve error message if no file is being loaded. * test/src/lread-tests.el (lread-tests--force-new-style-backquotes): Adapt test. --- src/lread.c | 12 ++++++++++-- test/src/lread-tests.el | 3 +-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/lread.c b/src/lread.c index 57cb0a5e48..5f8c85e769 100644 --- a/src/lread.c +++ b/src/lread.c @@ -1006,8 +1006,16 @@ load_error_handler (Lisp_Object data) static _Noreturn void load_error_old_style_backquotes (void) { - AUTO_STRING (format, "Loading `%s': old-style backquotes detected!"); - xsignal1 (Qerror, CALLN (Fformat_message, format, Vload_file_name)); + if (NILP (Vload_file_name)) + { + AUTO_STRING (message, "Old-style backquotes detected!"); + xsignal1 (Qerror, message); + } + else + { + AUTO_STRING (format, "Loading `%s': old-style backquotes detected!"); + xsignal1 (Qerror, CALLN (Fformat_message, format, Vload_file_name)); + } } static void diff --git a/test/src/lread-tests.el b/test/src/lread-tests.el index 4dfed13be7..2ac3cdb2f0 100644 --- a/test/src/lread-tests.el +++ b/test/src/lread-tests.el @@ -183,8 +183,7 @@ lread-tests--last-message (ert-deftest lread-tests--force-new-style-backquotes () (let ((data (should-error (read "(` (a b))")))) - (should (equal (cdr data) - '("Loading `nil': old-style backquotes detected!")))) + (should (equal (cdr data) '("Old-style backquotes detected!")))) (should (equal (let ((force-new-style-backquotes t)) (read "(` (a b))")) '(`(a b))))) -- 2.15.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] Add new variable to force new-style backquote interpretation. 2017-12-29 20:59 ` [PATCH 1/2] Add new variable to force new-style backquote interpretation Philipp Stephani 2017-12-29 20:59 ` [PATCH 2/2] Improve error message for old-style backquotes Philipp Stephani @ 2017-12-30 6:19 ` Paul Eggert 2017-12-30 9:02 ` Philipp Stephani 1 sibling, 1 reply; 9+ messages in thread From: Paul Eggert @ 2017-12-30 6:19 UTC (permalink / raw) To: Philipp Stephani, emacs-devel; +Cc: Philipp Stephani Why not simply take the new interpretation for backquotes? That would be simpler than adding a backward-compatibility variable that I suspect nobody will ever need. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] Add new variable to force new-style backquote interpretation. 2017-12-30 6:19 ` [PATCH 1/2] Add new variable to force new-style backquote interpretation Paul Eggert @ 2017-12-30 9:02 ` Philipp Stephani 2017-12-30 23:07 ` Paul Eggert 0 siblings, 1 reply; 9+ messages in thread From: Philipp Stephani @ 2017-12-30 9:02 UTC (permalink / raw) To: Paul Eggert; +Cc: Philipp Stephani, emacs-devel [-- Attachment #1: Type: text/plain, Size: 458 bytes --] Paul Eggert <eggert@cs.ucla.edu> schrieb am Sa., 30. Dez. 2017 um 07:19 Uhr: > Why not simply take the new interpretation for backquotes? That would be > simpler > than adding a backward-compatibility variable that I suspect nobody will > ever need. > As discussed in http://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00051.html, we (mostly) agreed to first turn them into errors because otherwise the interpretation would suddenly silently change. [-- Attachment #2: Type: text/html, Size: 812 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] Add new variable to force new-style backquote interpretation. 2017-12-30 9:02 ` Philipp Stephani @ 2017-12-30 23:07 ` Paul Eggert 2017-12-30 23:29 ` Philipp Stephani 0 siblings, 1 reply; 9+ messages in thread From: Paul Eggert @ 2017-12-30 23:07 UTC (permalink / raw) To: Philipp Stephani; +Cc: Philipp Stephani, emacs-devel Philipp Stephani wrote: > As discussed in > http://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00051.html, we > (mostly) agreed to first turn them into errors And we've done that in Emacs 26, right? So in Emacs 27 we can remove support for old-style backquotes; we don't need a new variable to enable old-style backquotes dynamically. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] Add new variable to force new-style backquote interpretation. 2017-12-30 23:07 ` Paul Eggert @ 2017-12-30 23:29 ` Philipp Stephani 2017-12-31 0:40 ` Paul Eggert 2017-12-31 5:08 ` Stefan Monnier 0 siblings, 2 replies; 9+ messages in thread From: Philipp Stephani @ 2017-12-30 23:29 UTC (permalink / raw) To: Paul Eggert; +Cc: Philipp Stephani, emacs-devel [-- Attachment #1: Type: text/plain, Size: 874 bytes --] Paul Eggert <eggert@cs.ucla.edu> schrieb am So., 31. Dez. 2017 um 00:07 Uhr: > Philipp Stephani wrote: > > As discussed in > > http://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00051.html, we > > (mostly) agreed to first turn them into errors > > And we've done that in Emacs 26, right? No, only in master (i.e. Emacs 27), see http://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00056.html > So in Emacs 27 we can remove support for > old-style backquotes; Only in Emacs 28, because 26 will still have old-style backquotes only. > we don't need a new variable to enable old-style > backquotes dynamically. > My patch conditionally enables new-style backquotes; there's no way to re-enable old-style backquotes once they generate errors. The assumption is that everyone should migrate to new-style once they get the errors, and not re-enable old-style. [-- Attachment #2: Type: text/html, Size: 1679 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] Add new variable to force new-style backquote interpretation. 2017-12-30 23:29 ` Philipp Stephani @ 2017-12-31 0:40 ` Paul Eggert 2018-01-07 13:21 ` Philipp Stephani 2017-12-31 5:08 ` Stefan Monnier 1 sibling, 1 reply; 9+ messages in thread From: Paul Eggert @ 2017-12-31 0:40 UTC (permalink / raw) To: Philipp Stephani; +Cc: Philipp Stephani, emacs-devel Philipp Stephani wrote: > > Only in Emacs 28, because 26 will still have old-style backquotes only. Ah, OK, I was turned around then: this variable is for forward-compatibility and not backward. I suggest mentioning in the doc string that setting the variable makes Emacs compatible with planned-for-28 behavior, and that the variable is planned to go away in Emacs 28. (It's a temporary variable, so to speak....) ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] Add new variable to force new-style backquote interpretation. 2017-12-31 0:40 ` Paul Eggert @ 2018-01-07 13:21 ` Philipp Stephani 0 siblings, 0 replies; 9+ messages in thread From: Philipp Stephani @ 2018-01-07 13:21 UTC (permalink / raw) To: Paul Eggert; +Cc: Philipp Stephani, emacs-devel [-- Attachment #1: Type: text/plain, Size: 605 bytes --] Paul Eggert <eggert@cs.ucla.edu> schrieb am So., 31. Dez. 2017 um 01:40 Uhr: > Philipp Stephani wrote: > > > > Only in Emacs 28, because 26 will still have old-style backquotes only. > > Ah, OK, I was turned around then: this variable is for > forward-compatibility and > not backward. I suggest mentioning in the doc string that setting the > variable > makes Emacs compatible with planned-for-28 behavior, and that the variable > is > planned to go away in Emacs 28. (It's a temporary variable, so to > speak....) > Good point, I've amended the docstring and pushed the patch to master as ddb74b2027. [-- Attachment #2: Type: text/html, Size: 903 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] Add new variable to force new-style backquote interpretation. 2017-12-30 23:29 ` Philipp Stephani 2017-12-31 0:40 ` Paul Eggert @ 2017-12-31 5:08 ` Stefan Monnier 1 sibling, 0 replies; 9+ messages in thread From: Stefan Monnier @ 2017-12-31 5:08 UTC (permalink / raw) To: emacs-devel >> > As discussed in >> > http://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00051.html, we >> > (mostly) agreed to first turn them into errors Still looks like a complete waste of time to me. I still haven't seen a single example of code which works in Emacs-25 (say) and fails in a byzantine manner if we silently drop support for old-style backquotes. OTOH we have already seen at least one example of code which works correctly in Emacs-25, works correctly if we drop support for old-style backquotes, and yet fails with this "in-between" support. So not only it's extra work for very little benefit (i.e. try and protect us from a hypothetical case no-one has ever seen in the wild) but it even costs us a known bug. Sorry, but the tradeoff really doesn't look good from here. Stefan ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2018-01-07 13:21 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <CAArVCkRj3AhF0EDaSKu7a4zu1rYOx8Ac7+Hhj6gcC3sJQRGLtg@mail.gmail.com> 2017-12-29 20:59 ` [PATCH 1/2] Add new variable to force new-style backquote interpretation Philipp Stephani 2017-12-29 20:59 ` [PATCH 2/2] Improve error message for old-style backquotes Philipp Stephani 2017-12-30 6:19 ` [PATCH 1/2] Add new variable to force new-style backquote interpretation Paul Eggert 2017-12-30 9:02 ` Philipp Stephani 2017-12-30 23:07 ` Paul Eggert 2017-12-30 23:29 ` Philipp Stephani 2017-12-31 0:40 ` Paul Eggert 2018-01-07 13:21 ` Philipp Stephani 2017-12-31 5:08 ` Stefan Monnier
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).