annotate Modules/cPickle.c @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 0bba914bf7b2
children a5737dd96979
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /*
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 $Id$
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 Copyright
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 Copyright 1996 Digital Creations, L.C., 910 Princess Anne
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 Street, Suite 300, Fredericksburg, Virginia 22401 U.S.A. All
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 rights reserved. Copyright in this software is owned by DCLC,
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 unless otherwise indicated. Permission to use, copy and
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 distribute this software is hereby granted, provided that the
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 above copyright notice appear in all copies and that both that
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 copyright notice and this permission notice appear. Note that
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 any product, process or technology described in this software
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 may be the subject of other Intellectual Property rights
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 reserved by Digital Creations, L.C. and are not licensed
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 hereunder.
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
17
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 Trademarks
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
19
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 Digital Creations & DCLC, are trademarks of Digital Creations, L.C..
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 All other trademarks are owned by their respective companies.
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
22
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 No Warranty
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
24
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 The software is provided "as is" without warranty of any kind,
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 either express or implied, including, but not limited to, the
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 implied warranties of merchantability, fitness for a particular
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 purpose, or non-infringement. This software could include
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 technical inaccuracies or typographical errors. Changes are
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 periodically made to the software; these changes will be
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 incorporated in new editions of the software. DCLC may make
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 improvements and/or changes in this software at any time
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 without notice.
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
34
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 Limitation Of Liability
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
36
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 In no event will DCLC be liable for direct, indirect, special,
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 incidental, economic, cover, or consequential damages arising
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 out of the use of or inability to use this software even if
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 advised of the possibility of such damages. Some states do not
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 allow the exclusion or limitation of implied warranties or
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 limitation of liability for incidental or consequential
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 damages, so the above limitation or exclusion may not apply to
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 you.
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
45
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 If you have questions regarding this software,
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 contact:
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
48
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 Jim Fulton, jim@digicool.com
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 Digital Creations L.C.
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
51
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 (540) 371-6909
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 */
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
54
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 static char cPickle_module_documentation[] =
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 ""
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 ;
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
58
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 #include "Python.h"
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 #include "cStringIO.h"
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
61 #include "mymath.h"
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
62
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 #include <errno.h>
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
64
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 #define UNLESS(E) if (!(E))
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
66
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
67 #define DEL_LIST_SLICE(list, from, to) (PyList_SetSlice(list, from, to, NULL))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
68
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
69 #define WRITE_BUF_SIZE 256
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
70
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
71
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
72 #define MARK '('
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
73 #define STOP '.'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
74 #define POP '0'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
75 #define POP_MARK '1'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
76 #define DUP '2'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
77 #define FLOAT 'F'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
78 #ifdef FORMAT_1_3
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
79 #define BINFLOAT 'G'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
80 #endif
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
81 #define INT 'I'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
82 #define BININT 'J'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
83 #define BININT1 'K'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
84 #define LONG 'L'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
85 #define BININT2 'M'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
86 #define NONE 'N'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
87 #define PERSID 'P'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
88 #define BINPERSID 'Q'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
89 #define REDUCE 'R'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
90 #define STRING 'S'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
91 #define BINSTRING 'T'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
92 #define SHORT_BINSTRING 'U'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
93 #define APPEND 'a'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
94 #define BUILD 'b'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
95 #define GLOBAL 'c'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
96 #define DICT 'd'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
97 #define EMPTY_DICT '}'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
98 #define APPENDS 'e'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
99 #define GET 'g'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
100 #define BINGET 'h'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
101 #define INST 'i'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
102 #define LONG_BINGET 'j'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
103 #define LIST 'l'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
104 #define EMPTY_LIST ']'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
105 #define OBJ 'o'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
106 #define PUT 'p'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
107 #define BINPUT 'q'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
108 #define LONG_BINPUT 'r'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
109 #define SETITEM 's'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
110 #define TUPLE 't'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
111 #define EMPTY_TUPLE ')'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
112 #define SETITEMS 'u'
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
113
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 static char MARKv = MARK;
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
115
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 /* atol function from string module */
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 static PyObject *atol_func;
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
118
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 static PyObject *PicklingError;
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 static PyObject *UnpicklingError;
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
121
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
122 static PyObject *dispatch_table;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
123 static PyObject *safe_constructors;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 static PyObject *class_map;
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
125 static PyObject *empty_tuple;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
126
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
127 static PyObject *__class___str, *__getinitargs___str, *__dict___str,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
128 *__getstate___str, *__setstate___str, *__name___str, *__reduce___str,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
129 *write_str, *__safe_for_unpickling___str, *append_str,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
130 *read_str, *readline_str;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
131
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
132 /* __builtins__ module */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
133 static PyObject *builtins;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
134
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
135 static int save();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
136 static int put2();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
137
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
138 typedef struct {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
139 PyObject_HEAD
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
140 FILE *fp;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
141 PyObject *write;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
142 PyObject *file;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
143 PyObject *memo;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
144 PyObject *arg;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
145 PyObject *pers_func;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
146 PyObject *inst_pers_func;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
147 int bin;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
148 int (*write_func)();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
149 char *write_buf;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
150 int buf_size;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 } Picklerobject;
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
152
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
153 static PyTypeObject Picklertype;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
154
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
155
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
156 typedef struct {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
157 PyObject_HEAD
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
158 FILE *fp;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
159 PyObject *file;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
160 PyObject *readline;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
161 PyObject *read;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
162 PyObject *memo;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
163 PyObject *arg;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
164 PyObject *stack;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
165 PyObject *mark;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
166 PyObject *pers_func;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
167 PyObject *last_string;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
168 int *marks;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
169 int num_marks;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
170 int marks_size;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
171 int (*read_func)();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
172 int (*readline_func)();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
173 int buf_size;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
174 char *buf;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
175 } Unpicklerobject;
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
176
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
177 static PyTypeObject Unpicklertype;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
178
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
179 int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
180 cPickle_PyMapping_HasKey(o, key)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
181 PyObject *o;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
182 PyObject *key;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
183 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
184 PyObject *v;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
185
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
186 if (v = PyObject_GetItem(o,key))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
187 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
188 Py_DECREF(v);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
189 return 1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
190 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
191
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
192 PyErr_Clear();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
193 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
194 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
195
5283
82a3fbda3363 Give PyErr_Format a new name and make it static.
Guido van Rossum <guido@python.org>
parents: 5281
diff changeset
196 #define PyErr_Format PyErr_JFFormat
82a3fbda3363 Give PyErr_Format a new name and make it static.
Guido van Rossum <guido@python.org>
parents: 5281
diff changeset
197 static
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
198 PyObject *
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
199 #ifdef HAVE_STDARG_PROTOTYPES
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
200 /* VARARGS 2 */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
201 PyErr_Format(PyObject *ErrType, char *stringformat, char *format, ...)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
202 #else
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
203 /* VARARGS */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
204 PyErr_Format(va_alist) va_dcl
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
205 #endif
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
206 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
207 va_list va;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
208 PyObject *args=0, *retval=0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
209 #ifdef HAVE_STDARG_PROTOTYPES
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
210 va_start(va, format);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
211 #else
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
212 PyObject *ErrType;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
213 char *stringformat, *format;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
214 va_start(va);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
215 ErrType = va_arg(va, PyObject *);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
216 stringformat = va_arg(va, char *);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
217 format = va_arg(va, char *);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
218 #endif
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
219
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
220 if(format) args = Py_VaBuildValue(format, va);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
221 va_end(va);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
222 if(format && ! args) return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
223 if(stringformat && !(retval=PyString_FromString(stringformat))) return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
224
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
225 if(retval)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
226 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
227 if(args)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
228 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
229 PyObject *v;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
230 v=PyString_Format(retval, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
231 Py_DECREF(retval);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
232 Py_DECREF(args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
233 if(! v) return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
234 retval=v;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
235 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
236 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
237 else
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
238 if(args) retval=args;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
239 else
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
240 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
241 PyErr_SetObject(ErrType,Py_None);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
242 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
243 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
244 PyErr_SetObject(ErrType,retval);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
245 Py_DECREF(retval);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
246 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
247 }
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
248
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
249 static int
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
250 write_file(Picklerobject *self, char *s, int n) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
251 if (s == NULL) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
252 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
253 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
254
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
255 if ((int)fwrite(s, sizeof(char), n, self->fp) != n) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
256 PyErr_SetFromErrno(PyExc_IOError);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
257 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
258 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
259
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
260 return n;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
261 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
262
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
263
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 static int
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
265 write_cStringIO(Picklerobject *self, char *s, int n) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
266 if (s == NULL) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
267 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
268 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
269
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
270 if (PycStringIO->cwrite((PyObject *)self->file, s, n) != n) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
271 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
272 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
273
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
274 return n;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
275 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
276
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
277
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
278 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
279 write_other(Picklerobject *self, char *s, int n) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
280 PyObject *py_str = 0, *junk = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
281 int res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
282
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
283 if (s == NULL) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
284 UNLESS(self->buf_size) return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
285 UNLESS(py_str =
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
286 PyString_FromStringAndSize(self->write_buf, self->buf_size))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
287 goto finally;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
288 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
289 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
290 if (self->buf_size && (n + self->buf_size) > WRITE_BUF_SIZE) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
291 if (write_other(self, NULL, 0) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
292 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
293 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
294
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
295 if (n > WRITE_BUF_SIZE) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
296 UNLESS(py_str =
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
297 PyString_FromStringAndSize(s, n))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
298 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
299 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
300 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
301 memcpy(self->write_buf + self->buf_size, s, n);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
302 self->buf_size += n;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
303 res = n;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
304 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
305 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
306 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
307
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
308 UNLESS(self->arg)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
309 UNLESS(self->arg = PyTuple_New(1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
310 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
311
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
312 Py_INCREF(py_str);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
313 if (PyTuple_SetItem(self->arg, 0, py_str) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
314 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
315
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
316 UNLESS(junk = PyObject_CallObject(self->write, self->arg))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
317 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
318 Py_DECREF(junk);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
319
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
320 self->buf_size = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
321
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
322 res = n;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
323
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
324 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
325 Py_XDECREF(py_str);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
326
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
327 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
328 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
329
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
330
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
331 static int
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
332 read_file(Unpicklerobject *self, char **s, int n) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
333
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
334 if (self->buf_size == 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
335 int size;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
336
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
337 size = ((n < 32) ? 32 : n);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
338 UNLESS(self->buf = (char *)malloc(size * sizeof(char))) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
339 PyErr_NoMemory();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
340 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
341 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
342
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
343 self->buf_size = size;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
344 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
345 else if (n > self->buf_size) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
346 UNLESS(self->buf = (char *)realloc(self->buf, n * sizeof(char))) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
347 PyErr_NoMemory();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
348 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
349 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
350
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
351 self->buf_size = n;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
352 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
353
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
354 if ((int)fread(self->buf, sizeof(char), n, self->fp) != n) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
355 if (feof(self->fp)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
356 PyErr_SetNone(PyExc_EOFError);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
357 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
358 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
359
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
360 PyErr_SetFromErrno(PyExc_IOError);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
361 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
362 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
363
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
364 *s = self->buf;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
365
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
366 return n;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
367 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
368
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
369
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
370 static int
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
371 readline_file(Unpicklerobject *self, char **s) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
372 int i;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
373
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
374 if (self->buf_size == 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
375 UNLESS(self->buf = (char *)malloc(40 * sizeof(char))) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
376 PyErr_NoMemory();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
377 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
378 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
379
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
380 self->buf_size = 40;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
381 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
382
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
383 i = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
384 while (1) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
385 for (; i < (self->buf_size - 1); i++) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
386 if (feof(self->fp) || (self->buf[i] = getc(self->fp)) == '\n') {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
387 self->buf[i + 1] = '\0';
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
388 *s = self->buf;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
389 return i + 1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
390 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
391 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
392
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
393 UNLESS(self->buf = (char *)realloc(self->buf,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
394 (self->buf_size * 2) * sizeof(char))) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
395 PyErr_NoMemory();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
396 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
397 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
398
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
399 self->buf_size *= 2;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
400 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
401
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
402 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
403
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
404
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
405 static int
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
406 read_cStringIO(Unpicklerobject *self, char **s, int n) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
407 char *ptr;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
408
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
409 if (PycStringIO->cread((PyObject *)self->file, &ptr, n) != n) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
410 PyErr_SetNone(PyExc_EOFError);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
411 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
412 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
413
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
414 *s = ptr;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
415
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
416 return n;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
417 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
418
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
419
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
420 static int
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
421 readline_cStringIO(Unpicklerobject *self, char **s) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
422 int n;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
423 char *ptr;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
424
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
425 if ((n = PycStringIO->creadline((PyObject *)self->file, &ptr)) < 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
426 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
427 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
428
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
429 *s = ptr;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
430
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
431 return n;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
432 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
433
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
434
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
435 static int
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
436 read_other(Unpicklerobject *self, char **s, int n) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
437 PyObject *bytes, *str;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
438 int res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
439
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
440 UNLESS(bytes = PyInt_FromLong(n)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
441 if (!PyErr_Occurred())
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
442 PyErr_SetNone(PyExc_EOFError);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
443
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
444 goto finally;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
445 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
446
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
447 UNLESS(self->arg)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
448 UNLESS(self->arg = PyTuple_New(1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
449 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
450
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
451 Py_INCREF(bytes);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
452 if (PyTuple_SetItem(self->arg, 0, bytes) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
453 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
454
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
455 UNLESS(str = PyObject_CallObject(self->read, self->arg))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
456 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
457
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
458 Py_XDECREF(self->last_string);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
459 self->last_string = str;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
460
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
461 *s = PyString_AsString(str);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
462
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
463 res = n;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
464
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
465 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
466 Py_XDECREF(bytes);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
467
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
468 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
469 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
470
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
471
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
472 static int
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
473 readline_other(Unpicklerobject *self, char **s) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
474 PyObject *str;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
475 int str_size;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
476
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
477 UNLESS(str = PyObject_CallObject(self->readline, empty_tuple)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
478 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
479 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
480
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
481 str_size = PyString_Size(str);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
482
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
483 Py_XDECREF(self->last_string);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
484 self->last_string = str;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
485
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
486 *s = PyString_AsString(str);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
487
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
488 return str_size;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
489 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
490
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
491
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
492 static char *
5544
0bba914bf7b2 Renamed strndup to my_strndup to avoid conflict witth GNU libc.
Guido van Rossum <guido@python.org>
parents: 5498
diff changeset
493 my_strndup(char *s, int l)
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
494 {
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
495 char *r;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
496 UNLESS(r=malloc((l+1)*sizeof(char))) return (char*)PyErr_NoMemory();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
497 memcpy(r,s,l);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
498 r[l]=0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
499 return r;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
500 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
501
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
502
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
503 static int
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
504 get(Picklerobject *self, PyObject *id) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
505 PyObject *value = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
506 long c_value;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
507 char s[30];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
508 int len;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
509
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
510 UNLESS(value = PyDict_GetItem(self->memo, id))
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
511 return -1;
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
512
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
513 UNLESS(value = PyTuple_GetItem(value, 0))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
514 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
515
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
516 c_value = PyInt_AsLong(value);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
517
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
518 if (!self->bin) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
519 s[0] = GET;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
520 sprintf(s + 1, "%ld\n", c_value);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
521 len = strlen(s);
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
522 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
523 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
524 if (c_value < 256) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
525 s[0] = BINGET;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
526 s[1] = (int)(c_value & 0xff);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
527 len = 2;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
528 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
529 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
530 s[0] = LONG_BINGET;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
531 s[1] = (int)(c_value & 0xff);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
532 s[2] = (int)((c_value >> 8) & 0xff);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
533 s[3] = (int)((c_value >> 16) & 0xff);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
534 s[4] = (int)((c_value >> 24) & 0xff);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
535 len = 5;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
536 }
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
537 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
538
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
539 if ((*self->write_func)(self, s, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
540 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
541
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
542 return 0;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
543 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
544
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
545
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
546 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
547 put(Picklerobject *self, PyObject *ob) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
548 if (ob->ob_refcnt < 2)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
549 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
550
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
551 return put2(self, ob);
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
552 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
553
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
554
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
555 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
556 put2(Picklerobject *self, PyObject *ob) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
557 char c_str[30];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
558 int p, len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
559 PyObject *py_ob_id = 0, *memo_len = 0, *t = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
560 if ((p = PyDict_Size(self->memo)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
561 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
562
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
563 if (!self->bin) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
564 c_str[0] = PUT;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
565 sprintf(c_str + 1, "%d\n", p);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
566 len = strlen(c_str);
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
567 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
568 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
569 if (p >= 256) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
570 c_str[0] = LONG_BINPUT;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
571 c_str[1] = (int)(p & 0xff);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
572 c_str[2] = (int)((p >> 8) & 0xff);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
573 c_str[3] = (int)((p >> 16) & 0xff);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
574 c_str[4] = (int)((p >> 24) & 0xff);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
575 len = 5;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
576 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
577 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
578 c_str[0] = BINPUT;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
579 c_str[1] = p;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
580 len = 2;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
581 }
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
582 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
583
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
584 if ((*self->write_func)(self, c_str, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
585 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
586
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
587 UNLESS(py_ob_id = PyInt_FromLong((long)ob))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
588 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
589
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
590 UNLESS(memo_len = PyInt_FromLong(p))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
591 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
592
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
593 UNLESS(t = PyTuple_New(2))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
594 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
595
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
596 PyTuple_SET_ITEM(t, 0, memo_len);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
597 Py_INCREF(memo_len);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
598 PyTuple_SET_ITEM(t, 1, ob);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
599 Py_INCREF(ob);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
600
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
601 if (PyDict_SetItem(self->memo, py_ob_id, t) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
602 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
603
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
604 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
605
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
606 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
607 Py_XDECREF(py_ob_id);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
608 Py_XDECREF(memo_len);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
609 Py_XDECREF(t);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
610
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
611 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
612 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
613
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
614
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
615 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
616 whichmodule(PyObject *global, PyObject *global_name) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
617 int i, j;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
618 PyObject *module = 0, *modules_dict = 0,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
619 *global_name_attr = 0, *name = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
620
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
621 if (module = PyDict_GetItem(class_map, global)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
622 Py_INCREF(module);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
623 return module;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
624 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
625 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
626 PyErr_Clear();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
627 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
628
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
629 UNLESS(modules_dict = PySys_GetObject("modules"))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
630 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
631
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
632 i = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
633 while (j = PyDict_Next(modules_dict, &i, &name, &module)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
634 UNLESS(global_name_attr = PyObject_GetAttr(module, global_name)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
635 PyErr_Clear();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
636 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
637 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
638
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
639 if (global_name_attr != global) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
640 Py_DECREF(global_name_attr);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
641 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
642 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
643
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
644 Py_DECREF(global_name_attr);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
645
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
646 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
647 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
648
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
649 if (!j) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
650 PyErr_Format(PicklingError, "Could not find module for %s.",
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
651 "O", global_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
652 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
653 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
654
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
655 PyDict_SetItem(class_map, global, name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
656
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
657 Py_INCREF(name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
658 return name;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
659 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
660
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
661
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
662 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
663 save_none(Picklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
664 static char none = NONE;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
665 if ((*self->write_func)(self, &none, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
666 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
667
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
668 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
669 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
670
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
671
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
672 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
673 save_int(Picklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
674 char c_str[32];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
675 long l = PyInt_AS_LONG((PyIntObject *)args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
676 int len = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
677
5498
9a1225923918 Use compile-time test for 64-bit hardware instead of run-time test.
Guido van Rossum <guido@python.org>
parents: 5438
diff changeset
678 if (!self->bin
9a1225923918 Use compile-time test for 64-bit hardware instead of run-time test.
Guido van Rossum <guido@python.org>
parents: 5438
diff changeset
679 #if SIZEOF_LONG > 4
9a1225923918 Use compile-time test for 64-bit hardware instead of run-time test.
Guido van Rossum <guido@python.org>
parents: 5438
diff changeset
680 || (l >> 32)
9a1225923918 Use compile-time test for 64-bit hardware instead of run-time test.
Guido van Rossum <guido@python.org>
parents: 5438
diff changeset
681 #endif
9a1225923918 Use compile-time test for 64-bit hardware instead of run-time test.
Guido van Rossum <guido@python.org>
parents: 5438
diff changeset
682 ) {
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
683 /* Save extra-long ints in non-binary mode, so that
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
684 we can use python long parsing code to restore,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
685 if necessary. */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
686 c_str[0] = INT;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
687 sprintf(c_str + 1, "%ld\n", l);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
688 if ((*self->write_func)(self, c_str, strlen(c_str)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
689 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
690 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
691 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
692 c_str[1] = (int)( l & 0xff);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
693 c_str[2] = (int)((l >> 8) & 0xff);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
694 c_str[3] = (int)((l >> 16) & 0xff);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
695 c_str[4] = (int)((l >> 24) & 0xff);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
696
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
697 if ((c_str[4] == 0) && (c_str[3] == 0)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
698 if (c_str[2] == 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
699 c_str[0] = BININT1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
700 len = 2;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
701 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
702 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
703 c_str[0] = BININT2;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
704 len = 3;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
705 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
706 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
707 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
708 c_str[0] = BININT;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
709 len = 5;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
710 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
711
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
712 if ((*self->write_func)(self, c_str, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
713 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
714 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
715
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
716 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
717 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
718
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
719
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
720 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
721 save_long(Picklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
722 int size, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
723 PyObject *repr = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
724
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
725 static char l = LONG;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
726
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
727 UNLESS(repr = PyObject_Repr(args))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
728 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
729
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
730 if ((size = PyString_Size(repr)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
731 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
732
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
733 if ((*self->write_func)(self, &l, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
734 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
735
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
736 if ((*self->write_func)(self,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
737 PyString_AS_STRING((PyStringObject *)repr), size) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
738 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
739
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
740 if ((*self->write_func)(self, "\n", 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
741 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
742
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
743 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
744
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
745 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
746 Py_XDECREF(repr);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
747
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
748 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
749 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
750
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
751
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
752 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
753 save_float(Picklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
754 double x = PyFloat_AS_DOUBLE((PyFloatObject *)args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
755
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
756 #ifdef FORMAT_1_3
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
757 if (self->bin) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
758 int s, e, i = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
759 double f;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
760 long fhi, flo;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
761 char str[9], *p = str;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
762
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
763 *p = BINFLOAT;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
764 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
765
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
766 if (x < 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
767 s = 1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
768 x = -x;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
769 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
770 else
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
771 s = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
772
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
773 f = frexp(x, &e);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
774
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
775 /* Normalize f to be in the range [1.0, 2.0) */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
776 if (0.5 <= f && f < 1.0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
777 f *= 2.0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
778 e--;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
779 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
780 else if (f == 0.0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
781 e = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
782 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
783 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
784 PyErr_SetString(PyExc_SystemError,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
785 "frexp() result out of range");
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
786 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
787 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
788
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
789 if (e >= 1024) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
790 /* XXX 1024 itself is reserved for Inf/NaN */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
791 PyErr_SetString(PyExc_OverflowError,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
792 "float too large to pack with d format");
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
793 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
794 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
795 else if (e < -1022) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
796 /* Gradual underflow */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
797 f = ldexp(f, 1022 + e);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
798 e = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
799 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
800 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
801 e += 1023;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
802 f -= 1.0; /* Get rid of leading 1 */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
803 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
804
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
805 /* fhi receives the high 28 bits; flo the low 24 bits (== 52 bits) */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
806 f *= 268435456.0; /* 2**28 */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
807 fhi = (long) floor(f); /* Truncate */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
808 f -= (double)fhi;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
809 f *= 16777216.0; /* 2**24 */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
810 flo = (long) floor(f + 0.5); /* Round */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
811
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
812 /* First byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
813 *p = (s<<7) | (e>>4);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
814 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
815
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
816 /* Second byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
817 *p = ((e&0xF)<<4) | (fhi>>24);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
818 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
819
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
820 /* Third byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
821 *p = (fhi>>16) & 0xFF;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
822 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
823
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
824 /* Fourth byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
825 *p = (fhi>>8) & 0xFF;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
826 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
827
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
828 /* Fifth byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
829 *p = fhi & 0xFF;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
830 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
831
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
832 /* Sixth byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
833 *p = (flo>>16) & 0xFF;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
834 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
835
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
836 /* Seventh byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
837 *p = (flo>>8) & 0xFF;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
838 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
839
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
840 /* Eighth byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
841 *p = flo & 0xFF;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
842
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
843 if ((*self->write_func)(self, str, 9) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
844 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
845 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
846 else
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
847 #endif
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
848 {
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
849 char c_str[250];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
850 c_str[0] = FLOAT;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
851 sprintf(c_str + 1, "%f\n", x);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
852
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
853 if ((*self->write_func)(self, c_str, strlen(c_str)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
854 return -1;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
855 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
856
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
857 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
858 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
859
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
860
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
861 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
862 save_string(Picklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
863 int size, len;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
864
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
865 size = PyString_Size(args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
866
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
867 if (!self->bin) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
868 PyObject *repr;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
869 char *repr_str;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
870
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
871 static char string = STRING;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
872
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
873 UNLESS(repr = PyObject_Repr(args))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
874 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
875
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
876 repr_str = PyString_AS_STRING((PyStringObject *)repr);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
877 len = PyString_Size(repr);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
878
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
879 if ((*self->write_func)(self, &string, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
880 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
881
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
882 if ((*self->write_func)(self, repr_str, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
883 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
884
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
885 if ((*self->write_func)(self, "\n", 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
886 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
887
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
888 Py_XDECREF(repr);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
889 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
890 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
891 int i;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
892 char c_str[5];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
893
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
894 size = PyString_Size(args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
895
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
896 if (size < 256) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
897 c_str[0] = SHORT_BINSTRING;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
898 c_str[1] = size;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
899 len = 2;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
900 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
901 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
902 c_str[0] = BINSTRING;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
903 for (i = 1; i < 5; i++)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
904 c_str[i] = (int)(size >> ((i - 1) * 8));
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
905 len = 5;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
906 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
907
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
908 if ((*self->write_func)(self, c_str, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
909 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
910
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
911 if ((*self->write_func)(self,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
912 PyString_AS_STRING((PyStringObject *)args), size) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
913 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
914 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
915
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
916 if (size > 1)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
917 if (put(self, args) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
918 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
919
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
920 return 0;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
921 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
922
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
923
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
924 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
925 save_tuple(Picklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
926 PyObject *element = 0, *py_tuple_id = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
927 int len, i, has_key, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
928
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
929 static char tuple = TUPLE;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
930
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
931 if ((*self->write_func)(self, &MARKv, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
932 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
933
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
934 if ((len = PyTuple_Size(args)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
935 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
936
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
937 for (i = 0; i < len; i++) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
938 UNLESS(element = PyTuple_GET_ITEM((PyTupleObject *)args, i))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
939 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
940
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
941 if (save(self, element, 0) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
942 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
943 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
944
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
945 UNLESS(py_tuple_id = PyInt_FromLong((long)args))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
946 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
947
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
948 if (len) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
949 if (has_key = cPickle_PyMapping_HasKey(self->memo, py_tuple_id) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
950 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
951
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
952 if (has_key) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
953 if (self->bin) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
954 static char pop_mark = POP_MARK;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
955
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
956 if ((*self->write_func)(self, &pop_mark, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
957 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
958 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
959 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
960 static char pop = POP;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
961
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
962 for (i = 0; i <= len; i++) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
963 if ((*self->write_func)(self, &pop, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
964 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
965 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
966 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
967
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
968 if (get(self, py_tuple_id) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
969 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
970
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
971 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
972 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
973 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
974 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
975
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
976 if ((*self->write_func)(self, &tuple, 1) < 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
977 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
978 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
979
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
980 if (put(self, args) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
981 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
982
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
983 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
984
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
985 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
986 Py_XDECREF(py_tuple_id);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
987
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
988 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
989 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
990
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
991 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
992 save_empty_tuple(Picklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
993 static char tuple = EMPTY_TUPLE;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
994
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
995 return (*self->write_func)(self, &tuple, 1);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
996 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
997
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
998
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
999 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1000 save_list(Picklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1001 PyObject *element = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1002 int s_len, len, i, using_appends, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1003 char s[3];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1004
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1005 static char append = APPEND, appends = APPENDS;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1006
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1007 if(self->bin) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1008 s[0] = EMPTY_LIST;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1009 s_len = 1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1010 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1011 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1012 s[0] = MARK;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1013 s[1] = LIST;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1014 s_len = 2;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1015 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1016
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1017 if ((len = PyList_Size(args)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1018 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1019
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1020 if ((*self->write_func)(self, s, s_len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1021 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1022
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1023 if (len == 0)
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1024 {
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1025 if (put(self, args) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1026 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1027 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1028 else
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1029 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1030 if (put2(self, args) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1031 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1032 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1033
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1034 if (using_appends = (self->bin && (len > 1)))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1035 if ((*self->write_func)(self, &MARKv, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1036 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1037
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1038 for (i = 0; i < len; i++) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1039 UNLESS(element = PyList_GET_ITEM((PyListObject *)args, i))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1040 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1041
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1042 if (save(self, element, 0) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1043 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1044
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1045 if (!using_appends) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1046 if ((*self->write_func)(self, &append, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1047 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1048 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1049 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1050
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1051 if (using_appends) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1052 if ((*self->write_func)(self, &appends, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1053 goto finally;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1054 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1055
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1056 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1057
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1058 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1059
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1060 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1061 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1062
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1063
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1064 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1065 save_dict(Picklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1066 PyObject *key = 0, *value = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1067 int i, len, res = -1, using_setitems;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1068 char s[3];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1069
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1070 static char setitem = SETITEM, setitems = SETITEMS;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1071
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1072 if (self->bin) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1073 s[0] = EMPTY_DICT;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1074 len = 1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1075 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1076 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1077 s[0] = MARK;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1078 s[1] = DICT;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1079 len = 2;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1080 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1081
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1082 if ((*self->write_func)(self, s, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1083 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1084
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1085 if ((len = PyDict_Size(args)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1086 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1087
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1088 if (len == 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1089 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1090 if (put(self, args) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1091 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1092 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1093 else
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1094 {
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1095 if (put2(self, args) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1096 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1097 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1098
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1099 if (using_setitems = (self->bin && (PyDict_Size(args) > 1)))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1100 if ((*self->write_func)(self, &MARKv, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1101 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1102
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1103 i = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1104 while (PyDict_Next(args, &i, &key, &value)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1105 if (save(self, key, 0) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1106 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1107
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1108 if (save(self, value, 0) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1109 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1110
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1111 if (!using_setitems) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1112 if ((*self->write_func)(self, &setitem, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1113 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1114 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1115 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1116
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1117 if (using_setitems) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1118 if ((*self->write_func)(self, &setitems, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1119 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1120 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1121
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1122 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1123
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1124 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1125
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1126 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1127 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1128
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1129
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1130 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1131 save_inst(Picklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1132 PyObject *class = 0, *module = 0, *name = 0, *state = 0,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1133 *getinitargs_func = 0, *getstate_func = 0, *class_args = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1134 char *module_str, *name_str;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1135 int module_size, name_size, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1136
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1137 static char inst = INST, obj = OBJ, build = BUILD;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1138
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1139 if ((*self->write_func)(self, &MARKv, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1140 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1141
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1142 UNLESS(class = PyObject_GetAttr(args, __class___str))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1143 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1144
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1145 if (self->bin) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1146 if (save(self, class, 0) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1147 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1148 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1149
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1150 if (getinitargs_func = PyObject_GetAttr(args, __getinitargs___str)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1151 PyObject *element = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1152 int i, len;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1153
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1154 UNLESS(class_args =
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1155 PyObject_CallObject(getinitargs_func, empty_tuple))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1156 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1157
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1158 if ((len = PyObject_Length(class_args)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1159 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1160
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1161 for (i = 0; i < len; i++) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1162 UNLESS(element = PySequence_GetItem(class_args, i))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1163 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1164
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1165 if (save(self, element, 0) < 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1166 Py_DECREF(element);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1167 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1168 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1169
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1170 Py_DECREF(element);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1171 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1172 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1173 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1174 PyErr_Clear();
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1175 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1176
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1177 if (!self->bin) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1178 UNLESS(name = ((PyClassObject *)class)->cl_name) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1179 PyErr_SetString(PicklingError, "class has no name");
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1180 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1181 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1182
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1183 UNLESS(module = whichmodule(class, name))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1184 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1185
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1186 module_str = PyString_AS_STRING((PyStringObject *)module);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1187 module_size = PyString_Size(module);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1188 name_str = PyString_AS_STRING((PyStringObject *)name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1189 name_size = PyString_Size(name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1190
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1191 if ((*self->write_func)(self, &inst, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1192 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1193
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1194 if ((*self->write_func)(self, module_str, module_size) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1195 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1196
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1197 if ((*self->write_func)(self, "\n", 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1198 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1199
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1200 if ((*self->write_func)(self, name_str, name_size) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1201 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1202
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1203 if ((*self->write_func)(self, "\n", 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1204 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1205 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1206 else if ((*self->write_func)(self, &obj, 1) < 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1207 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1208 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1209
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1210 if (getstate_func = PyObject_GetAttr(args, __getstate___str)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1211 UNLESS(state = PyObject_CallObject(getstate_func, empty_tuple))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1212 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1213 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1214 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1215 PyErr_Clear();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1216
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1217 UNLESS(state = PyObject_GetAttr(args, __dict___str)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1218 PyErr_Clear();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1219 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1220 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1221 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1222 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1223
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1224 if (!PyDict_Check(state)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1225 if (put2(self, args) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1226 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1227 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1228 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1229 if (put(self, args) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1230 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1231 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1232
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1233 if (save(self, state, 0) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1234 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1235
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1236 if ((*self->write_func)(self, &build, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1237 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1238
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1239 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1240
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1241 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1242 Py_XDECREF(module);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1243 Py_XDECREF(class);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1244 Py_XDECREF(state);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1245 Py_XDECREF(getinitargs_func);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1246 Py_XDECREF(getstate_func);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1247 Py_XDECREF(class_args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1248
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1249 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1250 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1251
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1252
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1253 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1254 save_global(Picklerobject *self, PyObject *args, PyObject *name) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1255 PyObject *global_name = 0, *module = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1256 char *name_str, *module_str;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1257 int module_size, name_size, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1258
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1259 static char global = GLOBAL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1260
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1261 if (name)
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1262 {
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1263 global_name = name;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1264 Py_INCREF(global_name);
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1265 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1266 else
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1267 {
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1268 UNLESS(global_name = PyObject_GetAttr(args, __name___str))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1269 goto finally;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1270 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1271
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1272 UNLESS(module = whichmodule(args, global_name))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1273 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1274
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1275 module_str = PyString_AS_STRING((PyStringObject *)module);
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1276 module_size = PyString_Size(module);
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1277 name_str = PyString_AS_STRING((PyStringObject *)global_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1278 name_size = PyString_Size(global_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1279
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1280 if ((*self->write_func)(self, &global, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1281 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1282
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1283 if ((*self->write_func)(self, module_str, module_size) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1284 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1285
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1286 if ((*self->write_func)(self, "\n", 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1287 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1288
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1289 if ((*self->write_func)(self, name_str, name_size) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1290 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1291
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1292 if ((*self->write_func)(self, "\n", 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1293 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1294
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1295 if (put(self, args) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1296 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1297
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1298 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1299
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1300 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1301 Py_XDECREF(module);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1302 Py_XDECREF(global_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1303
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1304 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1305 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1306
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1307 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1308 save_pers(Picklerobject *self, PyObject *args, PyObject *f) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1309 PyObject *pid = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1310 int size, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1311
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1312 static char persid = PERSID, binpersid = BINPERSID;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1313
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1314 UNLESS(self->arg)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1315 UNLESS(self->arg = PyTuple_New(1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1316 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1317
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1318 Py_INCREF(args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1319 if (PyTuple_SetItem(self->arg, 0, args) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1320 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1321
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1322 UNLESS(pid = PyObject_CallObject(f, self->arg))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1323 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1324
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1325 if (pid != Py_None) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1326 if (!self->bin) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1327 if (!PyString_Check(pid)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1328 PyErr_SetString(PicklingError,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1329 "persistent id must be string");
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1330 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1331 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1332
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1333 if ((*self->write_func)(self, &persid, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1334 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1335
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1336 if ((size = PyString_Size(pid)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1337 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1338
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1339 if ((*self->write_func)(self,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1340 PyString_AS_STRING((PyStringObject *)pid), size) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1341 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1342
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1343 if ((*self->write_func)(self, "\n", 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1344 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1345
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1346 res = 1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1347 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1348 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1349 else if (save(self, pid, 1) >= 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1350 if ((*self->write_func)(self, &binpersid, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1351 res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1352 else
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1353 res = 1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1354 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1355
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1356 goto finally;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1357 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1358
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1359 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1360
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1361 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1362 Py_XDECREF(pid);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1363
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1364 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1365 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1366
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1367
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1368 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1369 save_reduce(Picklerobject *self, PyObject *callable,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1370 PyObject *tup, PyObject *state, PyObject *ob) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1371 static char reduce = REDUCE, build = BUILD;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1372
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1373 if (save(self, callable, 0) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1374 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1375
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1376 if (save(self, tup, 0) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1377 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1378
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1379 if ((*self->write_func)(self, &reduce, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1380 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1381
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1382 if (ob != NULL)
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1383 {
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1384 if (state && !PyDict_Check(state)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1385 if (put2(self, ob) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1386 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1387 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1388 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1389 if (put(self, ob) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1390 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1391 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1392 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1393
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1394 if (state)
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1395 {
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1396 if (save(self, state, 0) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1397 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1398
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1399 if ((*self->write_func)(self, &build, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1400 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1401 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1402
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1403 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1404 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1405
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1406
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1407 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1408 save(Picklerobject *self, PyObject *args, int pers_save) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1409 PyTypeObject *type;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1410 PyObject *py_ob_id = 0, *__reduce__ = 0, *t = 0, *arg_tup = 0,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1411 *callable = 0, *state = 0, *junk = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1412 int res = -1, tmp, size;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1413
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1414 if (!pers_save && self->pers_func) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1415 if ((tmp = save_pers(self, args, self->pers_func)) != 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1416 res = tmp;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1417 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1418 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1419 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1420
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1421 if (args == Py_None) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1422 res = save_none(self, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1423 goto finally;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1424 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1425
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1426 type = args->ob_type;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1427
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1428 switch (type->tp_name[0]) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1429 case 'i':
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1430 if (type == &PyInt_Type) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1431 res = save_int(self, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1432 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1433 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1434 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1435
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1436 case 'l':
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1437 if (type == &PyLong_Type) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1438 res = save_long(self, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1439 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1440 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1441 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1442
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1443 case 'f':
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1444 if (type == &PyFloat_Type) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1445 res = save_float(self, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1446 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1447 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1448 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1449
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1450 case 't':
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1451 if (type == &PyTuple_Type && PyTuple_Size(args)==0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1452 if(self->bin) res = save_empty_tuple(self, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1453 else res = save_tuple(self, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1454 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1455 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1456
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1457 case 's':
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1458 if ((type == &PyString_Type) && (PyString_Size(args) < 2)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1459 res = save_string(self, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1460 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1461 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1462 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1463
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1464 if (args->ob_refcnt > 1) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1465 long ob_id;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1466 int has_key;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1467
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1468 ob_id = (long)args;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1469
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1470 UNLESS(py_ob_id = PyInt_FromLong(ob_id))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1471 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1472
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1473 if ((has_key = cPickle_PyMapping_HasKey(self->memo, py_ob_id)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1474 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1475
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1476 if (has_key) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1477 if (get(self, py_ob_id) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1478 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1479
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1480 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1481 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1482 }
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1483 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1484
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1485 switch (type->tp_name[0]) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1486 case 's':
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1487 if (type == &PyString_Type) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1488 res = save_string(self, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1489 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1490 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1491
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1492 case 't':
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1493 if (type == &PyTuple_Type) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1494 res = save_tuple(self, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1495 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1496 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1497
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1498 case 'l':
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1499 if (type == &PyList_Type) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1500 res = save_list(self, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1501 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1502 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1503
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1504 case 'd':
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1505 if (type == &PyDict_Type) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1506 res = save_dict(self, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1507 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1508 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1509
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1510 case 'i':
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1511 if (type == &PyInstance_Type) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1512 res = save_inst(self, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1513 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1514 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1515
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1516 case 'c':
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1517 if (type == &PyClass_Type) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1518 res = save_global(self, args, NULL);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1519 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1520 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1521
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1522 case 'f':
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1523 if (type == &PyFunction_Type) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1524 res = save_global(self, args, NULL);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1525 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1526 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1527
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1528 case 'b':
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1529 if (type == &PyCFunction_Type) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1530 res = save_global(self, args, NULL);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1531 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1532 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1533 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1534
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1535 if (!pers_save && self->inst_pers_func) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1536 if ((tmp = save_pers(self, args, self->inst_pers_func)) != 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1537 res = tmp;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1538 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1539 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1540 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1541
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1542 if (__reduce__ = PyDict_GetItem(dispatch_table, (PyObject *)type)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1543 Py_INCREF(__reduce__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1544
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1545 UNLESS(self->arg)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1546 UNLESS(self->arg = PyTuple_New(1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1547 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1548
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1549 Py_INCREF(args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1550 if (PyTuple_SetItem(self->arg, 0, args) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1551 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1552
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1553 UNLESS(t = PyObject_CallObject(__reduce__, self->arg))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1554 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1555 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1556 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1557 PyErr_Clear();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1558
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1559 if (__reduce__ = PyObject_GetAttr(args, __reduce___str)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1560 UNLESS(t = PyObject_CallObject(__reduce__, empty_tuple))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1561 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1562 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1563 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1564 PyErr_Clear();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1565 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1566 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1567
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1568 if (t) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1569 if (PyString_Check(t)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1570 res = save_global(self, args, t);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1571 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1572 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1573
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1574 if (!PyTuple_Check(t)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1575 PyErr_Format(PicklingError, "Value returned by %s must "
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1576 "be a tuple", "O", __reduce__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1577 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1578 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1579
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1580 size = PyTuple_Size(t);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1581
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1582 if ((size != 3) && (size != 2)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1583 PyErr_Format(PicklingError, "tuple returned by %s must "
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1584 "contain only two or three elements", "O", __reduce__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1585 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1586 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1587
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1588 callable = PyTuple_GET_ITEM(t, 0);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1589 arg_tup = PyTuple_GET_ITEM(t, 1);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1590
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1591 if (size > 2) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1592 state = PyTuple_GET_ITEM(t, 2);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1593 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1594
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1595 UNLESS(PyTuple_Check(arg_tup)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1596 PyErr_Format(PicklingError, "Second element of tuple "
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1597 "returned by %s must be a tuple", "O", __reduce__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1598 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1599 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1600
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1601 res = save_reduce(self, callable, arg_tup, state, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1602 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1603 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1604
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1605 /*
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1606 if (PyObject_HasAttrString(args, "__class__")) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1607 res = save_inst(self, args);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1608 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1609 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1610 */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1611
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1612 PyErr_Format(PicklingError, "Cannot pickle %s objects.",
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1613 "O", (PyObject *)type);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1614
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1615 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1616 Py_XDECREF(py_ob_id);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1617 Py_XDECREF(__reduce__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1618 Py_XDECREF(t);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1619
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1620 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1621 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1622
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1623
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1624 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1625 dump(Picklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1626 static char stop = STOP;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1627
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1628 if (save(self, args, 0) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1629 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1630
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1631 if ((*self->write_func)(self, &stop, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1632 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1633
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1634 if ((*self->write_func)(self, NULL, 0) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1635 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1636
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1637 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1638 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1639
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1640 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1641 Pickler_dump(Picklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1642 PyObject *ob;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1643
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1644 UNLESS(PyArg_ParseTuple(args, "O", &ob))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1645 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1646
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1647 if (dump(self, ob) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1648 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1649
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1650 Py_INCREF(Py_None);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1651 return Py_None;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1652 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1653
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1654
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1655 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1656 dump_special(Picklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1657 static char stop = STOP;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1658
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1659 PyObject *callable, *arg_tup, *state = NULL;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1660
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1661 UNLESS(PyArg_ParseTuple(args, "OO|O", &callable, &arg_tup, &state))
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1662 return NULL;
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1663
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1664 UNLESS(PyTuple_Check(arg_tup)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1665 PyErr_SetString(PicklingError, "Second arg to dump_special must "
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1666 "be tuple");
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1667 return NULL;
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1668 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1669
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1670 if (save_reduce(self, callable, arg_tup, state, NULL) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1671 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1672
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1673 if ((*self->write_func)(self, &stop, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1674 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1675
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1676 if ((*self->write_func)(self, NULL, 0) < 0)
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1677 return NULL;
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1678
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1679 Py_INCREF(Py_None);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1680 return Py_None;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1681 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1682
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1683
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1684 static struct PyMethodDef Pickler_methods[] = {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1685 {"dump", (PyCFunction)Pickler_dump, 1, ""},
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1686 {"dump_special", (PyCFunction)dump_special, 1, ""},
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1687 {NULL, NULL} /* sentinel */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1688 };
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1689
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1690
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1691 static Picklerobject *
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1692 newPicklerobject(PyObject *file, int bin) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1693 Picklerobject *self;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1694
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1695 UNLESS(self = PyObject_NEW(Picklerobject, &Picklertype))
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1696 return NULL;
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1697
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1698 self->fp = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1699 self->write = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1700 self->memo = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1701 self->arg = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1702 self->pers_func = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1703 self->inst_pers_func = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1704 self->write_buf = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1705 self->bin = bin;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1706 self->buf_size = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1707
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1708 Py_INCREF(file);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1709 self->file = file;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1710
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1711 UNLESS(self->memo = PyDict_New()) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1712 Py_XDECREF((PyObject *)self);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1713 return NULL;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1714 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1715
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1716 if (PyFile_Check(file)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1717 self->fp = PyFile_AsFile(file);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1718 self->write_func = write_file;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1719 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1720 else if (PycStringIO_OutputCheck(file)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1721 self->write_func = write_cStringIO;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1722 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1723 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1724 self->write_func = write_other;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1725
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1726 UNLESS(self->write = PyObject_GetAttr(file, write_str))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1727 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1728 PyErr_Clear();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1729 PyErr_SetString(PyExc_TypeError, "argument must have 'write' "
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1730 "attribute");
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1731 Py_XDECREF((PyObject *)self);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1732 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1733 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1734
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1735 UNLESS(self->write_buf =
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1736 (char *)malloc(WRITE_BUF_SIZE * sizeof(char))) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1737 PyErr_NoMemory();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1738 Py_XDECREF((PyObject *)self);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1739 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1740 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1741 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1742
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1743 return self;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1744 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1745
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1746
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1747 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1748 get_Pickler(PyObject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1749 PyObject *file;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1750 int bin = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1751
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1752 UNLESS(PyArg_ParseTuple(args, "O|i", &file, &bin)) return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1753 return (PyObject *)newPicklerobject(file, bin);
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1754 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1755
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1756
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1757 static void
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1758 Pickler_dealloc(Picklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1759 Py_XDECREF(self->write);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1760 Py_XDECREF(self->memo);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1761 Py_XDECREF(self->arg);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1762 Py_XDECREF(self->file);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1763 Py_XDECREF(self->pers_func);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1764 Py_XDECREF(self->inst_pers_func);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1765
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1766 if (self->write_buf) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1767 free(self->write_buf);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1768 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1769
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1770 PyMem_DEL(self);
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1771 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1772
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1773
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1774 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1775 Pickler_getattr(Picklerobject *self, char *name) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1776 if (strcmp(name, "persistent_id") == 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1777 if (!self->pers_func) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1778 PyErr_SetString(PyExc_AttributeError, name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1779 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1780 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1781
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1782 Py_INCREF(self->pers_func);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1783 return self->pers_func;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1784 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1785
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1786 if (strcmp(name, "memo") == 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1787 if (!self->memo) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1788 PyErr_SetString(PyExc_AttributeError, name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1789 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1790 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1791
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1792 Py_INCREF(self->memo);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1793 return self->memo;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1794 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1795
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1796 if (strcmp(name, "PicklingError") == 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1797 Py_INCREF(PicklingError);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1798 return PicklingError;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1799 }
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1800
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1801 return Py_FindMethod(Pickler_methods, (PyObject *)self, name);
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1802 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1803
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1804
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1805 int
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1806 Pickler_setattr(Picklerobject *self, char *name, PyObject *value) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1807 if (strcmp(name, "persistent_id") == 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1808 Py_XDECREF(self->pers_func);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1809 self->pers_func = value;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1810 Py_INCREF(value);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1811 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1812 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1813
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1814 if (strcmp(name, "inst_persistent_id") == 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1815 Py_XDECREF(self->inst_pers_func);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1816 self->inst_pers_func = value;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1817 Py_INCREF(value);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1818 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1819 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1820
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1821 PyErr_SetString(PyExc_AttributeError, name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1822 return -1;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1823 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1824
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1825
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1826 static char Picklertype__doc__[] = "";
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1827
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1828 static PyTypeObject Picklertype_value() {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1829 PyTypeObject Picklertype = {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1830 PyObject_HEAD_INIT(&PyType_Type)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1831 0, /*ob_size*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1832 "Pickler", /*tp_name*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1833 sizeof(Picklerobject), /*tp_basicsize*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1834 0, /*tp_itemsize*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1835 /* methods */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1836 (destructor)Pickler_dealloc, /*tp_dealloc*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1837 (printfunc)0, /*tp_print*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1838 (getattrfunc)Pickler_getattr, /*tp_getattr*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1839 (setattrfunc)Pickler_setattr, /*tp_setattr*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1840 (cmpfunc)0, /*tp_compare*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1841 (reprfunc)0, /*tp_repr*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1842 0, /*tp_as_number*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1843 0, /*tp_as_sequence*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1844 0, /*tp_as_mapping*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1845 (hashfunc)0, /*tp_hash*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1846 (ternaryfunc)0, /*tp_call*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1847 (reprfunc)0, /*tp_str*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1848
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1849 /* Space for future expansion */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1850 0L,0L,0L,0L,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1851 Picklertype__doc__ /* Documentation string */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1852 };
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1853 return Picklertype;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1854 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1855
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1856
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1857 PyObject *
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1858 PyImport_ImportModuleNi(char *module_name)
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1859 {
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1860 char *import_str;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1861 int size, i;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1862 PyObject *import;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1863
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1864 static PyObject *eval_dict = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1865
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1866 size = strlen(module_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1867 for (i = 0; i < size; i++) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1868 if (((module_name[i] < 'A') || (module_name[i] > 'z')) &&
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1869 (module_name[i] != '_')) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1870 PyErr_SetString(PyExc_ImportError, "module name contains "
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1871 "invalid characters.");
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1872 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1873 }
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1874 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1875
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1876 UNLESS(import_str =
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1877 (char *)malloc((strlen(module_name) + 15) * sizeof(char))) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1878 PyErr_NoMemory();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1879 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1880 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1881
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1882 sprintf(import_str, "__import__('%s')", module_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1883
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1884 UNLESS(eval_dict)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1885 UNLESS(eval_dict = Py_BuildValue("{sO}", "__builtins__", builtins))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1886 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1887
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1888 if (!(import =
5438
e926c331ebbf Instead of importing graminit.h whenever one of the three grammar 'root'
Guido van Rossum <guido@python.org>
parents: 5283
diff changeset
1889 PyRun_String(import_str, Py_eval_input, eval_dict, eval_dict))) {
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1890 free(import_str);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1891 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1892 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1893
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1894 free(import_str);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1895
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1896 return import;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1897 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1898
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1899
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1900 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1901 find_class(PyObject *py_module_name, PyObject *py_class_name) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1902 PyObject *import = 0, *class = 0, *t = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1903 char *module_name, *class_name;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1904 PyObject *res = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1905
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1906 static PyObject *eval_dict = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1907
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1908 module_name = PyString_AS_STRING((PyStringObject *)py_module_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1909 class_name = PyString_AS_STRING((PyStringObject *)py_class_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1910
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1911 UNLESS(t = PyTuple_New(2))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1912 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1913
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1914 PyTuple_SET_ITEM((PyTupleObject *)t, 0, py_module_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1915 Py_INCREF(py_module_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1916
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1917 PyTuple_SET_ITEM((PyTupleObject *)t, 1, py_class_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1918 Py_INCREF(py_class_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1919
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1920 if (class = PyDict_GetItem(class_map, t)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1921 res = class;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1922 Py_INCREF(class);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1923 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1924 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1925
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1926 PyErr_Clear();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1927
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1928 if (!(import = PyImport_ImportModuleNi(module_name)) ||
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1929 !(class = PyObject_GetAttr(import, py_class_name))) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1930 PyErr_Format(PyExc_SystemError, "Failed to import global %s "
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1931 "from module %s", "ss", class_name, module_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1932 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1933 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1934
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1935 if (PyDict_SetItem(class_map, t, class) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1936 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1937
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1938 res = class;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1939
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1940 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1941 Py_XDECREF(import);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1942 Py_XDECREF(t);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1943
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1944 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1945 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1946
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1947
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1948 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1949 marker(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1950 if (self->num_marks < 1)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1951 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1952 PyErr_SetString(UnpicklingError, "could not find MARK");
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1953 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1954 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1955
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1956 return self->marks[--self->num_marks];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1957 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1958
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1959
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1960 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1961 load_none(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1962 if (PyList_Append(self->stack, Py_None) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1963 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1964
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1965 return 0;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1966 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1967
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1968
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1969 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1970 load_int(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1971 PyObject *py_int = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1972 char *endptr, *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1973 int len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1974 long l;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1975
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1976 if ((len = (*self->readline_func)(self, &s)) < 0) return -1;
5544
0bba914bf7b2 Renamed strndup to my_strndup to avoid conflict witth GNU libc.
Guido van Rossum <guido@python.org>
parents: 5498
diff changeset
1977 UNLESS(s=my_strndup(s,len)) return -1;
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1978
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1979 errno = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1980 l = strtol(s, &endptr, 0);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1981
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1982 if (errno || (*endptr != '\n') || (endptr[1] != '\0')) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1983 /* Hm, maybe we've got something long. Let's try reading
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1984 it as a Python long object. */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1985 errno=0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1986 UNLESS(py_int=PyLong_FromString(s,&endptr,0)) goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1987
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1988 if ((*endptr != '\n') || (endptr[1] != '\0')) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1989 PyErr_SetString(PyExc_ValueError,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1990 "could not convert string to int");
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1991 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1992 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1993 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1994 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1995 UNLESS(py_int = PyInt_FromLong(l)) goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1996 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1997
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1998 if (PyList_Append(self->stack, py_int) < 0) goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
1999
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2000 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2001
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2002 finally:
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2003 free(s);
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2004 Py_XDECREF(py_int);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2005
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2006 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2007 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2008
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2009
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2010 static long
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2011 calc_binint(char *s, int x) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2012 unsigned char c;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2013 int i;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2014 long l;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2015
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2016 for (i = 0, l = 0L; i < x; i++) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2017 c = (unsigned char)s[i];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2018 l |= (long)c << (i * 8);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2019 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2020
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2021 return l;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2022 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2023
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2024
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2025 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2026 load_binintx(Unpicklerobject *self, char *s, int x) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2027 PyObject *py_int = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2028 long l;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2029
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2030 l = calc_binint(s, x);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2031
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2032 UNLESS(py_int = PyInt_FromLong(l))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2033 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2034
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2035 if (PyList_Append(self->stack, py_int) < 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2036 Py_DECREF(py_int);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2037 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2038 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2039
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2040 Py_DECREF(py_int);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2041
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2042 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2043 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2044
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2045
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2046 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2047 load_binint(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2048 char *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2049
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2050 if ((*self->read_func)(self, &s, 4) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2051 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2052
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2053 return load_binintx(self, s, 4);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2054 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2055
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2056
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2057 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2058 load_binint1(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2059 char *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2060
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2061 if ((*self->read_func)(self, &s, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2062 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2063
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2064 return load_binintx(self, s, 1);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2065 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2066
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2067
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2068 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2069 load_binint2(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2070 char *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2071
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2072 if ((*self->read_func)(self, &s, 2) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2073 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2074
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2075 return load_binintx(self, s, 2);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2076 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2077
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2078 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2079 load_long(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2080 PyObject *l = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2081 char *end, *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2082 int len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2083
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2084 static PyObject *arg = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2085
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2086 if ((len = (*self->readline_func)(self, &s)) < 0) return -1;
5544
0bba914bf7b2 Renamed strndup to my_strndup to avoid conflict witth GNU libc.
Guido van Rossum <guido@python.org>
parents: 5498
diff changeset
2087 UNLESS(s=my_strndup(s,len)) return -1;
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2088
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2089 UNLESS(l = PyLong_FromString(s, &end, 0))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2090 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2091
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2092 if (PyList_Append(self->stack, l) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2093 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2094
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2095 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2096
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2097 finally:
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2098 free(s);
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2099 Py_XDECREF(l);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2100
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2101 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2102 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2103
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2104
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2105 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2106 load_float(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2107 PyObject *py_float = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2108 char *endptr, *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2109 int len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2110 double d;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2111
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2112 if ((len = (*self->readline_func)(self, &s)) < 0) return -1;
5544
0bba914bf7b2 Renamed strndup to my_strndup to avoid conflict witth GNU libc.
Guido van Rossum <guido@python.org>
parents: 5498
diff changeset
2113 UNLESS(s=my_strndup(s,len)) return -1;
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2114
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2115 errno = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2116 d = strtod(s, &endptr);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2117
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2118 if (errno || (endptr[0] != '\n') || (endptr[1] != '\0')) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2119 PyErr_SetString(PyExc_ValueError,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2120 "could not convert string to float");
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2121 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2122 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2123
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2124 UNLESS(py_float = PyFloat_FromDouble(d))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2125 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2126
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2127 if (PyList_Append(self->stack, py_float) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2128 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2129
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2130 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2131
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2132 finally:
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2133 free(s);
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2134 Py_XDECREF(py_float);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2135
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2136 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2137 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2138
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2139 #ifdef FORMAT_1_3
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2140 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2141 load_binfloat(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2142 PyObject *py_float = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2143 int s, e, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2144 long fhi, flo;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2145 double x;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2146 char *p;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2147
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2148 if ((*self->read_func)(self, &p, 8) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2149 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2150
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2151 /* First byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2152 s = (*p>>7) & 1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2153 e = (*p & 0x7F) << 4;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2154 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2155
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2156 /* Second byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2157 e |= (*p>>4) & 0xF;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2158 fhi = (*p & 0xF) << 24;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2159 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2160
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2161 /* Third byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2162 fhi |= (*p & 0xFF) << 16;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2163 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2164
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2165 /* Fourth byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2166 fhi |= (*p & 0xFF) << 8;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2167 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2168
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2169 /* Fifth byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2170 fhi |= *p & 0xFF;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2171 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2172
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2173 /* Sixth byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2174 flo = (*p & 0xFF) << 16;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2175 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2176
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2177 /* Seventh byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2178 flo |= (*p & 0xFF) << 8;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2179 p++;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2180
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2181 /* Eighth byte */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2182 flo |= *p & 0xFF;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2183
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2184 x = (double)fhi + (double)flo / 16777216.0; /* 2**24 */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2185 x /= 268435456.0; /* 2**28 */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2186
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2187 /* XXX This sadly ignores Inf/NaN */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2188 if (e == 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2189 e = -1022;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2190 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2191 x += 1.0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2192 e -= 1023;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2193 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2194 x = ldexp(x, e);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2195
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2196 if (s)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2197 x = -x;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2198
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2199 UNLESS(py_float = PyFloat_FromDouble(x))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2200 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2201
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2202 if (PyList_Append(self->stack, py_float) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2203 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2204
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2205 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2206
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2207 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2208 Py_XDECREF(py_float);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2209
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2210 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2211 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2212 #endif
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2213
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2214 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2215 load_string(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2216 PyObject *str = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2217 int len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2218 char *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2219
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2220 static PyObject *eval_dict = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2221
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2222 if ((len = (*self->readline_func)(self, &s)) < 0) return -1;
5544
0bba914bf7b2 Renamed strndup to my_strndup to avoid conflict witth GNU libc.
Guido van Rossum <guido@python.org>
parents: 5498
diff changeset
2223 UNLESS(s=my_strndup(s,len)) return -1;
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2224
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2225 UNLESS(eval_dict)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2226 UNLESS(eval_dict = Py_BuildValue("{s{}}", "__builtins__"))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2227 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2228
5438
e926c331ebbf Instead of importing graminit.h whenever one of the three grammar 'root'
Guido van Rossum <guido@python.org>
parents: 5283
diff changeset
2229 UNLESS(str = PyRun_String(s, Py_eval_input, eval_dict, eval_dict))
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2230 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2231
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2232 if (PyList_Append(self->stack, str) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2233 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2234
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2235 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2236
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2237 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2238 free(s);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2239 Py_XDECREF(str);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2240
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2241 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2242 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2243
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2244
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2245 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2246 load_binstring(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2247 PyObject *py_string = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2248 long l;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2249 int res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2250 char *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2251
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2252 if ((*self->read_func)(self, &s, 4) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2253 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2254
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2255 l = calc_binint(s, 4);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2256
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2257 if ((*self->read_func)(self, &s, l) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2258 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2259
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2260 UNLESS(py_string = PyString_FromStringAndSize(s, l))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2261 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2262
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2263 if (PyList_Append(self->stack, py_string) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2264 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2265
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2266 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2267
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2268 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2269 Py_XDECREF(py_string);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2270
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2271 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2272 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2273
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2274
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2275 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2276 load_short_binstring(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2277 PyObject *py_string = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2278 unsigned char l;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2279 int res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2280 char *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2282 if ((*self->read_func)(self, &s, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2283 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2284
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2285 l = (unsigned char)s[0];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2286
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2287 if ((*self->read_func)(self, &s, l) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2288 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2289
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2290 UNLESS(py_string = PyString_FromStringAndSize(s, l))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2291 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2292
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2293 if (PyList_Append(self->stack, py_string) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2294 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2295
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2296 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2297
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2298 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2299 Py_XDECREF(py_string);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2300
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2301 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2302 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2303
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2304
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2305 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2306 load_tuple(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2307 PyObject *tup = 0, *slice = 0, *list = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2308 int i, j, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2309
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2310 if ((i = marker(self)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2311 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2312
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2313 if ((j = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2314 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2315
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2316 UNLESS(slice = PyList_GetSlice(self->stack, i, j))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2317 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2318
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2319 UNLESS(tup = PySequence_Tuple(slice))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2320 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2321
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2322 UNLESS(list = PyList_New(1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2323 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2324
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2325 Py_INCREF(tup);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2326 if (PyList_SetItem(list, 0, tup) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2327 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2328
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2329 if (PyList_SetSlice(self->stack, i, j, list) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2330 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2331
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2332 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2333
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2334 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2335 Py_XDECREF(tup);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2336 Py_XDECREF(list);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2337 Py_XDECREF(slice);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2338
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2339 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2340 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2341
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2342 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2343 load_empty_tuple(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2344 PyObject *tup = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2345 int res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2346
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2347 UNLESS(tup=PyTuple_New(0)) return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2348 res=PyList_Append(self->stack, tup);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2349 Py_DECREF(tup);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2350 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2351 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2352
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2353 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2354 load_empty_list(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2355 PyObject *list = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2356 int res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2357
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2358 UNLESS(list=PyList_New(0)) return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2359 res=PyList_Append(self->stack, list);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2360 Py_DECREF(list);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2361 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2362 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2363
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2364 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2365 load_empty_dict(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2366 PyObject *dict = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2367 int res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2368
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2369 UNLESS(dict=PyDict_New()) return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2370 res=PyList_Append(self->stack, dict);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2371 Py_DECREF(dict);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2372 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2373 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2374
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2375
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2376 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2377 load_list(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2378 PyObject *list = 0, *slice = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2379 int i, j, l, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2380
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2381 if ((i = marker(self)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2382 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2383
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2384 if ((j = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2385 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2386
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2387 UNLESS(slice = PyList_GetSlice(self->stack, i, j))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2388 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2389
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2390 if((l=PyList_Size(slice)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2391 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2392
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2393 if(l) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2394 UNLESS(list = PyList_New(1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2395 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2396
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2397 Py_INCREF(slice);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2398 if (PyList_SetItem(list, 0, slice) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2399 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2400
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2401 if (PyList_SetSlice(self->stack, i, j, list) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2402 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2403 } else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2404 if(PyList_Append(self->stack,slice) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2405 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2406 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2407
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2408 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2409
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2410 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2411 Py_XDECREF(list);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2412 Py_XDECREF(slice);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2413
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2414 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2415 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2416
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2417 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2418 load_dict(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2419 PyObject *list = 0, *dict = 0, *key = 0, *value = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2420 int i, j, k, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2421
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2422 if ((i = marker(self)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2423 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2424
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2425 if ((j = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2426 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2427
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2428 UNLESS(dict = PyDict_New())
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2429 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2430
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2431 for (k = i; k < j; k += 2) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2432 UNLESS(key = PyList_GET_ITEM((PyListObject *)self->stack, k))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2433 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2434
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2435 UNLESS(value = PyList_GET_ITEM((PyListObject *)self->stack, k + 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2436 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2437
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2438 if (PyDict_SetItem(dict, key, value) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2439 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2440 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2441
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2442 if(j) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2443
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2444 UNLESS(list = PyList_New(1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2445 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2446
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2447 Py_INCREF(dict);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2448 if (PyList_SetItem(list, 0, dict) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2449 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2450
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2451 if (PyList_SetSlice(self->stack, i, j, list) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2452 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2453 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2454 else
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2455 if(PyList_Append(self->stack, dict) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2456 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2457
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2458 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2459
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2460 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2461 Py_XDECREF(dict);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2462 Py_XDECREF(list);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2463
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2464 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2465 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2466
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2467 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2468 Instance_New(PyObject *cls, PyObject *args)
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2469 {
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2470 int has_key;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2471 PyObject *safe=0, *r=0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2472
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2473 if (PyClass_Check(cls))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2474 if(r=PyInstance_New(cls, args, NULL)) return r;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2475 else goto err;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2476
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2477
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2478 if ((has_key = cPickle_PyMapping_HasKey(safe_constructors, cls)) < 0)
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2479 goto err;
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2480
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2481 if (!has_key)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2482 if(!(safe = PyObject_GetAttr(cls, __safe_for_unpickling___str)) ||
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2483 !PyObject_IsTrue(safe)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2484 PyErr_Format(UnpicklingError, "%s is not safe for unpickling", "O", cls);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2485 Py_XDECREF(safe);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2486 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2487 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2488
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2489 if(r=PyObject_CallObject(cls, args)) return r;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2490 err:
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2491 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2492 PyObject *tp, *v, *tb;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2493
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2494 PyErr_Fetch(&tp, &v, &tb);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2495 if(r=Py_BuildValue("OOO",v,cls,args))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2496 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2497 Py_XDECREF(v);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2498 v=r;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2499 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2500 PyErr_Restore(tp,v,tb);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2501 }
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2502 return NULL;
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2503 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2504
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2505
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2506 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2507 load_obj(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2508 PyObject *class = 0, *slice = 0, *tup = 0, *obj = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2509 int i, len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2510
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2511 if ((i = marker(self)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2512 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2513
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2514 class = PyList_GET_ITEM((PyListObject *)self->stack, i);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2515 Py_INCREF(class);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2516
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2517 if ((len = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2518 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2519
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2520 UNLESS(slice = PyList_GetSlice(self->stack, i + 1, len))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2521 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2522
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2523 UNLESS(tup = PySequence_Tuple(slice))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2524 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2525
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2526 UNLESS(obj = Instance_New(class, tup))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2527 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2528
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2529 if (DEL_LIST_SLICE(self->stack, i, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2530 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2531
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2532 if (PyList_Append(self->stack, obj) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2533 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2534
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2535 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2536
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2537 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2538
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2539 Py_XDECREF(class);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2540 Py_XDECREF(slice);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2541 Py_XDECREF(tup);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2542 Py_XDECREF(obj);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2543
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2544 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2545 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2546
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2547
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2548 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2549 load_inst(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2550 PyObject *arg_tup = 0, *arg_slice = 0, *class = 0, *obj = 0,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2551 *module_name = 0, *class_name = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2552 int i, j, len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2553 char *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2554
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2555 if ((i = marker(self)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2556 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2557
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2558 if ((j = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2559 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2560
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2561 UNLESS(arg_slice = PyList_GetSlice(self->stack, i, j))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2562 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2563
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2564 UNLESS(arg_tup = PySequence_Tuple(arg_slice))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2565 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2566
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2567 if (DEL_LIST_SLICE(self->stack, i, j) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2568 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2569
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2570 if ((len = (*self->readline_func)(self, &s)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2571 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2572
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2573 UNLESS(module_name = PyString_FromStringAndSize(s, len - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2574 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2575
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2576 if ((len = (*self->readline_func)(self, &s)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2577 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2578
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2579 UNLESS(class_name = PyString_FromStringAndSize(s, len - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2580 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2581
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2582 UNLESS(class = find_class(module_name, class_name))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2583 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2584
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2585 UNLESS(obj = Instance_New(class, arg_tup))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2586 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2587
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2588 if (PyList_Append(self->stack, obj) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2589 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2590
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2591 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2592
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2593 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2594 Py_XDECREF(class);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2595 Py_XDECREF(arg_slice);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2596 Py_XDECREF(arg_tup);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2597 Py_XDECREF(obj);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2598 Py_XDECREF(module_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2599 Py_XDECREF(class_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2600
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2601 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2602 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2603
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2604
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2605 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2606 load_global(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2607 PyObject *class = 0, *module_name = 0, *class_name = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2608 int res = -1, len;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2609 char *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2610
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2611 if ((len = (*self->readline_func)(self, &s)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2612 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2613
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2614 UNLESS(module_name = PyString_FromStringAndSize(s, len - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2615 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2616
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2617 if ((len = (*self->readline_func)(self, &s)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2618 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2619
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2620 UNLESS(class_name = PyString_FromStringAndSize(s, len - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2621 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2622
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2623 UNLESS(class = find_class(module_name, class_name))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2624 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2625
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2626 if (PyList_Append(self->stack, class) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2627 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2628
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2629 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2630
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2631 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2632 Py_XDECREF(class);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2633 Py_XDECREF(module_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2634 Py_XDECREF(class_name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2635
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2636 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2637 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2638
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2639
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2640 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2641 load_persid(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2642 PyObject *pid = 0, *pers_load_val = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2643 int len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2644 char *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2645
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2646 if (self->pers_func) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2647 if ((len = (*self->readline_func)(self, &s)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2648 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2649
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2650 UNLESS(pid = PyString_FromStringAndSize(s, len - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2651 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2652
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2653 UNLESS(self->arg)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2654 UNLESS(self->arg = PyTuple_New(1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2655 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2656
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2657 Py_INCREF(pid);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2658 if (PyTuple_SetItem(self->arg, 0, pid) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2659 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2660
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2661 UNLESS(pers_load_val =
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2662 PyObject_CallObject(self->pers_func, self->arg))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2663 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2664
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2665 if (PyList_Append(self->stack, pers_load_val) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2666 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2667 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2668
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2669 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2670
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2671 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2672 Py_XDECREF(pid);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2673 Py_XDECREF(pers_load_val);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2674
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2675 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2676 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2677
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2678
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2679 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2680 load_binpersid(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2681 PyObject *pid = 0, *pers_load_val = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2682 int len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2683
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2684 if (self->pers_func) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2685 if ((len = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2686 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2687
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2688 pid = PyList_GET_ITEM((PyListObject *)self->stack, len - 1);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2689 Py_INCREF(pid);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2690
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2691 if (DEL_LIST_SLICE(self->stack, len - 1, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2692 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2693
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2694 UNLESS(self->arg)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2695 UNLESS(self->arg = PyTuple_New(1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2696 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2697
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2698 Py_INCREF(pid);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2699 if (PyTuple_SetItem(self->arg, 0, pid) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2700 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2701
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2702 UNLESS(pers_load_val =
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2703 PyObject_CallObject(self->pers_func, self->arg))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2704 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2705
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2706 if (PyList_Append(self->stack, pers_load_val) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2707 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2708 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2709
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2710 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2711
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2712 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2713 Py_XDECREF(pid);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2714 Py_XDECREF(pers_load_val);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2715
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2716 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2717 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2718
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2719
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2720 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2721 load_pop(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2722 int len;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2723
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2724 if ((len = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2725 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2726
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2727 if ((self->num_marks > 0) &&
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2728 (self->marks[self->num_marks - 1] == len))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2729 self->num_marks--;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2730 else if (DEL_LIST_SLICE(self->stack, len - 1, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2731 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2732
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2733 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2734 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2735
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2736
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2737 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2738 load_pop_mark(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2739 int i, len;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2740
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2741 if ((i = marker(self)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2742 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2743
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2744 if ((len = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2745 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2746
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2747 if (DEL_LIST_SLICE(self->stack, i, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2748 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2749
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2750 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2751 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2752
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2753
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2754 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2755 load_dup(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2756 PyObject *last;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2757 int len;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2758
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2759 if ((len = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2760 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2761
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2762 UNLESS(last = PyList_GetItem(self->stack, len - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2763 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2764
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2765 if (PyList_Append(self->stack, last) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2766 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2767
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2768 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2769 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2770
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2771
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2772 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2773 load_get(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2774 PyObject *py_str = 0, *value = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2775 int len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2776 char *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2777
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2778 if ((len = (*self->readline_func)(self, &s)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2779 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2780
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2781 UNLESS(py_str = PyString_FromStringAndSize(s, len - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2782 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2783
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2784 UNLESS(value = PyDict_GetItem(self->memo, py_str))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2785 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2786
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2787 if (PyList_Append(self->stack, value) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2788 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2789
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2790 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2791
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2792 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2793 Py_XDECREF(py_str);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2794
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2795 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2796 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2797
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2798
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2799 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2800 load_binget(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2801 PyObject *py_key = 0, *value = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2802 unsigned char key;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2803 int res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2804 char *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2805
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2806 if ((*self->read_func)(self, &s, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2807 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2808
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2809 key = (unsigned char)s[0];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2810
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2811 UNLESS(py_key = PyInt_FromLong((long)key))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2812 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2813
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2814 UNLESS(value = PyDict_GetItem(self->memo, py_key))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2815 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2816
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2817 if (PyList_Append(self->stack, value) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2818 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2819
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2820 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2821
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2822 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2823 Py_XDECREF(py_key);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2824
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2825 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2826 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2827
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2828
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2829 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2830 load_long_binget(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2831 PyObject *py_key = 0, *value = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2832 unsigned char c, *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2833 long key;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2834 int res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2835
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2836 if ((*self->read_func)(self, &s, 4) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2837 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2838
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2839 c = (unsigned char)s[0];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2840 key = (long)c;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2841 c = (unsigned char)s[1];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2842 key |= (long)c << 8;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2843 c = (unsigned char)s[2];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2844 key |= (long)c << 16;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2845 c = (unsigned char)s[3];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2846 key |= (long)c << 24;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2847
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2848 UNLESS(py_key = PyInt_FromLong(key))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2849 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2850
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2851 UNLESS(value = PyDict_GetItem(self->memo, py_key))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2852 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2853
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2854 if (PyList_Append(self->stack, value) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2855 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2856
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2857 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2858
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2859 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2860 Py_XDECREF(py_key);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2861
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2862 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2863 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2864
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2865
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2866 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2867 load_put(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2868 PyObject *py_str = 0, *value = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2869 int len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2870 char *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2871
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2872 if ((len = (*self->readline_func)(self, &s)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2873 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2874
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2875 UNLESS(py_str = PyString_FromStringAndSize(s, len - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2876 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2877
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2878 if ((len = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2879 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2880
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2881 UNLESS(value = PyList_GetItem(self->stack, len - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2882 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2883
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2884 if (PyDict_SetItem(self->memo, py_str, value) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2885 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2886
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2887 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2888
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2889 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2890 Py_XDECREF(py_str);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2891
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2892 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2893 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2894
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2895
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2896 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2897 load_binput(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2898 PyObject *py_key = 0, *value = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2899 unsigned char key, *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2900 int len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2901
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2902 if ((*self->read_func)(self, &s, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2903 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2904
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2905 key = (unsigned char)s[0];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2906
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2907 UNLESS(py_key = PyInt_FromLong((long)key))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2908 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2909
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2910 if ((len = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2911 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2912
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2913 UNLESS(value = PyList_GetItem(self->stack, len - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2914 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2915
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2916 if (PyDict_SetItem(self->memo, py_key, value) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2917 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2918
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2919 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2920
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2921 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2922 Py_XDECREF(py_key);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2923
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2924 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2925 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2926
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2927
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2928 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2929 load_long_binput(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2930 PyObject *py_key = 0, *value = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2931 long key;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2932 unsigned char c, *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2933 int len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2934
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2935 if ((*self->read_func)(self, &s, 4) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2936 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2937
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2938 c = (unsigned char)s[0];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2939 key = (long)c;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2940 c = (unsigned char)s[1];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2941 key |= (long)c << 8;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2942 c = (unsigned char)s[2];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2943 key |= (long)c << 16;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2944 c = (unsigned char)s[3];
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2945 key |= (long)c << 24;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2946
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2947 UNLESS(py_key = PyInt_FromLong(key))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2948 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2949
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2950 if ((len = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2951 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2952
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2953 UNLESS(value = PyList_GetItem(self->stack, len - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2954 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2955
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2956 if (PyDict_SetItem(self->memo, py_key, value) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2957 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2958
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2959 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2960
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2961 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2962 Py_XDECREF(py_key);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2963
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2964 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2965 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2966
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2967
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2968 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2969 do_append(Unpicklerobject *self, int x) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2970 PyObject *value = 0, *list = 0, *append_method = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2971 int len, i;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2972
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2973 if ((len = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2974 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2975
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2976 UNLESS(list = PyList_GetItem(self->stack, x - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2977 goto err;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2978
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2979 if (PyList_Check(list)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2980 PyObject *slice = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2981 int list_len;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2982
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2983 UNLESS(slice = PyList_GetSlice(self->stack, x, len))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2984 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2985
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2986 list_len = PyList_Size(list);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2987 if (PyList_SetSlice(list, list_len, list_len, slice) < 0) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2988 Py_DECREF(slice);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2989 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2990 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2991
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2992 Py_DECREF(slice);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2993 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2994 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2995
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2996 UNLESS(append_method = PyObject_GetAttr(list, append_str))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2997 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2998
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
2999 for (i = x; i < len; i++) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3000 PyObject *junk;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3001
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3002 UNLESS(value = PyList_GetItem(self->stack, i))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3003 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3004
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3005 UNLESS(self->arg)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3006 UNLESS(self->arg = PyTuple_New(1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3007 goto err;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3008
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3009 Py_INCREF(value);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3010 if (PyTuple_SetItem(self->arg, 0, value) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3011 goto err;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3012
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3013 UNLESS(junk = PyObject_CallObject(append_method, self->arg))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3014 goto err;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3015 Py_DECREF(junk);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3016 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3017 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3018
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3019 if (DEL_LIST_SLICE(self->stack, x, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3020 goto err;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3021
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3022 Py_XDECREF(append_method);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3023
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3024 return 0;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3025
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3026 err:
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3027 Py_XDECREF(append_method);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3028
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3029 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3030 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3031
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3032
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3033 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3034 load_append(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3035 return do_append(self, PyList_Size(self->stack) - 1);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3036 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3037
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3038
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3039 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3040 load_appends(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3041 return do_append(self, marker(self));
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3042 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3043
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3044
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3045 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3046 do_setitems(Unpicklerobject *self, int x) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3047 PyObject *value = 0, *key = 0, *dict = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3048 int len, i, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3049
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3050 if ((len = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3051 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3052
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3053 UNLESS(dict = PyList_GetItem(self->stack, x - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3054 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3055
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3056 for (i = x; i < len; i += 2) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3057 UNLESS(key = PyList_GetItem(self->stack, i))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3058 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3059
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3060 UNLESS(value = PyList_GetItem(self->stack, i + 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3061 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3062
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3063 if (PyObject_SetItem(dict, key, value) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3064 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3065 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3066
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3067 if (DEL_LIST_SLICE(self->stack, x, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3068 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3069
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3070 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3071
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3072 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3073
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3074 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3075 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3076
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3077
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3078 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3079 load_setitem(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3080 return do_setitems(self, PyList_Size(self->stack) - 2);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3081 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3082
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3083
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3084 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3085 load_setitems(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3086 return do_setitems(self, marker(self));
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3087 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3088
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3089
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3090 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3091 load_build(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3092 PyObject *value = 0, *inst = 0, *instdict = 0, *d_key = 0, *d_value = 0,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3093 *junk = 0, *__setstate__ = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3094 int len, i, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3095
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3096 if ((len = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3097 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3098
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3099 UNLESS(value = PyList_GetItem(self->stack, len - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3100 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3101 Py_INCREF(value);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3102
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3103 if (DEL_LIST_SLICE(self->stack, len - 1, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3104 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3105
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3106 UNLESS(inst = PyList_GetItem(self->stack, len - 2))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3107 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3108
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3109 UNLESS(__setstate__ = PyObject_GetAttr(inst, __setstate___str))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3110 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3111 PyErr_Clear();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3112
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3113 UNLESS(instdict = PyObject_GetAttr(inst, __dict___str))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3114 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3115
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3116 i = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3117 while (PyDict_Next(value, &i, &d_key, &d_value)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3118 if (PyObject_SetItem(instdict, d_key, d_value) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3119 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3120 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3121 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3122 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3123 UNLESS(self->arg)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3124 UNLESS(self->arg = PyTuple_New(1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3125 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3126
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3127 Py_INCREF(value);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3128 if (PyTuple_SetItem(self->arg, 0, value) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3129 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3130
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3131 UNLESS(junk = PyObject_CallObject(__setstate__, self->arg))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3132 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3133 Py_DECREF(junk);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3134 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3135
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3136 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3137
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3138 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3139 Py_XDECREF(value);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3140 Py_XDECREF(instdict);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3141 Py_XDECREF(__setstate__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3142
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3143 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3144 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3145
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3146
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3147 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3148 load_mark(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3149 int len;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3150
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3151 if ((len = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3152 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3153
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3154 if (!self->marks_size) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3155 self->marks_size = 20;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3156 UNLESS(self->marks = (int *)malloc(self->marks_size * sizeof(int))) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3157 PyErr_NoMemory();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3158 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3159 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3160 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3161 else if ((self->num_marks + 1) >= self->marks_size) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3162 UNLESS(self->marks = (int *)realloc(self->marks,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3163 (self->marks_size + 20) * sizeof(int))) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3164 PyErr_NoMemory();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3165 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3166 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3167
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3168 self->marks_size += 20;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3169 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3170
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3171 self->marks[self->num_marks++] = len;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3172
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3173 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3174 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3175
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3176 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3177 load_reduce(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3178 PyObject *callable = 0, *arg_tup = 0, *ob = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3179 int len, res = -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3180
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3181 if ((len = PyList_Size(self->stack)) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3182 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3183
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3184 UNLESS(arg_tup = PyList_GetItem(self->stack, len - 1))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3185 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3186
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3187 UNLESS(callable = PyList_GetItem(self->stack, len - 2))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3188 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3189
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3190 UNLESS(ob = Instance_New(callable, arg_tup))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3191 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3192
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3193 if (PyList_Append(self->stack, ob) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3194 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3195
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3196 if (DEL_LIST_SLICE(self->stack, len - 2, len) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3197 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3198
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3199 res = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3200
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3201 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3202 Py_XDECREF(ob);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3203
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3204 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3205 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3206
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3207 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3208 load(Unpicklerobject *self)
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3209 {
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3210 PyObject *stack = 0, *err = 0, *exc = 0, *val = 0, *tb = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3211 int len;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3212 char *s;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3213
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3214 UNLESS(stack = PyList_New(0))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3215 goto err;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3216
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3217 self->stack = stack;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3218 self->num_marks = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3219
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3220 while (1) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3221 if ((*self->read_func)(self, &s, 1) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3222 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3223
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3224 switch (s[0]) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3225 case NONE:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3226 if (load_none(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3227 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3228 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3229
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3230 case BININT:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3231 if (load_binint(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3232 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3233 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3234
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3235 case BININT1:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3236 if (load_binint1(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3237 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3238 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3239
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3240 case BININT2:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3241 if (load_binint2(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3242 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3243 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3244
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3245 case INT:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3246 if (load_int(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3247 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3248 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3249
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3250 case LONG:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3251 if (load_long(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3252 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3253 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3254
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3255 case FLOAT:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3256 if (load_float(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3257 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3258 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3259
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3260 #ifdef FORMAT_1_3
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3261 case BINFLOAT:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3262 if (load_binfloat(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3263 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3264 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3265 #endif
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3266
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3267 case BINSTRING:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3268 if (load_binstring(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3269 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3270 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3271
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3272 case SHORT_BINSTRING:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3273 if (load_short_binstring(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3274 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3275 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3276
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3277 case STRING:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3278 if (load_string(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3279 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3280 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3282 case EMPTY_TUPLE:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3283 if (load_empty_tuple(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3284 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3285 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3286
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3287 case TUPLE:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3288 if (load_tuple(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3289 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3290 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3291
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3292 case EMPTY_LIST:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3293 if (load_empty_list(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3294 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3295 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3296
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3297 case LIST:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3298 if (load_list(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3299 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3300 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3301
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3302 case EMPTY_DICT:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3303 if (load_empty_dict(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3304 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3305 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3306
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3307 case DICT:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3308 if (load_dict(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3309 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3310 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3311
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3312 case OBJ:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3313 if (load_obj(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3314 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3315 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3316
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3317 case INST:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3318 if (load_inst(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3319 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3320 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3321
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3322 case GLOBAL:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3323 if (load_global(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3324 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3325 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3326
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3327 case APPEND:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3328 if (load_append(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3329 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3330 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3331
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3332 case APPENDS:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3333 if (load_appends(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3334 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3335 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3336
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3337 case BUILD:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3338 if (load_build(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3339 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3340 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3341
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3342 case DUP:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3343 if (load_dup(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3344 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3345 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3346
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3347 case BINGET:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3348 if (load_binget(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3349 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3350 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3351
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3352 case LONG_BINGET:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3353 if (load_long_binget(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3354 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3355 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3356
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3357 case GET:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3358 if (load_get(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3359 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3360 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3361
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3362 case MARK:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3363 if (load_mark(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3364 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3365 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3366
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3367 case BINPUT:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3368 if (load_binput(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3369 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3370 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3371
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3372 case LONG_BINPUT:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3373 if (load_long_binput(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3374 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3375 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3376
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3377 case PUT:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3378 if (load_put(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3379 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3380 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3381
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3382 case POP:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3383 if (load_pop(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3384 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3385 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3386
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3387 case POP_MARK:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3388 if (load_pop_mark(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3389 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3390 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3391
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3392 case SETITEM:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3393 if (load_setitem(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3394 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3395 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3396
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3397 case SETITEMS:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3398 if (load_setitems(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3399 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3400 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3401
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3402 case STOP:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3403 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3404
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3405 case PERSID:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3406 if (load_persid(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3407 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3408 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3409
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3410 case BINPERSID:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3411 if (load_binpersid(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3412 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3413 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3414
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3415 case REDUCE:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3416 if (load_reduce(self) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3417 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3418 continue;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3419
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3420 default:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3421 PyErr_Format(UnpicklingError, "invalid load key, '%s'.",
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3422 "c", s[0]);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3423 goto err;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3424 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3425
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3426 break;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3427 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3428
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3429 if ((err = PyErr_Occurred()) == PyExc_EOFError) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3430 PyErr_SetNone(PyExc_EOFError);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3431 goto err;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3432 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3433
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3434 if (err) goto err;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3435
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3436 if ((len = PyList_Size(stack)) < 0) goto err;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3437
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3438 UNLESS(val = PyList_GetItem(stack, len - 1)) goto err;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3439 Py_INCREF(val);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3440
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3441 Py_DECREF(stack);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3442
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3443 self->stack=NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3444 return val;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3445
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3446 err:
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3447 self->stack=NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3448 Py_XDECREF(stack);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3449
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3450 return NULL;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3451 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3452
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3453
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3454 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3455 Unpickler_load(Unpicklerobject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3456 UNLESS(PyArg_ParseTuple(args, ""))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3457 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3458
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3459 return load(self);
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3460 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3461
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3462
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3463 static struct PyMethodDef Unpickler_methods[] = {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3464 {"load", (PyCFunction)Unpickler_load, 1, ""},
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3465 {NULL, NULL} /* sentinel */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3466 };
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3467
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3468
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3469 static Unpicklerobject *
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3470 newUnpicklerobject(PyObject *f) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3471 Unpicklerobject *self;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3472
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3473 UNLESS(self = PyObject_NEW(Unpicklerobject, &Unpicklertype))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3474 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3475
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3476 self->file = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3477 self->arg = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3478 self->stack = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3479 self->pers_func = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3480 self->last_string = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3481 self->marks = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3482 self->num_marks = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3483 self->marks_size = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3484 self->buf_size = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3485 self->read = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3486 self->readline = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3487
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3488 UNLESS(self->memo = PyDict_New()) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3489 Py_XDECREF((PyObject *)self);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3490 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3491 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3492
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3493 Py_INCREF(f);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3494 self->file = f;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3495
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3496 /* Set read, readline based on type of f */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3497 if (PyFile_Check(f)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3498 self->fp = PyFile_AsFile(f);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3499 self->read_func = read_file;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3500 self->readline_func = readline_file;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3501 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3502 else if (PycStringIO_InputCheck(f)) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3503 self->fp = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3504 self->read_func = read_cStringIO;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3505 self->readline_func = readline_cStringIO;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3506 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3507 else {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3508
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3509 self->fp = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3510 self->read_func = read_other;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3511 self->readline_func = readline_other;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3512
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3513 UNLESS((self->readline = PyObject_GetAttr(f, readline_str)) &&
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3514 (self->read = PyObject_GetAttr(f, read_str)))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3515 {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3516 PyErr_Clear();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3517 PyErr_SetString( PyExc_TypeError, "argument must have 'read' and "
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3518 "'readline' attributes" );
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3519 Py_XDECREF((PyObject *)self);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3520 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3521 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3522 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3523
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3524 return self;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3525 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3526
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3527
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3528 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3529 get_Unpickler(PyObject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3530 PyObject *file;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3531
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3532 UNLESS(PyArg_ParseTuple(args, "O", &file))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3533 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3534 return (PyObject *)newUnpicklerobject(file);
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3535 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3536
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3537
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3538 static void
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3539 Unpickler_dealloc(Unpicklerobject *self) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3540 Py_XDECREF(self->readline);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3541 Py_XDECREF(self->read);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3542 Py_XDECREF(self->file);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3543 Py_XDECREF(self->memo);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3544 Py_XDECREF(self->stack);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3545 Py_XDECREF(self->pers_func);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3546 Py_XDECREF(self->arg);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3547 Py_XDECREF(self->last_string);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3548
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3549 if (self->marks) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3550 free(self->marks);
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3551 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3552
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3553 if (self->buf_size) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3554 free(self->buf);
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3555 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3556
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3557 PyMem_DEL(self);
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3558 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3559
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3560
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3561 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3562 Unpickler_getattr(Unpicklerobject *self, char *name) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3563 if (!strcmp(name, "persistent_load")) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3564 if (!self->pers_func) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3565 PyErr_SetString(PyExc_AttributeError, name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3566 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3567 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3568
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3569 Py_INCREF(self->pers_func);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3570 return self->pers_func;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3571 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3572
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3573 if (!strcmp(name, "memo")) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3574 if (!self->memo) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3575 PyErr_SetString(PyExc_AttributeError, name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3576 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3577 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3578
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3579 Py_INCREF(self->memo);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3580 return self->memo;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3581 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3582
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3583 if (!strcmp(name, "stack")) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3584 if (!self->stack) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3585 PyErr_SetString(PyExc_AttributeError, name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3586 return NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3587 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3588
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3589 Py_INCREF(self->stack);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3590 return self->stack;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3591 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3592
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3593 if (!strcmp(name, "UnpicklingError")) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3594 Py_INCREF(UnpicklingError);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3595 return UnpicklingError;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3596 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3597
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3598 return Py_FindMethod(Unpickler_methods, (PyObject *)self, name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3599 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3600
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3601
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3602 static int
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3603 Unpickler_setattr(Unpicklerobject *self, char *name, PyObject *value) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3604 if (!strcmp(name, "persistent_load")) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3605 Py_XDECREF(self->pers_func);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3606 self->pers_func = value;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3607 Py_INCREF(value);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3608 return 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3609 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3610
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3611 PyErr_SetString(PyExc_AttributeError, name);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3612 return -1;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3613 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3614
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3615
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3616 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3617 cpm_dump(PyObject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3618 PyObject *ob, *file, *res = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3619 Picklerobject *pickler = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3620 int bin = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3621
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3622 UNLESS(PyArg_ParseTuple(args, "OO|i", &ob, &file, &bin))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3623 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3624
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3625 UNLESS(pickler = newPicklerobject(file, bin))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3626 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3627
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3628 if (dump(pickler, ob) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3629 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3630
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3631 Py_INCREF(Py_None);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3632 res = Py_None;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3633
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3634 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3635 Py_XDECREF(pickler);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3636
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3637 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3638 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3639
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3640
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3641 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3642 cpm_dumps(PyObject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3643 PyObject *ob, *file = 0, *res = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3644 Picklerobject *pickler = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3645 int bin = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3646
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3647 UNLESS(PyArg_ParseTuple(args, "O|i", &ob, &bin))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3648 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3649
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3650 UNLESS(file = PycStringIO->NewOutput(128))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3651 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3652
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3653 UNLESS(pickler = newPicklerobject(file, bin))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3654 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3655
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3656 if (dump(pickler, ob) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3657 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3658
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3659 res = PycStringIO->cgetvalue(file);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3660
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3661 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3662 Py_XDECREF(pickler);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3663 Py_XDECREF(file);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3664
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3665 return res;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3666 }
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3667
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3668
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3669 static PyObject *
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3670 cpm_load(PyObject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3671 Unpicklerobject *unpickler = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3672 PyObject *ob, *res = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3673
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3674 UNLESS(PyArg_ParseTuple(args, "O", &ob))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3675 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3676
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3677 UNLESS(unpickler = newUnpicklerobject(ob))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3678 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3679
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3680 res = load(unpickler);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3681
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3682 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3683 Py_XDECREF(unpickler);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3684
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3685 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3686 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3687
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3688
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3689 static PyObject *
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3690 cpm_loads(PyObject *self, PyObject *args) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3691 PyObject *ob, *file = 0, *res = NULL;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3692 Unpicklerobject *unpickler = 0;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3693
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3694 UNLESS(PyArg_ParseTuple(args, "O", &ob))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3695 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3696
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3697 UNLESS(file = PycStringIO->NewInput(ob))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3698 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3699
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3700 UNLESS(unpickler = newUnpicklerobject(file))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3701 goto finally;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3702
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3703 res = load(unpickler);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3704
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3705 finally:
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3706 Py_XDECREF(file);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3707 Py_XDECREF(unpickler);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3708
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3709 return res;
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3710 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3711
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3712
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3713 static char Unpicklertype__doc__[] = "";
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3714
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3715 static PyTypeObject Unpicklertype_value() {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3716 PyTypeObject Unpicklertype = {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3717 PyObject_HEAD_INIT(&PyType_Type)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3718 0, /*ob_size*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3719 "Unpickler", /*tp_name*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3720 sizeof(Unpicklerobject), /*tp_basicsize*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3721 0, /*tp_itemsize*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3722 /* methods */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3723 (destructor)Unpickler_dealloc, /*tp_dealloc*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3724 (printfunc)0, /*tp_print*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3725 (getattrfunc)Unpickler_getattr, /*tp_getattr*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3726 (setattrfunc)Unpickler_setattr, /*tp_setattr*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3727 (cmpfunc)0, /*tp_compare*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3728 (reprfunc)0, /*tp_repr*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3729 0, /*tp_as_number*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3730 0, /*tp_as_sequence*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3731 0, /*tp_as_mapping*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3732 (hashfunc)0, /*tp_hash*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3733 (ternaryfunc)0, /*tp_call*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3734 (reprfunc)0, /*tp_str*/
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3735
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3736 /* Space for future expansion */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3737 0L,0L,0L,0L,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3738 Unpicklertype__doc__ /* Documentation string */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3739 };
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3740 return Unpicklertype;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3741 }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3742
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3743 static struct PyMethodDef cPickle_methods[] = {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3744 {"dump", (PyCFunction)cpm_dump, 1, ""},
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3745 {"dumps", (PyCFunction)cpm_dumps, 1, ""},
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3746 {"load", (PyCFunction)cpm_load, 1, ""},
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3747 {"loads", (PyCFunction)cpm_loads, 1, ""},
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3748 {"Pickler", (PyCFunction)get_Pickler, 1, ""},
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3749 {"Unpickler", (PyCFunction)get_Unpickler, 1, ""},
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3750 { NULL, NULL }
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3751 };
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3752
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3753
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3754 #define CHECK_FOR_ERRORS(MESS) \
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3755 if(PyErr_Occurred()) { \
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3756 PyObject *__sys_exc_type, *__sys_exc_value, *__sys_exc_traceback; \
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3757 PyErr_Fetch( &__sys_exc_type, &__sys_exc_value, &__sys_exc_traceback); \
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3758 fprintf(stderr, # MESS ":\n\t"); \
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3759 PyObject_Print(__sys_exc_type, stderr,0); \
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3760 fprintf(stderr,", "); \
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3761 PyObject_Print(__sys_exc_value, stderr,0); \
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3762 fprintf(stderr,"\n"); \
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3763 fflush(stderr); \
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3764 Py_FatalError(# MESS); \
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3765 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3766
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3767
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3768 static int
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3769 init_stuff(PyObject *module, PyObject *module_dict) {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3770 PyObject *string, *copy_reg;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3771
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3772 #define INIT_STR(S) UNLESS(S ## _str=PyString_FromString(#S)) return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3773
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3774 INIT_STR(__class__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3775 INIT_STR(__getinitargs__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3776 INIT_STR(__dict__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3777 INIT_STR(__getstate__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3778 INIT_STR(__setstate__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3779 INIT_STR(__name__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3780 INIT_STR(__reduce__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3781 INIT_STR(write);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3782 INIT_STR(__safe_for_unpickling__);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3783 INIT_STR(append);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3784 INIT_STR(read);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3785 INIT_STR(readline);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3786
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3787 UNLESS(builtins = PyImport_ImportModule("__builtin__"))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3788 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3789
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3790 UNLESS(copy_reg = PyImport_ImportModule("copy_reg"))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3791 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3792
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3793 UNLESS(dispatch_table = PyObject_GetAttrString(copy_reg,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3794 "dispatch_table"))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3795 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3796
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3797 UNLESS(safe_constructors = PyObject_GetAttrString(copy_reg,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3798 "safe_constructors"))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3799 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3800
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3801 Py_DECREF(copy_reg);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3802
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3803 UNLESS(string = PyImport_ImportModule("string"))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3804 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3805
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3806 UNLESS(atol_func = PyObject_GetAttrString(string, "atol"))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3807 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3808
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3809 Py_DECREF(string);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3810
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3811 UNLESS(empty_tuple = PyTuple_New(0))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3812 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3813
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3814 UNLESS(class_map = PyDict_New())
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3815 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3816
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3817 UNLESS(PicklingError = PyString_FromString("cPickle.PicklingError"))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3818 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3819
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3820 if (PyDict_SetItemString(module_dict, "PicklingError",
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3821 PicklingError) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3822 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3823
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3824 UNLESS(UnpicklingError = PyString_FromString("cPickle.UnpicklingError"))
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3825 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3826
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3827 if (PyDict_SetItemString(module_dict, "UnpicklingError",
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3828 UnpicklingError) < 0)
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3829 return -1;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3830
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3831 PycString_IMPORT;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3832
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3833 return 0;
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3834 }
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3835
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3836
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3837 /* Initialization function for the module (*must* be called initcPickle) */
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3838 void
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3839 initcPickle() {
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3840 PyObject *m, *d;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3841 char *rev="$Revision$";
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3842 PyObject *format_version;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3843 PyObject *compatible_formats;
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3844
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3845
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3846 /* Create the module and add the functions */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3847 m = Py_InitModule4("cPickle", cPickle_methods,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3848 cPickle_module_documentation,
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3849 (PyObject*)NULL,PYTHON_API_VERSION);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3850
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3851 Picklertype=Picklertype_value();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3852 Unpicklertype=Unpicklertype_value();
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3853
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3854 /* Add some symbolic constants to the module */
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3855 d = PyModule_GetDict(m);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3856 PyDict_SetItemString(d,"__version__",
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3857 PyString_FromStringAndSize(rev+11,strlen(rev+11)-2));
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3858
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3859 #ifdef FORMAT_1_3
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3860 format_version = PyString_FromString("1.3");
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3861 compatible_formats = Py_BuildValue("[sss]", "1.0", "1.1", "1.2");
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3862 #else
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3863 format_version = PyString_FromString("1.2");
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3864 compatible_formats = Py_BuildValue("[ss]", "1.0", "1.1");
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3865 #endif
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3866
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3867 PyDict_SetItemString(d, "format_version", format_version);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3868 PyDict_SetItemString(d, "compatible_formats", compatible_formats);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3869
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3870 init_stuff(m, d);
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3871 CHECK_FOR_ERRORS("can't initialize module cPickle");
4907
fd3626511dad cPickle, version 0.1.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3872 }
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3873
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3874 /****************************************************************************
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3875 $Log$
5544
0bba914bf7b2 Renamed strndup to my_strndup to avoid conflict witth GNU libc.
Guido van Rossum <guido@python.org>
parents: 5498
diff changeset
3876 Revision 2.7 1997/05/16 16:36:52 guido
0bba914bf7b2 Renamed strndup to my_strndup to avoid conflict witth GNU libc.
Guido van Rossum <guido@python.org>
parents: 5498
diff changeset
3877 Renamed strndup to my_strndup to avoid conflict witth GNU libc.
0bba914bf7b2 Renamed strndup to my_strndup to avoid conflict witth GNU libc.
Guido van Rossum <guido@python.org>
parents: 5498
diff changeset
3878
5498
9a1225923918 Use compile-time test for 64-bit hardware instead of run-time test.
Guido van Rossum <guido@python.org>
parents: 5438
diff changeset
3879 Revision 2.6 1997/05/13 18:00:44 guido
9a1225923918 Use compile-time test for 64-bit hardware instead of run-time test.
Guido van Rossum <guido@python.org>
parents: 5438
diff changeset
3880 Use compile-time test for 64-bit hardware instead of run-time test.
9a1225923918 Use compile-time test for 64-bit hardware instead of run-time test.
Guido van Rossum <guido@python.org>
parents: 5438
diff changeset
3881 This silences some compilers.
9a1225923918 Use compile-time test for 64-bit hardware instead of run-time test.
Guido van Rossum <guido@python.org>
parents: 5438
diff changeset
3882
5438
e926c331ebbf Instead of importing graminit.h whenever one of the three grammar 'root'
Guido van Rossum <guido@python.org>
parents: 5283
diff changeset
3883 Revision 2.5 1997/05/07 17:46:13 guido
e926c331ebbf Instead of importing graminit.h whenever one of the three grammar 'root'
Guido van Rossum <guido@python.org>
parents: 5283
diff changeset
3884 Instead of importing graminit.h whenever one of the three grammar 'root'
e926c331ebbf Instead of importing graminit.h whenever one of the three grammar 'root'
Guido van Rossum <guido@python.org>
parents: 5283
diff changeset
3885 symbols is needed, define these in Python.h with a Py_ prefix.
e926c331ebbf Instead of importing graminit.h whenever one of the three grammar 'root'
Guido van Rossum <guido@python.org>
parents: 5283
diff changeset
3886
5283
82a3fbda3363 Give PyErr_Format a new name and make it static.
Guido van Rossum <guido@python.org>
parents: 5281
diff changeset
3887 Revision 2.4 1997/04/09 17:47:47 guido
82a3fbda3363 Give PyErr_Format a new name and make it static.
Guido van Rossum <guido@python.org>
parents: 5281
diff changeset
3888 Give PyErr_Format a new name and make it static.
82a3fbda3363 Give PyErr_Format a new name and make it static.
Guido van Rossum <guido@python.org>
parents: 5281
diff changeset
3889
5281
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3890 Revision 2.3 1997/04/09 17:36:32 guido
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3891 Jim Fulton's version 2.2.
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3892
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3893 Revision 1.36 1997/03/11 22:05:02 chris
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3894 write POP rather than POPMARK in non-binary mode
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3895 use put2() in save_reduce() and save_inst() only if state is not a dictionary
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3896 removed put2() from save_tuple()
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3897
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3898 Revision 1.35 1997/03/11 20:03:30 jim
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3899 Added log comment at bottom.
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3900
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3901
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3902
607fa32fc04a Jim Fulton's version 2.2.
Guido van Rossum <guido@python.org>
parents: 4958
diff changeset
3903 ****************************************************************************/