[vala/0.54] tests: Generic type inference for static methods only in compact classes
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/0.54] tests: Generic type inference for static methods only in compact classes
- Date: Wed, 9 Feb 2022 13:02:37 +0000 (UTC)
commit 13d451e0e3c50592191adeb840355cd94fbc780f
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 df2182982..56663f692 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__volatile = 0;
- if (g_once_init_enter (&foo_type_id__volatile)) {
- GType foo_type_id;
- foo_type_id = foo_get_type_once ();
- g_once_init_leave (&foo_type_id__volatile, foo_type_id);
- }
- return foo_type_id__volatile;
-}
-
-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]