true
IMMEDIATE_P(v)
は、いくつかの種類のオブジェクトであると紹介した。もっとも簡単なものは true であり、Qtrue
というマクロで値を参照できる。実際には 0x14 == 0b0001_0100
という値になる(64bit CPU の場合)。
#define RB_IMMEDIATE_P(x) ((VALUE)(x) & RUBY_IMMEDIATE_MASK) #define IMMEDIATE_P(x) RB_IMMEDIATE_P(x)
という定義だったのを思い出すと、immediate mask は 0b0111 なので、0x14 & 0b0111
はちゃんと !0 であることがわかる。つまり、IMMEDIATE_P(Qtrue)
は真である。
ここまでで、true, false, nil が出揃った。
- true: Qtrue == 0x14
- false: Qfalse == 0x00
- nil: Qnil == 0x08