]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
dova: Fix memory handling of elements in list, set, and map literals
authorJürg Billeter <j@bitron.ch>
Sat, 10 Jul 2010 15:04:10 +0000 (17:04 +0200)
committerJürg Billeter <j@bitron.ch>
Sat, 10 Jul 2010 15:04:32 +0000 (17:04 +0200)
Fixes bug 624036.

vala/valalistliteral.vala
vala/valamapliteral.vala
vala/valasetliteral.vala

index b5012c4173d8d8072fc8e4e8c798163c74791e58..bee7431ccafebe4feaa9fb18433c1a934bae1c38 100644 (file)
@@ -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;
index 054babb40d3231eb39af6b1a74e5d10c2274fa66..677a5db3d4157abd1e881b979b59db2aab36f0e3 100644 (file)
@@ -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);
index 6a6cc41c1a39d722708ee50c11fd314c561479aa..fdbb44ff8841ae36eaf3d669d3a6a0aafdace54b 100644 (file)
@@ -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;