diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2023-01-08 14:20:06 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2023-01-08 14:20:06 +0000 |
commit | 790bd8a474c2820564afc57a60f20f3deb4e0d42 (patch) | |
tree | 6a379379161793c1108f99479084d0554511b85f | |
parent | 1053187779726413926676bad585780e4ac13ec0 (diff) | |
download | gobject-introspection-790bd8a474c2820564afc57a60f20f3deb4e0d42.tar.gz |
Skip default-value for non-transformable properties
If we can't transform a property default value to string, we are not
going to add a default-value attribute to the GIR. This is necessary
because non-transformable values may not always be pointers, so we
cannot default to "NULL".
-rw-r--r-- | girepository/gdump.c | 32 | ||||
-rw-r--r-- | giscanner/gdumpparser.py | 2 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-expected.gir | 45 |
3 files changed, 34 insertions, 45 deletions
diff --git a/girepository/gdump.c b/girepository/gdump.c index 3ee687b6..e68c4d14 100644 --- a/girepository/gdump.c +++ b/girepository/gdump.c @@ -137,20 +137,22 @@ value_to_string (const GValue *value) else if (g_value_type_transformable (G_VALUE_TYPE (value), G_TYPE_STRING)) { GValue tmp = G_VALUE_INIT; - char *s; + char *s = NULL; g_value_init (&tmp, G_TYPE_STRING); - g_value_transform (value, &tmp); - s = g_strescape (g_value_get_string (&tmp), NULL); + + if (g_value_transform (value, &tmp)) + s = g_strescape (g_value_get_string (&tmp), NULL); + g_value_unset (&tmp); if (s == NULL) - return g_strdup ("NULL"); + return NULL; return s; } else - return g_strdup ("NULL"); + return NULL; } static void @@ -184,11 +186,21 @@ dump_properties (GType type, GOutputStream *out) const GValue *v = g_param_spec_get_default_value (prop); char *default_value = value_to_string (v); - escaped_printf (out, " <property name=\"%s\" type=\"%s\" flags=\"%d\" default-value=\"%s\"/>\n", - prop->name, - g_type_name (prop->value_type), - prop->flags, - default_value); + if (default_value != NULL) + { + escaped_printf (out, " <property name=\"%s\" type=\"%s\" flags=\"%d\" default-value=\"%s\"/>\n", + prop->name, + g_type_name (prop->value_type), + prop->flags, + default_value); + } + else + { + escaped_printf (out, " <property name=\"%s\" type=\"%s\" flags=\"%d\"/>\n", + prop->name, + g_type_name (prop->value_type), + prop->flags); + } g_free (default_value); } diff --git a/giscanner/gdumpparser.py b/giscanner/gdumpparser.py index 21fbadf4..b5ca4362 100644 --- a/giscanner/gdumpparser.py +++ b/giscanner/gdumpparser.py @@ -414,7 +414,7 @@ different --identifier-prefix.""" % (xmlnode.attrib['name'], self._namespace.ide writable = (flags & G_PARAM_WRITABLE) != 0 construct = (flags & G_PARAM_CONSTRUCT) != 0 construct_only = (flags & G_PARAM_CONSTRUCT_ONLY) != 0 - default_value = pspec.attrib['default-value'] + default_value = pspec.attrib.get('default-value') prop = ast.Property( pspec.attrib['name'], ast.Type.create_from_gtype_name(ctype), diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index 42db6105..608f120c 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -1088,8 +1088,7 @@ regress_annotation_object_watch_full().</doc> <property name="function-property" writable="1" construct="1" - transfer-ownership="none" - default-value="NULL"> + transfer-ownership="none"> <type name="AnnotationCallback" c:type="gpointer"/> </property> <property name="string-property" @@ -2147,8 +2146,7 @@ uses a C sugar return type.</doc> introspectable="0" writable="1" construct-only="1" - transfer-ownership="none" - default-value="NULL"> + transfer-ownership="none"> <type/> </property> <property name="string" @@ -4846,21 +4844,16 @@ raise an error.</doc> <property name="bare" writable="1" transfer-ownership="none" - setter="set_bare" - default-value="NULL"> + setter="set_bare"> <type name="GObject.Object"/> </property> - <property name="boxed" - writable="1" - transfer-ownership="none" - default-value="NULL"> + <property name="boxed" writable="1" transfer-ownership="none"> <type name="TestBoxed"/> </property> <property name="byte-array" writable="1" construct="1" - transfer-ownership="none" - default-value="NULL"> + transfer-ownership="none"> <array name="GLib.ByteArray"> <type name="guint8" c:type="guint8"/> </array> @@ -4877,16 +4870,10 @@ raise an error.</doc> default-value="1.000000"> <type name="gfloat" c:type="gfloat"/> </property> - <property name="gtype" - writable="1" - transfer-ownership="none" - default-value="NULL"> + <property name="gtype" writable="1" transfer-ownership="none"> <type name="GType" c:type="GType"/> </property> - <property name="hash-table" - writable="1" - transfer-ownership="container" - default-value="NULL"> + <property name="hash-table" writable="1" transfer-ownership="container"> <type name="GLib.HashTable"> <type name="utf8"/> <type name="gint8"/> @@ -4894,8 +4881,7 @@ raise an error.</doc> </property> <property name="hash-table-old" writable="1" - transfer-ownership="container" - default-value="NULL"> + transfer-ownership="container"> <type name="GLib.HashTable"> <type name="utf8"/> <type name="gint8"/> @@ -4907,18 +4893,12 @@ raise an error.</doc> default-value="0"> <type name="gint" c:type="gint"/> </property> - <property name="list" - writable="1" - transfer-ownership="none" - default-value="NULL"> + <property name="list" writable="1" transfer-ownership="none"> <type name="GLib.List" c:type="gpointer"> <type name="utf8"/> </type> </property> - <property name="list-old" - writable="1" - transfer-ownership="none" - default-value="NULL"> + <property name="list-old" writable="1" transfer-ownership="none"> <type name="GLib.List" c:type="gpointer"> <type name="utf8"/> </type> @@ -4930,10 +4910,7 @@ raise an error.</doc> default-value="42"> <type name="gint" c:type="gint"/> </property> - <property name="pptrarray" - writable="1" - transfer-ownership="none" - default-value="NULL"> + <property name="pptrarray" writable="1" transfer-ownership="none"> <array name="GLib.PtrArray" c:type="gpointer"> <type name="utf8"/> </array> |