[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt
From: |
Nicolas Petton |
Subject: |
bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt |
Date: |
Thu, 02 Mar 2017 13:34:57 +0100 |
Nicolas Petton <nicolas@petton.fr> writes:
> The alist is indeed modified within the `map-delete' function, but in an
> unexpected way: if the first key is deleted, the variable `map' is
> `setq'ed, which has no effect outside of the function.
>
> One fix would be to make `map-delete' a macro:
Here's a fixed version:
(defmacro map-delete (map key)
"Delete KEY from MAP and return MAP.
No error is signaled if KEY is not a key of MAP. If MAP is an
array, store nil at the index KEY.
MAP can be a list, hash-table or array."
(macroexp-let2 nil key
`(progn
(map--dispatch ,map
:list (setf (alist-get ,key ,map nil t) nil)
:hash-table (remhash ,key ,map)
:array (and (>= ,key 0)
(<= ,key (seq-length ,map))
(aset ,map ,key nil)))
,map)))
And the associated regression test:
(ert-deftest test-map-delete-first-key-alist ()
(let ((alist '((a . 1) (b . 2) (c . 3))))
(map-delete alist 'a)
(should (null (map-elt alist 'a)))))
Cheers,
Nico
signature.asc
Description: PGP signature
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Tino Calancha, 2017/03/02
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Nicolas Petton, 2017/03/02
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Nicolas Petton, 2017/03/02
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Tino Calancha, 2017/03/02
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, npostavs, 2017/03/02
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt,
Nicolas Petton <=
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Tino Calancha, 2017/03/02
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Stefan Monnier, 2017/03/02
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Michael Heerdegen, 2017/03/03
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Michael Heerdegen, 2017/03/03
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Lars Ingebrigtsen, 2017/03/21
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Michael Heerdegen, 2017/03/22
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Lars Ingebrigtsen, 2017/03/22
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Noam Postavsky, 2017/03/22
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Lars Ingebrigtsen, 2017/03/22
- bug#25929: 25.2; map-delete doesn't delete permanently 1st alist elt, Michael Heerdegen, 2017/03/22