summaryrefslogtreecommitdiffstats
path: root/Modules/cPickle.c
Commit message (Collapse)AuthorAgeFilesLines
* The Unpickler forget about its find_class attribute.Jeremy Hylton2003-07-111-0/+3
|
* Remove many blanket try/except clauses.Jeremy Hylton2003-06-161-11/+40
| | | | | | | | | | | | SF bug [ 751276 ] cPickle doesn't raise error, pickle does (recursiondepth) Most of the calls to PyErr_Clear() were intended to catch & clear an attribute error and try something different. Guard all those cases with a PyErr_ExceptionMatches() and fail if some other error occurred. The other error is likely a bug in the user code. This is basically the C equivalent of changing "except:" to "except AttributeError:"
* PyType_Ready(): Complain if the type is a base type, and gc'able, andTim Peters2003-05-211-2/+7
| | | | | | | | | | | | | | | | | | tp_free is NULL or PyObject_Del at the end. Because it's a base type it must call tp_free in its dealloc function, and because it's gc'able it must not call PyObject_Del. inherit_slots(): Don't inherit tp_free unless the type and its base agree about whether they're gc'able. If the type is gc'able and the base is not, and the base uses the default PyObject_Del for its tp_free, give the type PyObject_GC_Del for its tp_free (the appropriate default for a gc'able type). cPickle.c: The Pickler and Unpickler types claim to be base classes and gc'able, but their dealloc functions didn't call tp_free. Repaired that. Also call PyType_Ready() on these typeobjects, so that the correct (PyObject_GC_Del) default memory-freeing function gets plugged into these types' tp_free slots.
* Make Unpickler objects colletable.Jeremy Hylton2003-04-091-23/+65
| | | | Bugfix candidate.
* Make Picklers collectable.Jeremy Hylton2003-04-091-5/+45
| | | | Bug fix candidate.
* New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is aTim Peters2003-03-201-154/+9
| | | | | refactoring to get all the duplicates of this delicate code out of the cPickle and struct modules.
* SF bug 705836: struct.pack of floats in non-native endian orderTim Peters2003-03-201-6/+24
| | | | | | | | | | | | | | pack_float, pack_double, save_float: All the routines for creating IEEE-format packed representations of floats and doubles simply ignored that rounding can (in rare cases) propagate out of a long string of 1 bits. At worst, the end-off carry can (by mistake) interfere with the exponent value, and then unpacking yields a result wrong by a factor of 2. In less severe cases, it can end up losing more low-order bits than intended, or fail to catch overflow *caused* by rounding. Bugfix candidate, but I already backported this to 2.2. In 2.3, this code remains in severe need of refactoring.
* Use __reduce_ex__.Guido van Rossum2003-02-191-45/+36
|
* save_global(): Trying to resolve module.name can fail for twoTim Peters2003-02-181-3/+5
| | | | | | | reasons: importing module can fail, or the attribute lookup module.name can fail. We were giving the same error msg for both cases, making it needlessly hard to guess what went wrong. These cases give different error msgs now.
* Make 2 module variables static. Assuming this is correct.Neal Norwitz2003-02-151-2/+2
|
* cPickle.c, load_build(): Taught cPickle how to pick apartTim Peters2003-02-151-21/+71
| | | | | | | | | | | | | | | | | | the optional proto 2 slot state. pickle.py, load_build(): CAUTION: Noted that cPickle's load_build and pickle's load_build really don't do the same things with the state, and didn't before this patch either. cPickle never tries to do .update(), and has no backoff if instance.__dict__ can't be retrieved. There are no tests that can tell the difference, and part of what cPickle's load_build() did looked accidental to me, so I don't know what the true intent is here. pickletester.py, test_pickle.py: Got rid of the hack for exempting cPickle from running some of the proto 2 tests. dictobject.c, PyDict_Next(): documented intended use.
* cPickle produces NEWOBJ appropriately now. It still doesn't knowTim Peters2003-02-141-69/+195
| | | | how to unpickle the new slot-full state tuples.
* Minor assorted cleanups; no semantic changes.Tim Peters2003-02-131-10/+16
|
* The version of PyImport_Import() in cPickle is no longer needed (an editedTim Peters2003-02-131-64/+0
| | | | version was moved into import.c long ago), so squashed the duplication.
* save(): Reformat tail end just for clarity.Tim Peters2003-02-131-16/+17
|
* Taught cPickle how to read pickles containing NEWOBJ. This won't getTim Peters2003-02-131-1/+75
| | | | | | exercised by the test suite before cPickle knows how to create NEWOBJ too. For now, it was just tried once by hand (via loading a NEWOBJ pickle created by pickle.py).
* Added a HIGHEST_PROTOCOL module attribute to pickle and cPickle.Tim Peters2003-02-131-5/+9
|
* Minor cleanup of new batch-list/dict code.Tim Peters2003-02-121-16/+12
|
* Implemented batching for dicts in cPickle. This is after two failedTim Peters2003-02-111-30/+119
| | | | | attempts to merge the C list-batch and dict-batch code -- they worked, but it was a godawful mess to read.
* Implemented list batching in cPickle.Tim Peters2003-02-111-30/+103
|
* More typo repair.Tim Peters2003-02-051-1/+1
|
* Typo repair.Tim Peters2003-02-051-4/+4
|
* cPickle: exempt two_tuple from GC -- it's a speed hack, and doesn'tTim Peters2003-02-041-1/+6
| | | | | | | | | | | | guarantee to keep valid pointers in its slots. tests: Moved ExtensionSaver from test_copy_reg into pickletester, and use it both places. Once extension codes get assigned, it won't be safe to overwrite them willy nilly in test suites, and ExtensionSaver does a thorough job of undoing any possible damage. Beefed up the EXT[124] tests a bit, to check the smallest and largest codes in each opcode's range too.
* cPickle now generates proto 2 EXT[124] when appropriate.Tim Peters2003-02-041-2/+67
| | | | | Moved such EXT tests as currently exist from TempAbstractPickleTests to AbstractPickleTests, so that test_cpickle runs them too.
* Typo in comment.Tim Peters2003-02-041-1/+1
|
* cPickle can load pickles using proto 2 EXT[124] now, but can't yetTim Peters2003-02-041-0/+108
| | | | generate these opcodes.
* Rename the extension registry variables to have leading underscores --Guido van Rossum2003-02-041-6/+6
| | | | | | | | | this clarifies that they are part of an internal API (albeit shared between pickle.py, copy_reg.py and cPickle.c). I'd like to do the same for copy_reg.dispatch_table, but worry that it might be used by existing code. This risk doesn't exist for the extension registry.
* Typo repair.Tim Peters2003-02-041-1/+1
|
* Brought some module variables into synch with pickle.py's current values.Tim Peters2003-02-041-16/+47
| | | | | Imported the extension-registry dicts from copy_reg.py, in preparation for tackling EXT[124].
* load_counted_long(): Changed a ValueError to an UnpicklingError, justTim Peters2003-02-031-15/+1
| | | | | | | because it seems more consistent with the rest of the code. cPickle_PyMapping_HasKey(): This extern function isn't used anywhere in Python or Zope, so got rid of it.
* PDATA_PUSH and PDATA_APPEND. documented, and reformatted for betterTim Peters2003-02-031-30/+38
| | | | | | | | | readability. load_bool(): Now that I know the intended difference between _PUSH and _APPEND, used the right one. Pdata_grow(): Squashed out a redundant overflow test.
* cPickle support for TUPLE[123]. Incidentally plugged several undetectedTim Peters2003-02-021-84/+210
| | | | overflow holes in Pdata_grow().
* Massive edits. If p is a pointer to a struct, and p->f is a pointer toTim Peters2003-02-021-89/+93
| | | | | | | | | | | | | | a function, then p->f(arg1, arg2, ...) is semantically the same as (*p->f)(arg1, arg2, ...) Changed all instances of the latter into the former. Given how often the code embeds this kind of expression in an if test, the unnecessary parens and dereferening operator were a real drag on readability.
* Minor cleanup, mostly adding horizontal whitespace, and breaking apartTim Peters2003-02-021-31/+30
| | | | embedded assignments, for readability.
* Implemented proto 2 NEWTRUE and NEWFALSE in cPickle.Tim Peters2003-02-021-2/+34
|
* Beefed up the tests by putting in more "for proto in protocols:" outerTim Peters2003-02-021-0/+5
| | | | | | | loops. Renamed DATA and BINDATA to DATA0 and DATA1. Included disassemblies, but noted why we can't test them. Added XXX comment to cPickle about a mysterious comment, where pickle and cPickle diverge in how they number PUT indices.
* Fix compiler warningNeal Norwitz2003-02-021-1/+1
|
* dump(): Added asserts that self->proto is sane.Tim Peters2003-02-021-1/+2
|
* dump(): Fixed a stupid bug in new code. It wasn't possible for the bugTim Peters2003-02-021-1/+1
| | | | | to have an effect before protocol 3 is invented, so no test can be written for this (yet).
* Add cPickle support for PROTO. Duplicated PROTO/LONG1/LONG4 code inTim Peters2003-02-021-2/+56
| | | | | the hitherto unknown (to me) noload() cPickle function, which is (a) something we don't test at all, and (b) pickle.py doesn't have.
* cPickle.c: Full support for the new LONG1 and LONG4. Added comments.Tim Peters2003-02-021-21/+161
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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).
* The C pickle now knows how to deal with a proto= argument. AssortedTim Peters2003-02-011-45/+86
| | | | code cleanups, and purged more references to text-vs-binary modes.
* Removed needless include of errno.h.Tim Peters2003-02-011-4/+0
|
* The module docstring had an RCS ID from 1999 embedded in it. EnoughTim Peters2003-02-011-3/+1
| | | | already <wink>.
* Trimmed trailing whitespace.Tim Peters2003-02-011-223/+223
|
* Added #defines for proto 2 opcodes; gave the Pickler a proto member;Tim Peters2003-02-011-16/+30
| | | | | removed woefully inadequate opcode docs and pointed to pickletools.py instead.
* Removed all uses of the out-of-favor __safe_for_unpickling__ magicTim Peters2003-02-011-46/+5
| | | | attr, and copy_reg.safe_constructors.
* Ignore the state returned by __reduce__ if it is Py_None.Guido van Rossum2003-01-311-0/+2
|
* Patch #661760: Cygwin auto-import module patchJason Tishler2003-01-061-4/+2
| | | | | | | | | | | | The attached patch enables shared extension modules to build cleanly under Cygwin without moving the static initialization of certain function pointers (i.e., ones exported from the Python DLL core) to a module initialization function. Additionally, this patch fixes the modules that have been changed in the past to accommodate Cygwin.
* Add an XXX comment about relative imports.Guido van Rossum2002-12-241-1/+2
|