diff options
author | Nicolas Petton <nicolas@petton.fr> | 2015-04-25 12:07:12 +0200 |
---|---|---|
committer | Nicolas Petton <nicolas@petton.fr> | 2015-04-25 12:07:12 +0200 |
commit | 62879799ea0272f2ed3067252f20afb910bce352 (patch) | |
tree | a1807809cd3c548076182440975f4eb97d20df2f /lisp/emacs-lisp/map.el | |
parent | eea2e831381a7b33ecfcd1c4dfee725a917befd3 (diff) | |
download | emacs-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.el | 13 |
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) |