commit 3495c69
default
·
2023-08-21 07:32:05 +0000 UTC
parent cf0aa96
Backport from xs.
2 files changed,
+21,
-35
+20,
-34
1@@ -323,28 +323,24 @@ static xs_val *_xs_json_load_lexer(FILE *f, js_type *t)
2 }
3
4
5-static xs_list *_xs_json_load_array(FILE *f, js_type *t);
6-static xs_dict *_xs_json_load_object(FILE *f, js_type *t);
7+static xs_list *_xs_json_load_array(FILE *f);
8+static xs_dict *_xs_json_load_object(FILE *f);
9
10-static xs_list *_xs_json_load_array(FILE *f, js_type *t)
11+static xs_list *_xs_json_load_array(FILE *f)
12 /* parses a JSON array */
13 {
14 xs_list *l = xs_list_new();
15 int c = 0;
16
17- *t = JS_INCOMPLETE;
18-
19- while (*t == JS_INCOMPLETE) {
20+ for (;;) {
21 js_type tt;
22 xs *v = _xs_json_load_lexer(f, &tt);
23
24 if (tt == JS_ERROR)
25 break;
26
27- if (tt == JS_CBRACK) {
28- *t = JS_ARRAY;
29- break;
30- }
31+ if (tt == JS_CBRACK)
32+ return l;
33
34 if (c > 0) {
35 if (tt == JS_COMMA)
36@@ -354,26 +350,23 @@ static xs_list *_xs_json_load_array(FILE *f, js_type *t)
37 }
38
39 if (tt == JS_OBRACK)
40- v = _xs_json_load_array(f, &tt);
41+ v = _xs_json_load_array(f);
42 else
43 if (tt == JS_OCURLY)
44- v = _xs_json_load_object(f, &tt);
45+ v = _xs_json_load_object(f);
46
47- if (tt < JS_VALUE)
48+ if (v == NULL)
49 break;
50
51 l = xs_list_append(l, v);
52 c++;
53 }
54
55- if (*t == JS_INCOMPLETE || *t == JS_ERROR)
56- l = xs_free(l);
57-
58- return l;
59+ return xs_free(l);
60 }
61
62
63-static xs_dict *_xs_json_load_object(FILE *f, js_type *t)
64+static xs_dict *_xs_json_load_object(FILE *f)
65 /* parses a JSON object */
66 {
67 xs_dict *d = xs_dict_new();
68@@ -381,9 +374,7 @@ static xs_dict *_xs_json_load_object(FILE *f, js_type *t)
69
70 d = xs_dict_new();
71
72- *t = JS_INCOMPLETE;
73-
74- while (*t == JS_INCOMPLETE) {
75+ for (;;) {
76 js_type tt;
77 xs *k = _xs_json_load_lexer(f, &tt);
78 xs *v = NULL;
79@@ -391,10 +382,8 @@ static xs_dict *_xs_json_load_object(FILE *f, js_type *t)
80 if (tt == JS_ERROR)
81 break;
82
83- if (tt == JS_CCURLY) {
84- *t = JS_OBJECT;
85- break;
86- }
87+ if (tt == JS_CCURLY)
88+ return d;
89
90 if (c > 0) {
91 if (tt == JS_COMMA)
92@@ -414,22 +403,19 @@ static xs_dict *_xs_json_load_object(FILE *f, js_type *t)
93 v = _xs_json_load_lexer(f, &tt);
94
95 if (tt == JS_OBRACK)
96- v = _xs_json_load_array(f, &tt);
97+ v = _xs_json_load_array(f);
98 else
99 if (tt == JS_OCURLY)
100- v = _xs_json_load_object(f, &tt);
101+ v = _xs_json_load_object(f);
102
103- if (tt < JS_VALUE)
104+ if (v == NULL)
105 break;
106
107 d = xs_dict_append(d, k, v);
108 c++;
109 }
110
111- if (*t == JS_INCOMPLETE || *t == JS_ERROR)
112- d = xs_free(d);
113-
114- return d;
115+ return xs_free(d);
116 }
117
118
119@@ -457,10 +443,10 @@ xs_val *xs_json_load(FILE *f)
120 xs_free(_xs_json_load_lexer(f, &t));
121
122 if (t == JS_OBRACK)
123- v = _xs_json_load_array(f, &t);
124+ v = _xs_json_load_array(f);
125 else
126 if (t == JS_OCURLY)
127- v = _xs_json_load_object(f, &t);
128+ v = _xs_json_load_object(f);
129
130 return v;
131 }
+1,
-1
1@@ -1 +1 @@
2-/* ca82377df89097bd3965875fd63286d6c7af26eb */
3+/* f42504297420abef44904644524207f8a1440494 */