From: "Basil L. Contovounesios" <contovob@tcd.ie>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: [Emacs-diffs] master 1691a51: * lisp/emacs-lisp/map.el: Make the functions generic
Date: Fri, 14 Dec 2018 14:57:56 +0000 [thread overview]
Message-ID: <87imzwgnpn.fsf@tcd.ie> (raw)
In-Reply-To: <jwvlg4tsbkj.fsf-monnier+gmane.emacs.devel@gnu.org> (Stefan Monnier's message of "Thu, 13 Dec 2018 10:17:50 -0500")
[-- Attachment #1: 0001-lisp-emacs-lisp-map.el-Fix-recent-changes.patch --]
[-- Type: text/x-diff, Size: 2396 bytes --]
From b6082c43742a4d971be3110b7d52c5eb1d52b215 Mon Sep 17 00:00:00 2001
From: "Basil L. Contovounesios" <contovob@tcd.ie>
Date: Fri, 14 Dec 2018 14:46:47 +0000
Subject: [PATCH] * lisp/emacs-lisp/map.el: Fix recent changes
(map-empty-p): Add method for lists which avoids computing their
entire length.
(map-contains-key): Check for alist membership by comparing against
DEFAULT argument returned by alist-get.
(map-put!): Reconcile argument name with that used in docstring.
---
lisp/emacs-lisp/map.el | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/lisp/emacs-lisp/map.el b/lisp/emacs-lisp/map.el
index 35759db627..78cedd3ab1 100644
--- a/lisp/emacs-lisp/map.el
+++ b/lisp/emacs-lisp/map.el
@@ -243,6 +243,9 @@ map-nested-elt
The default implementation delegates to `map-length'."
(zerop (map-length map)))
+(cl-defmethod map-empty-p ((map list))
+ (null map))
+
(cl-defgeneric map-contains-key (map key &optional testfn)
;; FIXME: The test function to use generally depends on the map object,
;; so specifying `testfn' here is problematic: e.g. for hash-tables
@@ -259,7 +262,8 @@ map-nested-elt
nil))
(cl-defmethod map-contains-key ((map list) key &optional testfn)
- (alist-get key map nil nil (or testfn #'equal)))
+ (let ((v '(nil)))
+ (not (eq v (alist-get key map v nil (or testfn #'equal))))))
(cl-defmethod map-contains-key ((map array) key &optional _testfn)
(and (integerp key)
@@ -332,16 +336,16 @@ map-merge-with
;; FIXME: I wish there was a way to avoid this η-redex!
(cl-defmethod map-into (map (_type (eql list))) (map-pairs map))
-(cl-defgeneric map-put! (map key v)
+(cl-defgeneric map-put! (map key value)
"Associate KEY with VALUE in MAP and return VALUE.
If KEY is already present in MAP, replace the associated value
with VALUE."
(map--dispatch map
:list (let ((p (assoc key map)))
- (if p (setcdr p v)
+ (if p (setcdr p value)
(error "No place to change the mapping for %S" key)))
- :hash-table (puthash key v map)
- :array (aset map key v)))
+ :hash-table (puthash key value map)
+ :array (aset map key value)))
;; There shouldn't be old source code referring to `map--put', yet we do
;; need to keep it for backward compatibility with .elc files where the
--
2.19.2
[-- Attachment #2: Type: text/plain, Size: 393 bytes --]
Stefan Monnier <monnier@iro.umontreal.ca> writes:
> Could you install this change?
Sorry, I don't have commit rights, so I attach the corresponding patch,
which also fixes an argument naming discrepancy in 'map-put!'.
I noticed that test/lisp/emacs-lisp/map-tests.el still uses map-put,
which is now obsolete. Should these tests be updated to test 'map-put!'
instead?
Thanks,
--
Basil
next prev parent reply other threads:[~2018-12-14 14:57 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20181211225418.14641.49501@vcs0.savannah.gnu.org>
[not found] ` <20181211225420.1E3692092C@vcs0.savannah.gnu.org>
2018-12-13 14:25 ` [Emacs-diffs] master 1691a51: * lisp/emacs-lisp/map.el: Make the functions generic Basil L. Contovounesios
2018-12-13 15:17 ` Stefan Monnier
2018-12-14 14:57 ` Basil L. Contovounesios [this message]
2018-12-14 16:05 ` Stefan Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87imzwgnpn.fsf@tcd.ie \
--to=contovob@tcd.ie \
--cc=emacs-devel@gnu.org \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.