]> git.eshelyaron.com Git - emacs.git/commitdiff
Make let-alist work with vectors
authorLars Ingebrigtsen <larsi@gnus.org>
Sun, 28 Jul 2019 21:28:18 +0000 (23:28 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sun, 28 Jul 2019 21:28:24 +0000 (23:28 +0200)
* lisp/emacs-lisp/let-alist.el (let-alist--deep-dot-search):
Descend into vectors, too, looking for dotted variables (bug#23244).

Test case:

(let-alist '((a . 1) (b . 2))
  `[,(+ .a) ,(+ .a .b .b)])

lisp/emacs-lisp/let-alist.el
test/lisp/emacs-lisp/let-alist-tests.el

index dc54342eab630ba1e4e416866bd4beb6cfa3da83..a9bb31113b9f9c421ab9c15299ec83ef28a09df7 100644 (file)
@@ -75,6 +75,8 @@ symbol, and each cdr is the same symbol without the `.'."
         ;; Return the cons cell inside a list, so it can be appended
         ;; with other results in the clause below.
         (list (cons data (intern (replace-match "" nil nil name)))))))
+   ((vectorp data)
+    (apply #'nconc (mapcar #'let-alist--deep-dot-search data)))
    ((not (consp data)) nil)
    ((eq (car data) 'let-alist)
     ;; For nested ‘let-alist’ forms, ignore symbols appearing in the
index 31db4a91dccb9b6a47851b52addf72f0a0341083..9c3f2a5928f5bc380a981278f3bb61c712794b6b 100644 (file)
@@ -95,4 +95,9 @@ See Bug#24641."
   (should (equal (let-alist--deep-dot-search '(foo .bar (let-alist .qux .baz)))
                  '((.bar . bar) (.qux . qux)))))  ; no .baz
 
+(ert-deftest let-alist--vectors ()
+  (should (equal (let-alist '((a . 1) (b . 2))
+                   `[,(+ .a) ,(+ .a .b .b)])
+                 [1 5])))
+
 ;;; let-alist.el ends here