Skip to content

Commit e6896ee

Browse files
committed
Keep current JSON after checking primitive type
1 parent e6762f9 commit e6896ee

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

src/generic/stage2/structural_parser.h

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

328329
object_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

386388
array_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

Comments
 (0)