summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/map.el
diff options
context:
space:
mode:
authorNicolas Petton <nicolas@petton.fr>2015-04-25 12:07:12 +0200
committerNicolas Petton <nicolas@petton.fr>2015-04-25 12:07:12 +0200
commit62879799ea0272f2ed3067252f20afb910bce352 (patch)
treea1807809cd3c548076182440975f4eb97d20df2f /lisp/emacs-lisp/map.el
parenteea2e831381a7b33ecfcd1c4dfee725a917befd3 (diff)
downloademacs-62879799ea0272f2ed3067252f20afb910bce352.tar.gz
Fix a false negative in `map-elt' with alists and values being nil
* lisp/emacs-lisp/map.el (map-elt): If map is an alist and key is found but its associated value is nil, do not return the default value. * test/automated/map-tests.el: Add a regression test.
Diffstat (limited to 'lisp/emacs-lisp/map.el')
-rw-r--r--lisp/emacs-lisp/map.el13
1 files changed, 11 insertions, 2 deletions
diff --git a/lisp/emacs-lisp/map.el b/lisp/emacs-lisp/map.el
index 3984b08c44e..ebf1fe9589a 100644
--- a/lisp/emacs-lisp/map.el
+++ b/lisp/emacs-lisp/map.el
@@ -50,7 +50,7 @@ If KEY is not found, return DEFAULT which defaults to nil.
If MAP is a list, `equal' is used to lookup KEY."
(map--dispatch map
- :list (or (cdr (assoc key map)) default)
+ :list (map--elt-list map key default)
:hash-table (gethash key map default)
:array (map--elt-array map key default)))
@@ -253,8 +253,17 @@ form.
(setq index (1+ index))))
map)))
+(defun map--elt-list (map key &optional default)
+ "Return the element of the list MAP at the index KEY.
+If KEY is not found, return DEFAULT which defaults to nil."
+ (let ((pair (assoc key map)))
+ (if pair
+ (cdr (assoc key map))
+ default)))
+
(defun map--elt-array (map key &optional default)
- "Return the element of the arary MAP at the index KEY, or DEFAULT if nil."
+ "Return the element of the array MAP at the index KEY.
+If KEY is not found, return DEFAULT which defaults to nil."
(let ((len (seq-length map)))
(or (and (>= key 0)
(<= key len)