mirror of
https://github.com/python/cpython.git
synced 2025-11-25 04:34:37 +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
|
|
@ -16,12 +16,13 @@ else:
|
|||
# remain compatible with Python < 2.3
|
||||
READ_MODE = "r"
|
||||
|
||||
LOAD_CONST = chr(dis.opname.index('LOAD_CONST'))
|
||||
IMPORT_NAME = chr(dis.opname.index('IMPORT_NAME'))
|
||||
STORE_NAME = chr(dis.opname.index('STORE_NAME'))
|
||||
STORE_GLOBAL = chr(dis.opname.index('STORE_GLOBAL'))
|
||||
# XXX Clean up once str8's cstor matches bytes.
|
||||
LOAD_CONST = str8(chr(dis.opname.index('LOAD_CONST')))
|
||||
IMPORT_NAME = str8(chr(dis.opname.index('IMPORT_NAME')))
|
||||
STORE_NAME = str8(chr(dis.opname.index('STORE_NAME')))
|
||||
STORE_GLOBAL = str8(chr(dis.opname.index('STORE_GLOBAL')))
|
||||
STORE_OPS = [STORE_NAME, STORE_GLOBAL]
|
||||
HAVE_ARGUMENT = chr(dis.HAVE_ARGUMENT)
|
||||
HAVE_ARGUMENT = str8(chr(dis.HAVE_ARGUMENT))
|
||||
|
||||
# Modulefinder does a good job at simulating Python's, but it can not
|
||||
# handle __path__ modifications packages make at runtime. Therefore there
|
||||
|
|
@ -367,7 +368,7 @@ class ModuleFinder:
|
|||
consts = co.co_consts
|
||||
LOAD_LOAD_AND_IMPORT = LOAD_CONST + LOAD_CONST + IMPORT_NAME
|
||||
while code:
|
||||
c = chr(code[0])
|
||||
c = str8(chr(code[0]))
|
||||
if c in STORE_OPS:
|
||||
oparg, = unpack('<H', code[1:3])
|
||||
yield "store", (names[oparg],)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue