diff options
author | shakefu <shakefu@gmail.com> | 2013-04-17 13:58:18 -0700 |
---|---|---|
committer | shakefu <shakefu@gmail.com> | 2013-04-17 13:58:18 -0700 |
commit | 65914193587e9fba07d12908b28f0a974a1572b9 (patch) | |
tree | a32d236ad1c48aedfae50fc77d222459554f3fab /simplejson/_speedups.c | |
parent | 5291f8e0a778a4abe3f68b85a49b77f0831a4242 (diff) | |
download | simplejson-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.c | 12 |
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; |