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 */