diff options
-rw-r--r-- | giscanner/maintransformer.py | 16 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-expected.gir | 14 | ||||
-rw-r--r-- | tests/scanner/regress.h | 4 |
3 files changed, 34 insertions, 0 deletions
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py index a60b9bb6..33d301b3 100644 --- a/giscanner/maintransformer.py +++ b/giscanner/maintransformer.py @@ -55,6 +55,9 @@ class MainTransformer(object): alias = ast.Alias('AttributeSet', target=ast.TYPE_ANY) self._namespace.append(alias, replace=True) + # Some initial namespace surgery + self._namespace.walk(self._pass_fixup_hidden_fields) + # We have a rough tree which should have most of of the types # we know about. Let's attempt closure; walk over all of the # Type() types and see if they match up with something. @@ -99,6 +102,19 @@ class MainTransformer(object): # Private + def _pass_fixup_hidden_fields(self, node, chain): + """Hide all callbacks starting with _; the typical +usage is void (*_gtk_reserved1)(void);""" + if not isinstance(node, (ast.Class, ast.Interface, + ast.Record, ast.Union)): + return True + for field in node.fields: + if (field.name.startswith('_') + and field.anonymous_node is not None + and isinstance(field.anonymous_node, ast.Callback)): + field.introspectable = False + return True + def _get_validate_parameter_name(self, parent, param_name, origin): try: param = parent.get_parameter(param_name) diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index 6ae7172b..78314112 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -629,6 +629,20 @@ case.</doc> <field name="test_signal_with_static_scope_arg"> <type name="guint" c:type="guint"/> </field> + <field name="_regress_reserved1" introspectable="0"> + <callback name="_regress_reserved1"> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + </callback> + </field> + <field name="_regress_reserved2" introspectable="0"> + <callback name="_regress_reserved2"> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + </callback> + </field> </record> <record name="TestSimpleBoxedA" c:type="RegressTestSimpleBoxedA" diff --git a/tests/scanner/regress.h b/tests/scanner/regress.h index 8140d88d..98877580 100644 --- a/tests/scanner/regress.h +++ b/tests/scanner/regress.h @@ -291,6 +291,10 @@ struct _RegressTestObjClass guint test_signal; guint test_signal_with_static_scope_arg; + + /* Should be replaced with simple "gpointer" and not be callback */ + void (*_regress_reserved1) (void); + void (*_regress_reserved2) (void); }; GType regress_test_obj_get_type (void); |