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