]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Fix access to arrays with fixed length
authorLuca Bruno <lucabru@src.gnome.org>
Sun, 12 Jun 2011 07:42:52 +0000 (09:42 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Sun, 12 Jun 2011 07:42:52 +0000 (09:42 +0200)
Fixes bug 652380.

codegen/valaccodememberaccessmodule.vala
tests/Makefile.am
tests/basic-types/bug652380.vala [new file with mode: 0644]

index 6f2478bdcc5a59289d7df60cc3d0afa03e95bfa0..4387a327d4f5cab3d935501514f0358f026dd85c 100644 (file)
@@ -355,7 +355,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                        // captured variables are stored on the heap
                        var block = (Block) local.parent_symbol;
                        result.cvalue = new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (get_block_id (block))), get_variable_cname (local.name));
-                       if (array_type != null) {
+                       if (array_type != null && !array_type.fixed_length) {
                                for (int dim = 1; dim <= array_type.rank; dim++) {
                                        result.append_array_length_cvalue (new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (get_block_id (block))), get_array_length_cname (get_variable_cname (local.name), dim)));
                                }
@@ -370,7 +370,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                        }
                } else {
                        result.cvalue = get_variable_cexpression (local.name);
-                       if (array_type != null) {
+                       if (array_type != null && !array_type.fixed_length) {
                                for (int dim = 1; dim <= array_type.rank; dim++) {
                                        result.append_array_length_cvalue (get_variable_cexpression (get_array_length_cname (get_variable_cname (local.name), dim)));
                                }
@@ -663,7 +663,10 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                var array_type = result.value_type as ArrayType;
                var delegate_type = result.value_type as DelegateType;
                if (array_type != null) {
-                       if (variable.array_null_terminated) {
+                       if (array_type.fixed_length) {
+                               result.array_length_cvalues = null;
+                               result.append_array_length_cvalue (new CCodeConstant (array_type.length.to_string ()));
+                       } else if (variable.array_null_terminated) {
                                requires_array_length = true;
                                var len_call = new CCodeFunctionCall (new CCodeIdentifier ("_vala_array_length"));
                                len_call.add_argument (result.cvalue);
index 820f42b924bccd3443a83be7093c03e8baecdbb1..9e3ee86356792aee1aa89e0475e64326b8dcb135 100644 (file)
@@ -26,6 +26,7 @@ TESTS = \
        basic-types/bug596785.vala \
        basic-types/bug632322.vala \
        basic-types/bug650993.vala \
+       basic-types/bug652380.vala \
        namespaces.vala \
        methods/lambda.vala \
        methods/closures.vala \
diff --git a/tests/basic-types/bug652380.vala b/tests/basic-types/bug652380.vala
new file mode 100644 (file)
index 0000000..f616896
--- /dev/null
@@ -0,0 +1,4 @@
+void main () {
+       int foo[3];
+       int[] bar = foo;
+}