]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Emit constants without initializer list in defines section
authorRico Tzschichholz <ricotz@ubuntu.com>
Sun, 7 Nov 2021 15:31:47 +0000 (16:31 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sun, 7 Nov 2021 16:24:36 +0000 (17:24 +0100)
Fixes https://gitlab.gnome.org/GNOME/vala/issues/440

24 files changed:
codegen/valaccodebasemodule.vala
tests/Makefile.am
tests/arrays/fixed-length-init0-not-allowed.c-expected
tests/basic-types/arrays.c-expected
tests/basic-types/bug648364.c-expected
tests/basic-types/bug756376.c-expected
tests/basic-types/sizeof.c-expected
tests/constants/strings.c-expected
tests/control-flow/switch-string.c-expected
tests/enums/enums.c-expected
tests/genie/constant.c-expected
tests/methods/bug642350.c-expected
tests/ordering/constant-class.c-expected [new file with mode: 0644]
tests/ordering/constant-class.vala [new file with mode: 0644]
tests/ordering/constant-constant.c-expected [new file with mode: 0644]
tests/ordering/constant-constant.vala [new file with mode: 0644]
tests/ordering/constant-enum.c-expected [new file with mode: 0644]
tests/ordering/constant-enum.vala [new file with mode: 0644]
tests/ordering/constant-field.c-expected [new file with mode: 0644]
tests/ordering/constant-field.vala [new file with mode: 0644]
tests/ordering/constant-struct.c-expected [new file with mode: 0644]
tests/ordering/constant-struct.vala [new file with mode: 0644]
tests/posix/arrays.c-expected
tests/semantic/member-access-static-with-instance.c-expected

index c31c55a1fba41a877e36ce974bcfdb42e25155eb..409ebba6c01b36bd287df7582ffed8e290e07824 100644 (file)
@@ -1106,8 +1106,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                                        add_symbol_declaration (decl_space, m, get_ccode_name (m));
                                }
 
-                               var cdefine = new CCodeMacroReplacement.with_expression (get_ccode_name (c), get_cvalue (c.value));
-                               decl_space.add_type_member_declaration (cdefine);
+                               var cdefine = new CCodeDefine.with_expression (get_ccode_name (c), get_cvalue (c.value));
+                               decl_space.add_define (cdefine);
                        }
                }
        }
index f412d641b6d0d5ab1daef53c8cf788922119f067..9b917dea2dce283d8e3a07f89122ec6ff353a876 100644 (file)
@@ -955,6 +955,11 @@ TESTS = \
        resolver/peek-inner-types-ambiguous.test \
        resolver/peek-inner-types.vala \
        resolver/struct-base-cycle.test \
+       ordering/constant-class.vala \
+       ordering/constant-constant.vala \
+       ordering/constant-enum.vala \
+       ordering/constant-field.vala \
+       ordering/constant-struct.vala \
        ordering/delegate-class.vala \
        ordering/delegate-enum.vala \
        ordering/delegate-interface.vala \
index d201b566088b1288f3a9bd97507e15ab87432695..4bf72a2f72ff351553e4ff5d2c0c5e3473f30bc6 100644 (file)
@@ -4,12 +4,13 @@
 #include <glib.h>
 #include <string.h>
 
+#define BAR 1024
+
 #define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
 #define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
 #define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
 #define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
 
-#define BAR 1024
 static void _vala_main (void);
 static void _vala_array_destroy (gpointer array,
                           gssize array_length,
index e760db8c16744b14b5cf339fbec23c1bdb902238..ec9664488bf3ca9b64da998b845a5a5abc715e11 100644 (file)
@@ -6,6 +6,7 @@
 #include <stdlib.h>
 #include <glib-object.h>
 
+#define FOO 2
 #if !defined(VALA_EXTERN)
 #if defined(_MSC_VER)
 #define VALA_EXTERN __declspec(dllexport) extern
@@ -91,7 +92,6 @@ VALA_EXTERN gint* pass_helper (gint* a,
 static gint* _vala_array_dup8 (gint* self,
                         gssize length);
 VALA_EXTERN void test_array_pass (void);
-#define FOO 2
 VALA_EXTERN void test_static_array (void);
 VALA_EXTERN void test_reference_transfer (void);
 VALA_EXTERN void test_length_assignment (void);
index 9e295633c5a657c8a81966205a33cf82df67e34c..69d7e181f75ce1d91d66fd9e1e45b5ca84888914 100644 (file)
@@ -4,9 +4,10 @@
 #include <glib.h>
 #include <string.h>
 
+#define foo 3
+
 #define _g_free0(var) ((var == NULL) ? NULL : (var = (g_free (var), NULL)))
 
-#define foo 3
 static void _vala_main (void);
 static gint* _int_dup (gint* self);
 
index 8403cbcaf15a33cca7f28787a6389085517b0474..773d6921ce50f4f3d38a81676bde60b0162f3e62 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <glib.h>
 
+#define FOO_BAR 5
 #if !defined(VALA_EXTERN)
 #if defined(_MSC_VER)
 #define VALA_EXTERN __declspec(dllexport) extern
@@ -13,7 +14,6 @@
 #endif
 #endif
 
-#define FOO_BAR 5
 VALA_EXTERN void bar (gint* a,
           gint a_length1);
 static void _vala_main (void);
index 5b39d707b1cb40802a3d2cd14501eaa35cebb376..1beba725b050d03c7683e65a2a1abbe43a3cf809 100644 (file)
@@ -3,13 +3,14 @@
 
 #include <glib.h>
 
+#define simple_size ((gsize) sizeof (gint))
+#define composed_size ((gsize) (sizeof (gint) + sizeof (gsize)))
+
 #define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
 #define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
 #define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
 #define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
 
-#define simple_size ((gsize) sizeof (gint))
-#define composed_size ((gsize) (sizeof (gint) + sizeof (gsize)))
 static void _vala_main (void);
 
 static void
index 812a169ffe5f9941c1ef37af91d24d71e7195cca..f0bb50459c90c30399549b12c6a29f0c86243216 100644 (file)
@@ -8,6 +8,7 @@
 
 #define FOO "string constant"
 #define BAR _ ("translated string constant")
+
 static void _vala_main (void);
 
 static void
index 6a1a1b0157c05fce2183cb228c5c86863a33f2a4..dea8a5d739d73579f25d7d9e71f748fe8894464b 100644 (file)
@@ -5,6 +5,9 @@
 #include <string.h>
 #include <glib.h>
 
+#define FOO "foo"
+#define BAR "bar"
+#define MANAM "manam"
 #if !defined(VALA_EXTERN)
 #if defined(_MSC_VER)
 #define VALA_EXTERN __declspec(dllexport) extern
@@ -21,9 +24,6 @@
 #define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
 #define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
 
-#define FOO "foo"
-#define BAR "bar"
-#define MANAM "manam"
 VALA_EXTERN gchar* foo (void);
 VALA_EXTERN gchar* get_bar (void);
 VALA_EXTERN gchar* bar (void);
index fc6dd01979e63e19e04ebfbc9c9971b4b9d07253..bef176eac75953c5ee6ceb6e3a2832da97273830 100644 (file)
@@ -5,6 +5,7 @@
 #include <glib.h>
 #include <stdio.h>
 
+#define MAMAN_FOOISH_FOO 2
 #if !defined(VALA_EXTERN)
 #if defined(_MSC_VER)
 #define VALA_EXTERN __declspec(dllexport) extern
@@ -60,7 +61,6 @@ static gpointer maman_bar_parent_class = NULL;
 VALA_EXTERN GType maman_foo_get_type (void) G_GNUC_CONST ;
 VALA_EXTERN GType maman_fooish_get_type (void) G_GNUC_CONST ;
 VALA_EXTERN gint maman_fooish_something (MamanFooish self);
-#define MAMAN_FOOISH_FOO 2
 VALA_EXTERN GType maman_bar_get_type (void) G_GNUC_CONST ;
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (MamanBar, g_object_unref)
 VALA_EXTERN void maman_bar_run (MamanBar* self);
index 66743ce3bf6afd265a166e5637da824c54773942..24099c0fc4011f9c90ab82f4fdafed2ae595344d 100644 (file)
@@ -5,6 +5,8 @@
 #include <string.h>
 #include <glib.h>
 
+#define TEST 23
+
 #define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
 #define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
 #define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
@@ -12,7 +14,6 @@
 
 static void _vala_main (gchar** args,
                  gint args_length1);
-#define TEST 23
 
 static void
 _vala_main (gchar** args,
index 98ebea8be70e7d4ed0f64fdb65fcee426ae6c10b..749255e04491fd9a6ea164642dfc485a81d26b88 100644 (file)
@@ -7,6 +7,7 @@
 #include <glib/gi18n-lib.h>
 #include <glib-object.h>
 
+#define BAZ N_ ("bar")
 #if !defined(VALA_EXTERN)
 #if defined(_MSC_VER)
 #define VALA_EXTERN __declspec(dllexport) extern
@@ -61,7 +62,6 @@ static gpointer bar_parent_class = NULL;
 VALA_EXTERN gchar* bar_foo;
 gchar* bar_foo = NULL;
 
-#define BAZ N_ ("bar")
 VALA_EXTERN GType foo_get_type (void) G_GNUC_CONST ;
 VALA_EXTERN Foo* foo_dup (const Foo* self);
 VALA_EXTERN void foo_free (Foo* self);
diff --git a/tests/ordering/constant-class.c-expected b/tests/ordering/constant-class.c-expected
new file mode 100644 (file)
index 0000000..312b748
--- /dev/null
@@ -0,0 +1,326 @@
+/* ordering_constant_class.c generated by valac, the Vala compiler
+ * generated from ordering_constant_class.vala, do not modify */
+
+#include <glib-object.h>
+#include <glib.h>
+#include <gobject/gvaluecollector.h>
+
+#define FOO 42
+#if !defined(VALA_EXTERN)
+#if defined(_MSC_VER)
+#define VALA_EXTERN __declspec(dllexport) extern
+#elif __GNUC__ >= 4
+#define VALA_EXTERN __attribute__((visibility("default"))) extern
+#else
+#define VALA_EXTERN extern
+#endif
+#endif
+
+#define TYPE_FOOCLASS (fooclass_get_type ())
+#define FOOCLASS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_FOOCLASS, FooClass))
+#define FOOCLASS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_FOOCLASS, FooClassClass))
+#define IS_FOOCLASS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_FOOCLASS))
+#define IS_FOOCLASS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_FOOCLASS))
+#define FOOCLASS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_FOOCLASS, FooClassClass))
+
+typedef struct _FooClass FooClass;
+typedef struct _FooClassClass FooClassClass;
+typedef struct _FooClassPrivate FooClassPrivate;
+typedef struct _ParamSpecFooClass ParamSpecFooClass;
+#define _fooclass_unref0(var) ((var == NULL) ? NULL : (var = (fooclass_unref (var), NULL)))
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+struct _FooClass {
+       GTypeInstance parent_instance;
+       volatile int ref_count;
+       FooClassPrivate * priv;
+       gint field;
+       gint array[FOO];
+};
+
+struct _FooClassClass {
+       GTypeClass parent_class;
+       void (*finalize) (FooClass *self);
+};
+
+struct _FooClassPrivate {
+       gint pfield;
+       gint parray[FOO];
+};
+
+struct _ParamSpecFooClass {
+       GParamSpec parent_instance;
+};
+
+static gint FooClass_private_offset;
+static gpointer fooclass_parent_class = NULL;
+
+VALA_EXTERN gpointer fooclass_ref (gpointer instance);
+VALA_EXTERN void fooclass_unref (gpointer instance);
+VALA_EXTERN GParamSpec* param_spec_fooclass (const gchar* name,
+                                 const gchar* nick,
+                                 const gchar* blurb,
+                                 GType object_type,
+                                 GParamFlags flags);
+VALA_EXTERN void value_set_fooclass (GValue* value,
+                         gpointer v_object);
+VALA_EXTERN void value_take_fooclass (GValue* value,
+                          gpointer v_object);
+VALA_EXTERN gpointer value_get_fooclass (const GValue* value);
+VALA_EXTERN GType fooclass_get_type (void) G_GNUC_CONST ;
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (FooClass, fooclass_unref)
+VALA_EXTERN FooClass* fooclass_new (void);
+VALA_EXTERN FooClass* fooclass_construct (GType object_type);
+static void fooclass_finalize (FooClass * obj);
+static GType fooclass_get_type_once (void);
+static void _vala_main (void);
+
+static inline gpointer
+fooclass_get_instance_private (FooClass* self)
+{
+       return G_STRUCT_MEMBER_P (self, FooClass_private_offset);
+}
+
+FooClass*
+fooclass_construct (GType object_type)
+{
+       FooClass* self = NULL;
+       self = (FooClass*) g_type_create_instance (object_type);
+       _vala_assert (self->priv->pfield == 42, "pfield == 42");
+       _vala_assert (FOO == 42, "parray.length == 42");
+       return self;
+}
+
+FooClass*
+fooclass_new (void)
+{
+       return fooclass_construct (TYPE_FOOCLASS);
+}
+
+static void
+value_fooclass_init (GValue* value)
+{
+       value->data[0].v_pointer = NULL;
+}
+
+static void
+value_fooclass_free_value (GValue* value)
+{
+       if (value->data[0].v_pointer) {
+               fooclass_unref (value->data[0].v_pointer);
+       }
+}
+
+static void
+value_fooclass_copy_value (const GValue* src_value,
+                           GValue* dest_value)
+{
+       if (src_value->data[0].v_pointer) {
+               dest_value->data[0].v_pointer = fooclass_ref (src_value->data[0].v_pointer);
+       } else {
+               dest_value->data[0].v_pointer = NULL;
+       }
+}
+
+static gpointer
+value_fooclass_peek_pointer (const GValue* value)
+{
+       return value->data[0].v_pointer;
+}
+
+static gchar*
+value_fooclass_collect_value (GValue* value,
+                              guint n_collect_values,
+                              GTypeCValue* collect_values,
+                              guint collect_flags)
+{
+       if (collect_values[0].v_pointer) {
+               FooClass * 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 = fooclass_ref (object);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       return NULL;
+}
+
+static gchar*
+value_fooclass_lcopy_value (const GValue* value,
+                            guint n_collect_values,
+                            GTypeCValue* collect_values,
+                            guint collect_flags)
+{
+       FooClass ** 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 = fooclass_ref (value->data[0].v_pointer);
+       }
+       return NULL;
+}
+
+GParamSpec*
+param_spec_fooclass (const gchar* name,
+                     const gchar* nick,
+                     const gchar* blurb,
+                     GType object_type,
+                     GParamFlags flags)
+{
+       ParamSpecFooClass* spec;
+       g_return_val_if_fail (g_type_is_a (object_type, TYPE_FOOCLASS), 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_fooclass (const GValue* value)
+{
+       g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_FOOCLASS), NULL);
+       return value->data[0].v_pointer;
+}
+
+void
+value_set_fooclass (GValue* value,
+                    gpointer v_object)
+{
+       FooClass * old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_FOOCLASS));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_FOOCLASS));
+               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;
+               fooclass_ref (value->data[0].v_pointer);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               fooclass_unref (old);
+       }
+}
+
+void
+value_take_fooclass (GValue* value,
+                     gpointer v_object)
+{
+       FooClass * old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_FOOCLASS));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_FOOCLASS));
+               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) {
+               fooclass_unref (old);
+       }
+}
+
+static void
+fooclass_class_init (FooClassClass * klass,
+                     gpointer klass_data)
+{
+       fooclass_parent_class = g_type_class_peek_parent (klass);
+       ((FooClassClass *) klass)->finalize = fooclass_finalize;
+       g_type_class_adjust_private_offset (klass, &FooClass_private_offset);
+}
+
+static void
+fooclass_instance_init (FooClass * self,
+                        gpointer klass)
+{
+       self->priv = fooclass_get_instance_private (self);
+       self->field = FOO;
+       self->priv->pfield = FOO;
+       self->ref_count = 1;
+}
+
+static void
+fooclass_finalize (FooClass * obj)
+{
+       FooClass * self;
+       self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_FOOCLASS, FooClass);
+       g_signal_handlers_destroy (self);
+}
+
+static GType
+fooclass_get_type_once (void)
+{
+       static const GTypeValueTable g_define_type_value_table = { value_fooclass_init, value_fooclass_free_value, value_fooclass_copy_value, value_fooclass_peek_pointer, "p", value_fooclass_collect_value, "p", value_fooclass_lcopy_value };
+       static const GTypeInfo g_define_type_info = { sizeof (FooClassClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) fooclass_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (FooClass), 0, (GInstanceInitFunc) fooclass_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 fooclass_type_id;
+       fooclass_type_id = g_type_register_fundamental (g_type_fundamental_next (), "FooClass", &g_define_type_info, &g_define_type_fundamental_info, 0);
+       FooClass_private_offset = g_type_add_instance_private (fooclass_type_id, sizeof (FooClassPrivate));
+       return fooclass_type_id;
+}
+
+GType
+fooclass_get_type (void)
+{
+       static volatile gsize fooclass_type_id__volatile = 0;
+       if (g_once_init_enter (&fooclass_type_id__volatile)) {
+               GType fooclass_type_id;
+               fooclass_type_id = fooclass_get_type_once ();
+               g_once_init_leave (&fooclass_type_id__volatile, fooclass_type_id);
+       }
+       return fooclass_type_id__volatile;
+}
+
+gpointer
+fooclass_ref (gpointer instance)
+{
+       FooClass * self;
+       self = instance;
+       g_atomic_int_inc (&self->ref_count);
+       return instance;
+}
+
+void
+fooclass_unref (gpointer instance)
+{
+       FooClass * self;
+       self = instance;
+       if (g_atomic_int_dec_and_test (&self->ref_count)) {
+               FOOCLASS_GET_CLASS (self)->finalize (self);
+               g_type_free_instance ((GTypeInstance *) self);
+       }
+}
+
+static void
+_vala_main (void)
+{
+       FooClass* foo = NULL;
+       FooClass* _tmp0_;
+       _tmp0_ = fooclass_new ();
+       foo = _tmp0_;
+       _vala_assert (foo->field == 42, "foo.field == 42");
+       _vala_assert (FOO == 42, "foo.array.length == 42");
+       _fooclass_unref0 (foo);
+}
+
+int
+main (int argc,
+      char ** argv)
+{
+       _vala_main ();
+       return 0;
+}
+
diff --git a/tests/ordering/constant-class.vala b/tests/ordering/constant-class.vala
new file mode 100644 (file)
index 0000000..3a2f468
--- /dev/null
@@ -0,0 +1,19 @@
+class FooClass {
+       public int field = FOO;
+       public int array[FOO];
+       int pfield = FOO;
+       int parray[FOO];
+
+       public FooClass () {
+               assert (pfield == 42);
+               assert (parray.length == 42);
+       }
+}
+
+const int FOO = 42;
+
+void main () {
+       var foo = new FooClass ();
+       assert (foo.field == 42);
+       assert (foo.array.length == 42);
+}
diff --git a/tests/ordering/constant-constant.c-expected b/tests/ordering/constant-constant.c-expected
new file mode 100644 (file)
index 0000000..e42751a
--- /dev/null
@@ -0,0 +1,31 @@
+/* ordering_constant_constant.c generated by valac, the Vala compiler
+ * generated from ordering_constant_constant.vala, do not modify */
+
+#include <glib.h>
+
+#define FOO 42
+#define BAR FOO
+#define FOO_BAR (FOO + BAR)
+
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+static void _vala_main (void);
+
+static void
+_vala_main (void)
+{
+       _vala_assert (BAR == 42, "BAR == 42");
+       _vala_assert (FOO_BAR == 84, "FOO_BAR == 84");
+}
+
+int
+main (int argc,
+      char ** argv)
+{
+       _vala_main ();
+       return 0;
+}
+
diff --git a/tests/ordering/constant-constant.vala b/tests/ordering/constant-constant.vala
new file mode 100644 (file)
index 0000000..8915dd2
--- /dev/null
@@ -0,0 +1,10 @@
+const int FOO_BAR = FOO + BAR;
+
+const int BAR = FOO;
+
+const int FOO = 42;
+
+void main () {
+       assert (BAR == 42);
+       assert (FOO_BAR == 84);
+}
diff --git a/tests/ordering/constant-enum.c-expected b/tests/ordering/constant-enum.c-expected
new file mode 100644 (file)
index 0000000..308e197
--- /dev/null
@@ -0,0 +1,65 @@
+/* ordering_constant_enum.c generated by valac, the Vala compiler
+ * generated from ordering_constant_enum.vala, do not modify */
+
+#include <glib.h>
+#include <glib-object.h>
+
+#define FOO 42
+#if !defined(VALA_EXTERN)
+#if defined(_MSC_VER)
+#define VALA_EXTERN __declspec(dllexport) extern
+#elif __GNUC__ >= 4
+#define VALA_EXTERN __attribute__((visibility("default"))) extern
+#else
+#define VALA_EXTERN extern
+#endif
+#endif
+
+typedef enum  {
+       FOO_ENUM_BAR = FOO
+} FooEnum;
+
+#define TYPE_FOO_ENUM (foo_enum_get_type ())
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+VALA_EXTERN GType foo_enum_get_type (void) G_GNUC_CONST ;
+static void _vala_main (void);
+
+static GType
+foo_enum_get_type_once (void)
+{
+       static const GEnumValue values[] = {{FOO_ENUM_BAR, "FOO_ENUM_BAR", "bar"}, {0, NULL, NULL}};
+       GType foo_enum_type_id;
+       foo_enum_type_id = g_enum_register_static ("FooEnum", values);
+       return foo_enum_type_id;
+}
+
+GType
+foo_enum_get_type (void)
+{
+       static volatile gsize foo_enum_type_id__volatile = 0;
+       if (g_once_init_enter (&foo_enum_type_id__volatile)) {
+               GType foo_enum_type_id;
+               foo_enum_type_id = foo_enum_get_type_once ();
+               g_once_init_leave (&foo_enum_type_id__volatile, foo_enum_type_id);
+       }
+       return foo_enum_type_id__volatile;
+}
+
+static void
+_vala_main (void)
+{
+       _vala_assert (FOO_ENUM_BAR == 42, "FooEnum.BAR == 42");
+}
+
+int
+main (int argc,
+      char ** argv)
+{
+       _vala_main ();
+       return 0;
+}
+
diff --git a/tests/ordering/constant-enum.vala b/tests/ordering/constant-enum.vala
new file mode 100644 (file)
index 0000000..2fee75e
--- /dev/null
@@ -0,0 +1,9 @@
+enum FooEnum {
+       BAR = FOO;
+}
+
+const int FOO = 42;
+
+void main () {
+       assert (FooEnum.BAR == 42);
+}
diff --git a/tests/ordering/constant-field.c-expected b/tests/ordering/constant-field.c-expected
new file mode 100644 (file)
index 0000000..ffc093b
--- /dev/null
@@ -0,0 +1,43 @@
+/* ordering_constant_field.c generated by valac, the Vala compiler
+ * generated from ordering_constant_field.vala, do not modify */
+
+#include <glib.h>
+
+#define FOO 42
+#if !defined(VALA_EXTERN)
+#if defined(_MSC_VER)
+#define VALA_EXTERN __declspec(dllexport) extern
+#elif __GNUC__ >= 4
+#define VALA_EXTERN __attribute__((visibility("default"))) extern
+#else
+#define VALA_EXTERN extern
+#endif
+#endif
+
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+VALA_EXTERN gint field;
+gint field = FOO;
+VALA_EXTERN gint array[FOO];
+gint array[FOO] = {0};
+
+static void _vala_main (void);
+
+static void
+_vala_main (void)
+{
+       _vala_assert (field == 42, "field == 42");
+       _vala_assert (FOO == 42, "array.length == 42");
+}
+
+int
+main (int argc,
+      char ** argv)
+{
+       _vala_main ();
+       return 0;
+}
+
diff --git a/tests/ordering/constant-field.vala b/tests/ordering/constant-field.vala
new file mode 100644 (file)
index 0000000..389d2e2
--- /dev/null
@@ -0,0 +1,9 @@
+int field = FOO;
+int array[FOO];
+
+const int FOO = 42;
+
+void main () {
+       assert (field == 42);
+       assert (array.length == 42);
+}
diff --git a/tests/ordering/constant-struct.c-expected b/tests/ordering/constant-struct.c-expected
new file mode 100644 (file)
index 0000000..d85d9c4
--- /dev/null
@@ -0,0 +1,88 @@
+/* ordering_constant_struct.c generated by valac, the Vala compiler
+ * generated from ordering_constant_struct.vala, do not modify */
+
+#include <glib-object.h>
+#include <glib.h>
+#include <string.h>
+
+#define FOO 42
+#if !defined(VALA_EXTERN)
+#if defined(_MSC_VER)
+#define VALA_EXTERN __declspec(dllexport) extern
+#elif __GNUC__ >= 4
+#define VALA_EXTERN __attribute__((visibility("default"))) extern
+#else
+#define VALA_EXTERN extern
+#endif
+#endif
+
+#define TYPE_FOO_STRUCT (foo_struct_get_type ())
+typedef struct _FooStruct FooStruct;
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+struct _FooStruct {
+       gint array[FOO];
+};
+
+VALA_EXTERN GType foo_struct_get_type (void) G_GNUC_CONST ;
+VALA_EXTERN FooStruct* foo_struct_dup (const FooStruct* self);
+VALA_EXTERN void foo_struct_free (FooStruct* self);
+static void _vala_main (void);
+
+FooStruct*
+foo_struct_dup (const FooStruct* self)
+{
+       FooStruct* dup;
+       dup = g_new0 (FooStruct, 1);
+       memcpy (dup, self, sizeof (FooStruct));
+       return dup;
+}
+
+void
+foo_struct_free (FooStruct* self)
+{
+       g_free (self);
+}
+
+static GType
+foo_struct_get_type_once (void)
+{
+       GType foo_struct_type_id;
+       foo_struct_type_id = g_boxed_type_register_static ("FooStruct", (GBoxedCopyFunc) foo_struct_dup, (GBoxedFreeFunc) foo_struct_free);
+       return foo_struct_type_id;
+}
+
+GType
+foo_struct_get_type (void)
+{
+       static volatile gsize foo_struct_type_id__volatile = 0;
+       if (g_once_init_enter (&foo_struct_type_id__volatile)) {
+               GType foo_struct_type_id;
+               foo_struct_type_id = foo_struct_get_type_once ();
+               g_once_init_leave (&foo_struct_type_id__volatile, foo_struct_type_id);
+       }
+       return foo_struct_type_id__volatile;
+}
+
+static void
+_vala_main (void)
+{
+       FooStruct foo = {0};
+       FooStruct _tmp0_ = {0};
+       FooStruct _tmp1_;
+       foo = _tmp0_;
+       _tmp1_ = foo;
+       _vala_assert (FOO == 42, "foo.array.length == 42");
+}
+
+int
+main (int argc,
+      char ** argv)
+{
+       _vala_main ();
+       return 0;
+}
+
diff --git a/tests/ordering/constant-struct.vala b/tests/ordering/constant-struct.vala
new file mode 100644 (file)
index 0000000..135cd4f
--- /dev/null
@@ -0,0 +1,10 @@
+struct FooStruct {
+       public int array[FOO];
+}
+
+const int FOO = 42;
+
+void main () {
+       FooStruct foo = {};
+       assert (foo.array.length == 42);
+}
index c4ed3586d69134a52684879fad2a1b4ea1f721f1..7b76fb9d856f240ac47f83c86359bff937b3203e 100644 (file)
@@ -8,6 +8,7 @@
 #include <string.h>
 #include <stdbool.h>
 
+#define FOO 2
 #if !defined(VALA_EXTERN)
 #if defined(_MSC_VER)
 #define VALA_EXTERN __declspec(dllexport) extern
@@ -85,7 +86,6 @@ VALA_EXTERN int* pass_helper (int* a,
 static int* _vala_array_dup8 (int* self,
                        ssize_t length);
 VALA_EXTERN void test_array_pass (void);
-#define FOO 2
 VALA_EXTERN void test_static_array (void);
 VALA_EXTERN void test_reference_transfer (void);
 VALA_EXTERN void test_length_assignment (void);
index e73423aa57a1efb21edca4e77156b7817979295a..1e589ffbc60f66d02a14c27dc0ce39d0c2293d7e 100644 (file)
@@ -5,6 +5,8 @@
 #include <glib.h>
 #include <string.h>
 
+#define FOO_FOO 23
+#define BAR FOO_FOO
 #if !defined(VALA_EXTERN)
 #if defined(_MSC_VER)
 #define VALA_EXTERN __declspec(dllexport) extern
@@ -32,8 +34,6 @@ Foo foo_static_field = {0};
 VALA_EXTERN GType foo_get_type (void) G_GNUC_CONST ;
 VALA_EXTERN Foo* foo_dup (const Foo* self);
 VALA_EXTERN void foo_free (Foo* self);
-#define FOO_FOO 23
-#define BAR FOO_FOO
 static void _vala_main (void);
 
 Foo*