diff options
author | Owen Taylor <otaylor@src.gnome.org> | 2008-11-10 23:58:49 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2008-11-10 23:58:49 +0000 |
commit | eceeb044de0a3dd137fa15da7027ce706504bc94 (patch) | |
tree | 6585b29a4838c8456799bdf45eacc3f66def26c6 /giscanner/transformer.py | |
parent | 5229e674abb42c35c3ae5a548ce3a6e66215c1aa (diff) | |
download | gobject-introspection-eceeb044de0a3dd137fa15da7027ce706504bc94.tar.gz |
Bug 560248 – "disguised structures"
Certain types like GIConv and GdkAtom are pointers internally but don't
look like pointers when referenced. They have the form.
typedef struct _X *X;
Parse these as structures/records but mark them in the gir with a 'disguised'
attribute so that we know that they need special handling.
In the typelib treat them like any other structure.
svn path=/trunk/; revision=872
Diffstat (limited to 'giscanner/transformer.py')
-rw-r--r-- | giscanner/transformer.py | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/giscanner/transformer.py b/giscanner/transformer.py index c3d34d6a..c52b108d 100644 --- a/giscanner/transformer.py +++ b/giscanner/transformer.py @@ -343,6 +343,9 @@ class Transformer(object): if (ctype == CTYPE_POINTER and symbol.base_type.base_type.type == CTYPE_FUNCTION): node = self._create_callback(symbol) + elif (ctype == CTYPE_POINTER and + symbol.base_type.base_type.type == CTYPE_STRUCT): + node = self._create_typedef_struct(symbol, disguised=True) elif ctype == CTYPE_STRUCT: node = self._create_typedef_struct(symbol) elif ctype == CTYPE_UNION: @@ -567,9 +570,9 @@ class Transformer(object): const = Constant(name, type_name, value) return const - def _create_typedef_struct(self, symbol): + def _create_typedef_struct(self, symbol, disguised=False): name = self.remove_prefix(symbol.ident) - struct = Struct(name, symbol.ident) + struct = Struct(name, symbol.ident, disguised) self._typedefs_ns[symbol.ident] = struct self._create_struct(symbol) return struct |