The program below gets two errors
GLib-CRITICAL **: g_hash_table_lookup: assertion `hash_table != NULL' failed at
/home/gg/bug/glib-sig-ret-undef/foo.pl line 44.
[gperl_value_from_sv] FIXME: unhandled type - 0 ((null) fundamental for (null))
I think the first is gperl_fundamental_wrapper_class_from_type() called
when "wrapper_class_by_type" is NULL. Is that supposed to be at least
possible? Maybe when _gperl_sv_from_value_internal() gets a signal's
return value which is a new fundamental type from some C code, when
neither that new type nor anything else has ever yet told to
gperl_register_fundamental_full()?
I think the second is because gperl_signal_class_closure_marshal() tries
to gperl_value_from_sv() into a GValue which is G_TYPE_NONE. Dunno if a
return_value location like that is supposed to be allowed, but
gtk_binding_entry_activate() calls g_signal_emitv() that way.
I guess gperl_signal_class_closure_marshal() should do the same as
gperl_closure_marshal() does and don't store the sv to return_value if
the latter is G_TYPE_NONE. (gperl_closure_marshal() is of course what
you get if you specify a class_closure instead of the default name
"do_mysig".)
I suppose the alternative is to look at the signal info and do nothing
at all if the return_type is NONE, no matter what return_value arg the
caller tried to ask for. But I'm not up with what the duties of a
marshaller are supposed to be.
Incidentally there's only a problem if a do_mysig() like this returns a
non-undef value. But there's no requirement for handlers or class
handlers to explicitly return undef if the handler is spec'ed as
return_type G_TYPE_NONE, is there?
Attachment:
foo.pl
Description: Text Data
Attachment:
GType.xs.do-signame.diff
Description: Text Data