]> granicus.if.org Git - python/commitdiff
Change string comparison so that it applies even when one (or both)
authorGuido van Rossum <guido@python.org>
Mon, 24 Sep 2001 16:51:54 +0000 (16:51 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 24 Sep 2001 16:51:54 +0000 (16:51 +0000)
arguments are subclasses of str, as long as they don't override rich
comparison.

Lib/test/test_descr.py
Objects/stringobject.c

index 9e8565f8a4501b38eba4aeb336fa137ee6f31edd..ed3cea44b896ee8415d54228d5fe21d5fbf99463 100644 (file)
@@ -1555,7 +1555,7 @@ def inherits():
             self._rev = self.__class__("".join(L))
             return self._rev
     s = madstring("abcdefghijklmnopqrstuvwxyz")
-    #XXX verify(s == "abcdefghijklmnopqrstuvwxyz")
+    verify(s == "abcdefghijklmnopqrstuvwxyz")
     verify(s.rev() == madstring("zyxwvutsrqponmlkjihgfedcba"))
     verify(s.rev().rev() == madstring("abcdefghijklmnopqrstuvwxyz"))
     for i in range(256):
@@ -1569,12 +1569,12 @@ def inherits():
 
     base = "\x00" * 5
     s = madstring(base)
-    #XXX verify(s == base)
+    verify(s == base)
     verify(str(s) == base)
     verify(str(s).__class__ is str)
     verify(hash(s) == hash(base))
-    #XXX verify({s: 1}[base] == 1)
-    #XXX verify({base: 1}[s] == 1)
+    verify({s: 1}[base] == 1)
+    verify({base: 1}[s] == 1)
     verify((s + "").__class__ is str)
     verify(s + "" == base)
     verify(("" + s).__class__ is str)
@@ -1613,14 +1613,14 @@ def inherits():
     verify(s.lower() == base)
 
     s = madstring("x y")
-    #XXX verify(s == "x y")
+    verify(s == "x y")
     verify(intern(s).__class__ is str)
     verify(intern(s) is intern("x y"))
     verify(intern(s) == "x y")
 
     i = intern("y x")
     s = madstring("y x")
-    #XXX verify(s == i)
+    verify(s == i)
     verify(intern(s).__class__ is str)
     verify(intern(s) is i)
 
index 99a16ed174a82808f6c203b0d26f589a17f49267..e29be5a07007bfc696b5783f0b57180d845def25 100644 (file)
@@ -824,9 +824,10 @@ string_richcompare(PyStringObject *a, PyStringObject *b, int op)
        int min_len;
        PyObject *result;
 
-       /* One of the objects is a string object. Make sure the
-          other one is one, too.  */
-       if (a->ob_type != b->ob_type) {
+       /* May sure both arguments use string comparison.
+          This implies PyString_Check(a) && PyString_Check(b). */
+       if (a->ob_type->tp_richcompare != (richcmpfunc)string_richcompare ||
+           b->ob_type->tp_richcompare != (richcmpfunc)string_richcompare) {
                result = Py_NotImplemented;
                goto out;
        }