diff --git a/include/jets/q.h b/include/jets/q.h index 246fa32bdb..2acb8eec50 100644 --- a/include/jets/q.h +++ b/include/jets/q.h @@ -214,6 +214,8 @@ u3_noun u3qfl_bunt(u3_noun, u3_noun); u3_noun u3qfl_whip(u3_noun, u3_noun, u3_noun); + u3_noun u3qfr_fish(u3_noun, u3_noun, u3_noun, u3_noun); + u3_noun u3qfp_hack(u3_noun, u3_noun); u3_noun u3qfp_late(u3_noun); u3_noun u3qfp_open(u3_noun, u3_noun, u3_noun); @@ -238,6 +240,7 @@ u3_noun u3qfu_dunq(u3_noun, const c3_c*, u3_noun); void u3qfu_dump(u3_noun, const c3_c*, u3_noun); u3_noun u3qfu_fond(u3_noun, u3_noun, u3_noun, u3_noun); + u3_noun u3qfu_find(u3_noun, u3_noun, u3_noun, u3_noun); u3_noun u3qfu_finc(u3_noun, u3_noun, u3_noun, u3_noun, u3_noun); u3_noun u3qfu_fink(u3_noun, u3_noun, u3_noun, u3_noun, u3_noun); u3_noun u3qfu_fire(u3_noun, u3_noun, u3_noun); @@ -292,6 +295,8 @@ u3_noun u3qzl_bunt(u3_noun, u3_noun); u3_noun u3qzl_whip(u3_noun, u3_noun, u3_noun); + u3_noun u3qzr_fish(u3_noun, u3_noun, u3_noun, u3_noun); + u3_noun u3qzp_hack(u3_noun, u3_noun); u3_noun u3qzp_late(u3_noun); u3_noun u3qzp_open(u3_noun, u3_noun, u3_noun); @@ -317,6 +322,7 @@ u3_noun u3qzu_dunq(u3_noun, const c3_c*, u3_noun); void u3qzu_dump(u3_noun, const c3_c*, u3_noun); u3_noun u3qzu_fond(u3_noun, u3_noun, u3_noun, u3_noun); + u3_noun u3qzu_find(u3_noun, u3_noun, u3_noun, u3_noun); u3_noun u3qzu_finc(u3_noun, u3_noun, u3_noun, u3_noun, u3_noun); u3_noun u3qzu_fink(u3_noun, u3_noun, u3_noun, u3_noun, u3_noun); u3_noun u3qzu_fire(u3_noun, u3_noun, u3_noun); diff --git a/jets/f/ap.c b/jets/f/ap.c index 0209da9a3b..7f27322e8b 100644 --- a/jets/f/ap.c +++ b/jets/f/ap.c @@ -997,6 +997,29 @@ return u3i_molt(gat, u3x_sam, u3k(gen), 0); } + static u3_noun + _ar_core(u3_noun van, + u3_noun ref, + u3_noun syn) + { + u3_noun gat = u3j_hook(u3k(van), "ar"); + + return u3i_molt(gat, u3x_sam, u3nc(u3k(ref), u3k(syn)), 0); + } + +/* fish +*/ + u3_noun + u3qfr_fish(u3_noun van, + u3_noun ref, + u3_noun syn, + u3_noun axe) + { + u3_noun gat = u3j_soft(_ar_core(van, ref, syn), "fish"); + + return u3n_slam_on(gat, u3k(axe)); + } + /* open */ static u3_noun diff --git a/jets/f/flan.c b/jets/f/flan.c index 813436b429..2033368810 100644 --- a/jets/f/flan.c +++ b/jets/f/flan.c @@ -10,6 +10,9 @@ u3qf_flan(u3_noun bos, u3_noun nif) { + if ( c3y == u3r_sing(bos, nif) ) { + return u3k(bos); + } if ( c3y == u3r_sing(1, u3h(bos)) ) { if ( (u3_nul == u3t(bos)) ) { return u3k(nif); diff --git a/jets/f/flor.c b/jets/f/flor.c index d06deabaa0..ba728c6963 100644 --- a/jets/f/flor.c +++ b/jets/f/flor.c @@ -10,6 +10,9 @@ u3qf_flor(u3_noun bos, u3_noun nif) { + if ( c3y == u3r_sing(bos, nif) ) { + return u3k(bos); + } if ( c3y == u3r_sing(1, u3h(bos)) ) { if ( (u3_nul == u3t(bos)) ) { return u3k(bos); diff --git a/jets/f/ut_mint.c b/jets/f/ut_mint.c index a71ee6df45..9f075ae04a 100644 --- a/jets/f/ut_mint.c +++ b/jets/f/ut_mint.c @@ -16,6 +16,25 @@ u3_nul)); } + static u3_noun + _mint_tend(u3_noun vit) + { + if ( u3_nul == vit ) { + return 1; + } else { + u3_noun nex = _mint_tend(u3t(vit)); + + if ( u3_nul == u3h(vit) ) { + return nex; + } else { + u3_noun boy = u3qc_peg(u3t(u3h(vit)), nex); + + u3z(nex); + return boy; + } + } + } + static u3_noun _mint_vet(u3_noun van) { @@ -690,6 +709,39 @@ return ret; } + case c3__wthx: u3x_cell(u3t(gen), &p_gen, &q_gen); + _mint_used(); + { + u3_noun hyp = u3nc(u3nc(c3y, 1), u3k(q_gen)); + u3_noun fid = u3qfu_find(van, sut, c3__free, hyp); + + if ( c3y != u3h(fid) ) { + return u3m_error("mint-fragment"); + } + else { + u3_noun pp_fid = u3h(u3t(fid)); + u3_noun qp_fid = u3t(u3t(fid)); + + if ( c3y != u3h(qp_fid) ) { + return u3m_error("mint-fragment"); + } + else { + u3_noun pqp_fid = u3t(qp_fid); + u3_noun axe = _mint_tend(pp_fid); + u3_noun ret; + + ret = u3nc(_mint_nice(van, gol, _mint_bean()), + u3qfr_fish(van, pqp_fid, p_gen, axe)); + + u3z(axe); + u3z(fid); + u3z(hyp); + + return ret; + } + } + } + case c3__cold: case c3__ktsg: p_gen = u3t(gen); _mint_used(); diff --git a/jets/f/ut_mull.c b/jets/f/ut_mull.c index 119e665236..5654669c8f 100644 --- a/jets/f/ut_mull.c +++ b/jets/f/ut_mull.c @@ -44,6 +44,24 @@ 0)); } + static u3_noun + _mull_tend(u3_noun vit) + { + if ( u3_nul == vit ) { + return 1; + } else { + u3_noun nex = _mull_tend(u3t(vit)); + + if ( u3_nul == u3h(vit) ) { + return nex; + } else { + u3_noun boy = u3qc_peg(u3t(u3h(vit)), nex); + + u3z(nex); + return boy; + } + } + } static u3_noun _mull_coke(u3_noun nug) { @@ -338,6 +356,61 @@ return _mull_both(van, gol, _mull_bean()); } + case c3__wthx: u3x_cell(u3t(gen), &p_gen, &q_gen); + _mull_used(); + { + u3_noun hyp = u3nc(u3nc(c3y, 1), u3k(q_gen)); + u3_noun fid = u3qfu_find(van, sut, c3__free, hyp); + u3_noun gax = u3qfu_find(van, dox, c3__free, hyp); + u3_noun old_type, old_axis; + u3_noun new_type, new_axis; + + { + if ( c3y != u3h(fid) ) { + return u3m_error("mull-bonk-x"); + } + else { + u3_noun pp_fid = u3h(u3t(fid)); + u3_noun qp_fid = u3t(u3t(fid)); + + if ( c3y != u3h(qp_fid) ) { + return u3m_error("mull-bonk-x"); + } + new_type = u3t(qp_fid); + new_axis = _mull_tend(pp_fid); + } + } + + { + if ( c3y != u3h(gax) ) { + return u3m_error("mull-bonk-x"); + } + else { + u3_noun pp_gax = u3h(u3t(gax)); + u3_noun qp_gax = u3t(u3t(gax)); + + if ( c3y != u3h(qp_gax) ) { + return u3m_error("mull-bonk-x"); + } + old_type = u3t(qp_gax); + old_axis = _mull_tend(pp_gax); + } + } + if ( c3n == u3r_sing(old_axis, new_axis) ) { + return u3m_error("mull-bonk-x"); + } + else if ( c3n == u3qfu_nest(van, old_type, c3y, new_type) ) { + return u3m_error("mull-bonk-x"); + } + + u3z(old_axis); + u3z(new_axis); + u3z(gax); + u3z(fid); + + return _mull_both(van, gol, _mull_bean()); + } + case c3__wtcl: u3x_trel(u3t(gen), &p_gen, &q_gen, &r_gen); _mull_used(); {