Lines Matching +full:p +full:- +full:finally
45 #define PERSID 'P'
66 #define PUT 'p'
77 #define EXT1 '\x82' /* push object from extension registry; 1-byte index */
78 #define EXT2 '\x83' /* ditto, but 2-byte index */
79 #define EXT4 '\x84' /* ditto, but 4-byte index */
80 #define TUPLE1 '\x85' /* build 1-tuple from stack top */
81 #define TUPLE2 '\x86' /* build 2-tuple from two topmost stack items */
82 #define TUPLE3 '\x87' /* build 3-tuple from three topmost stack items */
88 /* There aren't opcodes -- they're ways to pickle bools before protocol 2,
151 PyObject **p; in Pdata_dealloc() local
153 for (i = self->length, p = self->data; --i >= 0; p++) { in Pdata_dealloc()
154 Py_DECREF(*p); in Pdata_dealloc()
156 if (self->data) in Pdata_dealloc()
157 free(self->data); in Pdata_dealloc()
176 self->size = 8; in Pdata_New()
177 self->length = 0; in Pdata_New()
178 self->data = malloc(self->size * sizeof(PyObject*)); in Pdata_New()
179 if (self->data) in Pdata_New()
189 return -1; in stackUnderflow()
193 * number of items, this is a (non-erroneous) NOP.
199 PyObject **p; in Pdata_clear() local
202 if (clearto >= self->length) return 0; in Pdata_clear()
204 for (i = self->length, p = self->data + clearto; in Pdata_clear()
205 --i >= clearto; in Pdata_clear()
206 p++) { in Pdata_clear()
207 Py_CLEAR(*p); in Pdata_clear()
209 self->length = clearto; in Pdata_clear()
222 if (self->size > (PY_SSIZE_T_MAX >> 1)) in Pdata_grow()
224 bigger = self->size << 1; in Pdata_grow()
228 tmp = realloc(self->data, nbytes); in Pdata_grow()
231 self->data = tmp; in Pdata_grow()
232 self->size = bigger; in Pdata_grow()
237 return -1; in Pdata_grow()
245 if ((D)->length) \
246 (V) = (D)->data[--((D)->length)]; \
263 if (((Pdata*)(D))->length == ((Pdata*)(D))->size && \
268 ((Pdata*)(D))->data[((Pdata*)(D))->length++] = (O); \
273 if (((Pdata*)(D))->length == ((Pdata*)(D))->size && \
277 ((Pdata*)(D))->data[((Pdata*)(D))->length++] = (O); \
287 l = self->length-start; in Pdata_popTuple()
292 PyTuple_SET_ITEM(r, j, self->data[i]); in Pdata_popTuple()
294 self->length = start; in Pdata_popTuple()
304 l=self->length-start; in Pdata_popList()
307 PyList_SET_ITEM(r, j, self->data[i]); in Pdata_popList()
309 self->length=start; in Pdata_popList()
316 if (self->arg || (self->arg=PyTuple_New(1))) { \
317 Py_XDECREF(PyTuple_GET_ITEM(self->arg,0)); \
318 PyTuple_SET_ITEM(self->arg,0,o); \
326 if (Py_REFCNT(self->arg) > 1) { \
327 Py_CLEAR(self->arg); \
434 PyFile_IncUseCount((PyFileObject *)self->file); in write_file()
436 nbyteswritten = fwrite(s, sizeof(char), n, self->fp); in write_file()
438 PyFile_DecUseCount((PyFileObject *)self->file); in write_file()
441 return -1; in write_file()
457 if (PycStringIO->cwrite((PyObject *)self->file, s, INT_MAX) != INT_MAX) { in write_cStringIO()
458 return -1; in write_cStringIO()
460 n -= INT_MAX; in write_cStringIO()
463 if (PycStringIO->cwrite((PyObject *)self->file, s, n) != n) { in write_cStringIO()
464 return -1; in write_cStringIO()
483 if (!( self->buf_size )) return 0; in write_other()
484 py_str = PyString_FromStringAndSize(self->write_buf, in write_other()
485 self->buf_size); in write_other()
487 return -1; in write_other()
490 if (self->buf_size && n > WRITE_BUF_SIZE - self->buf_size) { in write_other()
492 return -1; in write_other()
498 return -1; in write_other()
501 memcpy(self->write_buf + self->buf_size, s, n); in write_other()
502 self->buf_size += n; in write_other()
507 if (self->write) { in write_other()
510 if (self->arg) { in write_other()
511 junk = PyObject_Call(self->write, self->arg, NULL); in write_other()
515 else return -1; in write_other()
518 PDATA_PUSH(self->file, py_str, -1); in write_other()
520 self->buf_size = 0; in write_other()
530 if (self->buf_size == 0) { in read_file()
534 if (!( self->buf = (char *)malloc(size))) { in read_file()
536 return -1; in read_file()
539 self->buf_size = size; in read_file()
541 else if (n > self->buf_size) { in read_file()
542 char *newbuf = (char *)realloc(self->buf, n); in read_file()
545 return -1; in read_file()
547 self->buf = newbuf; in read_file()
548 self->buf_size = n; in read_file()
551 PyFile_IncUseCount((PyFileObject *)self->file); in read_file()
553 nbytesread = fread(self->buf, sizeof(char), n, self->fp); in read_file()
555 PyFile_DecUseCount((PyFileObject *)self->file); in read_file()
557 if (feof(self->fp)) { in read_file()
559 return -1; in read_file()
563 return -1; in read_file()
566 *s = self->buf; in read_file()
577 if (self->buf_size == 0) { in readline_file()
578 if (!( self->buf = (char *)malloc(40))) { in readline_file()
580 return -1; in readline_file()
582 self->buf_size = 40; in readline_file()
589 for (; i < (self->buf_size - 1); i++) { in readline_file()
590 if (feof(self->fp) || in readline_file()
591 (self->buf[i] = getc(self->fp)) == '\n') { in readline_file()
592 self->buf[i + 1] = '\0'; in readline_file()
593 *s = self->buf; in readline_file()
597 if (self->buf_size > (PY_SSIZE_T_MAX >> 1)) { in readline_file()
599 return -1; in readline_file()
601 bigger = self->buf_size << 1; in readline_file()
602 newbuf = (char *)realloc(self->buf, bigger); in readline_file()
605 return -1; in readline_file()
607 self->buf = newbuf; in readline_file()
608 self->buf_size = bigger; in readline_file()
626 if (PycStringIO->cread((PyObject *)self->file, &ptr, k) != k) { in read_cStringIO()
628 return -1; in read_cStringIO()
633 /* non-continuous area */ in read_cStringIO()
634 return -1; in read_cStringIO()
639 n -= INT_MAX; in read_cStringIO()
657 if ((k = PycStringIO->creadline((PyObject *)self->file, &ptr)) < 0) { in readline_cStringIO()
658 return -1; in readline_cStringIO()
664 /* non-continuous area */ in readline_cStringIO()
665 return -1; in readline_cStringIO()
667 if (k == 0 || ptr[k - 1] == '\n') in readline_cStringIO()
683 if (!( bytes = PyInt_FromSsize_t(n))) return -1; in read_other()
686 if (self->arg) { in read_other()
687 str = PyObject_Call(self->read, self->arg, NULL); in read_other()
690 if (! str) return -1; in read_other()
692 Py_XSETREF(self->last_string, str); in read_other()
694 if (! (*s = PyString_AsString(str))) return -1; in read_other()
698 return -1; in read_other()
711 if (!( str = PyObject_CallObject(self->readline, empty_tuple))) { in readline_other()
712 return -1; in readline_other()
716 return -1; in readline_other()
718 Py_XSETREF(self->last_string, str); in readline_other()
721 return -1; in readline_other()
750 if (!( mv = PyDict_GetItem(self->memo, id))) { in get()
752 return -1; in get()
756 return -1; in get()
760 return -1; in get()
764 if (!self->bin) { in get()
766 PyOS_snprintf(s + 1, sizeof(s) - 1, in get()
770 else if (Pdata_Check(self->file)) { in get()
771 if (write_other(self, NULL, 0) < 0) return -1; in get()
772 PDATA_APPEND(self->file, mv, -1); in get()
792 return -1; in get()
796 if (self->write_func(self, s, len) < 0) in get()
797 return -1; in get()
806 if (Py_REFCNT(ob) < 2 || self->fast) in put()
817 Py_ssize_t len, p; in put2() local
818 int res = -1; in put2()
821 if (self->fast) in put2()
824 if ((p = PyDict_Size(self->memo)) < 0) in put2()
825 goto finally; in put2()
829 * XXX And does "positive" really mean non-negative? in put2()
833 p++; in put2()
836 goto finally; in put2()
838 if (!( memo_len = PyInt_FromLong(p))) in put2()
839 goto finally; in put2()
842 goto finally; in put2()
849 if (PyDict_SetItem(self->memo, py_ob_id, t) < 0) in put2()
850 goto finally; in put2()
852 if (!self->bin) { in put2()
854 PyOS_snprintf(c_str + 1, sizeof(c_str) - 1, in put2()
855 "%" PY_FORMAT_SIZE_T "d\n", p); in put2()
858 else if (Pdata_Check(self->file)) { in put2()
859 if (write_other(self, NULL, 0) < 0) return -1; in put2()
860 PDATA_APPEND(self->file, memo_len, -1); in put2()
862 goto finally; in put2()
865 if (p < 256) { in put2()
867 c_str[1] = p; in put2()
870 else if (p < 0x7fffffffL) { in put2()
872 c_str[1] = (int)(p & 0xff); in put2()
873 c_str[2] = (int)((p >> 8) & 0xff); in put2()
874 c_str[3] = (int)((p >> 16) & 0xff); in put2()
875 c_str[4] = (int)((p >> 24) & 0xff); in put2()
881 goto finally; in put2()
885 if (self->write_func(self, c_str, len) < 0) in put2()
886 goto finally; in put2()
890 finally: in put2()
957 if (++self->fast_container >= PY_CPICKLE_FAST_LIMIT) { in fast_save_enter()
959 if (self->fast_memo == NULL) { in fast_save_enter()
960 self->fast_memo = PyDict_New(); in fast_save_enter()
961 if (self->fast_memo == NULL) { in fast_save_enter()
962 self->fast_container = -1; in fast_save_enter()
969 if (PyDict_GetItem(self->fast_memo, key)) { in fast_save_enter()
973 "including object type %s at %p", in fast_save_enter()
974 Py_TYPE(obj)->tp_name, obj); in fast_save_enter()
975 self->fast_container = -1; in fast_save_enter()
978 if (PyDict_SetItem(self->fast_memo, key, Py_None) < 0) { in fast_save_enter()
980 self->fast_container = -1; in fast_save_enter()
991 if (self->fast_container-- >= PY_CPICKLE_FAST_LIMIT) { in fast_save_leave()
995 if (PyDict_DelItem(self->fast_memo, key) < 0) { in fast_save_leave()
1008 if (self->write_func(self, &none, 1) < 0) in save_none()
1009 return -1; in save_none()
1018 static char len[2] = {sizeof(FALSE)-1, sizeof(TRUE)-1}; in save_bool()
1021 if (self->proto >= 2) { in save_bool()
1023 if (self->write_func(self, &opcode, 1) < 0) in save_bool()
1024 return -1; in save_bool()
1026 else if (self->write_func(self, buf[l], len[l]) < 0) in save_bool()
1027 return -1; in save_bool()
1038 if (!self->bin in save_int()
1041 || l < -0x80000000L in save_int()
1044 /* Text-mode pickle, or long too big to fit in the 4-byte in save_int()
1048 PyOS_snprintf(c_str + 1, sizeof(c_str) - 1, "%ld\n", l); in save_int()
1049 if (self->write_func(self, c_str, strlen(c_str)) < 0) in save_int()
1050 return -1; in save_int()
1053 /* Binary pickle and l fits in a signed 4-byte int. */ in save_int()
1074 if (self->write_func(self, c_str, len) < 0) in save_int()
1075 return -1; in save_int()
1086 int res = -1; in save_long()
1091 if (self->proto >= 2) { in save_long()
1092 /* Linear-time pickling. */ in save_long()
1101 /* It's 0 -- an empty bytestring. */ in save_long()
1104 i = self->write_func(self, c_str, 2); in save_long()
1105 if (i < 0) goto finally; in save_long()
1107 goto finally; in save_long()
1110 if (nbits == (size_t)-1 && PyErr_Occurred()) in save_long()
1111 goto finally; in save_long()
1117 * the most-significant bit of the most-significant byte in save_long()
1120 * of the form -(2**(8*j-1)) for j > 0. Such a long is in save_long()
1121 * its own 256's-complement, so has the right sign bit in save_long()
1130 goto finally; in save_long()
1133 if (repr == NULL) goto finally; in save_long()
1138 if (i < 0) goto finally; in save_long()
1143 if (sign < 0 && nbytes > 1 && pdata[nbytes - 1] == 0xff && in save_long()
1144 (pdata[nbytes - 2] & 0x80) != 0) in save_long()
1145 --nbytes; in save_long()
1161 i = self->write_func(self, c_str, size); in save_long()
1162 if (i < 0) goto finally; in save_long()
1163 i = self->write_func(self, (char *)pdata, (int)nbytes); in save_long()
1164 if (i < 0) goto finally; in save_long()
1166 goto finally; in save_long()
1169 /* proto < 2: write the repr and newline. This is quadratic-time in save_long()
1173 goto finally; in save_long()
1176 goto finally; in save_long()
1178 if (self->write_func(self, &l, 1) < 0) in save_long()
1179 goto finally; in save_long()
1181 if (self->write_func(self, in save_long()
1184 goto finally; in save_long()
1186 if (self->write_func(self, "\n", 1) < 0) in save_long()
1187 goto finally; in save_long()
1191 finally: in save_long()
1202 if (self->bin) { in save_float()
1206 return -1; in save_float()
1207 if (self->write_func(self, str, 9) < 0) in save_float()
1208 return -1; in save_float()
1211 int result = -1; in save_float()
1215 if (self->write_func(self, &op, 1) < 0) in save_float()
1224 if (self->write_func(self, buf, strlen(buf)) < 0) in save_float()
1227 if (self->write_func(self, "\n", 1) < 0) in save_float()
1247 return -1; in save_string()
1249 if (!self->bin) { in save_string()
1255 return -1; in save_string()
1261 if (self->write_func(self, &string, 1) < 0) in save_string()
1264 if (self->write_func(self, repr_str, len) < 0) in save_string()
1267 if (self->write_func(self, "\n", 1) < 0) in save_string()
1284 c_str[i] = (int)(size >> ((i - 1) * 8)); in save_string()
1290 return -1; /* string too large */ in save_string()
1293 if (self->write_func(self, c_str, len) < 0) in save_string()
1294 return -1; in save_string()
1296 if (size > 128 && Pdata_Check(self->file)) { in save_string()
1297 if (write_other(self, NULL, 0) < 0) return -1; in save_string()
1298 PDATA_APPEND(self->file, args, -1); in save_string()
1301 if (self->write_func(self, in save_string()
1305 return -1; in save_string()
1311 return -1; in save_string()
1317 return -1; in save_string()
1328 char *p; in modified_EncodeRawUnicodeEscape() local
1347 p = q = PyString_AS_STRING(repr); in modified_EncodeRawUnicodeEscape()
1348 while (size-- > 0) { in modified_EncodeRawUnicodeEscape()
1351 /* Map 32-bit characters to '\Uxxxxxxxx' */ in modified_EncodeRawUnicodeEscape()
1353 *p++ = '\\'; in modified_EncodeRawUnicodeEscape()
1354 *p++ = 'U'; in modified_EncodeRawUnicodeEscape()
1355 *p++ = hexdigit[(ch >> 28) & 0xf]; in modified_EncodeRawUnicodeEscape()
1356 *p++ = hexdigit[(ch >> 24) & 0xf]; in modified_EncodeRawUnicodeEscape()
1357 *p++ = hexdigit[(ch >> 20) & 0xf]; in modified_EncodeRawUnicodeEscape()
1358 *p++ = hexdigit[(ch >> 16) & 0xf]; in modified_EncodeRawUnicodeEscape()
1359 *p++ = hexdigit[(ch >> 12) & 0xf]; in modified_EncodeRawUnicodeEscape()
1360 *p++ = hexdigit[(ch >> 8) & 0xf]; in modified_EncodeRawUnicodeEscape()
1361 *p++ = hexdigit[(ch >> 4) & 0xf]; in modified_EncodeRawUnicodeEscape()
1362 *p++ = hexdigit[ch & 15]; in modified_EncodeRawUnicodeEscape()
1366 /* Map UTF-16 surrogate pairs to '\U00xxxxxx' */ in modified_EncodeRawUnicodeEscape()
1372 size--; in modified_EncodeRawUnicodeEscape()
1375 *p++ = '\\'; in modified_EncodeRawUnicodeEscape()
1376 *p++ = 'U'; in modified_EncodeRawUnicodeEscape()
1377 *p++ = hexdigit[(ucs >> 28) & 0xf]; in modified_EncodeRawUnicodeEscape()
1378 *p++ = hexdigit[(ucs >> 24) & 0xf]; in modified_EncodeRawUnicodeEscape()
1379 *p++ = hexdigit[(ucs >> 20) & 0xf]; in modified_EncodeRawUnicodeEscape()
1380 *p++ = hexdigit[(ucs >> 16) & 0xf]; in modified_EncodeRawUnicodeEscape()
1381 *p++ = hexdigit[(ucs >> 12) & 0xf]; in modified_EncodeRawUnicodeEscape()
1382 *p++ = hexdigit[(ucs >> 8) & 0xf]; in modified_EncodeRawUnicodeEscape()
1383 *p++ = hexdigit[(ucs >> 4) & 0xf]; in modified_EncodeRawUnicodeEscape()
1384 *p++ = hexdigit[ucs & 0xf]; in modified_EncodeRawUnicodeEscape()
1387 /* Fall through: isolated surrogates are copied as-is */ in modified_EncodeRawUnicodeEscape()
1388 s--; in modified_EncodeRawUnicodeEscape()
1392 /* Map 16-bit characters to '\uxxxx' */ in modified_EncodeRawUnicodeEscape()
1394 *p++ = '\\'; in modified_EncodeRawUnicodeEscape()
1395 *p++ = 'u'; in modified_EncodeRawUnicodeEscape()
1396 *p++ = hexdigit[(ch >> 12) & 0xf]; in modified_EncodeRawUnicodeEscape()
1397 *p++ = hexdigit[(ch >> 8) & 0xf]; in modified_EncodeRawUnicodeEscape()
1398 *p++ = hexdigit[(ch >> 4) & 0xf]; in modified_EncodeRawUnicodeEscape()
1399 *p++ = hexdigit[ch & 15]; in modified_EncodeRawUnicodeEscape()
1401 /* Copy everything else as-is */ in modified_EncodeRawUnicodeEscape()
1403 *p++ = (char) ch; in modified_EncodeRawUnicodeEscape()
1405 *p = '\0'; in modified_EncodeRawUnicodeEscape()
1406 _PyString_Resize(&repr, p - q); in modified_EncodeRawUnicodeEscape()
1417 return -1; in save_unicode()
1419 if (!self->bin) { in save_unicode()
1426 return -1; in save_unicode()
1432 if (self->write_func(self, &string, 1) < 0) in save_unicode()
1435 if (self->write_func(self, repr_str, len) < 0) in save_unicode()
1438 if (self->write_func(self, "\n", 1) < 0) in save_unicode()
1448 return -1; in save_unicode()
1460 c_str[i] = (int)(size >> ((i - 1) * 8)); in save_unicode()
1463 if (self->write_func(self, c_str, len) < 0) in save_unicode()
1466 if (size > 128 && Pdata_Check(self->file)) { in save_unicode()
1469 PDATA_APPEND(self->file, repr, -1); in save_unicode()
1472 if (self->write_func(self, PyString_AS_STRING(repr), in save_unicode()
1482 return -1; in save_unicode()
1488 return -1; in save_unicode()
1497 int res = -1; /* guilty until proved innocent */ in store_tuple_elements()
1505 goto finally; in store_tuple_elements()
1507 goto finally; in store_tuple_elements()
1511 finally: in store_tuple_elements()
1526 int res = -1; in save_tuple()
1534 goto finally; in save_tuple()
1539 if (self->proto) { in save_tuple()
1548 if (self->write_func(self, c_str, len) >= 0) in save_tuple()
1551 goto finally; in save_tuple()
1554 /* A non-empty tuple. */ in save_tuple()
1563 goto finally; in save_tuple()
1565 if (len <= 3 && self->proto >= 2) { in save_tuple()
1568 goto finally; in save_tuple()
1569 if (PyDict_GetItem(self->memo, py_tuple_id)) { in save_tuple()
1572 if (self->write_func(self, &pop, 1) < 0) in save_tuple()
1573 goto finally; in save_tuple()
1576 goto finally; in save_tuple()
1578 goto finally; in save_tuple()
1581 if (self->write_func(self, len2opcode + len, 1) < 0) in save_tuple()
1582 goto finally; in save_tuple()
1589 if (self->write_func(self, &MARKv, 1) < 0) in save_tuple()
1590 goto finally; in save_tuple()
1593 goto finally; in save_tuple()
1595 if (PyDict_GetItem(self->memo, py_tuple_id)) { in save_tuple()
1597 if (self->bin) { in save_tuple()
1598 if (self->write_func(self, &pop_mark, 1) < 0) in save_tuple()
1599 goto finally; in save_tuple()
1606 if (self->write_func(self, &pop, 1) < 0) in save_tuple()
1607 goto finally; in save_tuple()
1612 goto finally; in save_tuple()
1616 if (self->write_func(self, &tuple, 1) < 0) in save_tuple()
1617 goto finally; in save_tuple()
1623 finally: in save_tuple()
1631 * empty list, or list-like object, for the APPENDS to operate on.
1646 if (self->proto == 0) { in batch_list()
1652 return -1; in batch_list()
1658 return -1; in batch_list()
1659 if (self->write_func(self, &append, 1) < 0) in batch_list()
1660 return -1; in batch_list()
1686 if (self->write_func(self, &append, 1) < 0) in batch_list()
1695 if (self->write_func(self, &MARKv, 1) < 0) in batch_list()
1721 if (self->write_func(self, &appends, 1) < 0) in batch_list()
1730 return -1; in batch_list()
1736 int res = -1; in save_list()
1741 if (self->fast && !fast_save_enter(self, args)) in save_list()
1742 goto finally; in save_list()
1745 if (self->bin) { in save_list()
1755 if (self->write_func(self, s, len) < 0) in save_list()
1756 goto finally; in save_list()
1760 goto finally; in save_list()
1766 goto finally; in save_list()
1769 goto finally; in save_list()
1774 goto finally; in save_list()
1783 finally: in save_list()
1784 if (self->fast && !fast_save_leave(self, args)) in save_list()
1785 res = -1; in save_list()
1794 * empty dict, or dict-like object, for the SETITEMS to operate on.
1798 * elements directly, and picking apart two-tuples, is so long-winded at
1805 PyObject *p = NULL; in batch_dict() local
1814 if (self->proto == 0) { in batch_dict()
1817 p = PyIter_Next(iter); in batch_dict()
1818 if (p == NULL) { in batch_dict()
1820 return -1; in batch_dict()
1823 if (!PyTuple_Check(p) || PyTuple_Size(p) != 2) { in batch_dict()
1825 "iterator must return 2-tuples"); in batch_dict()
1826 return -1; in batch_dict()
1828 i = save(self, PyTuple_GET_ITEM(p, 0), 0); in batch_dict()
1830 i = save(self, PyTuple_GET_ITEM(p, 1), 0); in batch_dict()
1831 Py_DECREF(p); in batch_dict()
1833 return -1; in batch_dict()
1834 if (self->write_func(self, &setitem, 1) < 0) in batch_dict()
1835 return -1; in batch_dict()
1853 "iterator must return 2-tuples"); in batch_dict()
1858 p = PyIter_Next(iter); in batch_dict()
1859 if (p == NULL) { in batch_dict()
1868 if (self->write_func(self, &setitem, 1) < 0) in batch_dict()
1877 if (self->write_func(self, &MARKv, 1) < 0) in batch_dict()
1888 while (p) { in batch_dict()
1889 if (!PyTuple_Check(p) || PyTuple_Size(p) != 2) { in batch_dict()
1891 "iterator must return 2-tuples"); in batch_dict()
1894 if (save(self, PyTuple_GET_ITEM(p, 0), 0) < 0) in batch_dict()
1896 if (save(self, PyTuple_GET_ITEM(p, 1), 0) < 0) in batch_dict()
1898 Py_CLEAR(p); in batch_dict()
1904 p = PyIter_Next(iter); in batch_dict()
1905 if (p == NULL) { in batch_dict()
1912 if (self->write_func(self, &setitems, 1) < 0) in batch_dict()
1920 Py_XDECREF(p); in batch_dict()
1921 return -1; in batch_dict()
1928 * empty dict, or dict-like object, for the SETITEMS to operate on.
1929 * Returns 0 on success, -1 on error.
1944 assert(self->proto > 0); in batch_dict_exact()
1948 /* Special-case len(d) == 1 to save space. */ in batch_dict_exact()
1952 return -1; in batch_dict_exact()
1954 return -1; in batch_dict_exact()
1955 if (self->write_func(self, &setitem, 1) < 0) in batch_dict_exact()
1956 return -1; in batch_dict_exact()
1963 if (self->write_func(self, &MARKv, 1) < 0) in batch_dict_exact()
1964 return -1; in batch_dict_exact()
1967 return -1; in batch_dict_exact()
1969 return -1; in batch_dict_exact()
1973 if (self->write_func(self, &setitems, 1) < 0) in batch_dict_exact()
1974 return -1; in batch_dict_exact()
1979 return -1; in batch_dict_exact()
1989 int res = -1; in save_dict()
1993 if (self->fast && !fast_save_enter(self, args)) in save_dict()
1994 goto finally; in save_dict()
1997 if (self->bin) { in save_dict()
2007 if (self->write_func(self, s, len) < 0) in save_dict()
2008 goto finally; in save_dict()
2012 goto finally; in save_dict()
2017 goto finally; in save_dict()
2020 goto finally; in save_dict()
2023 if (PyDict_CheckExact(args) && self->proto > 0) { in save_dict()
2033 goto finally; in save_dict()
2041 finally: in save_dict()
2042 if (self->fast && !fast_save_leave(self, args)) in save_dict()
2043 res = -1; in save_dict()
2055 int module_size, name_size, res = -1; in save_inst()
2059 if (self->fast && !fast_save_enter(self, args)) in save_inst()
2060 goto finally; in save_inst()
2062 if (self->write_func(self, &MARKv, 1) < 0) in save_inst()
2063 goto finally; in save_inst()
2066 goto finally; in save_inst()
2068 if (self->bin) { in save_inst()
2070 goto finally; in save_inst()
2079 goto finally; in save_inst()
2082 goto finally; in save_inst()
2086 goto finally; in save_inst()
2090 goto finally; in save_inst()
2100 goto finally; in save_inst()
2103 if (!self->bin) { in save_inst()
2104 if (!( name = ((PyClassObject *)class)->cl_name )) { in save_inst()
2106 goto finally; in save_inst()
2110 goto finally; in save_inst()
2115 goto finally; in save_inst()
2120 if (self->write_func(self, &inst, 1) < 0) in save_inst()
2121 goto finally; in save_inst()
2123 if (self->write_func(self, module_str, module_size) < 0) in save_inst()
2124 goto finally; in save_inst()
2126 if (self->write_func(self, "\n", 1) < 0) in save_inst()
2127 goto finally; in save_inst()
2129 if (self->write_func(self, name_str, name_size) < 0) in save_inst()
2130 goto finally; in save_inst()
2132 if (self->write_func(self, "\n", 1) < 0) in save_inst()
2133 goto finally; in save_inst()
2135 else if (self->write_func(self, &obj, 1) < 0) { in save_inst()
2136 goto finally; in save_inst()
2142 goto finally; in save_inst()
2148 goto finally; in save_inst()
2154 goto finally; in save_inst()
2156 goto finally; in save_inst()
2162 goto finally; in save_inst()
2166 goto finally; in save_inst()
2170 goto finally; in save_inst()
2172 if (self->write_func(self, &build, 1) < 0) in save_inst()
2173 goto finally; in save_inst()
2177 finally: in save_inst()
2178 if (self->fast && !fast_save_leave(self, args)) in save_inst()
2179 res = -1; in save_inst()
2197 int module_size, name_size, res = -1; in save_global()
2207 goto finally; in save_global()
2211 goto finally; in save_global()
2215 goto finally; in save_global()
2221 but I don't know how to stop it. :-( */ in save_global()
2228 goto finally; in save_global()
2236 goto finally; in save_global()
2244 goto finally; in save_global()
2248 if (self->proto >= 2) { in save_global()
2268 goto finally; in save_global()
2275 goto finally; in save_global()
2299 if (self->write_func(self, c_str, n) >= 0) in save_global()
2301 goto finally; /* and don't memoize */ in save_global()
2305 if (self->write_func(self, &global, 1) < 0) in save_global()
2306 goto finally; in save_global()
2308 if (self->write_func(self, module_str, module_size) < 0) in save_global()
2309 goto finally; in save_global()
2311 if (self->write_func(self, "\n", 1) < 0) in save_global()
2312 goto finally; in save_global()
2314 if (self->write_func(self, name_str, name_size) < 0) in save_global()
2315 goto finally; in save_global()
2317 if (self->write_func(self, "\n", 1) < 0) in save_global()
2318 goto finally; in save_global()
2321 goto finally; in save_global()
2325 finally: in save_global()
2338 int res = -1; in save_pers()
2344 if (self->arg) { in save_pers()
2345 pid = PyObject_Call(f, self->arg, NULL); in save_pers()
2348 if (! pid) return -1; in save_pers()
2351 if (!self->bin) { in save_pers()
2355 goto finally; in save_pers()
2358 if (self->write_func(self, &persid, 1) < 0) in save_pers()
2359 goto finally; in save_pers()
2362 goto finally; in save_pers()
2364 if (self->write_func(self, in save_pers()
2368 goto finally; in save_pers()
2370 if (self->write_func(self, "\n", 1) < 0) in save_pers()
2371 goto finally; in save_pers()
2374 goto finally; in save_pers()
2377 if (self->write_func(self, &binpersid, 1) < 0) in save_pers()
2378 res = -1; in save_pers()
2383 goto finally; in save_pers()
2388 finally: in save_pers()
2394 /* We're saving ob, and args is the 2-thru-5 tuple returned by the
2407 int use_newobj = self->proto >= 2; in save_reduce()
2418 return -1; in save_reduce()
2427 return -1; in save_reduce()
2433 return -1; in save_reduce()
2444 "Os", fn, Py_TYPE(listitems)->tp_name); in save_reduce()
2445 return -1; in save_reduce()
2453 "Os", fn, Py_TYPE(dictitems)->tp_name); in save_reduce()
2454 return -1; in save_reduce()
2467 return -1; in save_reduce()
2487 return -1; in save_reduce()
2494 return -1; in save_reduce()
2507 return -1; in save_reduce()
2514 return -1; in save_reduce()
2520 return -1; in save_reduce()
2522 newargtup = PyTuple_New(n-1); /* argtup[1:] */ in save_reduce()
2524 return -1; in save_reduce()
2528 PyTuple_SET_ITEM(newargtup, i-1, temp); in save_reduce()
2533 return -1; in save_reduce()
2536 if (self->write_func(self, &newobj, 1) < 0) in save_reduce()
2537 return -1; in save_reduce()
2543 self->write_func(self, &reduce, 1) < 0) in save_reduce()
2544 return -1; in save_reduce()
2553 if (Py_REFCNT(ob) > 1 && !self->fast) { in save_reduce()
2556 return -1; in save_reduce()
2557 if (PyDict_GetItem(self->memo, py_ob_id)) { in save_reduce()
2559 if (self->write_func(self, &pop_op, 1) < 0 || in save_reduce()
2562 return -1; in save_reduce()
2569 return -1; in save_reduce()
2573 return -1; in save_reduce()
2576 return -1; in save_reduce()
2581 return -1; in save_reduce()
2584 return -1; in save_reduce()
2588 self->write_func(self, &build, 1) < 0) in save_reduce()
2589 return -1; in save_reduce()
2600 int res = -1; in save()
2604 return -1; in save()
2606 if (!pers_save && self->pers_func) { in save()
2607 if ((tmp = save_pers(self, args, self->pers_func)) != 0) { in save()
2609 goto finally; in save()
2615 goto finally; in save()
2620 switch (type->tp_name[0]) { in save()
2624 goto finally; in save()
2630 goto finally; in save()
2637 goto finally; in save()
2644 goto finally; in save()
2651 goto finally; in save()
2658 goto finally; in save()
2666 goto finally; in save()
2674 goto finally; in save()
2676 if (PyDict_GetItem(self->memo, py_ob_id)) { in save()
2678 goto finally; in save()
2681 goto finally; in save()
2685 switch (type->tp_name[0]) { in save()
2689 goto finally; in save()
2697 goto finally; in save()
2705 goto finally; in save()
2709 goto finally; in save()
2716 goto finally; in save()
2723 goto finally; in save()
2730 goto finally; in save()
2737 goto finally; in save()
2749 goto finally; in save()
2756 goto finally; in save()
2760 if (!pers_save && self->inst_pers_func) { in save()
2761 if ((tmp = save_pers(self, args, self->inst_pers_func)) != 0) { in save()
2763 goto finally; in save()
2776 if (self->arg) { in save()
2777 t = PyObject_Call(__reduce__, self->arg, NULL); in save()
2784 goto finally; in save()
2790 t = PyInt_FromLong(self->proto); in save()
2794 if (self->arg) { in save()
2796 self->arg, NULL); in save()
2805 goto finally; in save()
2814 goto finally; in save()
2820 goto finally; in save()
2824 goto finally; in save()
2831 goto finally; in save()
2836 finally: in save()
2851 if (self->proto >= 2) { in dump()
2855 assert(self->proto >= 0 && self->proto < 256); in dump()
2856 bytes[1] = (char)self->proto; in dump()
2857 if (self->write_func(self, bytes, 2) < 0) in dump()
2858 return -1; in dump()
2862 return -1; in dump()
2864 if (self->write_func(self, &stop, 1) < 0) in dump()
2865 return -1; in dump()
2867 if (self->write_func(self, NULL, 0) < 0) in dump()
2868 return -1; in dump()
2876 if (self->memo) in Pickle_clear_memo()
2877 PyDict_Clear(self->memo); in Pickle_clear_memo()
2888 char *s, *p, *have_get; in Pickle_getvalue() local
2896 if (! Pdata_Check(self->file)) { in Pickle_getvalue()
2898 "Attempt to getvalue() a non-list-based pickler"); in Pickle_getvalue()
2905 data=(Pdata*)self->file; in Pickle_getvalue()
2906 l=data->length; in Pickle_getvalue()
2909 lm = PyDict_Size(self->memo); in Pickle_getvalue()
2917 for (rsize = 0, i = l; --i >= 0; ) { in Pickle_getvalue()
2918 k = data->data[i]; in Pickle_getvalue()
2961 k = data->data[i]; in Pickle_getvalue()
2966 p=PyString_AS_STRING((PyStringObject *)k); in Pickle_getvalue()
2967 while (--ssize >= 0) in Pickle_getvalue()
2968 *s++ = *p++; in Pickle_getvalue()
3008 PyDict_Clear(self->memo); in Pickle_getvalue()
3042 PyDoc_STR("dump(object) -- "
3045 PyDoc_STR("clear_memo() -- Clear the picklers memo")},
3047 PyDoc_STR("getvalue() -- Finish picking a list-based pickle")},
3069 self->proto = proto; in newPicklerobject()
3070 self->bin = proto > 0; in newPicklerobject()
3071 self->fp = NULL; in newPicklerobject()
3072 self->write = NULL; in newPicklerobject()
3073 self->memo = NULL; in newPicklerobject()
3074 self->arg = NULL; in newPicklerobject()
3075 self->pers_func = NULL; in newPicklerobject()
3076 self->inst_pers_func = NULL; in newPicklerobject()
3077 self->write_buf = NULL; in newPicklerobject()
3078 self->fast = 0; in newPicklerobject()
3079 self->fast_container = 0; in newPicklerobject()
3080 self->fast_memo = NULL; in newPicklerobject()
3081 self->buf_size = 0; in newPicklerobject()
3082 self->dispatch_table = NULL; in newPicklerobject()
3084 self->file = NULL; in newPicklerobject()
3092 self->file = file; in newPicklerobject()
3094 if (!( self->memo = PyDict_New())) in newPicklerobject()
3098 self->fp = PyFile_AsFile(file); in newPicklerobject()
3099 if (self->fp == NULL) { in newPicklerobject()
3104 self->write_func = write_file; in newPicklerobject()
3107 self->write_func = write_cStringIO; in newPicklerobject()
3110 self->write_func = write_none; in newPicklerobject()
3113 self->write_func = write_other; in newPicklerobject()
3116 self->write = PyObject_GetAttr(file, write_str); in newPicklerobject()
3117 if (!self->write) { in newPicklerobject()
3126 self->write_buf = (char *)PyMem_Malloc(WRITE_BUF_SIZE); in newPicklerobject()
3127 if (self->write_buf == NULL) { in newPicklerobject()
3139 self->dispatch_table = PyObject_GetAttr(m, dispatch_table_str); in newPicklerobject()
3141 if (self->dispatch_table == NULL) in newPicklerobject()
3145 self->dispatch_table = dispatch_table; in newPicklerobject()
3187 Py_XDECREF(self->write); in Pickler_dealloc()
3188 Py_XDECREF(self->memo); in Pickler_dealloc()
3189 Py_XDECREF(self->fast_memo); in Pickler_dealloc()
3190 Py_XDECREF(self->arg); in Pickler_dealloc()
3191 Py_XDECREF(self->file); in Pickler_dealloc()
3192 Py_XDECREF(self->pers_func); in Pickler_dealloc()
3193 Py_XDECREF(self->inst_pers_func); in Pickler_dealloc()
3194 Py_XDECREF(self->dispatch_table); in Pickler_dealloc()
3195 PyMem_Free(self->write_buf); in Pickler_dealloc()
3196 Py_TYPE(self)->tp_free((PyObject *)self); in Pickler_dealloc()
3202 Py_VISIT(self->write); in Pickler_traverse()
3203 Py_VISIT(self->memo); in Pickler_traverse()
3204 Py_VISIT(self->fast_memo); in Pickler_traverse()
3205 Py_VISIT(self->arg); in Pickler_traverse()
3206 Py_VISIT(self->file); in Pickler_traverse()
3207 Py_VISIT(self->pers_func); in Pickler_traverse()
3208 Py_VISIT(self->inst_pers_func); in Pickler_traverse()
3209 Py_VISIT(self->dispatch_table); in Pickler_traverse()
3216 Py_CLEAR(self->write); in Pickler_clear()
3217 Py_CLEAR(self->memo); in Pickler_clear()
3218 Py_CLEAR(self->fast_memo); in Pickler_clear()
3219 Py_CLEAR(self->arg); in Pickler_clear()
3220 Py_CLEAR(self->file); in Pickler_clear()
3221 Py_CLEAR(self->pers_func); in Pickler_clear()
3222 Py_CLEAR(self->inst_pers_func); in Pickler_clear()
3223 Py_CLEAR(self->dispatch_table); in Pickler_clear()
3228 Pickler_get_pers_func(Picklerobject *p) in Pickler_get_pers_func() argument
3230 if (p->pers_func == NULL) in Pickler_get_pers_func()
3233 Py_INCREF(p->pers_func); in Pickler_get_pers_func()
3234 return p->pers_func; in Pickler_get_pers_func()
3238 Pickler_set_pers_func(Picklerobject *p, PyObject *v) in Pickler_set_pers_func() argument
3243 return -1; in Pickler_set_pers_func()
3246 Py_XSETREF(p->pers_func, v); in Pickler_set_pers_func()
3251 Pickler_set_inst_pers_func(Picklerobject *p, PyObject *v) in Pickler_set_inst_pers_func() argument
3256 return -1; in Pickler_set_inst_pers_func()
3259 Py_XSETREF(p->inst_pers_func, v); in Pickler_set_inst_pers_func()
3264 Pickler_get_memo(Picklerobject *p) in Pickler_get_memo() argument
3266 if (p->memo == NULL) in Pickler_get_memo()
3269 Py_INCREF(p->memo); in Pickler_get_memo()
3270 return p->memo; in Pickler_get_memo()
3274 Pickler_set_memo(Picklerobject *p, PyObject *v) in Pickler_set_memo() argument
3279 return -1; in Pickler_set_memo()
3283 return -1; in Pickler_set_memo()
3286 Py_XSETREF(p->memo, v); in Pickler_set_memo()
3291 Pickler_get_error(Picklerobject *p) in Pickler_get_error() argument
3384 if (self->num_marks < 1) { in marker()
3386 return -1; in marker()
3389 return self->marks[--self->num_marks]; in marker()
3396 PDATA_APPEND(self->stack, Py_None, -1); in load_none()
3404 return -1; in bad_readline()
3413 int res = -1; in load_int()
3416 if ((len = self->readline_func(self, &s)) < 0) return -1; in load_int()
3418 if (!( s=pystrndup(s,len))) return -1; in load_int()
3431 goto finally; in load_int()
3436 if (!( py_int = PyBool_FromLong(l))) goto finally; in load_int()
3439 if (!( py_int = PyInt_FromLong(l))) goto finally; in load_int()
3444 PDATA_PUSH(self->stack, py_int, -1); in load_int()
3447 finally: in load_int()
3457 PDATA_APPEND(self->stack, boolean, -1); in load_bool()
3461 /* s contains x bytes of a little-endian integer. Return its value as a
3462 * C int. Obscure: when x is 1 or 2, this is an unsigned little-endian
3464 * of x-platform bugs.
3498 return -1; in load_binintx()
3500 PDATA_PUSH(self->stack, py_int, -1); in load_binintx()
3510 if (self->read_func(self, &s, 4) < 0) in load_binint()
3511 return -1; in load_binint()
3522 if (self->read_func(self, &s, 1) < 0) in load_binint1()
3523 return -1; in load_binint1()
3534 if (self->read_func(self, &s, 2) < 0) in load_binint2()
3535 return -1; in load_binint2()
3546 int res = -1; in load_long()
3548 if ((len = self->readline_func(self, &s)) < 0) return -1; in load_long()
3550 if (!( s=pystrndup(s,len))) return -1; in load_long()
3553 goto finally; in load_long()
3556 PDATA_PUSH(self->stack, l, -1); in load_long()
3559 finally: in load_long()
3565 /* 'size' bytes contain the # of bytes of little-endian 256's-complement
3577 i = self->read_func(self, &nbytes, size); in load_counted_long()
3578 if (i < 0) return -1; in load_counted_long()
3582 /* Corrupt or hostile pickle -- we never write one like in load_counted_long()
3587 return -1; in load_counted_long()
3593 /* Read the raw little-endian bytes & convert. */ in load_counted_long()
3594 i = self->read_func(self, (char **)&pdata, size); in load_counted_long()
3595 if (i < 0) return -1; in load_counted_long()
3600 return -1; in load_counted_long()
3601 PDATA_PUSH(self->stack, along, -1); in load_counted_long()
3611 int res = -1; in load_float()
3614 if ((len = self->readline_func(self, &s)) < 0) return -1; in load_float()
3616 if (!( s=pystrndup(s,len))) return -1; in load_float()
3620 if (d == -1.0 && PyErr_Occurred()) { in load_float()
3621 goto finally; in load_float()
3625 goto finally; in load_float()
3629 goto finally; in load_float()
3632 PDATA_PUSH(self->stack, py_float, -1); in load_float()
3635 finally: in load_float()
3646 char *p; in load_binfloat() local
3648 if (self->read_func(self, &p, 8) < 0) in load_binfloat()
3649 return -1; in load_binfloat()
3651 x = _PyFloat_Unpack8((unsigned char *)p, 0); in load_binfloat()
3652 if (x == -1.0 && PyErr_Occurred()) in load_binfloat()
3653 return -1; in load_binfloat()
3657 return -1; in load_binfloat()
3659 PDATA_PUSH(self->stack, py_float, -1); in load_binfloat()
3668 int res = -1; in load_string()
3669 char *s, *p; in load_string() local
3671 if ((len = self->readline_func(self, &s)) < 0) return -1; in load_string()
3673 if (!( s=pystrndup(s,len))) return -1; in load_string()
3677 while (len > 0 && s[len-1] <= ' ') in load_string()
3678 len--; in load_string()
3679 if (len > 1 && s[0]=='"' && s[len-1]=='"') { in load_string()
3680 s[len-1] = '\0'; in load_string()
3681 p = s + 1 ; in load_string()
3682 len -= 2; in load_string()
3684 else if (len > 1 && s[0]=='\'' && s[len-1]=='\'') { in load_string()
3685 s[len-1] = '\0'; in load_string()
3686 p = s + 1 ; in load_string()
3687 len -= 2; in load_string()
3693 str = PyString_DecodeEscape(p, len, NULL, 0, NULL); in load_string()
3696 PDATA_PUSH(self->stack, str, -1); in load_string()
3704 return -1; in load_string()
3715 if (self->read_func(self, &s, 4) < 0) return -1; in load_binstring()
3719 /* Corrupt or hostile pickle -- we never write one like in load_binstring()
3724 return -1; in load_binstring()
3727 if (self->read_func(self, &s, l) < 0) in load_binstring()
3728 return -1; in load_binstring()
3731 return -1; in load_binstring()
3733 PDATA_PUSH(self->stack, py_string, -1); in load_binstring()
3745 if (self->read_func(self, &s, 1) < 0) in load_short_binstring()
3746 return -1; in load_short_binstring()
3750 if (self->read_func(self, &s, l) < 0) return -1; in load_short_binstring()
3752 if (!( py_string = PyString_FromStringAndSize(s, l))) return -1; in load_short_binstring()
3754 PDATA_PUSH(self->stack, py_string, -1); in load_short_binstring()
3767 if ((len = self->readline_func(self, &s)) < 0) return -1; in load_unicode()
3770 if (!( str = PyUnicode_DecodeRawUnicodeEscape(s, len - 1, NULL))) in load_unicode()
3771 return -1; in load_unicode()
3773 PDATA_PUSH(self->stack, str, -1); in load_unicode()
3787 if (self->read_func(self, &s, 4) < 0) return -1; in load_binunicode()
3791 /* Corrupt or hostile pickle -- we never write one like in load_binunicode()
3796 return -1; in load_binunicode()
3799 if (self->read_func(self, &s, l) < 0) in load_binunicode()
3800 return -1; in load_binunicode()
3803 return -1; in load_binunicode()
3805 PDATA_PUSH(self->stack, unicode, -1); in load_binunicode()
3816 if (self->stack->length < len) in load_counted_tuple()
3819 if (!(tup = Pdata_popTuple(self->stack, self->stack->length - len))) in load_counted_tuple()
3820 return -1; in load_counted_tuple()
3821 PDATA_PUSH(self->stack, tup, -1); in load_counted_tuple()
3830 if ((i = marker(self)) < 0) return -1; in load_tuple()
3831 return load_counted_tuple(self, self->stack->length - i); in load_tuple()
3839 if (!( list=PyList_New(0))) return -1; in load_empty_list()
3840 PDATA_PUSH(self->stack, list, -1); in load_empty_list()
3849 if (!( dict=PyDict_New())) return -1; in load_empty_dict()
3850 PDATA_PUSH(self->stack, dict, -1); in load_empty_dict()
3861 if ((i = marker(self)) < 0) return -1; in load_list()
3862 if (!( list=Pdata_popList(self->stack, i))) return -1; in load_list()
3863 PDATA_PUSH(self->stack, list, -1); in load_list()
3873 if ((i = marker(self)) < 0) return -1; in load_dict()
3874 j=self->stack->length; in load_dict()
3876 if (!( dict = PyDict_New())) return -1; in load_dict()
3879 key =self->stack->data[k-1]; in load_dict()
3880 value=self->stack->data[k ]; in load_dict()
3883 return -1; in load_dict()
3886 Pdata_clear(self->stack, i); in load_dict()
3887 PDATA_PUSH(self->stack, dict, -1); in load_dict()
3919 if ((i = marker(self)) < 0) return -1; in load_obj()
3921 if (self->stack->length - i < 1) in load_obj()
3924 if (!( tup=Pdata_popTuple(self->stack, i+1))) return -1; in load_obj()
3925 PDATA_POP(self->stack, class); in load_obj()
3932 if (! obj) return -1; in load_obj()
3933 PDATA_PUSH(self->stack, obj, -1); in load_obj()
3945 if ((i = marker(self)) < 0) return -1; in load_inst()
3947 if ((len = self->readline_func(self, &s)) < 0) return -1; in load_inst()
3949 module_name = PyString_FromStringAndSize(s, len - 1); in load_inst()
3950 if (!module_name) return -1; in load_inst()
3952 if ((len = self->readline_func(self, &s)) >= 0) { in load_inst()
3957 if ((class_name = PyString_FromStringAndSize(s, len - 1))) { in load_inst()
3959 self->find_class); in load_inst()
3965 if (! class) return -1; in load_inst()
3967 if ((tup=Pdata_popTuple(self->stack, i))) { in load_inst()
3973 if (! obj) return -1; in load_inst()
3975 PDATA_PUSH(self->stack, obj, -1); in load_inst()
3990 PDATA_POP(self->stack, args); in load_newobj()
3998 PDATA_POP(self->stack, clsraw); in load_newobj()
4006 if (cls->tp_new == NULL) { in load_newobj()
4013 obj = cls->tp_new(cls, args, NULL); in load_newobj()
4018 PDATA_PUSH(self->stack, obj, -1); in load_newobj()
4024 return -1; in load_newobj()
4034 if ((len = self->readline_func(self, &s)) < 0) return -1; in load_global()
4036 module_name = PyString_FromStringAndSize(s, len - 1); in load_global()
4037 if (!module_name) return -1; in load_global()
4039 if ((len = self->readline_func(self, &s)) >= 0) { in load_global()
4044 if ((class_name = PyString_FromStringAndSize(s, len - 1))) { in load_global()
4046 self->find_class); in load_global()
4052 if (! class) return -1; in load_global()
4053 PDATA_PUSH(self->stack, class, -1); in load_global()
4065 if (self->pers_func) { in load_persid()
4066 if ((len = self->readline_func(self, &s)) < 0) return -1; in load_persid()
4069 pid = PyString_FromStringAndSize(s, len - 1); in load_persid()
4070 if (!pid) return -1; in load_persid()
4072 if (PyList_Check(self->pers_func)) { in load_persid()
4073 if (PyList_Append(self->pers_func, pid) < 0) { in load_persid()
4075 return -1; in load_persid()
4080 if (self->arg) { in load_persid()
4081 pid = PyObject_Call(self->pers_func, self->arg, in load_persid()
4087 if (! pid) return -1; in load_persid()
4089 PDATA_PUSH(self->stack, pid, -1); in load_persid()
4096 return -1; in load_persid()
4105 if (self->pers_func) { in load_binpersid()
4106 PDATA_POP(self->stack, pid); in load_binpersid()
4107 if (! pid) return -1; in load_binpersid()
4109 if (PyList_Check(self->pers_func)) { in load_binpersid()
4110 if (PyList_Append(self->pers_func, pid) < 0) { in load_binpersid()
4112 return -1; in load_binpersid()
4117 if (self->arg) { in load_binpersid()
4118 pid = PyObject_Call(self->pers_func, self->arg, in load_binpersid()
4122 if (! pid) return -1; in load_binpersid()
4125 PDATA_PUSH(self->stack, pid, -1); in load_binpersid()
4132 return -1; in load_binpersid()
4140 Py_ssize_t len = self->stack->length; in load_pop()
4149 if (self->num_marks > 0 && self->marks[self->num_marks - 1] == len) { in load_pop()
4150 self->num_marks--; in load_pop()
4152 len--; in load_pop()
4153 Py_DECREF(self->stack->data[len]); in load_pop()
4154 self->stack->length = len; in load_pop()
4168 return -1; in load_pop_mark()
4170 Pdata_clear(self->stack, i); in load_pop_mark()
4182 if ((len = self->stack->length) <= 0) return stackUnderflow(); in load_dup()
4183 last=self->stack->data[len-1]; in load_dup()
4185 PDATA_PUSH(self->stack, last, -1); in load_dup()
4198 if ((len = self->readline_func(self, &s)) < 0) return -1; in load_get()
4201 if (!( py_str = PyString_FromStringAndSize(s, len - 1))) return -1; in load_get()
4203 value = PyDict_GetItem(self->memo, py_str); in load_get()
4206 rc = -1; in load_get()
4209 PDATA_APPEND(self->stack, value, -1); in load_get()
4226 if (self->read_func(self, &s, 1) < 0) return -1; in load_binget()
4229 if (!( py_key = PyInt_FromLong((long)key))) return -1; in load_binget()
4231 value = PyDict_GetItem(self->memo, py_key); in load_binget()
4234 rc = -1; in load_binget()
4237 PDATA_APPEND(self->stack, value, -1); in load_binget()
4255 if (self->read_func(self, &s, 4) < 0) return -1; in load_long_binget()
4266 if (!( py_key = PyInt_FromLong((long)key))) return -1; in load_long_binget()
4268 value = PyDict_GetItem(self->memo, py_key); in load_long_binget()
4271 rc = -1; in load_long_binget()
4274 PDATA_APPEND(self->stack, value, -1); in load_long_binget()
4296 if (self->read_func(self, &codebytes, nbytes) < 0) return -1; in load_extension()
4301 return -1; in load_extension()
4306 if (py_code == NULL) return -1; in load_extension()
4311 PDATA_APPEND(self->stack, obj, -1); in load_extension()
4321 return -1; in load_extension()
4324 * confirm that pair is really a 2-tuple of strings. in load_extension()
4331 "isn't a 2-tuple of strings", code); in load_extension()
4332 return -1; in load_extension()
4335 obj = find_class(module_name, class_name, self->find_class); in load_extension()
4338 return -1; in load_extension()
4340 /* Cache code -> obj. */ in load_extension()
4345 return -1; in load_extension()
4347 PDATA_PUSH(self->stack, obj, -1); in load_extension()
4358 if ((l = self->readline_func(self, &s)) < 0) return -1; in load_put()
4360 if (!( len=self->stack->length )) return stackUnderflow(); in load_put()
4361 if (!( py_str = PyString_FromStringAndSize(s, l - 1))) return -1; in load_put()
4362 value=self->stack->data[len-1]; in load_put()
4363 l=PyDict_SetItem(self->memo, py_str, value); in load_put()
4377 if (self->read_func(self, &s, 1) < 0) return -1; in load_binput()
4378 if (!( (len=self->stack->length) > 0 )) return stackUnderflow(); in load_binput()
4382 if (!( py_key = PyInt_FromLong((long)key))) return -1; in load_binput()
4383 value=self->stack->data[len-1]; in load_binput()
4384 len=PyDict_SetItem(self->memo, py_key, value); in load_binput()
4399 if (self->read_func(self, &s, 4) < 0) return -1; in load_long_binput()
4400 if (!( len=self->stack->length )) return stackUnderflow(); in load_long_binput()
4411 if (!( py_key = PyInt_FromLong(key))) return -1; in load_long_binput()
4412 value=self->stack->data[len-1]; in load_long_binput()
4413 len=PyDict_SetItem(self->memo, py_key, value); in load_long_binput()
4425 len=self->stack->length; in do_append()
4430 list=self->stack->data[x-1]; in do_append()
4436 slice=Pdata_popList(self->stack, x); in do_append()
4437 if (! slice) return -1; in do_append()
4446 return -1; in do_append()
4451 value=self->stack->data[i]; in do_append()
4454 if (self->arg) { in do_append()
4455 junk = PyObject_Call(append_method, self->arg, in do_append()
4460 Pdata_clear(self->stack, i+1); in do_append()
4461 self->stack->length=x; in do_append()
4463 return -1; in do_append()
4467 self->stack->length=x; in do_append()
4478 if (self->stack->length - 1 <= 0) in load_append()
4480 return do_append(self, self->stack->length - 1); in load_append()
4489 return -1; in load_appends()
4500 if (!( (len=self->stack->length) >= x in do_setitems()
4504 if ((len - x) % 2 != 0) { in do_setitems()
4505 /* Currupt or hostile pickle -- we never write one like this. */ in do_setitems()
4508 return -1; in do_setitems()
4511 dict=self->stack->data[x-1]; in do_setitems()
4514 key =self->stack->data[i-1]; in do_setitems()
4515 value=self->stack->data[i ]; in do_setitems()
4517 r=-1; in do_setitems()
4522 Pdata_clear(self->stack, x); in do_setitems()
4531 return do_setitems(self, self->stack->length - 2); in load_setitem()
4539 return -1; in load_setitems()
4550 int res = -1; in load_build()
4556 if (self->stack->length < 2) in load_build()
4558 PDATA_POP(self->stack, state); in load_build()
4560 return -1; in load_build()
4561 inst = self->stack->data[self->stack->length - 1]; in load_build()
4569 if (self->arg) { in load_build()
4570 junk = PyObject_Call(__setstate__, self->arg, NULL); in load_build()
4575 return -1; in load_build()
4580 return -1; in load_build()
4603 goto finally; in load_build()
4607 goto finally; in load_build()
4618 goto finally; in load_build()
4630 goto finally; in load_build()
4635 goto finally; in load_build()
4640 finally: in load_build()
4657 if ((self->num_marks + 1) >= self->marks_size) { in load_mark()
4659 s=self->marks_size+20; in load_mark()
4660 if (s <= self->num_marks) s=self->num_marks + 1; in load_mark()
4661 if (self->marks == NULL) in load_mark()
4664 marks=(Py_ssize_t *)realloc(self->marks, in load_mark()
4668 return -1; in load_mark()
4670 self->marks = marks; in load_mark()
4671 self->marks_size = s; in load_mark()
4674 self->marks[self->num_marks++] = self->stack->length; in load_mark()
4684 PDATA_POP(self->stack, arg_tup); in load_reduce()
4685 if (! arg_tup) return -1; in load_reduce()
4686 PDATA_POP(self->stack, callable); in load_reduce()
4693 if (! ob) return -1; in load_reduce()
4695 PDATA_PUSH(self->stack, ob, -1); in load_reduce()
4708 i = self->read_func(self, &protobyte, 1); in load_proto()
4710 return -1; in load_proto()
4721 return -1; in load_proto()
4730 self->num_marks = 0; in load()
4731 if (self->stack->length) Pdata_clear(self->stack, 0); in load()
4734 if (self->read_func(self, &s, 1) < 0) in load()
5024 PDATA_POP(self->stack, val); in load()
5029 /* No-load functions to support noload, which is used to
5037 if ((i = marker(self)) < 0) return -1; in noload_obj()
5038 return Pdata_clear(self->stack, i+1); in noload_obj()
5048 if ((i = marker(self)) < 0) return -1; in noload_inst()
5049 Pdata_clear(self->stack, i); in noload_inst()
5050 if (self->readline_func(self, &s) < 0) return -1; in noload_inst()
5051 if (self->readline_func(self, &s) < 0) return -1; in noload_inst()
5052 PDATA_APPEND(self->stack, Py_None, -1); in noload_inst()
5061 PDATA_POP(self->stack, obj); /* pop argtuple */ in noload_newobj()
5062 if (obj == NULL) return -1; in noload_newobj()
5065 PDATA_POP(self->stack, obj); /* pop cls */ in noload_newobj()
5066 if (obj == NULL) return -1; in noload_newobj()
5069 PDATA_APPEND(self->stack, Py_None, -1); in noload_newobj()
5078 if (self->readline_func(self, &s) < 0) return -1; in noload_global()
5079 if (self->readline_func(self, &s) < 0) return -1; in noload_global()
5080 PDATA_APPEND(self->stack, Py_None,-1); in noload_global()
5088 if (self->stack->length < 2) return stackUnderflow(); in noload_reduce()
5089 Pdata_clear(self->stack, self->stack->length-2); in noload_reduce()
5090 PDATA_APPEND(self->stack, Py_None,-1); in noload_reduce()
5097 if (self->stack->length < 1) return stackUnderflow(); in noload_build()
5098 Pdata_clear(self->stack, self->stack->length-1); in noload_build()
5108 if (self->read_func(self, &codebytes, nbytes) < 0) return -1; in noload_extension()
5109 PDATA_APPEND(self->stack, Py_None, -1); in noload_extension()
5116 return Pdata_clear(self->stack, self->stack->length - 1); in noload_append()
5123 if ((i = marker(self)) < 0) return -1; in noload_appends()
5124 return Pdata_clear(self->stack, i); in noload_appends()
5130 return Pdata_clear(self->stack, self->stack->length - 2); in noload_setitem()
5137 if ((i = marker(self)) < 0) return -1; in noload_setitems()
5138 return Pdata_clear(self->stack, i); in noload_setitems()
5147 self->num_marks = 0; in noload()
5148 Pdata_clear(self->stack, 0); in noload()
5151 if (self->read_func(self, &s, 1) < 0) in noload()
5436 PDATA_POP(self->stack, val); in noload()
5456 PyDoc_STR("load() -- Load a pickle")
5460 "noload() -- not load a pickle, but go through most of the motions\n"
5479 self->file = NULL; in newUnpicklerobject()
5480 self->arg = NULL; in newUnpicklerobject()
5481 self->stack = (Pdata*)Pdata_New(); in newUnpicklerobject()
5482 self->pers_func = NULL; in newUnpicklerobject()
5483 self->last_string = NULL; in newUnpicklerobject()
5484 self->marks = NULL; in newUnpicklerobject()
5485 self->num_marks = 0; in newUnpicklerobject()
5486 self->marks_size = 0; in newUnpicklerobject()
5487 self->buf_size = 0; in newUnpicklerobject()
5488 self->read = NULL; in newUnpicklerobject()
5489 self->readline = NULL; in newUnpicklerobject()
5490 self->find_class = NULL; in newUnpicklerobject()
5492 if (!( self->memo = PyDict_New())) in newUnpicklerobject()
5495 if (!self->stack) in newUnpicklerobject()
5499 self->file = f; in newUnpicklerobject()
5503 self->fp = PyFile_AsFile(f); in newUnpicklerobject()
5504 if (self->fp == NULL) { in newUnpicklerobject()
5509 self->read_func = read_file; in newUnpicklerobject()
5510 self->readline_func = readline_file; in newUnpicklerobject()
5513 self->fp = NULL; in newUnpicklerobject()
5514 self->read_func = read_cStringIO; in newUnpicklerobject()
5515 self->readline_func = readline_cStringIO; in newUnpicklerobject()
5519 self->fp = NULL; in newUnpicklerobject()
5520 self->read_func = read_other; in newUnpicklerobject()
5521 self->readline_func = readline_other; in newUnpicklerobject()
5523 if (!( (self->readline = PyObject_GetAttr(f, readline_str)) && in newUnpicklerobject()
5524 (self->read = PyObject_GetAttr(f, read_str)))) { in newUnpicklerobject()
5553 Py_XDECREF(self->readline); in Unpickler_dealloc()
5554 Py_XDECREF(self->read); in Unpickler_dealloc()
5555 Py_XDECREF(self->file); in Unpickler_dealloc()
5556 Py_XDECREF(self->memo); in Unpickler_dealloc()
5557 Py_XDECREF(self->stack); in Unpickler_dealloc()
5558 Py_XDECREF(self->pers_func); in Unpickler_dealloc()
5559 Py_XDECREF(self->arg); in Unpickler_dealloc()
5560 Py_XDECREF(self->last_string); in Unpickler_dealloc()
5561 Py_XDECREF(self->find_class); in Unpickler_dealloc()
5563 if (self->marks) { in Unpickler_dealloc()
5564 free(self->marks); in Unpickler_dealloc()
5567 if (self->buf_size) { in Unpickler_dealloc()
5568 free(self->buf); in Unpickler_dealloc()
5571 Py_TYPE(self)->tp_free((PyObject *)self); in Unpickler_dealloc()
5577 Py_VISIT(self->readline); in Unpickler_traverse()
5578 Py_VISIT(self->read); in Unpickler_traverse()
5579 Py_VISIT(self->file); in Unpickler_traverse()
5580 Py_VISIT(self->memo); in Unpickler_traverse()
5581 Py_VISIT(self->stack); in Unpickler_traverse()
5582 Py_VISIT(self->pers_func); in Unpickler_traverse()
5583 Py_VISIT(self->arg); in Unpickler_traverse()
5584 Py_VISIT(self->last_string); in Unpickler_traverse()
5585 Py_VISIT(self->find_class); in Unpickler_traverse()
5592 Py_CLEAR(self->readline); in Unpickler_clear()
5593 Py_CLEAR(self->read); in Unpickler_clear()
5594 Py_CLEAR(self->file); in Unpickler_clear()
5595 Py_CLEAR(self->memo); in Unpickler_clear()
5596 Py_CLEAR(self->stack); in Unpickler_clear()
5597 Py_CLEAR(self->pers_func); in Unpickler_clear()
5598 Py_CLEAR(self->arg); in Unpickler_clear()
5599 Py_CLEAR(self->last_string); in Unpickler_clear()
5600 Py_CLEAR(self->find_class); in Unpickler_clear()
5608 if (!self->pers_func) { in Unpickler_getattr()
5613 Py_INCREF(self->pers_func); in Unpickler_getattr()
5614 return self->pers_func; in Unpickler_getattr()
5618 if (!self->find_class) { in Unpickler_getattr()
5623 Py_INCREF(self->find_class); in Unpickler_getattr()
5624 return self->find_class; in Unpickler_getattr()
5628 if (!self->memo) { in Unpickler_getattr()
5633 Py_INCREF(self->memo); in Unpickler_getattr()
5634 return self->memo; in Unpickler_getattr()
5652 Py_XSETREF(self->pers_func, value); in Unpickler_setattr()
5658 Py_XSETREF(self->find_class, value); in Unpickler_setattr()
5665 return -1; in Unpickler_setattr()
5672 return -1; in Unpickler_setattr()
5675 Py_XSETREF(self->memo, value); in Unpickler_setattr()
5680 return -1; in Unpickler_setattr()
5683 /* ---------------------------------------------------------------------------
5684 * Module-level functions.
5698 goto finally; in cpm_dump()
5701 goto finally; in cpm_dump()
5704 goto finally; in cpm_dump()
5709 finally: in cpm_dump()
5727 goto finally; in cpm_dumps()
5729 if (!( file = PycStringIO->NewOutput(128))) in cpm_dumps()
5730 goto finally; in cpm_dumps()
5733 goto finally; in cpm_dumps()
5736 goto finally; in cpm_dumps()
5738 res = PycStringIO->cgetvalue(file); in cpm_dumps()
5740 finally: in cpm_dumps()
5756 goto finally; in cpm_load()
5760 finally: in cpm_load()
5775 goto finally; in cpm_loads()
5777 if (!( file = PycStringIO->NewInput(ob))) in cpm_loads()
5778 goto finally; in cpm_loads()
5781 goto finally; in cpm_loads()
5785 finally: in cpm_loads()
5824 PyDoc_STR("dump(obj, file, protocol=0) -- "
5831 PyDoc_STR("dumps(obj, protocol=0) -- "
5838 PyDoc_STR("load(file) -- Load a pickle from the given file")},
5841 PyDoc_STR("loads(string) -- Load a pickle from the given string")},
5844 PyDoc_STR("Pickler(file, protocol=0) -- Create a pickler.\n"
5846 "This takes a file-like object for writing a pickle data stream.\n"
5869 PyDoc_STR("Unpickler(file) -- Create an unpickler.")},
5879 #define INIT_STR(S) if (!( S ## _str=PyString_InternFromString(#S))) return -1; in init_stuff()
5882 return -1; in init_stuff()
5884 return -1; in init_stuff()
5902 return -1; in init_stuff()
5907 if (!dispatch_table) return -1; in init_stuff()
5911 if (!extension_registry) return -1; in init_stuff()
5915 if (!inverted_registry) return -1; in init_stuff()
5919 if (!extension_cache) return -1; in init_stuff()
5924 return -1; in init_stuff()
5928 return -1; in init_stuff()
5936 if (!( t=PyImport_ImportModule("__builtin__"))) return -1; in init_stuff()
5938 return -1; in init_stuff()
5940 if (!( t=PyDict_New())) return -1; in init_stuff()
5945 module_dict, t) )) return -1; in init_stuff()
5950 return -1; in init_stuff()
5957 return -1; in init_stuff()
5959 if (!( t=PyDict_New())) return -1; in init_stuff()
5966 module_dict, t) )) return -1; in init_stuff()
5971 return -1; in init_stuff()
5977 return -1; in init_stuff()
5981 return -1; in init_stuff()
5985 return -1; in init_stuff()
5989 return -1; in init_stuff()
5993 return -1; in init_stuff()
5997 return -1; in init_stuff()
6001 return -1; in init_stuff()