| 490 | static int jl_parse_value(jl_parser_t *parser, unsigned depth, size_t *start_out, size_t *end_out); |
| 491 | |
| 492 | static int jl_parse_object(jl_parser_t *parser, unsigned depth) { |
| 493 | if (depth >= JL_MAX_DEPTH || parser->pos >= parser->length || |
| 494 | parser->text[parser->pos] != '{') { |
| 495 | return -1; |
| 496 | } |
| 497 | parser->pos++; |
| 498 | if (jl_skip_trivia(parser) != 0) { |
| 499 | return -1; |
| 500 | } |
| 501 | if (parser->pos < parser->length && parser->text[parser->pos] == '}') { |
| 502 | parser->pos++; |
| 503 | return 0; |
| 504 | } |
| 505 | |
| 506 | while (parser->pos < parser->length) { |
| 507 | if (jl_parse_key(parser, NULL, NULL) != 0 || jl_skip_trivia(parser) != 0 || |
| 508 | parser->pos >= parser->length || parser->text[parser->pos] != ':') { |
| 509 | return -1; |
| 510 | } |
| 511 | parser->pos++; |
| 512 | if (jl_skip_trivia(parser) != 0 || jl_parse_value(parser, depth + 1U, NULL, NULL) != 0 || |
| 513 | jl_skip_trivia(parser) != 0 || parser->pos >= parser->length) { |
| 514 | return -1; |
| 515 | } |
| 516 | if (parser->text[parser->pos] == '}') { |
| 517 | parser->pos++; |
| 518 | return 0; |
| 519 | } |
| 520 | if (parser->text[parser->pos] != ',') { |
| 521 | return -1; |
| 522 | } |
| 523 | parser->pos++; |
| 524 | if (jl_skip_trivia(parser) != 0 || parser->pos >= parser->length) { |
| 525 | return -1; |
| 526 | } |
| 527 | if (parser->text[parser->pos] == '}') { |
| 528 | if (parser->strict) { |
| 529 | return -1; |
| 530 | } |
| 531 | parser->pos++; |
| 532 | return 0; |
| 533 | } |
| 534 | } |
| 535 | return -1; |
| 536 | } |
| 537 | |
| 538 | static int jl_parse_array(jl_parser_t *parser, unsigned depth) { |
| 539 | if (depth >= JL_MAX_DEPTH || parser->pos >= parser->length || |
no test coverage detected