- int i;
-
- if (!dim)
- return NULL;
-
- if (n == 0)
- return dim;
-
- isl_assert(dim->ctx, first + num <= n(dim, type), goto error);
- dim = isl_dim_cow(dim);
- if (!dim)
- goto error;
- if (dim->names) {
- dim = extend_names(dim);
- if (!dim)
- goto error;
- for (i = 0; i < num; ++i)
- isl_name_free(dim->ctx, get_name(dim, type, first+i));
- for (i = first+num; i < n(dim, type); ++i)
- set_name(dim, type, i - num, get_name(dim, type, i));
- switch (type) {
- case isl_dim_param:
- get_names(dim, isl_dim_in, 0, dim->n_in,
- dim->names + offset(dim, isl_dim_in) - num);
- case isl_dim_in:
- get_names(dim, isl_dim_out, 0, dim->n_out,
- dim->names + offset(dim, isl_dim_out) - num);
- case isl_dim_out:
- ;
- }
- dim->n_name -= num;
- }
- switch (type) {
- case isl_dim_param: dim->nparam -= num; break;
- case isl_dim_in: dim->n_in -= num; break;
- case isl_dim_out: dim->n_out -= num; break;
- }
- return dim;
-error:
- isl_dim_free(dim);
- return NULL;