commit 238c5c5

grunfink  ·  2025-06-24 10:59:02 +0000 UTC
parent f7d398e
Some JSON code tweaks.
2 files changed,  +23, -18
+22, -17
 1@@ -8,6 +8,7 @@
 2 #define MAX_JSON_DEPTH 32
 3 #endif
 4 
 5+void xs_json_dump_value(const xs_val *data, int level, int indent, FILE *f);
 6 int xs_json_dump(const xs_val *data, int indent, FILE *f);
 7 xs_str *xs_json_dumps(const xs_val *data, int indent);
 8 
 9@@ -77,7 +78,7 @@ static void _xs_json_indent(int level, int indent, FILE *f)
10 }
11 
12 
13-static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f)
14+void xs_json_dump_value(const xs_val *data, int level, int indent, FILE *f)
15 /* dumps partial data as JSON */
16 {
17     int c = 0;
18@@ -108,7 +109,7 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f)
19                 fputc(',', f);
20 
21             _xs_json_indent(level + 1, indent, f);
22-            _xs_json_dump(v, level + 1, indent, f);
23+            xs_json_dump_value(v, level + 1, indent, f);
24 
25             c++;
26         }
27@@ -135,7 +136,7 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f)
28             if (indent)
29                 fputc(' ', f);
30 
31-            _xs_json_dump(v, level + 1, indent, f);
32+            xs_json_dump_value(v, level + 1, indent, f);
33 
34             c++;
35         }
36@@ -154,6 +155,20 @@ static void _xs_json_dump(const xs_val *data, int level, int indent, FILE *f)
37 }
38 
39 
40+int xs_json_dump(const xs_val *data, int indent, FILE *f)
41+/* dumps data into a file as JSON */
42+{
43+    xstype t = xs_type(data);
44+
45+    if (t == XSTYPE_LIST || t == XSTYPE_DICT) {
46+        xs_json_dump_value(data, 0, indent, f);
47+        return 1;
48+    }
49+
50+    return 0;
51+}
52+
53+
54 xs_str *xs_json_dumps(const xs_val *data, int indent)
55 /* dumps data as a JSON string */
56 {
57@@ -173,20 +188,6 @@ xs_str *xs_json_dumps(const xs_val *data, int indent)
58 }
59 
60 
61-int xs_json_dump(const xs_val *data, int indent, FILE *f)
62-/* dumps data into a file as JSON */
63-{
64-    xstype t = xs_type(data);
65-
66-    if (t == XSTYPE_LIST || t == XSTYPE_DICT) {
67-        _xs_json_dump(data, 0, indent, f);
68-        return 1;
69-    }
70-
71-    return 0;
72-}
73-
74-
75 /** JSON loads **/
76 
77 typedef enum {
78@@ -370,6 +371,8 @@ int xs_json_load_array_iter(FILE *f, xs_val **value, xstype *pt, int *c)
79         else
80             return -1;
81     }
82+    else
83+        *pt = xs_type(*value);
84 
85     *c = *c + 1;
86 
87@@ -466,6 +469,8 @@ int xs_json_load_object_iter(FILE *f, xs_str **key, xs_val **value, xstype *pt,
88         else
89             return -1;
90     }
91+    else
92+        *pt = xs_type(*value);
93 
94     *c = *c + 1;
95 
+1, -1
1@@ -1 +1 @@
2-/* 851c21892c8df1d8f05ae95eaa4a5913e852653b 2025-06-21T17:58:11+02:00 */
3+/* a32c0d513ae24ad28ffc5c6c2c1cde75bb758e09 2025-06-23T17:43:10+02:00 */