diff --git a/include/builtin.mac b/include/builtin.mac index 8d33c652..667becfc 100644 --- a/include/builtin.mac +++ b/include/builtin.mac @@ -48,7 +48,7 @@ REAL_NUM(fun) INT_NUM(fun) \ REAL_NUM(fun) -#define CHAR(fun) \ +#define CHAR(fun) \ fun(char, /* no postfix */, c, ' ', ' ') #define BOOL(fun) \ diff --git a/include/templates.mac b/include/templates.mac index add72e05..2c014676 100644 --- a/include/templates.mac +++ b/include/templates.mac @@ -16,35 +16,35 @@ * ******************************************************************************/ -#define MAP_ARI_OPS(ext, a) \ -MAP_BIN_##ext(+, _add_SxS_, a, a) \ -MAP_BIN_##ext(-, _sub_SxS_, a, a) \ -MAP_BIN_##ext(*, _mul_SxS_, a, a) \ -MAP_BIN_##ext(/, _div_SxS_, a, a) \ -MAP_BIN_##ext(min, _min_SxS_, a, a) \ -MAP_BIN_##ext(max, _max_SxS_, a, a) +#define MAP_ARI_OPS(ext, a, _zval) \ +MAP_BIN_##ext(+, _add_SxS_, a, a, _zval, _zval) \ +MAP_BIN_##ext(-, _sub_SxS_, a, a, _zval, _zval) \ +MAP_BIN_##ext(*, _mul_SxS_, a, a, _zval, _zval) \ +MAP_BIN_##ext(/, _div_SxS_, a, a, _zval, _zval) \ +MAP_BIN_##ext(min, _min_SxS_, a, a, _zval, _zval) \ +MAP_BIN_##ext(max, _max_SxS_, a, a, _zval, _zval) -#define MAP_ABS_OP(ext, a) \ -MAP_MON_##ext(abs, _abs_S_, a, a) +#define MAP_ABS_OP(ext, a, _zval) \ +MAP_MON_##ext(abs, _abs_S_, a, a, _zval, _zval) -#define MAP_ABS_NOOP(ext, a) \ -MAP_MON_##ext(abs, /* no postfix */, a, a) +#define MAP_ABS_NOOP(ext, a, _zval) \ +MAP_MON_##ext(abs, /* no postfix */, a, a, _zval, _zval) -#define MAP_NEG_OP(ext, a) \ -MAP_MON_##ext(-, _neg_S_, a, a) +#define MAP_NEG_OP(ext, a, _zval) \ +MAP_MON_##ext(-, _neg_S_, a, a, _zval, _zval) #define MAP_ANA_OPS(ext, a) \ MAP_UNA_##ext(++, _add_SxS_, a, a) \ MAP_UNA_##ext(--, _sub_SxS_, a, a) -#define MAP_INT_OPS(ext, a) \ -MAP_BIN_##ext(mod, _aplmod_SxS_, a, a) \ -MAP_BIN_##ext(%, _mod_SxS_, a, a) \ -MAP_BIN_##ext(^, _bitxor_SxS_, a, a) \ -MAP_BIN_##ext(|, _bitor_SxS_, a, a) \ -MAP_BIN_##ext(&, _bitand_SxS_, a, a) \ -MAP_BIN_##ext(<<, _shl_SxS_, a, a) \ -MAP_BIN_##ext(>>, _shr_SxS_, a, a) +#define MAP_INT_OPS(ext, a, _zval) \ +MAP_BIN_##ext(mod, _aplmod_SxS_, a, a, _zval, _zval) \ +MAP_BIN_##ext(%, _mod_SxS_, a, a, _zval, _zval) \ +MAP_BIN_##ext(^, _bitxor_SxS_, a, a, _zval, _zval) \ +MAP_BIN_##ext(|, _bitor_SxS_, a, a, _zval, _zval) \ +MAP_BIN_##ext(&, _bitand_SxS_, a, a, _zval, _zval) \ +MAP_BIN_##ext(<<, _shl_SxS_, a, a, _zval, _zval) \ +MAP_BIN_##ext(>>, _shr_SxS_, a, a, _zval, _zval) /****************************************************************************** * @@ -52,19 +52,19 @@ MAP_BIN_##ext(>>, _shr_SxS_, a, a) * ******************************************************************************/ -#define MAP_REL_OPS(ext, a) \ -MAP_EQ_OPS(ext, a) \ -MAP_COMP_OPS(ext, a) +#define MAP_REL_OPS(ext, a, _zval) \ +MAP_EQ_OPS(ext, a, _zval) \ +MAP_COMP_OPS(ext, a, _zval) -#define MAP_EQ_OPS(ext, a) \ -MAP_BIN_##ext(==, _eq_SxS_, a, bool) \ -MAP_BIN_##ext(!=, _neq_SxS_, a, bool) +#define MAP_EQ_OPS(ext, a, _zval) \ +MAP_BIN_##ext(==, _eq_SxS_, a, bool, _zval, true) \ +MAP_BIN_##ext(!=, _neq_SxS_, a, bool, _zval, true) -#define MAP_COMP_OPS(ext, a) \ -MAP_BIN_##ext(<, _lt_SxS_, a, bool) \ -MAP_BIN_##ext(<=, _le_SxS_, a, bool) \ -MAP_BIN_##ext(>, _gt_SxS_, a, bool) \ -MAP_BIN_##ext(>=, _ge_SxS_, a, bool) +#define MAP_COMP_OPS(ext, a, _zval) \ +MAP_BIN_##ext(<, _lt_SxS_, a, bool, _zval, true) \ +MAP_BIN_##ext(<=, _le_SxS_, a, bool, _zval, true) \ +MAP_BIN_##ext(>, _gt_SxS_, a, bool, _zval, true) \ +MAP_BIN_##ext(>=, _ge_SxS_, a, bool, _zval, true) /****************************************************************************** * @@ -73,9 +73,9 @@ MAP_BIN_##ext(>=, _ge_SxS_, a, bool) ******************************************************************************/ #define MAP_LOG_OPS(ext) \ -MAP_BIN_##ext(&, _and_SxS_, bool, bool) \ -MAP_BIN_##ext(|, _or_SxS_, bool, bool) \ -MAP_MON_##ext(!, _not_S_, bool, bool) +MAP_BIN_##ext(&, _and_SxS_, bool, bool, true, true) \ +MAP_BIN_##ext(|, _or_SxS_, bool, bool, true, true) \ +MAP_MON_##ext(!, _not_S_, bool, bool, true, true) /****************************************************************************** * @@ -83,34 +83,34 @@ MAP_MON_##ext(!, _not_S_, bool, bool) * ******************************************************************************/ -#define MAP_BOOL_CONV_OP(ext, a) \ -MAP_MON_##ext(tobool, _tobool_S_, a, bool) +#define MAP_BOOL_CONV_OP(ext, a, _zval) \ +MAP_MON_##ext(tobool, _tobool_S_, a, bool, _zval, true) -#define MAP_MIN_NUM_CONV_OPS(ext, a) \ -MAP_MON_##ext(toi, _toi_S_, a, int) \ -MAP_MON_##ext(tol, _tol_S_, a, long) \ -MAP_MON_##ext(toui, _toui_S_, a, uint) \ -MAP_MON_##ext(toul, _toul_S_, a, ulong) \ -MAP_MON_##ext(tof, _tof_S_, a, float) \ -MAP_MON_##ext(tod, _tod_S_, a, double) +#define MAP_MIN_NUM_CONV_OPS(ext, a, _zval) \ +MAP_MON_##ext(toi, _toi_S_, a, int, _zval, 0i) \ +MAP_MON_##ext(tol, _tol_S_, a, long, _zval, 0l) \ +MAP_MON_##ext(toui, _toui_S_, a, uint, _zval, 0ui) \ +MAP_MON_##ext(toul, _toul_S_, a, ulong, _zval, 0ul) \ +MAP_MON_##ext(tof, _tof_S_, a, float, _zval, 0f) \ +MAP_MON_##ext(tod, _tod_S_, a, double, _zval, 0d) #ifdef FULLTYPES -#define MAP_FULL_NUM_CONV_OPS(ext, a) \ -MAP_MON_##ext(tob, _tob_S_, a, byte) \ -MAP_MON_##ext(tosh, _tos_S_, a, short) \ -MAP_MON_##ext(toll, _toll_S_, a, longlong) \ -MAP_MON_##ext(toub, _toub_S_, a, ubyte) \ -MAP_MON_##ext(tous, _tous_S_, a, ushort) \ -MAP_MON_##ext(toull, _toull_S_, a, ulonglong) +#define MAP_FULL_NUM_CONV_OPS(ext, a, _zval) \ +MAP_MON_##ext(tob, _tob_S_, a, byte, _zval, 0b) \ +MAP_MON_##ext(tosh, _tos_S_, a, short, _zval, 0s) \ +MAP_MON_##ext(toll, _toll_S_, a, longlong, _zval, 0ll) \ +MAP_MON_##ext(toub, _toub_S_, a, ubyte, _zval, 0ub) \ +MAP_MON_##ext(tous, _tous_S_, a, ushort, _zval, 0us) \ +MAP_MON_##ext(toull, _toull_S_, a, ulonglong, _zval, 0ull) -#define MAP_NUM_CONV_OPS(ext, a) \ -MAP_MIN_NUM_CONV_OPS(ext, a) \ -MAP_FULL_NUM_CONV_OPS(ext, a) +#define MAP_NUM_CONV_OPS(ext, a, _zval) \ +MAP_MIN_NUM_CONV_OPS(ext, a, _zval) \ +MAP_FULL_NUM_CONV_OPS(ext, a, _zval) #else /* FULLTYPES */ -#define MAP_NUM_CONV_OPS(ext, a) \ -MAP_MIN_NUM_CONV_OPS(ext, a) +#define MAP_NUM_CONV_OPS(ext, a, _zval) \ +MAP_MIN_NUM_CONV_OPS(ext, a, _zval) #endif /* FULLTYPES */ diff --git a/src/structures/ArrayArith.xsac b/src/structures/ArrayArith.xsac index f6d841fc..6170e167 100644 --- a/src/structures/ArrayArith.xsac +++ b/src/structures/ArrayArith.xsac @@ -37,25 +37,28 @@ export all; * ******************************************************************************/ -#define MAP_BIN_AxA(name, op, a, b) \ +#define MAP_BIN_AxA(name, op, a, b, adef, bdef) \ inline \ b[d>0:shp] name(a[d>0:shp] A, a[d>0:shp] B) \ { \ - return { iv -> op(_sel_VxA_(iv, A), _sel_VxA_(iv, B)) | iv < shp }; \ + return { iv -> op(_sel_VxA_(iv, A), _sel_VxA_(iv, B)) | iv < shp; \ + iv -> bdef | iv < shp }; \ } -#define MAP_BIN_AxS(name, op, a, b) \ +#define MAP_BIN_AxS(name, op, a, b, adef, bdef) \ inline \ b[d>0:shp] name(a[d>0:shp] A, a B) \ { \ - return { iv -> op(_sel_VxA_(iv, A), B) | iv < shp }; \ + return { iv -> op(_sel_VxA_(iv, A), B) | iv < shp; \ + iv -> bdef | iv < shp }; \ } -#define MAP_BIN_SxA(name, op, a, b) \ +#define MAP_BIN_SxA(name, op, a, b, adef, bdef) \ inline \ b[d>0:shp] name(a A, a[d>0:shp] B) \ { \ - return { iv -> op(A, _sel_VxA_(iv, B)) | iv < shp }; \ + return { iv -> op(A, _sel_VxA_(iv, B)) | iv < shp; \ + iv -> bdef | iv < shp }; \ } /******************************************************************************/ @@ -87,15 +90,16 @@ int[n] name(int A, int[n] B) \ * ******************************************************************************/ -#define MAP_MON_AxA(name, op, a, b) \ +#define MAP_MON_AxA(name, op, a, b, adef, bdef) \ inline \ b[d>0:shp] name(a[d>0:shp] A) \ { \ - return { iv -> op(_sel_VxA_(iv, A)) | iv < shp }; \ + return { iv -> op(_sel_VxA_(iv, A)) | iv < shp; \ + iv -> bdef | iv < shp }; \ } -#define MAP_MON_AxS(name, op, a, b) -#define MAP_MON_SxA(name, op, a, b) +#define MAP_MON_AxS(name, op, a, b, adef, bdef) +#define MAP_MON_SxA(name, op, a, b, adef, bdef) /****************************************************************************** * @@ -104,23 +108,23 @@ b[d>0:shp] name(a[d>0:shp] A) \ ******************************************************************************/ #define ARI_OPS_A(typ, _postfix, _fmt, _zval, _oval) \ -MAP_ARI_OPS(AxA, typ) \ -MAP_ARI_OPS(AxS, typ) \ -MAP_ARI_OPS(SxA, typ) +MAP_ARI_OPS(AxA, typ, _zval) \ +MAP_ARI_OPS(AxS, typ, _zval) \ +MAP_ARI_OPS(SxA, typ, _zval) NUM(ARI_OPS_A) /******************************************************************************/ #define ABS_OP_A(type, _postfix, _fmt, _zval, _oval) \ -MAP_ABS_OP(AxA, type) \ -MAP_ABS_OP(AxS, type) \ -MAP_ABS_OP(SxA, type) +MAP_ABS_OP(AxA, type, _zval) \ +MAP_ABS_OP(AxS, type, _zval) \ +MAP_ABS_OP(SxA, type, _zval) #define ABS_NOOP_A(type, _postfix, _fmt, _zval, _oval) \ -MAP_ABS_NOOP(AxA, type) \ -MAP_ABS_NOOP(AxS, type) \ -MAP_ABS_NOOP(SxA, type) +MAP_ABS_NOOP(AxA, type, _zval) \ +MAP_ABS_NOOP(AxS, type, _zval) \ +MAP_ABS_NOOP(SxA, type, _zval) SIGNED_NUM(ABS_OP_A) // abs is noop on unsigned numbers @@ -129,18 +133,18 @@ UNSIGNED_INT_NUM(ABS_NOOP_A) /******************************************************************************/ #define NEG_OP_A(typ, _postfix, _fmt, _zval, _oval) \ -MAP_NEG_OP(AxA, typ) \ -MAP_NEG_OP(AxS, typ) \ -MAP_NEG_OP(SxA, typ) +MAP_NEG_OP(AxA, typ, _zval) \ +MAP_NEG_OP(AxS, typ, _zval) \ +MAP_NEG_OP(SxA, typ, _zval) SIGNED_NUM(NEG_OP_A) /******************************************************************************/ #define INT_OPS_A(typ, _postfix, _fmt, _zval, _oval) \ -MAP_INT_OPS(AxA, typ) \ -MAP_INT_OPS(AxS, typ) \ -MAP_INT_OPS(SxA, typ) +MAP_INT_OPS(AxA, typ, _zval) \ +MAP_INT_OPS(AxS, typ, _zval) \ +MAP_INT_OPS(SxA, typ, _zval) INT_NUM(INT_OPS_A) @@ -151,9 +155,9 @@ INT_NUM(INT_OPS_A) ******************************************************************************/ #define REL_OPS_A(typ, _postfix, _fmt, _zval, _oval) \ -MAP_REL_OPS(AxA, typ) \ -MAP_REL_OPS(AxS, typ) \ -MAP_REL_OPS(SxA, typ) +MAP_REL_OPS(AxA, typ, _zval) \ +MAP_REL_OPS(AxS, typ, _zval) \ +MAP_REL_OPS(SxA, typ, _zval) BUILT_IN(REL_OPS_A) @@ -173,15 +177,15 @@ MAP_LOG_OPS(SxA) * ******************************************************************************/ -#define BOOL_CONV_OP_A(typ, _postfix, _fmt, _zero, _one) \ -MAP_BOOL_CONV_OP(AxA, typ) +#define BOOL_CONV_OP_A(typ, _postfix, _fmt, _zval, _oval) \ +MAP_BOOL_CONV_OP(AxA, typ, _zval) NUM(BOOL_CONV_OP_A) BOOL(BOOL_CONV_OP_A) /******************************************************************************/ -#define NUM_CONV_OPS_A(typ, _postfix, _fmt, _zero, _one) \ -MAP_NUM_CONV_OPS(AxA, typ) +#define NUM_CONV_OPS_A(typ, _postfix, _fmt, _zval, _oval) \ +MAP_NUM_CONV_OPS(AxA, typ, _zval) BUILT_IN(NUM_CONV_OPS_A) diff --git a/src/structures/ArrayTransform.xsac b/src/structures/ArrayTransform.xsac index a5371539..eaabd952 100644 --- a/src/structures/ArrayTransform.xsac +++ b/src/structures/ArrayTransform.xsac @@ -58,28 +58,32 @@ BUILT_IN(TRANSPOSE) inline \ typ[d:shp] where(bool[d:shp] p, typ[d:shp] A, typ[d:shp] B) \ { \ - return { iv -> _sel_VxA_(iv, p) ? _sel_VxA_(iv, A) : _sel_VxA_(iv, B) }; \ + return { iv -> _sel_VxA_(iv, p) ? _sel_VxA_(iv, A) : _sel_VxA_(iv, B); \ + iv -> _zval | iv < shp }; \ } #define WHERE_AxS(typ, _postfix, _fmt, _zval, _oval) \ inline \ typ[d:shp] where(bool[d:shp] p, typ[d:shp] A, typ B) \ { \ - return { iv -> _sel_VxA_(iv, p) ? _sel_VxA_(iv, A) : B }; \ + return { iv -> _sel_VxA_(iv, p) ? _sel_VxA_(iv, A) : B; \ + iv -> _zval | iv < shp }; \ } #define WHERE_SxA(typ, _postfix, _fmt, _zval, _oval) \ inline \ typ[d:shp] where(bool[d:shp] p, typ A, typ[d:shp] B) \ { \ - return { iv -> _sel_VxA_(iv, p) ? A : _sel_VxA_(iv, B) }; \ + return { iv -> _sel_VxA_(iv, p) ? A : _sel_VxA_(iv, B); \ + iv -> _zval | iv < shp }; \ } #define WHERE_SxS(typ, _postfix, _fmt, _zval, _oval) \ inline \ typ[b:shp] where(bool[b:shp] p, typ A, typ B) \ { \ - return { iv -> _sel_VxA_(iv, p) ? A : B }; \ + return { iv -> _sel_VxA_(iv, p) ? A : B; \ + iv -> _zval | iv < shp }; \ } #define WHERE(typ, postfix, fmt, zval, oval) \ diff --git a/src/structures/ComplexArrayArith.xsac b/src/structures/ComplexArrayArith.xsac index 3cc603eb..0b9a3557 100644 --- a/src/structures/ComplexArrayArith.xsac +++ b/src/structures/ComplexArrayArith.xsac @@ -19,25 +19,28 @@ export all; * ******************************************************************************/ -#define MAP_BIN_AxA(name, op, a, b) \ +#define MAP_BIN_AxA(name, op, a, b, adef, bdef) \ inline \ b[d:shp] name(a[d:shp] A, a[d:shp] B) \ { \ - return { iv -> name(A[iv], B[iv]) | iv < shp }; \ + return { iv -> name(A[iv], B[iv]) | iv < shp; \ + iv -> bdef | iv < shp }; \ } -#define MAP_BIN_AxS(name, op, a, b) \ +#define MAP_BIN_AxS(name, op, a, b, adef, bdef) \ inline \ b[d:shp] name(a[d:shp] A, a B) \ { \ - return { iv -> name(A[iv], B) | iv < shp }; \ + return { iv -> name(A[iv], B) | iv < shp; \ + iv -> bdef | iv < shp }; \ } -#define MAP_BIN_SxA(name, op, a, b) \ +#define MAP_BIN_SxA(name, op, a, b, adef, bdef) \ inline \ b[d:shp] name(a A, a[d:shp] B) \ { \ - return { iv -> name(A, B[iv]) | iv < shp }; \ + return { iv -> name(A, B[iv]) | iv < shp; \ + iv -> bdef | iv < shp }; \ } /****************************************************************************** @@ -49,15 +52,16 @@ b[d:shp] name(a A, a[d:shp] B) \ * ******************************************************************************/ -#define MAP_MON_AxA(name, op, a, b) \ +#define MAP_MON_AxA(name, op, a, b, adef, bdef) \ inline \ b[d:shp] name(a[d:shp] A) \ { \ - return { iv -> name(A[iv]) | iv < shp }; \ + return { iv -> name(A[iv]) | iv < shp; \ + iv -> bdef | iv < shp }; \ } -#define MAP_MON_SxA(name, op, a, b) -#define MAP_MON_AxS(name, op, a, b) +#define MAP_MON_SxA(name, op, a, b, adef, bdef) +#define MAP_MON_AxS(name, op, a, b, adef, bdef) /****************************************************************************** * @@ -65,10 +69,10 @@ b[d:shp] name(a[d:shp] A) \ * ******************************************************************************/ -#define ARI_OPS_A(a) \ -MAP_ARI_OPS(AxA, a) \ -MAP_ARI_OPS(SxA, a) \ -MAP_ARI_OPS(AxS, a) +#define ARI_OPS_A(a, _zval) \ +MAP_ARI_OPS(AxA, a, _zval) \ +MAP_ARI_OPS(SxA, a, _zval) \ +MAP_ARI_OPS(AxS, a, _zval) /****************************************************************************** * @@ -76,19 +80,19 @@ MAP_ARI_OPS(AxS, a) * ******************************************************************************/ -#define REL_OPS_A(a) \ -EQ_OPS_A(a) \ -COMP_OPS_A(a) +#define REL_OPS_A(a, _zval) \ +EQ_OPS_A(a, _zval) \ +COMP_OPS_A(a, _zval) -#define EQ_OPS_A(a) \ -MAP_EQ_OPS(AxA, a) \ -MAP_EQ_OPS(SxA, a) \ -MAP_EQ_OPS(AxS, a) +#define EQ_OPS_A(a, _zval) \ +MAP_EQ_OPS(AxA, a, _zval) \ +MAP_EQ_OPS(SxA, a, _zval) \ +MAP_EQ_OPS(AxS, a, _zval) -#define COMP_OPS_A(a) \ -MAP_COMP_OPS(AxA, a) \ -MAP_COMP_OPS(SxA, a) \ -MAP_COMP_OPS(AxS, a) +#define COMP_OPS_A(a, _zval) \ +MAP_COMP_OPS(AxA, a, _zval) \ +MAP_COMP_OPS(SxA, a, _zval) \ +MAP_COMP_OPS(AxS, a, _zval) /****************************************************************************** * @@ -105,7 +109,7 @@ MAP_COMP_OPS(AxS, a) * ******************************************************************************/ -ARI_OPS_A(complex) +ARI_OPS_A(complex, ((complex)[0d,0d])) /****************************************************************************** * @@ -113,4 +117,4 @@ ARI_OPS_A(complex) * ******************************************************************************/ -REL_OPS_A(complex) +REL_OPS_A(complex, ((complex)[0d,0d])) diff --git a/src/structures/ScalarArith.xsac b/src/structures/ScalarArith.xsac index 2806707a..1e21270d 100644 --- a/src/structures/ScalarArith.xsac +++ b/src/structures/ScalarArith.xsac @@ -50,14 +50,14 @@ BUILT_IN(ONE) * ******************************************************************************/ -#define MAP_BIN_SxS(name, op, a, b) \ +#define MAP_BIN_SxS(name, op, a, b, adef, bdef) \ inline \ b name(a A, a B) \ { \ return op(A, B); \ } -#define MAP_MON_SxS(name, op, a, b) \ +#define MAP_MON_SxS(name, op, a, b, adef, bdef) \ inline \ b name(a A) \ { \ @@ -78,17 +78,17 @@ a name(a A) \ ******************************************************************************/ #define ARI_OPS_S(typ, _postfix, _fmt, _zval, _oval) \ -MAP_ARI_OPS(SxS, typ) +MAP_ARI_OPS(SxS, typ, _zval) NUM(ARI_OPS_S) /******************************************************************************/ #define ABS_OP_S(typ, _postfix, _fmt, _zval, _oval) \ -MAP_ABS_OP(SxS, typ) +MAP_ABS_OP(SxS, typ, _zval) #define ABS_NOOP_S(typ, _postfix, _fmt, _zval, _oval) \ -MAP_ABS_NOOP(SxS, typ) +MAP_ABS_NOOP(SxS, typ, _zval) SIGNED_NUM(ABS_OP_S) // abs is noop on unsigned numbers @@ -97,7 +97,7 @@ UNSIGNED_INT_NUM(ABS_NOOP_S) /******************************************************************************/ #define NEG_OP_S(typ, _postfix, _fmt, _zval, _oval) \ -MAP_NEG_OP(SxS, typ) +MAP_NEG_OP(SxS, typ, _zval) // neg only works on signed integers and reals SIGNED_NUM(NEG_OP_S) @@ -112,7 +112,7 @@ NUM(ANA_OPS_S) /******************************************************************************/ #define INT_OPS_S(typ, _postfix, _fmt, _zval, _oval) \ -MAP_INT_OPS(SxS, typ) +MAP_INT_OPS(SxS, typ, _zval) // mod only supports whole numbers INT_NUM(INT_OPS_S) @@ -124,7 +124,7 @@ INT_NUM(INT_OPS_S) ******************************************************************************/ #define REL_OPS_S(typ, _postfix, _fmt, _zval, _oval) \ -MAP_REL_OPS(SxS, typ) +MAP_REL_OPS(SxS, typ, _zval) BUILT_IN(REL_OPS_S) @@ -143,12 +143,12 @@ MAP_LOG_OPS(SxS) ******************************************************************************/ #define BOOL_CONV_OP_S(typ, _postfix, _fmt, _zval, _oval) \ -MAP_BOOL_CONV_OP(SxS, typ) +MAP_BOOL_CONV_OP(SxS, typ, _zval) NUM(BOOL_CONV_OP_S) BOOL(BOOL_CONV_OP_S) #define NUM_CONV_OPS_S(typ, _postfix, _fmt, _zval, _oval) \ -MAP_NUM_CONV_OPS(SxS, typ) +MAP_NUM_CONV_OPS(SxS, typ, _zval) BUILT_IN(NUM_CONV_OPS_S)