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; }
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 ( ) ; }
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); } }