Hello community,

here is the log from the commit of package perl-Glib-Object-Introspection for 
openSUSE:Factory checked in at 2019-12-12 23:17:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Glib-Object-Introspection (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Glib-Object-Introspection.new.4691 
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Glib-Object-Introspection"

Thu Dec 12 23:17:54 2019 rev:12 rq:755784 version:0.048

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/perl-Glib-Object-Introspection/perl-Glib-Object-Introspection.changes
    2019-08-29 17:17:58.183362926 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Glib-Object-Introspection.new.4691/perl-Glib-Object-Introspection.changes
  2019-12-12 23:17:57.374214597 +0100
@@ -1,0 +2,6 @@
+Wed Dec 11 03:09:07 UTC 2019 -  <timueller+p...@suse.de>
+
+- updated to 0.048
+   see /usr/share/doc/packages/perl-Glib-Object-Introspection/
+
+-------------------------------------------------------------------

Old:
----
  Glib-Object-Introspection-0.047.tar.gz

New:
----
  Glib-Object-Introspection-0.048.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Glib-Object-Introspection.spec ++++++
--- /var/tmp/diff_new_pack.A17Og4/_old  2019-12-12 23:17:57.930214546 +0100
+++ /var/tmp/diff_new_pack.A17Og4/_new  2019-12-12 23:17:57.934214547 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           perl-Glib-Object-Introspection
-Version:        0.047
+Version:        0.048
 Release:        0
 #Upstream:  This library is free software; you can redistribute it and/or 
modify it under the terms of the Lesser General Public License (LGPL). For more 
information, see http://www.fsf.org/licenses/lgpl.txt
 %define cpan_name Glib-Object-Introspection

++++++ Glib-Object-Introspection-0.047.tar.gz -> 
Glib-Object-Introspection-0.048.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Glib-Object-Introspection-0.047/GObjectIntrospection.xs 
new/Glib-Object-Introspection-0.048/GObjectIntrospection.xs
--- old/Glib-Object-Introspection-0.047/GObjectIntrospection.xs 2017-05-21 
21:02:28.000000000 +0200
+++ new/Glib-Object-Introspection-0.048/GObjectIntrospection.xs 2019-09-29 
03:48:36.000000000 +0200
@@ -17,14 +17,16 @@
  *
  */
 
-#include "build/gi-version.h"
-
 #include <gperl.h>
 #include <gperl_marshal.h>
 
 #include <girepository.h>
 #include <girffi.h>
 
+#ifndef GI_CHECK_VERSION
+# include "build/gi-version.h"
+#endif
+
 /* #define NOISY */
 #ifdef NOISY
 # define dwarn(msg...) G_STMT_START { \
@@ -160,6 +162,11 @@
        GPerlI11nInvocationInfo base;
 } GPerlI11nPerlInvocationInfo;
 
+typedef enum {
+       GPERL_I11N_MEMORY_SCOPE_IRRELEVANT,
+       GPERL_I11N_MEMORY_SCOPE_TEMPORARY,
+} GPerlI11nMemoryScope;
+
 /* callbacks */
 static GPerlI11nPerlCallbackInfo * create_perl_callback_closure_for_named_sub 
(GIBaseInfo *cb_info, gchar *sub_name);
 static GPerlI11nPerlCallbackInfo * create_perl_callback_closure (GIBaseInfo 
*cb_info, SV *code);
@@ -176,7 +183,7 @@
 static void clear_invocation_info (GPerlI11nInvocationInfo *iinfo);
 
 static void free_after_call (GPerlI11nInvocationInfo *iinfo,
-                             GFunc func, gpointer data);
+                             GDestroyNotify func, gpointer data);
 static void invoke_free_after_call_handlers (GPerlI11nInvocationInfo *iinfo);
 
 #if GI_CHECK_VERSION (1, 33, 10)
@@ -220,6 +227,7 @@
 static SV * interface_to_sv (GITypeInfo* info,
                              GIArgument *arg,
                              gboolean own,
+                             GPerlI11nMemoryScope mem_scope,
                              GPerlI11nInvocationInfo *iinfo);
 static void sv_to_interface (GIArgInfo * arg_info,
                              GITypeInfo * type_info,
@@ -242,6 +250,7 @@
 static SV * arg_to_sv (GIArgument * arg,
                        GITypeInfo * info,
                        GITransfer transfer,
+                       GPerlI11nMemoryScope mem_scope,
                        GPerlI11nInvocationInfo *iinfo);
 
 static gpointer sv_to_callback (GIArgInfo * arg_info, GITypeInfo * type_info, 
SV * sv, GPerlI11nInvocationInfo * invocation_info);
@@ -592,7 +601,11 @@
        /* FIXME: What am I suppossed to do with the return value? */
        g_constant_info_get_value (info, &value);
        /* No PUTBACK/SPAGAIN needed here. */
-       RETVAL = arg_to_sv (&value, type_info, GI_TRANSFER_NOTHING, NULL);
+       RETVAL = arg_to_sv (&value,
+                           type_info,
+                           GI_TRANSFER_NOTHING,
+                           GPERL_I11N_MEMORY_SCOPE_IRRELEVANT,
+                           NULL);
 #if GI_CHECK_VERSION (1, 30, 1)
        g_constant_info_free_value (info, &value);
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Glib-Object-Introspection-0.047/META.json 
new/Glib-Object-Introspection-0.048/META.json
--- old/Glib-Object-Introspection-0.047/META.json       2019-02-05 
04:45:48.000000000 +0100
+++ new/Glib-Object-Introspection-0.048/META.json       2019-12-10 
16:39:39.000000000 +0100
@@ -67,6 +67,6 @@
       "x_IRC" : "irc://irc.gimp.org/#gtk-perl",
       "x_MailingList" : "https://mail.gnome.org/mailman/listinfo/gtk-perl-list";
    },
-   "version" : "0.047",
+   "version" : "0.048",
    "x_serialization_backend" : "JSON::PP version 2.97001"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Glib-Object-Introspection-0.047/META.yml 
new/Glib-Object-Introspection-0.048/META.yml
--- old/Glib-Object-Introspection-0.047/META.yml        2019-02-05 
04:45:48.000000000 +0100
+++ new/Glib-Object-Introspection-0.048/META.yml        2019-12-10 
16:39:39.000000000 +0100
@@ -37,5 +37,5 @@
   homepage: http://gtk2-perl.sourceforge.net
   license: http://www.gnu.org/licenses/lgpl-2.1.html
   repository: https://gitlab.gnome.org/GNOME/perl-glib-object-introspection
-version: '0.047'
+version: '0.048'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Glib-Object-Introspection-0.047/Makefile.PL 
new/Glib-Object-Introspection-0.048/Makefile.PL
--- old/Glib-Object-Introspection-0.047/Makefile.PL     2018-09-26 
07:02:20.000000000 +0200
+++ new/Glib-Object-Introspection-0.048/Makefile.PL     2019-09-29 
03:48:36.000000000 +0200
@@ -141,10 +141,13 @@
 
 compile_test_libraries();
 
-ExtUtils::PkgConfig->write_version_macros (
-  "build/gi-version.h",
-  "gobject-introspection-1.0" => "GI",
-);
+my $have_gi_1_60 = 
ExtUtils::PkgConfig->atleast_version('gobject-introspection-1.0', '1.60.0');
+if (!$have_gi_1_60) {
+  ExtUtils::PkgConfig->write_version_macros (
+    "build/gi-version.h",
+    "gobject-introspection-1.0" => "GI",
+  );
+}
 
 my $deps = ExtUtils::Depends->new ('Glib::Object::Introspection' => 'Glib');
 $deps->set_inc ($cfg{cflags});
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Glib-Object-Introspection-0.047/NEWS 
new/Glib-Object-Introspection-0.048/NEWS
--- old/Glib-Object-Introspection-0.047/NEWS    2019-02-05 04:42:43.000000000 
+0100
+++ new/Glib-Object-Introspection-0.048/NEWS    2019-12-10 16:36:13.000000000 
+0100
@@ -1,3 +1,14 @@
+Overview of changes in Glib::Object::Introspection 0.048
+========================================================
+
+* Hush deprecation warnings by using memmove instead of g_memmove
+* Adapt t/arrays.t to newer poppler versions to avoid test failures
+* Avoid double-freeing struct entries in flat array
+* Copy item memory in flat arrays when we are given ownership (RT# 130280)
+* Hush a few compiler warnings
+∗ Fix skip count in t/arrays.t
+* Adapt t/arrays.t to newer poppler versions to avoid test failures
+
 Overview of changes in Glib::Object::Introspection 0.047
 ========================================================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Glib-Object-Introspection-0.047/gperl-i11n-field.c 
new/Glib-Object-Introspection-0.048/gperl-i11n-field.c
--- old/Glib-Object-Introspection-0.047/gperl-i11n-field.c      2015-01-24 
14:12:20.000000000 +0100
+++ new/Glib-Object-Introspection-0.048/gperl-i11n-field.c      2019-12-09 
19:44:47.000000000 +0100
@@ -78,6 +78,7 @@
                sv = arg_to_sv (&value,
                                field_type,
                                GI_TRANSFER_NOTHING,
+                               GPERL_I11N_MEMORY_SCOPE_IRRELEVANT,
                                NULL);
        }
 
@@ -97,6 +98,7 @@
                sv = arg_to_sv (&value,
                                field_type,
                                transfer,
+                               GPERL_I11N_MEMORY_SCOPE_IRRELEVANT,
                                NULL);
        }
 
@@ -146,7 +148,7 @@
                                                      interface_type,
                                                      sv);
                        size = g_struct_info_get_size (interface_info);
-                       g_memmove (G_STRUCT_MEMBER_P (mem, offset), 
arg.v_pointer, size);
+                       memmove (G_STRUCT_MEMBER_P (mem, offset), 
arg.v_pointer, size);
                } else {                                        /* Pointer */
                        GType gtype = get_gtype (interface_info);
                        if (g_type_is_a (gtype, G_TYPE_BOXED)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Glib-Object-Introspection-0.047/gperl-i11n-invoke-c.c 
new/Glib-Object-Introspection-0.048/gperl-i11n-invoke-c.c
--- old/Glib-Object-Introspection-0.047/gperl-i11n-invoke-c.c   2017-05-21 
21:02:28.000000000 +0200
+++ new/Glib-Object-Introspection-0.048/gperl-i11n-invoke-c.c   2019-09-29 
03:48:36.000000000 +0200
@@ -236,6 +236,7 @@
                value = SAVED_STACK_SV (arg_to_sv (&return_value,
                                                   &iinfo.base.return_type_info,
                                                   
iinfo.base.return_type_transfer,
+                                                  
GPERL_I11N_MEMORY_SCOPE_IRRELEVANT,
                                                   &iinfo.base));
                if (value) {
                        XPUSHs (sv_2mortal (value));
@@ -268,6 +269,7 @@
                        sv = SAVED_STACK_SV (arg_to_sv 
(iinfo.out_args[i].v_pointer,
                                                        
&(iinfo.base.arg_types[i]),
                                                        transfer,
+                                                       
GPERL_I11N_MEMORY_SCOPE_IRRELEVANT,
                                                        &iinfo.base));
                        if (sv) {
                                XPUSHs (sv_2mortal (sv));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Glib-Object-Introspection-0.047/gperl-i11n-invoke-perl.c 
new/Glib-Object-Introspection-0.048/gperl-i11n-invoke-perl.c
--- old/Glib-Object-Introspection-0.047/gperl-i11n-invoke-perl.c        
2018-05-22 04:51:32.000000000 +0200
+++ new/Glib-Object-Introspection-0.048/gperl-i11n-invoke-perl.c        
2019-09-29 03:48:36.000000000 +0200
@@ -112,7 +112,11 @@
                                ? *((gpointer *) args[i+args_offset])
                                : args[i+args_offset];
                        raw_to_arg (raw, &arg, arg_type);
-                       sv = SAVED_STACK_SV (arg_to_sv (&arg, arg_type, 
transfer, &iinfo.base));
+                       sv = SAVED_STACK_SV (arg_to_sv (&arg,
+                                                       arg_type,
+                                                       transfer,
+                                                       
GPERL_I11N_MEMORY_SCOPE_IRRELEVANT,
+                                                       &iinfo.base));
                        /* If arg_to_sv returns NULL, we take that as 'skip
                         * this argument'; happens for GDestroyNotify, for
                         * example. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Glib-Object-Introspection-0.047/gperl-i11n-invoke.c 
new/Glib-Object-Introspection-0.048/gperl-i11n-invoke.c
--- old/Glib-Object-Introspection-0.047/gperl-i11n-invoke.c     2017-05-21 
21:02:28.000000000 +0200
+++ new/Glib-Object-Introspection-0.048/gperl-i11n-invoke.c     2019-09-29 
03:48:36.000000000 +0200
@@ -51,6 +51,13 @@
 }
 
 static void
+_free_array_info (gpointer ai, gpointer user_data)
+{
+       PERL_UNUSED_VAR (user_data);
+       g_free (ai);
+}
+
+static void
 clear_invocation_info (GPerlI11nInvocationInfo *iinfo)
 {
        g_slist_free (iinfo->free_after_call);
@@ -61,7 +68,7 @@
        g_slist_free (iinfo->callback_infos);
        iinfo->callback_infos = NULL;
 
-       g_slist_foreach (iinfo->array_infos, (GFunc) g_free, NULL);
+       g_slist_foreach (iinfo->array_infos, _free_array_info, NULL);
        g_slist_free (iinfo->array_infos);
        iinfo->array_infos = NULL;
 }
@@ -69,12 +76,12 @@
 /* ------------------------------------------------------------------------- */
 
 typedef struct {
-       GFunc func;
+       GDestroyNotify func;
        gpointer data;
 } FreeClosure;
 
 static void
-free_after_call (GPerlI11nInvocationInfo *iinfo, GFunc func, gpointer data)
+free_after_call (GPerlI11nInvocationInfo *iinfo, GDestroyNotify func, gpointer 
data)
 {
        FreeClosure *closure = g_new (FreeClosure, 1);
        closure->func = func;
@@ -84,9 +91,11 @@
 }
 
 static void
-_invoke_free_closure (FreeClosure *closure)
+_invoke_free_closure (gpointer closure_in, gpointer user_data)
 {
-       closure->func (closure->data, NULL);
+       FreeClosure *closure = closure_in;
+       PERL_UNUSED_VAR (user_data);
+       closure->func (closure->data);
        g_free (closure);
 }
 
@@ -96,5 +105,5 @@
        /* We free the FreeClosures themselves directly after invoking them.  
The list
           is freed in clear_invocation_info. */
        g_slist_foreach (iinfo->free_after_call,
-                        (GFunc) _invoke_free_closure, NULL);
+                        _invoke_free_closure, NULL);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Glib-Object-Introspection-0.047/gperl-i11n-marshal-arg.c 
new/Glib-Object-Introspection-0.048/gperl-i11n-marshal-arg.c
--- old/Glib-Object-Introspection-0.047/gperl-i11n-marshal-arg.c        
2015-07-12 06:15:18.000000000 +0200
+++ new/Glib-Object-Introspection-0.048/gperl-i11n-marshal-arg.c        
2019-09-29 03:48:36.000000000 +0200
@@ -150,13 +150,14 @@
 arg_to_sv (GIArgument * arg,
            GITypeInfo * info,
            GITransfer transfer,
+           GPerlI11nMemoryScope mem_scope,
            GPerlI11nInvocationInfo *iinfo)
 {
        GITypeTag tag = g_type_info_get_tag (info);
        gboolean own = transfer >= GI_TRANSFER_CONTAINER;
 
-       dwarn ("info = %p, tag = %d (%s)\n",
-              info, tag, g_type_tag_to_string (tag));
+       dwarn ("info = %p, tag = %d (%s), transfer = %d, own = %d\n",
+              info, tag, g_type_tag_to_string (tag), transfer, own);
 
        switch (tag) {
            case GI_TYPE_TAG_VOID:
@@ -230,7 +231,7 @@
                return array_to_sv (info, arg->v_pointer, transfer, iinfo);
 
            case GI_TYPE_TAG_INTERFACE:
-               return interface_to_sv (info, arg, own, iinfo);
+               return interface_to_sv (info, arg, own, mem_scope, iinfo);
 
            case GI_TYPE_TAG_GLIST:
            case GI_TYPE_TAG_GSLIST:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Glib-Object-Introspection-0.047/gperl-i11n-marshal-array.c 
new/Glib-Object-Introspection-0.048/gperl-i11n-marshal-array.c
--- old/Glib-Object-Introspection-0.047/gperl-i11n-marshal-array.c      
2017-05-21 21:02:28.000000000 +0200
+++ new/Glib-Object-Introspection-0.048/gperl-i11n-marshal-array.c      
2019-09-29 03:48:36.000000000 +0200
@@ -42,24 +42,42 @@
 }
 
 static void
-_free_array (GArray *array)
+_free_array (GArray *array, gboolean free_content)
 {
-       dwarn ("%p\n", array);
-       g_array_free (array, TRUE);
+       dwarn ("%p: free_content=%d\n", array, free_content);
+       g_array_free (array, free_content);
 }
 
 static void
-_free_ptr_array (GPtrArray *array)
+_free_array_and_content (gpointer array)
 {
-       dwarn ("%p\n", array);
-       g_ptr_array_free (array, TRUE);
+       _free_array (array, TRUE);
 }
 
 static void
-_free_byte_array (GByteArray *array)
+_free_ptr_array (GPtrArray *array, gboolean free_content)
 {
-       dwarn ("%p\n", array);
-       g_byte_array_free (array, TRUE);
+       dwarn ("%p: free_content=%d\n", array, free_content);
+       g_ptr_array_free (array, free_content);
+}
+
+static void
+_free_ptr_array_and_content (gpointer array)
+{
+       _free_ptr_array (array, TRUE);
+}
+
+static void
+_free_byte_array (GByteArray *array, gboolean free_content)
+{
+       dwarn ("%p: free_content=%d\n", array, free_content);
+       g_byte_array_free (array, free_content);
+}
+
+static void
+_free_byte_array_and_content (gpointer array)
+{
+       _free_byte_array (array, TRUE);
 }
 
 /* This may call Perl code (via arg_to_sv), so it needs to be wrapped with
@@ -76,6 +94,7 @@
        GITypeTag param_tag;
        gsize item_size;
        GITransfer item_transfer;
+       gboolean free_element_data;
        gboolean need_struct_value_semantics;
        gssize length = -1, i;
        AV *av;
@@ -107,7 +126,9 @@
                                g_assert (iinfo && iinfo->aux_args);
                                conversion_sv = arg_to_sv 
(&(iinfo->aux_args[length_pos]),
                                                           
&(iinfo->arg_types[length_pos]),
-                                                          GI_TRANSFER_NOTHING, 
NULL);
+                                                          GI_TRANSFER_NOTHING,
+                                                          
GPERL_I11N_MEMORY_SCOPE_IRRELEVANT,
+                                                          NULL);
                                length = SvIV (conversion_sv);
                                SvREFCNT_dec (conversion_sv);
                        }
@@ -132,6 +153,10 @@
                ccroak ("Could not determine the length of the array");
        }
 
+       param_info = g_type_info_get_param_type (info, 0);
+       param_tag = g_type_info_get_tag (param_info);
+       item_size = size_of_type_info (param_info);
+
        /* FIXME: What about an array containing arrays of strings, where the
         * outer array is GI_TRANSFER_EVERYTHING but the inner arrays are
         * GI_TRANSFER_CONTAINER? */
@@ -139,14 +164,11 @@
                ? GI_TRANSFER_EVERYTHING
                : GI_TRANSFER_NOTHING;
 
-       param_info = g_type_info_get_param_type (info, 0);
-       param_tag = g_type_info_get_tag (param_info);
-       item_size = size_of_type_info (param_info);
-
        av = newAV ();
 
        need_struct_value_semantics =
                _need_struct_value_semantics (array_type, param_info, 
param_tag);
+       dwarn ("value semantics = %d\n", need_struct_value_semantics);
 
        dwarn ("type %d, array %p, elements %p\n",
               array_type, array, elements);
@@ -159,32 +181,39 @@
 
        for (i = 0; i < length; i++) {
                GIArgument arg;
-               SV *value;
+               SV *value = NULL;
                gpointer element = elements + ((gsize) i) * item_size;
-               dwarn ("  element %"G_GSSIZE_FORMAT": %p\n", i, element);
+               gpointer raw_pointer = element;
+               GPerlI11nMemoryScope mem_scope = 
GPERL_I11N_MEMORY_SCOPE_IRRELEVANT;
                if (need_struct_value_semantics) {
-                       raw_to_arg (&element, &arg, param_info);
-               } else {
-                       raw_to_arg (element, &arg, param_info);
+                       raw_pointer = &element;
+                       mem_scope = GPERL_I11N_MEMORY_SCOPE_TEMPORARY;
                }
-               value = arg_to_sv (&arg, param_info, item_transfer, iinfo);
+               dwarn ("  element %"G_GSSIZE_FORMAT": %p, pointer: %p\n", i, 
element, raw_pointer);
+               raw_to_arg (raw_pointer, &arg, param_info);
+               value = arg_to_sv (&arg, param_info, item_transfer, mem_scope, 
iinfo);
                if (value)
                        av_push (av, value);
        }
 
        if (transfer >= GI_TRANSFER_CONTAINER) {
+               /* When we were transfered ownership of the array, we need to
+                  free it and its element storage here.  This is safe since,
+                  if the array was flat, we made sure to take copies of the
+                  elements above. */
+               free_element_data = TRUE;
                switch (array_type) {
                case GI_ARRAY_TYPE_C:
                        _free_raw_array (array);
                        break;
                case GI_ARRAY_TYPE_ARRAY:
-                       _free_array (array);
+                       _free_array (array, free_element_data);
                        break;
                case GI_ARRAY_TYPE_PTR_ARRAY:
-                       _free_ptr_array (array);
+                       _free_ptr_array (array, free_element_data);
                        break;
                case GI_ARRAY_TYPE_BYTE_ARRAY:
-                       _free_byte_array (array);
+                       _free_byte_array (array, free_element_data);
                        break;
                }
        }
@@ -213,7 +242,7 @@
        GPerlI11nArrayInfo *array_info = NULL;
        gpointer array = NULL;
        gpointer return_array;
-       GFunc return_array_free_func;
+       GDestroyNotify return_array_free_func;
        gboolean is_zero_terminated = FALSE;
        gsize item_size;
        gboolean need_struct_value_semantics;
@@ -318,16 +347,16 @@
        switch (array_type) {
        case GI_ARRAY_TYPE_C:
                return_array = g_array_free (array, FALSE);
-               return_array_free_func = (GFunc) _free_raw_array;
+               return_array_free_func = _free_raw_array;
                break;
        case GI_ARRAY_TYPE_ARRAY:
-               return_array_free_func = (GFunc) _free_array;
+               return_array_free_func = _free_array_and_content;
                break;
        case GI_ARRAY_TYPE_PTR_ARRAY:
-               return_array_free_func = (GFunc) _free_ptr_array;
+               return_array_free_func = _free_ptr_array_and_content;
                break;
        case GI_ARRAY_TYPE_BYTE_ARRAY:
-               return_array_free_func = (GFunc) _free_byte_array;
+               return_array_free_func = _free_byte_array_and_content;
                break;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Glib-Object-Introspection-0.047/gperl-i11n-marshal-callback.c 
new/Glib-Object-Introspection-0.048/gperl-i11n-marshal-callback.c
--- old/Glib-Object-Introspection-0.047/gperl-i11n-marshal-callback.c   
2017-05-21 21:02:28.000000000 +0200
+++ new/Glib-Object-Introspection-0.048/gperl-i11n-marshal-callback.c   
2019-09-29 03:48:36.000000000 +0200
@@ -33,7 +33,7 @@
            case GI_SCOPE_TYPE_CALL:
                dwarn ("  scope = 'call'\n");
                free_after_call (invocation_info,
-                                (GFunc) release_perl_callback, callback_info);
+                                release_perl_callback, callback_info);
                break;
            case GI_SCOPE_TYPE_NOTIFIED:
                dwarn ("  scope = 'notified'\n");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Glib-Object-Introspection-0.047/gperl-i11n-marshal-hash.c 
new/Glib-Object-Introspection-0.048/gperl-i11n-marshal-hash.c
--- old/Glib-Object-Introspection-0.047/gperl-i11n-marshal-hash.c       
2015-07-12 06:15:18.000000000 +0200
+++ new/Glib-Object-Introspection-0.048/gperl-i11n-marshal-hash.c       
2019-09-29 03:48:36.000000000 +0200
@@ -47,13 +47,21 @@
 
                dwarn ("  key pointer %p\n", key_p);
                arg.v_pointer = key_p;
-               key_sv = arg_to_sv (&arg, key_param_info, item_transfer, NULL);
+               key_sv = arg_to_sv (&arg,
+                                   key_param_info,
+                                   item_transfer,
+                                   GPERL_I11N_MEMORY_SCOPE_IRRELEVANT,
+                                   NULL);
                if (key_sv == NULL)
                         break;
 
                dwarn ("  value pointer %p\n", value_p);
                arg.v_pointer = value_p;
-               value_sv = arg_to_sv (&arg, value_param_info, item_transfer, 
NULL);
+               value_sv = arg_to_sv (&arg,
+                                     value_param_info,
+                                     item_transfer,
+                                     GPERL_I11N_MEMORY_SCOPE_IRRELEVANT,
+                                     NULL);
                if (value_sv == NULL)
                        break;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Glib-Object-Introspection-0.047/gperl-i11n-marshal-interface.c 
new/Glib-Object-Introspection-0.048/gperl-i11n-marshal-interface.c
--- old/Glib-Object-Introspection-0.047/gperl-i11n-marshal-interface.c  
2018-09-26 06:44:28.000000000 +0200
+++ new/Glib-Object-Introspection-0.048/gperl-i11n-marshal-interface.c  
2019-12-09 19:44:47.000000000 +0100
@@ -242,7 +242,7 @@
                                } else {
                                        gsize n_bytes = g_struct_info_get_size 
(interface);
                                        gpointer mem = gperl_get_boxed_check 
(sv, type);
-                                       g_memmove (arg->v_pointer, mem, 
n_bytes);
+                                       memmove (arg->v_pointer, mem, n_bytes);
                                }
                        } else {
                                if (may_be_null && !gperl_sv_is_defined (sv)) {
@@ -317,13 +317,18 @@
  * struct_to_sv), so it needs to be wrapped with PUTBACK/SPAGAIN by the
  * caller. */
 static SV *
-interface_to_sv (GITypeInfo* info, GIArgument *arg, gboolean own, 
GPerlI11nInvocationInfo *iinfo)
+interface_to_sv (GITypeInfo* info,
+                 GIArgument *arg,
+                 gboolean own,
+                 GPerlI11nMemoryScope mem_scope,
+                 GPerlI11nInvocationInfo *iinfo)
 {
        GIBaseInfo *interface;
        GIInfoType info_type;
        SV *sv = NULL;
 
        dwarn ("arg %p, info %p\n", arg, info);
+       dwarn ("  is pointer: %d\n", g_type_info_is_pointer (info));
 
        interface = g_type_info_get_interface (info);
        if (!interface)
@@ -382,7 +387,14 @@
                else if (g_type_is_a (type, G_TYPE_BOXED)) {
                        dwarn ("  -> boxed: pointer=%p, type=%"G_GSIZE_FORMAT" 
(%s), own=%d\n",
                               arg->v_pointer, type, g_type_name (type), own);
-                       sv = gperl_new_boxed (arg->v_pointer, type, own);
+                       switch (mem_scope) {
+                           case GPERL_I11N_MEMORY_SCOPE_TEMPORARY:
+                               g_assert (own == TRUE);
+                               sv = gperl_new_boxed_copy (arg->v_pointer, 
type);
+                               break;
+                           default:
+                               sv = gperl_new_boxed (arg->v_pointer, type, 
own);
+                       }
                }
 
 #if GLIB_CHECK_VERSION (2, 24, 0)
@@ -463,7 +475,7 @@
                        /* If peek() produced NULL, the class has not been
                         * instantiated yet and needs to be created. */
                        pointer = g_type_class_ref (class_type);
-                       free_after_call (iinfo, (GFunc) g_type_class_unref, 
pointer);
+                       free_after_call (iinfo, g_type_class_unref, pointer);
                }
                dwarn ("     type class = %p\n", pointer);
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Glib-Object-Introspection-0.047/gperl-i11n-marshal-list.c 
new/Glib-Object-Introspection-0.048/gperl-i11n-marshal-list.c
--- old/Glib-Object-Introspection-0.047/gperl-i11n-marshal-list.c       
2015-07-12 06:15:18.000000000 +0200
+++ new/Glib-Object-Introspection-0.048/gperl-i11n-marshal-list.c       
2019-09-29 03:48:36.000000000 +0200
@@ -1,14 +1,14 @@
 /* -*- mode: c; indent-tabs-mode: t; c-basic-offset: 8; -*- */
 
 static void
-free_list (GList *list)
+_free_list (gpointer list)
 {
        dwarn ("%p\n", list);
        g_list_free (list);
 }
 
 static void
-free_slist (GSList *list)
+_free_slist (gpointer list)
 {
        dwarn ("%p\n", list);
        g_slist_free (list);
@@ -53,7 +53,11 @@
                GIArgument arg = {0,};
                dwarn ("  element %p: %p\n", i, i->data);
                arg.v_pointer = i->data;
-               value = arg_to_sv (&arg, param_info, item_transfer, NULL);
+               value = arg_to_sv (&arg,
+                                  param_info,
+                                  item_transfer,
+                                  GPERL_I11N_MEMORY_SCOPE_IRRELEVANT,
+                                  NULL);
                if (value)
                        av_push (av, value);
        }
@@ -125,7 +129,7 @@
 
        if (GI_TRANSFER_NOTHING == transfer)
                free_after_call (iinfo,
-                                is_slist ? ((GFunc)free_slist) : 
((GFunc)free_list),
+                                is_slist ? _free_slist : _free_list,
                                 list);
 
        dwarn ("  -> list = %p, length = %d\n", list, g_list_length (list));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Glib-Object-Introspection-0.047/lib/Glib/Object/Introspection.pm 
new/Glib-Object-Introspection-0.048/lib/Glib/Object/Introspection.pm
--- old/Glib-Object-Introspection-0.047/lib/Glib/Object/Introspection.pm        
2019-02-05 04:43:07.000000000 +0100
+++ new/Glib-Object-Introspection-0.048/lib/Glib/Object/Introspection.pm        
2019-12-07 19:40:53.000000000 +0100
@@ -19,7 +19,7 @@
 use warnings;
 use Glib;
 
-our $VERSION = '0.047';
+our $VERSION = '0.048';
 
 use Carp;
 $Carp::Internal{(__PACKAGE__)}++;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Glib-Object-Introspection-0.047/t/arrays.t 
new/Glib-Object-Introspection-0.048/t/arrays.t
--- old/Glib-Object-Introspection-0.047/t/arrays.t      2019-02-02 
22:12:41.000000000 +0100
+++ new/Glib-Object-Introspection-0.048/t/arrays.t      2019-12-09 
19:44:47.000000000 +0100
@@ -6,7 +6,7 @@
 use warnings;
 use utf8;
 
-plan tests => 72;
+plan tests => 88;
 
 ok (Regress::test_strv_in ([ '1', '2', '3' ]));
 
@@ -179,3 +179,51 @@
   }, 'user23');
   $obj->emit_sig_with_array_len_prop ();
 }
+
+# -----------------------------------------------------------------------------
+
+SKIP: {
+  my $have_poppler = eval {
+    Glib::Object::Introspection->setup (
+      basename    => 'Poppler',
+      version     => '0.18',
+      package     => 'Poppler');
+    1;
+  };
+  skip 'flat array tests using Poppler', 16
+    unless $have_poppler;
+
+  my $pdf = <<__PDF__; # 
https://github.com/mathiasbynens/small/blob/master/pdf.pdf
+%PDF-1.
+1 0 obj<</Pages 2 0 R>>endobj
+2 0 obj<</Kids[3 0 R]/Count 1>>endobj
+3 0 obj<</Parent 2 0 R>>endobj
+trailer <</Root 1 0 R>>
+__PDF__
+
+  my ($major, $minor, $micro) = split /\./, Poppler::get_version ();
+  my @args = ($major > 0 || $minor >= 78) ? ([map ord, split //, $pdf], undef) 
: ($pdf, length $pdf, undef);
+  my $doc = Poppler::Document->new_from_data (@args);
+  my $quads = [
+    Glib::Boxed::new ('Poppler::Quadrilateral',
+                      {p1 => {x => 0, y => 0},
+                       p2 => {x => 1, y => 1},
+                       p3 => {x => 2, y => 2},
+                       p4 => {x => 3, y => 3}}),
+    Glib::Boxed::new ('Poppler::Quadrilateral',
+                      {p1 => {x => 4, y => 4},
+                       p2 => {x => 5, y => 5},
+                       p3 => {x => 6, y => 6},
+                       p4 => {x => 7, y => 7}}),
+  ];
+  my $rect = Glib::Boxed::new ('Poppler::Rectangle', {x1 => 0, y1 => 0, x2 => 
9, y2 => 9});
+  my $annot = Poppler::AnnotTextMarkup->new_highlight ($doc, $rect, $quads);
+  my $new_quads = $annot->get_quadrilaterals ();
+  for my $index (0 .. 1) {
+    for my $point (qw/p1 p2 p3 p4/) {
+      for my $coord (qw/x y/) {
+        is ($new_quads->[$index]->$point->$coord, 
$quads->[$index]->$point->$coord);
+      }
+    }
+  }
+}


Reply via email to