GNU bug report logs -
#70524
[PATCH] Fix `map-elt` with `setf` for subplaces
Previous Next
Reported by: Okamsn <okamsn <at> protonmail.com>
Date: Tue, 23 Apr 2024 02:12:03 UTC
Severity: normal
Tags: patch
Done: Michael Heerdegen <michael_heerdegen <at> web.de>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Hello,
Currently, the use
(let ((arr (vector 0 1 2 3 4 5 6)))
(setf (map-elt (cl-subseq arr 3) 0)
27)
arr)
expands to
(let ((arr (vector 0 1 2 3 4 5 6)))
(let* ((v arr))
(condition-case nil
(with-no-warnings
(map-put! (cl-subseq v 3) 0 27 nil))
(map-not-inplace
(let* ((new (map-insert (cl-subseq v 3) 0 27)))
(progn
(cl-replace v new :start1 3 :end1 nil)
new))
27)))
arr)
which does not modify the original variable `arr` due to how `map-put!`
is being used. With the attached patch, it would expand to
(let ((arr (vector 0 1 2 3 4 5 6)))
(let* ((v arr))
(condition-case nil
(with-no-warnings
(let* ((m (cl-subseq v 3)))
(progn
(map-put! m 0 27 nil)
(let* ((new m))
(progn
(cl-replace v new :start1 3 :end1 nil)
new))
27)))
(map-not-inplace
(let* ((new (map-insert (cl-subseq v 3) 0 27)))
(progn
(cl-replace v new :start1 3 :end1 nil)
new))
27)))
arr)
which correctly sets the value using `cl-replace` as the setter for
`cl-subseq`.
Thank you.
[0001-Make-setf-with-map-elt-work-with-subplaces.patch (text/x-patch, attachment)]
This bug report was last modified 1 year and 16 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.