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