diff src/fns.c @ 4910:6bc1f3f6cf0d

Make canoncase visible to Lisp; use it with chars in internal_equalp. src/ChangeLog addition: 2010-02-01 Aidan Kehoe <kehoea@parhasard.net> * fns.c (internal_equalp): Use bytecode_arithcompare, which takes two args, instead of passing a stack pointer to Feqlsign. Use CANONCASE(), not DOWNCASE(), for case-insensitive character comparison. Correct a comment here. * casefiddle.c (casify_object): New operation in this function, CASE_CANONICALIZE. (Fcanoncase): New function, used for case-insensitive comparison. * lisp.h: Make Fcanoncase, bytecode_arithcompare visible here. * bytecode.c (bytecode_arithcompare): Make this visible to other files. lisp/ChangeLog addition: 2010-02-01 Aidan Kehoe <kehoea@parhasard.net> * cl-macs.el (equalp): Remove special treatment for an #'equalp with a single character constant argument, it was incorrect (it used #'downcase instead of #'canoncase).
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 01 Feb 2010 17:57:04 +0000
parents 6ef8256a020a
children 48b63cd88a21 c17c857e20bf
line wrap: on
line diff
--- a/src/fns.c	Mon Feb 01 06:20:05 2010 -0600
+++ b/src/fns.c	Mon Feb 01 17:57:04 2010 +0000
@@ -2888,15 +2888,12 @@
   /* 2. If both numbers, compare with `='. */
   if (NUMBERP (obj1) && NUMBERP (obj2))
     {
-      Lisp_Object args[2];
-      args[0] = obj1;
-      args[1] = obj2;
-      return !NILP (Feqlsign (2, args));
+      return (0 == bytecode_arithcompare (obj1, obj2));
     }
 
   /* 3. If characters, compare case-insensitively. */
   if (CHARP (obj1) && CHARP (obj2))
-    return DOWNCASE (0, XCHAR (obj1)) == DOWNCASE (0, XCHAR (obj2));
+    return CANONCASE (0, XCHAR (obj1)) == CANONCASE (0, XCHAR (obj2));
 
   /* 4. If arrays of different types, compare their lengths, and
         then compare element-by-element. */
@@ -2909,7 +2906,7 @@
 	EMACS_INT i;
 	EMACS_INT l1 = XINT (Flength (obj1));
 	EMACS_INT l2 = XINT (Flength (obj2));
-	/* Both arrays, but of different types */
+	/* Both arrays, but of different lengths */
 	if (l1 != l2)
 	  return 0;
 	for (i = 0; i < l1; i++)