]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Fix definition of fields when array length cname is specified
authorLuca Bruno <lucabru@src.gnome.org>
Sun, 29 May 2011 17:05:00 +0000 (19:05 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Sun, 29 May 2011 17:05:00 +0000 (19:05 +0200)
Fixes bug 588203.

codegen/valaccodestructmodule.vala
codegen/valagtypemodule.vala
tests/Makefile.am
tests/objects/bug588203.vala [new file with mode: 0644]

index b038472b9dde56aef728391fe72256a620535acb..a1abbbf9cc9156e8ea32be78a717243fc8596fd1 100644 (file)
@@ -79,7 +79,13 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
                                                var len_type = int_type.copy ();
 
                                                for (int dim = 1; dim <= array_type.rank; dim++) {
-                                                       instance_struct.add_field (len_type.get_cname (), get_array_length_cname (f.name, dim));
+                                                       string length_cname;
+                                                       if (f.has_array_length_cname) {
+                                                               length_cname = f.get_array_length_cname ();
+                                                       } else {
+                                                               length_cname = get_array_length_cname (f.name, dim);
+                                                       }
+                                                       instance_struct.add_field (len_type.get_cname (), length_cname);
                                                }
 
                                                if (array_type.rank == 1 && f.is_internal_symbol ()) {
index 73a12596d199f1e0726cfb283f53804912ddf24d..239f3a38c5d369bedc344f1214b8c28c78b0a1a0 100644 (file)
@@ -321,7 +321,13 @@ public class Vala.GTypeModule : GErrorModule {
                                                        var len_type = int_type.copy ();
 
                                                        for (int dim = 1; dim <= array_type.rank; dim++) {
-                                                               instance_struct.add_field (len_type.get_cname (), get_array_length_cname (f.name, dim));
+                                                               string length_cname;
+                                                               if (f.has_array_length_cname) {
+                                                                       length_cname = f.get_array_length_cname ();
+                                                               } else {
+                                                                       length_cname = get_array_length_cname (f.name, dim);
+                                                               }
+                                                               instance_struct.add_field (len_type.get_cname (), length_cname);
                                                        }
 
                                                        if (array_type.rank == 1 && f.is_internal_symbol ()) {
@@ -421,7 +427,13 @@ public class Vala.GTypeModule : GErrorModule {
 
                                                if (!array_type.fixed_length) {
                                                        for (int dim = 1; dim <= array_type.rank; dim++) {
-                                                               instance_priv_struct.add_field (len_type.get_cname (), get_array_length_cname (f.name, dim));
+                                                               string length_cname;
+                                                               if (f.has_array_length_cname) {
+                                                                       length_cname = f.get_array_length_cname ();
+                                                               } else {
+                                                                       length_cname = get_array_length_cname (f.name, dim);
+                                                               }
+                                                               instance_priv_struct.add_field (len_type.get_cname (), length_cname);
                                                        }
 
                                                        if (array_type.rank == 1 && f.is_internal_symbol ()) {
index b4026c48614dba687be02e71f7557992696d9cdb..2d70b43ea229612c4f19e8a7cc7c7920bb8a17e9 100644 (file)
@@ -74,6 +74,7 @@ TESTS = \
        objects/test-029.vala \
        objects/test-034.vala \
        objects/bug566909.vala \
+       objects/bug588203.vala \
        objects/bug593260.vala \
        objects/bug596621.vala \
        objects/bug597155.vala \
diff --git a/tests/objects/bug588203.vala b/tests/objects/bug588203.vala
new file mode 100644 (file)
index 0000000..e3c251e
--- /dev/null
@@ -0,0 +1,9 @@
+public class Foo {
+       [CCode (array_length_cname = "length")]
+       public int[] bar;
+}
+
+void main () {
+       var foo = new Foo ();
+       foo.bar = new int[10];
+}