perl-Glib r1080 - trunk
- From: tsch svn gnome org
- To: svn-commits-list gnome org
- Subject: perl-Glib r1080 - trunk
- Date: Thu, 5 Feb 2009 16:28:33 +0000 (UTC)
Author: tsch
Date: Thu Feb 5 16:28:33 2009
New Revision: 1080
URL: http://svn.gnome.org/viewvc/perl-Glib?rev=1080&view=rev
Log:
(gperl_closure_marshal): Synchronize the way signals with no return value are
handled with how it's done in gperl_signal_class_closure_marshal. This means
that Perl handlers for these kinds of signals are now always called in void
context, as they should be.
Modified:
trunk/ChangeLog
trunk/GClosure.xs
Modified: trunk/GClosure.xs
==============================================================================
--- trunk/GClosure.xs (original)
+++ trunk/GClosure.xs Thu Feb 5 16:28:33 2009
@@ -69,6 +69,7 @@
gpointer invocation_hint,
gpointer marshal_data)
{
+ gboolean want_return_value;
int flags;
guint i;
dGPERL_CLOSURE_MARSHAL_ARGS;
@@ -99,18 +100,15 @@
PUTBACK;
- flags = return_value ? G_SCALAR : G_DISCARD;
+ want_return_value = return_value && G_VALUE_TYPE (return_value);
+ flags = want_return_value ? G_SCALAR : G_VOID|G_DISCARD;
SPAGAIN;
GPERL_CLOSURE_MARSHAL_CALL (flags);
- if (return_value) {
- /* we need to remove the value to from the stack,
- * regardless of whether we do anything with it. */
- SV * sv = POPs;
- if (G_VALUE_TYPE (return_value))
- gperl_value_from_sv (return_value, sv);
+ if (want_return_value) {
+ gperl_value_from_sv (return_value, POPs);
PUTBACK; /* vitally important */
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]