Lines Matching refs:ctxt

52 static QObject *parse_value(JSONParserContext *ctxt);
57 static void G_GNUC_PRINTF(3, 4) parse_error(JSONParserContext *ctxt, in parse_error() argument
63 if (ctxt->err) { in parse_error()
69 error_setg(&ctxt->err, "JSON parse error, %s", message); in parse_error()
129 static QString *parse_string(JSONParserContext *ctxt, JSONToken *token) in parse_string() argument
197 parse_error(ctxt, token, in parse_string()
205 parse_error(ctxt, token, "invalid escape sequence in string"); in parse_string()
210 if (ctxt->ap) { in parse_string()
212 parse_error(ctxt, token, "can't interpolate into string"); in parse_string()
221 parse_error(ctxt, token, "invalid UTF-8 sequence in string"); in parse_string()
242 static JSONToken *parser_context_pop_token(JSONParserContext *ctxt) in parser_context_pop_token() argument
244 g_free(ctxt->current); in parser_context_pop_token()
245 ctxt->current = g_queue_pop_head(ctxt->buf); in parser_context_pop_token()
246 return ctxt->current; in parser_context_pop_token()
249 static JSONToken *parser_context_peek_token(JSONParserContext *ctxt) in parser_context_peek_token() argument
251 return g_queue_peek_head(ctxt->buf); in parser_context_peek_token()
257 static int parse_pair(JSONParserContext *ctxt, QDict *dict) in parse_pair() argument
264 peek = parser_context_peek_token(ctxt); in parse_pair()
266 parse_error(ctxt, NULL, "premature EOI"); in parse_pair()
270 key_obj = parse_value(ctxt); in parse_pair()
273 parse_error(ctxt, peek, "key is not a string in object"); in parse_pair()
277 token = parser_context_pop_token(ctxt); in parse_pair()
279 parse_error(ctxt, NULL, "premature EOI"); in parse_pair()
284 parse_error(ctxt, token, "missing : in object pair"); in parse_pair()
288 value = parse_value(ctxt); in parse_pair()
290 parse_error(ctxt, token, "Missing value in dict"); in parse_pair()
295 parse_error(ctxt, token, "duplicate key"); in parse_pair()
309 static QObject *parse_object(JSONParserContext *ctxt) in parse_object() argument
314 token = parser_context_pop_token(ctxt); in parse_object()
319 peek = parser_context_peek_token(ctxt); in parse_object()
321 parse_error(ctxt, NULL, "premature EOI"); in parse_object()
326 if (parse_pair(ctxt, dict) == -1) { in parse_object()
330 token = parser_context_pop_token(ctxt); in parse_object()
332 parse_error(ctxt, NULL, "premature EOI"); in parse_object()
338 parse_error(ctxt, token, "expected separator in dict"); in parse_object()
342 if (parse_pair(ctxt, dict) == -1) { in parse_object()
346 token = parser_context_pop_token(ctxt); in parse_object()
348 parse_error(ctxt, NULL, "premature EOI"); in parse_object()
353 (void)parser_context_pop_token(ctxt); in parse_object()
363 static QObject *parse_array(JSONParserContext *ctxt) in parse_array() argument
368 token = parser_context_pop_token(ctxt); in parse_array()
373 peek = parser_context_peek_token(ctxt); in parse_array()
375 parse_error(ctxt, NULL, "premature EOI"); in parse_array()
382 obj = parse_value(ctxt); in parse_array()
384 parse_error(ctxt, token, "expecting value"); in parse_array()
390 token = parser_context_pop_token(ctxt); in parse_array()
392 parse_error(ctxt, NULL, "premature EOI"); in parse_array()
398 parse_error(ctxt, token, "expected separator in list"); in parse_array()
402 obj = parse_value(ctxt); in parse_array()
404 parse_error(ctxt, token, "expecting value"); in parse_array()
410 token = parser_context_pop_token(ctxt); in parse_array()
412 parse_error(ctxt, NULL, "premature EOI"); in parse_array()
417 (void)parser_context_pop_token(ctxt); in parse_array()
427 static QObject *parse_keyword(JSONParserContext *ctxt) in parse_keyword() argument
431 token = parser_context_pop_token(ctxt); in parse_keyword()
441 parse_error(ctxt, token, "invalid keyword '%s'", token->str); in parse_keyword()
445 static QObject *parse_interpolation(JSONParserContext *ctxt) in parse_interpolation() argument
449 token = parser_context_pop_token(ctxt); in parse_interpolation()
453 return va_arg(*ctxt->ap, QObject *); in parse_interpolation()
455 return QOBJECT(qbool_from_bool(va_arg(*ctxt->ap, int))); in parse_interpolation()
457 return QOBJECT(qnum_from_int(va_arg(*ctxt->ap, int))); in parse_interpolation()
459 return QOBJECT(qnum_from_int(va_arg(*ctxt->ap, long))); in parse_interpolation()
461 return QOBJECT(qnum_from_int(va_arg(*ctxt->ap, long long))); in parse_interpolation()
463 return QOBJECT(qnum_from_int(va_arg(*ctxt->ap, int64_t))); in parse_interpolation()
465 return QOBJECT(qnum_from_uint(va_arg(*ctxt->ap, unsigned int))); in parse_interpolation()
467 return QOBJECT(qnum_from_uint(va_arg(*ctxt->ap, unsigned long))); in parse_interpolation()
469 return QOBJECT(qnum_from_uint(va_arg(*ctxt->ap, unsigned long long))); in parse_interpolation()
471 return QOBJECT(qnum_from_uint(va_arg(*ctxt->ap, uint64_t))); in parse_interpolation()
473 return QOBJECT(qstring_from_str(va_arg(*ctxt->ap, const char *))); in parse_interpolation()
475 return QOBJECT(qnum_from_double(va_arg(*ctxt->ap, double))); in parse_interpolation()
477 parse_error(ctxt, token, "invalid interpolation '%s'", token->str); in parse_interpolation()
481 static QObject *parse_literal(JSONParserContext *ctxt) in parse_literal() argument
485 token = parser_context_pop_token(ctxt); in parse_literal()
490 return QOBJECT(parse_string(ctxt, token)); in parse_literal()
533 static QObject *parse_value(JSONParserContext *ctxt) in parse_value() argument
537 token = parser_context_peek_token(ctxt); in parse_value()
539 parse_error(ctxt, NULL, "premature EOI"); in parse_value()
545 return parse_object(ctxt); in parse_value()
547 return parse_array(ctxt); in parse_value()
549 return parse_interpolation(ctxt); in parse_value()
553 return parse_literal(ctxt); in parse_value()
555 return parse_keyword(ctxt); in parse_value()
557 parse_error(ctxt, token, "expecting value"); in parse_value()
576 JSONParserContext ctxt = { .buf = tokens, .ap = ap }; in json_parser_parse() local
579 result = parse_value(&ctxt); in json_parser_parse()
580 assert(ctxt.err || g_queue_is_empty(ctxt.buf)); in json_parser_parse()
582 error_propagate(errp, ctxt.err); in json_parser_parse()
584 while (!g_queue_is_empty(ctxt.buf)) { in json_parser_parse()
585 parser_context_pop_token(&ctxt); in json_parser_parse()
587 g_free(ctxt.current); in json_parser_parse()