--- nono/lib/header.h 2026/04/29 17:05:12 1.1.1.16 +++ nono/lib/header.h 2026/04/29 17:05:15 1.1.1.17 @@ -11,9 +11,9 @@ #pragma once #define NONO_MAJOR_VER (0) -#define NONO_MINOR_VER (4) +#define NONO_MINOR_VER (5) #define NONO_PATCH_VER (0) -#define NONO_DATE "2022/06/18" +#define NONO_DATE "2023/01/25" #include "config-nono.h" #include @@ -169,30 +169,20 @@ DEF_UNION64(union64, q, h, l); #define assertmsg(expr, ...) #endif -// atomic_compare_exchange_strong() の短縮マクロ。 -// ライブラリ実装は第2引数の expected が値ではなくポインタなので一旦代入操作を -// 行わないといけないのと、第3引数の newval は型が uint8 だと int 即値が書けず -// (int8) でキャストしないといけない。 -// その上 atomic_compare_exchange_strong() が長い、と、いろいろ微妙なので、 -// その辺を短くするマクロを用意する。ただしこれでは expected 変数の型が -// 自動判別できないので、_8 と _32 を用意するところは妥協。 -// (static) inline 関数にすることも出来るけどそうするとここで ヘッダ -// を読み込まなければならなくなるため、マクロで実現する。 -#define atomic_cas_8(varp, expval, newval) ({ \ - uint8 expected = (expval); \ - atomic_compare_exchange_strong((varp), &expected, (uint8)(newval)); \ -}) -#define atomic_cas_32(varp, expval, newval) ({ \ - uint32 expected = (expval); \ - atomic_compare_exchange_strong((varp), &expected, (uint32)(newval)); \ -}) +// iconv() の第2引数の型は OS によって違う… +#if defined(HAVE_ICONV_CONST) +#define ICONV(cd, s, slen, d, dlen) iconv((cd), (s), (slen), (d), (dlen)) +#else +#define ICONV(cd, s, slen, d, dlen) \ + iconv((cd), const_cast(s), (slen), (d), (dlen)) +#endif // パニック (PC を表示しない) -#define PANIC(...) panic(__PRETTY_FUNCTION__, __VA_ARGS__) -[[noreturn]] extern void panic(const char *funcname, const char *fmt, ...) +#define PANIC(...) panic_func(__PRETTY_FUNCTION__, __VA_ARGS__) +[[noreturn]] extern void panic_func(const char *funcname, const char *fmt, ...) __printflike(2, 3); // VM 用パニック (PC を表示する) -#define VMPANIC(...) vmpanic(__PRETTY_FUNCTION__, __VA_ARGS__) -[[noreturn]] extern void vmpanic(const char *funcname, const char *fmt, ...) - __printflike(2, 3); +#define VMPANIC(...) vmpanic_func(__PRETTY_FUNCTION__, __VA_ARGS__) +[[noreturn]] extern void vmpanic_func(const char *funcname, const char *fmt, + ...) __printflike(2, 3);