summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2023-01-08 14:20:06 +0000
committerEmmanuele Bassi <ebassi@gnome.org>2023-01-08 14:20:06 +0000
commit790bd8a474c2820564afc57a60f20f3deb4e0d42 (patch)
tree6a379379161793c1108f99479084d0554511b85f
parent1053187779726413926676bad585780e4ac13ec0 (diff)
downloadgobject-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.c32
-rw-r--r--giscanner/gdumpparser.py2
-rw-r--r--tests/scanner/Regress-1.0-expected.gir45
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>