From bce199127da5368700f3105e0bd19bc338810915 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Mon, 28 Jul 2014 17:54:14 -0400 Subject: scanner: Honor nested types on array declarations as well We have special code to look at (type GLib.List(utf8)), but (type GLib.PtrArray(utf8)) didn't work. This allows NetworkManager to annotate the ActiveConnections property. https://bugzilla.gnome.org/show_bug.cgi?id=733879 --- giscanner/maintransformer.py | 5 ++++- .../Regress.TestObj-pptrarray.page | 15 +++++++++++++++ .../Regress.TestObj-pptrarray.page | 18 ++++++++++++++++++ .../Regress.TestObj-pptrarray.page | 18 ++++++++++++++++++ .../Regress-1.0-Python-expected/Regress.TestObj.page | 2 +- tests/scanner/Regress-1.0-expected.gir | 5 +++++ tests/scanner/regress.c | 12 ++++++++++++ 7 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 tests/scanner/Regress-1.0-C-expected/Regress.TestObj-pptrarray.page create mode 100644 tests/scanner/Regress-1.0-Gjs-expected/Regress.TestObj-pptrarray.page create mode 100644 tests/scanner/Regress-1.0-Python-expected/Regress.TestObj-pptrarray.page diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py index 19e3f24c..4326374f 100644 --- a/giscanner/maintransformer.py +++ b/giscanner/maintransformer.py @@ -287,7 +287,10 @@ class MainTransformer(object): return base if isinstance(base, ast.List) and len(rest) == 1: return ast.List(base.name, *rest) - if isinstance(base, ast.Map) and len(rest) == 2: + elif isinstance(base, ast.Array) and len(rest) == 1: + base.element_type = rest[0] + return base + elif isinstance(base, ast.Map) and len(rest) == 2: return ast.Map(*rest) message.warn( "Too many parameters in type specification %r" % (type_str, )) diff --git a/tests/scanner/Regress-1.0-C-expected/Regress.TestObj-pptrarray.page b/tests/scanner/Regress-1.0-C-expected/Regress.TestObj-pptrarray.page new file mode 100644 index 00000000..36a32b05 --- /dev/null +++ b/tests/scanner/Regress-1.0-C-expected/Regress.TestObj-pptrarray.page @@ -0,0 +1,15 @@ + + + + + pptrarray + + Regress.TestObj:pptrarray + + + diff --git a/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestObj-pptrarray.page b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestObj-pptrarray.page new file mode 100644 index 00000000..2c7cff0a --- /dev/null +++ b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestObj-pptrarray.page @@ -0,0 +1,18 @@ + + + + + pptrarray + + Regress.TestObj.pptrarray + +TestObj.pptrarray: Array(String) (Read / Write) + + + + diff --git a/tests/scanner/Regress-1.0-Python-expected/Regress.TestObj-pptrarray.page b/tests/scanner/Regress-1.0-Python-expected/Regress.TestObj-pptrarray.page new file mode 100644 index 00000000..f30deac3 --- /dev/null +++ b/tests/scanner/Regress-1.0-Python-expected/Regress.TestObj-pptrarray.page @@ -0,0 +1,18 @@ + + + + + pptrarray + + Regress.TestObj:pptrarray + +"pptrarray" [unicode] : Read / Write + + + + diff --git a/tests/scanner/Regress-1.0-Python-expected/Regress.TestObj.page b/tests/scanner/Regress-1.0-Python-expected/Regress.TestObj.page index 56033fd0..4f05703c 100644 --- a/tests/scanner/Regress-1.0-Python-expected/Regress.TestObj.page +++ b/tests/scanner/Regress-1.0-Python-expected/Regress.TestObj.page @@ -12,7 +12,7 @@ from gi.repository import Regress -test_obj = Regress.TestObj(bare=value, boxed=value, double=value, float=value, gtype=value, hash_table=value, hash_table_old=value, int=value, list=value, list_old=value, string=value) +test_obj = Regress.TestObj(bare=value, boxed=value, double=value, float=value, gtype=value, hash_table=value, hash_table_old=value, int=value, list=value, list_old=value, pptrarray=value, string=value) diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index a907b300..98f7ec97 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -3458,6 +3458,11 @@ raise an error. + + + + + diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c index 48d9e931..3d3cfdde 100644 --- a/tests/scanner/regress.c +++ b/tests/scanner/regress.c @@ -2021,6 +2021,7 @@ enum PROP_TEST_OBJ_BOXED, PROP_TEST_OBJ_HASH_TABLE, PROP_TEST_OBJ_LIST, + PROP_TEST_OBJ_PPTRARRAY, PROP_TEST_OBJ_HASH_TABLE_OLD, PROP_TEST_OBJ_LIST_OLD, PROP_TEST_OBJ_INT, @@ -2489,6 +2490,17 @@ regress_test_obj_class_init (RegressTestObjClass *klass) PROP_TEST_OBJ_LIST, pspec); + /** + * RegressTestObj:pptrarray: (type GLib.PtrArray(utf8)) (transfer none) + */ + pspec = g_param_spec_pointer ("pptrarray", + "PtrArray property as a pointer", + "Test annotating with GLib.PtrArray", + G_PARAM_READWRITE); + g_object_class_install_property (gobject_class, + PROP_TEST_OBJ_PPTRARRAY, + pspec); + /** * RegressTestObj:hash-table-old: (type GLib.HashTable) (transfer container) */ -- cgit v1.2.1