After Integer unification in Ruby 2.4, I think it makes sense to introduce a T_INTEGER
type that helps in directly testing if a Ruby object is an Integer in C API.
For example, currently we need to write RB_TYPE_P(obj, T_FIXNUM) for this purpose.
However since ruby 2.4 onwards deprecates Fixnum and Bignum, I think it makes sense
to have a T_INTEGER type so that one can write RB_TYPE_P(obj, T_INTEGER) directly
to test for both 64-bit and > 64-bit integers.
There are certainly cases where a C extension wants to check the argument is an Integer, and its range doesn't matter, isn't it?
Is there a macro to check for that easily?
There are certainly cases where a C extension wants to check the argument is an Integer, and its range doesn't matter, isn't it?
Is there a macro to check for that easily?
Not currently, just two calls to RB_TYPE_P but that's a trivial
static inline wrapper (no macros when a static inline will do).
For case, statements, perhaps something like:
#define case_T_INTEGER case T_FIXNUM: case T_BIGNUM
Along the same lines, I've used the following outside of Ruby
for dealing with EAGAIN/EWOULDBLOCK:
#if defined(EWOULDBLOCK) && (EWOULDBLOCK != EAGAIN)
# define case_EAGAIN case EAGAIN: case EWOULDBLOCK
#else
# define case_EAGAIN case EAGAIN
#endif
switch(errno){case_EAGAIN:...default:...}