GVariant: Stop lexing format strings at :

Lets us parse this successfully: {%s: %s}.
This commit is contained in:
Ryan Lortie 2010-03-26 08:01:51 -05:00
parent df67a0662b
commit 409a3a61ec
2 changed files with 5 additions and 3 deletions

View File

@ -167,11 +167,12 @@ token_stream_prepare (TokenStream *stream)
break;
case '@': case '%':
/* stop at the first space, comma or unmatched bracket.
* deals nicely with cases like (%i, %i).
/* stop at the first space, comma, colon or unmatched bracket.
* deals nicely with cases like (%i, %i) or {%i: %i}.
*/
for (end = stream->stream + 1;
end != stream->end && *end != ',' && !g_ascii_isspace (*end);
end != stream->end && *end != ',' &&
*end != ':' && !g_ascii_isspace (*end);
end++)
if (*end == '(' || *end == '{')

View File

@ -3678,6 +3678,7 @@ test_parse_positional (void)
" ('three', %u)]", "two", 3);
g_assert (g_variant_is_of_type (value, G_VARIANT_TYPE ("a(su)")));
check_and_free (value, "[('one', 1), ('two', 2), ('three', 3)]");
check_and_free (g_variant_new_parsed ("{%s:%i}", "one", 1), "{'one': 1}");
if (do_failed_test ("*GVariant format string*"))
{