]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Add default_value for CType to initialize variables if needed
authorRico Tzschichholz <ricotz@ubuntu.com>
Sun, 30 Dec 2018 17:19:44 +0000 (18:19 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sun, 30 Dec 2018 17:19:44 +0000 (18:19 +0100)
Fixes https://gitlab.gnome.org/GNOME/vala/issues/724

codegen/valaccodebasemodule.vala
codegen/valaccodemethodcallmodule.vala
codegen/valactype.vala
codegen/valagtypemodule.vala

index 6662e1c45ce889056345c75748014838f7ac49e8..d63c4ae528d46938270cee8763c622ec8af1b1e9 100644 (file)
@@ -6360,6 +6360,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                        return new CCodeConstant ("NULL");
                } else if (type is ErrorType) {
                        return new CCodeConstant ("NULL");
+               } else if (type is CType) {
+                       return new CCodeConstant (((CType) type).cdefault_value);
                }
                return null;
        }
index d69df60cc809fe29aab68445d1331569f3af5fb2..a2628a78372590eecae070856df9dac73c35cae8 100644 (file)
@@ -432,7 +432,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
                                                        var array_type = (ArrayType) param.variable_type;
                                                        var length_ctype = get_ccode_array_length_type (param) ?? get_ccode_array_length_type (array_type);
                                                        for (int dim = 1; dim <= array_type.rank; dim++) {
-                                                               var temp_array_length = get_temp_variable (new CType (length_ctype));
+                                                               var temp_array_length = get_temp_variable (new CType (length_ctype, "0"), true, null, true);
                                                                emit_temp_var (temp_array_length);
                                                                append_array_length (arg, get_variable_cexpression (temp_array_length.name));
                                                                carg_map.set (get_param_pos (get_ccode_array_length_pos (param) + 0.01 * dim), new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_array_lengths (arg).get (dim - 1)));
@@ -519,7 +519,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
                                        append_array_length (expr, len_call);
                                } else if (get_ccode_array_length (m)) {
                                        var length_ctype = get_ccode_array_length_type (m) ?? get_ccode_array_length_type (array_type);
-                                       var temp_var = get_temp_variable (new CType (length_ctype), true, null, true);
+                                       var temp_var = get_temp_variable (new CType (length_ctype, "0"), true, null, true);
                                        var temp_ref = get_variable_cexpression (temp_var.name);
 
                                        emit_temp_var (temp_var);
@@ -582,7 +582,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 
                                        append_array_length (expr, len_call);
                                } else if (get_ccode_array_length (deleg)) {
-                                       var temp_var = get_temp_variable (new CType (get_ccode_array_length_type (array_type)), true, null, true);
+                                       var temp_var = get_temp_variable (array_type.length_type, true, null, true);
                                        var temp_ref = get_variable_cexpression (temp_var.name);
 
                                        emit_temp_var (temp_var);
index 1190299cb8a143a82f7f722c627a25a51a54b725..88894069e1decaf0683884e6321d30cf89adb28c 100644 (file)
@@ -29,11 +29,17 @@ public class Vala.CType : DataType {
         */
        public string ctype_name { get; set; }
 
-       public CType (string ctype_name) {
+       /**
+        * The default value of the C type.
+        */
+       public string cdefault_value { get; set; }
+
+       public CType (string ctype_name, string cdefault_value) {
                this.ctype_name = ctype_name;
+               this.cdefault_value = cdefault_value;
        }
 
        public override DataType copy () {
-               return new CType (ctype_name);
+               return new CType (ctype_name, cdefault_value);
        }
 }
index 3dd0f2c48dc0a5d0bb823e84fd39a24083bce228..017ac6a34215b6bf69e45051d33f1a3a7bd63232 100644 (file)
@@ -2380,7 +2380,7 @@ public class Vala.GTypeModule : GErrorModule {
                        expr.value_type.value_owned = true;
                        set_cvalue (expr, to_string);
                } else {
-                       var temp_var = get_temp_variable (new CType (is_flags ? "GFlagsValue*" : "GEnumValue*"), false, expr, false);
+                       var temp_var = get_temp_variable (new CType (is_flags ? "GFlagsValue*" : "GEnumValue*", "NULL"), false, expr, false);
                        emit_temp_var (temp_var);
 
                        var class_ref = new CCodeFunctionCall (new CCodeIdentifier ("g_type_class_ref"));