1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-15 17:00:26 +00:00

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.
This commit is contained in:
Nicolas Petton 2015-04-25 12:07:12 +02:00
parent eea2e83138
commit 62879799ea
2 changed files with 17 additions and 2 deletions

View File

@ -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)

View File

@ -66,6 +66,12 @@ Evaluate BODY for each created map.
(with-maps-do map
(assert (= 5 (map-elt map 7 5)))))
(ert-deftest test-map-elt-with-nil-value ()
(assert (null (map-elt '((a . 1)
(b))
'b
'2))))
(ert-deftest test-map-put ()
(with-maps-do map
(map-put map 2 'hello)