IMMEDIATE_P

IMMEDIATE_P の実装を確認する。

https://github.com/ruby/ruby/blob/ruby_2_6/include/ruby/ruby.h#L400

#define RB_IMMEDIATE_P(x) ((VALUE)(x) & RUBY_IMMEDIATE_MASK)
#define IMMEDIATE_P(x) RB_IMMEDIATE_P(x)

RUBY_IMMEDIATE_MASK も確認する(64bit の場合)。

https://github.com/ruby/ruby/blob/ruby_2_6/include/ruby/ruby.h#L442

    RUBY_IMMEDIATE_MASK = 0x07,

と定義してある。つまり、0b0111 、x の下位3ビットをとってきて & を取った結果、0 でなければ IMMEDIATE である、という意味になる。 これは、ポインタ値かどうかのチェックということもできる。下位 3 bit が 0 でなければ、ポインタの恐れがあると判断できる。