brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 59111c6 Raw
53 lines · c
1/*2 * Copyright 2011      Sven Verdoolaege3 *4 * Use of this software is governed by the MIT license5 *6 * Written by Sven Verdoolaege.7 */8 9#define xCAT(A,B) A ## B10#define CAT(A,B) xCAT(A,B)11#undef TYPE12#define TYPE CAT(isl_,TYPE_BASE)13 14/* Read an object of type "TYPE" from "s".15 *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.19 */20__isl_give TYPE *FN(isl_stream_read,TYPE_BASE)(__isl_keep isl_stream *s)21{22	struct vars *v;23	isl_set *dom;24	TYPE *obj = NULL;25 26	v = vars_new(s->ctx);27	if (!v)28		return NULL;29 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, 1, 0);33		if (isl_stream_eat(s, ISL_TOKEN_TO))34			goto error;35	}36	if (isl_stream_eat(s, '{'))37		goto error;38 39	obj = FN(isl_stream_read_with_params,TYPE_BASE)(s, dom, v);40 41	if (isl_stream_eat(s, '}'))42		goto error;43 44	vars_free(v);45	isl_set_free(dom);46	return obj;47error:48	vars_free(v);49	isl_set_free(dom);50	FN(TYPE,free)(obj);51	return NULL;52}53