aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/emacs-lisp/map.el11
-rw-r--r--test/automated/map-tests.el5
2 files changed, 13 insertions, 3 deletions
diff --git a/lisp/emacs-lisp/map.el b/lisp/emacs-lisp/map.el
index 621c37f2b76..087ab286ac3 100644
--- a/lisp/emacs-lisp/map.el
+++ b/lisp/emacs-lisp/map.el
@@ -73,7 +73,7 @@ If MAP is an array, store nil at the index KEY."
73 (map--dispatch (m ,map m) 73 (map--dispatch (m ,map m)
74 :list (setq ,map (map--delete-alist m ,key)) 74 :list (setq ,map (map--delete-alist m ,key))
75 :hash-table (remhash ,key m) 75 :hash-table (remhash ,key m)
76 :array (aset m ,key nil)))) 76 :array (map--delete-array m ,key))))
77 77
78(defun map-nested-elt (map keys &optional default) 78(defun map-nested-elt (map keys &optional default)
79 "Travserse MAP using KEYS and return the looked up value or DEFAULT if nil. 79 "Travserse MAP using KEYS and return the looked up value or DEFAULT if nil.
@@ -261,13 +261,20 @@ form.
261 (seq-elt map key)) 261 (seq-elt map key))
262 default))) 262 default)))
263 263
264
265(defun map--delete-alist (map key) 264(defun map--delete-alist (map key)
266 "Return MAP with KEY removed." 265 "Return MAP with KEY removed."
267 (seq-remove (lambda (pair) 266 (seq-remove (lambda (pair)
268 (equal key (car pair))) 267 (equal key (car pair)))
269 map)) 268 map))
270 269
270(defun map--delete-array (map key)
271 "Set nil in the array MAP at the index KEY if present and return MAP."
272 (let ((len (seq-length map)))
273 (and (>= key 0)
274 (<= key len)
275 (aset m key nil)))
276 map)
277
271(defun map--into-hash-table (map) 278(defun map--into-hash-table (map)
272 "Convert MAP into a hash-table." 279 "Convert MAP into a hash-table."
273 (let ((ht (make-hash-table :size (map-length map) 280 (let ((ht (make-hash-table :size (map-length map)
diff --git a/test/automated/map-tests.el b/test/automated/map-tests.el
index f41cd70c4c5..5201116613e 100644
--- a/test/automated/map-tests.el
+++ b/test/automated/map-tests.el
@@ -96,7 +96,10 @@ Evaluate BODY for each created map.
96(ert-deftest test-map-delete () 96(ert-deftest test-map-delete ()
97 (with-maps-do map 97 (with-maps-do map
98 (map-delete map 1) 98 (map-delete map 1)
99 (assert (null (map-elt map 1))))) 99 (assert (null (map-elt map 1))))
100 (with-maps-do map
101 (map-delete map -2)
102 (assert (null (map-elt map -2)))))
100 103
101(ert-deftest test-map-delete-return-value () 104(ert-deftest test-map-delete-return-value ()
102 (let ((ht (make-hash-table))) 105 (let ((ht (make-hash-table)))