예제 #1
0
void LINREC(stack& s) {
    quote* r2 = s.pop().get_quote();
    quote* r1 = s.pop().get_quote();
    quote* t = s.pop().get_quote();
    quote* b = s.pop().get_quote();
    linrec(s, b, t, r1, r2);
    delete t, delete b, delete r2, delete r1;
}
예제 #2
0
void
CfrTil_Combinator_LinRec ( )
{
    else2Block = ( block ) TOS, else1Block = ( block ) Dsp [ - 1 ],
        thenBlock = ( block ) Dsp [ - 2 ], ifBlock = ( block ) Dsp [ - 3 ] ;
    _DataStack_DropN ( 4 ) ;
    if ( CompileMode )
    {
        linrec ( ) ;
    }
    else ilinrec ( ) ;
}
예제 #3
0
void linrec(stack& s, quote* b, quote* t, quote* r1, quote* r2) {
    STACK(s);
    quote* context = s.pop().get_quote();
    b->execute(&s);
    bool done = s.pop().get_bool();
    s.push(context);
	UNSTACK(s);
    if (done) {
        t->execute(&s);
    } else  {
        r1->execute(&s);
        linrec(s, b, t, r1, r2);
        r2->execute(&s);
    }
}