u3_noun u3qfp_open(u3_noun ter, u3_noun fab, u3_noun gen) { return _ap_open_l(ter, fab, gen); }
/** hack **/ u3_noun u3qfp_hack(u3_noun ter, u3_noun gen) { u3_noun p_gen, q_gen; u3_noun ret; if ( c3y == u3du(u3h(gen)) ) { return u3nt(c3y, u3k(u3h(gen)), u3k(u3t(gen))); } else switch ( u3h(gen) ) { case c3__tsgr: u3x_cell(u3t(gen), &p_gen, &q_gen); { if ( (c3n == u3du(p_gen)) || (u3_nul != u3h(p_gen)) ) { return u3nc(c3n, u3k(gen)); } else { u3_noun pyr = u3qfp_hack(ter, q_gen); if ( c3y == u3h(pyr) ) { ret = u3nt(c3y, u3nt(c3__tsgr, u3k(p_gen), u3k(u3h(u3t(pyr)))), u3nt(c3__tsgr, u3k(p_gen), u3k(u3t(u3t(pyr))))); } else { ret = u3nc(c3n, u3nt(c3__tsgr, u3k(p_gen), u3k(u3t(pyr)))); } u3z(pyr); return ret; } } case c3__zpcb: u3x_cell(u3t(gen), &p_gen, &q_gen); { u3_noun pyr = u3qfp_hack(ter, q_gen); if ( c3y == u3h(pyr) ) { ret = u3nt(c3y, u3nt(c3__zpcb, u3k(p_gen), u3k(u3h(u3t(pyr)))), u3nt(c3__zpcb, u3k(p_gen), u3k(u3t(u3t(pyr))))); } else { ret = u3nc(c3n, u3nt(c3__zpcb, u3k(p_gen), u3k(u3t(pyr)))); } u3z(pyr); return ret; } default: break; } { u3_noun voq = _ap_open_l(ter, gen); if ( u3_none == voq ) { return u3nc(c3n, u3k(gen)); } else if ( c3y == u3r_sing(voq, gen) ) { return u3nc(c3n, voq); } else { ret = u3qfp_hack(ter, voq); u3z(voq); return ret; } } }