mirror of
https://github.com/urbit/shrub.git
synced 2024-12-22 10:21:31 +03:00
Initial draft of modern fishing.
This commit is contained in:
parent
e820f2b995
commit
7a48d012f6
@ -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);
|
||||
|
23
jets/f/ap.c
23
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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user