Commit bb77e680 authored by Guido van Rossum's avatar Guido van Rossum

Change string comparison so that it applies even when one (or both)

arguments are subclasses of str, as long as they don't override rich
comparison.
parent ff0e6d6e
......@@ -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)
......
......@@ -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;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment