summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2022-08-30 23:45:50 +0100
committerEmmanuele Bassi <ebassi@gmail.com>2023-01-08 14:03:20 +0000
commit1053187779726413926676bad585780e4ac13ec0 (patch)
treeade58ed5bc8cd851d9664f7f12e1325c82d2f466
parentbfe4b306506547bd7bbc25123c1323e561b5096e (diff)
downloadgobject-introspection-1053187779726413926676bad585780e4ac13ec0.tar.gz
Add an optional attribute for the property default value
The default-value attribute for a property element is fundamentally meant for documentation generators. We only care about the GIR data, as the conversion from the default value to a string is lossy by definition, and may very well not roundtrip.
-rw-r--r--docs/gir-1.2.rnc2
-rw-r--r--giscanner/ast.py1
-rw-r--r--giscanner/gdumpparser.py7
-rw-r--r--giscanner/girparser.py1
-rw-r--r--giscanner/girwriter.py2
-rw-r--r--tests/scanner/Regress-1.0-expected.gir87
6 files changed, 75 insertions, 25 deletions
diff --git a/docs/gir-1.2.rnc b/docs/gir-1.2.rnc
index 7c398be0..5182f7cb 100644
--- a/docs/gir-1.2.rnc
+++ b/docs/gir-1.2.rnc
@@ -350,6 +350,8 @@ grammar {
attribute setter { xsd:string }?,
## The getter function for this property
attribute getter { xsd:string }?,
+ ## The default value of the property, as a string; if missing, the default value is zero for integer types, and null for pointer types
+ attribute default-value { xsd:string }?,
# Define the transfer of ownership of the property element
TransferOwnership?,
diff --git a/giscanner/ast.py b/giscanner/ast.py
index 2cfd81fc..dac326cb 100644
--- a/giscanner/ast.py
+++ b/giscanner/ast.py
@@ -1304,6 +1304,7 @@ class Property(Node):
self.transfer = transfer
self.setter = None
self.getter = None
+ self.default_value = None
self.parent = None # A Class or Interface
diff --git a/giscanner/gdumpparser.py b/giscanner/gdumpparser.py
index 1a0794d4..21fbadf4 100644
--- a/giscanner/gdumpparser.py
+++ b/giscanner/gdumpparser.py
@@ -414,10 +414,13 @@ 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
- node.properties.append(ast.Property(
+ default_value = pspec.attrib['default-value']
+ prop = ast.Property(
pspec.attrib['name'],
ast.Type.create_from_gtype_name(ctype),
- readable, writable, construct, construct_only))
+ readable, writable, construct, construct_only)
+ prop.default_value = default_value
+ node.properties.append(prop)
node.properties = node.properties
def _introspect_signals(self, node, xmlnode):
diff --git a/giscanner/girparser.py b/giscanner/girparser.py
index edaaa992..5fc22899 100644
--- a/giscanner/girparser.py
+++ b/giscanner/girparser.py
@@ -609,6 +609,7 @@ class GIRParser(object):
node.attrib.get('transfer-ownership'))
prop.setter = node.attrib.get('setter')
prop.getter = node.attrib.get('getter')
+ prop.default_value = node.attrib.get('default-value')
prop.parent = parent
self._parse_generic_attribs(node, prop)
return prop
diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py
index 9ff10d31..a3b3bc3e 100644
--- a/giscanner/girwriter.py
+++ b/giscanner/girwriter.py
@@ -560,6 +560,8 @@ class GIRWriter(XMLWriter):
attrs.append(('setter', prop.setter))
if prop.getter:
attrs.append(('getter', prop.getter))
+ if prop.default_value:
+ attrs.append(('default-value', prop.default_value))
with self.tagcontext('property', attrs):
self._write_generic(prop)
self._write_type(prop.type)
diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir
index 079405d2..42db6105 100644
--- a/tests/scanner/Regress-1.0-expected.gir
+++ b/tests/scanner/Regress-1.0-expected.gir
@@ -1088,7 +1088,8 @@ regress_annotation_object_watch_full().</doc>
<property name="function-property"
writable="1"
construct="1"
- transfer-ownership="none">
+ transfer-ownership="none"
+ default-value="NULL">
<type name="AnnotationCallback" c:type="gpointer"/>
</property>
<property name="string-property"
@@ -1097,7 +1098,8 @@ regress_annotation_object_watch_full().</doc>
deprecated-version="1.2"
writable="1"
construct="1"
- transfer-ownership="none">
+ transfer-ownership="none"
+ default-value="NULL">
<doc xml:space="preserve"
filename="annotation.c"
line="156">This is a property which is a string</doc>
@@ -1108,7 +1110,8 @@ regress_annotation_object_watch_full().</doc>
version="1.2"
writable="1"
construct="1"
- transfer-ownership="none">
+ transfer-ownership="none"
+ default-value="NULL">
<doc xml:space="preserve"
filename="annotation.c"
line="181">This is a property annotation intentionally indented with a mix
@@ -2144,13 +2147,15 @@ uses a C sugar return type.</doc>
introspectable="0"
writable="1"
construct-only="1"
- transfer-ownership="none">
+ transfer-ownership="none"
+ default-value="NULL">
<type/>
</property>
<property name="string"
writable="1"
construct="1"
- transfer-ownership="none">
+ transfer-ownership="none"
+ default-value="NULL">
<type name="utf8" c:type="gchar*"/>
</property>
<field name="parent_instance">
@@ -3918,7 +3923,8 @@ use it should be.</doc>
<property name="number"
writable="1"
construct="1"
- transfer-ownership="none">
+ transfer-ownership="none"
+ default-value="0">
<type name="gint" c:type="gint"/>
</property>
<glib:signal name="interface-signal" when="last">
@@ -4840,30 +4846,47 @@ raise an error.</doc>
<property name="bare"
writable="1"
transfer-ownership="none"
- setter="set_bare">
+ setter="set_bare"
+ default-value="NULL">
<type name="GObject.Object"/>
</property>
- <property name="boxed" writable="1" transfer-ownership="none">
+ <property name="boxed"
+ writable="1"
+ transfer-ownership="none"
+ default-value="NULL">
<type name="TestBoxed"/>
</property>
<property name="byte-array"
writable="1"
construct="1"
- transfer-ownership="none">
+ transfer-ownership="none"
+ default-value="NULL">
<array name="GLib.ByteArray">
<type name="guint8" c:type="guint8"/>
</array>
</property>
- <property name="double" writable="1" transfer-ownership="none">
+ <property name="double"
+ writable="1"
+ transfer-ownership="none"
+ default-value="1.000000">
<type name="gdouble" c:type="gdouble"/>
</property>
- <property name="float" writable="1" transfer-ownership="none">
+ <property name="float"
+ writable="1"
+ transfer-ownership="none"
+ default-value="1.000000">
<type name="gfloat" c:type="gfloat"/>
</property>
- <property name="gtype" writable="1" transfer-ownership="none">
+ <property name="gtype"
+ writable="1"
+ transfer-ownership="none"
+ default-value="NULL">
<type name="GType" c:type="GType"/>
</property>
- <property name="hash-table" writable="1" transfer-ownership="container">
+ <property name="hash-table"
+ writable="1"
+ transfer-ownership="container"
+ default-value="NULL">
<type name="GLib.HashTable">
<type name="utf8"/>
<type name="gint8"/>
@@ -4871,21 +4894,31 @@ raise an error.</doc>
</property>
<property name="hash-table-old"
writable="1"
- transfer-ownership="container">
+ transfer-ownership="container"
+ default-value="NULL">
<type name="GLib.HashTable">
<type name="utf8"/>
<type name="gint8"/>
</type>
</property>
- <property name="int" writable="1" transfer-ownership="none">
+ <property name="int"
+ writable="1"
+ transfer-ownership="none"
+ default-value="0">
<type name="gint" c:type="gint"/>
</property>
- <property name="list" writable="1" transfer-ownership="none">
+ <property name="list"
+ writable="1"
+ transfer-ownership="none"
+ default-value="NULL">
<type name="GLib.List" c:type="gpointer">
<type name="utf8"/>
</type>
</property>
- <property name="list-old" writable="1" transfer-ownership="none">
+ <property name="list-old"
+ writable="1"
+ transfer-ownership="none"
+ default-value="NULL">
<type name="GLib.List" c:type="gpointer">
<type name="utf8"/>
</type>
@@ -4893,10 +4926,14 @@ raise an error.</doc>
<property name="name-conflict"
writable="1"
construct="1"
- transfer-ownership="none">
+ transfer-ownership="none"
+ default-value="42">
<type name="gint" c:type="gint"/>
</property>
- <property name="pptrarray" writable="1" transfer-ownership="none">
+ <property name="pptrarray"
+ writable="1"
+ transfer-ownership="none"
+ default-value="NULL">
<array name="GLib.PtrArray" c:type="gpointer">
<type name="utf8"/>
</array>
@@ -4905,13 +4942,15 @@ raise an error.</doc>
writable="1"
transfer-ownership="none"
setter="set_string"
- getter="get_string">
+ getter="get_string"
+ default-value="NULL">
<type name="utf8" c:type="gchar*"/>
</property>
<property name="write-only"
readable="0"
writable="1"
- transfer-ownership="none">
+ transfer-ownership="none"
+ default-value="FALSE">
<type name="gboolean" c:type="gboolean"/>
</property>
<field name="parent_instance">
@@ -5715,7 +5754,8 @@ the introspection client langage.</doc>
<property name="boolean"
writable="1"
construct="1"
- transfer-ownership="none">
+ transfer-ownership="none"
+ default-value="TRUE">
<type name="gboolean" c:type="gboolean"/>
</property>
<field name="parent_instance">
@@ -5795,7 +5835,8 @@ the introspection client langage.</doc>
writable="1"
transfer-ownership="none"
setter="set_testbool"
- getter="get_testbool">
+ getter="get_testbool"
+ default-value="TRUE">
<type name="gboolean" c:type="gboolean"/>
</property>
<field name="parent_instance">