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