From: Luca Bruno Date: Wed, 4 Mar 2015 13:57:01 +0000 (+0100) Subject: codegen: handle out param of null-terminated array X-Git-Tag: 0.27.2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e7be2626460c5de651df8f3bde7ead718d7b31aa;p=thirdparty%2Fvala.git codegen: handle out param of null-terminated array Fixes bug 743877 --- diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala index 728dccdd4..8e923ea7d 100644 --- a/codegen/valaccodemethodcallmodule.vala +++ b/codegen/valaccodemethodcallmodule.vala @@ -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) { diff --git a/tests/Makefile.am b/tests/Makefile.am index 73fe7e366..32026c8b8 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -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 index 000000000..9049724b8 --- /dev/null +++ b/tests/methods/bug743877.vala @@ -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); +} +