aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/stdlib/intX.h97
-rw-r--r--src/stdlib/numX.c.h12
-rw-r--r--src/stdlib/numX.h2
-rw-r--r--src/tomo.c2
4 files changed, 54 insertions, 59 deletions
diff --git a/src/stdlib/intX.h b/src/stdlib/intX.h
index e0980923..a4a782ab 100644
--- a/src/stdlib/intX.h
+++ b/src/stdlib/intX.h
@@ -18,16 +18,13 @@
#define PASTE3_(a, b, c) a##b##c
#define PASTE3(a, b, c) PASTE3_(a, b, c)
-#define INT_T PASTE3(int, INTX_H__INT_BITS, _t)
+#define INTX_T PASTE3(int, INTX_H__INT_BITS, _t)
+#define UINTX_T PASTE3(uint, INTX_H__INT_BITS, _t)
#define STRINGIFY_(s) #s
#define STRINGIFY(s) STRINGIFY_(s)
#define NAME_STR "Int" STRINGIFY(INTX_H__INT_BITS)
-#define UNSIGNED_(t) u##t
-#define UNSIGNED(t) UNSIGNED_(t)
-#define UINT_T UNSIGNED(INT_T)
-
#define OPT_T PASTE3(OptionalInt, INTX_H__INT_BITS, _t)
#define PASTE4_(a, b, c, d) a##b##c##d
@@ -35,78 +32,78 @@
#define NAMESPACED(method_name) PASTE4(Int, INTX_H__INT_BITS, $, method_name)
typedef struct {
- INT_T value;
+ INTX_T value;
bool has_value : 1;
} OPT_T;
Text_t NAMESPACED(as_text)(const void *i, bool colorize, const TypeInfo_t *type);
-Text_t NAMESPACED(value_as_text)(INT_T i);
+Text_t NAMESPACED(value_as_text)(INTX_T i);
PUREFUNC int32_t NAMESPACED(compare)(const void *x, const void *y, const TypeInfo_t *type);
PUREFUNC bool NAMESPACED(equal)(const void *x, const void *y, const TypeInfo_t *type);
-Text_t NAMESPACED(hex)(INT_T i, Int_t digits, bool uppercase, bool prefix);
-Text_t NAMESPACED(octal)(INT_T i, Int_t digits, bool prefix);
-List_t NAMESPACED(bits)(INT_T x);
-bool NAMESPACED(get_bit)(INT_T x, Int_t bit_index);
-Closure_t NAMESPACED(to)(INT_T first, INT_T last, OPT_T step);
-Closure_t NAMESPACED(onward)(INT_T first, INT_T step);
+Text_t NAMESPACED(hex)(INTX_T i, INTX_T digits, bool uppercase, bool prefix);
+Text_t NAMESPACED(octal)(INTX_T i, INTX_T digits, bool prefix);
+List_t NAMESPACED(bits)(INTX_T x);
+bool NAMESPACED(get_bit)(INTX_T x, INTX_T bit_index);
+Closure_t NAMESPACED(to)(INTX_T first, INTX_T last, OPT_T step);
+Closure_t NAMESPACED(onward)(INTX_T first, INTX_T step);
PUREFUNC OPT_T NAMESPACED(parse)(Text_t text, Text_t *remainder);
-CONSTFUNC bool NAMESPACED(is_between)(const INT_T x, const INT_T low, const INT_T high);
-CONSTFUNC INT_T NAMESPACED(clamped)(INT_T x, INT_T min, INT_T max);
-MACROLIKE CONSTFUNC INT_T NAMESPACED(from_byte)(Byte_t b) { return (INT_T)b; }
-MACROLIKE CONSTFUNC INT_T NAMESPACED(from_bool)(Bool_t b) { return (INT_T)b; }
-CONSTFUNC INT_T NAMESPACED(gcd)(INT_T x, INT_T y);
-extern const INT_T NAMESPACED(min), NAMESPACED(max);
+CONSTFUNC bool NAMESPACED(is_between)(const INTX_T x, const INTX_T low, const INTX_T high);
+CONSTFUNC INTX_T NAMESPACED(clamped)(INTX_T x, INTX_T min, INTX_T max);
+MACROLIKE CONSTFUNC INTX_T NAMESPACED(from_byte)(Byte_t b) { return (INTX_T)b; }
+MACROLIKE CONSTFUNC INTX_T NAMESPACED(from_bool)(Bool_t b) { return (INTX_T)b; }
+CONSTFUNC INTX_T NAMESPACED(gcd)(INTX_T x, INTX_T y);
+extern const INTX_T NAMESPACED(min), NAMESPACED(max);
extern const TypeInfo_t NAMESPACED(info);
-MACROLIKE INT_T NAMESPACED(abs)(INT_T x) {
+MACROLIKE INTX_T NAMESPACED(abs)(INTX_T x) {
#if INTX_H__INT_BITS >= 64
- return (INT_T)labs(x);
+ return (INTX_T)labs(x);
#else
- return (INT_T)abs(x);
+ return (INTX_T)abs(x);
#endif
}
-MACROLIKE INT_T NAMESPACED(divided_by)(INT_T D, INT_T d) {
- INT_T q = D / d, r = D % d;
+MACROLIKE INTX_T NAMESPACED(divided_by)(INTX_T D, INTX_T d) {
+ INTX_T q = D / d, r = D % d;
q -= (r < 0) * (2 * (d > 0) - 1);
return q;
}
-MACROLIKE INT_T NAMESPACED(modulo)(INT_T D, INT_T d) {
- INT_T r = D % d;
+MACROLIKE INTX_T NAMESPACED(modulo)(INTX_T D, INTX_T d) {
+ INTX_T r = D % d;
r -= (r < 0) * (2 * (d < 0) - 1) * d;
return r;
}
-MACROLIKE INT_T NAMESPACED(modulo1)(INT_T D, INT_T d) { return NAMESPACED(modulo)(D - 1, d) + 1; }
+MACROLIKE INTX_T NAMESPACED(modulo1)(INTX_T D, INTX_T d) { return NAMESPACED(modulo)(D - 1, d) + 1; }
-MACROLIKE PUREFUNC INT_T NAMESPACED(wrapping_plus)(INT_T x, INT_T y) { return (INT_T)((UINT_T)x + (UINT_T)y); }
+MACROLIKE PUREFUNC INTX_T NAMESPACED(wrapping_plus)(INTX_T x, INTX_T y) { return (INTX_T)((UINTX_T)x + (UINTX_T)y); }
-MACROLIKE PUREFUNC INT_T NAMESPACED(wrapping_minus)(INT_T x, INT_T y) { return (INT_T)((UINT_T)x + (UINT_T)y); }
+MACROLIKE PUREFUNC INTX_T NAMESPACED(wrapping_minus)(INTX_T x, INTX_T y) { return (INTX_T)((UINTX_T)x + (UINTX_T)y); }
-MACROLIKE PUREFUNC INT_T NAMESPACED(unsigned_left_shifted)(INT_T x, INT_T y) { return (INT_T)((UINT_T)x << y); }
+MACROLIKE PUREFUNC INTX_T NAMESPACED(unsigned_left_shifted)(INTX_T x, INTX_T y) { return (INTX_T)((UINTX_T)x << y); }
-MACROLIKE PUREFUNC INT_T NAMESPACED(unsigned_right_shifted)(INT_T x, INT_T y) { return (INT_T)((UINT_T)x >> y); }
+MACROLIKE PUREFUNC INTX_T NAMESPACED(unsigned_right_shifted)(INTX_T x, INTX_T y) { return (INTX_T)((UINTX_T)x >> y); }
void NAMESPACED(serialize)(const void *obj, FILE *out, Table_t *, const TypeInfo_t *);
void NAMESPACED(deserialize)(FILE *in, void *outval, List_t *, const TypeInfo_t *);
-MACROLIKE PUREFUNC INT_T NAMESPACED(from_num)(Num_t n, bool truncate) {
- INT_T i = (INT_T)n;
+MACROLIKE PUREFUNC INTX_T NAMESPACED(from_num)(Num_t n, bool truncate) {
+ INTX_T i = (INTX_T)n;
if (!truncate && unlikely((Num_t)i != n)) fail("Could not convert Num to an " NAME_STR " without truncation: ", n);
return i;
}
-MACROLIKE PUREFUNC INT_T NAMESPACED(from_num32)(Num32_t n, bool truncate) {
- INT_T i = (INT_T)n;
+MACROLIKE PUREFUNC INTX_T NAMESPACED(from_num32)(Num32_t n, bool truncate) {
+ INTX_T i = (INTX_T)n;
if (!truncate && unlikely((Num32_t)i != n))
fail("Could not convert Num32 to an " NAME_STR " without truncation: ", n);
return i;
}
-MACROLIKE PUREFUNC INT_T NAMESPACED(from_int)(Int_t i, bool truncate) {
+MACROLIKE PUREFUNC INTX_T NAMESPACED(from_int)(Int_t i, bool truncate) {
if likely (i.small & 1L) {
- INT_T ret = i.small >> 2L;
+ INTX_T ret = i.small >> 2L;
#if INTX_H__INT_BITS < 32
if (!truncate && unlikely((int64_t)ret != (i.small >> 2L)))
fail("Integer is too big to fit in an " NAME_STR ": ", i);
@@ -118,48 +115,46 @@ MACROLIKE PUREFUNC INT_T NAMESPACED(from_int)(Int_t i, bool truncate) {
}
#if INTX_H__INT_BITS < 64
-MACROLIKE PUREFUNC INT_T NAMESPACED(from_int64)(Int64_t i64, bool truncate) {
- INT_T i = (INT_T)i64;
+MACROLIKE PUREFUNC INTX_T NAMESPACED(from_int64)(Int64_t i64, bool truncate) {
+ INTX_T i = (INTX_T)i64;
if (!truncate && unlikely((int64_t)i != i64)) fail("Integer is too big to fit in an " NAME_STR ": ", i64);
return i;
}
#elif INTX_H__INT_BITS > 64
-MACROLIKE CONSTFUNC INT_T NAMESPACED(from_int64)(Int64_t i) { return (INT_T)i; }
+MACROLIKE CONSTFUNC INTX_T NAMESPACED(from_int64)(Int64_t i) { return (INTX_T)i; }
#endif
#if INTX_H__INT_BITS < 32
-MACROLIKE PUREFUNC INT_T NAMESPACED(from_int32)(Int32_t i32, bool truncate) {
- INT_T i = (INT_T)i32;
+MACROLIKE PUREFUNC INTX_T NAMESPACED(from_int32)(Int32_t i32, bool truncate) {
+ INTX_T i = (INTX_T)i32;
if (!truncate && unlikely((int32_t)i != i32)) fail("Integer is too big to fit in an " NAME_STR ": ", i32);
return i;
}
#elif INTX_H__INT_BITS > 32
-MACROLIKE CONSTFUNC INT_T NAMESPACED(from_int32)(Int32_t i) { return (INT_T)i; }
+MACROLIKE CONSTFUNC INTX_T NAMESPACED(from_int32)(Int32_t i) { return (INTX_T)i; }
#endif
#if INTX_H__INT_BITS < 16
-MACROLIKE PUREFUNC INT_T NAMESPACED(from_int16)(Int16_t i16, bool truncate) {
- INT_T i = (INT_T)i16;
+MACROLIKE PUREFUNC INTX_T NAMESPACED(from_int16)(Int16_t i16, bool truncate) {
+ INTX_T i = (INTX_T)i16;
if (!truncate && unlikely((int16_t)i != i16)) fail("Integer is too big to fit in an " NAME_STR ": ", i16);
return i;
}
#elif INTX_H__INT_BITS > 16
-MACROLIKE CONSTFUNC INT_T NAMESPACED(from_int16)(Int16_t i) { return (INT_T)i; }
+MACROLIKE CONSTFUNC INTX_T NAMESPACED(from_int16)(Int16_t i) { return (INTX_T)i; }
#endif
#if INTX_H__INT_BITS > 8
-MACROLIKE CONSTFUNC INT_T NAMESPACED(from_int8)(Int8_t i) { return (INT_T)i; }
+MACROLIKE CONSTFUNC INTX_T NAMESPACED(from_int8)(Int8_t i) { return (INTX_T)i; }
#endif
#undef PASTE3_
#undef PASTE3
-#undef INT_T
+#undef INTX_T
#undef STRINGIFY_
#undef STRINGIFY
#undef NAME_STR
-#undef UNSIGNED_
-#undef UNSIGNED
-#undef UINT_T
+#undef UINTX_T
#undef OPT_T
#undef PASTE4_
#undef PASTE4
diff --git a/src/stdlib/numX.c.h b/src/stdlib/numX.c.h
index 59c78bd5..7b030ab4 100644
--- a/src/stdlib/numX.c.h
+++ b/src/stdlib/numX.c.h
@@ -66,12 +66,12 @@ PUREFUNC int32_t NAMESPACED(compare)(const void *x, const void *y, const TypeInf
}
#elif NUMX_C_H__BITS == 32
public
-PUREFUNC Text_t NAMESPACED(value_as_text)(NUM_T x) { return Num$value_as_text((NUM_T)x); }
+PUREFUNC Text_t NAMESPACED(value_as_text)(NUM_T x) { return Num$value_as_text((double)x); }
PUREFUNC Text_t NAMESPACED(as_text)(const void *x, bool colorize, const TypeInfo_t *info) {
(void)info;
if (!x) return Text(TYPE_STR);
static const Text_t color_prefix = Text("\x1b[35m"), color_suffix = Text("\x1b[m");
- Text_t text = Num$value_as_text(*(NUM_T *)x);
+ Text_t text = Num$value_as_text((double)*(NUM_T *)x);
return colorize ? Texts(color_prefix, text, color_suffix) : text;
}
public
@@ -103,10 +103,10 @@ CONSTFUNC bool NAMESPACED(near)(NUM_T a, NUM_T b, NUM_T ratio, NUM_T absolute) {
NUM_T diff = SUFFIXED(fabs)(a - b);
if (diff < absolute) return true;
- else if (SUFFIXED(isnan)(diff)) return false;
+ else if (isnan(diff)) return false;
NUM_T epsilon = SUFFIXED(fabs)(a * ratio) + SUFFIXED(fabs)(b * ratio);
- if (SUFFIXED(isinf)(epsilon)) epsilon = DBL_MAX;
+ if (isinf(epsilon)) epsilon = DBL_MAX;
return (diff < epsilon);
}
@@ -135,7 +135,7 @@ public
CONSTFUNC NUM_T NAMESPACED(mod)(NUM_T num, NUM_T modulus) {
// Euclidean division, see:
// https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf
- NUM_T r = remainder(num, modulus);
+ NUM_T r = (NUM_T)remainder((double)num, (double)modulus);
r -= (r < SUFFIXED(0.)) * (SUFFIXED(2.) * (modulus < SUFFIXED(0.)) - SUFFIXED(1.)) * modulus;
return r;
}
@@ -179,7 +179,7 @@ OPT_T NAMESPACED(parse)(Text_t text, Text_t *remainder) {
public
CONSTFUNC bool NAMESPACED(is_none)(const void *n, const TypeInfo_t *info) {
(void)info;
- return SUFFIXED(isnan)(*(NUM_T *)n);
+ return isnan(*(NUM_T *)n);
}
public
diff --git a/src/stdlib/numX.h b/src/stdlib/numX.h
index 779c4e59..fa8ae6d3 100644
--- a/src/stdlib/numX.h
+++ b/src/stdlib/numX.h
@@ -72,7 +72,7 @@ MACROLIKE CONSTFUNC NUM_T NAMESPACED(from_int)(Int_t i, bool truncate) {
NUM_T ret = mpz_get_d(*i.big);
if (!truncate) {
mpz_t roundtrip;
- mpz_init_set_d(roundtrip, ret);
+ mpz_init_set_d(roundtrip, (double)ret);
if unlikely (mpz_cmp(*i.big, roundtrip) != 0)
fail("Could not convert integer to " TYPE_STR " without losing precision: ", i);
}
diff --git a/src/tomo.c b/src/tomo.c
index 01cf81c5..fab725db 100644
--- a/src/tomo.c
+++ b/src/tomo.c
@@ -475,7 +475,7 @@ void build_library(Path_t lib_dir) {
FILE *prog = run_cmd(cc, " -O", optimization, " ", cflags, " ", ldflags, " ", ldlibs, " ", list_text(extra_ldlibs),
#ifdef __APPLE__
- " -Wl,-install_name,@rpath/'lib", Path$base_name(lib_dir), version_suffix, SHARED_SUFFIX,
+ " -Wl,-install_name,@rpath/'lib", Path$base_name(lib_dir), SHARED_SUFFIX,
"'"
#else
" -Wl,-soname,'lib", lib_name, SHARED_SUFFIX,