Gauche-0.9 なタグの実装

確認したら 0.8.11 な実装とは異なる模様。gauche.h のコメント見つつ以下にまとめ。

  • ポインタ
    • 末端 2 bit が 00
    • ペア又は heap-allocated なオブジェクトをナニ。指してる word の下 3 bits が '111' ならずっと下に出てくる heap-object でそうでないならペア
  • 整数 (Fixnum)
    • 末端 2 bit が 01
    • 30 ないし 62 bit な signed int
  • 実数 (Flonum)
    • 末端 2 bit が 10
      • C な double を指す
      • 末端 3 bit が 010 なら double なオブジェクトは vm レジスタにある
      • 末端 3 bit が 110 ならヒープにある
      • 詳細は gauche/number.h を見れ、との事
  • char (Character)
    • 末端 8 bit が 00000011
    • 20 bit で UCS をカバーできるとの事
    • 拡張のためのいくつかのナニを予約している模様
  • misc (Miscellaneous)
    • 末端 8 bit が 00001011
    • #f とか #t とか '() とか EOF とか UNDEF とか
  • Pattern variable
    • これ、知らんな
    • _Used in macro expander_とある
  • Heap object
    • 末端 3 bit が 111
    • ペアと flonums 以外の heap-allocated なオブジェクトの最初のワードにのみ、との記述あり
    • 末端 3 bit をマスクして ScmClass なポインタに、との事?

実装確認した方が良いのか、上記な下書きでは微妙なのでもう少しナニ。