perl-Glib r1080 - trunk



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]