From: Jürg Billeter Date: Thu, 30 Sep 2010 19:27:50 +0000 (+0200) Subject: dova: Fix crash on replaced expressions in list and set literals X-Git-Tag: 0.10.1~51 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ea2554ef1819ef389a799ff25e8850ec74ab9ee2;p=thirdparty%2Fvala.git dova: Fix crash on replaced expressions in list and set literals --- diff --git a/vala/valalistliteral.vala b/vala/valalistliteral.vala index f816550cb..e3c6d6de9 100644 --- a/vala/valalistliteral.vala +++ b/vala/valalistliteral.vala @@ -95,13 +95,19 @@ public class Vala.ListLiteral : Literal { fixed_element_type = true; } - foreach (var expr in expression_list) { + for (int i = 0; i < expression_list.size; i++) { + var expr = expression_list[i]; + if (fixed_element_type) { expr.target_type = element_type; } if (!expr.check (analyzer)) { return false; } + + // expression might have been replaced in the list + expr = expression_list[i]; + if (element_type == null) { element_type = expr.value_type.copy (); element_type.value_owned = false; diff --git a/vala/valasetliteral.vala b/vala/valasetliteral.vala index 42be178d5..5ae8e94bb 100644 --- a/vala/valasetliteral.vala +++ b/vala/valasetliteral.vala @@ -79,13 +79,19 @@ public class Vala.SetLiteral : Literal { fixed_element_type = true; } - foreach (var expr in expression_list) { + for (int i = 0; i < expression_list.size; i++) { + var expr = expression_list[i]; + if (fixed_element_type) { expr.target_type = element_type; } if (!expr.check (analyzer)) { return false; } + + // expression might have been replaced in the list + expr = expression_list[i]; + if (element_type == null) { element_type = expr.value_type.copy (); element_type.value_owned = false;