*/
public string? declarator_suffix { get; set; }
+ /**
+ * Initializer only used to zero memory, safe to initialize as part
+ * of declaration at beginning of block instead of separate assignment.
+ */
+ public bool init0 { get; set; }
+
public CCodeVariableDeclarator (string name, CCodeExpression? initializer = null, string? declarator_suffix = null) {
this.name = name;
this.initializer = initializer;
this.declarator_suffix = declarator_suffix;
}
+ public CCodeVariableDeclarator.zero (string name, CCodeExpression initializer, string? declarator_suffix = null) {
+ this.name = name;
+ this.initializer = initializer;
+ this.declarator_suffix = declarator_suffix;
+ this.init0 = true;
+ }
+
public override void write (CCodeWriter writer) {
writer.write_string (name);
if (declarator_suffix != null) {
writer.write_string (declarator_suffix);
}
- // initializer lists can't be moved to a separate statement
- if (initializer is CCodeInitializerList) {
+ if (init0) {
writer.write_string (" = ");
initializer.write (writer);
}
}
public override void write_initialization (CCodeWriter writer) {
- if (initializer != null && !(initializer is CCodeInitializerList)) {
+ if (initializer != null && !init0) {
writer.write_indent (line);
writer.write_string (name);
// initialization not necessary for variables stored in closure
if (cvar.initializer == null) {
cvar.initializer = default_value_for_type (local.variable_type, true);
+ cvar.init0 = true;
}
}
clist.append (new CCodeConstant ("0"));
vardecl.initializer = clist;
+ vardecl.init0 = true;
} else if (local.variable_type.is_reference_type_or_type_parameter () ||
local.variable_type.nullable) {
vardecl.initializer = new CCodeConstant ("NULL");
+ vardecl.init0 = true;
}
cfrag.append (cdecl);
cvalinit.append (new CCodeConstant ("0"));
var cval_decl = new CCodeDeclaration ("GValue");
- cval_decl.add_declarator (new CCodeVariableDeclarator (val_name, cvalinit));
+ cval_decl.add_declarator (new CCodeVariableDeclarator.zero (val_name, cvalinit));
block.add_statement (cval_decl);
var val_ptr = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (val_name));
cvalinit.append (new CCodeConstant ("0"));
var cval_decl = new CCodeDeclaration ("GValue");
- cval_decl.add_declarator (new CCodeVariableDeclarator ("gvalue", cvalinit));
+ cval_decl.add_declarator (new CCodeVariableDeclarator.zero ("gvalue", cvalinit));
block.add_statement (cval_decl);
var val_ptr = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("gvalue"));
cvalinit.append (new CCodeConstant ("0"));
var cval_decl = new CCodeDeclaration ("GValue");
- cval_decl.add_declarator (new CCodeVariableDeclarator ("gvalue", cvalinit));
+ cval_decl.add_declarator (new CCodeVariableDeclarator.zero ("gvalue", cvalinit));
block.add_statement (cval_decl);
var val_ptr = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("gvalue"));
cvalinit.append (new CCodeConstant ("0"));
var cdecl = new CCodeDeclaration ("GValue");
- cdecl.add_declarator (new CCodeVariableDeclarator (temp_name, cvalinit));
+ cdecl.add_declarator (new CCodeVariableDeclarator.zero (temp_name, cvalinit));
fragment.append (cdecl);
cdecl = new CCodeDeclaration ("DBusMessageIter");