[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 5b77459: Don’t consider nested let-alist forms
From: |
Philipp Stephani |
Subject: |
[Emacs-diffs] master 5b77459: Don’t consider nested let-alist forms |
Date: |
Sat, 8 Oct 2016 16:37:23 +0000 (UTC) |
branch: master
commit 5b774598f4911975444120f56e448c4ca5f8c11f
Author: Philipp Stephani <address@hidden>
Commit: Philipp Stephani <address@hidden>
Don’t consider nested let-alist forms
See Bug#24641.
* lisp/emacs-lisp/let-alist.el (let-alist--deep-dot-search): Don’t
consider symbols in nested ‘let-alist’ forms.
* test/lisp/emacs-lisp/let-alist-tests.el
(let-alist--deep-dot-search--nested): Add a unit test.
---
lisp/emacs-lisp/let-alist.el | 5 +++++
test/lisp/emacs-lisp/let-alist-tests.el | 8 ++++++++
2 files changed, 13 insertions(+)
diff --git a/lisp/emacs-lisp/let-alist.el b/lisp/emacs-lisp/let-alist.el
index 3507a39..d706917 100644
--- a/lisp/emacs-lisp/let-alist.el
+++ b/lisp/emacs-lisp/let-alist.el
@@ -76,6 +76,11 @@ symbol, and each cdr is the same symbol without the `.'."
;; with other results in the clause below.
(list (cons data (intern (replace-match "" nil nil name)))))))
((not (consp data)) nil)
+ ((eq (car data) 'let-alist)
+ ;; For nested ‘let-alist’ forms, ignore symbols appearing in the
+ ;; inner body because they don’t refer to the alist currently
+ ;; being processed. See Bug#24641.
+ (let-alist--deep-dot-search (cadr data)))
(t (append (let-alist--deep-dot-search (car data))
(let-alist--deep-dot-search (cdr data))))))
diff --git a/test/lisp/emacs-lisp/let-alist-tests.el
b/test/lisp/emacs-lisp/let-alist-tests.el
index 80d418c..657a27a 100644
--- a/test/lisp/emacs-lisp/let-alist-tests.el
+++ b/test/lisp/emacs-lisp/let-alist-tests.el
@@ -88,4 +88,12 @@
'(cdr (assq 'baz (cdr (assq 'bar (cdr (assq 'foo var))))))))
(should (equal (let-alist--access-sexp '..foo.bar.baz 'var) '.foo.bar.baz)))
+(ert-deftest let-alist--deep-dot-search--nested ()
+ "Check that nested `let-alist' forms don't generate spurious bindings.
+See Bug#24641."
+ (should (equal (let-alist--deep-dot-search '(foo .bar (baz .qux)))
+ '((.bar . bar) (.qux . qux))))
+ (should (equal (let-alist--deep-dot-search '(foo .bar (let-alist .qux .baz)))
+ '((.bar . bar) (.qux . qux))))) ; no .baz
+
;;; let-alist.el ends here
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 5b77459: Don’t consider nested let-alist forms,
Philipp Stephani <=