diff options
-rw-r--r-- | giscanner/annotationparser.py | 19 | ||||
-rw-r--r-- | giscanner/glibtransformer.py | 4 | ||||
-rw-r--r-- | giscanner/transformer.py | 5 |
3 files changed, 16 insertions, 12 deletions
diff --git a/giscanner/annotationparser.py b/giscanner/annotationparser.py index 18c40edc..d91bb1c4 100644 --- a/giscanner/annotationparser.py +++ b/giscanner/annotationparser.py @@ -417,7 +417,8 @@ class AnnotationApplier(object): def _parse_callable(self, callable, block): self._parse_node_common(callable, block) for i, param in enumerate(callable.parameters): - if param.type.name not in ['DestroyNotify', 'GLib.DestroyNotify']: + if (param.type.ctype != 'GDestroyNotify' and + param.type.name != 'GLib.DestroyNotify'): continue if i < 2: break @@ -511,8 +512,8 @@ class AnnotationApplier(object): if scope: param.scope = scope.one() param.transfer = PARAM_TRANSFER_NONE - elif param.type.name in ['AsyncReadyCallback', - 'Gio.AsyncReadyCallback']: + elif (param.type.ctype == 'GAsyncReadyCallback' or + param.type.name == 'Gio.AsyncReadyCallback'): param.scope = OPT_SCOPE_ASYNC param.transfer = PARAM_TRANSFER_NONE @@ -661,9 +662,11 @@ class AnnotationApplier(object): def combiner(base, *rest): if not rest: return base - if base.name in ['GLib.List', 'GLib.SList'] and len(rest)==1: + if (base.name in ['GLib.List', 'GLib.SList'] or + base.ctype in ['GList*', 'GSList*']) and len(rest)==1: return List(base.name, base.ctype, *rest) - if base.name in ['GLib.HashTable'] and len(rest)==2: + if (base.name in ['GLib.HashTable'] or + base.ctype in ['GHashTable*']) and len(rest)==2: return Map(base.name, base.ctype, *rest) print "WARNING: throwing away type parameters:", type_str return base @@ -682,13 +685,15 @@ class AnnotationApplier(object): def _parse_element_type(self, parent, node, options): element_type_opt = options.get(OPT_ELEMENT_TYPE) element_type = element_type_opt.flat() - if node.type.name in ['GLib.List', 'GLib.SList']: + if (node.type.name in ['GLib.List', 'GLib.SList'] or + node.type.ctype in ['GList*', 'GSList*']): assert len(element_type) == 1 container_type = List( node.type.name, node.type.ctype, self._resolve(element_type[0])) - elif node.type.name in ['GLib.HashTable']: + elif (node.type.name in ['GLib.HashTable'] or + node.type.ctype in ['GHashTable*']): assert len(element_type) == 2 container_type = Map( node.type.name, diff --git a/giscanner/glibtransformer.py b/giscanner/glibtransformer.py index d44987b9..658be697 100644 --- a/giscanner/glibtransformer.py +++ b/giscanner/glibtransformer.py @@ -408,8 +408,8 @@ class GLibTransformer(object): return False if func.parameters: return False - if func.retval.type.name not in ['GLib.Quark', - 'GQuark']: + if (func.retval.type.name != 'GLib.Quark' and + func.retval.type.ctype != 'GQuark'): return False self._error_quark_functions.append(func) diff --git a/giscanner/transformer.py b/giscanner/transformer.py index bc5d943d..1024ee35 100644 --- a/giscanner/transformer.py +++ b/giscanner/transformer.py @@ -283,9 +283,8 @@ class Transformer(object): return False def _handle_destroy(self, param, destroy_idx, destroy_param): - if ((self._namespace.name == 'GLib' and - destroy_param.type.name == 'DestroyNotify') or - destroy_param.type.name == 'GLib.DestroyNotify'): + if (destroy_param.type.name == 'GLib.DestroyNotify' or + destroy_param.type.ctype == 'GDestroyNotify'): param.destroy_name = destroy_param.name param.destroy_index = destroy_idx return True |