diff options
author | Nobuyoshi Nakada <[email protected]> | 2021-04-13 14:49:49 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2021-04-13 14:50:13 +0900 |
commit | 393923b50d472468c078c08a4b6f90e7186deb4a (patch) | |
tree | c069720cfdccbe0c561733e07e3968c9d2e7c814 /include/ruby | |
parent | f8e1bf283d328dda6334ecca5170b72b870f0da2 (diff) |
Inline LONG_LONG conversions
Not only NUM2LL, also LL2NUM, ULL2NUM and NUM2ULL.
Diffstat (limited to 'include/ruby')
-rw-r--r-- | include/ruby/internal/arithmetic/long_long.h | 29 |
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 */ |