Cast the assigned rvalue to the ctype of the lvalue.
return;
}
- string ctype;
- if (variable is Field) {
- ctype = ((Field) variable).get_ctype ();
- } else if (variable is Parameter) {
- ctype = ((Parameter) variable).ctype;
- } else {
- ctype = null;
- }
var cexpr = get_cvalue_ (value);
- if (ctype != null) {
- cexpr = new CCodeCastExpression (cexpr, ctype);
+ if (get_ctype (lvalue) != null) {
+ cexpr = new CCodeCastExpression (cexpr, get_ctype (lvalue));
}
ccode.add_assignment (get_cvalue_ (lvalue), cexpr);
return glib_value.non_null;
}
+
+ public string? get_ctype (TargetValue value) {
+ var glib_value = (GLibValue) value;
+ return glib_value.ctype;
+ }
+
public bool get_array_null_terminated (TargetValue value) {
var glib_value = (GLibValue) value;
return glib_value.array_null_terminated;
public class Vala.GLibValue : TargetValue {
public CCodeExpression cvalue;
public bool non_null;
+ public string? ctype;
public List<CCodeExpression> array_length_cvalues;
public CCodeExpression? array_size_cvalue;
public GLibValue copy () {
var result = new GLibValue (value_type.copy (), cvalue);
result.non_null = non_null;
+ result.ctype = ctype;
if (array_length_cvalues != null) {
foreach (var cexpr in array_length_cvalues) {
if (param.has_array_length_cexpr) {
result.array_length_cexpr = new CCodeConstant (param.get_array_length_cexpr ());
}
+ result.ctype = param.ctype;
var array_type = result.value_type as ArrayType;
var delegate_type = result.value_type as DelegateType;
if (field.has_array_length_cexpr) {
result.array_length_cexpr = new CCodeConstant (field.get_array_length_cexpr ());
}
+ result.ctype = field.get_ctype ();
var array_type = result.value_type as ArrayType;
var delegate_type = result.value_type as DelegateType;