From 6b2545224752be74de35166c3dcda9ff5bdb79e3 Mon Sep 17 00:00:00 2001 From: Zuhaitz Méndez Fernández de Aránguiz Date: Sat, 17 Jan 2026 16:33:36 +0000 Subject: Add C++ interop support. --- src/codegen/compat.h | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/codegen/compat.h (limited to 'src/codegen/compat.h') diff --git a/src/codegen/compat.h b/src/codegen/compat.h new file mode 100644 index 0000000..423b1d9 --- /dev/null +++ b/src/codegen/compat.h @@ -0,0 +1,100 @@ + +#ifndef ZC_COMPAT_H +#define ZC_COMPAT_H + +#ifdef __cplusplus +/* C++ mode */ +#define ZC_AUTO auto +#define ZC_CAST(T, x) static_cast(x) +#define ZC_REINTERPRET(T, x) reinterpret_cast(x) +#define ZC_EXTERN_C extern "C" +#define ZC_EXTERN_C_BEGIN \ + extern "C" \ + { +#define ZC_EXTERN_C_END } +#else +/* C mode */ +#define ZC_AUTO __auto_type +#define ZC_CAST(T, x) ((T)(x)) +#define ZC_REINTERPRET(T, x) ((T)(x)) +#define ZC_EXTERN_C +#define ZC_EXTERN_C_BEGIN +#define ZC_EXTERN_C_END +#endif + +#ifdef __cplusplus +#include + +inline const char *_zc_fmt(bool) +{ + return "%d"; +} +inline const char *_zc_fmt(char) +{ + return "%c"; +} +inline const char *_zc_fmt(signed char) +{ + return "%c"; +} +inline const char *_zc_fmt(unsigned char) +{ + return "%u"; +} +inline const char *_zc_fmt(short) +{ + return "%d"; +} +inline const char *_zc_fmt(unsigned short) +{ + return "%u"; +} +inline const char *_zc_fmt(int) +{ + return "%d"; +} +inline const char *_zc_fmt(unsigned int) +{ + return "%u"; +} +inline const char *_zc_fmt(long) +{ + return "%ld"; +} +inline const char *_zc_fmt(unsigned long) +{ + return "%lu"; +} +inline const char *_zc_fmt(long long) +{ + return "%lld"; +} +inline const char *_zc_fmt(unsigned long long) +{ + return "%llu"; +} +inline const char *_zc_fmt(float) +{ + return "%f"; +} +inline const char *_zc_fmt(double) +{ + return "%f"; +} +inline const char *_zc_fmt(char *) +{ + return "%s"; +} +inline const char *_zc_fmt(const char *) +{ + return "%s"; +} +inline const char *_zc_fmt(void *) +{ + return "%p"; +} + +#define _z_str(x) _zc_fmt(x) +#endif + +#endif -- cgit v1.2.3