]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/pcase.el (pcase-defmacro): Fix `pcase-tests-macro`
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 3 Mar 2021 23:40:03 +0000 (18:40 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 3 Mar 2021 23:40:03 +0000 (18:40 -0500)
* lisp/emacs-lisp/radix-tree.el (radix-tree-leaf): Simplify accordingly.

lisp/emacs-lisp/pcase.el
lisp/emacs-lisp/radix-tree.el

index 4804180ac9b64862027d707704667c46159bf285..5342a0179d923a5b69d5a56cd1fd6142314d212e 100644 (file)
@@ -436,7 +436,13 @@ for the result of evaluating EXP (first arg to `pcase').
        (decl (assq 'declare body)))
     (when decl (setq body (remove decl body)))
     `(progn
-       (defun ,fsym ,args ,@body)
+       ;; FIXME: We use `eval-and-compile' here so that the pcase macro can be
+       ;; used in the same file where it's defined, but ideally, we should
+       ;; handle this using something similar to `overriding-plist-environment'
+       ;; but for `symbol-function' slots so compiling a file doesn't have the
+       ;; side-effect of defining the function.
+       (eval-and-compile
+         (defun ,fsym ,args ,@body))
        (define-symbol-prop ',fsym 'edebug-form-spec ',(cadr (assq 'debug decl)))
        (define-symbol-prop ',name 'pcase-macroexpander #',fsym))))
 
index 0905ac608bb1479fdad68959f986f9bf19902e56..fb6597535017cfc765b8c6e1a447815d160001a8 100644 (file)
@@ -194,14 +194,13 @@ If not found, return nil."
   "Return an alist of all bindings in TREE for prefixes of STRING."
   (radix-tree--prefixes tree string 0 nil))
 
-(eval-and-compile
-  (pcase-defmacro radix-tree-leaf (vpat)
-    "Pattern which matches a radix-tree leaf.
+(pcase-defmacro radix-tree-leaf (vpat)
+  "Pattern which matches a radix-tree leaf.
 The pattern VPAT is matched against the leaf's carried value."
-    ;; We used to use `(pred atom)', but `pcase' doesn't understand that
-    ;; `atom' is equivalent to the negation of `consp' and hence generates
-    ;; suboptimal code.
-    `(or `(t . ,,vpat) (and (pred (not consp)) ,vpat))))
+  ;; We used to use `(pred atom)', but `pcase' doesn't understand that
+  ;; `atom' is equivalent to the negation of `consp' and hence generates
+  ;; suboptimal code.
+  `(or `(t . ,,vpat) (and (pred (not consp)) ,vpat)))
 
 (defun radix-tree-iter-subtrees (tree fun)
   "Apply FUN to every immediate subtree of radix TREE.