@@ -91,7 +91,7 @@ static int token_is_escape(QObject *obj, const char *value)
/**
* Error handler
*/
-static void parse_error(JSONParserContext *ctxt, QObject *token, const char *msg, ...)
+static void parse_error(const char *msg, ...)
{
va_list ap;
va_start(ap, msg);
@@ -165,7 +165,7 @@ static int hex2decimal(char ch)
* \t
* \u four-hex-digits
*/
-static QString *qstring_from_escaped_str(JSONParserContext *ctxt, QObject *token)
+static QString *qstring_from_escaped_str(QObject *token)
{
const char *ptr = token_get_value(token);
QString *str;
@@ -232,8 +232,7 @@ static QString *qstring_from_escaped_str(JSONParserContext *ctxt, QObject *token
if (qemu_isxdigit(*ptr)) {
unicode_char |= hex2decimal(*ptr) << ((3 - i) * 4);
} else {
- parse_error(ctxt, token,
- "invalid hex escape sequence in string");
+ parse_error("invalid hex escape sequence in string");
goto out;
}
ptr++;
@@ -243,7 +242,7 @@ static QString *qstring_from_escaped_str(JSONParserContext *ctxt, QObject *token
qstring_append(str, utf8_char);
} break;
default:
- parse_error(ctxt, token, "invalid escape sequence in string");
+ parse_error("invalid escape sequence in string");
goto out;
}
} else {
@@ -274,19 +273,19 @@ static int parse_pair(JSONParserContext *ctxt, QDict *dict, QList **tokens, va_l
peek = qlist_peek(working);
key = parse_value(ctxt, &working, ap);
if (!key || qobject_type(key) != QTYPE_QSTRING) {
- parse_error(ctxt, peek, "key is not a string in object");
+ parse_error("key is not a string in object");
goto out;
}
token = qlist_pop(working);
if (!token_is_operator(token, ':')) {
- parse_error(ctxt, token, "missing : in object pair");
+ parse_error("missing : in object pair");
goto out;
}
value = parse_value(ctxt, &working, ap);
if (value == NULL) {
- parse_error(ctxt, token, "Missing value in dict");
+ parse_error("Missing value in dict");
goto out;
}
@@ -331,7 +330,7 @@ static QObject *parse_object(JSONParserContext *ctxt, QList **tokens, va_list *a
token = qlist_pop(working);
while (!token_is_operator(token, '}')) {
if (!token_is_operator(token, ',')) {
- parse_error(ctxt, token, "expected separator in dict");
+ parse_error("expected separator in dict");
goto out;
}
qobject_decref(token);
@@ -384,7 +383,7 @@ static QObject *parse_array(JSONParserContext *ctxt, QList **tokens, va_list *ap
obj = parse_value(ctxt, &working, ap);
if (obj == NULL) {
- parse_error(ctxt, token, "expecting value");
+ parse_error("expecting value");
goto out;
}
@@ -393,7 +392,7 @@ static QObject *parse_array(JSONParserContext *ctxt, QList **tokens, va_list *ap
token = qlist_pop(working);
while (!token_is_operator(token, ']')) {
if (!token_is_operator(token, ',')) {
- parse_error(ctxt, token, "expected separator in list");
+ parse_error("expected separator in list");
goto out;
}
@@ -402,7 +401,7 @@ static QObject *parse_array(JSONParserContext *ctxt, QList **tokens, va_list *ap
obj = parse_value(ctxt, &working, ap);
if (obj == NULL) {
- parse_error(ctxt, token, "expecting value");
+ parse_error("expecting value");
goto out;
}
@@ -431,7 +430,7 @@ out:
return NULL;
}
-static QObject *parse_keyword(JSONParserContext *ctxt, QList **tokens)
+static QObject *parse_keyword(QList **tokens)
{
QObject *token, *ret;
QList *working = qlist_copy(*tokens);
@@ -447,7 +446,7 @@ static QObject *parse_keyword(JSONParserContext *ctxt, QList **tokens)
} else if (token_is_keyword(token, "false")) {
ret = QOBJECT(qbool_from_int(false));
} else {
- parse_error(ctxt, token, "invalid keyword `%s'", token_get_value(token));
+ parse_error("invalid keyword `%s'", token_get_value(token));
goto out;
}
@@ -464,7 +463,7 @@ out:
return NULL;
}
-static QObject *parse_escape(JSONParserContext *ctxt, QList **tokens, va_list *ap)
+static QObject *parse_escape(QList **tokens, va_list *ap)
{
QObject *token = NULL, *obj;
QList *working = qlist_copy(*tokens);
@@ -507,7 +506,7 @@ out:
return NULL;
}
-static QObject *parse_literal(JSONParserContext *ctxt, QList **tokens)
+static QObject *parse_literal(QList **tokens)
{
QObject *token, *obj;
QList *working = qlist_copy(*tokens);
@@ -515,7 +514,7 @@ static QObject *parse_literal(JSONParserContext *ctxt, QList **tokens)
token = qlist_pop(working);
switch (token_get_type(token)) {
case JSON_STRING:
- obj = QOBJECT(qstring_from_escaped_str(ctxt, token));
+ obj = QOBJECT(qstring_from_escaped_str(token));
break;
case JSON_INTEGER:
obj = QOBJECT(qint_from_int(strtoll(token_get_value(token), NULL, 10)));
@@ -550,13 +549,13 @@ static QObject *parse_value(JSONParserContext *ctxt, QList **tokens, va_list *ap
obj = parse_array(ctxt, tokens, ap);
}
if (obj == NULL) {
- obj = parse_escape(ctxt, tokens, ap);
+ obj = parse_escape(tokens, ap);
}
if (obj == NULL) {
- obj = parse_keyword(ctxt, tokens);
+ obj = parse_keyword(tokens);
}
if (obj == NULL) {
- obj = parse_literal(ctxt, tokens);
+ obj = parse_literal(tokens);
}
return obj;