[vala] codegen: handle out param of null-terminated array
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] codegen: handle out param of null-terminated array
- Date: Wed, 4 Mar 2015 14:01:39 +0000 (UTC)
commit e7be2626460c5de651df8f3bde7ead718d7b31aa
Author: Luca Bruno <lucabru src gnome org>
Date: Wed Mar 4 14:57:01 2015 +0100
codegen: handle out param of null-terminated array
Fixes bug 743877
codegen/valaccodemethodcallmodule.vala | 13 ++++++++++++-
tests/Makefile.am | 1 +
tests/methods/bug743877.vala | 11 +++++++++++
3 files changed, 24 insertions(+), 1 deletions(-)
---
diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala
index 728dccd..8e923ea 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 73fe7e3..32026c8 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 0000000..9049724
--- /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);
+}
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]