mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-17 20:01:32 +03:00
move cast
This commit is contained in:
parent
4da79539ec
commit
bf2d240ed0
@ -139,6 +139,11 @@
|
|||||||
c3_o
|
c3_o
|
||||||
u3j_fine(u3_noun cor, u3j_fink* fin_u);
|
u3j_fine(u3_noun cor, u3j_fink* fin_u);
|
||||||
|
|
||||||
|
/* u3j_cast(): create u3j_fink from core and location.
|
||||||
|
*/
|
||||||
|
u3j_fink*
|
||||||
|
u3j_cast(u3_noun cor, u3_noun loc);
|
||||||
|
|
||||||
/* u3j_nail(): resolve hot state for location and axis. RETAIN.
|
/* u3j_nail(): resolve hot state for location and axis. RETAIN.
|
||||||
** return value indicates presence of driver.
|
** return value indicates presence of driver.
|
||||||
**/
|
**/
|
||||||
|
48
noun/jets.c
48
noun/jets.c
@ -271,6 +271,54 @@ u3j_spot(u3_noun cor)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u3j_fink*
|
||||||
|
_cj_cast(u3_noun cor, u3_noun loc)
|
||||||
|
{
|
||||||
|
c3_w i_w = 0;
|
||||||
|
u3_noun j, par, bat, dyn, pax,
|
||||||
|
rev = u3_nul,
|
||||||
|
pat = u3h(loc);
|
||||||
|
u3j_fink* fin_u;
|
||||||
|
|
||||||
|
while ( c3n == u3h(pat) ) {
|
||||||
|
bat = u3h(cor);
|
||||||
|
dyn = u3t(pat);
|
||||||
|
pax = u3h(dyn);
|
||||||
|
loc = u3t(dyn);
|
||||||
|
pat = u3h(loc);
|
||||||
|
rev = u3nc(u3nc(u3k(bat), u3k(pax)), rev);
|
||||||
|
cor = u3r_at(pax, cor);
|
||||||
|
++i_w;
|
||||||
|
}
|
||||||
|
|
||||||
|
fin_u = u3a_walloc(c3_wiseof(u3j_fink) +
|
||||||
|
(i_w * c3_wiseof(u3j_fist)));
|
||||||
|
fin_u->len_w = i_w;
|
||||||
|
fin_u->sat = u3k(cor);
|
||||||
|
for ( j = rev; i_w-- > 0; j = u3t(j) ) {
|
||||||
|
u3j_fist* fis_u = &(fin_u->fis_u[i_w]);
|
||||||
|
par = u3h(j);
|
||||||
|
fis_u->bat = u3k(u3h(par));
|
||||||
|
fis_u->pax = u3k(u3t(par));
|
||||||
|
}
|
||||||
|
u3z(rev);
|
||||||
|
c3_assert( u3_nul == j );
|
||||||
|
|
||||||
|
return fin_u;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* u3j_cast(): create u3j_fink from core and location.
|
||||||
|
*/
|
||||||
|
u3j_fink*
|
||||||
|
u3j_cast(u3_noun cor, u3_noun loc)
|
||||||
|
{
|
||||||
|
u3j_fink* fin_u;
|
||||||
|
u3t_on(glu_o);
|
||||||
|
fin_u = _cj_cast(cor, loc);
|
||||||
|
u3t_off(glu_o);
|
||||||
|
return fin_u;
|
||||||
|
}
|
||||||
|
|
||||||
static c3_o
|
static c3_o
|
||||||
_cj_fine(u3_noun cor, u3j_fink* fin_u)
|
_cj_fine(u3_noun cor, u3j_fink* fin_u)
|
||||||
{
|
{
|
||||||
|
40
noun/nock.c
40
noun/nock.c
@ -527,42 +527,6 @@ _n_nock_on(u3_noun bus, u3_noun fol)
|
|||||||
#define SLIS 71
|
#define SLIS 71
|
||||||
#define SAVE 72
|
#define SAVE 72
|
||||||
|
|
||||||
static u3j_fink*
|
|
||||||
_n_cast(u3_noun cor, u3_noun loc)
|
|
||||||
{
|
|
||||||
c3_w i_w = 0;
|
|
||||||
u3_noun j, par, bat, dyn, pax,
|
|
||||||
rev = u3_nul,
|
|
||||||
pat = u3h(loc);
|
|
||||||
u3j_fink* fin_u;
|
|
||||||
|
|
||||||
while ( c3n == u3h(pat) ) {
|
|
||||||
bat = u3h(cor);
|
|
||||||
dyn = u3t(pat);
|
|
||||||
pax = u3h(dyn);
|
|
||||||
loc = u3t(dyn);
|
|
||||||
pat = u3h(loc);
|
|
||||||
rev = u3nc(u3nc(u3k(bat), u3k(pax)), rev);
|
|
||||||
cor = u3r_at(pax, cor);
|
|
||||||
++i_w;
|
|
||||||
}
|
|
||||||
|
|
||||||
fin_u = u3a_walloc(c3_wiseof(u3j_fink) +
|
|
||||||
(i_w * c3_wiseof(u3j_fist)));
|
|
||||||
fin_u->len_w = i_w;
|
|
||||||
fin_u->sat = u3k(cor);
|
|
||||||
for ( j = rev; i_w-- > 0; j = u3t(j) ) {
|
|
||||||
u3j_fist* fis_u = &(fin_u->fis_u[i_w]);
|
|
||||||
par = u3h(j);
|
|
||||||
fis_u->bat = u3k(u3h(par));
|
|
||||||
fis_u->pax = u3k(u3t(par));
|
|
||||||
}
|
|
||||||
u3z(rev);
|
|
||||||
c3_assert( u3_nul == j );
|
|
||||||
|
|
||||||
return fin_u;
|
|
||||||
}
|
|
||||||
|
|
||||||
static c3_w
|
static c3_w
|
||||||
_n_fink_mark(u3j_fink* fin_u)
|
_n_fink_mark(u3j_fink* fin_u)
|
||||||
{
|
{
|
||||||
@ -622,7 +586,7 @@ _n_mine(u3j_rite* rit_u, u3_noun clu, u3_noun cor)
|
|||||||
c3_o own_o = rit_u->own_o;
|
c3_o own_o = rit_u->own_o;
|
||||||
rit_u->own_o = c3y;
|
rit_u->own_o = c3y;
|
||||||
rit_u->clu = u3k(clu);
|
rit_u->clu = u3k(clu);
|
||||||
rit_u->fin_u = _n_cast(cor, loc);
|
rit_u->fin_u = u3j_cast(cor, loc);
|
||||||
u3z(loc);
|
u3z(loc);
|
||||||
|
|
||||||
if ( !non_t && (c3y == own_o) ) {
|
if ( !non_t && (c3y == own_o) ) {
|
||||||
@ -1667,7 +1631,7 @@ _n_kick(u3_noun cor, u3j_site* sit_u)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sit_u->loc = loc;
|
sit_u->loc = loc;
|
||||||
sit_u->fin_u = _n_cast(cor, loc);
|
sit_u->fin_u = u3j_cast(cor, loc);
|
||||||
sit_u->fon_o = c3y;
|
sit_u->fon_o = c3y;
|
||||||
if ( c3y ==
|
if ( c3y ==
|
||||||
(sit_u->jet_o = u3j_nail(loc, sit_u->axe,
|
(sit_u->jet_o = u3j_nail(loc, sit_u->axe,
|
||||||
|
Loading…
Reference in New Issue
Block a user