Commit graph

18 commits

Author SHA1 Message Date
Paul Eggert
d263ce25cd Update copyright year to 2018
Run admin/update-copyright.
2018-01-01 01:25:56 -08:00
Philipp Stephani
a5835dfee1 Improve error reporting when serializing non-Unicode strings to JSON
* src/coding.c (utf8_string_p): New helper function.
(syms_of_coding) <utf-8-unix>: Move from json.c.

* src/json.c (json_check_utf8): New helper function.
(lisp_to_json_toplevel_1, lisp_to_json): Use it.  To save a bit of
time, check for invalid UTF-8 strings only after encountering an
error, since Jansson already rejects them.

* test/src/json-tests.el (json-serialize/invalid-unicode): Adapt
expected error symbol.
2017-12-30 23:16:51 +01:00
Chris Zheng
cf13450db8 Fix MS-Windows build broken by recent changes in json.c
* src/json.c [WINDOWSNT] (fn_json_object_get): Define.
(init_json_functions) [WINDOWSNT]: Load json_object_get from DLL.
(Bug#29848)

Copyright-paperwork-exempt: yes
2017-12-25 19:21:58 +02:00
Philipp Stephani
f552a957ad Accept alists when serializing JSON
* src/json.c (lisp_to_json_toplevel_1): Also accept alists
representing objects.

* src/json.c (Fjson_serialize): Update docstring.

* test/src/json-tests.el (json-serialize/object): Add unit tests for
serializing alists.

* doc/lispref/text.texi (Parsing JSON): Document that serialization
functions accept alists.
2017-12-24 13:59:25 +01:00
Philipp Stephani
3455192777 JSON serialization: reject duplicate keys in hashtables
* src/json.c (lisp_to_json_toplevel_1): Reject duplicate keys in
hashtables.

* test/src/json-tests.el (json-serialize/object-with-duplicate-keys):
Add unit tests.
2017-12-24 13:52:30 +01:00
Philipp Stephani
c99f031212 JSON: improve some comments
* src/json.c (json_make_string, json_build_string): Document why
these functions are OK as-is.
2017-12-22 02:02:24 +01:00
Philipp Stephani
615c5cf0a6 Define helper functions only if needed
* src/json.c (JSON_HAS_ERROR_CODE): New define.
(json_parse_error): Use it.
(json_has_prefix, json_has_suffix): Define only if needed.
2017-12-20 18:36:35 +01:00
Philipp Stephani
4bb8e2879d * src/json.c (json_parse_error): Fix embarrassing bug. 2017-12-20 18:30:23 +01:00
Philipp Stephani
24efda1d28 Use Jansson's error code support if available
* src/json.c (json_parse_error): Use Jansson's error code support if
available.
2017-12-19 22:48:03 +01:00
Philipp Stephani
db4f12e93f Allow JSON parser functions to return alists
* src/json.c (Fjson_parse_string, Fjson_parse_buffer): Give these
functions a keyword argument to specify the return type for JSON
objects.
(json_to_lisp): Convert objects to alists if requested.
(json_parse_object_type): New helper function to parse keyword
arguments.

* test/src/json-tests.el (json-parse-string/object): Add a unit test.

* doc/lispref/text.texi (Parsing JSON): Document new functionality.
2017-12-19 18:20:55 +01:00
Philipp Stephani
91031a2cfd ; Add a couple of encoding-related FIXMEs to json.c
* src/json.c (json_make_string, json_build_string, json_encode)
(lisp_to_json_toplevel_1, lisp_to_json): Add FIXMEs for problematic
string error reporting.
2017-12-19 00:15:01 +01:00
Philipp Stephani
205d02c1b5 ; * src/json.c (lisp_to_json): Inline an unnecessary variable. 2017-12-19 00:13:02 +01:00
Philipp Stephani
87bd1d914e ; Add comments about potential future Jansson flags
* src/json.c (Fjson_serialize, Fjson_insert): Add comments about
flags that we might potentially add in the future.
2017-12-19 00:11:40 +01:00
Eli Zaretskii
8e13d3ab1a ; * src/json.c: Convert non-ASCII quotes to ASCII characters. 2017-12-14 19:53:58 +02:00
Eli Zaretskii
2b8a1b7692 Support dynamic loading of libjansson on MS-Windows
* src/json.c [WINDOWSNT]: Define fn_* function pointers to jansson
functions.
(json_delete) [WINDOWSNT]: A wrapper around fn_json_delete, needed
by json_decref.
(init_json_functions) [WINDOWSNT]: New function.
(Fjson_serialize, Fjson_insert, Fjson_parse_string)
(Fjson_parse_buffer) [WINDOWSNT]: Call init_json_functions if
needed, and record JSON in Vlibrary_cache.
* src/emacs.c (main): Don't call init_json on WINDOWSNT.
* src/w32fns.c (syms_of_w32fns): DEFSYM "json".

* lisp/term/w32-win.el (dynamic-library-alist): Add JSON DLL to
the list.

* configure.ac (HAVE_JSON): Empty JSON_LIBS for MinGW.

* nt/INSTALL.W64:
* nt/INSTALL: Add information about libjansson.
2017-12-10 18:36:37 +02:00
Philipp Stephani
ab203e36d5 Implement native JSON support using Jansson
* configure.ac: New option --with-json.

* src/json.c (Fjson_serialize, Fjson_insert, Fjson_parse_string)
(Fjson_parse_buffer): New defuns.
(json_malloc, json_free, json_has_prefix, json_has_suffix)
(json_make_string, json_build_string, json_encode)
(json_out_of_memory, json_parse_error)
(json_release_object, check_string_without_embedded_nulls, json_check)
(lisp_to_json, lisp_to_json_toplevel, lisp_to_json_toplevel_1)
(json_insert, json_insert_callback, json_to_lisp)
(json_read_buffer_callback, Fjson_parse_buffer, define_error): New
helper functions.
(init_json, syms_of_json): New file.

* src/lisp.h: Declaration for init_json and syms_of_json.

* src/emacs.c (main): Enable JSON functions.

* src/eval.c (internal_catch_all, internal_catch_all_1): New helper
functions to catch all signals.
(syms_of_eval): Add uninterned symbol to signify out of memory.

* src/Makefile.in (JSON_LIBS, JSON_CFLAGS, JSON_OBJ, EMACS_CFLAGS)
(base_obj, LIBES): Compile json.c if --with-json is enabled.

* test/src/json-tests.el (json-serialize/roundtrip)
(json-serialize/object, json-parse-string/object)
(json-parse-string/string, json-serialize/string)
(json-parse-string/incomplete, json-parse-string/trailing)
(json-parse-buffer/incomplete, json-parse-buffer/trailing): New unit
tests.

* doc/lispref/text.texi (Parsing JSON): New manual section.
2017-12-10 13:49:08 +01:00
Philipp Stephani
0925a20e0a Revert "Implement native JSON support using Jansson"
This reverts commit cb99cf5a99.
2017-09-18 18:00:45 +02:00
Philipp Stephani
cb99cf5a99 Implement native JSON support using Jansson
* configure.ac: New option --with-json.

* src/json.c (Fjson_serialize, Fjson_insert, Fjson_parse_string)
(Fjson_parse_buffer): New defuns.
(json_out_of_memory, json_parse_error, json_release_object)
(check_string_without_embedded_nulls, json_check, lisp_to_json)
(json_insert, json_insert_callback, json_to_lisp)
(json_read_buffer_callback, Fjson_parse_buffer, define_error): New
helper function.
(syms_of_json): New file.

* src/lisp.h: Declaration for syms_of_json.

* src/emacs.c (main): Enable JSON functions.

* src/Makefile.in (JSON_LIBS, JSON_CFLAGS, JSON_OBJ, EMACS_CFLAGS)
(base_obj, LIBES): Compile json.c if --with-json is enabled.

* test/src/json-tests.el (json-serialize/roundtrip)
(json-serialize/object, json-parse-string/object): New unit tests.
2017-09-18 16:34:47 +02:00