/* u2_nk_soft(): ** ** Compute `(nock bus fol)`, interpreter first. */ u2_noun // transfer u2_nk_soft(u2_wire wir_r, u2_noun bus, // transfer u2_noun fol) // retain { return u2_cn_nock(bus, u2_ct(fol)); }
/* u2_cm_drop(): drop from meaning stack. */ void u2_cm_drop() { u2_noun tax = u2_wire_tax(u2_Wire); c3_assert(u2_nul != tax); u2_wire_tax(u2_Wire) = u2_ct(u2t(tax)); u2_cz(tax); }
/* u2_ckd_by_get(): map get for key `b` in map `a` with u2_none. */ u2_weak u2_ckd_by_get(u2_noun a, u2_noun b) { u2_noun c = _coal_by_get(u2_Wire, a, b); u2_cz(a); u2_cz(b); if ( u2_no == u2_cr_du(c) ) { u2_cz(c); return u2_none; } else { u2_noun pro = u2_ct(u2t(c)); u2_cz(c); return pro; } }
/* nock_mool(): fast internal mink interface. Arguments transferred. */ u2_noun _nock_mool(u2_noun bus, u2_noun fol, u2_kode* pon) { u2_noun hib, gal; c3_assert(u2_yes == *pon); while ( 1 ) { u2_tx_did_hop(u2_Wire, 1); if ( u2_no == u2du(fol) ) { *pon = 2; u2z(bus); u2z(fol); return u2_cm_wail(); } else { hib = u2fh(fol); gal = u2ft(fol); } if ( u2_yes == u2du(hib) ) { u2_noun poz, riv; u2_kode h_pon = 0, t_pon = 0; poz = _nock_mool(u2k(bus), u2k(hib), &h_pon); if ( 2 == h_pon ) { *pon = 2; u2z(bus); u2z(fol); return poz; } riv = _nock_mool(bus, u2k(gal), &t_pon); u2z(fol); if ( 2 == t_pon ) { *pon = 2; u2z(poz); return riv; } if ( (1 == h_pon) || (1 == t_pon) ) { u2_noun lal; *pon = 1; if ( 0 == h_pon ) { u2z(poz); lal = riv; } else if ( 0 == t_pon ) { u2z(riv); lal = poz; } else { lal = u2_ckb_weld(poz, riv); } return lal; } return u2_cn_cell(poz, riv); } else switch ( hib ) { default: *pon = 2; u2z(bus); u2z(fol); return u2_cm_wail(); case 0: { if ( u2_no == u2_cr_ud(gal) ) { *pon = 2; u2z(bus); u2z(fol); return u2_cm_wail(); } else { u2_weak pro = u2_cr_at(gal, bus); if ( u2_none == pro ) { *pon = 2; u2z(bus); u2z(fol); return u2_cm_wail(); } else { pro = u2k(pro); u2z(bus); u2z(fol); return pro; } } } case 1: { u2_noun pro = u2k(gal); u2z(bus); u2z(fol); return pro; } c3_assert(!"not reached"); case 2: { if ( (u2_no == u2du(gal)) || (u2_no == u2du(u2fh(gal))) ) { *pon = 2; u2z(bus); u2z(fol); return u2_cm_wail(); } else { u2_noun neb; neb = _nock_mool(bus, u2k(gal), pon); u2z(fol); if ( 0 != *pon ) { return neb; } bus = u2k(u2fh(neb)); fol = u2k(u2ft(neb)); u2z(neb); continue; } } c3_assert(!"not reached"); case 3: { u2_noun gof, pro; gof = _nock_mool(bus, u2k(gal), pon); u2z(fol); if ( 0 != *pon ) { return gof; } pro = u2du(gof); u2z(gof); return pro; } c3_assert(!"not reached"); case 4: { u2_noun gof, pro; gof = _nock_mool(bus, u2k(gal), pon); u2z(fol); if ( 0 != *pon ) { return gof; } if ( u2_none == (pro = u2_rl_vint(u2_Wire, gof)) ) { *pon = 2; u2z(gof); return u2_cm_wail(); } u2z(gof); return pro; } c3_assert(!"not reached"); case 5: { u2_noun gof, pro; gof = _nock_mool(bus, u2k(gal), pon); u2z(fol); if ( 0 != *pon ) { return gof; } if ( u2_no == u2du(gof) ) { *pon = 2; u2z(gof); return u2_cm_wail(); } pro = u2_cr_sing(u2h(gof), u2t(gof)); u2z(gof); return pro; } c3_assert(!"not reached"); case 6: { u2_noun b_gal, cd_gal, c_gal, d_gal; if ( u2_no == u2_cr_cell(gal, &b_gal, &cd_gal) ) { *pon = 2; u2z(bus); u2z(fol); return u2_cm_wail(); } else { u2_noun tys, nex; tys = _nock_mool(u2k(bus), u2k(b_gal), pon); if ( 0 != *pon ) { u2z(bus); u2z(fol); return tys; } if ( u2_no == u2_cr_cell(cd_gal, &c_gal, &d_gal) ) { *pon = 2; u2z(bus); u2z(fol); return u2_cm_wail(); } if ( 0 == tys ) { nex = u2k(c_gal); } else if ( 1 == tys ) { nex = u2k(d_gal); } else { *pon = 2; u2z(bus); u2z(fol); return u2_cm_wail(); } u2z(fol); fol = nex; continue; } } c3_assert(!"not reached"); case 7: { u2_noun b_gal, c_gal; if ( u2_no == u2_cr_cell(gal, &b_gal, &c_gal) ) { *pon = 2; u2z(bus); u2z(fol); return u2_cm_wail(); } else { u2_noun bod, nex; bod = _nock_mool(bus, u2k(b_gal), pon); if ( 0 != *pon ) { u2z(fol); return bod; } nex = u2k(c_gal); u2z(fol); bus = bod; fol = nex; continue; } } c3_assert(!"not reached"); case 8: { u2_noun b_gal, c_gal; // c3_assert(!"got 8 (mink)!"); if ( u2_no == u2_cr_cell(gal, &b_gal, &c_gal) ) { *pon = 2; u2z(bus); u2z(fol); return u2_cm_wail(); } else { u2_noun wib, bod, nex; wib = _nock_mool(u2k(bus), u2k(b_gal), pon); if ( 0 != *pon ) { u2z(bus); u2z(fol); return wib; } bod = u2nc(wib, bus); nex = u2k(c_gal); u2z(fol); bus = bod; fol = nex; continue; } } c3_assert(!"not reached"); case 9: { u2_noun b_gal, c_gal; if ( (u2_no == u2_cr_cell(gal, &b_gal, &c_gal)) || (u2_no == u2ud(b_gal)) ) { *pon = 2; u2z(bus); u2z(fol); return u2_cm_wail(); } else { u2_noun seb; u2_weak xip; seb = _nock_mool(bus, u2k(c_gal), pon); u2z(fol); if ( 0 != *pon ) { return seb; } u2_tx_sys_bit(u2_Wire, u2_yes); xip = u2_ds_find(u2_Wire, seb); u2_tx_sys_bit(u2_Wire, u2_no); if ( u2_none != xip ) { u2_noun pro; u2_tx_sys_bit(u2_Wire, u2_yes); pro = u2_ho_kicq(u2_Wire, xip, seb, b_gal, pon); u2_tx_sys_bit(u2_Wire, u2_no); u2z(seb); if ( u2_none == pro ) { *pon = 2; return u2_cm_wail(); } else return pro; } else { u2_noun nex = u2_cr_at(b_gal, seb); if ( u2_none == nex ) { *pon = 2; u2z(seb); return u2_cm_wail(); } bus = seb; fol = u2k(nex); continue; } } } c3_assert(!"not reached"); case 10: { u2_noun p_gal, q_gal; if ( u2_no == u2_cr_cell(gal, &p_gal, &q_gal) ) { *pon = 2; u2z(bus); u2z(fol); return u2_cm_wail(); } else { u2_noun zep, hod, nex; if ( u2_yes == u2du(p_gal) ) { u2_noun b_gal = u2fh(p_gal); u2_noun c_gal = u2ft(p_gal); u2_noun d_gal = q_gal; hod = _nock_mool(u2k(bus), u2_ct(c_gal), pon); if ( 0 != *pon ) { u2z(fol); return hod; } zep = u2k(b_gal); nex = u2k(d_gal); u2z(fol); } else { u2_noun b_gal = p_gal; u2_noun c_gal = q_gal; zep = u2k(b_gal); hod = u2_nul; nex = u2k(c_gal); u2z(fol); } return _nock_hint(zep, hod, bus, nex, pon); } } case 11: { u2_noun gof; gof = _nock_mool(bus, u2k(gal), pon); u2z(fol); if ( 0 != *pon ) { return gof; } return _nock_pray_mool(gof, pon); } c3_assert(!"not reached"); } } }
/* _nock_cool(): nock, transferring arguments. */ static u2_noun _nock_cool(u2_noun bus, u2_noun fol) { u2_noun hib, gal; while ( 1 ) { u2_tx_did_hop(u2_Wire, 1); if ( u2_no == u2du(fol) ) { return u2_cm_bail(c3__exit); } else { hib = u2fh(fol); gal = u2ft(fol); } if ( u2_yes == u2du(hib) ) { u2_noun poz, riv; poz = _nock_cool(u2k(bus), u2k(hib)); riv = _nock_cool(bus, u2k(gal)); u2z(fol); return u2_cn_cell(poz, riv); } else switch ( hib ) { default: return u2_cm_bail(c3__exit); case 0: { if ( u2_no == u2_cr_ud(gal) ) { return u2_cm_bail(c3__exit); } else { u2_noun pro = u2k(u2at(gal, bus)); u2z(bus); u2z(fol); return pro; } } case 1: { u2_noun pro = u2k(gal); u2z(bus); u2z(fol); return pro; } c3_assert(!"not reached"); case 2: { if ( u2_no == u2du(gal) ) { return u2_cm_bail(c3__exit); } else { u2_noun nex = _nock_cool(u2k(bus), u2k(u2ft(gal))); u2_noun seb = _nock_cool(bus, u2k(u2fh(gal))); u2z(fol); bus = seb; fol = nex; continue; } } c3_assert(!"not reached"); case 3: { u2_noun gof, pro; gof = _nock_cool(bus, u2k(gal)); pro = u2du(gof); u2z(gof); u2z(fol); return pro; } c3_assert(!"not reached"); case 4: { u2_noun gof, pro; gof = _nock_cool(bus, u2k(gal)); if ( (u2_none == (pro = u2_rl_vint(u2_Wire, gof))) ) { return u2_cm_bail(c3__exit); } u2z(gof); u2z(fol); return pro; } c3_assert(!"not reached"); case 5: { if ( u2_no == u2du(gal) ) { return u2_cm_bail(c3__exit); } else { u2_noun wim = _nock_cool(bus, u2k(gal)); u2_noun pro; if ( u2_no == u2du(wim) ) { return u2_cm_bail(c3__exit); } else pro = u2_cr_sing(u2h(wim), u2t(wim)); u2z(wim); u2z(fol); return pro; } } c3_assert(!"not reached"); case 6: { u2_noun b_gal, c_gal, d_gal; u2_cx_trel(gal, &b_gal, &c_gal, &d_gal); { u2_noun tys = _nock_cool(u2k(bus), u2k(b_gal)); u2_noun nex; if ( 0 == tys ) { nex = u2k(c_gal); } else if ( 1 == tys ) { nex = u2k(d_gal); } else return u2_cm_bail(c3__exit); u2z(fol); fol = nex; continue; } } c3_assert(!"not reached"); case 7: { u2_noun b_gal, c_gal; u2_cx_cell(gal, &b_gal, &c_gal); { u2_noun bod = _nock_cool(bus, u2k(b_gal)); u2_noun nex = u2k(c_gal); u2z(fol); bus = bod; fol = nex; continue; } } c3_assert(!"not reached"); case 8: { u2_noun b_gal, c_gal; // c3_assert(!"got 8 (nock)!"); u2_cx_cell(gal, &b_gal, &c_gal); { u2_noun bod = u2nc(_nock_cool(u2k(bus), u2k(b_gal)), bus); u2_noun nex = u2k(c_gal); u2z(fol); bus = bod; fol = nex; continue; } } c3_assert(!"not reached"); case 9: { u2_noun b_gal, c_gal; u2_cx_cell(gal, &b_gal, &c_gal); if ( u2_no == u2ud(b_gal) ) { return u2_cm_bail(c3__exit); } else { u2_noun seb = _nock_cool(bus, u2k(c_gal)); u2_weak xip; u2_tx_sys_bit(u2_Wire, u2_yes); xip = u2_ds_find(u2_Wire, seb); if ( u2_none != xip ) { u2_noun pro = u2_ho_kick(u2_Wire, xip, seb, b_gal); u2_tx_sys_bit(u2_Wire, u2_no); if ( u2_none == pro ) { return u2_cm_bail(c3__exit); } else { u2z(seb); u2z(fol); return pro; } } else { u2_tx_sys_bit(u2_Wire, u2_no); { u2_noun nex = u2_ct(u2at(b_gal, seb)); u2z(fol); bus = seb; fol = nex; continue; } } } } c3_assert(!"not reached"); case 10: { u2_noun p_gal, q_gal; u2_cx_cell(gal, &p_gal, &q_gal); { u2_noun zep, hod, nex, pro; if ( u2_yes == u2du(p_gal) ) { u2_noun b_gal = u2fh(p_gal); u2_noun c_gal = u2ft(p_gal); u2_noun d_gal = q_gal; zep = u2k(b_gal); hod = _nock_cool(u2k(bus), u2_ct(c_gal)); nex = u2_ct(d_gal); } else { u2_noun b_gal = p_gal; u2_noun c_gal = q_gal; zep = u2k(b_gal); hod = u2_nul; nex = u2_ct(c_gal); } u2_cz(fol); pro = _nock_hint(zep, hod, bus, nex, 0); return pro; } } case 11: { u2_noun gof, pro; gof = _nock_cool(bus, u2k(gal)); pro = _nock_pray_cool(gof); u2z(fol); return pro; } c3_assert(!"not reached"); } } }