summaryrefslogtreecommitdiff
path: root/giscanner
diff options
context:
space:
mode:
authorBen Iofel <iofelben@gmail.com>2015-09-25 15:11:17 -0400
committerColin Walters <walters@verbum.org>2015-10-19 18:00:58 -0400
commitd9a6824b2dd373f7bd3d3b3f434d2fe7069eaa51 (patch)
treee14a47b2f213a3d363cb313f8921da2281ccbf2d /giscanner
parent5341da3520ef513e5a7c49e2d8737bb3f2341a3d (diff)
downloadgobject-introspection-d9a6824b2dd373f7bd3d3b3f434d2fe7069eaa51.tar.gz
Add support for function typedefs without pointer
g-ir-scanner now supports something like this: typedef void my_callback(int); Notice how my_callback is not a pointer. https://bugzilla.gnome.org/show_bug.cgi?id=755645
Diffstat (limited to 'giscanner')
-rw-r--r--giscanner/transformer.py12
1 files changed, 10 insertions, 2 deletions
diff --git a/giscanner/transformer.py b/giscanner/transformer.py
index fdb87f94..3183d622 100644
--- a/giscanner/transformer.py
+++ b/giscanner/transformer.py
@@ -596,6 +596,8 @@ raise ValueError."""
ctype = symbol.base_type.type
if (ctype == CTYPE_POINTER and symbol.base_type.base_type.type == CTYPE_FUNCTION):
node = self._create_typedef_callback(symbol)
+ elif (ctype == CTYPE_FUNCTION):
+ node = self._create_typedef_callback(symbol)
elif (ctype == CTYPE_POINTER and symbol.base_type.base_type.type == CTYPE_STRUCT):
node = self._create_typedef_compound(ast.Record, symbol, disguised=True)
elif ctype == CTYPE_STRUCT:
@@ -871,8 +873,14 @@ raise ValueError."""
compound.fields.append(field)
def _create_callback(self, symbol, member=False):
- parameters = list(self._create_parameters(symbol, symbol.base_type.base_type))
- retval = self._create_return(symbol.base_type.base_type.base_type)
+ if (symbol.base_type.type == CTYPE_FUNCTION): # function
+ paramtype = symbol.base_type
+ retvaltype = symbol.base_type.base_type
+ elif (symbol.base_type.type == CTYPE_POINTER): # function pointer
+ paramtype = symbol.base_type.base_type
+ retvaltype = symbol.base_type.base_type.base_type
+ parameters = list(self._create_parameters(symbol, paramtype))
+ retval = self._create_return(retvaltype)
# Mark the 'user_data' arguments
for i, param in enumerate(parameters):