mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
save_tuple(): So long as the charter is rewriting for clarity, the snaky
control flow had to be simplified.
This commit is contained in:
parent
ff57bff16e
commit
d97da80dd5
1 changed files with 20 additions and 21 deletions
|
@ -458,27 +458,26 @@ class Pickler:
|
||||||
|
|
||||||
def save_tuple(self, object):
|
def save_tuple(self, object):
|
||||||
write = self.write
|
write = self.write
|
||||||
save = self.save
|
|
||||||
memo = self.memo
|
|
||||||
proto = self.proto
|
proto = self.proto
|
||||||
|
|
||||||
if proto >= 1:
|
n = len(object)
|
||||||
n = len(object)
|
if n == 0 and proto:
|
||||||
if n <= 3:
|
write(EMPTY_TUPLE)
|
||||||
if not object:
|
return
|
||||||
write(EMPTY_TUPLE)
|
|
||||||
return
|
save = self.save
|
||||||
if proto >= 2:
|
memo = self.memo
|
||||||
for element in object:
|
if n <= 3 and proto >= 2:
|
||||||
save(element)
|
for element in object:
|
||||||
# Subtle. Same as in the big comment below.
|
save(element)
|
||||||
if id(object) in memo:
|
# Subtle. Same as in the big comment below.
|
||||||
get = self.get(memo[id(object)][0])
|
if id(object) in memo:
|
||||||
write(POP * n + get)
|
get = self.get(memo[id(object)][0])
|
||||||
else:
|
write(POP * n + get)
|
||||||
write(_tuplesize2code[n])
|
else:
|
||||||
self.memoize(object)
|
write(_tuplesize2code[n])
|
||||||
return
|
self.memoize(object)
|
||||||
|
return
|
||||||
|
|
||||||
# proto 0, or proto 1 and tuple isn't empty, or proto > 1 and tuple
|
# proto 0, or proto 1 and tuple isn't empty, or proto > 1 and tuple
|
||||||
# has more than 3 elements.
|
# has more than 3 elements.
|
||||||
|
@ -486,7 +485,7 @@ class Pickler:
|
||||||
for element in object:
|
for element in object:
|
||||||
save(element)
|
save(element)
|
||||||
|
|
||||||
if object and id(object) in memo:
|
if n and id(object) in memo:
|
||||||
# Subtle. d was not in memo when we entered save_tuple(), so
|
# Subtle. d was not in memo when we entered save_tuple(), so
|
||||||
# the process of saving the tuple's elements must have saved
|
# the process of saving the tuple's elements must have saved
|
||||||
# the tuple itself: the tuple is recursive. The proper action
|
# the tuple itself: the tuple is recursive. The proper action
|
||||||
|
@ -498,7 +497,7 @@ class Pickler:
|
||||||
if proto:
|
if proto:
|
||||||
write(POP_MARK + get)
|
write(POP_MARK + get)
|
||||||
else: # proto 0 -- POP_MARK not available
|
else: # proto 0 -- POP_MARK not available
|
||||||
write(POP * (len(object) + 1) + get)
|
write(POP * (n+1) + get)
|
||||||
return
|
return
|
||||||
|
|
||||||
# No recursion (including the empty-tuple case for protocol 0).
|
# No recursion (including the empty-tuple case for protocol 0).
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue