if new_idx < 0:
return None
# Constructors don't return basic types
- if target_arg.type.name in type_names:
+ derefed = self._transformer.follow_aliases(target_arg.type.name,
+ self._names)
+ if derefed in type_names:
print "NOTE: Rejecting constructor returning basic: %r" \
% (func.symbol, )
return None
return self.resolve_param_type_full(ptype, self._names)
except KeyError, e:
return ptype
+
+ def follow_aliases(self, type_name, names):
+ while True:
+ resolved = names.aliases.get(type_name)
+ if resolved:
+ (ns, alias) = resolved
+ type_name = alias.target
+ else:
+ break
+ return type_name
<namespace name="foo" shared-library="foo">
<alias name="List" target="GLib.SList" c:type="FooList"/>
<alias name="XEvent" target="none" c:type="FooXEvent"/>
+ <alias name="ObjectCookie" target="any" c:type="FooObjectCookie"/>
<interface name="Interface"
c:type="FooInterface"
glib:type-name="FooInterface"
</parameter>
</parameters>
</method>
+ <method name="new_cookie" c:identifier="foo_object_new_cookie">
+ <return-value>
+ <type name="ObjectCookie" c:type="FooObjectCookie"/>
+ </return-value>
+ <parameters>
+ <parameter name="object">
+ <type name="Object" c:type="FooObject*"/>
+ </parameter>
+ <parameter name="target">
+ <type name="string" c:type="char*"/>
+ </parameter>
+ </parameters>
+ </method>
<property name="string">
<type name="string" c:type="gchararray"/>
</property>
void foo_object_with_tdef (FooObject *object, FooList *blah);
+typedef gpointer FooObjectCookie;
+
+FooObjectCookie foo_object_new_cookie (FooObject *object, const char *target);
struct _FooSubobject
{