• Tim Peters's avatar
    cPickle.c: Full support for the new LONG1 and LONG4. Added comments. · ee1a53cb
    Tim Peters authored
    Assorted code cleanups; e.g., sizeof(char) is 1 by definition, so there's
    no need to do things like multiply by sizeof(char) in hairy malloc
    arguments.  Fixed an undetected-overflow bug in readline_file().
    
    longobject.c:  Fixed a really stupid bug in the new _PyLong_NumBits.
    
    pickle.py:  Fixed stupid bug in save_long():  When proto is 2, it
    wrote LONG1 or LONG4, but forgot to return then -- it went on to
    append the proto 1 LONG opcode too.
    Fixed equally stupid cancelling bugs in load_long1() and
    load_long4():  they *returned* the unpickled long instead of pushing
    it on the stack.  The return values were ignored.  Tests passed
    before only because save_long() pickled the long twice.
    
    Fixed bugs in encode_long().
    
    Noted that decode_long() is quadratic-time despite our hopes,
    because long(string, 16) is still quadratic-time in len(string).
    It's hex() that's linear-time.  I don't know a way to make decode_long()
    linear-time in Python, short of maybe transforming the 256's-complement
    bytes into marshal's funky internal format, and letting marshal decode
    that.  It would be more valuable to make long(string, 16) linear time.
    
    pickletester.py:  Added a global "protocols" vector so tests can try
    all the protocols in a sane way.  Changed test_ints() and test_unicode()
    to do so.  Added a new test_long(), but the tail end of it is disabled
    because it "takes forever" under pickle.py (but runs very quickly under
    cPickle:  cPickle proto 2 for longs is linear-time).
    ee1a53cb
pickletester.py 15 KB