summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2010-09-09 15:09:39 -0400
committerColin Walters <walters@verbum.org>2010-09-09 15:09:39 -0400
commit79e0ea087341e09e4bbbbc77479a3e91fb824446 (patch)
treebfa6b0d966dc0c07cbea1eb57da26118b6c1b609
parenta9dc0722ae291fc0644cebc9f2ec3bb61b0d9d87 (diff)
downloadgobject-introspection-79e0ea087341e09e4bbbbc77479a3e91fb824446.tar.gz
scanner: Mark '_'-prefixed fields as introspectable=0
Typically these contain reserved callbacks; in any case we take a leading underscore to mean 'private'.
-rw-r--r--giscanner/maintransformer.py16
-rw-r--r--tests/scanner/Regress-1.0-expected.gir14
-rw-r--r--tests/scanner/regress.h4
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);