int pos;
isl_map *def_map;
- pos = isl_map_dim(map, isl_dim_in);
- if (type == isl_dim_out)
- pos += isl_map_dim(map, isl_dim_out);
+ if (type == isl_dim_param)
+ pos = isl_map_dim(map, isl_dim_param);
+ else {
+ pos = isl_map_dim(map, isl_dim_in);
+ if (type == isl_dim_out)
+ pos += isl_map_dim(map, isl_dim_out);
+ type = isl_dim_in;
+ }
--pos;
def = accept_extended_affine(s, isl_dim_wrap(isl_map_get_dim(map)), v);
def_map = isl_map_from_pw_aff(def);
- def_map = isl_map_equate(def_map, isl_dim_in, pos, isl_dim_out, 0);
+ def_map = isl_map_equate(def_map, type, pos, isl_dim_out, 0);
def_map = isl_set_unwrap(isl_map_domain(def_map));
map = isl_map_intersect(map, def_map);
map = isl_map_add_dims(map, type, 1);
map = set_name(map, type, i, v->v->name);
isl_token_free(tok);
+ if (isl_stream_eat_if_available(s, '='))
+ map = read_var_def(s, map, type, v);
} else {
if (type == isl_dim_param) {
isl_stream_error(s, tok,
str2 = "{ [i] -> [5] : i <= 0; [i] -> [4] : i >= 1 }";
test_parse_map_equal(ctx, str, str2);
+ str = "[N=2,M] -> { [i=[(M+N)/4]] }";
+ str2 = "[N, M] -> { [i] : N = 2 and 4i <= 2 + M and 4i >= -1 + M }";
+ test_parse_map_equal(ctx, str, str2);
+
test_parse_pwqp(ctx, "{ [i] -> i + [ (i + [i/3])/2 ] }");
test_parse_map(ctx, "{ S1[i] -> [([i/10]),i%10] : 0 <= i <= 45 }");
}