/*
* Copyright 2008-2009 Katholieke Universiteit Leuven
*
- * Use of this software is governed by the GNU LGPLv2.1 license
+ * Use of this software is governed by the MIT license
*
* Written by Sven Verdoolaege, K.U.Leuven, Departement
* Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
#include <isl_ctx_private.h>
#include <isl/vec.h>
+#include <isl_options_private.h>
+
+void isl_handle_error(isl_ctx *ctx, enum isl_error error, const char *msg,
+ const char *file, int line)
+{
+ if (!ctx)
+ return;
+
+ isl_ctx_set_error(ctx, error);
+
+ switch (ctx->opt->on_error) {
+ case ISL_ON_ERROR_WARN:
+ fprintf(stderr, "%s:%d: %s\n", file, line, msg);
+ return;
+ case ISL_ON_ERROR_CONTINUE:
+ return;
+ case ISL_ON_ERROR_ABORT:
+ fprintf(stderr, "%s:%d: %s\n", file, line, msg);
+ abort();
+ return;
+ }
+}
static struct isl_options *find_nested_options(struct isl_args *args,
void *opt, struct isl_args *wanted)
{
if (!ctx)
return NULL;
+ if (args == &isl_options_args)
+ return ctx->opt;
return find_nested_options(ctx->user_args, ctx->user_opt, args);
}
{
if (!ctx)
return;
- isl_assert(ctx, ctx->ref == 0, return);
+ if (ctx->ref != 0)
+ isl_die(ctx, isl_error_invalid,
+ "isl_ctx freed, but some objects still reference it",
+ return);
+
isl_hash_table_clear(&ctx->id_table);
isl_blk_clear_cache(ctx);
isl_int_clear(ctx->zero);
isl_int_clear(ctx->normalize_gcd);
isl_args_free(ctx->user_args, ctx->user_opt);
if (ctx->opt_allocated)
- free(ctx->opt);
+ isl_options_free(ctx->opt);
free(ctx->stats);
free(ctx);
}