summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gir/Everything-1.0-expected.gir44
-rw-r--r--gir/GIMarshallingTests-1.0-expected.gir2
-rw-r--r--gir/everything.c6
-rw-r--r--gir/gimarshallingtests.c139
-rw-r--r--giscanner/annotationparser.py149
-rw-r--r--tests/scanner/annotation-1.0-expected.gir73
-rw-r--r--tests/scanner/annotation-1.0-expected.tgir12
-rw-r--r--tests/scanner/annotation.c13
-rw-r--r--tests/scanner/annotation.h2
-rw-r--r--tests/scanner/foo-1.0-expected.gir18
10 files changed, 278 insertions, 180 deletions
diff --git a/gir/Everything-1.0-expected.gir b/gir/Everything-1.0-expected.gir
index 3d3e4e88..36c1153c 100644
--- a/gir/Everything-1.0-expected.gir
+++ b/gir/Everything-1.0-expected.gir
@@ -245,7 +245,9 @@ case.">
<type name="int" c:type="int"/>
</return-value>
<parameters>
- <parameter name="somestr" transfer-ownership="none">
+ <parameter name="somestr"
+ transfer-ownership="none"
+ doc="Meaningless string">
<type name="utf8" c:type="char*"/>
</parameter>
</parameters>
@@ -346,7 +348,9 @@ case.">
<type name="int" c:type="int"/>
</return-value>
<parameters>
- <parameter name="somestr" transfer-ownership="none">
+ <parameter name="somestr"
+ transfer-ownership="none"
+ doc="Meaningless string">
<type name="utf8" c:type="char*"/>
</parameter>
</parameters>
@@ -428,7 +432,9 @@ case.">
<parameter name="obj" transfer-ownership="none">
<type name="TestObj" c:type="TestObj*"/>
</parameter>
- <parameter name="somestr" transfer-ownership="none">
+ <parameter name="somestr"
+ transfer-ownership="none"
+ doc="Meaningless string">
<type name="utf8" c:type="char*"/>
</parameter>
</parameters>
@@ -655,7 +661,8 @@ case.">
</function>
<function name="test_array_fixed_size_int_in"
c:identifier="test_array_fixed_size_int_in">
- <return-value transfer-ownership="none">
+ <return-value transfer-ownership="none"
+ doc="the sum of the items in @ints">
<type name="int" c:type="int"/>
</return-value>
<parameters>
@@ -755,7 +762,8 @@ case.">
</parameters>
</function>
<function name="test_array_gtype_in" c:identifier="test_array_gtype_in">
- <return-value transfer-ownership="full">
+ <return-value transfer-ownership="full"
+ doc="string representation of provided types">
<type name="utf8" c:type="char*"/>
</return-value>
<parameters>
@@ -780,7 +788,8 @@ case.">
<parameter name="len"
direction="out"
caller-allocates="0"
- transfer-ownership="full">
+ transfer-ownership="full"
+ doc="length of the returned array.">
<type name="int" c:type="int*"/>
</parameter>
</parameters>
@@ -851,7 +860,8 @@ case.">
<parameter name="len"
direction="out"
caller-allocates="0"
- transfer-ownership="full">
+ transfer-ownership="full"
+ doc="length of the returned array.">
<type name="int" c:type="int*"/>
</parameter>
</parameters>
@@ -867,7 +877,7 @@ case.">
<type name="int"/>
</array>
</parameter>
- <parameter name="len" transfer-ownership="none">
+ <parameter name="len" transfer-ownership="none" doc="length">
<type name="int" c:type="int"/>
</parameter>
</parameters>
@@ -891,7 +901,7 @@ case.">
direction="out"
caller-allocates="0"
transfer-ownership="full"
- doc=": length">
+ doc="length">
<type name="int" c:type="int*"/>
</parameter>
</parameters>
@@ -1077,7 +1087,8 @@ is invoked.">
doc="Invokes all callbacks installed by #test_callback_destroy_notify(),
adding up their return values, and removes them, invoking the
corresponding destroy notfications.">
- <return-value transfer-ownership="none">
+ <return-value transfer-ownership="none"
+ doc="Sum of the return values of the invoked callbacks.">
<type name="int" c:type="int"/>
</return-value>
</function>
@@ -1225,7 +1236,8 @@ call and can be released on return.">
</parameters>
</function>
<function name="test_ghash_nested_everything_return"
- c:identifier="test_ghash_nested_everything_return">
+ c:identifier="test_ghash_nested_everything_return"
+ doc="Specify nested parameterized types directly with the (type ) annotation.">
<return-value transfer-ownership="full">
<type name="GLib.HashTable" c:type="GHashTable*">
<type name="utf8"/>
@@ -1237,7 +1249,8 @@ call and can be released on return.">
</return-value>
</function>
<function name="test_ghash_nested_everything_return2"
- c:identifier="test_ghash_nested_everything_return2">
+ c:identifier="test_ghash_nested_everything_return2"
+ doc="element-type annotation.">
<return-value transfer-ownership="full">
<type name="GLib.HashTable" c:type="GHashTable*">
<type name="utf8"/>
@@ -2073,7 +2086,8 @@ call and can be released on return.">
</function>
<function name="test_utf8_const_return"
c:identifier="test_utf8_const_return">
- <return-value transfer-ownership="none">
+ <return-value transfer-ownership="none"
+ doc="&lt;const char*&gt; UTF-8 string">
<type name="utf8" c:type="char*"/>
</return-value>
</function>
@@ -2103,7 +2117,7 @@ call and can be released on return.">
</function>
<function name="test_utf8_nonconst_return"
c:identifier="test_utf8_nonconst_return">
- <return-value transfer-ownership="full">
+ <return-value transfer-ownership="full" doc="&lt;char*&gt; UTF-8 string">
<type name="utf8" c:type="char*"/>
</return-value>
</function>
@@ -2187,7 +2201,7 @@ call and can be released on return.">
<type name="GObject.Value" c:type="GValue*"/>
</return-value>
<parameters>
- <parameter name="i" transfer-ownership="none">
+ <parameter name="i" transfer-ownership="none" doc="an int">
<type name="int" c:type="int"/>
</parameter>
</parameters>
diff --git a/gir/GIMarshallingTests-1.0-expected.gir b/gir/GIMarshallingTests-1.0-expected.gir
index b83dbdf6..4069d1eb 100644
--- a/gir/GIMarshallingTests-1.0-expected.gir
+++ b/gir/GIMarshallingTests-1.0-expected.gir
@@ -1903,7 +1903,7 @@ and/or use gtk-doc annotations. -->
</function>
<function name="gstrv_return"
c:identifier="g_i_marshalling_tests_gstrv_return">
- <return-value transfer-ownership="full">
+ <return-value transfer-ownership="full" doc="an array of strings">
<array c:type="GStrv">
<type name="utf8"/>
</array>
diff --git a/gir/everything.c b/gir/everything.c
index 690dc733..2219667f 100644
--- a/gir/everything.c
+++ b/gir/everything.c
@@ -1094,7 +1094,7 @@ static /*const*/ GHashTable *test_table_ghash_const()
/**
* test_ghash_free:
- * @in: (transfer full) (element-type utf8 utf8)
+ * @in: (transfer full) (element-type utf8 utf8):
*/
void test_ghash_free (GHashTable *in)
{
@@ -1840,7 +1840,7 @@ test_obj_do_matrix (TestObj *obj, const char *somestr)
/**
* test_object_null_in:
- * @obj: (allow-none) A #TestObj
+ * @obj: (allow-none): A #TestObj
*/
void
test_object_null_in (TestObj *obj)
@@ -1849,7 +1849,7 @@ test_object_null_in (TestObj *obj)
/**
* test_object_null_out:
- * @obj: (allow-none) (out) A #TestObj
+ * @obj: (allow-none) (out): A #TestObj
*/
void
test_object_null_out (TestObj **obj)
diff --git a/gir/gimarshallingtests.c b/gir/gimarshallingtests.c
index da2fadec..f5f1a8c7 100644
--- a/gir/gimarshallingtests.c
+++ b/gir/gimarshallingtests.c
@@ -35,7 +35,7 @@ g_i_marshalling_tests_boolean_in_false (gboolean bool_)
/**
* g_i_marshalling_tests_boolean_out_true:
- * bool_: (out):
+ * @bool_: (out):
*/
void
g_i_marshalling_tests_boolean_out_true (gboolean *bool_)
@@ -45,7 +45,7 @@ g_i_marshalling_tests_boolean_out_true (gboolean *bool_)
/**
* g_i_marshalling_tests_boolean_out_false:
- * bool_: (out):
+ * @bool_: (out):
*/
void
g_i_marshalling_tests_boolean_out_false (gboolean *bool_)
@@ -55,7 +55,7 @@ g_i_marshalling_tests_boolean_out_false (gboolean *bool_)
/**
* g_i_marshalling_tests_boolean_inout_true_false:
- * bool_: (inout):
+ * @bool_: (inout):
*/
void
g_i_marshalling_tests_boolean_inout_true_false (gboolean *bool_)
@@ -66,7 +66,7 @@ g_i_marshalling_tests_boolean_inout_true_false (gboolean *bool_)
/**
* g_i_marshalling_tests_boolean_inout_false_true:
- * bool_: (inout):
+ * @bool_: (inout):
*/
void
g_i_marshalling_tests_boolean_inout_false_true (gboolean *bool_)
@@ -104,7 +104,7 @@ g_i_marshalling_tests_int8_in_min (gint8 int8)
/**
* g_i_marshalling_tests_int8_out_max:
- * int8: (out):
+ * @int8: (out):
*/
void
g_i_marshalling_tests_int8_out_max (gint8 *int8)
@@ -114,7 +114,7 @@ g_i_marshalling_tests_int8_out_max (gint8 *int8)
/**
* g_i_marshalling_tests_int8_out_min:
- * int8: (out):
+ * @int8: (out):
*/
void
g_i_marshalling_tests_int8_out_min (gint8 *int8)
@@ -124,7 +124,7 @@ g_i_marshalling_tests_int8_out_min (gint8 *int8)
/**
* g_i_marshalling_tests_int8_inout_max_min:
- * int8: (inout):
+ * @int8: (inout):
*/
void
g_i_marshalling_tests_int8_inout_max_min (gint8 *int8)
@@ -135,7 +135,7 @@ g_i_marshalling_tests_int8_inout_max_min (gint8 *int8)
/**
* g_i_marshalling_tests_int8_inout_min_max:
- * int8: (inout):
+ * @int8: (inout):
*/
void
g_i_marshalling_tests_int8_inout_min_max (gint8 *int8)
@@ -159,7 +159,7 @@ g_i_marshalling_tests_uint8_in (guint8 uint8)
/**
* g_i_marshalling_tests_uint8_out:
- * uint8: (out):
+ * @uint8: (out):
*/
void
g_i_marshalling_tests_uint8_out (guint8 *uint8)
@@ -169,7 +169,7 @@ g_i_marshalling_tests_uint8_out (guint8 *uint8)
/**
* g_i_marshalling_tests_uint8_inout:
- * uint8: (inout):
+ * @uint8: (inout):
*/
void
g_i_marshalling_tests_uint8_inout (guint8 *uint8)
@@ -205,7 +205,7 @@ g_i_marshalling_tests_int16_in_min (gint16 int16)
/**
* g_i_marshalling_tests_int16_out_max:
- * int16: (out):
+ * @int16: (out):
*/
void
g_i_marshalling_tests_int16_out_max (gint16 *int16)
@@ -215,7 +215,7 @@ g_i_marshalling_tests_int16_out_max (gint16 *int16)
/**
* g_i_marshalling_tests_int16_out_min:
- * int16: (out):
+ * @int16: (out):
*/
void
g_i_marshalling_tests_int16_out_min (gint16 *int16)
@@ -225,7 +225,7 @@ g_i_marshalling_tests_int16_out_min (gint16 *int16)
/**
* g_i_marshalling_tests_int16_inout_max_min:
- * int16: (inout):
+ * @int16: (inout):
*/
void
g_i_marshalling_tests_int16_inout_max_min (gint16 *int16)
@@ -236,7 +236,7 @@ g_i_marshalling_tests_int16_inout_max_min (gint16 *int16)
/**
* g_i_marshalling_tests_int16_inout_min_max:
- * int16: (inout):
+ * @int16: (inout):
*/
void
g_i_marshalling_tests_int16_inout_min_max (gint16 *int16)
@@ -260,7 +260,7 @@ g_i_marshalling_tests_uint16_in (guint16 uint16)
/**
* g_i_marshalling_tests_uint16_out:
- * uint16: (out):
+ * @uint16: (out):
*/
void
g_i_marshalling_tests_uint16_out (guint16 *uint16)
@@ -270,7 +270,7 @@ g_i_marshalling_tests_uint16_out (guint16 *uint16)
/**
* g_i_marshalling_tests_uint16_inout:
- * uint16: (inout):
+ * @uint16: (inout):
*/
void
g_i_marshalling_tests_uint16_inout (guint16 *uint16)
@@ -306,7 +306,7 @@ g_i_marshalling_tests_int32_in_min (gint32 int32)
/**
* g_i_marshalling_tests_int32_out_max:
- * int32: (out):
+ * @int32: (out):
*/
void
g_i_marshalling_tests_int32_out_max (gint32 *int32)
@@ -316,7 +316,7 @@ g_i_marshalling_tests_int32_out_max (gint32 *int32)
/**
* g_i_marshalling_tests_int32_out_min:
- * int32: (out):
+ * @int32: (out):
*/
void
g_i_marshalling_tests_int32_out_min (gint32 *int32)
@@ -326,7 +326,7 @@ g_i_marshalling_tests_int32_out_min (gint32 *int32)
/**
* g_i_marshalling_tests_int32_inout_max_min:
- * int32: (inout):
+ * @int32: (inout):
*/
void
g_i_marshalling_tests_int32_inout_max_min (gint32 *int32)
@@ -337,7 +337,7 @@ g_i_marshalling_tests_int32_inout_max_min (gint32 *int32)
/**
* g_i_marshalling_tests_int32_inout_min_max:
- * int32: (inout):
+ * @int32: (inout):
*/
void
g_i_marshalling_tests_int32_inout_min_max (gint32 *int32)
@@ -361,7 +361,7 @@ g_i_marshalling_tests_uint32_in (guint32 uint32)
/**
* g_i_marshalling_tests_uint32_out:
- * uint32: (out):
+ * @uint32: (out):
*/
void
g_i_marshalling_tests_uint32_out (guint32 *uint32)
@@ -371,7 +371,7 @@ g_i_marshalling_tests_uint32_out (guint32 *uint32)
/**
* g_i_marshalling_tests_uint32_inout:
- * uint32: (inout):
+ * @uint32: (inout):
*/
void
g_i_marshalling_tests_uint32_inout (guint32 *uint32)
@@ -407,7 +407,7 @@ g_i_marshalling_tests_int64_in_min (gint64 int64)
/**
* g_i_marshalling_tests_int64_out_max:
- * int64: (out):
+ * @int64: (out):
*/
void
g_i_marshalling_tests_int64_out_max (gint64 *int64)
@@ -417,7 +417,7 @@ g_i_marshalling_tests_int64_out_max (gint64 *int64)
/**
* g_i_marshalling_tests_int64_out_min:
- * int64: (out):
+ * @int64: (out):
*/
void
g_i_marshalling_tests_int64_out_min (gint64 *int64)
@@ -427,7 +427,7 @@ g_i_marshalling_tests_int64_out_min (gint64 *int64)
/**
* g_i_marshalling_tests_int64_inout_max_min:
- * int64: (inout):
+ * @int64: (inout):
*/
void
g_i_marshalling_tests_int64_inout_max_min (gint64 *int64)
@@ -438,7 +438,7 @@ g_i_marshalling_tests_int64_inout_max_min (gint64 *int64)
/**
* g_i_marshalling_tests_int64_inout_min_max:
- * int64: (inout):
+ * @int64: (inout):
*/
void
g_i_marshalling_tests_int64_inout_min_max (gint64 *int64)
@@ -462,7 +462,7 @@ g_i_marshalling_tests_uint64_in (guint64 uint64)
/**
* g_i_marshalling_tests_uint64_out:
- * uint64: (out):
+ * @uint64: (out):
*/
void
g_i_marshalling_tests_uint64_out (guint64 *uint64)
@@ -472,7 +472,7 @@ g_i_marshalling_tests_uint64_out (guint64 *uint64)
/**
* g_i_marshalling_tests_uint64_inout:
- * uint64: (inout):
+ * @uint64: (inout):
*/
void
g_i_marshalling_tests_uint64_inout (guint64 *uint64)
@@ -508,7 +508,7 @@ g_i_marshalling_tests_short_in_min (gshort short_)
/**
* g_i_marshalling_tests_short_out_max:
- * short_: (out):
+ * @short_: (out):
*/
void
g_i_marshalling_tests_short_out_max (gshort *short_)
@@ -518,7 +518,7 @@ g_i_marshalling_tests_short_out_max (gshort *short_)
/**
* g_i_marshalling_tests_short_out_min:
- * short_: (out):
+ * @short_: (out):
*/
void
g_i_marshalling_tests_short_out_min (gshort *short_)
@@ -528,7 +528,7 @@ g_i_marshalling_tests_short_out_min (gshort *short_)
/**
* g_i_marshalling_tests_short_inout_max_min:
- * short_: (inout):
+ * @short_: (inout):
*/
void
g_i_marshalling_tests_short_inout_max_min (gshort *short_)
@@ -539,7 +539,7 @@ g_i_marshalling_tests_short_inout_max_min (gshort *short_)
/**
* g_i_marshalling_tests_short_inout_min_max:
- * short_: (inout):
+ * @short_: (inout):
*/
void
g_i_marshalling_tests_short_inout_min_max (gshort *short_)
@@ -563,7 +563,7 @@ g_i_marshalling_tests_ushort_in (gushort ushort)
/**
* g_i_marshalling_tests_ushort_out:
- * ushort: (out):
+ * @ushort: (out):
*/
void
g_i_marshalling_tests_ushort_out (gushort *ushort)
@@ -573,7 +573,7 @@ g_i_marshalling_tests_ushort_out (gushort *ushort)
/**
* g_i_marshalling_tests_ushort_inout:
- * ushort: (inout):
+ * @ushort: (inout):
*/
void
g_i_marshalling_tests_ushort_inout (gushort *ushort)
@@ -609,7 +609,7 @@ g_i_marshalling_tests_int_in_min (gint int_)
/**
* g_i_marshalling_tests_int_out_max:
- * int_: (out):
+ * @int_: (out):
*/
void
g_i_marshalling_tests_int_out_max (gint *int_)
@@ -619,7 +619,7 @@ g_i_marshalling_tests_int_out_max (gint *int_)
/**
* g_i_marshalling_tests_int_out_min:
- * int_: (out):
+ * @int_: (out):
*/
void
g_i_marshalling_tests_int_out_min (gint *int_)
@@ -629,7 +629,7 @@ g_i_marshalling_tests_int_out_min (gint *int_)
/**
* g_i_marshalling_tests_int_inout_max_min:
- * int_: (inout):
+ * @int_: (inout):
*/
void
g_i_marshalling_tests_int_inout_max_min (gint *int_)
@@ -640,7 +640,7 @@ g_i_marshalling_tests_int_inout_max_min (gint *int_)
/**
* g_i_marshalling_tests_int_inout_min_max:
- * int_: (inout):
+ * @int_: (inout):
*/
void
g_i_marshalling_tests_int_inout_min_max (gint *int_)
@@ -664,7 +664,7 @@ g_i_marshalling_tests_uint_in (guint uint)
/**
* g_i_marshalling_tests_uint_out:
- * uint: (out):
+ * @uint: (out):
*/
void
g_i_marshalling_tests_uint_out (guint *uint)
@@ -674,7 +674,7 @@ g_i_marshalling_tests_uint_out (guint *uint)
/**
* g_i_marshalling_tests_uint_inout:
- * uint: (inout):
+ * @uint: (inout):
*/
void
g_i_marshalling_tests_uint_inout (guint *uint)
@@ -710,7 +710,7 @@ g_i_marshalling_tests_long_in_min (glong long_)
/**
* g_i_marshalling_tests_long_out_max:
- * long_: (out):
+ * @long_: (out):
*/
void
g_i_marshalling_tests_long_out_max (glong *long_)
@@ -720,7 +720,7 @@ g_i_marshalling_tests_long_out_max (glong *long_)
/**
* g_i_marshalling_tests_long_out_min:
- * long_: (out):
+ * @long_: (out):
*/
void
g_i_marshalling_tests_long_out_min (glong *long_)
@@ -730,7 +730,7 @@ g_i_marshalling_tests_long_out_min (glong *long_)
/**
* g_i_marshalling_tests_long_inout_max_min:
- * long_: (inout):
+ * @long_: (inout):
*/
void
g_i_marshalling_tests_long_inout_max_min (glong *long_)
@@ -741,7 +741,7 @@ g_i_marshalling_tests_long_inout_max_min (glong *long_)
/**
* g_i_marshalling_tests_long_inout_min_max:
- * long_: (inout):
+ * @long_: (inout):
*/
void
g_i_marshalling_tests_long_inout_min_max (glong *long_)
@@ -765,7 +765,7 @@ g_i_marshalling_tests_ulong_in (gulong ulong)
/**
* g_i_marshalling_tests_ulong_out:
- * ulong: (out):
+ * @ulong: (out):
*/
void
g_i_marshalling_tests_ulong_out (gulong *ulong)
@@ -775,7 +775,7 @@ g_i_marshalling_tests_ulong_out (gulong *ulong)
/**
* g_i_marshalling_tests_ulong_inout:
- * ulong: (inout):
+ * @ulong: (inout):
*/
void
g_i_marshalling_tests_ulong_inout (gulong *ulong)
@@ -811,7 +811,7 @@ g_i_marshalling_tests_ssize_in_min (gssize ssize)
/**
* g_i_marshalling_tests_ssize_out_max:
- * ssize: (out):
+ * @ssize: (out):
*/
void
g_i_marshalling_tests_ssize_out_max (gssize *ssize)
@@ -821,7 +821,7 @@ g_i_marshalling_tests_ssize_out_max (gssize *ssize)
/**
* g_i_marshalling_tests_ssize_out_min:
- * ssize: (out):
+ * @ssize: (out):
*/
void
g_i_marshalling_tests_ssize_out_min (gssize *ssize)
@@ -831,7 +831,7 @@ g_i_marshalling_tests_ssize_out_min (gssize *ssize)
/**
* g_i_marshalling_tests_ssize_inout_max_min:
- * ssize: (inout):
+ * @ssize: (inout):
*/
void
g_i_marshalling_tests_ssize_inout_max_min (gssize *ssize)
@@ -842,7 +842,7 @@ g_i_marshalling_tests_ssize_inout_max_min (gssize *ssize)
/**
* g_i_marshalling_tests_ssize_inout_min_max:
- * ssize: (inout):
+ * @ssize: (inout):
*/
void
g_i_marshalling_tests_ssize_inout_min_max (gssize *ssize)
@@ -866,7 +866,7 @@ g_i_marshalling_tests_size_in (gsize size)
/**
* g_i_marshalling_tests_size_out:
- * size: (out):
+ * @size: (out):
*/
void
g_i_marshalling_tests_size_out (gsize *size)
@@ -876,7 +876,7 @@ g_i_marshalling_tests_size_out (gsize *size)
/**
* g_i_marshalling_tests_size_inout:
- * size: (inout):
+ * @size: (inout):
*/
void
g_i_marshalling_tests_size_inout (gsize *size)
@@ -900,7 +900,7 @@ g_i_marshalling_tests_float_in (gfloat float_)
/**
* g_i_marshalling_tests_float_out:
- * float_: (out):
+ * @float_: (out):
*/
void
g_i_marshalling_tests_float_out (gfloat *float_)
@@ -910,7 +910,7 @@ g_i_marshalling_tests_float_out (gfloat *float_)
/**
* g_i_marshalling_tests_float_inout:
- * float_: (inout):
+ * @float_: (inout):
*/
void
g_i_marshalling_tests_float_inout (gfloat *float_)
@@ -934,7 +934,7 @@ g_i_marshalling_tests_double_in (gdouble double_)
/**
* g_i_marshalling_tests_double_out:
- * double_: (out):
+ * @double_: (out):
*/
void
g_i_marshalling_tests_double_out (gdouble *double_)
@@ -944,7 +944,7 @@ g_i_marshalling_tests_double_out (gdouble *double_)
/**
* g_i_marshalling_tests_double_inout:
- * double_: (inout):
+ * @double_: (inout):
*/
void
g_i_marshalling_tests_double_inout (gdouble *double_)
@@ -968,7 +968,7 @@ g_i_marshalling_tests_time_t_in (time_t time_t_)
/**
* g_i_marshalling_tests_time_t_out:
- * time_t_: (out):
+ * @time_t_: (out):
*/
void
g_i_marshalling_tests_time_t_out (time_t *time_t_)
@@ -978,7 +978,7 @@ g_i_marshalling_tests_time_t_out (time_t *time_t_)
/**
* g_i_marshalling_tests_time_t_inout:
- * time_t_: (inout):
+ * @time_t_: (inout):
*/
void
g_i_marshalling_tests_time_t_inout (time_t *time_t_)
@@ -1002,7 +1002,7 @@ g_i_marshalling_tests_gtype_in (GType gtype)
/**
* g_i_marshalling_tests_gtype_out:
- * gtype: (out):
+ * @gtype: (out):
*/
void
g_i_marshalling_tests_gtype_out (GType *gtype)
@@ -1012,7 +1012,7 @@ g_i_marshalling_tests_gtype_out (GType *gtype)
/**
* g_i_marshalling_tests_gtype_inout:
- * gtype: (inout):
+ * @gtype: (inout):
*/
void
g_i_marshalling_tests_gtype_inout (GType *gtype)
@@ -1049,7 +1049,7 @@ g_i_marshalling_tests_utf8_full_in (gchar *utf8)
/**
* g_i_marshalling_tests_utf8_none_out:
- * utf8: (out) (transfer none):
+ * @utf8: (out) (transfer none):
*/
void
g_i_marshalling_tests_utf8_none_out (gchar **utf8)
@@ -1059,7 +1059,7 @@ g_i_marshalling_tests_utf8_none_out (gchar **utf8)
/**
* g_i_marshalling_tests_utf8_full_out:
- * utf8: (out) (transfer full):
+ * @utf8: (out) (transfer full):
*/
void
g_i_marshalling_tests_utf8_full_out (gchar **utf8)
@@ -1069,7 +1069,7 @@ g_i_marshalling_tests_utf8_full_out (gchar **utf8)
/**
* g_i_marshalling_tests_utf8_dangling_out:
- * utf8: (out) (transfer full):
+ * @utf8: (out) (transfer full):
*/
void
g_i_marshalling_tests_utf8_dangling_out (gchar **utf8)
@@ -1083,7 +1083,7 @@ g_i_marshalling_tests_utf8_dangling_out (gchar **utf8)
/**
* g_i_marshalling_tests_utf8_none_inout:
- * utf8: (inout) (transfer none):
+ * @utf8: (inout) (transfer none):
*/
void
g_i_marshalling_tests_utf8_none_inout (gchar **utf8)
@@ -1094,7 +1094,7 @@ g_i_marshalling_tests_utf8_none_inout (gchar **utf8)
/**
* g_i_marshalling_tests_utf8_full_inout:
- * utf8: (inout) (transfer full):
+ * @utf8: (inout) (transfer full):
*/
void
g_i_marshalling_tests_utf8_full_inout (gchar **utf8)
@@ -1617,7 +1617,8 @@ g_i_marshalling_tests_bytearray_none_in (GByteArray *array_)
/**
* g_i_marshalling_tests_gstrv_return:
- * Returns:
+ *
+ * Returns: an array of strings
*/
GStrv
g_i_marshalling_tests_gstrv_return (void)
@@ -3384,8 +3385,8 @@ g_i_marshalling_tests_test_interface_test_int8_in (GIMarshallingTestsInterface *
/**
* g_i_marshalling_tests_int_out_out:
- * int0: (out):
- * int1: (out):
+ * @int0: (out):
+ * @int1: (out):
*/
void
g_i_marshalling_tests_int_out_out (gint *int0, gint *int1)
@@ -3396,7 +3397,7 @@ g_i_marshalling_tests_int_out_out (gint *int0, gint *int1)
/**
* g_i_marshalling_tests_int_return_out:
- * int_: (out):
+ * @int_: (out):
*/
gint
g_i_marshalling_tests_int_return_out (gint *int_)
diff --git a/giscanner/annotationparser.py b/giscanner/annotationparser.py
index 01cbb1ac..715ffe47 100644
--- a/giscanner/annotationparser.py
+++ b/giscanner/annotationparser.py
@@ -21,7 +21,6 @@
# AnnotationParser - parses gtk-doc annotations
import re
-import sys
from .ast import (Array, Bitfield, Callback, Class, Enum, Field, Function,
Interface, List, Map, Parameter, Property, Record, Return,
@@ -49,7 +48,6 @@ TAG_VFUNC = 'virtual'
TAG_SINCE = 'since'
TAG_DEPRECATED = 'deprecated'
TAG_RETURNS = 'returns'
-TAG_RETURNS_ALT = 'return value'
TAG_ATTRIBUTES = 'attributes'
TAG_RENAME_TO = 'rename to'
TAG_TYPE = 'type'
@@ -100,14 +98,7 @@ class DocBlock(object):
return '<DocBlock %r %r>' % (self.name, self.options)
def get(self, name):
- if name == TAG_RETURNS:
- value = self.tags.get(name)
- if value is None:
- return self.tags.get(TAG_RETURNS_ALT)
- else:
- return value
- else:
- return self.tags.get(name)
+ return self.tags.get(name)
class DocTag(object):
@@ -152,6 +143,10 @@ class Option(object):
class AnnotationParser(object):
+ WHITESPACE_RE = re.compile(r'^\s*$')
+ ASCII_TEXT_RE = re.compile(r'\s*[A-Za-z]+')
+ OPTION_RE = re.compile(r'\([A-Za-z]+[^(]*\)')
+ RETURNS_RE = re.compile(r'^return(s?)( value)?:', re.IGNORECASE)
def __init__(self, namespace, source_scanner, transformer):
self._blocks = {}
@@ -195,64 +190,97 @@ class AnnotationParser(object):
cpos = block_header.find(': ')
if cpos:
block_name = block_header[:cpos]
- block_options, rest = self._parse_options(block_header[cpos+2:])
- if rest:
- return
+ block_options = self.parse_options(block_header[cpos+2:])
else:
block_name, block_options = block_header, {}
block = DocBlock(block_name, block_options)
+ debug = block_name == 'annotation_object_compute_sum_n'
comment_lines = []
- parse_parameters = True
- canon_name = ''
+ parsing_parameters = True
+ last_param_tag = None
+
+ # Second phase: parse parameters, return values, Tag: format
+ # annotations.
+ #
+ # Valid lines look like:
+ # * @foo: some comment here
+ # * @baz: (inout): This has an annotation
+ # * @bar: (out) (allow-none): this is a long parameter comment
+ # * that gets wrapped to the next line.
+ # *
+ # * Some documentation for the function.
+ # *
+ # * Returns: (transfer none): A value
for line in comment[pos+1:].split('\n'):
line = line.lstrip()
- line = line[2:].strip() # Skip ' *'
- if not line:
- if parse_parameters:
- parse_parameters = False
+ if (not line.startswith('*') or
+ self.WHITESPACE_RE.match(line[1:])):
+ # As soon as we find a line that's just whitespace,
+ # we're done parsing the parameters.
+ parsing_parameters = False
continue
- if line.startswith('@'):
- line = line[1:]
- elif not ': ' in line:
- if parse_parameters and line:
- if canon_name != '' and canon_name in block.tags:
- block.tags[canon_name].comment += ' ' + line
+
+ line = line[1:].lstrip()
+
+ # Look for a parameter or return value. Both of these can
+ # have parenthesized options.
+ first_colonspace_index = line.find(': ')
+ is_parameter = line.startswith('@')
+ is_return_value = self.RETURNS_RE.search(line)
+ if ((is_parameter or is_return_value)
+ and first_colonspace_index > 0):
+ if is_parameter:
+ argname = line[1:first_colonspace_index]
+ else:
+ argname = TAG_RETURNS
+ tag = DocTag(argname)
+ second_colon_index = line.rfind(':')
+ found_options = False
+ if second_colon_index > first_colonspace_index:
+ value_line = \
+ line[first_colonspace_index+2:second_colon_index]
+ if self.OPTION_RE.search(value_line):
+ # The OPTION_RE is a little bit heuristic. If
+ # we found two colons, we scan inside for something
+ # that looks like (foo).
+ # *Ideally* we'd change the gtk-doc format to
+ # require double colons, and then there'd be
+ # no ambiguity. I.e.:
+ # @foo:: Some documentation here
+ # But that'd be a rather incompatible change.
+ found_options = True
+ tag.comment = line[second_colon_index+1:].strip()
+ tag.options = self.parse_options(value_line)
+ if not found_options:
+ # We didn't find any options, so just take the whole thing
+ # as documentation.
+ tag.comment = line[first_colonspace_index+2:].strip()
+ block.tags[argname] = tag
+ last_param_tag = tag
+ elif (not is_parameter) and parsing_parameters and last_param_tag:
+ # We need to handle continuation lines on parameters. The
+ # conditional above - if a line doesn't start with '@', we're
+ # not yet in the documentation block for the whole function,
+ # and we've seen at least one parameter.
+ last_param_tag.comment += (' ' + line.strip())
+ elif first_colonspace_index > 0:
+ # The line is of the form "Tag: some value here", like:
+ # Since: 0.8
+ tag_name = line[:first_colonspace_index]
+ if self.ASCII_TEXT_RE.match(tag_name):
+ tag_name = tag_name.lower()
+ tag = DocTag(tag_name)
+ tag.value = line[first_colonspace_index+2:]
+ block.tags[tag_name] = tag
else:
comment_lines.append(line)
- continue
- tag_name, value = self._split_tag_namevalue(line)
- canon_name = tag_name.lower()
- if canon_name in block.tags:
- print >> sys.stderr, (
- "Symbol %s has multiple definition of tag %r" % (
- block_name, canon_name, ))
- block.tags[canon_name] = self._create_tag(canon_name, value)
+ elif (not is_parameter):
+ comment_lines.append(line)
block.comment = '\n'.join(comment_lines)
self._blocks[block.name] = block
- def _split_tag_namevalue(self, raw):
- """Split a line into tag name and value"""
- parts = raw.split(': ', 1)
- if len(parts) == 1:
- tag_name = parts[0]
- value = ''
- if tag_name.endswith(':'):
- tag_name = tag_name[:-1]
- else:
- tag_name, value = parts
- return (tag_name, value)
-
- def _create_tag(self, tag_name, value):
- # Tag: bar
- # Tag: bar opt1 opt2
- tag = DocTag(tag_name)
- tag.value = value
- options, rest = self._parse_options(tag.value)
- tag.options = options
- tag.comment = rest or ''
- return tag
-
- def _parse_options(self, value):
+ @classmethod
+ def parse_options(cls, value):
# (foo)
# (bar opt1 opt2...)
opened = -1
@@ -277,11 +305,7 @@ class AnnotationParser(object):
last = i + 2
opened = -1
- if last is not None:
- rest = value[last:].strip()
- else:
- rest = None
- return options, rest
+ return options
class AnnotationApplier(object):
@@ -871,7 +895,8 @@ class AnnotationApplier(object):
annos_tag = self._get_tag(block, TAG_ATTRIBUTES)
if annos_tag is None:
return
- for key, value in annos_tag.options.iteritems():
+ options = AnnotationParser.parse_options(annos_tag.value)
+ for key, value in options.iteritems():
if value:
node.attributes.append((key, value.one()))
diff --git a/tests/scanner/annotation-1.0-expected.gir b/tests/scanner/annotation-1.0-expected.gir
index 12025ed8..cf974f5e 100644
--- a/tests/scanner/annotation-1.0-expected.gir
+++ b/tests/scanner/annotation-1.0-expected.gir
@@ -83,14 +83,14 @@ and/or use gtk-doc annotations. -->
glib:type-struct="ObjectClass">
<attribute name="org.example.Test" value="cows"/>
<method name="method" c:identifier="annotation_object_method">
- <return-value transfer-ownership="none">
+ <return-value transfer-ownership="none" doc="an int">
<type name="int" c:type="gint"/>
</return-value>
</method>
<method name="out"
c:identifier="annotation_object_out"
doc="This is a test for out arguments">
- <return-value transfer-ownership="none">
+ <return-value transfer-ownership="none" doc="an int">
<type name="int" c:type="gint"/>
</return-value>
<parameters>
@@ -129,7 +129,7 @@ and/or use gtk-doc annotations. -->
<method name="inout"
c:identifier="annotation_object_inout"
doc="This is a test for out arguments">
- <return-value transfer-ownership="none">
+ <return-value transfer-ownership="none" doc="an int">
<type name="int" c:type="gint"/>
</return-value>
<parameters>
@@ -145,7 +145,7 @@ and/or use gtk-doc annotations. -->
<method name="inout2"
c:identifier="annotation_object_inout2"
doc="This is a second test for out arguments">
- <return-value transfer-ownership="none">
+ <return-value transfer-ownership="none" doc="an int">
<type name="int" c:type="gint"/>
</return-value>
<parameters>
@@ -161,7 +161,7 @@ and/or use gtk-doc annotations. -->
<method name="inout3"
c:identifier="annotation_object_inout3"
doc="This is a 3th test for out arguments">
- <return-value transfer-ownership="none">
+ <return-value transfer-ownership="none" doc="an int">
<type name="int" c:type="gint"/>
</return-value>
<parameters>
@@ -178,7 +178,7 @@ and/or use gtk-doc annotations. -->
<method name="in"
c:identifier="annotation_object_in"
doc="This is a test for in arguments">
- <return-value transfer-ownership="none">
+ <return-value transfer-ownership="none" doc="an int">
<type name="int" c:type="gint"/>
</return-value>
<parameters>
@@ -192,7 +192,7 @@ and/or use gtk-doc annotations. -->
<method name="calleeowns"
c:identifier="annotation_object_calleeowns"
doc="This is a test for out arguments; GObject defaults to transfer">
- <return-value transfer-ownership="none">
+ <return-value transfer-ownership="none" doc="an int">
<type name="int" c:type="gint"/>
</return-value>
<parameters>
@@ -208,7 +208,7 @@ and/or use gtk-doc annotations. -->
<method name="calleesowns"
c:identifier="annotation_object_calleesowns"
doc="This is a test for out arguments, one transferred, other not">
- <return-value transfer-ownership="none">
+ <return-value transfer-ownership="none" doc="an int">
<type name="int" c:type="gint"/>
</return-value>
<parameters>
@@ -312,7 +312,9 @@ intentionally similar example to gtk_container_get_children">
<type name="int"/>
</array>
</parameter>
- <parameter name="n_nums" transfer-ownership="none">
+ <parameter name="n_nums"
+ transfer-ownership="none"
+ doc="Length of number array">
<type name="int" c:type="int"/>
</parameter>
</parameters>
@@ -331,7 +333,9 @@ intentionally similar example to gtk_container_get_children">
<type name="int"/>
</array>
</parameter>
- <parameter name="n_nums" transfer-ownership="none">
+ <parameter name="n_nums"
+ transfer-ownership="none"
+ doc="Length of number array">
<type name="int" c:type="int"/>
</parameter>
</parameters>
@@ -364,7 +368,7 @@ intentionally similar example to gtk_container_get_children">
<method name="string_out"
c:identifier="annotation_object_string_out"
doc="Test returning a string as an out parameter">
- <return-value transfer-ownership="none">
+ <return-value transfer-ownership="none" doc="some boolean">
<type name="boolean" c:type="gboolean"/>
</return-value>
<parameters>
@@ -391,7 +395,9 @@ intentionally similar example to gtk_container_get_children">
doc="Callback to invoke">
<type name="ForeachFunc" c:type="AnnotationForeachFunc"/>
</parameter>
- <parameter name="user_data" transfer-ownership="none">
+ <parameter name="user_data"
+ transfer-ownership="none"
+ doc="Callback user data">
<type name="any" c:type="gpointer"/>
</parameter>
</parameters>
@@ -408,7 +414,9 @@ intentionally similar example to gtk_container_get_children">
<type name="uint8"/>
</array>
</parameter>
- <parameter name="length" transfer-ownership="none">
+ <parameter name="length"
+ transfer-ownership="none"
+ doc="Length of the data">
<type name="size_t" c:type="gsize"/>
</parameter>
</parameters>
@@ -425,7 +433,9 @@ intentionally similar example to gtk_container_get_children">
<type name="int8"/>
</array>
</parameter>
- <parameter name="length" transfer-ownership="none">
+ <parameter name="length"
+ transfer-ownership="none"
+ doc="Length of the data">
<type name="size_t" c:type="gsize"/>
</parameter>
</parameters>
@@ -443,7 +453,9 @@ type.">
<type name="uint8"/>
</array>
</parameter>
- <parameter name="length" transfer-ownership="none">
+ <parameter name="length"
+ transfer-ownership="none"
+ doc="Length of the data">
<type name="size_t" c:type="gsize"/>
</parameter>
</parameters>
@@ -467,13 +479,19 @@ type.">
transfer-ownership="none"
scope="notified"
closure="2"
- destroy="3">
+ destroy="3"
+ doc="The callback">
<type name="ForeachFunc" c:type="AnnotationForeachFunc"/>
</parameter>
- <parameter name="user_data" transfer-ownership="none">
+ <parameter name="user_data"
+ transfer-ownership="none"
+ doc="The callback data">
<type name="any" c:type="gpointer"/>
</parameter>
- <parameter name="destroy" transfer-ownership="none" scope="call">
+ <parameter name="destroy"
+ transfer-ownership="none"
+ scope="call"
+ doc="Destroy notification">
<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
</parameter>
</parameters>
@@ -526,7 +544,7 @@ type.">
<type name="none" c:type="void"/>
</return-value>
<parameters>
- <parameter name="arg1" transfer-ownership="none">
+ <parameter name="object" transfer-ownership="none">
<type name="any" c:type="gpointer"/>
</parameter>
</parameters>
@@ -586,7 +604,9 @@ it says it&apos;s pointer but it&apos;s actually a string."
<type name="int" c:type="gint"/>
</return-value>
<parameters>
- <parameter name="object" transfer-ownership="none">
+ <parameter name="object"
+ transfer-ownership="none"
+ doc="A #AnnotationObject.">
<type name="Object" c:type="AnnotationObject*"/>
</parameter>
<parameter name="data" transfer-ownership="none" doc="Some data.">
@@ -648,6 +668,19 @@ detection, and fixing it via annotations.">
</parameter>
</parameters>
</function>
+ <function name="invalid_annotation"
+ c:identifier="annotation_invalid_annotation">
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <parameter name="foo"
+ transfer-ownership="none"
+ doc="some text (e.g. example) or else">
+ <type name="int" c:type="int"/>
+ </parameter>
+ </parameters>
+ </function>
<function name="ptr_array" c:identifier="annotation_ptr_array">
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
diff --git a/tests/scanner/annotation-1.0-expected.tgir b/tests/scanner/annotation-1.0-expected.tgir
index 0f8a5fe7..d8dfc381 100644
--- a/tests/scanner/annotation-1.0-expected.tgir
+++ b/tests/scanner/annotation-1.0-expected.tgir
@@ -383,7 +383,7 @@
<type name="none"/>
</return-value>
<parameters>
- <parameter name="arg1" transfer-ownership="none">
+ <parameter name="object" transfer-ownership="none">
<type name="any"/>
</parameter>
</parameters>
@@ -476,6 +476,16 @@
</parameter>
</parameters>
</function>
+ <function name="invalid_annotation" c:identifier="annotation_invalid_annotation">
+ <return-value transfer-ownership="none">
+ <type name="none"/>
+ </return-value>
+ <parameters>
+ <parameter name="foo" transfer-ownership="none">
+ <type name="int"/>
+ </parameter>
+ </parameters>
+ </function>
<function name="ptr_array" c:identifier="annotation_ptr_array">
<return-value transfer-ownership="none">
<type name="none"/>
diff --git a/tests/scanner/annotation.c b/tests/scanner/annotation.c
index 64f9cc32..497d1eec 100644
--- a/tests/scanner/annotation.c
+++ b/tests/scanner/annotation.c
@@ -641,7 +641,7 @@ annotation_string_zero_terminated (void)
/**
* annotation_string_zero_terminated_out:
- * @out: (array zero-terminated=1) (inout)
+ * @out: (array zero-terminated=1) (inout):
**/
void
annotation_string_zero_terminated_out (char ***out)
@@ -737,4 +737,15 @@ annotation_attribute_func (AnnotationObject *object,
return 42;
}
+/**
+ * annotation_invalid_annotation:
+ * @foo: some text (e.g. example) or else
+ */
+void
+annotation_invalid_annotation (int foo)
+{
+
+}
+
+
char backslash_parsing_tester_2 = '\\';
diff --git a/tests/scanner/annotation.h b/tests/scanner/annotation.h
index ace36515..e4f29065 100644
--- a/tests/scanner/annotation.h
+++ b/tests/scanner/annotation.h
@@ -142,6 +142,8 @@ void annotation_set_source_file (const char *fname);
gint annotation_attribute_func (AnnotationObject *object,
const gchar *data);
+void annotation_invalid_annotation (int foo);
+
/**
* AnnotationStruct:
*
diff --git a/tests/scanner/foo-1.0-expected.gir b/tests/scanner/foo-1.0-expected.gir
index 68896c11..f7ca794b 100644
--- a/tests/scanner/foo-1.0-expected.gir
+++ b/tests/scanner/foo-1.0-expected.gir
@@ -334,10 +334,10 @@ uses a C sugar return type.">
<type name="none" c:type="void"/>
</return-value>
<parameters>
- <parameter name="offset" transfer-ownership="none">
+ <parameter name="offset" transfer-ownership="none" doc="offset">
<type name="int" c:type="int"/>
</parameter>
- <parameter name="length" transfer-ownership="none">
+ <parameter name="length" transfer-ownership="none" doc="length">
<type name="int" c:type="int"/>
</parameter>
</parameters>
@@ -443,10 +443,10 @@ uses a C sugar return type.">
<type name="none" c:type="void"/>
</return-value>
<parameters>
- <parameter name="offset" transfer-ownership="none">
+ <parameter name="offset" transfer-ownership="none" doc="offset">
<type name="int" c:type="int"/>
</parameter>
- <parameter name="length" transfer-ownership="none">
+ <parameter name="length" transfer-ownership="none" doc="length">
<type name="int" c:type="int"/>
</parameter>
</parameters>
@@ -515,10 +515,10 @@ uses a C sugar return type.">
<parameter name="object" transfer-ownership="none">
<type name="Object" c:type="FooObject*"/>
</parameter>
- <parameter name="offset" transfer-ownership="none">
+ <parameter name="offset" transfer-ownership="none" doc="offset">
<type name="int" c:type="int"/>
</parameter>
- <parameter name="length" transfer-ownership="none">
+ <parameter name="length" transfer-ownership="none" doc="length">
<type name="int" c:type="int"/>
</parameter>
</parameters>
@@ -570,7 +570,9 @@ uses a C sugar return type.">
<type name="none" c:type="void"/>
</return-value>
<parameters>
- <parameter name="r2" transfer-ownership="none">
+ <parameter name="r2"
+ transfer-ownership="none"
+ doc="source rectangle">
<type name="Rectangle" c:type="FooRectangle*"/>
</parameter>
</parameters>
@@ -826,7 +828,7 @@ exposed to language bindings."
<type name="none" c:type="void"/>
</return-value>
<parameters>
- <parameter name="fs" transfer-ownership="none">
+ <parameter name="fs" transfer-ownership="none" doc="a #FooSkippable">
<type name="Skippable" c:type="FooSkippable"/>
</parameter>
</parameters>