diff options
author | Ben Iofel <iofelben@gmail.com> | 2015-09-25 15:11:17 -0400 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2015-10-19 18:00:58 -0400 |
commit | d9a6824b2dd373f7bd3d3b3f434d2fe7069eaa51 (patch) | |
tree | e14a47b2f213a3d363cb313f8921da2281ccbf2d /giscanner | |
parent | 5341da3520ef513e5a7c49e2d8737bb3f2341a3d (diff) | |
download | gobject-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.py | 12 |
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): |