pickle: Comment repair.
pickletools: Import decode_long from pickle instead of duplicating it.
This commit is contained in:
parent
ad8605dfae
commit
c0c12b5707
@ -37,7 +37,7 @@ import warnings
|
|||||||
__all__ = ["PickleError", "PicklingError", "UnpicklingError", "Pickler",
|
__all__ = ["PickleError", "PicklingError", "UnpicklingError", "Pickler",
|
||||||
"Unpickler", "dump", "dumps", "load", "loads"]
|
"Unpickler", "dump", "dumps", "load", "loads"]
|
||||||
|
|
||||||
# These are purely informational; no code usues these
|
# These are purely informational; no code uses these.
|
||||||
format_version = "2.0" # File format version we write
|
format_version = "2.0" # File format version we write
|
||||||
compatible_formats = ["1.0", # Original protocol 0
|
compatible_formats = ["1.0", # Original protocol 0
|
||||||
"1.1", # Protocol 0 with INST added
|
"1.1", # Protocol 0 with INST added
|
||||||
@ -47,7 +47,7 @@ compatible_formats = ["1.0", # Original protocol 0
|
|||||||
] # Old format versions we can read
|
] # Old format versions we can read
|
||||||
|
|
||||||
# Why use struct.pack() for pickling but marshal.loads() for
|
# Why use struct.pack() for pickling but marshal.loads() for
|
||||||
# unpickling? struct.pack() is 40% faster than marshal.loads(), but
|
# unpickling? struct.pack() is 40% faster than marshal.dumps(), but
|
||||||
# marshal.loads() is twice as fast as struct.unpack()!
|
# marshal.loads() is twice as fast as struct.unpack()!
|
||||||
mloads = marshal.loads
|
mloads = marshal.loads
|
||||||
|
|
||||||
@ -73,6 +73,8 @@ class UnpicklingError(PickleError):
|
|||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# An instance of _Stop is raised by Unpickler.load_stop() in response to
|
||||||
|
# the STOP opcode, passing the object that is the result of unpickling.
|
||||||
class _Stop(Exception):
|
class _Stop(Exception):
|
||||||
def __init__(self, value):
|
def __init__(self, value):
|
||||||
self.value = value
|
self.value = value
|
||||||
@ -138,7 +140,7 @@ BINFLOAT = 'G' # push float; arg is 8-byte float encoding
|
|||||||
TRUE = 'I01\n' # not an opcode; see INT docs in pickletools.py
|
TRUE = 'I01\n' # not an opcode; see INT docs in pickletools.py
|
||||||
FALSE = 'I00\n' # not an opcode; see INT docs in pickletools.py
|
FALSE = 'I00\n' # not an opcode; see INT docs in pickletools.py
|
||||||
|
|
||||||
# Protocol 2 (not yet implemented).
|
# Protocol 2 (XXX not yet implemented).
|
||||||
|
|
||||||
PROTO = '\x80' # identify pickle protocol
|
PROTO = '\x80' # identify pickle protocol
|
||||||
NEWOBJ = '\x81' # build object by applying cls.__new__ to argtuple
|
NEWOBJ = '\x81' # build object by applying cls.__new__ to argtuple
|
||||||
@ -772,6 +774,9 @@ def _keep_alive(x, memo):
|
|||||||
memo[id(memo)]=[x]
|
memo[id(memo)]=[x]
|
||||||
|
|
||||||
|
|
||||||
|
# A cache for whichmodule(), mapping a function object to the name of
|
||||||
|
# the module in which the function was found.
|
||||||
|
|
||||||
classmap = {} # called classmap for backwards compatibility
|
classmap = {} # called classmap for backwards compatibility
|
||||||
|
|
||||||
def whichmodule(func, funcname):
|
def whichmodule(func, funcname):
|
||||||
@ -780,7 +785,7 @@ def whichmodule(func, funcname):
|
|||||||
Search sys.modules for the module.
|
Search sys.modules for the module.
|
||||||
Cache in classmap.
|
Cache in classmap.
|
||||||
Return a module name.
|
Return a module name.
|
||||||
If the function cannot be found, return __main__.
|
If the function cannot be found, return "__main__".
|
||||||
"""
|
"""
|
||||||
if func in classmap:
|
if func in classmap:
|
||||||
return classmap[func]
|
return classmap[func]
|
||||||
|
@ -603,29 +603,7 @@ float8 = ArgumentDescriptor(
|
|||||||
|
|
||||||
# Protocol 2 formats
|
# Protocol 2 formats
|
||||||
|
|
||||||
def decode_long(data):
|
from pickle import decode_long
|
||||||
r"""Decode a long from a two's complement little-endian binary string.
|
|
||||||
>>> decode_long("\xff\x00")
|
|
||||||
255L
|
|
||||||
>>> decode_long("\xff\x7f")
|
|
||||||
32767L
|
|
||||||
>>> decode_long("\x00\xff")
|
|
||||||
-256L
|
|
||||||
>>> decode_long("\x00\x80")
|
|
||||||
-32768L
|
|
||||||
>>> decode_long("\x80")
|
|
||||||
-128L
|
|
||||||
>>> decode_long("\x7f")
|
|
||||||
127L
|
|
||||||
"""
|
|
||||||
x = 0L
|
|
||||||
i = 0L
|
|
||||||
for c in data:
|
|
||||||
x |= long(ord(c)) << i
|
|
||||||
i += 8L
|
|
||||||
if data and ord(c) >= 0x80:
|
|
||||||
x -= 1L << i
|
|
||||||
return x
|
|
||||||
|
|
||||||
def read_long1(f):
|
def read_long1(f):
|
||||||
r"""
|
r"""
|
||||||
@ -1793,6 +1771,7 @@ def assure_pickle_consistency(verbose=False):
|
|||||||
raise ValueError("\n".join(msg))
|
raise ValueError("\n".join(msg))
|
||||||
|
|
||||||
assure_pickle_consistency()
|
assure_pickle_consistency()
|
||||||
|
del assure_pickle_consistency
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# A pickle opcode generator.
|
# A pickle opcode generator.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user