Mercurial > cpython-lru_cache-weakref
annotate Lib/pickletools.py @ 79691:05c8928362ee
Merge __next__ method link fixes with 3.3.
| author | Ezio Melotti <ezio.melotti@gmail.com> |
|---|---|
| date | Fri, 12 Oct 2012 13:46:37 +0300 |
| parents | 98df29d51e12 |
| children | 4ced30417300 313bcff51900 |
| rev | line source |
|---|---|
| 27518 | 1 '''"Executable documentation" for the pickle module. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
3 Extensive comments about the pickle protocols and pickle-machine opcodes |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
4 can be found here. Some functions meant for external use: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
5 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
6 genops(pickle) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
7 Generate all the opcodes in a pickle, as (opcode, arg, position) triples. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
8 |
|
33004
867fef2b5060
Add argument to docstring
Andrew M. Kuchling <amk@amk.ca>
parents:
27703
diff
changeset
|
9 dis(pickle, out=None, memo=None, indentlevel=4) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
10 Print a symbolic disassembly of a pickle. |
| 27518 | 11 ''' |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
12 |
|
42064
bc90fc9b70b7
Rip out all codecs that can't work in a unicode/bytes world:
Walter Dörwald <walter@livinglogic.de>
parents:
41986
diff
changeset
|
13 import codecs |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43664
diff
changeset
|
14 import pickle |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43664
diff
changeset
|
15 import re |
|
42064
bc90fc9b70b7
Rip out all codecs that can't work in a unicode/bytes world:
Walter Dörwald <walter@livinglogic.de>
parents:
41986
diff
changeset
|
16 |
|
45278
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
17 __all__ = ['dis', 'genops', 'optimize'] |
|
33917
25714e0fc89d
Essentially SF patch 1061679: add missing __all__ to pickletools.py.
Tim Peters <tim.peters@gmail.com>
parents:
33004
diff
changeset
|
18 |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43664
diff
changeset
|
19 bytes_types = pickle.bytes_types |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43664
diff
changeset
|
20 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
21 # Other ideas: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
22 # |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
23 # - A pickle verifier: read a pickle and check it exhaustively for |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
24 # well-formedness. dis() does a lot of this already. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
25 # |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
26 # - A protocol identifier: examine a pickle and return its protocol number |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
27 # (== the highest .proto attr value among all the opcodes in the pickle). |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
28 # dis() already prints this info at the end. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
29 # |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
30 # - A pickle optimizer: for example, tuple-building code is sometimes more |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
31 # elaborate than necessary, catering for the possibility that the tuple |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
32 # is recursive. Or lots of times a PUT is generated that's never accessed |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
33 # by a later GET. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
34 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
35 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
36 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
37 "A pickle" is a program for a virtual pickle machine (PM, but more accurately |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
38 called an unpickling machine). It's a sequence of opcodes, interpreted by the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
39 PM, building an arbitrarily complex Python object. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
40 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
41 For the most part, the PM is very simple: there are no looping, testing, or |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
42 conditional instructions, no arithmetic and no function calls. Opcodes are |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
43 executed once each, from first to last, until a STOP opcode is reached. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
44 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
45 The PM has two data areas, "the stack" and "the memo". |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
46 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
47 Many opcodes push Python objects onto the stack; e.g., INT pushes a Python |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
48 integer object on the stack, whose value is gotten from a decimal string |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
49 literal immediately following the INT opcode in the pickle bytestream. Other |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
50 opcodes take Python objects off the stack. The result of unpickling is |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
51 whatever object is left on the stack when the final STOP opcode is executed. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
52 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
53 The memo is simply an array of objects, or it can be implemented as a dict |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
54 mapping little integers to objects. The memo serves as the PM's "long term |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
55 memory", and the little integers indexing the memo are akin to variable |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
56 names. Some opcodes pop a stack object into the memo at a given index, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
57 and others push a memo object at a given index onto the stack again. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
58 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
59 At heart, that's all the PM has. Subtleties arise for these reasons: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
60 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
61 + Object identity. Objects can be arbitrarily complex, and subobjects |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
62 may be shared (for example, the list [a, a] refers to the same object a |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
63 twice). It can be vital that unpickling recreate an isomorphic object |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
64 graph, faithfully reproducing sharing. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
65 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
66 + Recursive objects. For example, after "L = []; L.append(L)", L is a |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
67 list, and L[0] is the same list. This is related to the object identity |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
68 point, and some sequences of pickle opcodes are subtle in order to |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
69 get the right result in all cases. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
70 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
71 + Things pickle doesn't know everything about. Examples of things pickle |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
72 does know everything about are Python's builtin scalar and container |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
73 types, like ints and tuples. They generally have opcodes dedicated to |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
74 them. For things like module references and instances of user-defined |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
75 classes, pickle's knowledge is limited. Historically, many enhancements |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
76 have been made to the pickle protocol in order to do a better (faster, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
77 and/or more compact) job on those. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
78 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
79 + Backward compatibility and micro-optimization. As explained below, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
80 pickle opcodes never go away, not even when better ways to do a thing |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
81 get invented. The repertoire of the PM just keeps growing over time. |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
82 For example, protocol 0 had two opcodes for building Python integers (INT |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
83 and LONG), protocol 1 added three more for more-efficient pickling of short |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
84 integers, and protocol 2 added two more for more-efficient pickling of |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
85 long integers (before protocol 2, the only ways to pickle a Python long |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
86 took time quadratic in the number of digits, for both pickling and |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
87 unpickling). "Opcode bloat" isn't so much a subtlety as a source of |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
88 wearying complication. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
89 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
90 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
91 Pickle protocols: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
92 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
93 For compatibility, the meaning of a pickle opcode never changes. Instead new |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
94 pickle opcodes get added, and each version's unpickler can handle all the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
95 pickle opcodes in all protocol versions to date. So old pickles continue to |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
96 be readable forever. The pickler can generally be told to restrict itself to |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
97 the subset of opcodes available under previous protocol versions too, so that |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
98 users can create pickles under the current version readable by older |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
99 versions. However, a pickle does not contain its version number embedded |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
100 within it. If an older unpickler tries to read a pickle using a later |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
101 protocol, the result is most likely an exception due to seeing an unknown (in |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
102 the older unpickler) opcode. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
103 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
104 The original pickle used what's now called "protocol 0", and what was called |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
105 "text mode" before Python 2.3. The entire pickle bytestream is made up of |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
106 printable 7-bit ASCII characters, plus the newline character, in protocol 0. |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
107 That's why it was called text mode. Protocol 0 is small and elegant, but |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
108 sometimes painfully inefficient. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
109 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
110 The second major set of additions is now called "protocol 1", and was called |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
111 "binary mode" before Python 2.3. This added many opcodes with arguments |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
112 consisting of arbitrary bytes, including NUL bytes and unprintable "high bit" |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
113 bytes. Binary mode pickles can be substantially smaller than equivalent |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
114 text mode pickles, and sometimes faster too; e.g., BININT represents a 4-byte |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
115 int as 4 bytes following the opcode, which is cheaper to unpickle than the |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
116 (perhaps) 11-character decimal string attached to INT. Protocol 1 also added |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
117 a number of opcodes that operate on many stack elements at once (like APPENDS |
| 27463 | 118 and SETITEMS), and "shortcut" opcodes (like EMPTY_DICT and EMPTY_TUPLE). |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
119 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
120 The third major set of additions came in Python 2.3, and is called "protocol |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
121 2". This added: |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
122 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
123 - A better way to pickle instances of new-style classes (NEWOBJ). |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
124 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
125 - A way for a pickle to identify its protocol (PROTO). |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
126 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
127 - Time- and space- efficient pickling of long ints (LONG{1,4}). |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
128 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
129 - Shortcuts for small tuples (TUPLE{1,2,3}}. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
130 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
131 - Dedicated opcodes for bools (NEWTRUE, NEWFALSE). |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
132 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
133 - The "extension registry", a vector of popular objects that can be pushed |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
134 efficiently by index (EXT{1,2,4}). This is akin to the memo and GET, but |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
135 the registry contents are predefined (there's nothing akin to the memo's |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
136 PUT). |
|
27513
b1d1fe7fb514
Document the demise of all pretenses of safety, and the difference
Guido van Rossum <guido@python.org>
parents:
27507
diff
changeset
|
137 |
| 27518 | 138 Another independent change with Python 2.3 is the abandonment of any |
| 139 pretense that it might be safe to load pickles received from untrusted | |
|
27513
b1d1fe7fb514
Document the demise of all pretenses of safety, and the difference
Guido van Rossum <guido@python.org>
parents:
27507
diff
changeset
|
140 parties -- no sufficient security analysis has been done to guarantee |
| 27518 | 141 this and there isn't a use case that warrants the expense of such an |
|
27513
b1d1fe7fb514
Document the demise of all pretenses of safety, and the difference
Guido van Rossum <guido@python.org>
parents:
27507
diff
changeset
|
142 analysis. |
|
b1d1fe7fb514
Document the demise of all pretenses of safety, and the difference
Guido van Rossum <guido@python.org>
parents:
27507
diff
changeset
|
143 |
|
b1d1fe7fb514
Document the demise of all pretenses of safety, and the difference
Guido van Rossum <guido@python.org>
parents:
27507
diff
changeset
|
144 To this end, all tests for __safe_for_unpickling__ or for |
|
46867
dd5513b472dc
Rename copy_reg module to copyreg.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
45812
diff
changeset
|
145 copyreg.safe_constructors are removed from the unpickling code. |
|
27513
b1d1fe7fb514
Document the demise of all pretenses of safety, and the difference
Guido van Rossum <guido@python.org>
parents:
27507
diff
changeset
|
146 References to these variables in the descriptions below are to be seen |
|
b1d1fe7fb514
Document the demise of all pretenses of safety, and the difference
Guido van Rossum <guido@python.org>
parents:
27507
diff
changeset
|
147 as describing unpickling in Python 2.2 and before. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
148 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
149 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
150 # Meta-rule: Descriptions are stored in instances of descriptor objects, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
151 # with plain constructors. No meta-language is defined from which |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
152 # descriptors could be constructed. If you want, e.g., XML, write a little |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
153 # program to generate XML from the objects. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
154 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
155 ############################################################################## |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
156 # Some pickle opcodes have an argument, following the opcode in the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
157 # bytestream. An argument is of a specific type, described by an instance |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
158 # of ArgumentDescriptor. These are not to be confused with arguments taken |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
159 # off the stack -- ArgumentDescriptor applies only to arguments embedded in |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
160 # the opcode stream, immediately following an opcode. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
161 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
162 # Represents the number of bytes consumed by an argument delimited by the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
163 # next newline character. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
164 UP_TO_NEWLINE = -1 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
165 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
166 # Represents the number of bytes consumed by a two-argument opcode where |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
167 # the first argument gives the number of bytes in the second argument. |
|
27435
430ed1c8e071
Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,
Tim Peters <tim.peters@gmail.com>
parents:
27434
diff
changeset
|
168 TAKEN_FROM_ARGUMENT1 = -2 # num bytes is 1-byte unsigned int |
|
430ed1c8e071
Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,
Tim Peters <tim.peters@gmail.com>
parents:
27434
diff
changeset
|
169 TAKEN_FROM_ARGUMENT4 = -3 # num bytes is 4-byte signed little-endian int |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
170 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
171 class ArgumentDescriptor(object): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
172 __slots__ = ( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
173 # name of descriptor record, also a module global name; a string |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
174 'name', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
175 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
176 # length of argument, in bytes; an int; UP_TO_NEWLINE and |
|
27435
430ed1c8e071
Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,
Tim Peters <tim.peters@gmail.com>
parents:
27434
diff
changeset
|
177 # TAKEN_FROM_ARGUMENT{1,4} are negative values for variable-length |
|
430ed1c8e071
Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,
Tim Peters <tim.peters@gmail.com>
parents:
27434
diff
changeset
|
178 # cases |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
179 'n', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
180 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
181 # a function taking a file-like object, reading this kind of argument |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
182 # from the object at the current position, advancing the current |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
183 # position by n bytes, and returning the value of the argument |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
184 'reader', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
185 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
186 # human-readable docs for this arg descriptor; a string |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
187 'doc', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
188 ) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
189 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
190 def __init__(self, name, n, reader, doc): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
191 assert isinstance(name, str) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
192 self.name = name |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
193 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
194 assert isinstance(n, int) and (n >= 0 or |
|
27435
430ed1c8e071
Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,
Tim Peters <tim.peters@gmail.com>
parents:
27434
diff
changeset
|
195 n in (UP_TO_NEWLINE, |
|
430ed1c8e071
Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,
Tim Peters <tim.peters@gmail.com>
parents:
27434
diff
changeset
|
196 TAKEN_FROM_ARGUMENT1, |
|
430ed1c8e071
Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,
Tim Peters <tim.peters@gmail.com>
parents:
27434
diff
changeset
|
197 TAKEN_FROM_ARGUMENT4)) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
198 self.n = n |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
199 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
200 self.reader = reader |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
201 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
202 assert isinstance(doc, str) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
203 self.doc = doc |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
204 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
205 from struct import unpack as _unpack |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
206 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
207 def read_uint1(f): |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
208 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
209 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
210 >>> read_uint1(io.BytesIO(b'\xff')) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
211 255 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
212 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
213 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
214 data = f.read(1) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
215 if data: |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
216 return data[0] |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
217 raise ValueError("not enough data in stream to read uint1") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
218 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
219 uint1 = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
220 name='uint1', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
221 n=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
222 reader=read_uint1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
223 doc="One-byte unsigned integer.") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
224 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
225 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
226 def read_uint2(f): |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
227 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
228 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
229 >>> read_uint2(io.BytesIO(b'\xff\x00')) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
230 255 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
231 >>> read_uint2(io.BytesIO(b'\xff\xff')) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
232 65535 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
233 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
234 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
235 data = f.read(2) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
236 if len(data) == 2: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
237 return _unpack("<H", data)[0] |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
238 raise ValueError("not enough data in stream to read uint2") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
239 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
240 uint2 = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
241 name='uint2', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
242 n=2, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
243 reader=read_uint2, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
244 doc="Two-byte unsigned integer, little-endian.") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
245 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
246 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
247 def read_int4(f): |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
248 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
249 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
250 >>> read_int4(io.BytesIO(b'\xff\x00\x00\x00')) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
251 255 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
252 >>> read_int4(io.BytesIO(b'\x00\x00\x00\x80')) == -(2**31) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
253 True |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
254 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
255 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
256 data = f.read(4) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
257 if len(data) == 4: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
258 return _unpack("<i", data)[0] |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
259 raise ValueError("not enough data in stream to read int4") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
260 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
261 int4 = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
262 name='int4', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
263 n=4, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
264 reader=read_int4, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
265 doc="Four-byte signed integer, little-endian, 2's complement.") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
266 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
267 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
268 def read_stringnl(f, decode=True, stripquotes=True): |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
269 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
270 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
271 >>> read_stringnl(io.BytesIO(b"'abcd'\nefg\n")) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
272 'abcd' |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
273 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
274 >>> read_stringnl(io.BytesIO(b"\n")) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
275 Traceback (most recent call last): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
276 ... |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
277 ValueError: no string quotes around b'' |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
278 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
279 >>> read_stringnl(io.BytesIO(b"\n"), stripquotes=False) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
280 '' |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
281 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
282 >>> read_stringnl(io.BytesIO(b"''\n")) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
283 '' |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
284 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
285 >>> read_stringnl(io.BytesIO(b'"abcd"')) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
286 Traceback (most recent call last): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
287 ... |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
288 ValueError: no newline found when trying to read stringnl |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
289 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
290 Embedded escapes are undone in the result. |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
291 >>> read_stringnl(io.BytesIO(br"'a\n\\b\x00c\td'" + b"\n'e'")) |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
292 'a\n\\b\x00c\td' |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
293 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
294 |
|
42295
5337c3a4a273
Make test_pickletools.py pass.
Guido van Rossum <guido@python.org>
parents:
42064
diff
changeset
|
295 data = f.readline() |
|
42919
c72a3cc21ef7
More str/bytes fixes.
Guido van Rossum <guido@python.org>
parents:
42501
diff
changeset
|
296 if not data.endswith(b'\n'): |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
297 raise ValueError("no newline found when trying to read stringnl") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
298 data = data[:-1] # lose the newline |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
299 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
300 if stripquotes: |
|
42919
c72a3cc21ef7
More str/bytes fixes.
Guido van Rossum <guido@python.org>
parents:
42501
diff
changeset
|
301 for q in (b'"', b"'"): |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
302 if data.startswith(q): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
303 if not data.endswith(q): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
304 raise ValueError("strinq quote %r not found at both " |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
305 "ends of %r" % (q, data)) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
306 data = data[1:-1] |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
307 break |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
308 else: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
309 raise ValueError("no string quotes around %r" % data) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
310 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
311 if decode: |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43664
diff
changeset
|
312 data = codecs.escape_decode(data)[0].decode("ascii") |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
313 return data |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
314 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
315 stringnl = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
316 name='stringnl', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
317 n=UP_TO_NEWLINE, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
318 reader=read_stringnl, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
319 doc="""A newline-terminated string. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
320 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
321 This is a repr-style string, with embedded escapes, and |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
322 bracketing quotes. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
323 """) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
324 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
325 def read_stringnl_noescape(f): |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43664
diff
changeset
|
326 return read_stringnl(f, stripquotes=False) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
327 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
328 stringnl_noescape = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
329 name='stringnl_noescape', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
330 n=UP_TO_NEWLINE, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
331 reader=read_stringnl_noescape, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
332 doc="""A newline-terminated string. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
333 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
334 This is a str-style string, without embedded escapes, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
335 or bracketing quotes. It should consist solely of |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
336 printable ASCII characters. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
337 """) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
338 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
339 def read_stringnl_noescape_pair(f): |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
340 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
341 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
342 >>> read_stringnl_noescape_pair(io.BytesIO(b"Queue\nEmpty\njunk")) |
|
27422
24c8fbec761f
stringnl_noescape_pair(): changed the reader to separate the two
Tim Peters <tim.peters@gmail.com>
parents:
27421
diff
changeset
|
343 'Queue Empty' |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
344 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
345 |
|
27422
24c8fbec761f
stringnl_noescape_pair(): changed the reader to separate the two
Tim Peters <tim.peters@gmail.com>
parents:
27421
diff
changeset
|
346 return "%s %s" % (read_stringnl_noescape(f), read_stringnl_noescape(f)) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
347 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
348 stringnl_noescape_pair = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
349 name='stringnl_noescape_pair', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
350 n=UP_TO_NEWLINE, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
351 reader=read_stringnl_noescape_pair, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
352 doc="""A pair of newline-terminated strings. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
353 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
354 These are str-style strings, without embedded |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
355 escapes, or bracketing quotes. They should |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
356 consist solely of printable ASCII characters. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
357 The pair is returned as a single string, with |
|
27422
24c8fbec761f
stringnl_noescape_pair(): changed the reader to separate the two
Tim Peters <tim.peters@gmail.com>
parents:
27421
diff
changeset
|
358 a single blank separating the two strings. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
359 """) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
360 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
361 def read_string4(f): |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
362 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
363 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
364 >>> read_string4(io.BytesIO(b"\x00\x00\x00\x00abc")) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
365 '' |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
366 >>> read_string4(io.BytesIO(b"\x03\x00\x00\x00abcdef")) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
367 'abc' |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
368 >>> read_string4(io.BytesIO(b"\x00\x00\x00\x03abcdef")) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
369 Traceback (most recent call last): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
370 ... |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
371 ValueError: expected 50331648 bytes in a string4, but only 6 remain |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
372 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
373 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
374 n = read_int4(f) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
375 if n < 0: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
376 raise ValueError("string4 byte count < 0: %d" % n) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
377 data = f.read(n) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
378 if len(data) == n: |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
379 return data.decode("latin-1") |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
380 raise ValueError("expected %d bytes in a string4, but only %d remain" % |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
381 (n, len(data))) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
382 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
383 string4 = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
384 name="string4", |
|
27435
430ed1c8e071
Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,
Tim Peters <tim.peters@gmail.com>
parents:
27434
diff
changeset
|
385 n=TAKEN_FROM_ARGUMENT4, |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
386 reader=read_string4, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
387 doc="""A counted string. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
388 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
389 The first argument is a 4-byte little-endian signed int giving |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
390 the number of bytes in the string, and the second argument is |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
391 that many bytes. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
392 """) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
393 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
394 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
395 def read_string1(f): |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
396 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
397 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
398 >>> read_string1(io.BytesIO(b"\x00")) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
399 '' |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
400 >>> read_string1(io.BytesIO(b"\x03abcdef")) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
401 'abc' |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
402 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
403 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
404 n = read_uint1(f) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
405 assert n >= 0 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
406 data = f.read(n) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
407 if len(data) == n: |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
408 return data.decode("latin-1") |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
409 raise ValueError("expected %d bytes in a string1, but only %d remain" % |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
410 (n, len(data))) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
411 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
412 string1 = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
413 name="string1", |
|
27435
430ed1c8e071
Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,
Tim Peters <tim.peters@gmail.com>
parents:
27434
diff
changeset
|
414 n=TAKEN_FROM_ARGUMENT1, |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
415 reader=read_string1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
416 doc="""A counted string. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
417 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
418 The first argument is a 1-byte unsigned int giving the number |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
419 of bytes in the string, and the second argument is that many |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
420 bytes. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
421 """) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
422 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
423 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
424 def read_unicodestringnl(f): |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
425 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
426 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
427 >>> read_unicodestringnl(io.BytesIO(b"abc\\uabcd\njunk")) == 'abc\uabcd' |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
428 True |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
429 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
430 |
|
42295
5337c3a4a273
Make test_pickletools.py pass.
Guido van Rossum <guido@python.org>
parents:
42064
diff
changeset
|
431 data = f.readline() |
|
42919
c72a3cc21ef7
More str/bytes fixes.
Guido van Rossum <guido@python.org>
parents:
42501
diff
changeset
|
432 if not data.endswith(b'\n'): |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
433 raise ValueError("no newline found when trying to read " |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
434 "unicodestringnl") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
435 data = data[:-1] # lose the newline |
|
41575
beacf40b5960
Rip out all the u"..." literals and calls to unicode().
Guido van Rossum <guido@python.org>
parents:
40930
diff
changeset
|
436 return str(data, 'raw-unicode-escape') |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
437 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
438 unicodestringnl = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
439 name='unicodestringnl', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
440 n=UP_TO_NEWLINE, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
441 reader=read_unicodestringnl, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
442 doc="""A newline-terminated Unicode string. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
443 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
444 This is raw-unicode-escape encoded, so consists of |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
445 printable ASCII characters, and may contain embedded |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
446 escape sequences. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
447 """) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
448 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
449 def read_unicodestring4(f): |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
450 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
451 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
452 >>> s = 'abcd\uabcd' |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
453 >>> enc = s.encode('utf-8') |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
454 >>> enc |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
455 b'abcd\xea\xaf\x8d' |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
456 >>> n = bytes([len(enc), 0, 0, 0]) # little-endian 4-byte length |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
457 >>> t = read_unicodestring4(io.BytesIO(n + enc + b'junk')) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
458 >>> s == t |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
459 True |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
460 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
461 >>> read_unicodestring4(io.BytesIO(n + enc[:-1])) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
462 Traceback (most recent call last): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
463 ... |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
464 ValueError: expected 7 bytes in a unicodestring4, but only 6 remain |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
465 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
466 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
467 n = read_int4(f) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
468 if n < 0: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
469 raise ValueError("unicodestring4 byte count < 0: %d" % n) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
470 data = f.read(n) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
471 if len(data) == n: |
|
60577
7994269ad3a1
Issue #8383: pickle and pickletools use surrogatepass error handler when
Victor Stinner <victor.stinner@haypocalc.com>
parents:
54584
diff
changeset
|
472 return str(data, 'utf-8', 'surrogatepass') |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
473 raise ValueError("expected %d bytes in a unicodestring4, but only %d " |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
474 "remain" % (n, len(data))) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
475 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
476 unicodestring4 = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
477 name="unicodestring4", |
|
27435
430ed1c8e071
Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,
Tim Peters <tim.peters@gmail.com>
parents:
27434
diff
changeset
|
478 n=TAKEN_FROM_ARGUMENT4, |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
479 reader=read_unicodestring4, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
480 doc="""A counted Unicode string. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
481 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
482 The first argument is a 4-byte little-endian signed int |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
483 giving the number of bytes in the string, and the second |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
484 argument-- the UTF-8 encoding of the Unicode string -- |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
485 contains that many bytes. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
486 """) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
487 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
488 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
489 def read_decimalnl_short(f): |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
490 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
491 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
492 >>> read_decimalnl_short(io.BytesIO(b"1234\n56")) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
493 1234 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
494 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
495 >>> read_decimalnl_short(io.BytesIO(b"1234L\n56")) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
496 Traceback (most recent call last): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
497 ... |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
498 ValueError: trailing 'L' not allowed in b'1234L' |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
499 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
500 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
501 s = read_stringnl(f, decode=False, stripquotes=False) |
|
42919
c72a3cc21ef7
More str/bytes fixes.
Guido van Rossum <guido@python.org>
parents:
42501
diff
changeset
|
502 if s.endswith(b"L"): |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
503 raise ValueError("trailing 'L' not allowed in %r" % s) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
504 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
505 # It's not necessarily true that the result fits in a Python short int: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
506 # the pickle may have been written on a 64-bit box. There's also a hack |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
507 # for True and False here. |
|
43003
cd80eb989728
Change string literals to bytes, since they are compared to bytes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
42919
diff
changeset
|
508 if s == b"00": |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
509 return False |
|
43003
cd80eb989728
Change string literals to bytes, since they are compared to bytes.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
42919
diff
changeset
|
510 elif s == b"01": |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
511 return True |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
512 |
|
73076
67053b135ed9
Cleanup code: remove int/long idioms and simplify a while statement.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
68586
diff
changeset
|
513 return int(s) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
514 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
515 def read_decimalnl_long(f): |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
516 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
517 >>> import io |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
518 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
519 >>> read_decimalnl_long(io.BytesIO(b"1234L\n56")) |
|
39575
63237fcefd99
Get rid of dict.has_key(). Boy this has a lot of repercussions!
Guido van Rossum <guido@python.org>
parents:
38397
diff
changeset
|
520 1234 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
521 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
522 >>> read_decimalnl_long(io.BytesIO(b"123456789012345678901234L\n6")) |
|
39575
63237fcefd99
Get rid of dict.has_key(). Boy this has a lot of repercussions!
Guido van Rossum <guido@python.org>
parents:
38397
diff
changeset
|
523 123456789012345678901234 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
524 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
525 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
526 s = read_stringnl(f, decode=False, stripquotes=False) |
|
50946
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
527 if s[-1:] == b'L': |
|
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
528 s = s[:-1] |
|
40644
1c26505c1de6
Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents:
40640
diff
changeset
|
529 return int(s) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
530 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
531 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
532 decimalnl_short = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
533 name='decimalnl_short', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
534 n=UP_TO_NEWLINE, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
535 reader=read_decimalnl_short, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
536 doc="""A newline-terminated decimal integer literal. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
537 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
538 This never has a trailing 'L', and the integer fit |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
539 in a short Python int on the box where the pickle |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
540 was written -- but there's no guarantee it will fit |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
541 in a short Python int on the box where the pickle |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
542 is read. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
543 """) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
544 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
545 decimalnl_long = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
546 name='decimalnl_long', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
547 n=UP_TO_NEWLINE, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
548 reader=read_decimalnl_long, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
549 doc="""A newline-terminated decimal integer literal. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
550 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
551 This has a trailing 'L', and can represent integers |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
552 of any size. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
553 """) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
554 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
555 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
556 def read_floatnl(f): |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
557 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
558 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
559 >>> read_floatnl(io.BytesIO(b"-1.25\n6")) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
560 -1.25 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
561 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
562 s = read_stringnl(f, decode=False, stripquotes=False) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
563 return float(s) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
564 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
565 floatnl = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
566 name='floatnl', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
567 n=UP_TO_NEWLINE, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
568 reader=read_floatnl, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
569 doc="""A newline-terminated decimal floating literal. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
570 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
571 In general this requires 17 significant digits for roundtrip |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
572 identity, and pickling then unpickling infinities, NaNs, and |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
573 minus zero doesn't work across boxes, or on some boxes even |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
574 on itself (e.g., Windows can't read the strings it produces |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
575 for infinities or NaNs). |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
576 """) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
577 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
578 def read_float8(f): |
|
27473
154bac0b26a5
Use raw-mode docstring whenever there's an escape code in an example --
Tim Peters <tim.peters@gmail.com>
parents:
27472
diff
changeset
|
579 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
580 >>> import io, struct |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
581 >>> raw = struct.pack(">d", -1.25) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
582 >>> raw |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
583 b'\xbf\xf4\x00\x00\x00\x00\x00\x00' |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
584 >>> read_float8(io.BytesIO(raw + b"\n")) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
585 -1.25 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
586 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
587 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
588 data = f.read(8) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
589 if len(data) == 8: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
590 return _unpack(">d", data)[0] |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
591 raise ValueError("not enough data in stream to read float8") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
592 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
593 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
594 float8 = ArgumentDescriptor( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
595 name='float8', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
596 n=8, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
597 reader=read_float8, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
598 doc="""An 8-byte binary representation of a float, big-endian. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
599 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
600 The format is unique to Python, and shared with the struct |
|
42322
3e33215c66ed
Getting rid of cPickle. Mmm, feels good!
Guido van Rossum <guido@python.org>
parents:
42295
diff
changeset
|
601 module (format string '>d') "in theory" (the struct and pickle |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
602 implementations don't share the code -- they should). It's |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
603 strongly related to the IEEE-754 double format, and, in normal |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
604 cases, is in fact identical to the big-endian 754 double format. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
605 On other boxes the dynamic range is limited to that of a 754 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
606 double, and "add a half and chop" rounding is used to reduce |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
607 the precision to 53 bits. However, even on a 754 box, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
608 infinities, NaNs, and minus zero may not be handled correctly |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
609 (may not survive roundtrip pickling intact). |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
610 """) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
611 |
|
27429
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
612 # Protocol 2 formats |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
613 |
|
27506
b480a4f707f6
pickle: Comment repair.
Tim Peters <tim.peters@gmail.com>
parents:
27473
diff
changeset
|
614 from pickle import decode_long |
|
27429
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
615 |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
616 def read_long1(f): |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
617 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
618 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
619 >>> read_long1(io.BytesIO(b"\x00")) |
|
39575
63237fcefd99
Get rid of dict.has_key(). Boy this has a lot of repercussions!
Guido van Rossum <guido@python.org>
parents:
38397
diff
changeset
|
620 0 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
621 >>> read_long1(io.BytesIO(b"\x02\xff\x00")) |
|
39575
63237fcefd99
Get rid of dict.has_key(). Boy this has a lot of repercussions!
Guido van Rossum <guido@python.org>
parents:
38397
diff
changeset
|
622 255 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
623 >>> read_long1(io.BytesIO(b"\x02\xff\x7f")) |
|
39575
63237fcefd99
Get rid of dict.has_key(). Boy this has a lot of repercussions!
Guido van Rossum <guido@python.org>
parents:
38397
diff
changeset
|
624 32767 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
625 >>> read_long1(io.BytesIO(b"\x02\x00\xff")) |
|
39575
63237fcefd99
Get rid of dict.has_key(). Boy this has a lot of repercussions!
Guido van Rossum <guido@python.org>
parents:
38397
diff
changeset
|
626 -256 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
627 >>> read_long1(io.BytesIO(b"\x02\x00\x80")) |
|
39575
63237fcefd99
Get rid of dict.has_key(). Boy this has a lot of repercussions!
Guido van Rossum <guido@python.org>
parents:
38397
diff
changeset
|
628 -32768 |
|
27429
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
629 """ |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
630 |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
631 n = read_uint1(f) |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
632 data = f.read(n) |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
633 if len(data) != n: |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
634 raise ValueError("not enough data in stream to read long1") |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
635 return decode_long(data) |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
636 |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
637 long1 = ArgumentDescriptor( |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
638 name="long1", |
|
27435
430ed1c8e071
Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,
Tim Peters <tim.peters@gmail.com>
parents:
27434
diff
changeset
|
639 n=TAKEN_FROM_ARGUMENT1, |
|
27429
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
640 reader=read_long1, |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
641 doc="""A binary long, little-endian, using 1-byte size. |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
642 |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
643 This first reads one byte as an unsigned size, then reads that |
|
27434
7116cb5bac50
Documented the 2's-comp business for the new long opcodes.
Tim Peters <tim.peters@gmail.com>
parents:
27433
diff
changeset
|
644 many bytes and interprets them as a little-endian 2's-complement long. |
|
27552
50c734250e05
It's Official: for LONG1/LONG4, a "byte count" of 0 is taken as a
Tim Peters <tim.peters@gmail.com>
parents:
27535
diff
changeset
|
645 If the size is 0, that's taken as a shortcut for the long 0L. |
|
27429
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
646 """) |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
647 |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
648 def read_long4(f): |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
649 r""" |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
650 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
651 >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\xff\x00")) |
|
39575
63237fcefd99
Get rid of dict.has_key(). Boy this has a lot of repercussions!
Guido van Rossum <guido@python.org>
parents:
38397
diff
changeset
|
652 255 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
653 >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\xff\x7f")) |
|
39575
63237fcefd99
Get rid of dict.has_key(). Boy this has a lot of repercussions!
Guido van Rossum <guido@python.org>
parents:
38397
diff
changeset
|
654 32767 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
655 >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\x00\xff")) |
|
39575
63237fcefd99
Get rid of dict.has_key(). Boy this has a lot of repercussions!
Guido van Rossum <guido@python.org>
parents:
38397
diff
changeset
|
656 -256 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
657 >>> read_long4(io.BytesIO(b"\x02\x00\x00\x00\x00\x80")) |
|
39575
63237fcefd99
Get rid of dict.has_key(). Boy this has a lot of repercussions!
Guido van Rossum <guido@python.org>
parents:
38397
diff
changeset
|
658 -32768 |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
659 >>> read_long1(io.BytesIO(b"\x00\x00\x00\x00")) |
|
39575
63237fcefd99
Get rid of dict.has_key(). Boy this has a lot of repercussions!
Guido van Rossum <guido@python.org>
parents:
38397
diff
changeset
|
660 0 |
|
27429
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
661 """ |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
662 |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
663 n = read_int4(f) |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
664 if n < 0: |
|
27436
60ff1ba428c3
Use proper function name in exception messages
Neal Norwitz <nnorwitz@gmail.com>
parents:
27435
diff
changeset
|
665 raise ValueError("long4 byte count < 0: %d" % n) |
|
27429
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
666 data = f.read(n) |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
667 if len(data) != n: |
|
27436
60ff1ba428c3
Use proper function name in exception messages
Neal Norwitz <nnorwitz@gmail.com>
parents:
27435
diff
changeset
|
668 raise ValueError("not enough data in stream to read long4") |
|
27429
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
669 return decode_long(data) |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
670 |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
671 long4 = ArgumentDescriptor( |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
672 name="long4", |
|
27435
430ed1c8e071
Removed the new LONG2 opcode: it's extravagant. If LONG1 isn't enough,
Tim Peters <tim.peters@gmail.com>
parents:
27434
diff
changeset
|
673 n=TAKEN_FROM_ARGUMENT4, |
|
27429
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
674 reader=read_long4, |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
675 doc="""A binary representation of a long, little-endian. |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
676 |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
677 This first reads four bytes as a signed size (but requires the |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
678 size to be >= 0), then reads that many bytes and interprets them |
|
27552
50c734250e05
It's Official: for LONG1/LONG4, a "byte count" of 0 is taken as a
Tim Peters <tim.peters@gmail.com>
parents:
27535
diff
changeset
|
679 as a little-endian 2's-complement long. If the size is 0, that's taken |
|
40644
1c26505c1de6
Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents:
40640
diff
changeset
|
680 as a shortcut for the int 0, although LONG1 should really be used |
|
27552
50c734250e05
It's Official: for LONG1/LONG4, a "byte count" of 0 is taken as a
Tim Peters <tim.peters@gmail.com>
parents:
27535
diff
changeset
|
681 then instead (and in any case where # of bytes < 256). |
|
27429
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
682 """) |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
683 |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
684 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
685 ############################################################################## |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
686 # Object descriptors. The stack used by the pickle machine holds objects, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
687 # and in the stack_before and stack_after attributes of OpcodeInfo |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
688 # descriptors we need names to describe the various types of objects that can |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
689 # appear on the stack. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
690 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
691 class StackObject(object): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
692 __slots__ = ( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
693 # name of descriptor record, for info only |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
694 'name', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
695 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
696 # type of object, or tuple of type objects (meaning the object can |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
697 # be of any type in the tuple) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
698 'obtype', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
699 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
700 # human-readable docs for this kind of stack object; a string |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
701 'doc', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
702 ) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
703 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
704 def __init__(self, name, obtype, doc): |
|
43577
ace45b361e87
Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents:
43003
diff
changeset
|
705 assert isinstance(name, str) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
706 self.name = name |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
707 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
708 assert isinstance(obtype, type) or isinstance(obtype, tuple) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
709 if isinstance(obtype, tuple): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
710 for contained in obtype: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
711 assert isinstance(contained, type) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
712 self.obtype = obtype |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
713 |
|
43577
ace45b361e87
Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents:
43003
diff
changeset
|
714 assert isinstance(doc, str) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
715 self.doc = doc |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
716 |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
717 def __repr__(self): |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
718 return self.name |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
719 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
720 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
721 pyint = StackObject( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
722 name='int', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
723 obtype=int, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
724 doc="A short (as opposed to long) Python integer object.") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
725 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
726 pylong = StackObject( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
727 name='long', |
|
40644
1c26505c1de6
Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents:
40640
diff
changeset
|
728 obtype=int, |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
729 doc="A long (as opposed to short) Python integer object.") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
730 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
731 pyinteger_or_bool = StackObject( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
732 name='int_or_bool', |
|
64010
656fe6292f9f
Merged revisions 83212,83829,83833,83838-83839,83878,84019,84025,84028,84032,84036 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
63041
diff
changeset
|
733 obtype=(int, bool), |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
734 doc="A Python integer object (short or long), or " |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
735 "a Python bool.") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
736 |
|
27429
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
737 pybool = StackObject( |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
738 name='bool', |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
739 obtype=(bool,), |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
740 doc="A Python bool object.") |
|
b465c9d2196a
Begin documenting protocol 2.
Guido van Rossum <guido@python.org>
parents:
27424
diff
changeset
|
741 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
742 pyfloat = StackObject( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
743 name='float', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
744 obtype=float, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
745 doc="A Python float object.") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
746 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
747 pystring = StackObject( |
|
45812
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
748 name='string', |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
749 obtype=bytes, |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
750 doc="A Python (8-bit) string object.") |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
751 |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
752 pybytes = StackObject( |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43664
diff
changeset
|
753 name='bytes', |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43664
diff
changeset
|
754 obtype=bytes, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43664
diff
changeset
|
755 doc="A Python bytes object.") |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
756 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
757 pyunicode = StackObject( |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43664
diff
changeset
|
758 name='str', |
|
41575
beacf40b5960
Rip out all the u"..." literals and calls to unicode().
Guido van Rossum <guido@python.org>
parents:
40930
diff
changeset
|
759 obtype=str, |
|
45812
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
760 doc="A Python (Unicode) string object.") |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
761 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
762 pynone = StackObject( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
763 name="None", |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
764 obtype=type(None), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
765 doc="The Python None object.") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
766 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
767 pytuple = StackObject( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
768 name="tuple", |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
769 obtype=tuple, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
770 doc="A Python tuple object.") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
771 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
772 pylist = StackObject( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
773 name="list", |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
774 obtype=list, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
775 doc="A Python list object.") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
776 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
777 pydict = StackObject( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
778 name="dict", |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
779 obtype=dict, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
780 doc="A Python dict object.") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
781 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
782 anyobject = StackObject( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
783 name='any', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
784 obtype=object, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
785 doc="Any kind of object whatsoever.") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
786 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
787 markobject = StackObject( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
788 name="mark", |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
789 obtype=StackObject, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
790 doc="""'The mark' is a unique object. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
791 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
792 Opcodes that operate on a variable number of objects |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
793 generally don't embed the count of objects in the opcode, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
794 or pull it off the stack. Instead the MARK opcode is used |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
795 to push a special marker object on the stack, and then |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
796 some other opcodes grab all the objects from the top of |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
797 the stack down to (but not including) the topmost marker |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
798 object. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
799 """) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
800 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
801 stackslice = StackObject( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
802 name="stackslice", |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
803 obtype=StackObject, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
804 doc="""An object representing a contiguous slice of the stack. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
805 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
806 This is used in conjuction with markobject, to represent all |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
807 of the stack following the topmost markobject. For example, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
808 the POP_MARK opcode changes the stack from |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
809 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
810 [..., markobject, stackslice] |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
811 to |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
812 [...] |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
813 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
814 No matter how many object are on the stack after the topmost |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
815 markobject, POP_MARK gets rid of all of them (including the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
816 topmost markobject too). |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
817 """) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
818 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
819 ############################################################################## |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
820 # Descriptors for pickle opcodes. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
821 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
822 class OpcodeInfo(object): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
823 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
824 __slots__ = ( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
825 # symbolic name of opcode; a string |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
826 'name', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
827 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
828 # the code used in a bytestream to represent the opcode; a |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
829 # one-character string |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
830 'code', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
831 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
832 # If the opcode has an argument embedded in the byte string, an |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
833 # instance of ArgumentDescriptor specifying its type. Note that |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
834 # arg.reader(s) can be used to read and decode the argument from |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
835 # the bytestream s, and arg.doc documents the format of the raw |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
836 # argument bytes. If the opcode doesn't have an argument embedded |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
837 # in the bytestream, arg should be None. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
838 'arg', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
839 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
840 # what the stack looks like before this opcode runs; a list |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
841 'stack_before', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
842 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
843 # what the stack looks like after this opcode runs; a list |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
844 'stack_after', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
845 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
846 # the protocol number in which this opcode was introduced; an int |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
847 'proto', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
848 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
849 # human-readable docs for this opcode; a string |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
850 'doc', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
851 ) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
852 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
853 def __init__(self, name, code, arg, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
854 stack_before, stack_after, proto, doc): |
|
43577
ace45b361e87
Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents:
43003
diff
changeset
|
855 assert isinstance(name, str) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
856 self.name = name |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
857 |
|
43577
ace45b361e87
Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents:
43003
diff
changeset
|
858 assert isinstance(code, str) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
859 assert len(code) == 1 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
860 self.code = code |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
861 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
862 assert arg is None or isinstance(arg, ArgumentDescriptor) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
863 self.arg = arg |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
864 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
865 assert isinstance(stack_before, list) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
866 for x in stack_before: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
867 assert isinstance(x, StackObject) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
868 self.stack_before = stack_before |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
869 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
870 assert isinstance(stack_after, list) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
871 for x in stack_after: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
872 assert isinstance(x, StackObject) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
873 self.stack_after = stack_after |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
874 |
|
45812
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
875 assert isinstance(proto, int) and 0 <= proto <= 3 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
876 self.proto = proto |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
877 |
|
43577
ace45b361e87
Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents:
43003
diff
changeset
|
878 assert isinstance(doc, str) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
879 self.doc = doc |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
880 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
881 I = OpcodeInfo |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
882 opcodes = [ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
883 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
884 # Ways to spell integers. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
885 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
886 I(name='INT', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
887 code='I', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
888 arg=decimalnl_short, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
889 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
890 stack_after=[pyinteger_or_bool], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
891 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
892 doc="""Push an integer or bool. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
893 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
894 The argument is a newline-terminated decimal literal string. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
895 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
896 The intent may have been that this always fit in a short Python int, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
897 but INT can be generated in pickles written on a 64-bit box that |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
898 require a Python long on a 32-bit box. The difference between this |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
899 and LONG then is that INT skips a trailing 'L', and produces a short |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
900 int whenever possible. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
901 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
902 Another difference is due to that, when bool was introduced as a |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
903 distinct type in 2.3, builtin names True and False were also added to |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
904 2.2.2, mapping to ints 1 and 0. For compatibility in both directions, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
905 True gets pickled as INT + "I01\\n", and False as INT + "I00\\n". |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
906 Leading zeroes are never produced for a genuine integer. The 2.3 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
907 (and later) unpicklers special-case these and return bool instead; |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
908 earlier unpicklers ignore the leading "0" and return the int. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
909 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
910 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
911 I(name='BININT', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
912 code='J', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
913 arg=int4, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
914 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
915 stack_after=[pyint], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
916 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
917 doc="""Push a four-byte signed integer. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
918 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
919 This handles the full range of Python (short) integers on a 32-bit |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
920 box, directly as binary bytes (1 for the opcode and 4 for the integer). |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
921 If the integer is non-negative and fits in 1 or 2 bytes, pickling via |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
922 BININT1 or BININT2 saves space. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
923 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
924 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
925 I(name='BININT1', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
926 code='K', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
927 arg=uint1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
928 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
929 stack_after=[pyint], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
930 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
931 doc="""Push a one-byte unsigned integer. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
932 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
933 This is a space optimization for pickling very small non-negative ints, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
934 in range(256). |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
935 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
936 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
937 I(name='BININT2', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
938 code='M', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
939 arg=uint2, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
940 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
941 stack_after=[pyint], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
942 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
943 doc="""Push a two-byte unsigned integer. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
944 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
945 This is a space optimization for pickling small positive ints, in |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
946 range(256, 2**16). Integers in range(256) can also be pickled via |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
947 BININT2, but BININT1 instead saves a byte. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
948 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
949 |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
950 I(name='LONG', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
951 code='L', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
952 arg=decimalnl_long, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
953 stack_before=[], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
954 stack_after=[pylong], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
955 proto=0, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
956 doc="""Push a long integer. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
957 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
958 The same as INT, except that the literal ends with 'L', and always |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
959 unpickles to a Python long. There doesn't seem a real purpose to the |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
960 trailing 'L'. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
961 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
962 Note that LONG takes time quadratic in the number of digits when |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
963 unpickling (this is simply due to the nature of decimal->binary |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
964 conversion). Proto 2 added linear-time (in C; still quadratic-time |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
965 in Python) LONG1 and LONG4 opcodes. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
966 """), |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
967 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
968 I(name="LONG1", |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
969 code='\x8a', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
970 arg=long1, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
971 stack_before=[], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
972 stack_after=[pylong], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
973 proto=2, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
974 doc="""Long integer using one-byte length. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
975 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
976 A more efficient encoding of a Python long; the long1 encoding |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
977 says it all."""), |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
978 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
979 I(name="LONG4", |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
980 code='\x8b', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
981 arg=long4, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
982 stack_before=[], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
983 stack_after=[pylong], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
984 proto=2, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
985 doc="""Long integer using found-byte length. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
986 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
987 A more efficient encoding of a Python long; the long4 encoding |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
988 says it all."""), |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
989 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
990 # Ways to spell strings (8-bit, not Unicode). |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
991 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
992 I(name='STRING', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
993 code='S', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
994 arg=stringnl, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
995 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
996 stack_after=[pystring], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
997 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
998 doc="""Push a Python string object. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
999 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1000 The argument is a repr-style string, with bracketing quote characters, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1001 and perhaps embedded escapes. The argument extends until the next |
|
45812
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1002 newline character. (Actually, they are decoded into a str instance |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1003 using the encoding given to the Unpickler constructor. or the default, |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1004 'ASCII'.) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1005 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1006 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1007 I(name='BINSTRING', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1008 code='T', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1009 arg=string4, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1010 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1011 stack_after=[pystring], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1012 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1013 doc="""Push a Python string object. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1014 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1015 There are two arguments: the first is a 4-byte little-endian signed int |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1016 giving the number of bytes in the string, and the second is that many |
|
45812
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1017 bytes, which are taken literally as the string content. (Actually, |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1018 they are decoded into a str instance using the encoding given to the |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1019 Unpickler constructor. or the default, 'ASCII'.) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1020 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1021 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1022 I(name='SHORT_BINSTRING', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1023 code='U', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1024 arg=string1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1025 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1026 stack_after=[pystring], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1027 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1028 doc="""Push a Python string object. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1029 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1030 There are two arguments: the first is a 1-byte unsigned int giving |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1031 the number of bytes in the string, and the second is that many bytes, |
|
45812
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1032 which are taken literally as the string content. (Actually, they |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1033 are decoded into a str instance using the encoding given to the |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1034 Unpickler constructor. or the default, 'ASCII'.) |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1035 """), |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1036 |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1037 # Bytes (protocol 3 only; older protocols don't support bytes at all) |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1038 |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1039 I(name='BINBYTES', |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1040 code='B', |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1041 arg=string4, |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1042 stack_before=[], |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1043 stack_after=[pybytes], |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1044 proto=3, |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1045 doc="""Push a Python bytes object. |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1046 |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1047 There are two arguments: the first is a 4-byte little-endian signed int |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1048 giving the number of bytes in the string, and the second is that many |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1049 bytes, which are taken literally as the bytes content. |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1050 """), |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1051 |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1052 I(name='SHORT_BINBYTES', |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1053 code='C', |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1054 arg=string1, |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1055 stack_before=[], |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1056 stack_after=[pybytes], |
|
54215
6fab8bd15d71
Merge r72792: POP_MARK was not in pickle protocol 0, SHORT_BINBYTES was not in protocol 1.
Collin Winter <collinw@gmail.com>
parents:
51022
diff
changeset
|
1057 proto=3, |
|
45812
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1058 doc="""Push a Python string object. |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1059 |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1060 There are two arguments: the first is a 1-byte unsigned int giving |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
1061 the number of bytes in the string, and the second is that many bytes, |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1062 which are taken literally as the string content. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1063 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1064 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1065 # Ways to spell None. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1066 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1067 I(name='NONE', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1068 code='N', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1069 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1070 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1071 stack_after=[pynone], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1072 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1073 doc="Push None on the stack."), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1074 |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1075 # Ways to spell bools, starting with proto 2. See INT for how this was |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1076 # done before proto 2. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1077 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1078 I(name='NEWTRUE', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1079 code='\x88', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1080 arg=None, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1081 stack_before=[], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1082 stack_after=[pybool], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1083 proto=2, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1084 doc="""True. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1085 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1086 Push True onto the stack."""), |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1087 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1088 I(name='NEWFALSE', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1089 code='\x89', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1090 arg=None, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1091 stack_before=[], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1092 stack_after=[pybool], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1093 proto=2, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1094 doc="""True. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1095 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1096 Push False onto the stack."""), |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1097 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1098 # Ways to spell Unicode strings. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1099 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1100 I(name='UNICODE', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1101 code='V', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1102 arg=unicodestringnl, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1103 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1104 stack_after=[pyunicode], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1105 proto=0, # this may be pure-text, but it's a later addition |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1106 doc="""Push a Python Unicode string object. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1107 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1108 The argument is a raw-unicode-escape encoding of a Unicode string, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1109 and so may contain embedded escape sequences. The argument extends |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1110 until the next newline character. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1111 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1112 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1113 I(name='BINUNICODE', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1114 code='X', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1115 arg=unicodestring4, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1116 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1117 stack_after=[pyunicode], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1118 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1119 doc="""Push a Python Unicode string object. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1120 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1121 There are two arguments: the first is a 4-byte little-endian signed int |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1122 giving the number of bytes in the string. The second is that many |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1123 bytes, and is the UTF-8 encoding of the Unicode string. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1124 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1125 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1126 # Ways to spell floats. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1127 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1128 I(name='FLOAT', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1129 code='F', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1130 arg=floatnl, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1131 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1132 stack_after=[pyfloat], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1133 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1134 doc="""Newline-terminated decimal float literal. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1135 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1136 The argument is repr(a_float), and in general requires 17 significant |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1137 digits for roundtrip conversion to be an identity (this is so for |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1138 IEEE-754 double precision values, which is what Python float maps to |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1139 on most boxes). |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1140 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1141 In general, FLOAT cannot be used to transport infinities, NaNs, or |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1142 minus zero across boxes (or even on a single box, if the platform C |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1143 library can't read the strings it produces for such things -- Windows |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1144 is like that), but may do less damage than BINFLOAT on boxes with |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1145 greater precision or dynamic range than IEEE-754 double. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1146 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1147 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1148 I(name='BINFLOAT', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1149 code='G', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1150 arg=float8, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1151 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1152 stack_after=[pyfloat], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1153 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1154 doc="""Float stored in binary form, with 8 bytes of data. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1155 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1156 This generally requires less than half the space of FLOAT encoding. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1157 In general, BINFLOAT cannot be used to transport infinities, NaNs, or |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1158 minus zero, raises an exception if the exponent exceeds the range of |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1159 an IEEE-754 double, and retains no more than 53 bits of precision (if |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1160 there are more than that, "add a half and chop" rounding is used to |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1161 cut it back to 53 significant bits). |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1162 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1163 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1164 # Ways to build lists. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1165 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1166 I(name='EMPTY_LIST', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1167 code=']', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1168 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1169 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1170 stack_after=[pylist], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1171 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1172 doc="Push an empty list."), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1173 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1174 I(name='APPEND', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1175 code='a', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1176 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1177 stack_before=[pylist, anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1178 stack_after=[pylist], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1179 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1180 doc="""Append an object to a list. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1181 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1182 Stack before: ... pylist anyobject |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1183 Stack after: ... pylist+[anyobject] |
| 27463 | 1184 |
| 1185 although pylist is really extended in-place. | |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1186 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1187 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1188 I(name='APPENDS', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1189 code='e', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1190 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1191 stack_before=[pylist, markobject, stackslice], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1192 stack_after=[pylist], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1193 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1194 doc="""Extend a list by a slice of stack objects. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1195 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1196 Stack before: ... pylist markobject stackslice |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1197 Stack after: ... pylist+stackslice |
| 27463 | 1198 |
| 1199 although pylist is really extended in-place. | |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1200 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1201 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1202 I(name='LIST', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1203 code='l', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1204 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1205 stack_before=[markobject, stackslice], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1206 stack_after=[pylist], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1207 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1208 doc="""Build a list out of the topmost stack slice, after markobject. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1209 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1210 All the stack entries following the topmost markobject are placed into |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1211 a single Python list, which single list object replaces all of the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1212 stack from the topmost markobject onward. For example, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1213 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1214 Stack before: ... markobject 1 2 3 'abc' |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1215 Stack after: ... [1, 2, 3, 'abc'] |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1216 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1217 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1218 # Ways to build tuples. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1219 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1220 I(name='EMPTY_TUPLE', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1221 code=')', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1222 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1223 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1224 stack_after=[pytuple], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1225 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1226 doc="Push an empty tuple."), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1227 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1228 I(name='TUPLE', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1229 code='t', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1230 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1231 stack_before=[markobject, stackslice], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1232 stack_after=[pytuple], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1233 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1234 doc="""Build a tuple out of the topmost stack slice, after markobject. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1235 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1236 All the stack entries following the topmost markobject are placed into |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1237 a single Python tuple, which single tuple object replaces all of the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1238 stack from the topmost markobject onward. For example, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1239 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1240 Stack before: ... markobject 1 2 3 'abc' |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1241 Stack after: ... (1, 2, 3, 'abc') |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1242 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1243 |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1244 I(name='TUPLE1', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1245 code='\x85', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1246 arg=None, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1247 stack_before=[anyobject], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1248 stack_after=[pytuple], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1249 proto=2, |
|
63041
24f7fa2581e6
Merged revisions 82915 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
1250 doc="""Build a one-tuple out of the topmost item on the stack. |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1251 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1252 This code pops one value off the stack and pushes a tuple of |
|
63041
24f7fa2581e6
Merged revisions 82915 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
1253 length 1 whose one item is that value back onto it. In other |
|
24f7fa2581e6
Merged revisions 82915 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
1254 words: |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1255 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1256 stack[-1] = tuple(stack[-1:]) |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1257 """), |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1258 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1259 I(name='TUPLE2', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1260 code='\x86', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1261 arg=None, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1262 stack_before=[anyobject, anyobject], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1263 stack_after=[pytuple], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1264 proto=2, |
|
63041
24f7fa2581e6
Merged revisions 82915 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
1265 doc="""Build a two-tuple out of the top two items on the stack. |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1266 |
|
63041
24f7fa2581e6
Merged revisions 82915 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
1267 This code pops two values off the stack and pushes a tuple of |
|
24f7fa2581e6
Merged revisions 82915 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
1268 length 2 whose items are those values back onto it. In other |
|
24f7fa2581e6
Merged revisions 82915 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
1269 words: |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1270 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1271 stack[-2:] = [tuple(stack[-2:])] |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1272 """), |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1273 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1274 I(name='TUPLE3', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1275 code='\x87', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1276 arg=None, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1277 stack_before=[anyobject, anyobject, anyobject], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1278 stack_after=[pytuple], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1279 proto=2, |
|
63041
24f7fa2581e6
Merged revisions 82915 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
1280 doc="""Build a three-tuple out of the top three items on the stack. |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1281 |
|
63041
24f7fa2581e6
Merged revisions 82915 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
1282 This code pops three values off the stack and pushes a tuple of |
|
24f7fa2581e6
Merged revisions 82915 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
1283 length 3 whose items are those values back onto it. In other |
|
24f7fa2581e6
Merged revisions 82915 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
1284 words: |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1285 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1286 stack[-3:] = [tuple(stack[-3:])] |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1287 """), |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1288 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1289 # Ways to build dicts. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1290 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1291 I(name='EMPTY_DICT', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1292 code='}', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1293 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1294 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1295 stack_after=[pydict], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1296 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1297 doc="Push an empty dict."), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1298 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1299 I(name='DICT', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1300 code='d', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1301 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1302 stack_before=[markobject, stackslice], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1303 stack_after=[pydict], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1304 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1305 doc="""Build a dict out of the topmost stack slice, after markobject. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1306 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1307 All the stack entries following the topmost markobject are placed into |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1308 a single Python dict, which single dict object replaces all of the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1309 stack from the topmost markobject onward. The stack slice alternates |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1310 key, value, key, value, .... For example, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1311 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1312 Stack before: ... markobject 1 2 3 'abc' |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1313 Stack after: ... {1: 2, 3: 'abc'} |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1314 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1315 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1316 I(name='SETITEM', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1317 code='s', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1318 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1319 stack_before=[pydict, anyobject, anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1320 stack_after=[pydict], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1321 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1322 doc="""Add a key+value pair to an existing dict. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1323 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1324 Stack before: ... pydict key value |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1325 Stack after: ... pydict |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1326 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1327 where pydict has been modified via pydict[key] = value. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1328 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1329 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1330 I(name='SETITEMS', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1331 code='u', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1332 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1333 stack_before=[pydict, markobject, stackslice], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1334 stack_after=[pydict], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1335 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1336 doc="""Add an arbitrary number of key+value pairs to an existing dict. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1337 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1338 The slice of the stack following the topmost markobject is taken as |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1339 an alternating sequence of keys and values, added to the dict |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1340 immediately under the topmost markobject. Everything at and after the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1341 topmost markobject is popped, leaving the mutated dict at the top |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1342 of the stack. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1343 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1344 Stack before: ... pydict markobject key_1 value_1 ... key_n value_n |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1345 Stack after: ... pydict |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1346 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1347 where pydict has been modified via pydict[key_i] = value_i for i in |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1348 1, 2, ..., n, and in that order. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1349 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1350 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1351 # Stack manipulation. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1352 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1353 I(name='POP', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1354 code='0', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1355 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1356 stack_before=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1357 stack_after=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1358 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1359 doc="Discard the top stack item, shrinking the stack by one item."), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1360 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1361 I(name='DUP', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1362 code='2', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1363 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1364 stack_before=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1365 stack_after=[anyobject, anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1366 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1367 doc="Push the top stack item onto the stack again, duplicating it."), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1368 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1369 I(name='MARK', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1370 code='(', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1371 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1372 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1373 stack_after=[markobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1374 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1375 doc="""Push markobject onto the stack. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1376 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1377 markobject is a unique object, used by other opcodes to identify a |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1378 region of the stack containing a variable number of objects for them |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1379 to work on. See markobject.doc for more detail. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1380 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1381 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1382 I(name='POP_MARK', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1383 code='1', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1384 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1385 stack_before=[markobject, stackslice], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1386 stack_after=[], |
|
54215
6fab8bd15d71
Merge r72792: POP_MARK was not in pickle protocol 0, SHORT_BINBYTES was not in protocol 1.
Collin Winter <collinw@gmail.com>
parents:
51022
diff
changeset
|
1387 proto=1, |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1388 doc="""Pop all the stack objects at and above the topmost markobject. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1389 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1390 When an opcode using a variable number of stack objects is done, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1391 POP_MARK is used to remove those objects, and to remove the markobject |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1392 that delimited their starting position on the stack. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1393 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1394 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1395 # Memo manipulation. There are really only two operations (get and put), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1396 # each in all-text, "short binary", and "long binary" flavors. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1397 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1398 I(name='GET', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1399 code='g', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1400 arg=decimalnl_short, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1401 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1402 stack_after=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1403 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1404 doc="""Read an object from the memo and push it on the stack. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1405 |
|
68585
bf94b6a73fc8
#11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
64010
diff
changeset
|
1406 The index of the memo object to push is given by the newline-terminated |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1407 decimal string following. BINGET and LONG_BINGET are space-optimized |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1408 versions. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1409 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1410 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1411 I(name='BINGET', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1412 code='h', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1413 arg=uint1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1414 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1415 stack_after=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1416 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1417 doc="""Read an object from the memo and push it on the stack. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1418 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1419 The index of the memo object to push is given by the 1-byte unsigned |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1420 integer following. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1421 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1422 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1423 I(name='LONG_BINGET', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1424 code='j', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1425 arg=int4, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1426 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1427 stack_after=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1428 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1429 doc="""Read an object from the memo and push it on the stack. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1430 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1431 The index of the memo object to push is given by the 4-byte signed |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1432 little-endian integer following. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1433 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1434 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1435 I(name='PUT', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1436 code='p', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1437 arg=decimalnl_short, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1438 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1439 stack_after=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1440 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1441 doc="""Store the stack top into the memo. The stack is not popped. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1442 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1443 The index of the memo location to write into is given by the newline- |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1444 terminated decimal string following. BINPUT and LONG_BINPUT are |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1445 space-optimized versions. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1446 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1447 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1448 I(name='BINPUT', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1449 code='q', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1450 arg=uint1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1451 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1452 stack_after=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1453 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1454 doc="""Store the stack top into the memo. The stack is not popped. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1455 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1456 The index of the memo location to write into is given by the 1-byte |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1457 unsigned integer following. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1458 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1459 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1460 I(name='LONG_BINPUT', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1461 code='r', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1462 arg=int4, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1463 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1464 stack_after=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1465 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1466 doc="""Store the stack top into the memo. The stack is not popped. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1467 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1468 The index of the memo location to write into is given by the 4-byte |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1469 signed little-endian integer following. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1470 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1471 |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1472 # Access the extension registry (predefined objects). Akin to the GET |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1473 # family. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1474 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1475 I(name='EXT1', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1476 code='\x82', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1477 arg=uint1, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1478 stack_before=[], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1479 stack_after=[anyobject], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1480 proto=2, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1481 doc="""Extension code. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1482 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1483 This code and the similar EXT2 and EXT4 allow using a registry |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1484 of popular objects that are pickled by name, typically classes. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1485 It is envisioned that through a global negotiation and |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1486 registration process, third parties can set up a mapping between |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1487 ints and object names. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1488 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1489 In order to guarantee pickle interchangeability, the extension |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1490 code registry ought to be global, although a range of codes may |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1491 be reserved for private use. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1492 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1493 EXT1 has a 1-byte integer argument. This is used to index into the |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1494 extension registry, and the object at that index is pushed on the stack. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1495 """), |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1496 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1497 I(name='EXT2', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1498 code='\x83', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1499 arg=uint2, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1500 stack_before=[], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1501 stack_after=[anyobject], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1502 proto=2, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1503 doc="""Extension code. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1504 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1505 See EXT1. EXT2 has a two-byte integer argument. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1506 """), |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1507 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1508 I(name='EXT4', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1509 code='\x84', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1510 arg=int4, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1511 stack_before=[], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1512 stack_after=[anyobject], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1513 proto=2, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1514 doc="""Extension code. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1515 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1516 See EXT1. EXT4 has a four-byte integer argument. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1517 """), |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1518 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1519 # Push a class object, or module function, on the stack, via its module |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1520 # and name. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1521 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1522 I(name='GLOBAL', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1523 code='c', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1524 arg=stringnl_noescape_pair, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1525 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1526 stack_after=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1527 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1528 doc="""Push a global object (module.attr) on the stack. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1529 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1530 Two newline-terminated strings follow the GLOBAL opcode. The first is |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1531 taken as a module name, and the second as a class name. The class |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1532 object module.class is pushed on the stack. More accurately, the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1533 object returned by self.find_class(module, class) is pushed on the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1534 stack, so unpickling subclasses can override this form of lookup. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1535 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1536 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1537 # Ways to build objects of classes pickle doesn't know about directly |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1538 # (user-defined classes). I despair of documenting this accurately |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1539 # and comprehensibly -- you really have to read the pickle code to |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1540 # find all the special cases. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1541 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1542 I(name='REDUCE', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1543 code='R', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1544 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1545 stack_before=[anyobject, anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1546 stack_after=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1547 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1548 doc="""Push an object built from a callable and an argument tuple. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1549 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1550 The opcode is named to remind of the __reduce__() method. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1551 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1552 Stack before: ... callable pytuple |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1553 Stack after: ... callable(*pytuple) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1554 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1555 The callable and the argument tuple are the first two items returned |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1556 by a __reduce__ method. Applying the callable to the argtuple is |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1557 supposed to reproduce the original object, or at least get it started. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1558 If the __reduce__ method returns a 3-tuple, the last component is an |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1559 argument to be passed to the object's __setstate__, and then the REDUCE |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1560 opcode is followed by code to create setstate's argument, and then a |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1561 BUILD opcode to apply __setstate__ to that argument. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1562 |
|
41986
6464cc638faa
Merged revisions 55795-55816 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41715
diff
changeset
|
1563 If not isinstance(callable, type), REDUCE complains unless the |
|
46867
dd5513b472dc
Rename copy_reg module to copyreg.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
45812
diff
changeset
|
1564 callable has been registered with the copyreg module's |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1565 safe_constructors dict, or the callable has a magic |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1566 '__safe_for_unpickling__' attribute with a true value. I'm not sure |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1567 why it does this, but I've sure seen this complaint often enough when |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1568 I didn't want to <wink>. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1569 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1570 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1571 I(name='BUILD', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1572 code='b', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1573 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1574 stack_before=[anyobject, anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1575 stack_after=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1576 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1577 doc="""Finish building an object, via __setstate__ or dict update. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1578 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1579 Stack before: ... anyobject argument |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1580 Stack after: ... anyobject |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1581 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1582 where anyobject may have been mutated, as follows: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1583 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1584 If the object has a __setstate__ method, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1585 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1586 anyobject.__setstate__(argument) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1587 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1588 is called. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1589 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1590 Else the argument must be a dict, the object must have a __dict__, and |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1591 the object is updated via |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1592 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1593 anyobject.__dict__.update(argument) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1594 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1595 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1596 I(name='INST', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1597 code='i', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1598 arg=stringnl_noescape_pair, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1599 stack_before=[markobject, stackslice], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1600 stack_after=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1601 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1602 doc="""Build a class instance. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1603 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1604 This is the protocol 0 version of protocol 1's OBJ opcode. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1605 INST is followed by two newline-terminated strings, giving a |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1606 module and class name, just as for the GLOBAL opcode (and see |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1607 GLOBAL for more details about that). self.find_class(module, name) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1608 is used to get a class object. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1609 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1610 In addition, all the objects on the stack following the topmost |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1611 markobject are gathered into a tuple and popped (along with the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1612 topmost markobject), just as for the TUPLE opcode. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1613 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1614 Now it gets complicated. If all of these are true: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1615 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1616 + The argtuple is empty (markobject was at the top of the stack |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1617 at the start). |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1618 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1619 + The class object does not have a __getinitargs__ attribute. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1620 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1621 then we want to create an old-style class instance without invoking |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1622 its __init__() method (pickle has waffled on this over the years; not |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1623 calling __init__() is current wisdom). In this case, an instance of |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1624 an old-style dummy class is created, and then we try to rebind its |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1625 __class__ attribute to the desired class object. If this succeeds, |
|
41715
f60c877d52c8
Merged revisions 55270-55324 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41651
diff
changeset
|
1626 the new instance object is pushed on the stack, and we're done. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1627 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1628 Else (the argtuple is not empty, it's not an old-style class object, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1629 or the class object does have a __getinitargs__ attribute), the code |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1630 first insists that the class object have a __safe_for_unpickling__ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1631 attribute. Unlike as for the __safe_for_unpickling__ check in REDUCE, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1632 it doesn't matter whether this attribute has a true or false value, it |
|
42322
3e33215c66ed
Getting rid of cPickle. Mmm, feels good!
Guido van Rossum <guido@python.org>
parents:
42295
diff
changeset
|
1633 only matters whether it exists (XXX this is a bug). If |
|
3e33215c66ed
Getting rid of cPickle. Mmm, feels good!
Guido van Rossum <guido@python.org>
parents:
42295
diff
changeset
|
1634 __safe_for_unpickling__ doesn't exist, UnpicklingError is raised. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1635 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1636 Else (the class object does have a __safe_for_unpickling__ attr), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1637 the class object obtained from INST's arguments is applied to the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1638 argtuple obtained from the stack, and the resulting instance object |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1639 is pushed on the stack. |
|
27535
72b38d5fe61f
Updated the INST/OBJ docs, to say they really are (almost) identical
Tim Peters <tim.peters@gmail.com>
parents:
27532
diff
changeset
|
1640 |
|
72b38d5fe61f
Updated the INST/OBJ docs, to say they really are (almost) identical
Tim Peters <tim.peters@gmail.com>
parents:
27532
diff
changeset
|
1641 NOTE: checks for __safe_for_unpickling__ went away in Python 2.3. |
|
73949
021e5bb297d1
Issue #13575: there is only one class type.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
73076
diff
changeset
|
1642 NOTE: the distinction between old-style and new-style classes does |
|
021e5bb297d1
Issue #13575: there is only one class type.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
73076
diff
changeset
|
1643 not make sense in Python 3. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1644 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1645 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1646 I(name='OBJ', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1647 code='o', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1648 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1649 stack_before=[markobject, anyobject, stackslice], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1650 stack_after=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1651 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1652 doc="""Build a class instance. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1653 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1654 This is the protocol 1 version of protocol 0's INST opcode, and is |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1655 very much like it. The major difference is that the class object |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1656 is taken off the stack, allowing it to be retrieved from the memo |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1657 repeatedly if several instances of the same class are created. This |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1658 can be much more efficient (in both time and space) than repeatedly |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1659 embedding the module and class names in INST opcodes. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1660 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1661 Unlike INST, OBJ takes no arguments from the opcode stream. Instead |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1662 the class object is taken off the stack, immediately above the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1663 topmost markobject: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1664 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1665 Stack before: ... markobject classobject stackslice |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1666 Stack after: ... new_instance_object |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1667 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1668 As for INST, the remainder of the stack above the markobject is |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1669 gathered into an argument tuple, and then the logic seems identical, |
|
27513
b1d1fe7fb514
Document the demise of all pretenses of safety, and the difference
Guido van Rossum <guido@python.org>
parents:
27507
diff
changeset
|
1670 except that no __safe_for_unpickling__ check is done (XXX this is |
|
42322
3e33215c66ed
Getting rid of cPickle. Mmm, feels good!
Guido van Rossum <guido@python.org>
parents:
42295
diff
changeset
|
1671 a bug). See INST for the gory details. |
|
27535
72b38d5fe61f
Updated the INST/OBJ docs, to say they really are (almost) identical
Tim Peters <tim.peters@gmail.com>
parents:
27532
diff
changeset
|
1672 |
|
72b38d5fe61f
Updated the INST/OBJ docs, to say they really are (almost) identical
Tim Peters <tim.peters@gmail.com>
parents:
27532
diff
changeset
|
1673 NOTE: In Python 2.3, INST and OBJ are identical except for how they |
|
72b38d5fe61f
Updated the INST/OBJ docs, to say they really are (almost) identical
Tim Peters <tim.peters@gmail.com>
parents:
27532
diff
changeset
|
1674 get the class object. That was always the intent; the implementations |
|
72b38d5fe61f
Updated the INST/OBJ docs, to say they really are (almost) identical
Tim Peters <tim.peters@gmail.com>
parents:
27532
diff
changeset
|
1675 had diverged for accidental reasons. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1676 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1677 |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1678 I(name='NEWOBJ', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1679 code='\x81', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1680 arg=None, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1681 stack_before=[anyobject, anyobject], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1682 stack_after=[anyobject], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1683 proto=2, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1684 doc="""Build an object instance. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1685 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1686 The stack before should be thought of as containing a class |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1687 object followed by an argument tuple (the tuple being the stack |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1688 top). Call these cls and args. They are popped off the stack, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1689 and the value returned by cls.__new__(cls, *args) is pushed back |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1690 onto the stack. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1691 """), |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1692 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1693 # Machine control. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1694 |
|
27462
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1695 I(name='PROTO', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1696 code='\x80', |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1697 arg=uint1, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1698 stack_before=[], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1699 stack_after=[], |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1700 proto=2, |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1701 doc="""Protocol version indicator. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1702 |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1703 For protocol 2 and above, a pickle must start with this opcode. |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1704 The argument is the protocol version, an int in range(2, 256). |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1705 """), |
|
26a792007665
Now that proto2 is defined, replaced XXX blocks with text about it.
Tim Peters <tim.peters@gmail.com>
parents:
27436
diff
changeset
|
1706 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1707 I(name='STOP', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1708 code='.', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1709 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1710 stack_before=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1711 stack_after=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1712 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1713 doc="""Stop the unpickling machine. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1714 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1715 Every pickle ends with this opcode. The object at the top of the stack |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1716 is popped, and that's the result of unpickling. The stack should be |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1717 empty then. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1718 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1719 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1720 # Ways to deal with persistent IDs. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1721 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1722 I(name='PERSID', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1723 code='P', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1724 arg=stringnl_noescape, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1725 stack_before=[], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1726 stack_after=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1727 proto=0, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1728 doc="""Push an object identified by a persistent ID. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1729 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1730 The pickle module doesn't define what a persistent ID means. PERSID's |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1731 argument is a newline-terminated str-style (no embedded escapes, no |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1732 bracketing quote characters) string, which *is* "the persistent ID". |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1733 The unpickler passes this string to self.persistent_load(). Whatever |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1734 object that returns is pushed on the stack. There is no implementation |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1735 of persistent_load() in Python's unpickler: it must be supplied by an |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1736 unpickler subclass. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1737 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1738 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1739 I(name='BINPERSID', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1740 code='Q', |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1741 arg=None, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1742 stack_before=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1743 stack_after=[anyobject], |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1744 proto=1, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1745 doc="""Push an object identified by a persistent ID. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1746 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1747 Like PERSID, except the persistent ID is popped off the stack (instead |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1748 of being a string embedded in the opcode bytestream). The persistent |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1749 ID is passed to self.persistent_load(), and whatever object that |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1750 returns is pushed on the stack. See PERSID for more detail. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1751 """), |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1752 ] |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1753 del I |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1754 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1755 # Verify uniqueness of .name and .code members. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1756 name2i = {} |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1757 code2i = {} |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1758 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1759 for i, d in enumerate(opcodes): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1760 if d.name in name2i: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1761 raise ValueError("repeated name %r at indices %d and %d" % |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1762 (d.name, name2i[d.name], i)) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1763 if d.code in code2i: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1764 raise ValueError("repeated code %r at indices %d and %d" % |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1765 (d.code, code2i[d.code], i)) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1766 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1767 name2i[d.name] = i |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1768 code2i[d.code] = i |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1769 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1770 del name2i, code2i, i, d |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1771 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1772 ############################################################################## |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1773 # Build a code2op dict, mapping opcode characters to OpcodeInfo records. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1774 # Also ensure we've got the same stuff as pickle.py, although the |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1775 # introspection here is dicey. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1776 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1777 code2op = {} |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1778 for d in opcodes: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1779 code2op[d.code] = d |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1780 del d |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1781 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1782 def assure_pickle_consistency(verbose=False): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1783 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1784 copy = code2op.copy() |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1785 for name in pickle.__all__: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1786 if not re.match("[A-Z][A-Z0-9_]+$", name): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1787 if verbose: |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40644
diff
changeset
|
1788 print("skipping %r: it doesn't look like an opcode name" % name) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1789 continue |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1790 picklecode = getattr(pickle, name) |
|
41643
c6568550b1c6
Checkpoint. A b it closer to working pickles and pickletools.
Guido van Rossum <guido@python.org>
parents:
41575
diff
changeset
|
1791 if not isinstance(picklecode, bytes) or len(picklecode) != 1: |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1792 if verbose: |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40644
diff
changeset
|
1793 print(("skipping %r: value %r doesn't look like a pickle " |
|
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40644
diff
changeset
|
1794 "code" % (name, picklecode))) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1795 continue |
|
41643
c6568550b1c6
Checkpoint. A b it closer to working pickles and pickletools.
Guido van Rossum <guido@python.org>
parents:
41575
diff
changeset
|
1796 picklecode = picklecode.decode("latin-1") |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1797 if picklecode in copy: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1798 if verbose: |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40644
diff
changeset
|
1799 print("checking name %r w/ code %r for consistency" % ( |
|
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40644
diff
changeset
|
1800 name, picklecode)) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1801 d = copy[picklecode] |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1802 if d.name != name: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1803 raise ValueError("for pickle code %r, pickle.py uses name %r " |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1804 "but we're using name %r" % (picklecode, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1805 name, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1806 d.name)) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1807 # Forget this one. Any left over in copy at the end are a problem |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1808 # of a different kind. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1809 del copy[picklecode] |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1810 else: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1811 raise ValueError("pickle.py appears to have a pickle opcode with " |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1812 "name %r and code %r, but we don't" % |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1813 (name, picklecode)) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1814 if copy: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1815 msg = ["we appear to have pickle opcodes that pickle.py doesn't have:"] |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1816 for code, d in copy.items(): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1817 msg.append(" name %r with code %r" % (d.name, code)) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1818 raise ValueError("\n".join(msg)) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1819 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1820 assure_pickle_consistency() |
|
27506
b480a4f707f6
pickle: Comment repair.
Tim Peters <tim.peters@gmail.com>
parents:
27473
diff
changeset
|
1821 del assure_pickle_consistency |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1822 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1823 ############################################################################## |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1824 # A pickle opcode generator. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1825 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1826 def genops(pickle): |
|
27424
93ba42cf4e53
Remove a stray quote.
Guido van Rossum <guido@python.org>
parents:
27423
diff
changeset
|
1827 """Generate all the opcodes in a pickle. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1828 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1829 'pickle' is a file-like object, or string, containing the pickle. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1830 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1831 Each opcode in the pickle is generated, from the current pickle position, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1832 stopping after a STOP opcode is delivered. A triple is generated for |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1833 each opcode: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1834 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1835 opcode, arg, pos |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1836 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1837 opcode is an OpcodeInfo record, describing the current opcode. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1838 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1839 If the opcode has an argument embedded in the pickle, arg is its decoded |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1840 value, as a Python object. If the opcode doesn't have an argument, arg |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1841 is None. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1842 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1843 If the pickle has a tell() method, pos was the value of pickle.tell() |
|
42501
f6069f9dd52d
SF patch# 1770008 by Christian Heimes (plus some extras).
Guido van Rossum <guido@python.org>
parents:
42322
diff
changeset
|
1844 before reading the current opcode. If the pickle is a bytes object, |
|
f6069f9dd52d
SF patch# 1770008 by Christian Heimes (plus some extras).
Guido van Rossum <guido@python.org>
parents:
42322
diff
changeset
|
1845 it's wrapped in a BytesIO object, and the latter's tell() result is |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1846 used. Else (the pickle doesn't have a tell(), and it's not obvious how |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1847 to query its current position) pos is None. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1848 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1849 |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43664
diff
changeset
|
1850 if isinstance(pickle, bytes_types): |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
1851 import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
1852 pickle = io.BytesIO(pickle) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1853 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1854 if hasattr(pickle, "tell"): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1855 getpos = pickle.tell |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1856 else: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1857 getpos = lambda: None |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1858 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1859 while True: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1860 pos = getpos() |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1861 code = pickle.read(1) |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
1862 opcode = code2op.get(code.decode("latin-1")) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1863 if opcode is None: |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
1864 if code == b"": |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1865 raise ValueError("pickle exhausted before seeing STOP") |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1866 else: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1867 raise ValueError("at position %s, opcode %r unknown" % ( |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1868 pos is None and "<unknown>" or pos, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1869 code)) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1870 if opcode.arg is None: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1871 arg = None |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1872 else: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1873 arg = opcode.arg.reader(pickle) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1874 yield opcode, arg, pos |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
1875 if code == b'.': |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1876 assert opcode.name == 'STOP' |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1877 break |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1878 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1879 ############################################################################## |
|
45278
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1880 # A pickle optimizer. |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1881 |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1882 def optimize(p): |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1883 'Optimize a pickle string by removing unused PUT opcodes' |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1884 gets = set() # set of args used by a GET opcode |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1885 puts = [] # (arg, startpos, stoppos) for the PUT opcodes |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1886 prevpos = None # set to pos if previous opcode was a PUT |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1887 for opcode, arg, pos in genops(p): |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1888 if prevpos is not None: |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1889 puts.append((prevarg, prevpos, pos)) |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1890 prevpos = None |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1891 if 'PUT' in opcode.name: |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1892 prevarg, prevpos = arg, pos |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1893 elif 'GET' in opcode.name: |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1894 gets.add(arg) |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1895 |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1896 # Copy the pickle string except for PUTS without a corresponding GET |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1897 s = [] |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1898 i = 0 |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1899 for arg, start, stop in puts: |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1900 j = stop if (arg in gets) else start |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1901 s.append(p[i:j]) |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1902 i = stop |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1903 s.append(p[i:]) |
|
45288
85b68d7d6f41
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60734 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45278
diff
changeset
|
1904 return b''.join(s) |
|
45278
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1905 |
|
e67050d62adf
Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
1906 ############################################################################## |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1907 # A symbolic pickle disassembler. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1908 |
|
63055
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
1909 def dis(pickle, out=None, memo=None, indentlevel=4, annotate=0): |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1910 """Produce a symbolic disassembly of a pickle. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1911 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1912 'pickle' is a file-like object, or string, containing a (at least one) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1913 pickle. The pickle is disassembled from the current position, through |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1914 the first STOP opcode encountered. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1915 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1916 Optional arg 'out' is a file-like object to which the disassembly is |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1917 printed. It defaults to sys.stdout. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1918 |
|
27703
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
1919 Optional arg 'memo' is a Python dict, used as the pickle's memo. It |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
1920 may be mutated by dis(), if the pickle contains PUT or BINPUT opcodes. |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
1921 Passing the same memo object to another dis() call then allows disassembly |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
1922 to proceed across multiple pickles that were all created by the same |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
1923 pickler with the same memo. Ordinarily you don't need to worry about this. |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
1924 |
|
63055
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
1925 Optional arg 'indentlevel' is the number of blanks by which to indent |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1926 a new MARK level. It defaults to 4. |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1927 |
|
63055
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
1928 Optional arg 'annotate' if nonzero instructs dis() to add short |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
1929 description of the opcode on each line of disassembled output. |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
1930 The value given to 'annotate' must be an integer and is used as a |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
1931 hint for the column where annotation should start. The default |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
1932 value is 0, meaning no annotations. |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
1933 |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1934 In addition to printing the disassembly, some sanity checks are made: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1935 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1936 + All embedded opcode arguments "make sense". |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1937 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1938 + Explicit and implicit pop operations have enough items on the stack. |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1939 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1940 + When an opcode implicitly refers to a markobject, a markobject is |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1941 actually on the stack. |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1942 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1943 + A memo entry isn't referenced before it's defined. |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1944 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1945 + The markobject isn't stored in the memo. |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1946 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1947 + A memo entry isn't redefined. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1948 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1949 |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1950 # Most of the hair here is for sanity checks, but most of it is needed |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1951 # anyway to detect when a protocol 0 POP takes a MARK off the stack |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1952 # (which in turn is needed to indent MARK blocks correctly). |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1953 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1954 stack = [] # crude emulation of unpickler stack |
|
27703
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
1955 if memo is None: |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
1956 memo = {} # crude emulation of unpicker memo |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1957 maxproto = -1 # max protocol number seen |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1958 markstack = [] # bytecode positions of MARK opcodes |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1959 indentchunk = ' ' * indentlevel |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1960 errormsg = None |
|
63055
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
1961 annocol = annotate # columnt hint for annotations |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1962 for opcode, arg, pos in genops(pickle): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1963 if pos is not None: |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40644
diff
changeset
|
1964 print("%5d:" % pos, end=' ', file=out) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1965 |
|
27471
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
1966 line = "%-4s %s%s" % (repr(opcode.code)[1:-1], |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
1967 indentchunk * len(markstack), |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
1968 opcode.name) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1969 |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1970 maxproto = max(maxproto, opcode.proto) |
|
27532
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
1971 before = opcode.stack_before # don't mutate |
|
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
1972 after = opcode.stack_after # don't mutate |
|
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
1973 numtopop = len(before) |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1974 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1975 # See whether a MARK should be popped. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1976 markmsg = None |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1977 if markobject in before or (opcode.name == "POP" and |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1978 stack and |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1979 stack[-1] is markobject): |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1980 assert markobject not in after |
|
27532
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
1981 if __debug__: |
|
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
1982 if markobject in before: |
|
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
1983 assert before[-1] is stackslice |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1984 if markstack: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1985 markpos = markstack.pop() |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1986 if markpos is None: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1987 markmsg = "(MARK at unknown opcode offset)" |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1988 else: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1989 markmsg = "(MARK at %d)" % markpos |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1990 # Pop everything at and after the topmost markobject. |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1991 while stack[-1] is not markobject: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1992 stack.pop() |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1993 stack.pop() |
|
27532
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
1994 # Stop later code from popping too much. |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1995 try: |
|
27532
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
1996 numtopop = before.index(markobject) |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1997 except ValueError: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
1998 assert opcode.name == "POP" |
|
27532
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
1999 numtopop = 0 |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2000 else: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2001 errormsg = markmsg = "no MARK exists on stack" |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2002 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2003 # Check for correct memo usage. |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2004 if opcode.name in ("PUT", "BINPUT", "LONG_BINPUT"): |
|
27532
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
2005 assert arg is not None |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2006 if arg in memo: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2007 errormsg = "memo key %r already defined" % arg |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2008 elif not stack: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2009 errormsg = "stack is empty -- can't store into memo" |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2010 elif stack[-1] is markobject: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2011 errormsg = "can't store markobject in the memo" |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2012 else: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2013 memo[arg] = stack[-1] |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2014 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2015 elif opcode.name in ("GET", "BINGET", "LONG_BINGET"): |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2016 if arg in memo: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2017 assert len(after) == 1 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2018 after = [memo[arg]] # for better stack emulation |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2019 else: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2020 errormsg = "memo key %r has never been stored into" % arg |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2021 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2022 if arg is not None or markmsg: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2023 # make a mild effort to align arguments |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2024 line += ' ' * (10 - len(opcode.name)) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2025 if arg is not None: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2026 line += ' ' + repr(arg) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2027 if markmsg: |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2028 line += ' ' + markmsg |
|
63055
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2029 if annotate: |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2030 line += ' ' * (annocol - len(line)) |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2031 # make a mild effort to align annotations |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2032 annocol = len(line) |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2033 if annocol > 50: |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2034 annocol = annotate |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2035 line += ' ' + opcode.doc.split('\n', 1)[0] |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40644
diff
changeset
|
2036 print(line, file=out) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2037 |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2038 if errormsg: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2039 # Note that we delayed complaining until the offending opcode |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2040 # was printed. |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2041 raise ValueError(errormsg) |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2042 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2043 # Emulate the stack effects. |
|
27532
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
2044 if len(stack) < numtopop: |
|
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
2045 raise ValueError("tries to pop %d items from stack with " |
|
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
2046 "only %d items" % (numtopop, len(stack))) |
|
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
2047 if numtopop: |
|
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
2048 del stack[-numtopop:] |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2049 if markobject in after: |
|
27532
02f138c639a0
dis(): Simplified stack emulation a bit.
Tim Peters <tim.peters@gmail.com>
parents:
27522
diff
changeset
|
2050 assert markobject not in before |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2051 markstack.append(pos) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2052 |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2053 stack.extend(after) |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2054 |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40644
diff
changeset
|
2055 print("highest protocol among opcodes =", maxproto, file=out) |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2056 if stack: |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2057 raise ValueError("stack not empty after STOP: %r" % stack) |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2058 |
|
34590
ff3def77b129
An instance of class PicklingError was used here simply as an example of
Tim Peters <tim.peters@gmail.com>
parents:
34128
diff
changeset
|
2059 # For use in the doctest, simply as an example of a class to pickle. |
|
ff3def77b129
An instance of class PicklingError was used here simply as an example of
Tim Peters <tim.peters@gmail.com>
parents:
34128
diff
changeset
|
2060 class _Example: |
|
ff3def77b129
An instance of class PicklingError was used here simply as an example of
Tim Peters <tim.peters@gmail.com>
parents:
34128
diff
changeset
|
2061 def __init__(self, value): |
|
ff3def77b129
An instance of class PicklingError was used here simply as an example of
Tim Peters <tim.peters@gmail.com>
parents:
34128
diff
changeset
|
2062 self.value = value |
|
ff3def77b129
An instance of class PicklingError was used here simply as an example of
Tim Peters <tim.peters@gmail.com>
parents:
34128
diff
changeset
|
2063 |
|
27472
de4061584c83
_dis_test should be a raw string now that it contains \x escapes.
Guido van Rossum <guido@python.org>
parents:
27471
diff
changeset
|
2064 _dis_test = r""" |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2065 >>> import pickle |
|
45812
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
2066 >>> x = [1, 2, (3, 4), {b'abc': "def"}] |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
2067 >>> pkl0 = pickle.dumps(x, 0) |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
2068 >>> dis(pkl0) |
|
27471
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2069 0: ( MARK |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2070 1: l LIST (MARK at 0) |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2071 2: p PUT 0 |
|
40640
6f5b33947274
Fix pickletools doctests -- all we get nowadays is longs.
Guido van Rossum <guido@python.org>
parents:
39575
diff
changeset
|
2072 5: L LONG 1 |
|
50946
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
2073 9: a APPEND |
|
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
2074 10: L LONG 2 |
|
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
2075 14: a APPEND |
|
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
2076 15: ( MARK |
|
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
2077 16: L LONG 3 |
|
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
2078 20: L LONG 4 |
|
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
2079 24: t TUPLE (MARK at 15) |
|
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
2080 25: p PUT 1 |
|
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
2081 28: a APPEND |
|
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
2082 29: ( MARK |
|
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
2083 30: d DICT (MARK at 29) |
|
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
2084 31: p PUT 2 |
|
73957
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2085 34: c GLOBAL '_codecs encode' |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2086 50: p PUT 3 |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2087 53: ( MARK |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2088 54: V UNICODE 'abc' |
|
54584
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2089 59: p PUT 4 |
|
73957
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2090 62: V UNICODE 'latin1' |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2091 70: p PUT 5 |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2092 73: t TUPLE (MARK at 53) |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2093 74: p PUT 6 |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2094 77: R REDUCE |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2095 78: p PUT 7 |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2096 81: V UNICODE 'def' |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2097 86: p PUT 8 |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2098 89: s SETITEM |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2099 90: a APPEND |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2100 91: . STOP |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2101 highest protocol among opcodes = 0 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2102 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2103 Try again with a "binary" pickle. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2104 |
|
45812
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
2105 >>> pkl1 = pickle.dumps(x, 1) |
|
322693bf10ca
- A new pickle protocol (protocol 3) is added with explicit support
Guido van Rossum <guido@python.org>
parents:
45288
diff
changeset
|
2106 >>> dis(pkl1) |
|
27471
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2107 0: ] EMPTY_LIST |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2108 1: q BINPUT 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2109 3: ( MARK |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2110 4: K BININT1 1 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2111 6: K BININT1 2 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2112 8: ( MARK |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2113 9: K BININT1 3 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2114 11: K BININT1 4 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2115 13: t TUPLE (MARK at 8) |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2116 14: q BINPUT 1 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2117 16: } EMPTY_DICT |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2118 17: q BINPUT 2 |
|
73957
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2119 19: c GLOBAL '_codecs encode' |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2120 35: q BINPUT 3 |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2121 37: ( MARK |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2122 38: X BINUNICODE 'abc' |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2123 46: q BINPUT 4 |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2124 48: X BINUNICODE 'latin1' |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2125 59: q BINPUT 5 |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2126 61: t TUPLE (MARK at 37) |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2127 62: q BINPUT 6 |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2128 64: R REDUCE |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2129 65: q BINPUT 7 |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2130 67: X BINUNICODE 'def' |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2131 75: q BINPUT 8 |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2132 77: s SETITEM |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2133 78: e APPENDS (MARK at 3) |
|
14695b4825dc
Issue #13505: Make pickling of bytes object compatible with Python 2.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
68586
diff
changeset
|
2134 79: . STOP |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2135 highest protocol among opcodes = 1 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2136 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2137 Exercise the INST/OBJ/BUILD family. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2138 |
|
51022
f7f3d841da2c
Merged revisions 68908 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50946
diff
changeset
|
2139 >>> import pickletools |
|
f7f3d841da2c
Merged revisions 68908 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50946
diff
changeset
|
2140 >>> dis(pickle.dumps(pickletools.dis, 0)) |
|
f7f3d841da2c
Merged revisions 68908 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50946
diff
changeset
|
2141 0: c GLOBAL 'pickletools dis' |
|
f7f3d841da2c
Merged revisions 68908 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50946
diff
changeset
|
2142 17: p PUT 0 |
|
f7f3d841da2c
Merged revisions 68908 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50946
diff
changeset
|
2143 20: . STOP |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2144 highest protocol among opcodes = 0 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2145 |
|
34590
ff3def77b129
An instance of class PicklingError was used here simply as an example of
Tim Peters <tim.peters@gmail.com>
parents:
34128
diff
changeset
|
2146 >>> from pickletools import _Example |
|
ff3def77b129
An instance of class PicklingError was used here simply as an example of
Tim Peters <tim.peters@gmail.com>
parents:
34128
diff
changeset
|
2147 >>> x = [_Example(42)] * 2 |
|
27431
f8a90085acc4
Begin the change from 'binary vs. text mode' to 'protocol 0, 1, 2'.
Guido van Rossum <guido@python.org>
parents:
27429
diff
changeset
|
2148 >>> dis(pickle.dumps(x, 0)) |
|
27471
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2149 0: ( MARK |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2150 1: l LIST (MARK at 0) |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2151 2: p PUT 0 |
|
54584
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2152 5: c GLOBAL 'copy_reg _reconstructor' |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2153 30: p PUT 1 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2154 33: ( MARK |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2155 34: c GLOBAL 'pickletools _Example' |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2156 56: p PUT 2 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2157 59: c GLOBAL '__builtin__ object' |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2158 79: p PUT 3 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2159 82: N NONE |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2160 83: t TUPLE (MARK at 33) |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2161 84: p PUT 4 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2162 87: R REDUCE |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2163 88: p PUT 5 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2164 91: ( MARK |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2165 92: d DICT (MARK at 91) |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2166 93: p PUT 6 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2167 96: V UNICODE 'value' |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2168 103: p PUT 7 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2169 106: L LONG 42 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2170 111: s SETITEM |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2171 112: b BUILD |
|
50946
a57d10d6bc89
Merged revisions 68814-68815 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
47645
diff
changeset
|
2172 113: a APPEND |
|
54584
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2173 114: g GET 5 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2174 117: a APPEND |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2175 118: . STOP |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2176 highest protocol among opcodes = 0 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2177 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2178 >>> dis(pickle.dumps(x, 1)) |
|
27471
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2179 0: ] EMPTY_LIST |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2180 1: q BINPUT 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2181 3: ( MARK |
|
54584
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2182 4: c GLOBAL 'copy_reg _reconstructor' |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2183 29: q BINPUT 1 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2184 31: ( MARK |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2185 32: c GLOBAL 'pickletools _Example' |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2186 54: q BINPUT 2 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2187 56: c GLOBAL '__builtin__ object' |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2188 76: q BINPUT 3 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2189 78: N NONE |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2190 79: t TUPLE (MARK at 31) |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2191 80: q BINPUT 4 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2192 82: R REDUCE |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2193 83: q BINPUT 5 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2194 85: } EMPTY_DICT |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2195 86: q BINPUT 6 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2196 88: X BINUNICODE 'value' |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2197 98: q BINPUT 7 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2198 100: K BININT1 42 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2199 102: s SETITEM |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2200 103: b BUILD |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2201 104: h BINGET 5 |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2202 106: e APPENDS (MARK at 3) |
|
0805ea211122
Issue #6137: The pickle module now translates module names when loading
Antoine Pitrou <solipsis@pitrou.net>
parents:
54215
diff
changeset
|
2203 107: . STOP |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2204 highest protocol among opcodes = 1 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2205 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2206 Try "the canonical" recursive-object test. |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2207 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2208 >>> L = [] |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2209 >>> T = L, |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2210 >>> L.append(T) |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2211 >>> L[0] is T |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2212 True |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2213 >>> T[0] is L |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2214 True |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2215 >>> L[0][0] is L |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2216 True |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2217 >>> T[0][0] is T |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2218 True |
|
27431
f8a90085acc4
Begin the change from 'binary vs. text mode' to 'protocol 0, 1, 2'.
Guido van Rossum <guido@python.org>
parents:
27429
diff
changeset
|
2219 >>> dis(pickle.dumps(L, 0)) |
|
27471
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2220 0: ( MARK |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2221 1: l LIST (MARK at 0) |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2222 2: p PUT 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2223 5: ( MARK |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2224 6: g GET 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2225 9: t TUPLE (MARK at 5) |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2226 10: p PUT 1 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2227 13: a APPEND |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2228 14: . STOP |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2229 highest protocol among opcodes = 0 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2230 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2231 >>> dis(pickle.dumps(L, 1)) |
|
27471
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2232 0: ] EMPTY_LIST |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2233 1: q BINPUT 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2234 3: ( MARK |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2235 4: h BINGET 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2236 6: t TUPLE (MARK at 3) |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2237 7: q BINPUT 1 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2238 9: a APPEND |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2239 10: . STOP |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2240 highest protocol among opcodes = 1 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2241 |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2242 Note that, in the protocol 0 pickle of the recursive tuple, the disassembler |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2243 has to emulate the stack in order to realize that the POP opcode at 16 gets |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2244 rid of the MARK at 0. |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2245 |
|
27431
f8a90085acc4
Begin the change from 'binary vs. text mode' to 'protocol 0, 1, 2'.
Guido van Rossum <guido@python.org>
parents:
27429
diff
changeset
|
2246 >>> dis(pickle.dumps(T, 0)) |
|
27471
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2247 0: ( MARK |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2248 1: ( MARK |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2249 2: l LIST (MARK at 1) |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2250 3: p PUT 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2251 6: ( MARK |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2252 7: g GET 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2253 10: t TUPLE (MARK at 6) |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2254 11: p PUT 1 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2255 14: a APPEND |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2256 15: 0 POP |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2257 16: 0 POP (MARK at 0) |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2258 17: g GET 1 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2259 20: . STOP |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2260 highest protocol among opcodes = 0 |
|
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2261 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2262 >>> dis(pickle.dumps(T, 1)) |
|
27471
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2263 0: ( MARK |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2264 1: ] EMPTY_LIST |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2265 2: q BINPUT 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2266 4: ( MARK |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2267 5: h BINGET 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2268 7: t TUPLE (MARK at 4) |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2269 8: q BINPUT 1 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2270 10: a APPEND |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2271 11: 1 POP_MARK (MARK at 0) |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2272 12: h BINGET 1 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2273 14: . STOP |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2274 highest protocol among opcodes = 1 |
|
27471
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2275 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2276 Try protocol 2. |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2277 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2278 >>> dis(pickle.dumps(L, 2)) |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2279 0: \x80 PROTO 2 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2280 2: ] EMPTY_LIST |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2281 3: q BINPUT 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2282 5: h BINGET 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2283 7: \x85 TUPLE1 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2284 8: q BINPUT 1 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2285 10: a APPEND |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2286 11: . STOP |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2287 highest protocol among opcodes = 2 |
|
27471
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2288 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2289 >>> dis(pickle.dumps(T, 2)) |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2290 0: \x80 PROTO 2 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2291 2: ] EMPTY_LIST |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2292 3: q BINPUT 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2293 5: h BINGET 0 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2294 7: \x85 TUPLE1 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2295 8: q BINPUT 1 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2296 10: a APPEND |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2297 11: 0 POP |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2298 12: h BINGET 1 |
|
05f7e1c65d7e
dis(): Not all opcodes are printable anymore, so print the repr
Tim Peters <tim.peters@gmail.com>
parents:
27468
diff
changeset
|
2299 14: . STOP |
|
27522
0f9eb8413b61
dis(): This had a problem with proto 0 pickles, in that POP sometimes
Tim Peters <tim.peters@gmail.com>
parents:
27518
diff
changeset
|
2300 highest protocol among opcodes = 2 |
|
63055
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2301 |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2302 Try protocol 3 with annotations: |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2303 |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2304 >>> dis(pickle.dumps(T, 3), annotate=1) |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2305 0: \x80 PROTO 3 Protocol version indicator. |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2306 2: ] EMPTY_LIST Push an empty list. |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2307 3: q BINPUT 0 Store the stack top into the memo. The stack is not popped. |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2308 5: h BINGET 0 Read an object from the memo and push it on the stack. |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2309 7: \x85 TUPLE1 Build a one-tuple out of the topmost item on the stack. |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2310 8: q BINPUT 1 Store the stack top into the memo. The stack is not popped. |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2311 10: a APPEND Append an object to a list. |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2312 11: 0 POP Discard the top stack item, shrinking the stack by one item. |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2313 12: h BINGET 1 Read an object from the memo and push it on the stack. |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2314 14: . STOP Stop the unpickling machine. |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2315 highest protocol among opcodes = 2 |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2316 |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2317 """ |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2318 |
|
27703
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2319 _memo_test = r""" |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2320 >>> import pickle |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
2321 >>> import io |
|
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
2322 >>> f = io.BytesIO() |
|
27703
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2323 >>> p = pickle.Pickler(f, 2) |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2324 >>> x = [1, 2, 3] |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2325 >>> p.dump(x) |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2326 >>> p.dump(x) |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2327 >>> f.seek(0) |
|
41651
44ebae4f61c4
Got test_pickletools and test_pickle working.
Guido van Rossum <guido@python.org>
parents:
41643
diff
changeset
|
2328 0 |
|
27703
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2329 >>> memo = {} |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2330 >>> dis(f, memo=memo) |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2331 0: \x80 PROTO 2 |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2332 2: ] EMPTY_LIST |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2333 3: q BINPUT 0 |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2334 5: ( MARK |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2335 6: K BININT1 1 |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2336 8: K BININT1 2 |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2337 10: K BININT1 3 |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2338 12: e APPENDS (MARK at 5) |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2339 13: . STOP |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2340 highest protocol among opcodes = 2 |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2341 >>> dis(f, memo=memo) |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2342 14: \x80 PROTO 2 |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2343 16: h BINGET 0 |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2344 18: . STOP |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2345 highest protocol among opcodes = 2 |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2346 """ |
|
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2347 |
|
27468
6ffafcef98fb
Fix one disassembly output now that empty tuples are no longer
Guido van Rossum <guido@python.org>
parents:
27463
diff
changeset
|
2348 __test__ = {'disassembler_test': _dis_test, |
|
27703
0428d59069a9
dis(): Added an optional memo argument, so that multiple pickles in a
Tim Peters <tim.peters@gmail.com>
parents:
27552
diff
changeset
|
2349 'disassembler_memo_test': _memo_test, |
|
27421
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2350 } |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2351 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2352 def _test(): |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2353 import doctest |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2354 return doctest.testmod() |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2355 |
|
0aeaa3d1e0ff
Moving pickletools.py from the sandbox into the std library. I started
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2356 if __name__ == "__main__": |
|
62752
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2357 import sys, argparse |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2358 parser = argparse.ArgumentParser( |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2359 description='disassemble one or more pickle files') |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2360 parser.add_argument( |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2361 'pickle_file', type=argparse.FileType('br'), |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2362 nargs='*', help='the pickle file') |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2363 parser.add_argument( |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2364 '-o', '--output', default=sys.stdout, type=argparse.FileType('w'), |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2365 help='the file where the output should be written') |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2366 parser.add_argument( |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2367 '-m', '--memo', action='store_true', |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2368 help='preserve memo between disassemblies') |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2369 parser.add_argument( |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2370 '-l', '--indentlevel', default=4, type=int, |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2371 help='the number of blanks by which to indent a new MARK level') |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2372 parser.add_argument( |
|
63055
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2373 '-a', '--annotate', action='store_true', |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2374 help='annotate each line with a short opcode description') |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2375 parser.add_argument( |
|
62752
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2376 '-p', '--preamble', default="==> {name} <==", |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2377 help='if more than one pickle file is specified, print this before' |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2378 ' each disassembly') |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2379 parser.add_argument( |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2380 '-t', '--test', action='store_true', |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2381 help='run self-test suite') |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2382 parser.add_argument( |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2383 '-v', action='store_true', |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2384 help='run verbosely; only affects self-test run') |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2385 args = parser.parse_args() |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2386 if args.test: |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2387 _test() |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2388 else: |
|
63055
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2389 annotate = 30 if args.annotate else 0 |
|
62752
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2390 if not args.pickle_file: |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2391 parser.print_help() |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2392 elif len(args.pickle_file) == 1: |
|
63055
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2393 dis(args.pickle_file[0], args.output, None, |
|
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2394 args.indentlevel, annotate) |
|
62752
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2395 else: |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2396 memo = {} if args.memo else None |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2397 for f in args.pickle_file: |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2398 preamble = args.preamble.format(name=f.name) |
|
e42baf678d14
Issue #9094: Make python -m pickletools disassemble pickles given in
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60577
diff
changeset
|
2399 args.output.write(preamble + '\n') |
|
63055
cf4b833a47de
Issue #9268: Add annotation option to pickletools.dis
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63040
diff
changeset
|
2400 dis(f, args.output, memo, args.indentlevel, annotate) |
