[glib/signal-performance: 5/10] Support generating va marshallers in glib-genmarshal



commit 57051905f9279d2c8c27e9e50154c9565708f4d5
Author: Alexander Larsson <alexl redhat com>
Date:   Wed Feb 22 19:32:36 2012 +0100

    Support generating va marshallers in glib-genmarshal
    
    https://bugzilla.gnome.org/show_bug.cgi?id=661140

 gobject/glib-genmarshal.c |  232 +++++++++++--
 gobject/gmarshal.c        |  909 +++++++++++++++++++++++++++++++++++++++++++++
 gobject/gmarshal.h        |  154 ++++++++
 3 files changed, 1272 insertions(+), 23 deletions(-)
---
diff --git a/gobject/glib-genmarshal.c b/gobject/glib-genmarshal.c
index d79ae79..2283b26 100644
--- a/gobject/glib-genmarshal.c
+++ b/gobject/glib-genmarshal.c
@@ -50,7 +50,12 @@ typedef struct
   gchar	      *keyword;		/* marhaller list keyword [MY_STRING] */
   const gchar *sig_name;	/* signature name [STRING] */
   const gchar *ctype;		/* C type name [gchar*] */
+  const gchar *promoted_ctype;	/* promoted C type name [gchar*] */
   const gchar *getter;		/* value getter function [g_value_get_string] */
+  const gchar *box;		/* value box function [g_strdup] */
+  const gchar *unbox;		/* value unbox function [g_free] */
+  gboolean     box_ignores_static;  /* Wether the box/unbox functions ignore the static_scope */
+  gboolean     box_takes_type;  /* Wether the box/unbox functions take a type arg */
 } InArgument;
 typedef struct
 {
@@ -122,6 +127,7 @@ static FILE             *fout = NULL;
 static gboolean		 gen_cheader = FALSE;
 static gboolean		 gen_cbody = FALSE;
 static gboolean          gen_internal = FALSE;
+static gboolean		 gen_valist = FALSE;
 static gboolean		 skip_ploc = FALSE;
 static gboolean		 std_includes = TRUE;
 static gint              exit_status = 0;
@@ -184,30 +190,30 @@ static gboolean
 complete_in_arg (InArgument *iarg)
 {
   static const InArgument args[] = {
-    /* keyword		sig_name	ctype		getter			*/
-    { "VOID",		"VOID",		"void",		NULL,			},
-    { "BOOLEAN",	"BOOLEAN",	"gboolean",	"g_marshal_value_peek_boolean",	},
-    { "CHAR",		"CHAR",		"gchar",	"g_marshal_value_peek_char",	},
-    { "UCHAR",		"UCHAR",	"guchar",	"g_marshal_value_peek_uchar",	},
-    { "INT",		"INT",		"gint",		"g_marshal_value_peek_int",	},
-    { "UINT",		"UINT",		"guint",	"g_marshal_value_peek_uint",	},
-    { "LONG",		"LONG",		"glong",	"g_marshal_value_peek_long",	},
-    { "ULONG",		"ULONG",	"gulong",	"g_marshal_value_peek_ulong",	},
-    { "INT64",		"INT64",	"gint64",       "g_marshal_value_peek_int64",	},
-    { "UINT64",		"UINT64",	"guint64",	"g_marshal_value_peek_uint64",	},
-    { "ENUM",		"ENUM",		"gint",		"g_marshal_value_peek_enum",	},
-    { "FLAGS",		"FLAGS",	"guint",	"g_marshal_value_peek_flags",	},
-    { "FLOAT",		"FLOAT",	"gfloat",	"g_marshal_value_peek_float",	},
-    { "DOUBLE",		"DOUBLE",	"gdouble",	"g_marshal_value_peek_double",	},
-    { "STRING",		"STRING",	"gpointer",	"g_marshal_value_peek_string",	},
-    { "PARAM",		"PARAM",	"gpointer",	"g_marshal_value_peek_param",	},
-    { "BOXED",		"BOXED",	"gpointer",	"g_marshal_value_peek_boxed",	},
-    { "POINTER",	"POINTER",	"gpointer",	"g_marshal_value_peek_pointer",	},
-    { "OBJECT",		"OBJECT",	"gpointer",	"g_marshal_value_peek_object",	},
-    { "VARIANT",	"VARIANT",	"gpointer",	"g_marshal_value_peek_variant",	},
+    /* keyword		sig_name	ctype		promoted        getter			*/
+    { "VOID",		"VOID",		"void",		"void",		NULL,			},
+    { "BOOLEAN",	"BOOLEAN",	"gboolean",	"gboolean",	"g_marshal_value_peek_boolean",	},
+    { "CHAR",		"CHAR",		"gchar",	"gint",		"g_marshal_value_peek_char",	},
+    { "UCHAR",		"UCHAR",	"guchar",	"guint",	"g_marshal_value_peek_uchar",	},
+    { "INT",		"INT",		"gint",		"gint",		"g_marshal_value_peek_int",	},
+    { "UINT",		"UINT",		"guint",	"guint",	"g_marshal_value_peek_uint",	},
+    { "LONG",		"LONG",		"glong",	"glong",	"g_marshal_value_peek_long",	},
+    { "ULONG",		"ULONG",	"gulong",	"gulong",	"g_marshal_value_peek_ulong",	},
+    { "INT64",		"INT64",	"gint64",       "gint64",	"g_marshal_value_peek_int64",	},
+    { "UINT64",		"UINT64",	"guint64",	"guint64",	"g_marshal_value_peek_uint64",	},
+    { "ENUM",		"ENUM",		"gint",		"gint",		"g_marshal_value_peek_enum",	},
+    { "FLAGS",		"FLAGS",	"guint",	"guint",	"g_marshal_value_peek_flags",	},
+    { "FLOAT",		"FLOAT",	"gfloat",	"gdouble",	"g_marshal_value_peek_float",	},
+    { "DOUBLE",		"DOUBLE",	"gdouble",	"gdouble",	"g_marshal_value_peek_double",	},
+    { "STRING",		"STRING",	"gpointer",	"gpointer",	"g_marshal_value_peek_string",	"g_strdup", "g_free"},
+    { "PARAM",		"PARAM",	"gpointer",	"gpointer",	"g_marshal_value_peek_param",	"g_param_spec_ref", "g_param_spec_unref"},
+    { "BOXED",		"BOXED",	"gpointer",	"gpointer",	"g_marshal_value_peek_boxed",	"g_boxed_copy", "g_boxed_free", FALSE, TRUE},
+    { "POINTER",	"POINTER",	"gpointer",	"gpointer",	"g_marshal_value_peek_pointer",	},
+    { "OBJECT",		"OBJECT",	"gpointer",	"gpointer",	"g_marshal_value_peek_object",	"g_object_ref", "g_object_unref", TRUE},
+    { "VARIANT",	"VARIANT",	"gpointer",	"gpointer",	"g_marshal_value_peek_variant",	"g_variant_ref_sink", "g_variant_unref"},
     /* deprecated: */
-    { "NONE",		"VOID",		"void",		NULL,			},
-    { "BOOL",		"BOOLEAN",	"gboolean",	"g_marshal_value_peek_boolean",	},
+    { "NONE",		"VOID",		"void",		"void",		NULL,			},
+    { "BOOL",		"BOOLEAN",	"gboolean",	"gboolean",	"g_marshal_value_peek_boolean",	},
   };
   guint i;
 
@@ -218,7 +224,12 @@ complete_in_arg (InArgument *iarg)
       {
 	iarg->sig_name = args[i].sig_name;
 	iarg->ctype = args[i].ctype;
+	iarg->promoted_ctype = args[i].promoted_ctype;
 	iarg->getter = args[i].getter;
+	iarg->box = args[i].box;
+	iarg->unbox = args[i].unbox;
+	iarg->box_ignores_static = args[i].box_ignores_static;
+	iarg->box_takes_type = args[i].box_takes_type;
 
 	return TRUE;
       }
@@ -357,6 +368,7 @@ generate_marshal (const gchar *signame,
       g_free (tmp);
     }
 
+  /* GValue marshaller */
   if (gen_cheader && have_std_marshaller)
     {
       g_fprintf (fout, "#define %s_%s\t%s_%s\n", marshaller_prefix, signame, std_marshaller_prefix, signame);
@@ -459,6 +471,174 @@ generate_marshal (const gchar *signame,
       /* cfile marshal footer */
       g_fprintf (fout, "}\n");
     }
+
+
+  /* vararg marshaller */
+  if (gen_cheader && gen_valist && have_std_marshaller)
+    {
+      g_fprintf (fout, "#define %s_%sv\t%s_%sv\n", marshaller_prefix, signame, std_marshaller_prefix, signame);
+    }
+  if (gen_cheader && gen_valist && !have_std_marshaller)
+    {
+      ind = g_fprintf (fout, gen_internal ? "G_GNUC_INTERNAL " : "extern ");
+      ind += g_fprintf (fout, "void ");
+      ind += g_fprintf (fout, "%s_%sv (", marshaller_prefix, signame);
+      g_fprintf (fout,   "GClosure     *closure,\n");
+      g_fprintf (fout, "%sGValue       *return_value,\n", indent (ind));
+      g_fprintf (fout, "%sgpointer      instance,\n", indent (ind));
+      g_fprintf (fout, "%sva_list       args,\n", indent (ind));
+      g_fprintf (fout, "%sgpointer      marshal_data,\n", indent (ind));
+      g_fprintf (fout, "%sint           n_params,\n", indent (ind));
+      g_fprintf (fout, "%sGType        *param_types);\n", indent (ind));
+    }
+  if (gen_cbody && gen_valist && !have_std_marshaller)
+    {
+      gint i;
+      gboolean has_arg;
+
+      g_fprintf (fout, "void\n");
+      ind = g_fprintf (fout, "%s_%sv (", marshaller_prefix, signame);
+      g_fprintf (fout,   "GClosure     *closure,\n");
+      g_fprintf (fout, "%sGValue       *return_value,\n", indent (ind));
+      g_fprintf (fout, "%sgpointer      instance,\n", indent (ind));
+      g_fprintf (fout, "%sva_list       args,\n", indent (ind));
+      g_fprintf (fout, "%sgpointer      marshal_data,\n", indent (ind));
+      g_fprintf (fout, "%sint           n_params,\n", indent (ind));
+      g_fprintf (fout, "%sGType        *param_types)\n", indent (ind));
+      g_fprintf (fout, "{\n");
+
+      ind = g_fprintf (fout, "  typedef %s (*GMarshalFunc_%s) (", sig->rarg->ctype, signame);
+      g_fprintf (fout, "%s instance", pad ("gpointer"));
+      for (a = 0, node = sig->args; node; node = node->next)
+	{
+	  InArgument *iarg = node->data;
+
+	  if (iarg->getter)
+	    g_fprintf (fout, ",\n%s%s arg_%d", indent (ind), pad (iarg->ctype), a++);
+	}
+      g_fprintf (fout, ",\n%s%s data);\n", indent (ind), pad ("gpointer"));
+      g_fprintf (fout, "  GCClosure *cc = (GCClosure*) closure;\n");
+      g_fprintf (fout, "  gpointer data1, data2;\n");
+      g_fprintf (fout, "  GMarshalFunc_%s callback;\n", signame);
+      has_arg = FALSE;
+
+      i = 0;
+      for (node = sig->args; node; node = node->next)
+	{
+	  InArgument *iarg = node->data;
+
+	  if (iarg->getter)
+	    {
+	      g_fprintf (fout, "  %s arg%i;\n", iarg->ctype, i++);
+	      has_arg = TRUE;
+	    }
+	}
+      if (has_arg)
+	g_fprintf (fout, "  va_list args_copy;\n");
+
+      if (sig->rarg->setter)
+	g_fprintf (fout, "  %s v_return;\n", sig->rarg->ctype);
+
+      if (sig->rarg->setter)
+        {
+          g_fprintf (fout, "\n");
+          g_fprintf (fout, "  g_return_if_fail (return_value != NULL);\n");
+        }
+
+      /* cfile marshal data1, data2 and callback setup */
+      if (has_arg)
+	{
+	  g_fprintf (fout, "\n");
+	  g_fprintf (fout, "  va_copy (args_copy, args);\n");
+	  i = 0;
+	  for (node = sig->args; node; node = node->next)
+	    {
+	      InArgument *iarg = node->data;
+
+	      if (iarg->getter)
+		{
+		  g_fprintf (fout, "  arg%i = (%s) va_arg (args_copy, %s);\n",
+			     i, iarg->ctype, iarg->promoted_ctype);
+
+		  if (iarg->box != NULL)
+		    {
+		      g_fprintf (fout, "  if (");
+		      if (!iarg->box_ignores_static)
+			g_fprintf (fout, "(param_types[%i] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && ", i);
+		      g_fprintf (fout, "arg%i != NULL)\n  ", i);
+		      if (iarg->box_takes_type)
+			g_fprintf (fout,
+				   "  arg%i = %s (param_types[%i] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg%i);\n",
+				   i, iarg->box, i, i);
+		      else
+			g_fprintf (fout,
+				   "  arg%i = %s (arg%i);\n",
+				   i, iarg->box, i);
+		    }
+		}
+	      i++;
+	    }
+	  g_fprintf (fout, "  va_end (args_copy);\n");
+	}
+
+      g_fprintf (fout, "\n");
+      /* cfile marshal data1, data2 and callback setup */
+      g_fprintf (fout, "  if (G_CCLOSURE_SWAP_DATA (closure))\n    {\n");
+      g_fprintf (fout, "      data1 = closure->data;\n");
+      g_fprintf (fout, "      data2 = instance;\n");
+      g_fprintf (fout, "    }\n  else\n    {\n");
+      g_fprintf (fout, "      data1 = instance;\n");
+      g_fprintf (fout, "      data2 = closure->data;\n");
+      g_fprintf (fout, "    }\n");
+      g_fprintf (fout, "  callback = (GMarshalFunc_%s) (marshal_data ? marshal_data : cc->callback);\n", signame);
+
+      /* cfile marshal callback action */
+      g_fprintf (fout, "\n");
+      ind = g_fprintf (fout, " %s callback (", sig->rarg->setter ? " v_return =" : "");
+      g_fprintf (fout, "data1");
+
+      i = 0;
+      for (node = sig->args; node; node = node->next)
+	{
+	  InArgument *iarg = node->data;
+
+	  if (iarg->getter)
+	    g_fprintf (fout, ",\n%sarg%i", indent (ind), i++);
+	}
+      g_fprintf (fout, ",\n%sdata2);\n", indent (ind));
+
+      i = 0;
+      for (node = sig->args; node; node = node->next)
+	{
+	  InArgument *iarg = node->data;
+
+	  if (iarg->unbox)
+	    {
+	      g_fprintf (fout, "  if (");
+	      if (!iarg->box_ignores_static)
+		g_fprintf (fout, "(param_types[%i] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && ", i);
+	      g_fprintf (fout, "arg%i != NULL)\n  ", i);
+	      if (iarg->box_takes_type)
+		g_fprintf (fout,
+			   "  %s (param_types[%i] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg%i);\n",
+			   iarg->unbox, i, i);
+	      else
+		g_fprintf (fout,
+			   "  %s (arg%i);\n",
+			   iarg->unbox, i);
+	    }
+	  i++;
+	}
+
+      /* cfile marshal return value storage */
+      if (sig->rarg->setter)
+	{
+	  g_fprintf (fout, "\n");
+	  g_fprintf (fout, "  %s (return_value, v_return);\n", sig->rarg->setter);
+	}
+
+      g_fprintf (fout, "}\n\n");
+    }
 }
 
 static void
@@ -802,6 +982,11 @@ parse_args (gint    *argc_p,
 	  gen_internal = TRUE;
 	  argv[i] = NULL;
 	}
+      else if (strcmp ("--valist-marshallers", argv[i]) == 0)
+	{
+	  gen_valist = TRUE;
+	  argv[i] = NULL;
+	}
       else if ((strcmp ("--prefix", argv[i]) == 0) ||
 	       (strncmp ("--prefix=", argv[i], 9) == 0))
 	{
@@ -890,6 +1075,7 @@ print_blurb (FILE    *bout,
       g_fprintf (bout, "  --skip-source              Skip source location comments\n");
       g_fprintf (bout, "  --stdinc, --nostdinc       Include/use standard marshallers\n");
       g_fprintf (bout, "  --internal                 Mark generated functions as internal\n");
+      g_fprintf (bout, "  --valist-marshallers       Generate va_list marshallers\n");
       g_fprintf (bout, "  -v, --version              Print version informations\n");
       g_fprintf (bout, "  --g-fatal-warnings         Make warnings fatal (abort)\n");
     }
diff --git a/gobject/gmarshal.c b/gobject/gmarshal.c
index c7bcce4..ce029ca 100644
--- a/gobject/gmarshal.c
+++ b/gobject/gmarshal.c
@@ -85,6 +85,37 @@ g_cclosure_marshal_VOID__VOID (GClosure     *closure,
   callback (data1,
             data2);
 }
+void
+g_cclosure_marshal_VOID__VOIDv (GClosure     *closure,
+                                GValue       *return_value,
+                                gpointer      instance,
+                                va_list       args,
+                                gpointer      marshal_data,
+                                int           n_params,
+                                GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__VOID) (gpointer     instance,
+                                           gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__VOID callback;
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__VOID) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            data2);
+}
+
 
 /* VOID:BOOLEAN (./gmarshal.list:7) */
 void
@@ -120,6 +151,45 @@ g_cclosure_marshal_VOID__BOOLEAN (GClosure     *closure,
             g_marshal_value_peek_boolean (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__BOOLEANv (GClosure     *closure,
+                                   GValue       *return_value,
+                                   gpointer      instance,
+                                   va_list       args,
+                                   gpointer      marshal_data,
+                                   int           n_params,
+                                   GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__BOOLEAN) (gpointer     instance,
+                                              gboolean     arg_0,
+                                              gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__BOOLEAN callback;
+  gboolean arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (gboolean) va_arg (args_copy, gboolean);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__BOOLEAN) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+}
+
 
 /* VOID:CHAR (./gmarshal.list:8) */
 void
@@ -155,6 +225,45 @@ g_cclosure_marshal_VOID__CHAR (GClosure     *closure,
             g_marshal_value_peek_char (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__CHARv (GClosure     *closure,
+                                GValue       *return_value,
+                                gpointer      instance,
+                                va_list       args,
+                                gpointer      marshal_data,
+                                int           n_params,
+                                GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__CHAR) (gpointer     instance,
+                                           gchar        arg_0,
+                                           gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__CHAR callback;
+  gchar arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (gchar) va_arg (args_copy, gint);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__CHAR) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+}
+
 
 /* VOID:UCHAR (./gmarshal.list:9) */
 void
@@ -190,6 +299,45 @@ g_cclosure_marshal_VOID__UCHAR (GClosure     *closure,
             g_marshal_value_peek_uchar (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__UCHARv (GClosure     *closure,
+                                 GValue       *return_value,
+                                 gpointer      instance,
+                                 va_list       args,
+                                 gpointer      marshal_data,
+                                 int           n_params,
+                                 GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__UCHAR) (gpointer     instance,
+                                            guchar       arg_0,
+                                            gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__UCHAR callback;
+  guchar arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (guchar) va_arg (args_copy, guint);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__UCHAR) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+}
+
 
 /* VOID:INT (./gmarshal.list:10) */
 void
@@ -225,6 +373,45 @@ g_cclosure_marshal_VOID__INT (GClosure     *closure,
             g_marshal_value_peek_int (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__INTv (GClosure     *closure,
+                               GValue       *return_value,
+                               gpointer      instance,
+                               va_list       args,
+                               gpointer      marshal_data,
+                               int           n_params,
+                               GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__INT) (gpointer     instance,
+                                          gint         arg_0,
+                                          gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__INT callback;
+  gint arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (gint) va_arg (args_copy, gint);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__INT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+}
+
 
 /* VOID:UINT (./gmarshal.list:11) */
 void
@@ -260,6 +447,45 @@ g_cclosure_marshal_VOID__UINT (GClosure     *closure,
             g_marshal_value_peek_uint (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__UINTv (GClosure     *closure,
+                                GValue       *return_value,
+                                gpointer      instance,
+                                va_list       args,
+                                gpointer      marshal_data,
+                                int           n_params,
+                                GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__UINT) (gpointer     instance,
+                                           guint        arg_0,
+                                           gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__UINT callback;
+  guint arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (guint) va_arg (args_copy, guint);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__UINT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+}
+
 
 /* VOID:LONG (./gmarshal.list:12) */
 void
@@ -295,6 +521,45 @@ g_cclosure_marshal_VOID__LONG (GClosure     *closure,
             g_marshal_value_peek_long (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__LONGv (GClosure     *closure,
+                                GValue       *return_value,
+                                gpointer      instance,
+                                va_list       args,
+                                gpointer      marshal_data,
+                                int           n_params,
+                                GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__LONG) (gpointer     instance,
+                                           glong        arg_0,
+                                           gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__LONG callback;
+  glong arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (glong) va_arg (args_copy, glong);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__LONG) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+}
+
 
 /* VOID:ULONG (./gmarshal.list:13) */
 void
@@ -330,6 +595,45 @@ g_cclosure_marshal_VOID__ULONG (GClosure     *closure,
             g_marshal_value_peek_ulong (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__ULONGv (GClosure     *closure,
+                                 GValue       *return_value,
+                                 gpointer      instance,
+                                 va_list       args,
+                                 gpointer      marshal_data,
+                                 int           n_params,
+                                 GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__ULONG) (gpointer     instance,
+                                            gulong       arg_0,
+                                            gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__ULONG callback;
+  gulong arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (gulong) va_arg (args_copy, gulong);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__ULONG) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+}
+
 
 /* VOID:ENUM (./gmarshal.list:14) */
 void
@@ -365,6 +669,45 @@ g_cclosure_marshal_VOID__ENUM (GClosure     *closure,
             g_marshal_value_peek_enum (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__ENUMv (GClosure     *closure,
+                                GValue       *return_value,
+                                gpointer      instance,
+                                va_list       args,
+                                gpointer      marshal_data,
+                                int           n_params,
+                                GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__ENUM) (gpointer     instance,
+                                           gint         arg_0,
+                                           gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__ENUM callback;
+  gint arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (gint) va_arg (args_copy, gint);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__ENUM) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+}
+
 
 /* VOID:FLAGS (./gmarshal.list:15) */
 void
@@ -400,6 +743,45 @@ g_cclosure_marshal_VOID__FLAGS (GClosure     *closure,
             g_marshal_value_peek_flags (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__FLAGSv (GClosure     *closure,
+                                 GValue       *return_value,
+                                 gpointer      instance,
+                                 va_list       args,
+                                 gpointer      marshal_data,
+                                 int           n_params,
+                                 GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__FLAGS) (gpointer     instance,
+                                            guint        arg_0,
+                                            gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__FLAGS callback;
+  guint arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (guint) va_arg (args_copy, guint);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__FLAGS) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+}
+
 
 /* VOID:FLOAT (./gmarshal.list:16) */
 void
@@ -435,6 +817,45 @@ g_cclosure_marshal_VOID__FLOAT (GClosure     *closure,
             g_marshal_value_peek_float (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__FLOATv (GClosure     *closure,
+                                 GValue       *return_value,
+                                 gpointer      instance,
+                                 va_list       args,
+                                 gpointer      marshal_data,
+                                 int           n_params,
+                                 GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__FLOAT) (gpointer     instance,
+                                            gfloat       arg_0,
+                                            gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__FLOAT callback;
+  gfloat arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (gfloat) va_arg (args_copy, gdouble);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__FLOAT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+}
+
 
 /* VOID:DOUBLE (./gmarshal.list:17) */
 void
@@ -470,6 +891,45 @@ g_cclosure_marshal_VOID__DOUBLE (GClosure     *closure,
             g_marshal_value_peek_double (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__DOUBLEv (GClosure     *closure,
+                                  GValue       *return_value,
+                                  gpointer      instance,
+                                  va_list       args,
+                                  gpointer      marshal_data,
+                                  int           n_params,
+                                  GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__DOUBLE) (gpointer     instance,
+                                             gdouble      arg_0,
+                                             gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__DOUBLE callback;
+  gdouble arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (gdouble) va_arg (args_copy, gdouble);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__DOUBLE) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+}
+
 
 /* VOID:STRING (./gmarshal.list:18) */
 void
@@ -505,6 +965,49 @@ g_cclosure_marshal_VOID__STRING (GClosure     *closure,
             g_marshal_value_peek_string (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__STRINGv (GClosure     *closure,
+                                  GValue       *return_value,
+                                  gpointer      instance,
+                                  va_list       args,
+                                  gpointer      marshal_data,
+                                  int           n_params,
+                                  GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__STRING) (gpointer     instance,
+                                             gpointer     arg_0,
+                                             gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING callback;
+  gpointer arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_strdup (arg0);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_free (arg0);
+}
+
 
 /* VOID:PARAM (./gmarshal.list:19) */
 void
@@ -540,6 +1043,49 @@ g_cclosure_marshal_VOID__PARAM (GClosure     *closure,
             g_marshal_value_peek_param (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__PARAMv (GClosure     *closure,
+                                 GValue       *return_value,
+                                 gpointer      instance,
+                                 va_list       args,
+                                 gpointer      marshal_data,
+                                 int           n_params,
+                                 GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__PARAM) (gpointer     instance,
+                                            gpointer     arg_0,
+                                            gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__PARAM callback;
+  gpointer arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_param_spec_ref (arg0);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__PARAM) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_param_spec_unref (arg0);
+}
+
 
 /* VOID:BOXED (./gmarshal.list:20) */
 void
@@ -575,6 +1121,49 @@ g_cclosure_marshal_VOID__BOXED (GClosure     *closure,
             g_marshal_value_peek_boxed (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__BOXEDv (GClosure     *closure,
+                                 GValue       *return_value,
+                                 gpointer      instance,
+                                 va_list       args,
+                                 gpointer      marshal_data,
+                                 int           n_params,
+                                 GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__BOXED) (gpointer     instance,
+                                            gpointer     arg_0,
+                                            gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__BOXED callback;
+  gpointer arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_boxed_copy (param_types[0] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg0);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_boxed_free (param_types[0] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg0);
+}
+
 
 /* VOID:POINTER (./gmarshal.list:21) */
 void
@@ -610,6 +1199,45 @@ g_cclosure_marshal_VOID__POINTER (GClosure     *closure,
             g_marshal_value_peek_pointer (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__POINTERv (GClosure     *closure,
+                                   GValue       *return_value,
+                                   gpointer      instance,
+                                   va_list       args,
+                                   gpointer      marshal_data,
+                                   int           n_params,
+                                   GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__POINTER) (gpointer     instance,
+                                              gpointer     arg_0,
+                                              gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__POINTER callback;
+  gpointer arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+}
+
 
 /* VOID:OBJECT (./gmarshal.list:22) */
 void
@@ -645,6 +1273,49 @@ g_cclosure_marshal_VOID__OBJECT (GClosure     *closure,
             g_marshal_value_peek_object (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__OBJECTv (GClosure     *closure,
+                                  GValue       *return_value,
+                                  gpointer      instance,
+                                  va_list       args,
+                                  gpointer      marshal_data,
+                                  int           n_params,
+                                  GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT) (gpointer     instance,
+                                             gpointer     arg_0,
+                                             gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__OBJECT callback;
+  gpointer arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg0 != NULL)
+    arg0 = g_object_ref (arg0);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+  if (arg0 != NULL)
+    g_object_unref (arg0);
+}
+
 
 /* VOID:VARIANT (./gmarshal.list:23) */
 void
@@ -680,6 +1351,49 @@ g_cclosure_marshal_VOID__VARIANT (GClosure     *closure,
             g_marshal_value_peek_variant (param_values + 1),
             data2);
 }
+void
+g_cclosure_marshal_VOID__VARIANTv (GClosure     *closure,
+                                   GValue       *return_value,
+                                   gpointer      instance,
+                                   va_list       args,
+                                   gpointer      marshal_data,
+                                   int           n_params,
+                                   GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__VARIANT) (gpointer     instance,
+                                              gpointer     arg_0,
+                                              gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__VARIANT callback;
+  gpointer arg0;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_variant_ref_sink (arg0);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__VARIANT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_variant_unref (arg0);
+}
+
 
 /* VOID:UINT,POINTER (./gmarshal.list:26) */
 void
@@ -717,6 +1431,49 @@ g_cclosure_marshal_VOID__UINT_POINTER (GClosure     *closure,
             g_marshal_value_peek_pointer (param_values + 2),
             data2);
 }
+void
+g_cclosure_marshal_VOID__UINT_POINTERv (GClosure     *closure,
+                                        GValue       *return_value,
+                                        gpointer      instance,
+                                        va_list       args,
+                                        gpointer      marshal_data,
+                                        int           n_params,
+                                        GType        *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__UINT_POINTER) (gpointer     instance,
+                                                   guint        arg_0,
+                                                   gpointer     arg_1,
+                                                   gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__UINT_POINTER callback;
+  guint arg0;
+  gpointer arg1;
+  va_list args_copy;
+
+  va_copy (args_copy, args);
+  arg0 = (guint) va_arg (args_copy, guint);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__UINT_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            data2);
+}
+
 
 /* BOOL:FLAGS (./gmarshal.list:27) */
 void
@@ -756,6 +1513,50 @@ g_cclosure_marshal_BOOLEAN__FLAGS (GClosure     *closure,
 
   g_value_set_boolean (return_value, v_return);
 }
+void
+g_cclosure_marshal_BOOLEAN__FLAGSv (GClosure     *closure,
+                                    GValue       *return_value,
+                                    gpointer      instance,
+                                    va_list       args,
+                                    gpointer      marshal_data,
+                                    int           n_params,
+                                    GType        *param_types)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__FLAGS) (gpointer     instance,
+                                                   guint        arg_0,
+                                                   gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__FLAGS callback;
+  guint arg0;
+  va_list args_copy;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+
+  va_copy (args_copy, args);
+  arg0 = (guint) va_arg (args_copy, guint);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__FLAGS) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       arg0,
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
 
 /* STRING:OBJECT,POINTER (./gmarshal.list:28) */
 void
@@ -797,6 +1598,58 @@ g_cclosure_marshal_STRING__OBJECT_POINTER (GClosure     *closure,
 
   g_value_take_string (return_value, v_return);
 }
+void
+g_cclosure_marshal_STRING__OBJECT_POINTERv (GClosure     *closure,
+                                            GValue       *return_value,
+                                            gpointer      instance,
+                                            va_list       args,
+                                            gpointer      marshal_data,
+                                            int           n_params,
+                                            GType        *param_types)
+{
+  typedef gchar* (*GMarshalFunc_STRING__OBJECT_POINTER) (gpointer     instance,
+                                                         gpointer     arg_0,
+                                                         gpointer     arg_1,
+                                                         gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_STRING__OBJECT_POINTER callback;
+  gpointer arg0;
+  gpointer arg1;
+  va_list args_copy;
+  gchar* v_return;
+
+  g_return_if_fail (return_value != NULL);
+
+  va_copy (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg0 != NULL)
+    arg0 = g_object_ref (arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_STRING__OBJECT_POINTER) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       arg0,
+                       arg1,
+                       data2);
+  if (arg0 != NULL)
+    g_object_unref (arg0);
+
+  g_value_take_string (return_value, v_return);
+}
+
 
 /* BOOL:BOXED,BOXED (./gmarshal.list:29) */
 void
@@ -838,4 +1691,60 @@ g_cclosure_marshal_BOOLEAN__BOXED_BOXED (GClosure     *closure,
 
   g_value_set_boolean (return_value, v_return);
 }
+void
+g_cclosure_marshal_BOOLEAN__BOXED_BOXEDv (GClosure     *closure,
+                                          GValue       *return_value,
+                                          gpointer      instance,
+                                          va_list       args,
+                                          gpointer      marshal_data,
+                                          int           n_params,
+                                          GType        *param_types)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_BOXED) (gpointer     instance,
+                                                         gpointer     arg_0,
+                                                         gpointer     arg_1,
+                                                         gpointer     data);
+  GCClosure *cc = (GCClosure*) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__BOXED_BOXED callback;
+  gpointer arg0;
+  gpointer arg1;
+  va_list args_copy;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+
+  va_copy (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_boxed_copy (param_types[0] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    arg1 = g_boxed_copy (param_types[1] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg1);
+  va_end (args_copy);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__BOXED_BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       arg0,
+                       arg1,
+                       data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_boxed_free (param_types[0] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg0);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    g_boxed_free (param_types[1] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg1);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
 
diff --git a/gobject/gmarshal.h b/gobject/gmarshal.h
index 1238c02..0c21be6 100644
--- a/gobject/gmarshal.h
+++ b/gobject/gmarshal.h
@@ -11,6 +11,13 @@ extern void g_cclosure_marshal_VOID__VOID (GClosure     *closure,
                                            const GValue *param_values,
                                            gpointer      invocation_hint,
                                            gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__VOIDv (GClosure     *closure,
+                                            GValue       *return_value,
+                                            gpointer      instance,
+                                            va_list       args,
+                                            gpointer      marshal_data,
+                                            int           n_params,
+                                            GType        *param_types);
 
 /* VOID:BOOLEAN (./gmarshal.list:7) */
 extern void g_cclosure_marshal_VOID__BOOLEAN (GClosure     *closure,
@@ -19,6 +26,13 @@ extern void g_cclosure_marshal_VOID__BOOLEAN (GClosure     *closure,
                                               const GValue *param_values,
                                               gpointer      invocation_hint,
                                               gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__BOOLEANv (GClosure     *closure,
+                                               GValue       *return_value,
+                                               gpointer      instance,
+                                               va_list       args,
+                                               gpointer      marshal_data,
+                                               int           n_params,
+                                               GType        *param_types);
 
 /* VOID:CHAR (./gmarshal.list:8) */
 extern void g_cclosure_marshal_VOID__CHAR (GClosure     *closure,
@@ -27,6 +41,13 @@ extern void g_cclosure_marshal_VOID__CHAR (GClosure     *closure,
                                            const GValue *param_values,
                                            gpointer      invocation_hint,
                                            gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__CHARv (GClosure     *closure,
+                                            GValue       *return_value,
+                                            gpointer      instance,
+                                            va_list       args,
+                                            gpointer      marshal_data,
+                                            int           n_params,
+                                            GType        *param_types);
 
 /* VOID:UCHAR (./gmarshal.list:9) */
 extern void g_cclosure_marshal_VOID__UCHAR (GClosure     *closure,
@@ -35,6 +56,13 @@ extern void g_cclosure_marshal_VOID__UCHAR (GClosure     *closure,
                                             const GValue *param_values,
                                             gpointer      invocation_hint,
                                             gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__UCHARv (GClosure     *closure,
+                                             GValue       *return_value,
+                                             gpointer      instance,
+                                             va_list       args,
+                                             gpointer      marshal_data,
+                                             int           n_params,
+                                             GType        *param_types);
 
 /* VOID:INT (./gmarshal.list:10) */
 extern void g_cclosure_marshal_VOID__INT (GClosure     *closure,
@@ -43,6 +71,13 @@ extern void g_cclosure_marshal_VOID__INT (GClosure     *closure,
                                           const GValue *param_values,
                                           gpointer      invocation_hint,
                                           gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__INTv (GClosure     *closure,
+                                           GValue       *return_value,
+                                           gpointer      instance,
+                                           va_list       args,
+                                           gpointer      marshal_data,
+                                           int           n_params,
+                                           GType        *param_types);
 
 /* VOID:UINT (./gmarshal.list:11) */
 extern void g_cclosure_marshal_VOID__UINT (GClosure     *closure,
@@ -51,6 +86,13 @@ extern void g_cclosure_marshal_VOID__UINT (GClosure     *closure,
                                            const GValue *param_values,
                                            gpointer      invocation_hint,
                                            gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__UINTv (GClosure     *closure,
+                                            GValue       *return_value,
+                                            gpointer      instance,
+                                            va_list       args,
+                                            gpointer      marshal_data,
+                                            int           n_params,
+                                            GType        *param_types);
 
 /* VOID:LONG (./gmarshal.list:12) */
 extern void g_cclosure_marshal_VOID__LONG (GClosure     *closure,
@@ -59,6 +101,13 @@ extern void g_cclosure_marshal_VOID__LONG (GClosure     *closure,
                                            const GValue *param_values,
                                            gpointer      invocation_hint,
                                            gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__LONGv (GClosure     *closure,
+                                            GValue       *return_value,
+                                            gpointer      instance,
+                                            va_list       args,
+                                            gpointer      marshal_data,
+                                            int           n_params,
+                                            GType        *param_types);
 
 /* VOID:ULONG (./gmarshal.list:13) */
 extern void g_cclosure_marshal_VOID__ULONG (GClosure     *closure,
@@ -67,6 +116,13 @@ extern void g_cclosure_marshal_VOID__ULONG (GClosure     *closure,
                                             const GValue *param_values,
                                             gpointer      invocation_hint,
                                             gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__ULONGv (GClosure     *closure,
+                                             GValue       *return_value,
+                                             gpointer      instance,
+                                             va_list       args,
+                                             gpointer      marshal_data,
+                                             int           n_params,
+                                             GType        *param_types);
 
 /* VOID:ENUM (./gmarshal.list:14) */
 extern void g_cclosure_marshal_VOID__ENUM (GClosure     *closure,
@@ -75,6 +131,13 @@ extern void g_cclosure_marshal_VOID__ENUM (GClosure     *closure,
                                            const GValue *param_values,
                                            gpointer      invocation_hint,
                                            gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__ENUMv (GClosure     *closure,
+                                            GValue       *return_value,
+                                            gpointer      instance,
+                                            va_list       args,
+                                            gpointer      marshal_data,
+                                            int           n_params,
+                                            GType        *param_types);
 
 /* VOID:FLAGS (./gmarshal.list:15) */
 extern void g_cclosure_marshal_VOID__FLAGS (GClosure     *closure,
@@ -83,6 +146,13 @@ extern void g_cclosure_marshal_VOID__FLAGS (GClosure     *closure,
                                             const GValue *param_values,
                                             gpointer      invocation_hint,
                                             gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__FLAGSv (GClosure     *closure,
+                                             GValue       *return_value,
+                                             gpointer      instance,
+                                             va_list       args,
+                                             gpointer      marshal_data,
+                                             int           n_params,
+                                             GType        *param_types);
 
 /* VOID:FLOAT (./gmarshal.list:16) */
 extern void g_cclosure_marshal_VOID__FLOAT (GClosure     *closure,
@@ -91,6 +161,13 @@ extern void g_cclosure_marshal_VOID__FLOAT (GClosure     *closure,
                                             const GValue *param_values,
                                             gpointer      invocation_hint,
                                             gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__FLOATv (GClosure     *closure,
+                                             GValue       *return_value,
+                                             gpointer      instance,
+                                             va_list       args,
+                                             gpointer      marshal_data,
+                                             int           n_params,
+                                             GType        *param_types);
 
 /* VOID:DOUBLE (./gmarshal.list:17) */
 extern void g_cclosure_marshal_VOID__DOUBLE (GClosure     *closure,
@@ -99,6 +176,13 @@ extern void g_cclosure_marshal_VOID__DOUBLE (GClosure     *closure,
                                              const GValue *param_values,
                                              gpointer      invocation_hint,
                                              gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__DOUBLEv (GClosure     *closure,
+                                              GValue       *return_value,
+                                              gpointer      instance,
+                                              va_list       args,
+                                              gpointer      marshal_data,
+                                              int           n_params,
+                                              GType        *param_types);
 
 /* VOID:STRING (./gmarshal.list:18) */
 extern void g_cclosure_marshal_VOID__STRING (GClosure     *closure,
@@ -107,6 +191,13 @@ extern void g_cclosure_marshal_VOID__STRING (GClosure     *closure,
                                              const GValue *param_values,
                                              gpointer      invocation_hint,
                                              gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__STRINGv (GClosure     *closure,
+                                              GValue       *return_value,
+                                              gpointer      instance,
+                                              va_list       args,
+                                              gpointer      marshal_data,
+                                              int           n_params,
+                                              GType        *param_types);
 
 /* VOID:PARAM (./gmarshal.list:19) */
 extern void g_cclosure_marshal_VOID__PARAM (GClosure     *closure,
@@ -115,6 +206,13 @@ extern void g_cclosure_marshal_VOID__PARAM (GClosure     *closure,
                                             const GValue *param_values,
                                             gpointer      invocation_hint,
                                             gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__PARAMv (GClosure     *closure,
+                                             GValue       *return_value,
+                                             gpointer      instance,
+                                             va_list       args,
+                                             gpointer      marshal_data,
+                                             int           n_params,
+                                             GType        *param_types);
 
 /* VOID:BOXED (./gmarshal.list:20) */
 extern void g_cclosure_marshal_VOID__BOXED (GClosure     *closure,
@@ -123,6 +221,13 @@ extern void g_cclosure_marshal_VOID__BOXED (GClosure     *closure,
                                             const GValue *param_values,
                                             gpointer      invocation_hint,
                                             gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__BOXEDv (GClosure     *closure,
+                                             GValue       *return_value,
+                                             gpointer      instance,
+                                             va_list       args,
+                                             gpointer      marshal_data,
+                                             int           n_params,
+                                             GType        *param_types);
 
 /* VOID:POINTER (./gmarshal.list:21) */
 extern void g_cclosure_marshal_VOID__POINTER (GClosure     *closure,
@@ -131,6 +236,13 @@ extern void g_cclosure_marshal_VOID__POINTER (GClosure     *closure,
                                               const GValue *param_values,
                                               gpointer      invocation_hint,
                                               gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__POINTERv (GClosure     *closure,
+                                               GValue       *return_value,
+                                               gpointer      instance,
+                                               va_list       args,
+                                               gpointer      marshal_data,
+                                               int           n_params,
+                                               GType        *param_types);
 
 /* VOID:OBJECT (./gmarshal.list:22) */
 extern void g_cclosure_marshal_VOID__OBJECT (GClosure     *closure,
@@ -139,6 +251,13 @@ extern void g_cclosure_marshal_VOID__OBJECT (GClosure     *closure,
                                              const GValue *param_values,
                                              gpointer      invocation_hint,
                                              gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__OBJECTv (GClosure     *closure,
+                                              GValue       *return_value,
+                                              gpointer      instance,
+                                              va_list       args,
+                                              gpointer      marshal_data,
+                                              int           n_params,
+                                              GType        *param_types);
 
 /* VOID:VARIANT (./gmarshal.list:23) */
 extern void g_cclosure_marshal_VOID__VARIANT (GClosure     *closure,
@@ -147,6 +266,13 @@ extern void g_cclosure_marshal_VOID__VARIANT (GClosure     *closure,
                                               const GValue *param_values,
                                               gpointer      invocation_hint,
                                               gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__VARIANTv (GClosure     *closure,
+                                               GValue       *return_value,
+                                               gpointer      instance,
+                                               va_list       args,
+                                               gpointer      marshal_data,
+                                               int           n_params,
+                                               GType        *param_types);
 
 /* VOID:UINT,POINTER (./gmarshal.list:26) */
 extern void g_cclosure_marshal_VOID__UINT_POINTER (GClosure     *closure,
@@ -155,6 +281,13 @@ extern void g_cclosure_marshal_VOID__UINT_POINTER (GClosure     *closure,
                                                    const GValue *param_values,
                                                    gpointer      invocation_hint,
                                                    gpointer      marshal_data);
+extern void g_cclosure_marshal_VOID__UINT_POINTERv (GClosure     *closure,
+                                                    GValue       *return_value,
+                                                    gpointer      instance,
+                                                    va_list       args,
+                                                    gpointer      marshal_data,
+                                                    int           n_params,
+                                                    GType        *param_types);
 
 /* BOOL:FLAGS (./gmarshal.list:27) */
 extern void g_cclosure_marshal_BOOLEAN__FLAGS (GClosure     *closure,
@@ -163,6 +296,13 @@ extern void g_cclosure_marshal_BOOLEAN__FLAGS (GClosure     *closure,
                                                const GValue *param_values,
                                                gpointer      invocation_hint,
                                                gpointer      marshal_data);
+extern void g_cclosure_marshal_BOOLEAN__FLAGSv (GClosure     *closure,
+                                                GValue       *return_value,
+                                                gpointer      instance,
+                                                va_list       args,
+                                                gpointer      marshal_data,
+                                                int           n_params,
+                                                GType        *param_types);
 #define g_cclosure_marshal_BOOL__FLAGS	g_cclosure_marshal_BOOLEAN__FLAGS
 
 /* STRING:OBJECT,POINTER (./gmarshal.list:28) */
@@ -172,6 +312,13 @@ extern void g_cclosure_marshal_STRING__OBJECT_POINTER (GClosure     *closure,
                                                        const GValue *param_values,
                                                        gpointer      invocation_hint,
                                                        gpointer      marshal_data);
+extern void g_cclosure_marshal_STRING__OBJECT_POINTERv (GClosure     *closure,
+                                                        GValue       *return_value,
+                                                        gpointer      instance,
+                                                        va_list       args,
+                                                        gpointer      marshal_data,
+                                                        int           n_params,
+                                                        GType        *param_types);
 
 /* BOOL:BOXED,BOXED (./gmarshal.list:29) */
 extern void g_cclosure_marshal_BOOLEAN__BOXED_BOXED (GClosure     *closure,
@@ -180,6 +327,13 @@ extern void g_cclosure_marshal_BOOLEAN__BOXED_BOXED (GClosure     *closure,
                                                      const GValue *param_values,
                                                      gpointer      invocation_hint,
                                                      gpointer      marshal_data);
+extern void g_cclosure_marshal_BOOLEAN__BOXED_BOXEDv (GClosure     *closure,
+                                                      GValue       *return_value,
+                                                      gpointer      instance,
+                                                      va_list       args,
+                                                      gpointer      marshal_data,
+                                                      int           n_params,
+                                                      GType        *param_types);
 #define g_cclosure_marshal_BOOL__BOXED_BOXED	g_cclosure_marshal_BOOLEAN__BOXED_BOXED
 
 G_END_DECLS



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]