From 62879799ea0272f2ed3067252f20afb910bce352 Mon Sep 17 00:00:00 2001 From: Nicolas Petton Date: Sat, 25 Apr 2015 12:07:12 +0200 Subject: 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. --- lisp/emacs-lisp/map.el | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'lisp/emacs-lisp/map.el') 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) -- cgit v1.2.1