mirror of
https://github.com/python/cpython.git
synced 2025-07-15 23:35:23 +00:00
Make str/str8 comparisons return True/False for !=/==.
Code that has been returning str8 becomes much more apparent thanks to this (e.g., struct module returning str8 for all string-related formats or sqlite3 passing in str8 instances when converting objects that had a __conform__ method). One also has to watch out in C code when making a key from char * using PyString in the C code but a str instance in Python code as that will not longer compare equal. Once str8 gains a constructor like the current bytes type then test_modulefinder needs a cleanup as the fix is a little messy in that file. Thanks goes to Thomas Lee for writing the patch for the change giving an initial run-down of why most of the tests were failing.
This commit is contained in:
parent
6464d47195
commit
4043001f5d
11 changed files with 167 additions and 203 deletions
|
@ -6224,16 +6224,6 @@ int PyUnicode_Compare(PyObject *left,
|
|||
if (PyUnicode_Check(left) && PyUnicode_Check(right))
|
||||
return unicode_compare((PyUnicodeObject *)left,
|
||||
(PyUnicodeObject *)right);
|
||||
if ((PyString_Check(left) && PyUnicode_Check(right)) ||
|
||||
(PyUnicode_Check(left) && PyString_Check(right))) {
|
||||
if (PyUnicode_Check(left))
|
||||
left = _PyUnicode_AsDefaultEncodedString(left, NULL);
|
||||
if (PyUnicode_Check(right))
|
||||
right = _PyUnicode_AsDefaultEncodedString(right, NULL);
|
||||
assert(PyString_Check(left));
|
||||
assert(PyString_Check(right));
|
||||
return PyObject_Compare(left, right);
|
||||
}
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
"Can't compare %.100s and %.100s",
|
||||
left->ob_type->tp_name,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue