Merge save_int into save_long in cpickle to remove redundant code.

Also, replace unnessary uses of the #if preprocessor directive.
This commit is contained in:
Alexandre Vassalotti 2013-11-24 22:41:13 -08:00
parent a58d1c32f8
commit ded929b300
1 changed files with 32 additions and 52 deletions

View File

@ -714,14 +714,14 @@ _write_size64(char *out, size_t value)
out[1] = (unsigned char)((value >> 8) & 0xff);
out[2] = (unsigned char)((value >> 16) & 0xff);
out[3] = (unsigned char)((value >> 24) & 0xff);
#if SIZEOF_SIZE_T >= 8
out[4] = (unsigned char)((value >> 32) & 0xff);
out[5] = (unsigned char)((value >> 40) & 0xff);
out[6] = (unsigned char)((value >> 48) & 0xff);
out[7] = (unsigned char)((value >> 56) & 0xff);
#else
out[4] = out[5] = out[6] = out[7] = 0;
#endif
if (sizeof(size_t) >= 8) {
out[4] = (unsigned char)((value >> 32) & 0xff);
out[5] = (unsigned char)((value >> 40) & 0xff);
out[6] = (unsigned char)((value >> 48) & 0xff);
out[7] = (unsigned char)((value >> 56) & 0xff);
} else {
out[4] = out[5] = out[6] = out[7] = 0;
}
}
static void
@ -1628,30 +1628,31 @@ save_bool(PicklerObject *self, PyObject *obj)
}
static int
save_int(PicklerObject *self, long x)
save_long(PicklerObject *self, PyObject *obj)
{
char pdata[32];
Py_ssize_t len = 0;
PyObject *repr = NULL;
Py_ssize_t size;
long val;
int status = 0;
if (!self->bin
#if SIZEOF_LONG > 4
|| x > 0x7fffffffL || x < -0x80000000L
#endif
) {
/* Text-mode pickle, or long too big to fit in the 4-byte
* signed BININT format: store as a string.
*/
pdata[0] = LONG; /* use LONG for consistency with pickle.py */
PyOS_snprintf(pdata + 1, sizeof(pdata) - 1, "%ldL\n", x);
if (_Pickler_Write(self, pdata, strlen(pdata)) < 0)
return -1;
const char long_op = LONG;
val= PyLong_AsLong(obj);
if (val == -1 && PyErr_Occurred()) {
/* out of range for int pickling */
PyErr_Clear();
}
else {
/* Binary pickle and x fits in a signed 4-byte int. */
pdata[1] = (unsigned char)(x & 0xff);
pdata[2] = (unsigned char)((x >> 8) & 0xff);
pdata[3] = (unsigned char)((x >> 16) & 0xff);
pdata[4] = (unsigned char)((x >> 24) & 0xff);
else if (self->bin &&
(sizeof(long) <= 4 ||
(val <= 0x7fffffffL && val >= -0x80000000L))) {
/* result fits in a signed 4-byte integer */
char pdata[32];
Py_ssize_t len = 0;
pdata[1] = (unsigned char)(val & 0xff);
pdata[2] = (unsigned char)((val >> 8) & 0xff);
pdata[3] = (unsigned char)((val >> 16) & 0xff);
pdata[4] = (unsigned char)((val >> 24) & 0xff);
if ((pdata[4] == 0) && (pdata[3] == 0)) {
if (pdata[2] == 0) {
@ -1670,31 +1671,10 @@ save_int(PicklerObject *self, long x)
if (_Pickler_Write(self, pdata, len) < 0)
return -1;
return 0;
}
return 0;
}
static int
save_long(PicklerObject *self, PyObject *obj)
{
PyObject *repr = NULL;
Py_ssize_t size;
long val = PyLong_AsLong(obj);
int status = 0;
const char long_op = LONG;
if (val == -1 && PyErr_Occurred()) {
/* out of range for int pickling */
PyErr_Clear();
}
else
#if SIZEOF_LONG > 4
if (val <= 0x7fffffffL && val >= -0x80000000L)
#endif
return save_int(self, val);
if (self->proto >= 2) {
/* Linear-time pickling. */
size_t nbits;