• Home
  • Raw
  • Download

Lines Matching refs:parser

24 	parser_t	*parser;  member
43 token_init(token_t *token, parser_t *parser, token_type_t token_type, in token_init() argument
45 token->parser = parser; in token_init()
55 if (!token->parser->verbose) { in token_error()
71 &token->parser->buf[token->pos], token->len); in token_error()
76 parser_init(parser_t *parser, bool verbose) { in parser_init() argument
77 parser->verbose = verbose; in parser_init()
78 parser->buf = NULL; in parser_init()
79 parser->len = 0; in parser_init()
80 parser->pos = 0; in parser_init()
81 parser->line = 1; in parser_init()
82 parser->col = 0; in parser_init()
86 parser_fini(parser_t *parser) { in parser_fini() argument
87 if (parser->buf != NULL) { in parser_fini()
88 dallocx(parser->buf, MALLOCX_TCACHE_NONE); in parser_fini()
93 parser_append(parser_t *parser, const char *str) { in parser_append() argument
95 char *buf = (parser->buf == NULL) ? mallocx(len + 1, in parser_append()
96 MALLOCX_TCACHE_NONE) : rallocx(parser->buf, parser->len + len + 1, in parser_append()
101 memcpy(&buf[parser->len], str, len + 1); in parser_append()
102 parser->buf = buf; in parser_append()
103 parser->len += len; in parser_append()
108 parser_tokenize(parser_t *parser) { in parser_tokenize() argument
139 assert_zu_le(parser->pos, parser->len, in parser_tokenize()
143 char c = parser->buf[parser->pos]; in parser_tokenize()
147 token_pos = parser->pos; in parser_tokenize()
148 token_line = parser->line; in parser_tokenize()
149 token_col = parser->col; in parser_tokenize()
197 token_init(&parser->token, parser, in parser_tokenize()
198 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
204 token_init(&parser->token, parser, in parser_tokenize()
205 TOKEN_TYPE_EOI, token_pos, parser->pos - in parser_tokenize()
215 token_init(&parser->token, parser, in parser_tokenize()
216 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
227 token_init(&parser->token, parser, in parser_tokenize()
228 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
239 token_init(&parser->token, parser, in parser_tokenize()
240 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
253 token_init(&parser->token, parser, in parser_tokenize()
254 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
258 token_init(&parser->token, parser, TOKEN_TYPE_NULL, in parser_tokenize()
259 token_pos, parser->pos - token_pos, token_line, in parser_tokenize()
269 token_init(&parser->token, parser, in parser_tokenize()
270 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
281 token_init(&parser->token, parser, in parser_tokenize()
282 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
293 token_init(&parser->token, parser, in parser_tokenize()
294 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
305 token_init(&parser->token, parser, in parser_tokenize()
306 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
319 token_init(&parser->token, parser, in parser_tokenize()
320 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
324 token_init(&parser->token, parser, in parser_tokenize()
325 TOKEN_TYPE_FALSE, token_pos, parser->pos - in parser_tokenize()
335 token_init(&parser->token, parser, in parser_tokenize()
336 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
347 token_init(&parser->token, parser, in parser_tokenize()
348 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
359 token_init(&parser->token, parser, in parser_tokenize()
360 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
373 token_init(&parser->token, parser, in parser_tokenize()
374 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
378 token_init(&parser->token, parser, TOKEN_TYPE_TRUE, in parser_tokenize()
379 token_pos, parser->pos - token_pos, token_line, in parser_tokenize()
384 token_init(&parser->token, parser, TOKEN_TYPE_LBRACKET, in parser_tokenize()
385 token_pos, parser->pos - token_pos, token_line, in parser_tokenize()
390 token_init(&parser->token, parser, TOKEN_TYPE_RBRACKET, in parser_tokenize()
391 token_pos, parser->pos - token_pos, token_line, in parser_tokenize()
396 token_init(&parser->token, parser, TOKEN_TYPE_LBRACE, in parser_tokenize()
397 token_pos, parser->pos - token_pos, token_line, in parser_tokenize()
402 token_init(&parser->token, parser, TOKEN_TYPE_RBRACE, in parser_tokenize()
403 token_pos, parser->pos - token_pos, token_line, in parser_tokenize()
408 token_init(&parser->token, parser, TOKEN_TYPE_COLON, in parser_tokenize()
409 token_pos, parser->pos - token_pos, token_line, in parser_tokenize()
414 token_init(&parser->token, parser, TOKEN_TYPE_COMMA, in parser_tokenize()
415 token_pos, parser->pos - token_pos, token_line, in parser_tokenize()
434 token_init(&parser->token, parser, in parser_tokenize()
435 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
452 token_init(&parser->token, parser, in parser_tokenize()
453 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
469 token_init(&parser->token, parser, in parser_tokenize()
470 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
486 token_init(&parser->token, parser, in parser_tokenize()
487 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
503 token_init(&parser->token, parser, in parser_tokenize()
504 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
520 token_init(&parser->token, parser, in parser_tokenize()
521 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
527 token_init(&parser->token, parser, TOKEN_TYPE_STRING, in parser_tokenize()
528 token_pos, parser->pos - token_pos, token_line, in parser_tokenize()
542 token_init(&parser->token, parser, in parser_tokenize()
543 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
554 token_init(&parser->token, parser, in parser_tokenize()
555 TOKEN_TYPE_NUMBER, token_pos, parser->pos - in parser_tokenize()
570 token_init(&parser->token, parser, in parser_tokenize()
571 TOKEN_TYPE_NUMBER, token_pos, parser->pos - in parser_tokenize()
584 token_init(&parser->token, parser, in parser_tokenize()
585 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
599 token_init(&parser->token, parser, in parser_tokenize()
600 TOKEN_TYPE_NUMBER, token_pos, parser->pos - in parser_tokenize()
616 token_init(&parser->token, parser, in parser_tokenize()
617 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
629 token_init(&parser->token, parser, in parser_tokenize()
630 TOKEN_TYPE_ERROR, token_pos, parser->pos + 1 in parser_tokenize()
641 token_init(&parser->token, parser, in parser_tokenize()
642 TOKEN_TYPE_NUMBER, token_pos, parser->pos - in parser_tokenize()
654 parser->line++; in parser_tokenize()
655 parser->col = 0; in parser_tokenize()
657 parser->col++; in parser_tokenize()
659 parser->pos++; in parser_tokenize()
665 static bool parser_parse_array(parser_t *parser);
666 static bool parser_parse_object(parser_t *parser);
669 parser_parse_value(parser_t *parser) { in parser_parse_value() argument
670 switch (parser->token.token_type) { in parser_parse_value()
678 return parser_parse_object(parser); in parser_parse_value()
680 return parser_parse_array(parser); in parser_parse_value()
688 parser_parse_pair(parser_t *parser) { in parser_parse_pair() argument
689 assert_d_eq(parser->token.token_type, TOKEN_TYPE_STRING, in parser_parse_pair()
691 if (parser_tokenize(parser)) { in parser_parse_pair()
694 switch (parser->token.token_type) { in parser_parse_pair()
696 if (parser_tokenize(parser)) { in parser_parse_pair()
699 return parser_parse_value(parser); in parser_parse_pair()
706 parser_parse_values(parser_t *parser) { in parser_parse_values() argument
707 if (parser_parse_value(parser)) { in parser_parse_values()
712 if (parser_tokenize(parser)) { in parser_parse_values()
715 switch (parser->token.token_type) { in parser_parse_values()
717 if (parser_tokenize(parser)) { in parser_parse_values()
720 if (parser_parse_value(parser)) { in parser_parse_values()
733 parser_parse_array(parser_t *parser) { in parser_parse_array() argument
734 assert_d_eq(parser->token.token_type, TOKEN_TYPE_LBRACKET, in parser_parse_array()
736 if (parser_tokenize(parser)) { in parser_parse_array()
739 switch (parser->token.token_type) { in parser_parse_array()
743 return parser_parse_values(parser); in parser_parse_array()
749 parser_parse_pairs(parser_t *parser) { in parser_parse_pairs() argument
750 assert_d_eq(parser->token.token_type, TOKEN_TYPE_STRING, in parser_parse_pairs()
752 if (parser_parse_pair(parser)) { in parser_parse_pairs()
757 if (parser_tokenize(parser)) { in parser_parse_pairs()
760 switch (parser->token.token_type) { in parser_parse_pairs()
762 if (parser_tokenize(parser)) { in parser_parse_pairs()
765 switch (parser->token.token_type) { in parser_parse_pairs()
767 if (parser_parse_pair(parser)) { in parser_parse_pairs()
784 parser_parse_object(parser_t *parser) { in parser_parse_object() argument
785 assert_d_eq(parser->token.token_type, TOKEN_TYPE_LBRACE, in parser_parse_object()
787 if (parser_tokenize(parser)) { in parser_parse_object()
790 switch (parser->token.token_type) { in parser_parse_object()
792 return parser_parse_pairs(parser); in parser_parse_object()
802 parser_parse(parser_t *parser) { in parser_parse() argument
803 if (parser_tokenize(parser)) { in parser_parse()
806 if (parser_parse_value(parser)) { in parser_parse()
810 if (parser_tokenize(parser)) { in parser_parse()
813 switch (parser->token.token_type) { in parser_parse()
822 token_error(&parser->token); in parser_parse()
900 parser_t parser; in TEST_BEGIN() local
901 parser_init(&parser, false); in TEST_BEGIN()
902 assert_false(parser_append(&parser, input), in TEST_BEGIN()
904 assert_true(parser_parse(&parser), in TEST_BEGIN()
906 parser_fini(&parser); in TEST_BEGIN()
911 parser_t parser; in TEST_BEGIN() local
912 parser_init(&parser, true); in TEST_BEGIN()
913 assert_false(parser_append(&parser, input), in TEST_BEGIN()
915 assert_false(parser_parse(&parser), in TEST_BEGIN()
917 parser_fini(&parser); in TEST_BEGIN()
924 parser_t *parser = (parser_t *)opaque; in write_cb() local
925 if (parser_append(parser, str)) { in write_cb()
982 parser_t parser; in TEST_BEGIN() local
984 parser_init(&parser, true); in TEST_BEGIN()
985 malloc_stats_print(write_cb, (void *)&parser, opts[j]); in TEST_BEGIN()
986 assert_false(parser_parse(&parser), in TEST_BEGIN()
988 parser_fini(&parser); in TEST_BEGIN()