]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: handle out param of null-terminated array
authorLuca Bruno <lucabru@src.gnome.org>
Wed, 4 Mar 2015 13:57:01 +0000 (14:57 +0100)
committerLuca Bruno <lucabru@src.gnome.org>
Wed, 4 Mar 2015 13:58:43 +0000 (14:58 +0100)
Fixes bug 743877

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

index 728dccdd491d4f35796e1b9862c90aae3f3bc24b..8e923ea7dda30e615e5b572109421f9ac0d2da56 100644 (file)
@@ -800,8 +800,10 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 
                params_it = params.iterator ();
                foreach (Expression arg in expr.get_argument_list ()) {
+                       Parameter param = null;
+                       
                        if (params_it.next ()) {
-                               var param = params_it.get ();
+                               param = params_it.get ();
                                if (param.params_array || param.ellipsis) {
                                        // ignore ellipsis arguments as we currently don't use temporary variables for them
                                        break;
@@ -820,6 +822,15 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 
                        // assign new value
                        store_value (unary.inner.target_value, transform_value (unary.target_value, unary.inner.value_type, arg));
+
+                       // handle out null terminated arrays
+                       if (param != null && get_ccode_array_null_terminated (param)) {
+                               requires_array_length = true;
+                               var len_call = new CCodeFunctionCall (new CCodeIdentifier ("_vala_array_length"));
+                               len_call.add_argument (get_cvalue_ (unary.inner.target_value));
+                               
+                               ccode.add_assignment (get_array_length_cvalue (unary.inner.target_value, 1), len_call);
+                       }
                }
 
                if (m is CreationMethod && m.parent_symbol is Class && current_class.base_class == gsource_type) {
index 73fe7e366eac0e0d51ba41c5362d48a9984cc351..32026c8b86a0d0acac377ee2778f816214700824 100644 (file)
@@ -68,6 +68,7 @@ TESTS = \
        methods/bug726347.vala \
        methods/bug736235.vala \
        methods/bug737222.vala \
+       methods/bug743877.vala \
        methods/generics.vala \
        control-flow/break.vala \
        control-flow/expressions-conditional.vala \
diff --git a/tests/methods/bug743877.vala b/tests/methods/bug743877.vala
new file mode 100644 (file)
index 0000000..9049724
--- /dev/null
@@ -0,0 +1,11 @@
+void main () {
+       Intl.setlocale ();
+
+       string input_str = "Álvaro";
+       string[] alternates;
+       var tokens = input_str.tokenize_and_fold (null, out alternates);
+
+       assert ("álvaro" in tokens);
+       assert ("alvaro" in alternates);
+}
+