]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Set array lengths for result variable
authorSimon Werbeck <simon.werbeck@gmail.com>
Tue, 25 Nov 2014 01:23:17 +0000 (02:23 +0100)
committerLuca Bruno <lucabru@src.gnome.org>
Fri, 5 Dec 2014 16:52:06 +0000 (17:52 +0100)
These where missing when generating postconditions

Fixes bug 737222

codegen/valaccodememberaccessmodule.vala
tests/Makefile.am
tests/methods/bug737222.vala [new file with mode: 0644]

index afe81042cd1afecb148a126498dc0c020350af5a..4f846b6536d1055937cb9c5c9d122464482b22b8 100644 (file)
@@ -349,6 +349,11 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                        } else {
                                result.cvalue = new CCodeIdentifier ("result");
                        }
+                       if (array_type != null && !array_type.fixed_length && ((current_method != null && get_ccode_array_length (current_method)) || current_property_accessor != null)) {
+                               for (int dim = 1; dim <= array_type.rank; dim++) {
+                                       result.append_array_length_cvalue (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, get_variable_cexpression (get_array_length_cname ("result", dim))));
+                               }
+                       }
                } else if (local.captured) {
                        // captured variables are stored on the heap
                        var block = (Block) local.parent_symbol;
index 0da5e3bfbcdbeb93845c573e3c3037a787fa605f..ee5bbfeab8616e4beb76def2e7b174021449c7d4 100644 (file)
@@ -65,6 +65,7 @@ TESTS = \
        methods/bug723195.vala \
        methods/bug726347.vala \
        methods/bug736235.vala \
+       methods/bug737222.vala \
        methods/generics.vala \
        control-flow/break.vala \
        control-flow/expressions-conditional.vala \
diff --git a/tests/methods/bug737222.vala b/tests/methods/bug737222.vala
new file mode 100644 (file)
index 0000000..85eee5a
--- /dev/null
@@ -0,0 +1,13 @@
+int[] foo () ensures (result.length == 0 || result.length == 1) {
+       return new int[1];
+}
+
+[CCode (array_length = false, array_null_terminated = true)]
+string[] bar () ensures (result[0] == "bar") {
+       return new string[] {"bar"};
+}
+
+void main () {
+       foo ();
+       bar ();
+}