static Expression compute_bounds_of_sectioned_expression(Expression expr, ObjectList<Expression>& lower_bounds, ObjectList<Expression>& upper_bounds) { if (expr.is_array_section_range()) { Expression result = compute_bounds_of_sectioned_expression(expr.array_section_item(), lower_bounds, upper_bounds); lower_bounds.append(expr.array_section_lower()); upper_bounds.append(expr.array_section_upper()); return result; } return expr; }
static void fix_dependency_expression_rec(Source &src, Expression expr, bool top_level, bool get_addr) { if (expr.is_id_expression()) { src << expr.prettyprint(); } else if (expr.is_array_subscript()) { fix_dependency_expression_rec(src, expr.get_subscripted_expression(), /* top_level */ false, /* get_addr */ true); src << "[" << expr.get_subscript_expression() << "]"; } else if (expr.is_array_section_range() || expr.is_array_section_size()) { fix_dependency_expression_rec(src, expr.array_section_item(), /* top_level */ false, /* get_addr */ true); src << "[" << expr.array_section_lower() << "]"; } else if (expr.is_shaping_expression()) { Type cast_type = expr.get_type(); cast_type = cast_type.array_element().get_pointer_to(); if (!top_level) { if (get_addr) { src <<"((" << cast_type.get_declaration(expr.get_scope(), "") << ")"; fix_dependency_expression_rec(src, expr.shaped_expression(), /* top_level */ false, /* get_addr */ true); src << ")"; } else { src <<"(*(" << cast_type.get_declaration(expr.get_scope(), "") << ")"; fix_dependency_expression_rec(src, expr.shaped_expression(), /* top_level */ false, /* get_addr */ true); src << ")"; } } else { fix_dependency_expression_rec(src, expr.shaped_expression(), /* top_level */ false, /* get_addr */ false); } } }