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 方面に情報投入可能かな。余力があれば情報投入します。