Commit c51ad9fb authored by chris's avatar chris

Chris checked out to edit.

parent 8dab6b3c
...@@ -25,6 +25,7 @@ static PyObject *ErrorObject; ...@@ -25,6 +25,7 @@ static PyObject *ErrorObject;
#define INST 'i' #define INST 'i'
#define OBJ 'o' #define OBJ 'o'
#define MARK '(' #define MARK '('
static char MARKv = MARK;
#define PUT 'p' #define PUT 'p'
#define BINPUT 'q' #define BINPUT 'q'
#define POP '0' #define POP '0'
...@@ -650,7 +651,7 @@ save_tuple(Picklerobject *self, PyObject *args) ...@@ -650,7 +651,7 @@ save_tuple(Picklerobject *self, PyObject *args)
long tuple_id, c_value; long tuple_id, c_value;
char c_str[30]; char c_str[30];
if ((*self->write_func)(self, self->mark, 1) == -1) if ((*self->write_func)(self, &MARKv, 1) == -1)
return NULL; return NULL;
tuple_id = (long)args; tuple_id = (long)args;
...@@ -754,7 +755,7 @@ save_list(Picklerobject *self, PyObject *args) ...@@ -754,7 +755,7 @@ save_list(Picklerobject *self, PyObject *args)
char c_str[30]; char c_str[30];
static char append[] = { APPEND }; static char append[] = { APPEND };
if ((*self->write_func)(self, self->mark, 1) == -1) if ((*self->write_func)(self, &MARKv, 1) == -1)
return NULL; return NULL;
if ((len = PyList_Size(args)) == -1) if ((len = PyList_Size(args)) == -1)
...@@ -842,7 +843,7 @@ save_dict(Picklerobject *self, PyObject *args) ...@@ -842,7 +843,7 @@ save_dict(Picklerobject *self, PyObject *args)
char c_str[30]; char c_str[30];
static char setitem[] = { SETITEM }; static char setitem[] = { SETITEM };
if ((*self->write_func)(self, self->mark, 1) == -1) if ((*self->write_func)(self, &MARKv, 1) == -1)
return NULL; return NULL;
UNLESS(items = PyDict_Items(args)) UNLESS(items = PyDict_Items(args))
...@@ -963,7 +964,7 @@ save_inst(Picklerobject *self, PyObject *args) ...@@ -963,7 +964,7 @@ save_inst(Picklerobject *self, PyObject *args)
int len, p; int len, p;
static char build[] = { BUILD }; static char build[] = { BUILD };
if ((*self->write_func)(self, self->mark, 1) == -1) if ((*self->write_func)(self, &MARKv, 1) == -1)
return NULL; return NULL;
UNLESS(class = PyObject_GetAttrString(args, "__class__")) UNLESS(class = PyObject_GetAttrString(args, "__class__"))
...@@ -1470,14 +1471,6 @@ newPicklerobject(PyObject *file, int bin) ...@@ -1470,14 +1471,6 @@ newPicklerobject(PyObject *file, int bin)
UNLESS(arg = PyTuple_New(1)) goto err; UNLESS(arg = PyTuple_New(1)) goto err;
UNLESS(mark = (char *)malloc(sizeof(char)))
{
PyErr_SetString(PyExc_MemoryError, "out of memory");
goto err;
}
*mark = MARK;
UNLESS(self = PyObject_NEW(Picklerobject, &Picklertype)) UNLESS(self = PyObject_NEW(Picklerobject, &Picklertype))
{ {
free(mark); free(mark);
...@@ -1507,7 +1500,6 @@ newPicklerobject(PyObject *file, int bin) ...@@ -1507,7 +1500,6 @@ newPicklerobject(PyObject *file, int bin)
self->write = write; self->write = write;
self->memo = memo; self->memo = memo;
self->arg = arg; self->arg = arg;
self->mark = mark;
self->pers_func = NULL; self->pers_func = NULL;
return self; return self;
...@@ -1539,7 +1531,6 @@ Pickler_dealloc(Picklerobject *self) ...@@ -1539,7 +1531,6 @@ Pickler_dealloc(Picklerobject *self)
Py_XDECREF(self->arg); Py_XDECREF(self->arg);
Py_XDECREF(self->file); Py_XDECREF(self->file);
Py_XDECREF(self->pers_func); Py_XDECREF(self->pers_func);
free(self->mark);
PyMem_DEL(self); PyMem_DEL(self);
} }
...@@ -2066,17 +2057,12 @@ load_string(Unpicklerobject *self, PyObject *args) ...@@ -2066,17 +2057,12 @@ load_string(Unpicklerobject *self, PyObject *args)
goto err; goto err;
} }
printf("load_string\n");
printf("%d\n", str->ob_refcnt);
free(s); free(s);
if (PyList_Append(self->stack, str) == -1) if (PyList_Append(self->stack, str) == -1)
goto err; goto err;
printf("%d\n", str->ob_refcnt);
Py_DECREF(str); Py_DECREF(str);
printf("%d\n", str->ob_refcnt);
Py_INCREF(Py_None); Py_INCREF(Py_None);
return Py_None; return Py_None;
...@@ -2689,14 +2675,9 @@ load_put(Unpicklerobject *self, PyObject *args) ...@@ -2689,14 +2675,9 @@ load_put(Unpicklerobject *self, PyObject *args)
UNLESS(value = PyList_GetItem(self->stack, len - 1)) UNLESS(value = PyList_GetItem(self->stack, len - 1))
goto err; goto err;
printf("load_put\n");
printf("%d\n", value->ob_refcnt);
if (PyDict_SetItem(self->memo, py_str, value) == -1) if (PyDict_SetItem(self->memo, py_str, value) == -1)
goto err; goto err;
printf("%d\n", value->ob_refcnt);
Py_DECREF(py_str); Py_DECREF(py_str);
Py_INCREF(Py_None); Py_INCREF(Py_None);
...@@ -2940,25 +2921,16 @@ load_stop(Unpicklerobject *self, PyObject *args) ...@@ -2940,25 +2921,16 @@ load_stop(Unpicklerobject *self, PyObject *args)
UNLESS(value = PyList_GetItem(self->stack, len - 1)) UNLESS(value = PyList_GetItem(self->stack, len - 1))
return NULL; return NULL;
printf("load_stop\n");
printf("%d\n", value->ob_refcnt);
Py_INCREF(value); Py_INCREF(value);
printf("%d\n", value->ob_refcnt);
if (DEL_LIST_SLICE(self->stack, len - 1, len) == -1) if (DEL_LIST_SLICE(self->stack, len - 1, len) == -1)
{ {
Py_DECREF(value); Py_DECREF(value);
return NULL; return NULL;
} }
printf("%d\n", value->ob_refcnt);
PyErr_SetObject(StopErr, value); PyErr_SetObject(StopErr, value);
printf("%d\n", value->ob_refcnt);
Py_DECREF(value); Py_DECREF(value);
printf("%d\n", value->ob_refcnt);
return NULL; return NULL;
} }
...@@ -2977,19 +2949,17 @@ Unpickler_load(Unpicklerobject *self, PyObject *args) ...@@ -2977,19 +2949,17 @@ Unpickler_load(Unpicklerobject *self, PyObject *args)
PyObject *stack = 0, *key = 0, *junk = 0, *err = 0, PyObject *stack = 0, *key = 0, *junk = 0, *err = 0,
*exc = 0, *val = 0, *tb = 0, *str = 0, *exc = 0, *val = 0, *tb = 0, *str = 0,
*key_repr = 0; *key_repr = 0;
char c;
char *c_str; char *c_str;
c_str=&c;
UNLESS(stack = PyList_New(0)) UNLESS(stack = PyList_New(0))
goto err; goto err;
self->stack = stack; self->stack = stack;
Py_INCREF(stack);
UNLESS(c_str = (char *)malloc(sizeof(char)))
{
PyErr_SetString(PyExc_MemoryError, "out of memory");
goto err;
}
while (1) while (1)
{ {
...@@ -3187,10 +3157,6 @@ Unpickler_load(Unpicklerobject *self, PyObject *args) ...@@ -3187,10 +3157,6 @@ Unpickler_load(Unpicklerobject *self, PyObject *args)
break; break;
} }
free(c_str);
Py_DECREF(stack);
err = PyErr_Occurred(); err = PyErr_Occurred();
if (err == PyExc_EOFError) if (err == PyExc_EOFError)
...@@ -3203,9 +3169,6 @@ Unpickler_load(Unpicklerobject *self, PyObject *args) ...@@ -3203,9 +3169,6 @@ Unpickler_load(Unpicklerobject *self, PyObject *args)
PyErr_Fetch(&exc, &val, &tb); PyErr_Fetch(&exc, &val, &tb);
printf("Unpickler_load\n");
printf("%d\n", val->ob_refcnt);
Py_XDECREF(exc); Py_XDECREF(exc);
Py_XDECREF(tb); Py_XDECREF(tb);
...@@ -3326,7 +3289,6 @@ Unpickler_dealloc(Unpicklerobject *self) ...@@ -3326,7 +3289,6 @@ Unpickler_dealloc(Unpicklerobject *self)
Py_XDECREF(self->read); Py_XDECREF(self->read);
Py_XDECREF(self->file); Py_XDECREF(self->file);
Py_XDECREF(self->memo); Py_XDECREF(self->memo);
Py_XDECREF(self->mark);
Py_XDECREF(self->stack); Py_XDECREF(self->stack);
Py_XDECREF(self->pers_func); Py_XDECREF(self->pers_func);
free(self->marks); free(self->marks);
...@@ -3452,7 +3414,7 @@ dumps(PyObject *self, PyObject *args) ...@@ -3452,7 +3414,7 @@ dumps(PyObject *self, PyObject *args)
static PyObject * static PyObject *
load(PyObject *self, PyObject *args) cpm_load(PyObject *self, PyObject *args)
{ {
Unpicklerobject *unpickler; Unpicklerobject *unpickler;
PyObject *load_result; PyObject *load_result;
...@@ -3469,15 +3431,8 @@ load(PyObject *self, PyObject *args) ...@@ -3469,15 +3431,8 @@ load(PyObject *self, PyObject *args)
return NULL; return NULL;
} }
printf("load\n"); Py_DECREF(unpickler);
printf("%d\n", load_result->ob_refcnt);
Unpickler_dealloc(unpickler);
printf("%d\n", load_result->ob_refcnt);
Py_INCREF(load_result);
Py_INCREF(load_result);
return load_result; return load_result;
} }
...@@ -3547,7 +3502,7 @@ static struct PyMethodDef cPickle_methods[] = ...@@ -3547,7 +3502,7 @@ static struct PyMethodDef cPickle_methods[] =
{ {
{"dump", (PyCFunction)dump, 1, ""}, {"dump", (PyCFunction)dump, 1, ""},
{"dumps", (PyCFunction)dumps, 1, ""}, {"dumps", (PyCFunction)dumps, 1, ""},
{"load", (PyCFunction)load, 0, ""}, {"load", (PyCFunction)cpm_load, 0, ""},
{"loads", (PyCFunction)loads, 0, ""}, {"loads", (PyCFunction)loads, 0, ""},
{"Pickler", (PyCFunction)get_Pickler, 1, ""}, {"Pickler", (PyCFunction)get_Pickler, 1, ""},
{"Unpickler", (PyCFunction)get_Unpickler, 0, ""}, {"Unpickler", (PyCFunction)get_Unpickler, 0, ""},
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment