Tim Peters [Tue, 28 Jan 2003 15:27:57 +0000 (15:27 +0000)]
dis(): Not all opcodes are printable anymore, so print the repr
of the opcode character instead (but stripping the quotes).
Added a proto 2 test section for the canonical recursive-tuple case.
Note that since pickle's save_tuple() takes different paths depending on
tuple length now, beefier tests are really needed (but not in pickletools);
the "short tuple" case tried here was actually broken yesterday, and it's
subtle stuff so needs to be tested.
Tim Peters [Tue, 28 Jan 2003 05:34:53 +0000 (05:34 +0000)]
save_tuple(): I believe the new code for TUPLE{1,2,3} in proto 2 was
incorrect for recursive tuples. Tried to repair; seems to work OK, but
there are no checked-in tests for this yet.
Tim Peters [Tue, 28 Jan 2003 03:51:36 +0000 (03:51 +0000)]
save_inst(): Rewrote to have only one branch on self.bin. Also got rid
of my recent XXX comment, taking a (what appears to be vanishingly small)
chance and calling self.memoize() instead.
Guido van Rossum [Tue, 28 Jan 2003 03:17:21 +0000 (03:17 +0000)]
Add a comment explaining that struct.pack() beats marshal.dumps(), but
marshal.loads() beats struct.unpack()! Possibly because the latter
creates a one-tuple. :-(
Guido van Rossum [Tue, 28 Jan 2003 03:03:08 +0000 (03:03 +0000)]
Got rid of mdumps; I timed it, and struct.pack("<i", x) is more than
40% faster than marshal.dumps(x)[1:]! (That's not counting the
module attribute lookups, which can be avoided in either case.)
Tim Peters [Tue, 28 Jan 2003 01:03:10 +0000 (01:03 +0000)]
save_pers(): Switched the order of cases, to get rid of a "not", and to
make the bin-vs-not-bin order consistent with what other routines try to
do (they almost all handle the bin case first).
Tim Peters [Tue, 28 Jan 2003 01:00:38 +0000 (01:00 +0000)]
Several routines appeared to inline the guts of memoize(), possibly for
some notion of low-level efficiency. Undid that, but left one routine
alone: save_inst() claims it has a reason for not using memoize().
I don't understand that comment, so added an XXX comment there.
Tim Peters [Tue, 28 Jan 2003 00:48:09 +0000 (00:48 +0000)]
save(): Fiddled the control flow to put the normal case where it
belongs. This is a much smaller change than it may appear: the bulk
of the function merely got unindented by one level.
Tim Peters [Tue, 28 Jan 2003 00:13:19 +0000 (00:13 +0000)]
Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,
then the embedded argument consumes at least 256 bytes. The difference
between a 3-byte prefix (LONG2 + 2 bytes) and a 5-byte prefix (LONG4 +
4 bytes) is at worst less than 1%. Note that binary strings and binary
Unicode strings also have only "size is 1 byte, or size is 4 bytes?"
flavors, and I expect for the same reason. The only place a 2-byte
thingie was used was in BININT2, where the 2 bytes make up the *entire*
embedded argument (and now EXT2 also does this); that's a large savings
over 4 bytes, because the total opcode+argument size is so small in
the BININT2/EXT2 case.
Removed the TAKEN_FROM_ARGUMENT "number of bytes" code, and bifurcated it
into TAKEN_FROM_ARGUMENT1 and TAKEN_FROM_ARGUMENT4. Now there's enough
info in ArgumentDescriptor objects to deduce the # of bytes consumed by
each opcode.
Rearranged the order in which proto2 opcodes are listed in pickle.py.
Tim Peters [Mon, 27 Jan 2003 19:01:47 +0000 (19:01 +0000)]
stringnl_noescape_pair(): changed the reader to separate the two
component strings by a blank instead of a period. Guido pointed
out that the component strings (at least the first one) can be
dotted already. find_class() is overridable too, so only God knows
all the possibilities that make sense to someone.
Tim Peters [Mon, 27 Jan 2003 18:51:48 +0000 (18:51 +0000)]
Moving pickletools.py from the sandbox into the std library. I started
this over the weekend, and it made faster & better progress than I
expected -- it's already useful <wink>.
Skip Montanaro [Mon, 27 Jan 2003 15:00:38 +0000 (15:00 +0000)]
* add \versionadded{} strings as appropriate
* remove doc for defunct IllegalKeywordArgument exception
* add note that HTTP class is for backward compatibility and refer reader to
online docstrings for help
Martin v. Löwis [Sun, 26 Jan 2003 09:04:35 +0000 (09:04 +0000)]
Merge with PyXML 1.3:
Add support for the DOM Level 3 (draft) DOMImplementationSource interface
to the xml.dom and xml.dom.minidom modules. Note API issue: the draft spec
says to return null when there is no suitable implementation, while the
Python getDOMImplementation() function raises ImportError (minor).