[template-glib] gi: use boxed type for GIBaseInfo



commit 6fc7ce76801c6ba4b4a076d2ebd7e9cfe1a7644b
Author: Christian Hergert <chergert redhat com>
Date:   Mon Oct 23 21:18:53 2017 -0700

    gi: use boxed type for GIBaseInfo
    
    These are full transfer, so we need the gvalue to clean up after
    our accesses.

 src/tmpl-expr-eval.c |    8 ++++----
 src/tmpl-gi.c        |   12 ++++++++----
 2 files changed, 12 insertions(+), 8 deletions(-)
---
diff --git a/src/tmpl-expr-eval.c b/src/tmpl-expr-eval.c
index 7d81a7b..3355f26 100644
--- a/src/tmpl-expr-eval.c
+++ b/src/tmpl-expr-eval.c
@@ -509,7 +509,7 @@ tmpl_expr_getattr_eval (TmplExprGetattr  *node,
         }
 
       g_value_init (return_value, TMPL_TYPE_BASE_INFO);
-      g_value_set_pointer (return_value, base_info);
+      g_value_take_boxed (return_value, base_info);
 
       ret = TRUE;
 
@@ -1608,10 +1608,10 @@ builtin_typeof (const GValue  *value,
   g_value_init (return_value, G_TYPE_GTYPE);
 
   if (G_VALUE_HOLDS (value, TMPL_TYPE_BASE_INFO) &&
-      g_value_get_pointer (value) != NULL &&
-      GI_IS_REGISTERED_TYPE_INFO (g_value_get_pointer (value)))
+      g_value_get_boxed (value) != NULL &&
+      GI_IS_REGISTERED_TYPE_INFO (g_value_get_boxed (value)))
     g_value_set_gtype (return_value,
-                       g_registered_type_info_get_g_type (g_value_get_pointer (value)));
+                       g_registered_type_info_get_g_type (g_value_get_boxed (value)));
   else if (G_VALUE_HOLDS_OBJECT (value) &&
            g_value_get_object (value) != NULL)
     g_value_set_gtype (return_value, G_OBJECT_TYPE (g_value_get_object (value)));
diff --git a/src/tmpl-gi.c b/src/tmpl-gi.c
index 2c04c54..f2d874f 100644
--- a/src/tmpl-gi.c
+++ b/src/tmpl-gi.c
@@ -21,7 +21,11 @@
 #include "tmpl-gi-private.h"
 
 G_DEFINE_POINTER_TYPE (TmplTypelib, tmpl_typelib)
-G_DEFINE_POINTER_TYPE (TmplBaseInfo, tmpl_base_info)
+
+typedef struct GIBaseInfo TmplBaseInfo;
+G_DEFINE_BOXED_TYPE (TmplBaseInfo, tmpl_base_info,
+                     (GBoxedCopyFunc)g_base_info_ref,
+                     (GBoxedFreeFunc)g_base_info_unref)
 
 #define return_type_mismatch(value, type)                          \
   G_STMT_START {                                                   \
@@ -143,9 +147,9 @@ tmpl_gi_argument_from_g_value (const GValue  *value,
       if (G_VALUE_HOLDS (value, G_TYPE_GTYPE))
         arg->v_long = g_value_get_gtype (value);
       else if (G_VALUE_HOLDS (value, TMPL_TYPE_BASE_INFO) &&
-               g_value_get_pointer (value) != NULL &&
-               GI_IS_REGISTERED_TYPE_INFO (g_value_get_pointer (value)))
-        arg->v_long = g_registered_type_info_get_g_type (g_value_get_pointer (value));
+               g_value_get_boxed (value) != NULL &&
+               GI_IS_REGISTERED_TYPE_INFO (g_value_get_boxed (value)))
+        arg->v_long = g_registered_type_info_get_g_type (g_value_get_boxed (value));
       else
         return_type_mismatch (value, G_TYPE_GTYPE);
       return TRUE;


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