diff options
-rw-r--r-- | giscanner/girparser.py | 2 | ||||
-rw-r--r-- | giscanner/transformer.py | 3 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-C-expected/Regress.test_list_model_none.page | 30 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-C-expected/Regress.test_list_model_object.page | 31 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-Gjs-expected/Regress.test_list_model_object.page | 33 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-Python-expected/Regress.test_list_model_object.page | 32 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-expected.gir | 32 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-sections-expected.txt | 2 | ||||
-rw-r--r-- | tests/scanner/regress.c | 30 | ||||
-rw-r--r-- | tests/scanner/regress.h | 6 |
10 files changed, 200 insertions, 1 deletions
diff --git a/giscanner/girparser.py b/giscanner/girparser.py index 35206a41..d31b26cf 100644 --- a/giscanner/girparser.py +++ b/giscanner/girparser.py @@ -492,7 +492,7 @@ class GIRParser(object): if ctype is None: return ast.TypeUnknown() return ast.Type(ctype=ctype) - elif name in ['GLib.List', 'GLib.SList']: + elif name in ['GLib.List', 'GLib.SList', 'Gio.ListModel']: subchild = self._find_first_child(typenode, list(map(_corens, ('callback', 'array', ' varargs', 'type')))) diff --git a/giscanner/transformer.py b/giscanner/transformer.py index bcabdedc..7f230a20 100644 --- a/giscanner/transformer.py +++ b/giscanner/transformer.py @@ -698,6 +698,9 @@ raise ValueError.""" elif base in ('GHashTable', 'GLib.HashTable', 'GObject.HashTable'): return ast.Map(ast.TYPE_ANY, ast.TYPE_ANY, ctype=ctype, is_const=is_const, complete_ctype=complete_ctype) + elif base in ('GListModel', 'Gio.ListModel'): + return ast.List('Gio.ListModel', ast.TYPE_ANY, ctype=ctype, + is_const=is_const, complete_ctype=complete_ctype) return None def create_type_from_ctype_string(self, ctype, is_const=False, diff --git a/tests/scanner/Regress-1.0-C-expected/Regress.test_list_model_none.page b/tests/scanner/Regress-1.0-C-expected/Regress.test_list_model_none.page new file mode 100644 index 00000000..b1458649 --- /dev/null +++ b/tests/scanner/Regress-1.0-C-expected/Regress.test_list_model_none.page @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<page id="Regress.test_list_model_none" + type="topic" + style="function" + xmlns="http://projectmallard.org/1.0/" + xmlns:api="http://projectmallard.org/experimental/api/" + xmlns:ui="http://projectmallard.org/1.0/ui/"> + <info> + <link xref="index" group="function" type="guide"/> + <api:function> + <api:returns> + <api:type>GListModel*</api:type> + </api:returns> + <api:name>regress_test_list_model_none</api:name> + </api:function> + </info> + <title>regress_test_list_model_none</title> + <synopsis><code mime="text/x-csrc"> +GListModel* regress_test_list_model_none (void); + </code></synopsis> + <p>Test GListModel with no annotation.</p> + +<terms> +<item> +<title><code>Returns</code></title> + <p>a GListModel</p> +</item> +</terms> + +</page> diff --git a/tests/scanner/Regress-1.0-C-expected/Regress.test_list_model_object.page b/tests/scanner/Regress-1.0-C-expected/Regress.test_list_model_object.page new file mode 100644 index 00000000..620789cd --- /dev/null +++ b/tests/scanner/Regress-1.0-C-expected/Regress.test_list_model_object.page @@ -0,0 +1,31 @@ +<?xml version="1.0"?> +<page id="Regress.test_list_model_object" + type="topic" + style="function" + xmlns="http://projectmallard.org/1.0/" + xmlns:api="http://projectmallard.org/experimental/api/" + xmlns:ui="http://projectmallard.org/1.0/ui/"> + <info> + <link xref="index" group="function" type="guide"/> + <api:function> + <api:returns> + <api:type>GListModel*</api:type> + </api:returns> + <api:name>regress_test_list_model_object</api:name> + </api:function> + </info> + <title>regress_test_list_model_object</title> + <synopsis><code mime="text/x-csrc"> +GListModel* regress_test_list_model_object (void); + </code></synopsis> + <p>Test GListModel return value with an element type annotation.</p> + +<terms> +<item> +<title><code>Returns</code></title> + <p>a GListModel + containing RegressTestObj values</p> +</item> +</terms> + +</page> diff --git a/tests/scanner/Regress-1.0-Gjs-expected/Regress.test_list_model_object.page b/tests/scanner/Regress-1.0-Gjs-expected/Regress.test_list_model_object.page new file mode 100644 index 00000000..a9dd90d7 --- /dev/null +++ b/tests/scanner/Regress-1.0-Gjs-expected/Regress.test_list_model_object.page @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<page id="Regress.test_list_model_object" + type="topic" + style="function" + xmlns="http://projectmallard.org/1.0/" + xmlns:api="http://projectmallard.org/experimental/api/" + xmlns:ui="http://projectmallard.org/1.0/ui/"> + <info> + <link xref="index" group="function" type="guide"/> + <api:function> + <api:returns> + <api:type>Array(Regress.TestObj)</api:type> + </api:returns> + <api:name>regress_test_list_model_object</api:name> + </api:function> + </info> + <title>Regress.test_list_model_object</title> + <synopsis><code mime="text/x-gjs"> +function test_list_model_object(): Array(<link xref="Regress.TestObj">Regress.TestObj</link>) { + // Gjs wrapper for regress_test_list_model_object() +} + </code></synopsis> + <p>Test GListModel return value with an element type annotation.</p> + +<terms> +<item> +<title><code>Returns</code></title> + <p>a GListModel + containing RegressTestObj values</p> +</item> +</terms> + +</page> diff --git a/tests/scanner/Regress-1.0-Python-expected/Regress.test_list_model_object.page b/tests/scanner/Regress-1.0-Python-expected/Regress.test_list_model_object.page new file mode 100644 index 00000000..a4382c9d --- /dev/null +++ b/tests/scanner/Regress-1.0-Python-expected/Regress.test_list_model_object.page @@ -0,0 +1,32 @@ +<?xml version="1.0"?> +<page id="Regress.test_list_model_object" + type="topic" + style="function" + xmlns="http://projectmallard.org/1.0/" + xmlns:api="http://projectmallard.org/experimental/api/" + xmlns:ui="http://projectmallard.org/1.0/ui/"> + <info> + <link xref="index" group="function" type="guide"/> + <api:function> + <api:returns> + <api:type>[Regress.TestObj]</api:type> + </api:returns> + <api:name>regress_test_list_model_object</api:name> + </api:function> + </info> + <title>Regress.test_list_model_object</title> + <synopsis><code mime="text/x-python"> +@returns([Regress.TestObj]) +def test_list_model_object(): + # Python wrapper for regress_test_list_model_object() + </code></synopsis> + <p>Test GListModel return value with an element type annotation.</p> + +<terms> +<item> +<title><code>Returns</code></title> +{formatter.format(node, node.retval.doc)} +</item> +</terms> + +</page> diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index cef3b124..af648273 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -8041,6 +8041,38 @@ element-type annotation.</doc> </parameter> </parameters> </function> + <function name="test_list_model_none" + c:identifier="regress_test_list_model_none" + introspectable="0"> + <doc xml:space="preserve" + filename="regress.c" + line="4689">Test GListModel with no annotation.</doc> + <source-position filename="regress.h" line="1538"/> + <return-value transfer-ownership="full"> + <doc xml:space="preserve" + filename="regress.c" + line="4694">a GListModel</doc> + <type name="Gio.ListModel" c:type="GListModel*"> + <type name="gpointer" c:type="gpointer"/> + </type> + </return-value> + </function> + <function name="test_list_model_object" + c:identifier="regress_test_list_model_object"> + <doc xml:space="preserve" + filename="regress.c" + line="4704">Test GListModel return value with an element type annotation.</doc> + <source-position filename="regress.h" line="1541"/> + <return-value transfer-ownership="full"> + <doc xml:space="preserve" + filename="regress.c" + line="4709">a GListModel + containing RegressTestObj values</doc> + <type name="Gio.ListModel" c:type="GListModel*"> + <type name="TestObj"/> + </type> + </return-value> + </function> <function name="test_long" c:identifier="regress_test_long"> <source-position filename="regress.h" line="73"/> <return-value transfer-ownership="none"> diff --git a/tests/scanner/Regress-1.0-sections-expected.txt b/tests/scanner/Regress-1.0-sections-expected.txt index b35b3a9a..84f7ec67 100644 --- a/tests/scanner/Regress-1.0-sections-expected.txt +++ b/tests/scanner/Regress-1.0-sections-expected.txt @@ -159,6 +159,8 @@ regress_test_int64 regress_test_int8 regress_test_int_out_utf8 regress_test_int_value_arg +regress_test_list_model_none +regress_test_list_model_object regress_test_long regress_test_multi_callback regress_test_multi_double_args diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c index 3a63436b..e81d1989 100644 --- a/tests/scanner/regress.c +++ b/tests/scanner/regress.c @@ -4686,3 +4686,33 @@ regress_test_array_struct_in_none (RegressTestStructA *arr, gsize len) g_assert_cmpint (arr[2].some_int, ==, 303); } +/** + * regress_test_list_model_none: + * + * Test GListModel with no annotation. + * + * Returns: (transfer full): a GListModel + */ +GListModel * +regress_test_list_model_none (void) +{ + GListStore *res = g_list_store_new (regress_test_obj_get_type ()); + + return G_LIST_MODEL (res); +} + +/** + * regress_test_list_model_object: + * + * Test GListModel return value with an element type annotation. + * + * Returns: (transfer full) (element-type RegressTestObj): a GListModel + * containing RegressTestObj values + */ +GListModel * +regress_test_list_model_object (void) +{ + GListStore *res = g_list_store_new (regress_test_obj_get_type ()); + + return G_LIST_MODEL (res); +} diff --git a/tests/scanner/regress.h b/tests/scanner/regress.h index 0b239f14..9ff699fb 100644 --- a/tests/scanner/regress.h +++ b/tests/scanner/regress.h @@ -1534,4 +1534,10 @@ void regress_test_array_struct_in_full (RegressTestStructA *arr, gsize len); _GI_TEST_EXTERN void regress_test_array_struct_in_none (RegressTestStructA *arr, gsize len); +_GI_TEST_EXTERN +GListModel *regress_test_list_model_none (void); + +_GI_TEST_EXTERN +GListModel *regress_test_list_model_object (void); + #endif /* __GITESTTYPES_H__ */ |