emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master b354935 1/2: Fix `memql' for bignums


From: Paul Eggert
Subject: [Emacs-diffs] master b354935 1/2: Fix `memql' for bignums
Date: Thu, 30 May 2019 17:58:20 -0400 (EDT)

branch: master
commit b354935902d3820f59e34e18a47264122e99c1a4
Author: Mattias EngdegÄrd <address@hidden>
Commit: Paul Eggert <address@hidden>

    Fix `memql' for bignums
    
    * src/fns.c (Fmemql): Make `memql' work for bignums.
    * test/src/fns-tests.el (test-bignum-eql): Also test `memql'.
---
 src/fns.c             | 34 ++++++++++++++++++++++++----------
 test/src/fns-tests.el |  3 ++-
 2 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/src/fns.c b/src/fns.c
index 6b1f733..da830a9 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -1567,18 +1567,32 @@ DEFUN ("memql", Fmemql, Smemql, 2, 2, 0,
 The value is actually the tail of LIST whose car is ELT.  */)
   (Lisp_Object elt, Lisp_Object list)
 {
-  if (!FLOATP (elt))
-    return Fmemq (elt, list);
-
-  Lisp_Object tail = list;
-  FOR_EACH_TAIL (tail)
+  if (FLOATP (elt))
     {
-      Lisp_Object tem = XCAR (tail);
-      if (FLOATP (tem) && same_float (elt, tem))
-       return tail;
+      Lisp_Object tail = list;
+      FOR_EACH_TAIL (tail)
+        {
+          Lisp_Object tem = XCAR (tail);
+          if (FLOATP (tem) && same_float (elt, tem))
+            return tail;
+        }
+      CHECK_LIST_END (tail, list);
+      return Qnil;
     }
-  CHECK_LIST_END (tail, list);
-  return Qnil;
+  else if (BIGNUMP (elt))
+    {
+      Lisp_Object tail = list;
+      FOR_EACH_TAIL (tail)
+        {
+          Lisp_Object tem = XCAR (tail);
+          if (equal_no_quit (elt, tem))
+            return tail;
+        }
+      CHECK_LIST_END (tail, list);
+      return Qnil;
+    }
+  else
+    return Fmemq (elt, list);
 }
 
 DEFUN ("assq", Fassq, Sassq, 2, 2, 0,
diff --git a/test/src/fns-tests.el b/test/src/fns-tests.el
index 6ebab42..a9d4d11 100644
--- a/test/src/fns-tests.el
+++ b/test/src/fns-tests.el
@@ -614,7 +614,8 @@
     (should (eq x x))
     (should (eql x y))
     (should (equal x y))
-    (should-not (eql x 0.0e+NaN))))
+    (should-not (eql x 0.0e+NaN))
+    (should (memql x (list y)))))
 
 (ert-deftest test-bignum-hash ()
   "Test that hash tables work for bignums."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]