Commit 971792da authored by chris's avatar chris

removed BININT8

fixed bug in load_short_binstring()
parent cab6962f
# $Id: pickle.py,v 1.6 1997/02/12 17:06:45 chris Exp $
# $Id: pickle.py,v 1.7 1997/02/21 22:24:23 chris Exp $
#
# Copyright
#
......@@ -207,7 +207,6 @@ BININT1 = 'K'
LONG = 'L'
BININT2 = 'M'
NONE = 'N'
BININT8 = 'O'
PERSID = 'P'
BINPERSID = 'Q'
REDUCE = 'R'
......@@ -287,9 +286,14 @@ class Pickler:
d = id(object)
t = type(object)
try:
f = self.quick_dispatch[t]
except KeyError:
if ((t is TupleType) and (len(object) == 0)):
if (self.bin):
save_empty_tuple(object)
else:
save_tuple(object)
return
if memo.has_key(d):
self.write(self.get(memo[d]))
return
......@@ -368,11 +372,10 @@ class Pickler:
write(BUILD)
dispatch = {}
quick_dispatch = {}
def save_none(self, object):
self.write(NONE)
quick_dispatch[NoneType] = save_none
dispatch[NoneType] = save_none
def save_int(self, object):
if (self.bin):
......@@ -388,7 +391,7 @@ class Pickler:
self.write(BININT + i)
else:
self.write(INT + `object` + '\n')
quick_dispatch[IntType] = save_int
dispatch[IntType] = save_int
def save_long(self, object):
self.write(LONG + `object` + '\n')
......@@ -396,7 +399,7 @@ class Pickler:
def save_float(self, object):
self.write(FLOAT + `object` + '\n')
quick_dispatch[FloatType] = save_float
dispatch[FloatType] = save_float
def save_string(self, object):
d = id(object)
......@@ -418,20 +421,20 @@ class Pickler:
dispatch[StringType] = save_string
def save_tuple(self, object):
d = id(object)
write = self.write
save = self.save
memo = self.memo
d = id(object)
write(MARK)
for element in object:
save(element)
if (memo.has_key(d)):
write(POP * len(object))
write(self.get(memo[d]))
write(POP * len(object) + self.get(memo[d]))
return
memo_len = len(memo)
......@@ -449,12 +452,15 @@ class Pickler:
save = self.save
memo = self.memo
if (self.bin):
write(EMPTY_LIST)
else:
write(MARK + LIST)
using_appends = (self.bin and (len(object) > 1))
if (using_appends):
write(MARK + LIST + MARK)
else:
write(MARK + LIST)
write(MARK)
for element in object:
save(element)
......@@ -477,12 +483,15 @@ class Pickler:
save = self.save
memo = self.memo
if (self.bin):
write(EMPTY_DICT)
else:
write(MARK + DICT)
using_setitems = (self.bin and (len(object) > 1))
if (using_setitems):
write(MARK + DICT + MARK)
else:
write(MARK + DICT)
write(MARK)
items = object.items()
for key, value in items:
......@@ -576,8 +585,7 @@ def whichmodule(cls, clsname):
import sys
for name, module in sys.modules.items():
if name != '__main__' and \
hasattr(module, clsname) and \
if hasattr(module, clsname) and \
getattr(module, clsname) is cls:
break
else:
......@@ -672,7 +680,7 @@ class Unpickler:
dispatch[BINSTRING] = load_binstring
def load_short_binstring(self):
len = mloads('i' + self.read(1))
len = mloads('i' + self.read(1) + '\000\000\000')
self.append(self.read(len))
dispatch[SHORT_BINSTRING] = load_short_binstring
......@@ -744,6 +752,7 @@ class Unpickler:
def find_class(self, module, name):
env = {}
try:
exec 'from %s import %s' % (module, name) in env
except ImportError:
......
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