From: Tim Peters <tim.peters@gmail.com>
Date: Tue, 28 Jan 2003 05:48:29 +0000 (+0000)
Subject: save_tuple():  So long as the charter is rewriting for clarity, the snaky
X-Git-Tag: v2.3c1~2242
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d97da80dd575b003b3b2bf4eae29c7a004afecfa;p=python

save_tuple():  So long as the charter is rewriting for clarity, the snaky
control flow had to be simplified.
---

diff --git a/Lib/pickle.py b/Lib/pickle.py
index 6f4ee5c9ac..02288d8f73 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -458,27 +458,26 @@ class Pickler:
 
     def save_tuple(self, object):
         write = self.write
-        save  = self.save
-        memo  = self.memo
         proto = self.proto
 
-        if proto >= 1:
-            n = len(object)
-            if n <= 3:
-                if not object:
-                    write(EMPTY_TUPLE)
-                    return
-                if proto >= 2:
-                    for element in object:
-                        save(element)
-                    # Subtle.  Same as in the big comment below.
-                    if id(object) in memo:
-                        get = self.get(memo[id(object)][0])
-                        write(POP * n + get)
-                    else:
-                        write(_tuplesize2code[n])
-                        self.memoize(object)
-                    return
+        n = len(object)
+        if n == 0 and proto:
+            write(EMPTY_TUPLE)
+            return
+
+        save = self.save
+        memo = self.memo
+        if n <= 3 and proto >= 2:
+            for element in object:
+                save(element)
+            # Subtle.  Same as in the big comment below.
+            if id(object) in memo:
+                get = self.get(memo[id(object)][0])
+                write(POP * n + get)
+            else:
+                write(_tuplesize2code[n])
+                self.memoize(object)
+            return
 
         # proto 0, or proto 1 and tuple isn't empty, or proto > 1 and tuple
         # has more than 3 elements.
@@ -486,7 +485,7 @@ class Pickler:
         for element in object:
             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
             # the process of saving the tuple's elements must have saved
             # the tuple itself:  the tuple is recursive.  The proper action
@@ -498,7 +497,7 @@ class Pickler:
             if proto:
                 write(POP_MARK + get)
             else:   # proto 0 -- POP_MARK not available
-                write(POP * (len(object) + 1) + get)
+                write(POP * (n+1) + get)
             return
 
         # No recursion (including the empty-tuple case for protocol 0).