all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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

  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.