IS_A

ひら終了してレビューの依頼が。
こんなソレは見たことないな、と言いつつ R5RS 見たら無い。ええと IS_A のコンテンツには、Gauche ユーザリファレンスの is-a? へのリンクがある。
これを見つつ gosh で確認。

gosh> is-a?
#<subr is-a?>
gosh> (define a (list 1 2 3))
a
gosh> (is-a? a <list>)
#t
gosh> <list>
#<class <list>>
gosh> 

むーん。IS_A 難解。knishii2156 さんよく掘ったなぁ。

ってか

よく考えたら自分でざくざく掘らんでも_ひら_で掘ったナニを見つつソースを追い掛ければ良いコトに気づく。あるいはレビューも全部理解してないとデキない、というソレではなくって、勉強しながら、なアレを意識してるんだろうか、という事に思い当ってたりするんですが、それは考え杉かも (を

とりあえず ScmClassRec 構造体の redefined な属性に付いてるコメントが以下。

    ScmObj redefined;           /* if this class is obsoleted by class
                                   redefinition, points to the new class.
                                   if this class is being redefined, points
                                   to a thread that is handling the
                                   redefinition.  (it won't be seen by
                                   Scheme; see class.c)
                                   otherwise #f */

とほほ。今から掘ったソレをチェックしつつ再度ソース確認します。

難解

とは言え難解なのはこのケイス

                /* be careful to handle class redifinition case */
                if (!SCM_FALSEP(Scm_ClassOf(obj)->redefined)) {
                    CHECK_STACK(CONT_FRAME_SIZE);
                    PUSH_CONT(PC);
                    PC = PC_TO_RETURN;
                    VAL0 = Scm_VMIsA(obj, c);
                } else {

で、件の Scm_VMIsA() な関数定義なコメントが以下

/*
 * (is-a? obj class)
 *   - if obj's class is redefined, first updates obj.
 */

obj のクラスが再定義されてたら、まず obj をアプデイト、と。これはココにも同様の記述がありますな。

obj のクラスが再定義されてしまうと、これらの手続きは、最初に obj のクラスを新しいクラスに再定義します。

よく見りゃそのまんまだな。(を

微妙

class.c にヒミツがありそげ、なのですが限界ッス。