commit fd47743
default
·
2023-02-28 10:22:52 +0000 UTC
parent ec48ec3
Backport from xs.
2 files changed,
+18,
-16
+17,
-15
1@@ -4,7 +4,7 @@
2
3 #define _XS_JSON_H
4
5-xs_str *xs_json_dumps_pp(xs_val *data, int indent);
6+xs_str *xs_json_dumps_pp(const xs_val *data, int indent);
7 #define xs_json_dumps(data) xs_json_dumps_pp(data, 0)
8 xs_val *xs_json_loads(const xs_str *json);
9
10@@ -15,7 +15,7 @@ xs_val *xs_json_loads(const xs_str *json);
11
12 /** JSON dumps **/
13
14-d_char *_xs_json_dumps_str(d_char *s, char *data)
15+static xs_str *_xs_json_dumps_str(xs_str *s, const char *data)
16 /* dumps a string in JSON format */
17 {
18 unsigned char c;
19@@ -55,7 +55,7 @@ d_char *_xs_json_dumps_str(d_char *s, char *data)
20 }
21
22
23-d_char *_xs_json_indent(d_char *s, int level, int indent)
24+static xs_str *_xs_json_indent(xs_str *s, int level, int indent)
25 /* adds indentation */
26 {
27 if (indent) {
28@@ -71,11 +71,12 @@ d_char *_xs_json_indent(d_char *s, int level, int indent)
29 }
30
31
32-d_char *_xs_json_dumps(d_char *s, char *data, int level, int indent)
33+static xs_str *_xs_json_dumps(xs_str *s, const xs_val *s_data, int level, int indent)
34 /* dumps partial data as JSON */
35 {
36- char *k, *v;
37 int c = 0;
38+ xs_val *v;
39+ xs_val *data = (xs_val *)s_data;
40
41 switch (xs_type(data)) {
42 case XSTYPE_NULL:
43@@ -115,6 +116,7 @@ d_char *_xs_json_dumps(d_char *s, char *data, int level, int indent)
44 case XSTYPE_DICT:
45 s = xs_str_cat(s, "{");
46
47+ xs_str *k;
48 while (xs_dict_iter(&data, &k, &v)) {
49 if (c != 0)
50 s = xs_str_cat(s, ",");
51@@ -148,7 +150,7 @@ d_char *_xs_json_dumps(d_char *s, char *data, int level, int indent)
52 }
53
54
55-xs_str *xs_json_dumps_pp(xs_val *data, int indent)
56+xs_str *xs_json_dumps_pp(const xs_val *data, int indent)
57 /* dumps a piece of data as JSON */
58 {
59 xstype t = xs_type(data);
60@@ -188,11 +190,11 @@ typedef enum {
61 } js_type;
62
63
64-d_char *_xs_json_loads_lexer(const char **json, js_type *t)
65+static xs_val *_xs_json_loads_lexer(const char **json, js_type *t)
66 {
67 char c;
68 const char *s = *json;
69- d_char *v = NULL;
70+ xs_val *v = NULL;
71
72 /* skip blanks */
73 while (*s == L' ' || *s == L'\t' || *s == L'\n' || *s == L'\r')
74@@ -324,10 +326,10 @@ d_char *_xs_json_loads_lexer(const char **json, js_type *t)
75 }
76
77
78-d_char *_xs_json_loads_array(const char **json, js_type *t);
79-d_char *_xs_json_loads_object(const char **json, js_type *t);
80+static xs_list *_xs_json_loads_array(const char **json, js_type *t);
81+static xs_dict *_xs_json_loads_object(const char **json, js_type *t);
82
83-d_char *_xs_json_loads_value(const char **json, js_type *t, d_char *v)
84+static xs_val *_xs_json_loads_value(const char **json, js_type *t, xs_val *v)
85 /* parses a JSON value */
86 {
87 if (*t == JS_OBRACK)
88@@ -345,12 +347,12 @@ d_char *_xs_json_loads_value(const char **json, js_type *t, d_char *v)
89 }
90
91
92-d_char *_xs_json_loads_array(const char **json, js_type *t)
93+static xs_list *_xs_json_loads_array(const char **json, js_type *t)
94 /* parses a JSON array */
95 {
96 const char *s = *json;
97 xs *v;
98- d_char *l;
99+ xs_list *l;
100 js_type tt;
101
102 l = xs_list_new();
103@@ -401,12 +403,12 @@ d_char *_xs_json_loads_array(const char **json, js_type *t)
104 }
105
106
107-d_char *_xs_json_loads_object(const char **json, js_type *t)
108+static xs_dict *_xs_json_loads_object(const char **json, js_type *t)
109 /* parses a JSON object */
110 {
111 const char *s = *json;
112 xs *k1;
113- d_char *d;
114+ xs_dict *d;
115 js_type tt;
116
117 d = xs_dict_new();
+1,
-1
1@@ -1 +1 @@
2-/* a2221e4e87e4c2e0a92a4934f88e78ca7e8e7f7f */
3+/* 576198d1ed0f3309a9d09cb674c7ce1bf5c12737 */