Gee.List<Expression> size = ((ArrayCreationExpression) array_expr).get_sizes ();
var length_expr = size[dim - 1];
return (CCodeExpression) get_ccodenode (length_expr);
- } else if (array_expr is MethodCall) {
- var invocation_expr = (MethodCall) array_expr;
- Gee.List<CCodeExpression> size = invocation_expr.get_array_sizes ();
+ } else if (array_expr is MethodCall || array_expr is CastExpression) {
+ Gee.List<CCodeExpression> size = array_expr.get_array_sizes ();
return size[dim - 1];
} else if (array_expr.symbol_reference != null) {
if (array_expr.symbol_reference is FormalParameter) {
Report.error (expr.source_reference, "Operation not supported for this type");
return;
}
+
+ // retain array length
+ var array_type = expr.type_reference as ArrayType;
+ if (array_type != null) {
+ for (int dim = 1; dim <= array_type.rank; dim++) {
+ expr.append_array_size (get_array_length_cexpression (expr.inner, dim));
+ }
+ }
+
expr.ccodenode = new CCodeCastExpression ((CCodeExpression) expr.inner.ccodenode, expr.type_reference.get_cname ());
}
}