@@ -279,7 +279,8 @@ WARN_UNUSED static really_inline error_code parse_structurals(dom_parser_impleme
279
279
// Read first value
280
280
//
281
281
{
282
- switch (parser.advance_char ()) {
282
+ const uint8_t *value = parser.advance ();
283
+ switch (*value) {
283
284
case ' {' : {
284
285
if (parser.empty_object ()) { goto document_end; }
285
286
SIMDJSON_TRY ( parser.start_object () );
@@ -297,14 +298,14 @@ WARN_UNUSED static really_inline error_code parse_structurals(dom_parser_impleme
297
298
}
298
299
goto array_begin;
299
300
}
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;
304
305
case ' -' :
305
306
case ' 0' : case ' 1' : case ' 2' : case ' 3' : case ' 4' :
306
307
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;
308
309
default :
309
310
parser.log_error (" Document starts with a non-value character" );
310
311
return TAPE_ERROR;
@@ -327,7 +328,8 @@ object_begin: {
327
328
328
329
object_field: {
329
330
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) {
331
333
case ' {' : {
332
334
if (parser.empty_object ()) { break ; };
333
335
SIMDJSON_TRY ( parser.start_object () );
@@ -338,14 +340,14 @@ object_field: {
338
340
SIMDJSON_TRY ( parser.start_array () );
339
341
goto array_begin;
340
342
}
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 ;
345
347
case ' -' :
346
348
case ' 0' : case ' 1' : case ' 2' : case ' 3' : case ' 4' :
347
349
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 ;
349
351
default :
350
352
parser.log_error (" Non-value found when value was expected!" );
351
353
return TAPE_ERROR;
@@ -384,7 +386,8 @@ array_begin: {
384
386
} // array_begin:
385
387
386
388
array_value: {
387
- switch (parser.advance_char ()) {
389
+ const uint8_t *value = parser.advance ();
390
+ switch (*value) {
388
391
case ' {' : {
389
392
if (parser.empty_object ()) { break ; };
390
393
SIMDJSON_TRY ( parser.start_object () );
@@ -395,14 +398,14 @@ array_value: {
395
398
SIMDJSON_TRY ( parser.start_array () );
396
399
goto array_begin;
397
400
}
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 ;
402
405
case ' -' :
403
406
case ' 0' : case ' 1' : case ' 2' : case ' 3' : case ' 4' :
404
407
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 ;
406
409
default :
407
410
parser.log_error (" Non-value found when value was expected!" );
408
411
return TAPE_ERROR;
0 commit comments