]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Fix crash when concatenating array parameters
authorJürg Billeter <j@bitron.ch>
Sat, 16 Oct 2010 17:41:01 +0000 (19:41 +0200)
committerJürg Billeter <j@bitron.ch>
Sat, 16 Oct 2010 17:43:24 +0000 (19:43 +0200)
Fixes bug 570846.

codegen/valaccodearraymodule.vala

index 094f7bfd520d2df3d4c878cf90c7763e9e94ed6b..63ada14b5edb5c2798309625d5f237272e7ebe43 100644 (file)
@@ -783,12 +783,23 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
                        return;
                }
 
-               var binary = assignment.right as BinaryExpression;
+               var binary = (BinaryExpression) assignment.right;
 
                var array = binary.left;
                var array_type = (ArrayType) array.value_type;
                var element = binary.right;
 
+               var array_var = assignment.left.symbol_reference;
+               var array_local = array_var as LocalVariable;
+               if (array_type.rank == 1 && array_var != null && array_var.is_internal_symbol ()
+                   && ((array_var is LocalVariable && !array_local.captured) || array_var is Field)) {
+                       // valid array add
+               } else {
+                       Report.error (assignment.source_reference, "Array concatenation not supported for public array variables and parameters");
+                       set_cvalue (assignment, new CCodeInvalidExpression ());
+                       return;
+               }
+
                var value_param = new FormalParameter ("value", element.target_type);
 
                var ccall = new CCodeFunctionCall (new CCodeIdentifier (generate_array_add_wrapper (array_type)));
@@ -798,15 +809,6 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
                ccall.add_argument (handle_struct_argument (value_param, element, get_cvalue (element)));
 
                set_cvalue (assignment, ccall);
-
-               var array_var = assignment.left.symbol_reference;
-               var array_local = array_var as LocalVariable;
-               if (array_type.rank == 1 && array_var != null && array_var.is_internal_symbol ()
-                   && ((array_var is LocalVariable && !array_local.captured) || array_var is Field)) {
-                       // valid array add
-               } else {
-                       Report.error (assignment.source_reference, "Array concatenation not supported for public array variables");
-               }
        }
 
        public override CCodeFormalParameter generate_parameter (FormalParameter param, CCodeFile decl_space, Map<int,CCodeFormalParameter> cparam_map, Map<int,CCodeExpression>? carg_map) {