[Python-checkins] python/dist/src/Lib pickle.py,1.91,1.92

Neal Norwitz neal@metaslash.com
Mon, 27 Jan 2003 23:15:07 -0500


On Mon, Jan 27, 2003 at 10:33:27PM -0500, Tim Peters wrote:
> [Neal Norwitz, on save_dict() rewrite]
> > In the case where self.bin and len(object) == 1, the code looks
> > like it does something different.
> >
> > The old code would save(key) & save(value) since the for loop is
> > executed.  The new code doesn't execute the loop though.
> >
> > Am I missing something?
> 
> Guido explained this already.  It makes me wonder whether I shouldn't
> duplicate that block of code, though -- the point of these rewrites was
> largely to make the code more evident, by eliminating mounds of fiddly
> little "internal" branches.  I originally did duplicate the loop, but it was
> such blatant code duplication then that I nuked the first copy and let it
> fall thru instead.

I like the version you checked in.  But every time I look at the code,
even after Guido pointed it out, I see the wrong flow.  Time for new
eyes and/or brain.

The only way I could see the correct flow was to remove the blank
line before the else and move the code before the return into a function:

        if self.bin:
            write(EMPTY_DICT)
            self.memoize(object)
            if len(object) > 1:
                save_dict_items(items)
                return
        else:   # proto 0 -- can't use EMPTY_DICT or SETITEMS
            # ...

However, I don't really think the above code is much of an improvement.

> IOW, I can't win this one <wink>.

Of course. :-)

Neal