isl_test_cpp17-generic.cc: work around std::optional::value issue in older macOS
[isl.git] / isl_stream_read_with_params_templ.c
blobe18c9ebc0a8e97d2ac44e74f90bf3ab5fe0d89e9
1 /*
2 * Copyright 2011 Sven Verdoolaege
4 * Use of this software is governed by the MIT license
6 * Written by Sven Verdoolaege.
7 */
9 #define xCAT(A,B) A ## B
10 #define CAT(A,B) xCAT(A,B)
11 #undef TYPE
12 #define TYPE CAT(isl_,TYPE_BASE)
14 /* Read an object of type "TYPE" from "s".
16 * In particular, first read the parameters and the opening brace.
17 * Then read the body that is specific to the object type.
18 * Finally, read the closing brace.
20 __isl_give TYPE *FN(isl_stream_read,TYPE_BASE)(__isl_keep isl_stream *s)
22 struct vars *v;
23 isl_set *dom;
24 TYPE *obj = NULL;
26 v = vars_new(s->ctx);
27 if (!v)
28 return NULL;
30 dom = isl_set_universe(isl_space_params_alloc(s->ctx, 0));
31 if (next_is_tuple(s)) {
32 dom = read_map_tuple(s, dom, isl_dim_param, v, 0);
33 if (isl_stream_eat(s, ISL_TOKEN_TO))
34 goto error;
36 if (isl_stream_eat(s, '{'))
37 goto error;
39 obj = FN(isl_stream_read_with_params,TYPE_BASE)(s, dom, v);
41 if (isl_stream_eat(s, '}'))
42 goto error;
44 vars_free(v);
45 isl_set_free(dom);
46 return obj;
47 error:
48 vars_free(v);
49 isl_set_free(dom);
50 FN(TYPE,free)(obj);
51 return NULL;