[gobject-introspection] [scanner] Fix various hardcoded type name checks



commit b65d598f82d3cbdc56e3a94b42c1472bf3607c69
Author: Dan Winship <danw gnome org>
Date:   Wed Dec 9 16:38:57 2009 -0500

    [scanner] Fix various hardcoded type name checks
    
    Various places that check hardcoded type names were not always handling
    the case of the type being used from within its own library (in which
    case it won't have a type prefix). Make them more consistent.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=602512

 giscanner/annotationparser.py |   19 ++++++++++++-------
 giscanner/glibtransformer.py  |    4 ++--
 giscanner/transformer.py      |    5 ++---
 3 files changed, 16 insertions(+), 12 deletions(-)
---
diff --git a/giscanner/annotationparser.py b/giscanner/annotationparser.py
index 18c40ed..d91bb1c 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 d44987b..658be69 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 bc5d943..1024ee3 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



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]