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