Simplify save_bool in cpickle.

This commit is contained in:
Alexandre Vassalotti 2013-11-24 21:40:18 -08:00
parent fb310a9ec6
commit 8a67f52463
1 changed files with 11 additions and 18 deletions

View File

@ -110,16 +110,6 @@ enum opcode {
FRAME = '\x95'
};
/* These aren't opcodes -- they're ways to pickle bools before protocol 2
* so that unpicklers written before bools were introduced unpickle them
* as ints, but unpicklers after can recognize that bools were intended.
* Note that protocol 2 added direct ways to pickle bools.
*/
#undef TRUE
#define TRUE "I01\n"
#undef FALSE
#define FALSE "I00\n"
enum {
/* Keep in synch with pickle.Pickler._BATCHSIZE. This is how many elements
batch_list/dict() pumps out before doing APPENDS/SETITEMS. Nothing will
@ -1619,18 +1609,21 @@ save_none(PicklerObject *self, PyObject *obj)
static int
save_bool(PicklerObject *self, PyObject *obj)
{
static const char *buf[2] = { FALSE, TRUE };
const char len[2] = {sizeof(FALSE) - 1, sizeof(TRUE) - 1};
int p = (obj == Py_True);
if (self->proto >= 2) {
const char bool_op = p ? NEWTRUE : NEWFALSE;
const char bool_op = (obj == Py_True) ? NEWTRUE : NEWFALSE;
if (_Pickler_Write(self, &bool_op, 1) < 0)
return -1;
}
else if (_Pickler_Write(self, buf[p], len[p]) < 0)
return -1;
else {
/* These aren't opcodes -- they're ways to pickle bools before protocol 2
* so that unpicklers written before bools were introduced unpickle them
* as ints, but unpicklers after can recognize that bools were intended.
* Note that protocol 2 added direct ways to pickle bools.
*/
const char *bool_str = (obj == Py_True) ? "I01\n" : "I00\n";
if (_Pickler_Write(self, bool_str, strlen(bool_str)) < 0)
return -1;
}
return 0;
}