perl-Glib r1081 - in branches/stable-1-20: . t
- From: tsch svn gnome org
- To: svn-commits-list gnome org
- Subject: perl-Glib r1081 - in branches/stable-1-20: . t
- Date: Thu, 5 Feb 2009 16:36:12 +0000 (UTC)
Author: tsch
Date: Thu Feb 5 16:36:12 2009
New Revision: 1081
URL: http://svn.gnome.org/viewvc/perl-Glib?rev=1081&view=rev
Log:
Merge r1078:1080 from trunk.
Added:
branches/stable-1-20/t/signal_marshal.t
- copied unchanged from r1079, /trunk/t/signal_marshal.t
Modified:
branches/stable-1-20/ (props changed)
branches/stable-1-20/ChangeLog
branches/stable-1-20/GClosure.xs
branches/stable-1-20/GType.xs
branches/stable-1-20/MANIFEST
Modified: branches/stable-1-20/GClosure.xs
==============================================================================
--- branches/stable-1-20/GClosure.xs (original)
+++ branches/stable-1-20/GClosure.xs Thu Feb 5 16:36:12 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 */
}
Modified: branches/stable-1-20/GType.xs
==============================================================================
--- branches/stable-1-20/GType.xs (original)
+++ branches/stable-1-20/GType.xs Thu Feb 5 16:36:12 2009
@@ -219,10 +219,13 @@
GPerlValueWrapperClass *
gperl_fundamental_wrapper_class_from_type (GType gtype)
{
- GPerlValueWrapperClass * res;
+ GPerlValueWrapperClass * res = NULL;
G_LOCK (wrapper_class_by_type);
- res = (GPerlValueWrapperClass *)
- g_hash_table_lookup (wrapper_class_by_type, (gpointer) gtype);
+ if (wrapper_class_by_type) {
+ res = (GPerlValueWrapperClass *)
+ g_hash_table_lookup (wrapper_class_by_type,
+ (gpointer) gtype);
+ }
G_UNLOCK (wrapper_class_by_type);
return res;
}
@@ -926,6 +929,7 @@
/* does the function exist? then call it. */
if (slot && GvCV (*slot)) {
SV * save_errsv;
+ gboolean want_return_value;
int flags;
dSP;
@@ -950,13 +954,14 @@
/* note: keep this as closely sync'ed as possible with the
* definition of GPERL_CLOSURE_MARSHAL_CALL. */
save_errsv = sv_2mortal (newSVsv (ERRSV));
- flags = G_EVAL | (return_value ? G_SCALAR : G_VOID|G_DISCARD);
+ want_return_value = return_value && G_VALUE_TYPE (return_value);
+ flags = G_EVAL | (want_return_value ? G_SCALAR : G_VOID|G_DISCARD);
call_method (SvPV_nolen (method_name), flags);
SPAGAIN;
if (SvTRUE (ERRSV)) {
gperl_run_exception_handlers ();
- } else if (return_value) {
+ } else if (want_return_value) {
gperl_value_from_sv (return_value, POPs);
PUTBACK;
}
Modified: branches/stable-1-20/MANIFEST
==============================================================================
--- branches/stable-1-20/MANIFEST (original)
+++ branches/stable-1-20/MANIFEST Thu Feb 5 16:36:12 2009
@@ -60,6 +60,7 @@
t/lazy-loader.t
t/make_helper.t
t/signal_emission_hooks.t
+t/signal_marshal.t
t/signal_query.t
t/tied_definedness.t
TODO
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]