]> git.eshelyaron.com Git - emacs.git/commitdiff
Declare nested backquotes unsupported in Pcase patterns (bug#72328)
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 24 Sep 2024 18:01:26 +0000 (14:01 -0400)
committerEshel Yaron <me@eshelyaron.com>
Fri, 27 Sep 2024 10:20:17 +0000 (12:20 +0200)
The current behavior is inconsistent with that of the normal backquote
macro, so to avoid surprises, warn about the use of nested backquotes.

* lisp/emacs-lisp/pcase.el (pcase--expand-\`): Warn about nested backquotes.

* lisp/emacs-lisp/testcover.el (testcover-analyze-coverage)
(testcover-analyze-coverage-wrapped-form): Avoid nested backquotes

(cherry picked from commit e8f5df5175170d36f526e46b63b3d428bb9a8950)

etc/NEWS
lisp/emacs-lisp/pcase.el
lisp/emacs-lisp/testcover.el

index 30b8c8fae9871f5bd828764e46d0e8db256582fe..aa0d1d6e7345850a53909c2b1db35807a73de6c9 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -365,6 +365,8 @@ mode.  Now, one needs to say (midnight-mode +1) instead.
 \f
 * Incompatible Lisp Changes in Emacs 31.1
 
+** Nested backquotes are not supported any more in Pcase patterns.
+
 ** The 'rx' category name 'chinese-two-byte' must now be spelled correctly.
 An old alternative name (without the first 'e') has been removed.
 
index fd6b0c8db5cb7cf39bee8f70778e87d662743519..fe62820f0cb2fe217f82afa2c1126d00757e58f4 100644 (file)
@@ -1172,7 +1172,10 @@ The predicate is the logical-AND of:
           (upatd (pcase--expand-\` (cdr qpat))))
       (if (and (eq (car-safe upata) 'quote) (eq (car-safe upatd) 'quote))
           `'(,(cadr upata) . ,(cadr upatd))
-        `(and (pred consp)
+        `(and ,@(when (eq (car qpat) '\`)
+                  `((guard ,(macroexp-warn-and-return
+                             "Nested ` are not supported" t nil nil qpat))))
+              (pred consp)
               (app car-safe ,upata)
               (app cdr-safe ,upatd)))))
    ((or (stringp qpat) (numberp qpat) (symbolp qpat)) `',qpat)
index fb4a2a82d07598b58541fbe65cd42176f85285ef..d916ca0f76afe91ac9ddc139f3a2d0c833087be0 100644 (file)
@@ -469,7 +469,7 @@ or return multiple values."
      ;; form to look odd. See bug#25316.
      'testcover-1value)
 
-    (`(\` ,bq-form)
+    (`(,'\` ,bq-form)
      (testcover-analyze-coverage-backquote-form bq-form))
 
     ((or 't 'nil (pred keywordp))
@@ -548,7 +548,7 @@ FORM is treated as if it will be evaluated."
        'testcover-1value))
     ((pred atom)
      'testcover-1value)
-    (`(\` ,bq-form)
+    (`(,'\` ,bq-form)
      (testcover-analyze-coverage-backquote-form bq-form))
     (`(defconst ,sym ,val . ,_)
      (push sym testcover-module-constants)