@@ -55,9 +55,11 @@ STATIC mp_obj_t mod_ujson_loads(mp_obj_t obj) {
5555 const char * top = s + len ;
5656 vstr_t vstr ;
5757 vstr_init (& vstr , 8 );
58- mp_obj_list_t * stack = NULL ;
58+ mp_obj_list_t stack ;
59+ stack .len = 0 ;
60+ stack .items = NULL ;
5961 mp_obj_t stack_top = MP_OBJ_NULL ;
60- mp_obj_type_t * stack_top_type = NULL ;
62+ mp_obj_type_t * stack_top_type = NULL ;
6163 mp_obj_t stack_key = MP_OBJ_NULL ;
6264 for (;;) {
6365 cont :
@@ -104,11 +106,11 @@ STATIC mp_obj_t mod_ujson_loads(mp_obj_t obj) {
104106 s ++ ;
105107 c = * s ;
106108 switch (c ) {
107- case 'b' : c = '\b' ; break ;
108- case 'f' : c = '\f' ; break ;
109- case 'n' : c = '\n' ; break ;
110- case 'r' : c = '\r' ; break ;
111- case 't' : c = '\t' ; break ;
109+ case 'b' : c = 0x08 ; break ;
110+ case 'f' : c = 0x0c ; break ;
111+ case 'n' : c = 0x0a ; break ;
112+ case 'r' : c = 0x0d ; break ;
113+ case 't' : c = 0x09 ; break ;
112114 case 'u' : if (s + 4 >= top ) { goto fail ; } else { assert (0 ); } //vstr_add_char(&vstr, s[0]
113115 }
114116 }
@@ -158,12 +160,12 @@ STATIC mp_obj_t mod_ujson_loads(mp_obj_t obj) {
158160 // no object at all
159161 goto fail ;
160162 }
161- if (stack == NULL || stack -> len == 0 ) {
163+ if (stack . len == 0 ) {
162164 // finished; compound object
163165 goto success ;
164166 }
165- stack -> len -= 1 ;
166- stack_top = stack -> items [stack -> len ];
167+ stack . len -= 1 ;
168+ stack_top = stack . items [stack . len ];
167169 stack_top_type = mp_obj_get_type (stack_top );
168170 goto cont ;
169171 }
@@ -193,10 +195,11 @@ STATIC mp_obj_t mod_ujson_loads(mp_obj_t obj) {
193195 }
194196 }
195197 if (enter ) {
196- if (stack == NULL ) {
197- stack = mp_obj_new_list (1 , & stack_top );
198+ if (stack .items == NULL ) {
199+ mp_obj_list_init (& stack , 1 );
200+ stack .items [0 ] = stack_top ;
198201 } else {
199- mp_obj_list_append (stack , stack_top );
202+ mp_obj_list_append (& stack , stack_top );
200203 }
201204 stack_top = next ;
202205 stack_top_type = mp_obj_get_type (stack_top );
@@ -212,7 +215,7 @@ STATIC mp_obj_t mod_ujson_loads(mp_obj_t obj) {
212215 // unexpected chars
213216 goto fail ;
214217 }
215- if (stack != NULL && stack -> len != 0 ) {
218+ if (stack . len != 0 ) {
216219 goto fail ;
217220 }
218221 vstr_clear (& vstr );
0 commit comments