summaryrefslogtreecommitdiff
path: root/giscanner/transformer.py
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@src.gnome.org>2008-11-10 23:58:49 +0000
committerOwen Taylor <otaylor@src.gnome.org>2008-11-10 23:58:49 +0000
commiteceeb044de0a3dd137fa15da7027ce706504bc94 (patch)
tree6585b29a4838c8456799bdf45eacc3f66def26c6 /giscanner/transformer.py
parent5229e674abb42c35c3ae5a548ce3a6e66215c1aa (diff)
downloadgobject-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.py7
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