LISP Scheme Part2
■ このスレッドは過去ログ倉庫に格納されています
0166161-163
NGNGむー、そうかな。
トップレベルがSchemeで書いたread-eval-printループを実行してるとしても
同じだよ、と言う意味なんだが、そうするとどことどこが不連続になるんだろ
うか。(もちろん実際どうなってるかは処理系による。)
>>165
フックってのは、
obj **stack[N]; /* GCのルート"を指す"間接ポインタ */
obj **sp = stack;
#define gc_protect(var) (stack_check(), *sp++ = &(var))
#define gc_unprotect(n) (sp+=n)
obj *append(obj *list1, obj *list2)
{
obj *tmp;
gc_protect(list1);
gc_protect(list2);
...cons(list1, list2);
gc_unprotect(2);
}
みたいな意味じゃないの?
漏れが言ってるのは、上よりも、
obj *stack[N]; /* GCのルート */
obj *append(int argc, obj *argv[])
/* 引数はargv(スタックのどこか)に入って渡される */
{
...
}
とか、
obj *reg0, *reg1, *reg2, ...; /* GCのルート */
obj *stack[N]; /* これもルート */
obj *sp = stack;
#define push(val) (stack_check(), *sp++ = (val))
#define pop() (*--sp)
obj *append(void)
/* 引数はreg0とreg1に渡される */
{
... push(cons(reg0, reg1));
}
とかの方が良いんじゃないか、ということなんだが…
■ このスレッドは過去ログ倉庫に格納されています