summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorcremno <[email protected]>2014-03-11 19:44:19 +0100
committercremno <[email protected]>2014-03-11 20:14:18 +0100
commit1b6a4fb5a2e21b6075bc8ecfd874c6c8fcbeefa2 (patch)
tree544ddac1d2bf8d15e99c6083c964cedc53ac31b6
parentfee639775e18778bd84a7836500c192e53f194b7 (diff)
downloadmruby-1b6a4fb5a2e21b6075bc8ecfd874c6c8fcbeefa2.tar.gz
mruby-1b6a4fb5a2e21b6075bc8ecfd874c6c8fcbeefa2.zip
add MRB_INT_BIT
-rw-r--r--include/mruby/value.h5
-rw-r--r--mrbgems/mruby-sprintf/src/sprintf.c2
-rw-r--r--src/numeric.c8
3 files changed, 9 insertions, 6 deletions
diff --git a/include/mruby/value.h b/include/mruby/value.h
index a940aabb7..ccc30357b 100644
--- a/include/mruby/value.h
+++ b/include/mruby/value.h
@@ -26,6 +26,7 @@
# error Cannot use NaN boxing when mrb_int is 64bit
# else
typedef int64_t mrb_int;
+# define MRB_INT_BIT 64
# define MRB_INT_MIN INT64_MIN
# define MRB_INT_MAX INT64_MAX
# define PRIdMRB_INT PRId64
@@ -36,10 +37,12 @@
# endif
#elif defined(MRB_INT16)
typedef int16_t mrb_int;
+# define MRB_INT_BIT 16
# define MRB_INT_MIN INT16_MIN
# define MRB_INT_MAX INT16_MAX
#else
typedef int32_t mrb_int;
+# define MRB_INT_BIT 32
# define MRB_INT_MIN INT32_MIN
# define MRB_INT_MAX INT32_MAX
# define PRIdMRB_INT PRId32
@@ -239,7 +242,7 @@ typedef union mrb_value {
void *p;
struct {
unsigned int i_flag : MRB_FIXNUM_SHIFT;
- mrb_int i : (sizeof(mrb_int) * CHAR_BIT - MRB_FIXNUM_SHIFT);
+ mrb_int i : (MRB_INT_BIT - MRB_FIXNUM_SHIFT);
};
struct {
unsigned int sym_flag : MRB_SPECIAL_SHIFT;
diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c
index 8b0bff5be..90ca913d5 100644
--- a/mrbgems/mruby-sprintf/src/sprintf.c
+++ b/mrbgems/mruby-sprintf/src/sprintf.c
@@ -16,7 +16,7 @@
#include <ctype.h>
#define BIT_DIGITS(N) (((N)*146)/485 + 1) /* log2(10) =~ 146/485 */
-#define BITSPERDIG (sizeof(mrb_int)*CHAR_BIT)
+#define BITSPERDIG MRB_INT_BIT
#define EXTENDSIGN(n, l) (((~0 << (n)) >> (((n)*(l)) % BITSPERDIG)) & ~(~0 << (n)))
mrb_value mrb_str_format(mrb_state *, int, const mrb_value *, mrb_value);
diff --git a/src/numeric.c b/src/numeric.c
index 5d0269e00..38a05ae92 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -680,7 +680,7 @@ int_to_i(mrb_state *mrb, mrb_value num)
return num;
}
-#define SQRT_INT_MAX ((mrb_int)1<<((sizeof(mrb_int)*CHAR_BIT-1)/2))
+#define SQRT_INT_MAX ((mrb_int)1<<((MRB_INT_BIT-1)/2))
/*tests if N*N would overflow*/
#define FIT_SQRT_INT(n) (((n)<SQRT_INT_MAX)&&((n)>=-SQRT_INT_MAX))
@@ -959,13 +959,13 @@ fix_xor(mrb_state *mrb, mrb_value x)
return mrb_fixnum_value(val);
}
-#define NUMERIC_SHIFT_WIDTH_MAX (sizeof(mrb_int)*CHAR_BIT-1)
+#define NUMERIC_SHIFT_WIDTH_MAX (MRB_INT_BIT-1)
static mrb_value
lshift(mrb_state *mrb, mrb_int val, size_t width)
{
if (width > NUMERIC_SHIFT_WIDTH_MAX) {
- mrb_raisef(mrb, E_RANGE_ERROR, "width(%S) > (%S:sizeof(mrb_int)*CHAR_BIT-1)",
+ mrb_raisef(mrb, E_RANGE_ERROR, "width(%S) > (%S:MRB_INT_BIT-1)",
mrb_fixnum_value(width),
mrb_fixnum_value(NUMERIC_SHIFT_WIDTH_MAX));
}
@@ -1207,7 +1207,7 @@ fix_minus(mrb_state *mrb, mrb_value self)
mrb_value
mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, int base)
{
- char buf[sizeof(mrb_int)*CHAR_BIT+1];
+ char buf[MRB_INT_BIT+1];
char *b = buf + sizeof buf;
mrb_int val = mrb_fixnum(x);