Allow for methods in GLib
authorTomeu Vizoso <tomeu.vizoso@collabora.co.uk>
Wed, 9 Jun 2010 08:26:26 +0000 (10:26 +0200)
committerJohan Dahlin <johan@gnome.org>
Wed, 9 Jun 2010 11:38:04 +0000 (08:38 -0300)
* girepository/gitypelib.c: Don't complain about constructors
  returning types other than objects or interfaces if the container
  type isn't an object or interface itself.

* giscanner/glibtransformer.py: Don't give up parsing a method just
  because it's in the GLib namespace.

https://bugzilla.gnome.org/show_bug.cgi?id=621069

girepository/gitypelib.c
giscanner/glibtransformer.py

index 1b3f882..6aa3077 100644 (file)
@@ -832,13 +832,16 @@ validate_function_blob (ValidateContext *ctx,
       iface_type = get_type_blob (typelib, simple, error);
       if (!iface_type)
        return FALSE;
-      if (!(iface_type->tag == GI_TYPE_TAG_INTERFACE))
+      if (iface_type->tag != GI_TYPE_TAG_INTERFACE &&
+          (container_type == BLOB_TYPE_OBJECT ||
+           container_type == BLOB_TYPE_INTERFACE))
        {
          g_set_error (error,
                       G_TYPELIB_ERROR,
                       G_TYPELIB_ERROR_INVALID,
-                      "Invalid return type %d for constructor",
-                      iface_type->tag);
+                      "Invalid return type '%s' for constructor '%s'",
+                      g_type_tag_to_string (iface_type->tag),
+                      get_string_nofail (typelib, blob->symbol));
          return FALSE;
        }
     }
index 2e45b13..324a444 100644 (file)
@@ -487,9 +487,6 @@ class GLibTransformer(object):
         # already
         if func.symbol.endswith('_get_type'):
             return None
-        if self._namespace_name == 'GLib':
-            # No GObjects in GLib
-            return None
 
         if not is_method:
             target_arg = func.retval