summaryrefslogtreecommitdiff
path: root/simplejson/_speedups.c
diff options
context:
space:
mode:
authorshakefu <shakefu@gmail.com>2013-04-17 13:58:18 -0700
committershakefu <shakefu@gmail.com>2013-04-17 13:58:18 -0700
commit65914193587e9fba07d12908b28f0a974a1572b9 (patch)
treea32d236ad1c48aedfae50fc77d222459554f3fab /simplejson/_speedups.c
parent5291f8e0a778a4abe3f68b85a49b77f0831a4242 (diff)
downloadsimplejson-65914193587e9fba07d12908b28f0a974a1572b9.tar.gz
Implement for_json kwarg; pure Python version; add tests; update documentation.
Diffstat (limited to 'simplejson/_speedups.c')
-rw-r--r--simplejson/_speedups.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/simplejson/_speedups.c b/simplejson/_speedups.c
index ec4be4f..e08c2fd 100644
--- a/simplejson/_speedups.c
+++ b/simplejson/_speedups.c
@@ -170,6 +170,7 @@ typedef struct _PyEncoderObject {
int bigint_as_string;
PyObject *item_sort_key;
PyObject *item_sort_kw;
+ int for_json;
} PyEncoderObject;
static PyMemberDef encoder_members[] = {
@@ -2587,22 +2588,22 @@ static int
encoder_init(PyObject *self, PyObject *args, PyObject *kwds)
{
/* initialize Encoder object */
- static char *kwlist[] = {"markers", "default", "encoder", "indent", "key_separator", "item_separator", "sort_keys", "skipkeys", "allow_nan", "key_memo", "use_decimal", "namedtuple_as_object", "tuple_as_array", "bigint_as_string", "item_sort_key", "encoding", "Decimal", NULL};
+ static char *kwlist[] = {"markers", "default", "encoder", "indent", "key_separator", "item_separator", "sort_keys", "skipkeys", "allow_nan", "key_memo", "use_decimal", "namedtuple_as_object", "tuple_as_array", "bigint_as_string", "item_sort_key", "encoding", "Decimal", "for_json", NULL};
PyEncoderObject *s;
PyObject *markers, *defaultfn, *encoder, *indent, *key_separator;
PyObject *item_separator, *sort_keys, *skipkeys, *allow_nan, *key_memo;
PyObject *use_decimal, *namedtuple_as_object, *tuple_as_array;
- PyObject *bigint_as_string, *item_sort_key, *encoding, *Decimal;
+ PyObject *bigint_as_string, *item_sort_key, *encoding, *Decimal, *for_json;
assert(PyEncoder_Check(self));
s = (PyEncoderObject *)self;
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOOOOOOOOOOOOOOOO:make_encoder", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOOOOOOOOOOOOOOOOO:make_encoder", kwlist,
&markers, &defaultfn, &encoder, &indent, &key_separator, &item_separator,
&sort_keys, &skipkeys, &allow_nan, &key_memo, &use_decimal,
&namedtuple_as_object, &tuple_as_array, &bigint_as_string,
- &item_sort_key, &encoding, &Decimal))
+ &item_sort_key, &encoding, &Decimal, &for_json))
return -1;
s->markers = markers;
@@ -2654,6 +2655,7 @@ encoder_init(PyObject *self, PyObject *args, PyObject *kwds)
s->sort_keys = sort_keys;
s->item_sort_key = item_sort_key;
s->Decimal = Decimal;
+ s->for_json = PyObject_IsTrue(for_json);
Py_INCREF(s->markers);
Py_INCREF(s->defaultfn);
@@ -2817,7 +2819,7 @@ encoder_listencode_obj(PyEncoderObject *s, JSON_Accu *rval, PyObject *obj, Py_ss
if (encoded != NULL)
rv = _steal_accumulate(rval, encoded);
}
- else if (_has_for_json_hook(obj)) {
+ else if (s->for_json && _has_for_json_hook(obj)) {
PyObject *newobj;
if (Py_EnterRecursiveCall(" while encoding a JSON object"))
return rv;