minix/minix/llvm/include/st/cb_template.h
David van Moolenbroek 0acd3f1ae0 Import magic library from llvm-apps
Change-Id: Icfbcfae6afc731a23e71448a7a5d0045b2c219e5
2015-09-17 13:58:32 +00:00

29 lines
1.1 KiB
C

#undef xglue
#undef glue
#undef CALLBACK_TYPENAME
#undef CALLBACK_SETTERNAME
#undef DEFINE_CALLBACK
#undef DECLARE_CALLBACK
#define xglue(x, y) x ## y
#define glue(x, y) xglue(x, y)
#ifdef CALLBACK_FAMILY
#define CALLBACK_TYPENAME(name) glue(glue(glue(glue(glue(CALLBACK_PREFIX, _cb_), CALLBACK_FAMILY), _), name), _t)
#define CALLBACK_SETTERNAME(name) glue(glue(glue(glue(CALLBACK_PREFIX, _setcb_), CALLBACK_FAMILY), _), name)
#else
#define CALLBACK_TYPENAME(name) glue(glue(glue(CALLBACK_PREFIX, _cb_), name), _t)
#define CALLBACK_SETTERNAME(name) glue(glue(CALLBACK_PREFIX, _setcb_), name)
#endif
#define DECLARE_CALLBACK(ret_type, name, args) \
typedef ret_type(*CALLBACK_TYPENAME(name))args
#define DEFINE_DECL_CALLBACK(ret_type, name, args) \
DECLARE_CALLBACK(ret_type, name, args); \
void CALLBACK_SETTERNAME(name)(CALLBACK_TYPENAME(name) cb)
#define DEFINE_DECL_CALLBACK_CUSTOM(ret_type, name, args, setter_args) \
DECLARE_CALLBACK(ret_type, name, args); \
void CALLBACK_SETTERNAME(name)setter_args