diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2019-07-28 23:28:18 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2019-07-28 23:28:24 +0200 |
commit | d7665ae8df47b24d297ed131eb42ebed446423a0 (patch) | |
tree | 0c8a9fbfdb2f2f0f5fc5e8b778c83b4e98013c38 | |
parent | 776872766cd3af5ef68785236dcc05b378e8f267 (diff) | |
download | emacs-d7665ae8df47b24d297ed131eb42ebed446423a0.tar.gz |
Make let-alist work with vectors
* 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)])
-rw-r--r-- | lisp/emacs-lisp/let-alist.el | 2 | ||||
-rw-r--r-- | test/lisp/emacs-lisp/let-alist-tests.el | 5 |
2 files changed, 7 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/let-alist.el b/lisp/emacs-lisp/let-alist.el index dc54342eab6..a9bb31113b9 100644 --- a/lisp/emacs-lisp/let-alist.el +++ b/lisp/emacs-lisp/let-alist.el @@ -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 diff --git a/test/lisp/emacs-lisp/let-alist-tests.el b/test/lisp/emacs-lisp/let-alist-tests.el index 31db4a91dcc..9c3f2a5928f 100644 --- a/test/lisp/emacs-lisp/let-alist-tests.el +++ b/test/lisp/emacs-lisp/let-alist-tests.el @@ -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 |