summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-04-13 14:49:49 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-04-13 14:50:13 +0900
commit393923b50d472468c078c08a4b6f90e7186deb4a (patch)
treec069720cfdccbe0c561733e07e3968c9d2e7c814 /include
parentf8e1bf283d328dda6334ecca5170b72b870f0da2 (diff)
Inline LONG_LONG conversions
Not only NUM2LL, also LL2NUM, ULL2NUM and NUM2ULL.
Diffstat (limited to 'include')
-rw-r--r--include/ruby/internal/arithmetic/long_long.h29
1 files changed, 26 insertions, 3 deletions
diff --git a/include/ruby/internal/arithmetic/long_long.h b/include/ruby/internal/arithmetic/long_long.h
index 96ffb37d57..a4a5d0aa09 100644
--- a/include/ruby/internal/arithmetic/long_long.h
+++ b/include/ruby/internal/arithmetic/long_long.h
@@ -25,12 +25,12 @@
#include "ruby/internal/special_consts.h"
#include "ruby/backward/2/long_long.h"
-#define RB_LL2NUM rb_ll2inum
-#define RB_ULL2NUM rb_ull2inum
+#define RB_LL2NUM rb_ll2num_inline
+#define RB_ULL2NUM rb_ull2num_inline
#define LL2NUM RB_LL2NUM
#define ULL2NUM RB_ULL2NUM
#define RB_NUM2LL rb_num2ll_inline
-#define RB_NUM2ULL rb_num2ull
+#define RB_NUM2ULL rb_num2ull_inline
#define NUM2LL RB_NUM2LL
#define NUM2ULL RB_NUM2ULL
@@ -41,6 +41,20 @@ LONG_LONG rb_num2ll(VALUE);
unsigned LONG_LONG rb_num2ull(VALUE);
RBIMPL_SYMBOL_EXPORT_END()
+static inline VALUE
+rb_ll2num_inline(LONG_LONG n)
+{
+ if (FIXABLE(n)) return LONG2FIX((long)n);
+ return rb_ll2inum(n);
+}
+
+static inline VALUE
+rb_ull2num_inline(unsigned LONG_LONG n)
+{
+ if (POSFIXABLE(n)) return LONG2FIX((long)n);
+ return rb_ull2inum(n);
+}
+
static inline LONG_LONG
rb_num2ll_inline(VALUE x)
{
@@ -50,4 +64,13 @@ rb_num2ll_inline(VALUE x)
return rb_num2ll(x);
}
+static inline unsigned LONG_LONG
+rb_num2ull_inline(VALUE x)
+{
+ if (RB_FIXNUM_P(x))
+ return RB_FIX2LONG(x);
+ else
+ return rb_num2ull(x);
+}
+
#endif /* RBIMPL_ARITHMETIC_LONG_LONG_H */