From: Rico Tzschichholz Date: Sun, 30 Dec 2018 17:19:44 +0000 (+0100) Subject: codegen: Add default_value for CType to initialize variables if needed X-Git-Tag: 0.42.5~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0c6b21b33816397e30be4de7430d0ddc102f6d33;p=thirdparty%2Fvala.git codegen: Add default_value for CType to initialize variables if needed Fixes https://gitlab.gnome.org/GNOME/vala/issues/724 --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 2e77ea30d..32ca7f349 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -6331,6 +6331,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; } diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala index 81381896b..a3f6030ca 100644 --- a/codegen/valaccodemethodcallmodule.vala +++ b/codegen/valaccodemethodcallmodule.vala @@ -437,7 +437,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule { var array_type = (ArrayType) param.variable_type; var array_length_type = int_type; if (get_ccode_array_length_type (param) != null) { - array_length_type = new CType (get_ccode_array_length_type (param)); + array_length_type = new CType (get_ccode_array_length_type (param), "0"); } for (int dim = 1; dim <= array_type.rank; dim++) { var temp_array_length = get_temp_variable (array_length_type); @@ -531,7 +531,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule { if (get_ccode_array_length_type (m) == null) { temp_var = get_temp_variable (int_type, true, null, true); } else { - temp_var = get_temp_variable (new CType (get_ccode_array_length_type (m)), true, null, true); + temp_var = get_temp_variable (new CType (get_ccode_array_length_type (m), "0"), true, null, true); } var temp_ref = get_variable_cexpression (temp_var.name); diff --git a/codegen/valactype.vala b/codegen/valactype.vala index 1190299cb..88894069e 100644 --- a/codegen/valactype.vala +++ b/codegen/valactype.vala @@ -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); } } diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala index 6b3dfa2b2..603590aff 100644 --- a/codegen/valagtypemodule.vala +++ b/codegen/valagtypemodule.vala @@ -2367,7 +2367,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"));