mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-28 06:56:16 +01:00
GVariant: Stop lexing format strings at :
Lets us parse this successfully: {%s: %s}.
This commit is contained in:
parent
df67a0662b
commit
409a3a61ec
@ -167,11 +167,12 @@ token_stream_prepare (TokenStream *stream)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case '@': case '%':
|
case '@': case '%':
|
||||||
/* stop at the first space, comma or unmatched bracket.
|
/* stop at the first space, comma, colon or unmatched bracket.
|
||||||
* deals nicely with cases like (%i, %i).
|
* deals nicely with cases like (%i, %i) or {%i: %i}.
|
||||||
*/
|
*/
|
||||||
for (end = stream->stream + 1;
|
for (end = stream->stream + 1;
|
||||||
end != stream->end && *end != ',' && !g_ascii_isspace (*end);
|
end != stream->end && *end != ',' &&
|
||||||
|
*end != ':' && !g_ascii_isspace (*end);
|
||||||
end++)
|
end++)
|
||||||
|
|
||||||
if (*end == '(' || *end == '{')
|
if (*end == '(' || *end == '{')
|
||||||
|
@ -3678,6 +3678,7 @@ test_parse_positional (void)
|
|||||||
" ('three', %u)]", "two", 3);
|
" ('three', %u)]", "two", 3);
|
||||||
g_assert (g_variant_is_of_type (value, G_VARIANT_TYPE ("a(su)")));
|
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 (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*"))
|
if (do_failed_test ("*GVariant format string*"))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user