Fixed some uni bugs. ++fond jet still overflows when on.

This commit is contained in:
C. Guy Yarvin 2016-01-22 20:59:49 -08:00
parent 7c7c4a0368
commit 2a12fd4802
3 changed files with 52 additions and 37 deletions

View File

@ -6,6 +6,17 @@
/* functions
*/
u3_noun
u3kdi_uni(u3_noun a,
u3_noun b)
{
u3_noun c = u3qdi_uni(a, b);
u3z(a);
u3z(b);
return c;
}
u3_noun
u3qdi_uni(u3_noun a,
u3_noun b)
@ -36,56 +47,58 @@
}
else if ( c3y == u3r_sing(n_a, n_b) ) {
return u3nt(u3k(n_b),
u3qdi_uni(u3k(l_a), u3k(l_b)),
u3qdi_uni(u3k(r_a), u3k(r_b)));
u3kdi_uni(u3k(l_a), u3k(l_b)),
u3kdi_uni(u3k(r_a), u3k(r_b)));
}
else if ( c3y == u3qc_hor(n_b, n_a) ) {
return u3qdi_uni(u3nt(u3k(n_a),
u3qdi_uni(u3k(l_a),
return u3kdi_uni(u3nt(u3k(n_a),
u3kdi_uni(u3k(l_a),
u3nt(u3k(n_b),
u3k(l_b),
u3k(u3_nul))),
u3_nul)),
u3k(r_a)),
u3k(r_b));
}
else {
return u3qdi_uni(u3nt(u3k(n_a),
return u3kdi_uni(u3nt(u3k(n_a),
u3k(l_a),
u3qdi_uni(u3k(r_a),
u3kdi_uni(u3k(r_a),
u3nt(u3k(n_b),
u3k(u3_nul),
u3_nul,
u3k(r_b)))),
u3k(l_b));
}
}
else if ( c3n == u3r_cell(lr_b, &l_b, &r_b) ) {
return u3m_bail(c3__exit);
}
else if ( c3n == u3r_cell(lr_a, &l_a, &r_a) ) {
return u3m_bail(c3__exit);
}
else if ( c3y == u3r_sing(n_b, n_a) ) {
return u3nt(u3k(n_b),
u3qdi_uni(u3k(r_b), u3k(r_a)),
u3qdi_uni(u3k(l_b), u3k(l_a)));
}
else if ( c3y == u3qc_hor(n_a, n_b) ) {
return u3qdi_uni(u3k(r_a),
u3nt(u3k(n_b),
u3qdi_uni(u3nt(u3k(n_a),
u3k(l_a),
u3_nul),
u3k(l_b)),
u3k(r_b)));
}
else {
return u3qdi_uni(u3k(l_a),
u3nt(u3k(n_b),
u3k(l_b),
u3qdi_uni(u3nt(u3k(n_a),
u3k(u3_nul),
u3k(r_a)),
u3k(r_b))));
if ( c3n == u3r_cell(lr_b, &l_b, &r_b) ) {
return u3m_bail(c3__exit);
}
else if ( c3n == u3r_cell(lr_a, &l_a, &r_a) ) {
return u3m_bail(c3__exit);
}
else if ( c3y == u3r_sing(n_b, n_a) ) {
return u3nt(u3k(n_b),
u3kdi_uni(u3k(l_a), u3k(l_b)),
u3kdi_uni(u3k(r_a), u3k(r_b)));
}
else if ( c3y == u3qc_hor(n_a, n_b) ) {
return u3kdi_uni(u3k(r_a),
u3nt(u3k(n_b),
u3kdi_uni(u3nt(u3k(n_a),
u3k(l_a),
u3_nul),
u3k(l_b)),
u3k(r_b)));
}
else {
return u3kdi_uni(u3k(l_a),
u3nt(u3k(n_b),
u3k(l_b),
u3kdi_uni(u3nt(u3k(n_a),
u3_nul,
u3k(r_a)),
u3k(r_b))));
}
}
}
}

View File

@ -586,6 +586,8 @@
u3_noun lon,
u3_noun gil)
{
fprintf(stderr, "fond %x\r\n", u3r_mug(sut));
if ( c3n == u3du(sut) ) switch ( sut ) {
default: return u3m_bail(c3__fail);

View File

@ -348,7 +348,7 @@ static u3j_harm _mood__hoon__ut_burn_a[] = {{".2", u3wfu_burn}, {}};
static u3j_harm _mood__hoon__ut_conk_a[] = {{".2", u3wfu_conk}, {}};
static u3j_harm _mood__hoon__ut_crop_a[] = {{".2", u3wfu_crop}, {}};
// static u3j_harm _mood__hoon__ut_fire_a[] = {{".2", u3wfu_fire}, {}};
// static u3j_harm _mood__hoon__ut_fond_a[] = {{".2", u3wfu_fond, c3n}, {}};
// static u3j_harm _mood__hoon__ut_fond_a[] = {{".2", u3wfu_fond}, {}};
static u3j_harm _mood__hoon__ut_fish_a[] = {{".2", u3wfu_fish}, {}};
static u3j_harm _mood__hoon__ut_fuse_a[] = {{".2", u3wfu_fuse}, {}};
static u3j_harm _mood__hoon__ut_mint_a[] = {{".2", u3wfu_mint}, {}};
@ -366,7 +366,7 @@ static u3j_core _mood__hoon__ut_d[] =
{ "burn", _mood__hoon__ut_burn_a },
{ "conk", _mood__hoon__ut_conk_a },
{ "crop", _mood__hoon__ut_crop_a },
// { "fond", _mood__hoon__ut_fond_a },
// { "fond", _mood__hoon__ut_fond_a },
// { "fire", _mood__hoon__ut_fire_a },
{ "fish", _mood__hoon__ut_fish_a },
{ "fuse", _mood__hoon__ut_fuse_a },