summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-11-23 13:25:36 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-11-23 13:25:36 +0000
commit6bcb8edb6deecf7d8d0c93fdcef4c70e72dfead1 (patch)
treee9936d340c584acec7d779c4e227c38c7862c199
parentb8bbc1a310b972a9622a2877ab8e0a1ef1fa8e95 (diff)
* include/ruby/ruby.h (RBIGNUM_EMBED_LEN_MAX): Limit the value to
less than 8. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43818 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--include/ruby/ruby.h7
2 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index cae760fb95..e8ac4dd946 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat Nov 23 22:22:26 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (RBIGNUM_EMBED_LEN_MAX): Limit the value to
+ less than 8.
+
Sat Nov 23 19:52:00 2013 Kenta Murata <mrkn@mrkn.jp>
* ext/bigdecimal/lib/bigdecimal/math.rb (BigMath.E): Use BigMath.exp.
diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h
index 3b6a279b5b..35a647110a 100644
--- a/include/ruby/ruby.h
+++ b/include/ruby/ruby.h
@@ -1067,8 +1067,11 @@ struct RStruct {
#define RSTRUCT_SET(st, idx, v) OBJ_WRITE(st, &RSTRUCT_CONST_PTR(st)[idx], (v))
#define RSTRUCT_GET(st, idx) (RSTRUCT_CONST_PTR(st)[idx])
+#define RBIGNUM_EMBED_LEN_NUMBITS 3
#ifndef RBIGNUM_EMBED_LEN_MAX
-# define RBIGNUM_EMBED_LEN_MAX ((int)((sizeof(VALUE)*3)/sizeof(BDIGIT)))
+# define RBIGNUM_EMBED_LEN_MAX \
+ (((int)((sizeof(VALUE)*3)/sizeof(BDIGIT))) < (1 << RBIGNUM_EMBED_LEN_NUMBITS)-1 ? \
+ ((int)((sizeof(VALUE)*3)/sizeof(BDIGIT))) : (1 << RBIGNUM_EMBED_LEN_NUMBITS)-1)
#endif
struct RBignum {
struct RBasic basic;
@@ -1091,7 +1094,7 @@ struct RBignum {
#define RBIGNUM_EMBED_FLAG FL_USER2
#define RBIGNUM_EMBED_LEN_MASK (FL_USER5|FL_USER4|FL_USER3)
-#define RBIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+3)
+#define RBIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+RBIGNUM_EMBED_LEN_NUMBITS)
#define RBIGNUM_LEN(b) \
((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
(long)((RBASIC(b)->flags >> RBIGNUM_EMBED_LEN_SHIFT) & \