/* u2_sh_look(): ** ** Produce hook formula from core, or u2_none. */ u2_weak u2_sh_look(u2_wire wir_r, u2_noun cor, const c3_c* tam_c) { u2_ray bas_r = u2_wire_bas_r(wir_r); u2_noun bat = u2_t(cor); u2_noun fol; if ( u2_none != (fol = u2_ch_find_mixt(u2_bask_hag_r(bas_r), tam_c, bat)) ) { return fol; } else { u2_noun xip = u2_sh_find(wir_r, cor); if ( u2_none == xip ) { return u2_none; } else { u2_axis axe_w = _1; while ( 1 ) { fol = u2_sh_cook(wir_r, xip, tam_c); if ( u2_none == fol ) { u2_noun pet = u2_t(u2_t(xip)); if ( _0 == pet ) { return u2_none; } else { u2_axis pax = u2_h(pet); c3_assert(u2_fly_is_cat(pax)); c3_assert((u2_ax_dep(axe_w) + u2_ax_dep(pax)) <= 30); axe_w = u2_ax_peg(axe_w, pax); xip = u2_t(pet); continue; } } else { fol = u2_rl_take(bas_r, fol); if ( _1 != axe_w ) { /* XX: suboptimal; use comb:lily. */ fol = u2_rt(bas_r, u2_nock_flac, u2_rc(bas_r, u2_nock_frag, axe_w), fol); } fol = u2_ch_save_mixt(bas_r, u2_bask_hag_r(bas_r), tam_c, bat, fol); return fol; } } } } }
/* u2_ds_look(): ** ** Produce hook formula from core, or u2_none. */ u2_weak // produce u2_ds_look(u2_wire wir_r, u2_noun cor, // retain const c3_c* tam_c) // retain { u2_noun xip = u2_ds_find(wir_r, cor); if ( u2_none == xip ) { return u2_none; } else { c3_l axe_l = _1; while ( 1 ) { u2_noun fol = _ds_leap(wir_r, xip, tam_c); if ( u2_none == fol ) { u2_noun pet = u2_t(u2_t(xip)); if ( _0 == pet ) { // printf("no joy - %s\n", tam_c); return u2_none; } else { u2_axis pax = u2_h(pet); c3_assert(u2_fly_is_cat(pax)); c3_assert((u2_ax_dep(axe_l) + u2_ax_dep(pax)) <= 30); axe_l = u2_ax_peg(axe_l, pax); xip = u2_t(pet); continue; } } else { if ( _1 != axe_l ) { return u2_rt(wir_r, u2_nock_flac, u2_rc(wir_r, u2_nock_frag, axe_l), fol); } else return fol; } } } }