1 /* Copyright (c) 2005-2019. The SimGrid Team. All rights reserved. */
3 /* This program is free software; you can redistribute it and/or modify it
4 * under the terms of the license (GNU LGPL) which comes with this package. */
13 #include <xbt/sysdep.h>
14 #include <xbt/virtu.h>
16 /** @addtogroup XBT_ex_c
17 * @brief Exceptions support (C)
19 * Those fonctions are used to throw C++ exceptions from C code. This feature
20 * should probably be removed in the future because C and exception do not
21 * exactly play nicely together.
26 /** Helper function used to throw exceptions in C */
27 XBT_ATTRIB_NORETURN XBT_PUBLIC void _xbt_throw(char* message, int value, const char* file, int line, const char* func);
29 /** Builds and throws an exception
33 #define THROW(v) _xbt_throw(NULL, v, __FILE__, __LINE__, __func__)
35 /** Builds and throws an exception with a printf-like formatted message
39 #define THROWF(v, ...) _xbt_throw(bprintf(__VA_ARGS__), v, __FILE__, __LINE__, __func__)
41 XBT_ATTRIB_NORETURN void xbt_throw_impossible(const char* file, int line, const char* func);
42 /** Throw an exception because something impossible happened
45 #define THROW_IMPOSSIBLE xbt_throw_impossible(__FILE__, __LINE__, __func__)
47 /** Throw an exception because something unimplemented stuff has been attempted
50 XBT_ATTRIB_NORETURN XBT_PUBLIC void xbt_throw_unimplemented(const char* file, int line, const char* func);
51 #define THROW_UNIMPLEMENTED xbt_throw_unimplemented(__FILE__, __LINE__, __func__)
53 /** Die because something impossible happened
56 #define DIE_IMPOSSIBLE xbt_die("The Impossible Did Happen (yet again)")
61 #endif /* __XBT_EX_H__ */