}
public override CCodeExpression get_array_length_cexpression (Expression array_expr, int dim = -1) {
- var array_type = array_expr.value_type as ArrayType;
+ return get_array_length_cvalue (array_expr.target_value, dim);
+ }
+
+ public override CCodeExpression get_array_length_cvalue (TargetValue value, int dim = -1) {
+ var array_type = value.value_type as ArrayType;
if (array_type != null && array_type.fixed_length) {
return new CCodeConstant (array_type.length.to_string ());
// dim == -1 => total size over all dimensions
if (dim == -1) {
if (array_type != null && array_type.rank > 1) {
- CCodeExpression cexpr = get_array_length_cexpression (array_expr, 1);
+ CCodeExpression cexpr = get_array_length_cvalue (value, 1);
for (dim = 2; dim <= array_type.rank; dim++) {
- cexpr = new CCodeBinaryExpression (CCodeBinaryOperator.MUL, cexpr, get_array_length_cexpression (array_expr, dim));
+ cexpr = new CCodeBinaryExpression (CCodeBinaryOperator.MUL, cexpr, get_array_length_cvalue (value, dim));
}
return cexpr;
} else {
}
}
- List<CCodeExpression> size = get_array_sizes (array_expr);
+ List<CCodeExpression> size = ((GLibValue) value).array_length_cvalues;
assert (size != null && size.size >= dim);
return size[dim - 1];
}
assert_not_reached ();
}
+ public virtual CCodeExpression get_delegate_target_cvalue (TargetValue value) {
+ return new CCodeInvalidExpression ();
+ }
+
+ public virtual CCodeExpression get_delegate_target_destroy_notify_cvalue (TargetValue value) {
+ return new CCodeInvalidExpression ();
+ }
+
public virtual string get_delegate_target_destroy_notify_cname (string delegate_cname) {
assert_not_reached ();
}
return new CCodeConstant ("");
}
+ public virtual CCodeExpression get_array_length_cvalue (TargetValue value, int dim = -1) {
+ return new CCodeInvalidExpression ();
+ }
+
public virtual string get_array_size_cname (string array_cname) {
return "";
}
return null;
}
var glib_value = (GLibValue) expr.target_value;
- return glib_value.ccodenode;
+ return glib_value.cvalue;
+ }
+
+ public CCodeExpression? get_cvalue_ (TargetValue value) {
+ var glib_value = (GLibValue) value;
+ return glib_value.cvalue;
}
public void set_cvalue (Expression expr, CCodeExpression? cvalue) {
glib_value = new GLibValue (expr.value_type);
expr.target_value = glib_value;
}
- glib_value.ccodenode = cvalue;
+ glib_value.cvalue = cvalue;
}
public CCodeExpression? get_delegate_target (Expression expr) {
return null;
}
var glib_value = (GLibValue) expr.target_value;
- return glib_value.delegate_target;
+ return glib_value.delegate_target_cvalue;
}
public void set_delegate_target (Expression expr, CCodeExpression? delegate_target) {
glib_value = new GLibValue (expr.value_type);
expr.target_value = glib_value;
}
- glib_value.delegate_target = delegate_target;
+ glib_value.delegate_target_cvalue = delegate_target;
}
public CCodeExpression? get_delegate_target_destroy_notify (Expression expr) {
return null;
}
var glib_value = (GLibValue) expr.target_value;
- return glib_value.delegate_target_destroy_notify;
+ return glib_value.delegate_target_destroy_notify_cvalue;
}
public void set_delegate_target_destroy_notify (Expression expr, CCodeExpression destroy_notify) {
glib_value = new GLibValue (expr.value_type);
expr.target_value = glib_value;
}
- glib_value.delegate_target_destroy_notify = destroy_notify;
+ glib_value.delegate_target_destroy_notify_cvalue = destroy_notify;
}
public void append_array_size (Expression expr, CCodeExpression size) {
glib_value = new GLibValue (expr.value_type);
expr.target_value = glib_value;
}
- if (glib_value.array_sizes == null) {
- glib_value.array_sizes = new ArrayList<CCodeExpression> ();
- }
- glib_value.array_sizes.add (size);
+ glib_value.append_array_length_cvalue (size);
}
public List<CCodeExpression>? get_array_sizes (Expression expr) {
glib_value = new GLibValue (expr.value_type);
expr.target_value = glib_value;
}
- return glib_value.array_sizes;
+ return glib_value.array_length_cvalues;
}
}
public class Vala.GLibValue : TargetValue {
- public CCodeExpression ccodenode;
+ public CCodeExpression cvalue;
- public List<CCodeExpression> array_sizes;
+ public List<CCodeExpression> array_length_cvalues;
- public CCodeExpression? delegate_target;
- public CCodeExpression? delegate_target_destroy_notify;
+ public CCodeExpression? delegate_target_cvalue;
+ public CCodeExpression? delegate_target_destroy_notify_cvalue;
public GLibValue (DataType? value_type = null, CCodeExpression? cvalue = null) {
base (value_type);
- this.ccodenode = cvalue;
+ this.cvalue = cvalue;
+ }
+
+ public void append_array_length_cvalue (CCodeExpression length_cvalue) {
+ if (array_length_cvalues == null) {
+ array_length_cvalues = new ArrayList<CCodeExpression> ();
+ }
+ array_length_cvalues.add (length_cvalue);
}
}
return null;
}
var dova_value = (DovaValue) expr.target_value;
- return dova_value.ccodenode;
+ return dova_value.cvalue;
+ }
+
+ public CCodeExpression? get_cvalue_ (TargetValue value) {
+ var dova_value = (DovaValue) value;
+ return dova_value.cvalue;
}
public void set_cvalue (Expression expr, CCodeExpression? cvalue) {
dova_value = new DovaValue (expr.value_type);
expr.target_value = dova_value;
}
- dova_value.ccodenode = cvalue;
+ dova_value.cvalue = cvalue;
}
}
public class Vala.DovaValue : TargetValue {
- public CCodeExpression ccodenode;
+ public CCodeExpression cvalue;
public DovaValue (DataType? value_type = null, CCodeExpression? cvalue = null) {
base (value_type);
- this.ccodenode = cvalue;
+ this.cvalue = cvalue;
}
}