]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix crash due to not copying a type
authorLuca Bruno <lucabru@src.gnome.org>
Wed, 9 Oct 2013 18:57:08 +0000 (20:57 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Thu, 17 Oct 2013 19:35:53 +0000 (21:35 +0200)
vala/valaarraytype.vala
vala/valadatatype.vala
vala/valamethodcall.vala
vala/valapointertype.vala

index b3767233529d19bbf4f17f66af8fb47628a69e7e..852342c2025b6e87123cec4e2d6c8338d506b752 100644 (file)
@@ -235,14 +235,13 @@ public class Vala.ArrayType : ReferenceType {
        }
 
        public override DataType get_actual_type (DataType? derived_instance_type, MemberAccess? method_access, CodeNode node_reference) {
+               ArrayType result = (ArrayType) this.copy ();
+
                if (derived_instance_type == null && method_access == null) {
-                       return this;
+                       return result;
                }
 
-               ArrayType result = this;
-
                if (element_type is GenericType || element_type.has_type_arguments ()) {
-                       result = (ArrayType) result.copy ();
                        result.element_type = result.element_type.get_actual_type (derived_instance_type, method_access, node_reference);
                }
 
index 085d321e0519302ff1a0da8c50a2a7c130b422e2..352885bfd9cb518a30d218ab7fd1adcdd20838a8 100644 (file)
@@ -442,19 +442,18 @@ public abstract class Vala.DataType : CodeNode {
        }
 
        public virtual DataType get_actual_type (DataType? derived_instance_type, MemberAccess? method_access, CodeNode node_reference) {
+               DataType result = this.copy ();
+
                if (derived_instance_type == null && method_access == null) {
-                       return this;
+                       return result;
                }
 
-               DataType result = this;
-
                if (result is GenericType) {
                        result = SemanticAnalyzer.get_actual_type (derived_instance_type, method_access, (GenericType) result, node_reference);
                        // don't try to resolve type arguments of returned actual type
                        // they can never be resolved and are not related to the instance type
                } else if (result.type_argument_list != null) {
                        // recursely get actual types for type arguments
-                       result = result.copy ();
                        for (int i = 0; i < result.type_argument_list.size; i++) {
                                result.type_argument_list[i] = result.type_argument_list[i].get_actual_type (derived_instance_type, method_access, node_reference);
                        }
index 89d2ba5cc057b8cd426ea3c85a832fa6fe203095..f30f59c409e7518f9229d1a504f8e693feebb536 100644 (file)
@@ -579,7 +579,7 @@ public class Vala.MethodCall : Expression {
                        }
                }
 
-               formal_value_type = ret_type;
+               formal_value_type = ret_type.copy ();
                value_type = formal_value_type.get_actual_type (target_object_type, call as MemberAccess, this);
 
                bool may_throw = false;
index 4bfaf34ee862dad864250c10ec4843a74461c659..822123e91b5337cbcb865230147fd29e6579ba74 100644 (file)
@@ -124,14 +124,13 @@ public class Vala.PointerType : DataType {
        }
 
        public override DataType get_actual_type (DataType? derived_instance_type, MemberAccess? method_access, CodeNode node_reference) {
+               PointerType result = (PointerType) this.copy ();
+
                if (derived_instance_type == null && method_access == null) {
-                       return this;
+                       return result;
                }
 
-               PointerType result = this;
-
                if (base_type is GenericType || base_type.has_type_arguments ()) {
-                       result = (PointerType) result.copy ();
                        result.base_type = result.base_type.get_actual_type (derived_instance_type, method_access, node_reference);
                }