From: Luca Bruno Date: Sun, 15 May 2011 12:30:12 +0000 (+0200) Subject: codegen: Add GLibValue.ctype to be used with lvalues X-Git-Tag: 0.13.0~114 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=814880a84a42a7dec933d10ec86e56346a26fa41;p=thirdparty%2Fvala.git codegen: Add GLibValue.ctype to be used with lvalues Cast the assigned rvalue to the ctype of the lvalue. --- diff --git a/codegen/valaccodeassignmentmodule.vala b/codegen/valaccodeassignmentmodule.vala index 9ff063568..01af22a23 100644 --- a/codegen/valaccodeassignmentmodule.vala +++ b/codegen/valaccodeassignmentmodule.vala @@ -208,17 +208,9 @@ public class Vala.CCodeAssignmentModule : CCodeMemberAccessModule { 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); diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 9b8609306..161e7d37b 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -5761,6 +5761,12 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { 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; @@ -5775,6 +5781,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { public class Vala.GLibValue : TargetValue { public CCodeExpression cvalue; public bool non_null; + public string? ctype; public List array_length_cvalues; public CCodeExpression? array_size_cvalue; @@ -5799,6 +5806,7 @@ public class Vala.GLibValue : TargetValue { 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) { diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala index 704feb4cb..8dd8b2ff7 100644 --- a/codegen/valaccodememberaccessmodule.vala +++ b/codegen/valaccodememberaccessmodule.vala @@ -402,6 +402,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { 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; @@ -521,6 +522,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { 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;