Gauche-0.9 のタグに関するメモ

なんとか Reading Gauche 方面に出力したいんですが、なかなか微妙。

タグの続きを掘る

ええと、SCM_PTRP マクロの根拠ですが、gauche.h のコメント的には以下。

 * [Pointer]
 *      -------- -------- -------- ------00

ケツ 2 bit が 00 だと

  • pair
  • other heap-allocated objects

との事。あるいは

 * [Flonum]
 *      -------- -------- -------- -----M10

という事で SCM_PTRP マクロのコメントと合致してますな。SCM_HPTRP マクロについては上記の Flonum 以外という事になります。
で、昨晩保留した SCM_HTAG マクロなんですがソースツリーの中で grep してみた。

$ find|xargs grep SCM_HTAG
./gauche.h:#define SCM_HTAG(obj)    (SCM_WORD(SCM_OBJ(obj)->tag)&7)
./gauche.h:#define SCM_HOBJP(obj)  (SCM_HPTRP(obj)&&(SCM_HTAG(obj)==7))
./gauche.h:#define SCM_PAIRP(obj)          (SCM_HPTRP(obj)&&SCM_HTAG(obj)!=7)
$

うを、一瞬ワケワカになりかけました。きちんとイメージできてないと結構キビシいですな。SCM_HOBJP マクロだとタグが heap なポインタでクラスタグが 111 だったら heap allocated object 、という事か。
あるいは SCM_PAIRP マクロの場合はタグが heap なポインタでクラスタグが 111 以外ならペア認定って事なのか。あ、コメントのソレはそーゆー事なのか

 *      Points to a pair or other heap-allocated objects.
 *      If the lower 3 bits of the pointed word are '111',
 *      it's a heap object (see below).  Otherwise, it's
 *      a pair.

ポインタが指す word の下位 3 bits が 111 だったら heap object で、そうでなければペア、って書いてありますね。(汗

あら?

てコトは、いっちゃん最後の

 * [Heap object]
 *      -------- -------- -------- -----111
 *      Only appears at the first word of heap-allocated
 *      objects except pairs and flonums.   Masking lower
 *      3bits gives a pointer to ScmClass.  

な記述はクラスタグな記述、ってコトになるのか。これで Reading Gauche 方面に情報投入可能かな。余力があれば情報投入します。