[vala/staging] tests: Generic type inference for static methods only in compact classes



commit 9086fb192385243fbedd0c6ce5a9fb474ce5f6a1
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Sun Jan 30 18:07:23 2022 +0100

    tests: Generic type inference for static methods only in compact classes

 .../generics/inference-static-function.c-expected  | 285 +--------------------
 tests/generics/inference-static-function.vala      |   1 +
 2 files changed, 13 insertions(+), 273 deletions(-)
---
diff --git a/tests/generics/inference-static-function.c-expected 
b/tests/generics/inference-static-function.c-expected
index a268c4b22..25ac2348e 100644
--- a/tests/generics/inference-static-function.c-expected
+++ b/tests/generics/inference-static-function.c-expected
@@ -1,9 +1,7 @@
 /* generics_inference_static_function.c generated by valac, the Vala compiler
  * generated from generics_inference_static_function.vala, do not modify */
 
-#include <glib-object.h>
 #include <glib.h>
-#include <gobject/gvaluecollector.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -17,66 +15,17 @@
 #endif
 #endif
 
-#define TYPE_FOO (foo_get_type ())
-#define FOO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_FOO, Foo))
-#define FOO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_FOO, FooClass))
-#define IS_FOO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_FOO))
-#define IS_FOO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_FOO))
-#define FOO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_FOO, FooClass))
-
 typedef struct _Foo Foo;
-typedef struct _FooClass FooClass;
-typedef struct _FooPrivate FooPrivate;
-typedef struct _ParamSpecFoo ParamSpecFoo;
 
 struct _Foo {
-       GTypeInstance parent_instance;
-       volatile int ref_count;
-       FooPrivate * priv;
-};
-
-struct _FooClass {
-       GTypeClass parent_class;
-       void (*finalize) (Foo *self);
-};
-
-struct _FooPrivate {
-       GType g_type;
-       GBoxedCopyFunc g_dup_func;
-       GDestroyNotify g_destroy_func;
+       int dummy;
 };
 
-struct _ParamSpecFoo {
-       GParamSpec parent_instance;
-};
-
-static gint Foo_private_offset;
-static gpointer foo_parent_class = NULL;
-
-VALA_EXTERN gpointer foo_ref (gpointer instance);
-VALA_EXTERN void foo_unref (gpointer instance);
-VALA_EXTERN GParamSpec* param_spec_foo (const gchar* name,
-                            const gchar* nick,
-                            const gchar* blurb,
-                            GType object_type,
-                            GParamFlags flags);
-VALA_EXTERN void value_set_foo (GValue* value,
-                    gpointer v_object);
-VALA_EXTERN void value_take_foo (GValue* value,
-                     gpointer v_object);
-VALA_EXTERN gpointer value_get_foo (const GValue* value);
-VALA_EXTERN GType foo_get_type (void) G_GNUC_CONST ;
-G_DEFINE_AUTOPTR_CLEANUP_FUNC (Foo, foo_unref)
+VALA_EXTERN void foo_free (Foo * self);
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (Foo, foo_free)
+static void foo_instance_init (Foo * self);
 VALA_EXTERN gpointer* foo_bar (gint* result_length1);
-VALA_EXTERN Foo* foo_new (GType g_type,
-              GBoxedCopyFunc g_dup_func,
-              GDestroyNotify g_destroy_func);
-VALA_EXTERN Foo* foo_construct (GType object_type,
-                    GType g_type,
-                    GBoxedCopyFunc g_dup_func,
-                    GDestroyNotify g_destroy_func);
-static void foo_finalize (Foo * obj);
-static GType foo_get_type_once (void);
+VALA_EXTERN Foo* foo_new (void);
 static void _vala_main (void);
 static void _vala_array_destroy (gpointer array,
                           gssize array_length,
@@ -85,12 +34,6 @@ static void _vala_array_free (gpointer array,
                        gssize array_length,
                        GDestroyNotify destroy_func);
 
-static inline gpointer
-foo_get_instance_private (Foo* self)
-{
-       return G_STRUCT_MEMBER_P (self, Foo_private_offset);
-}
-
 gpointer*
 foo_bar (gint* result_length1)
 {
@@ -109,227 +52,23 @@ foo_bar (gint* result_length1)
 }
 
 Foo*
-foo_construct (GType object_type,
-               GType g_type,
-               GBoxedCopyFunc g_dup_func,
-               GDestroyNotify g_destroy_func)
+foo_new (void)
 {
-       Foo* self = NULL;
-       self = (Foo*) g_type_create_instance (object_type);
-       self->priv->g_type = g_type;
-       self->priv->g_dup_func = g_dup_func;
-       self->priv->g_destroy_func = g_destroy_func;
+       Foo* self;
+       self = g_slice_new0 (Foo);
+       foo_instance_init (self);
        return self;
 }
 
-Foo*
-foo_new (GType g_type,
-         GBoxedCopyFunc g_dup_func,
-         GDestroyNotify g_destroy_func)
-{
-       return foo_construct (TYPE_FOO, g_type, g_dup_func, g_destroy_func);
-}
-
-static void
-value_foo_init (GValue* value)
-{
-       value->data[0].v_pointer = NULL;
-}
-
-static void
-value_foo_free_value (GValue* value)
-{
-       if (value->data[0].v_pointer) {
-               foo_unref (value->data[0].v_pointer);
-       }
-}
-
 static void
-value_foo_copy_value (const GValue* src_value,
-                      GValue* dest_value)
-{
-       if (src_value->data[0].v_pointer) {
-               dest_value->data[0].v_pointer = foo_ref (src_value->data[0].v_pointer);
-       } else {
-               dest_value->data[0].v_pointer = NULL;
-       }
-}
-
-static gpointer
-value_foo_peek_pointer (const GValue* value)
-{
-       return value->data[0].v_pointer;
-}
-
-static gchar*
-value_foo_collect_value (GValue* value,
-                         guint n_collect_values,
-                         GTypeCValue* collect_values,
-                         guint collect_flags)
-{
-       if (collect_values[0].v_pointer) {
-               Foo * object;
-               object = collect_values[0].v_pointer;
-               if (object->parent_instance.g_class == NULL) {
-                       return g_strconcat ("invalid unclassed object pointer for value type `", 
G_VALUE_TYPE_NAME (value), "'", NULL);
-               } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
-                       return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE 
(object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
-               }
-               value->data[0].v_pointer = foo_ref (object);
-       } else {
-               value->data[0].v_pointer = NULL;
-       }
-       return NULL;
-}
-
-static gchar*
-value_foo_lcopy_value (const GValue* value,
-                       guint n_collect_values,
-                       GTypeCValue* collect_values,
-                       guint collect_flags)
+foo_instance_init (Foo * self)
 {
-       Foo ** object_p;
-       object_p = collect_values[0].v_pointer;
-       if (!object_p) {
-               return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
-       }
-       if (!value->data[0].v_pointer) {
-               *object_p = NULL;
-       } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
-               *object_p = value->data[0].v_pointer;
-       } else {
-               *object_p = foo_ref (value->data[0].v_pointer);
-       }
-       return NULL;
-}
-
-GParamSpec*
-param_spec_foo (const gchar* name,
-                const gchar* nick,
-                const gchar* blurb,
-                GType object_type,
-                GParamFlags flags)
-{
-       ParamSpecFoo* spec;
-       g_return_val_if_fail (g_type_is_a (object_type, TYPE_FOO), NULL);
-       spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
-       G_PARAM_SPEC (spec)->value_type = object_type;
-       return G_PARAM_SPEC (spec);
-}
-
-gpointer
-value_get_foo (const GValue* value)
-{
-       g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_FOO), NULL);
-       return value->data[0].v_pointer;
-}
-
-void
-value_set_foo (GValue* value,
-               gpointer v_object)
-{
-       Foo * old;
-       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_FOO));
-       old = value->data[0].v_pointer;
-       if (v_object) {
-               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_FOO));
-               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
-               value->data[0].v_pointer = v_object;
-               foo_ref (value->data[0].v_pointer);
-       } else {
-               value->data[0].v_pointer = NULL;
-       }
-       if (old) {
-               foo_unref (old);
-       }
 }
 
 void
-value_take_foo (GValue* value,
-                gpointer v_object)
-{
-       Foo * old;
-       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_FOO));
-       old = value->data[0].v_pointer;
-       if (v_object) {
-               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_FOO));
-               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
-               value->data[0].v_pointer = v_object;
-       } else {
-               value->data[0].v_pointer = NULL;
-       }
-       if (old) {
-               foo_unref (old);
-       }
-}
-
-static void
-foo_class_init (FooClass * klass,
-                gpointer klass_data)
-{
-       foo_parent_class = g_type_class_peek_parent (klass);
-       ((FooClass *) klass)->finalize = foo_finalize;
-       g_type_class_adjust_private_offset (klass, &Foo_private_offset);
-}
-
-static void
-foo_instance_init (Foo * self,
-                   gpointer klass)
+foo_free (Foo * self)
 {
-       self->priv = foo_get_instance_private (self);
-       self->ref_count = 1;
-}
-
-static void
-foo_finalize (Foo * obj)
-{
-       Foo * self;
-       self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_FOO, Foo);
-       g_signal_handlers_destroy (self);
-}
-
-static GType
-foo_get_type_once (void)
-{
-       static const GTypeValueTable g_define_type_value_table = { value_foo_init, value_foo_free_value, 
value_foo_copy_value, value_foo_peek_pointer, "p", value_foo_collect_value, "p", value_foo_lcopy_value };
-       static const GTypeInfo g_define_type_info = { sizeof (FooClass), (GBaseInitFunc) NULL, 
(GBaseFinalizeFunc) NULL, (GClassInitFunc) foo_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (Foo), 0, 
(GInstanceInitFunc) foo_instance_init, &g_define_type_value_table };
-       static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | 
G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
-       GType foo_type_id;
-       foo_type_id = g_type_register_fundamental (g_type_fundamental_next (), "Foo", &g_define_type_info, 
&g_define_type_fundamental_info, 0);
-       Foo_private_offset = g_type_add_instance_private (foo_type_id, sizeof (FooPrivate));
-       return foo_type_id;
-}
-
-GType
-foo_get_type (void)
-{
-       static volatile gsize foo_type_id__once = 0;
-       if (g_once_init_enter (&foo_type_id__once)) {
-               GType foo_type_id;
-               foo_type_id = foo_get_type_once ();
-               g_once_init_leave (&foo_type_id__once, foo_type_id);
-       }
-       return foo_type_id__once;
-}
-
-gpointer
-foo_ref (gpointer instance)
-{
-       Foo * self;
-       self = instance;
-       g_atomic_int_inc (&self->ref_count);
-       return instance;
-}
-
-void
-foo_unref (gpointer instance)
-{
-       Foo * self;
-       self = instance;
-       if (g_atomic_int_dec_and_test (&self->ref_count)) {
-               FOO_GET_CLASS (self)->finalize (self);
-               g_type_free_instance ((GTypeInstance *) self);
-       }
+       g_slice_free (Foo, self);
 }
 
 static void
diff --git a/tests/generics/inference-static-function.vala b/tests/generics/inference-static-function.vala
index 4c004bb83..8b4aabcdf 100644
--- a/tests/generics/inference-static-function.vala
+++ b/tests/generics/inference-static-function.vala
@@ -1,3 +1,4 @@
+[Compact]
 class Foo<G> {
        public static G[] bar () {
                return {};


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