@@ -279,7 +279,8 @@ WARN_UNUSED static really_inline error_code parse_structurals(dom_parser_impleme
279279 // Read first value
280280 //
281281 {
282- switch (parser.advance_char ()) {
282+ const uint8_t *value = parser.advance ();
283+ switch (*value) {
283284 case ' {' : {
284285 if (parser.empty_object ()) { goto document_end; }
285286 SIMDJSON_TRY ( parser.start_object () );
@@ -297,14 +298,14 @@ WARN_UNUSED static really_inline error_code parse_structurals(dom_parser_impleme
297298 }
298299 goto array_begin;
299300 }
300- case ' "' : SIMDJSON_TRY ( parser.parse_string (parser. current () ) ); goto document_end;
301- case ' t' : SIMDJSON_TRY ( parser.parse_root_true_atom (parser. current () ) ); goto document_end;
302- case ' f' : SIMDJSON_TRY ( parser.parse_root_false_atom (parser. current () ) ); goto document_end;
303- case ' n' : SIMDJSON_TRY ( parser.parse_root_null_atom (parser. current () ) ); goto document_end;
301+ case ' "' : SIMDJSON_TRY ( parser.parse_string (value ) ); goto document_end;
302+ case ' t' : SIMDJSON_TRY ( parser.parse_root_true_atom (value ) ); goto document_end;
303+ case ' f' : SIMDJSON_TRY ( parser.parse_root_false_atom (value ) ); goto document_end;
304+ case ' n' : SIMDJSON_TRY ( parser.parse_root_null_atom (value ) ); goto document_end;
304305 case ' -' :
305306 case ' 0' : case ' 1' : case ' 2' : case ' 3' : case ' 4' :
306307 case ' 5' : case ' 6' : case ' 7' : case ' 8' : case ' 9' :
307- SIMDJSON_TRY ( parser.parse_root_number (parser. current () ) ); goto document_end;
308+ SIMDJSON_TRY ( parser.parse_root_number (value ) ); goto document_end;
308309 default :
309310 parser.log_error (" Document starts with a non-value character" );
310311 return TAPE_ERROR;
@@ -327,7 +328,8 @@ object_begin: {
327328
328329object_field: {
329330 if (unlikely ( parser.advance_char () != ' :' )) { parser.log_error (" Missing colon after key in object" ); return TAPE_ERROR; }
330- switch (parser.advance_char ()) {
331+ const uint8_t *value = parser.advance ();
332+ switch (*value) {
331333 case ' {' : {
332334 if (parser.empty_object ()) { break ; };
333335 SIMDJSON_TRY ( parser.start_object () );
@@ -338,14 +340,14 @@ object_field: {
338340 SIMDJSON_TRY ( parser.start_array () );
339341 goto array_begin;
340342 }
341- case ' "' : SIMDJSON_TRY ( parser.parse_string (parser. current () ) ); break ;
342- case ' t' : SIMDJSON_TRY ( parser.parse_true_atom (parser. current () ) ); break ;
343- case ' f' : SIMDJSON_TRY ( parser.parse_false_atom (parser. current () ) ); break ;
344- case ' n' : SIMDJSON_TRY ( parser.parse_null_atom (parser. current () ) ); break ;
343+ case ' "' : SIMDJSON_TRY ( parser.parse_string (value ) ); break ;
344+ case ' t' : SIMDJSON_TRY ( parser.parse_true_atom (value ) ); break ;
345+ case ' f' : SIMDJSON_TRY ( parser.parse_false_atom (value ) ); break ;
346+ case ' n' : SIMDJSON_TRY ( parser.parse_null_atom (value ) ); break ;
345347 case ' -' :
346348 case ' 0' : case ' 1' : case ' 2' : case ' 3' : case ' 4' :
347349 case ' 5' : case ' 6' : case ' 7' : case ' 8' : case ' 9' :
348- SIMDJSON_TRY ( parser.parse_number (parser. current () ) ); break ;
350+ SIMDJSON_TRY ( parser.parse_number (value ) ); break ;
349351 default :
350352 parser.log_error (" Non-value found when value was expected!" );
351353 return TAPE_ERROR;
@@ -384,7 +386,8 @@ array_begin: {
384386} // array_begin:
385387
386388array_value: {
387- switch (parser.advance_char ()) {
389+ const uint8_t *value = parser.advance ();
390+ switch (*value) {
388391 case ' {' : {
389392 if (parser.empty_object ()) { break ; };
390393 SIMDJSON_TRY ( parser.start_object () );
@@ -395,14 +398,14 @@ array_value: {
395398 SIMDJSON_TRY ( parser.start_array () );
396399 goto array_begin;
397400 }
398- case ' "' : SIMDJSON_TRY ( parser.parse_string (parser. current () ) ); break ;
399- case ' t' : SIMDJSON_TRY ( parser.parse_true_atom (parser. current () ) ); break ;
400- case ' f' : SIMDJSON_TRY ( parser.parse_false_atom (parser. current () ) ); break ;
401- case ' n' : SIMDJSON_TRY ( parser.parse_null_atom (parser. current () ) ); break ;
401+ case ' "' : SIMDJSON_TRY ( parser.parse_string (value ) ); break ;
402+ case ' t' : SIMDJSON_TRY ( parser.parse_true_atom (value ) ); break ;
403+ case ' f' : SIMDJSON_TRY ( parser.parse_false_atom (value ) ); break ;
404+ case ' n' : SIMDJSON_TRY ( parser.parse_null_atom (value ) ); break ;
402405 case ' -' :
403406 case ' 0' : case ' 1' : case ' 2' : case ' 3' : case ' 4' :
404407 case ' 5' : case ' 6' : case ' 7' : case ' 8' : case ' 9' :
405- SIMDJSON_TRY ( parser.parse_number (parser. current () ) ); break ;
408+ SIMDJSON_TRY ( parser.parse_number (value ) ); break ;
406409 default :
407410 parser.log_error (" Non-value found when value was expected!" );
408411 return TAPE_ERROR;
0 commit comments