From: Jürg Billeter Date: Sat, 10 Jul 2010 15:04:10 +0000 (+0200) Subject: dova: Fix memory handling of elements in list, set, and map literals X-Git-Tag: 0.9.3~21 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=905ef386be3e35502f7a78e2a823e95f9702af67;p=thirdparty%2Fvala.git dova: Fix memory handling of elements in list, set, and map literals Fixes bug 624036. --- diff --git a/vala/valalistliteral.vala b/vala/valalistliteral.vala index b5012c417..bee7431cc 100644 --- a/vala/valalistliteral.vala +++ b/vala/valalistliteral.vala @@ -91,6 +91,7 @@ public class Vala.ListLiteral : Literal { bool fixed_element_type = false; if (target_type != null && target_type.data_type == list_type.data_type && target_type.get_type_arguments ().size == 1) { element_type = target_type.get_type_arguments ().get (0).copy (); + element_type.value_owned = false; fixed_element_type = true; } @@ -103,9 +104,11 @@ public class Vala.ListLiteral : Literal { } if (element_type == null) { element_type = expr.value_type.copy (); + element_type.value_owned = false; } } + element_type = element_type.copy (); element_type.value_owned = true; list_type.add_type_argument (element_type); value_type = list_type; diff --git a/vala/valamapliteral.vala b/vala/valamapliteral.vala index 054babb40..677a5db3d 100644 --- a/vala/valamapliteral.vala +++ b/vala/valamapliteral.vala @@ -90,7 +90,9 @@ public class Vala.MapLiteral : Literal { bool fixed_element_type = false; if (target_type != null && target_type.data_type == map_type.data_type && target_type.get_type_arguments ().size == 2) { map_key_type = target_type.get_type_arguments ().get (0).copy (); + map_key_type.value_owned = false; map_value_type = target_type.get_type_arguments ().get (1).copy (); + map_value_type.value_owned = false; fixed_element_type = true; } @@ -107,11 +109,15 @@ public class Vala.MapLiteral : Literal { } if (map_key_type == null) { map_key_type = keys[i].value_type.copy (); + map_key_type.value_owned = false; map_value_type = values[i].value_type.copy (); + map_value_type.value_owned = false; } } + map_key_type = map_key_type.copy (); map_key_type.value_owned = true; + map_value_type = map_value_type.copy (); map_value_type.value_owned = true; map_type.add_type_argument (map_key_type); map_type.add_type_argument (map_value_type); diff --git a/vala/valasetliteral.vala b/vala/valasetliteral.vala index 6a6cc41c1..fdbb44ff8 100644 --- a/vala/valasetliteral.vala +++ b/vala/valasetliteral.vala @@ -75,6 +75,7 @@ public class Vala.SetLiteral : Literal { bool fixed_element_type = false; if (target_type != null && target_type.data_type == set_type.data_type && target_type.get_type_arguments ().size == 1) { element_type = target_type.get_type_arguments ().get (0).copy (); + element_type.value_owned = false; fixed_element_type = true; } @@ -87,9 +88,11 @@ public class Vala.SetLiteral : Literal { } if (element_type == null) { element_type = expr.value_type.copy (); + element_type.value_owned = false; } } + element_type = element_type.copy (); element_type.value_owned = true; set_type.add_type_argument (element_type); value_type = set_type;