diff --git a/pkg/noun/hashtable.c b/pkg/noun/hashtable.c index 5915de5944..f1d9875ef9 100644 --- a/pkg/noun/hashtable.c +++ b/pkg/noun/hashtable.c @@ -250,6 +250,10 @@ _ch_slot_put(u3h_slot* sot_w, u3_noun kev, c3_w lef_w, c3_w rem_w, c3_w* use_w) void u3h_put(u3p(u3h_root) har_p, u3_noun key, u3_noun val) { + if ( 1001 == u3h(u3t(key)) ) { + fprintf(stderr, "\r\nu3h_put: 1001\r\n"); + } + u3h_root* har_u = u3to(u3h_root, har_p); u3_noun kev = u3nc(u3k(key), val); c3_w mug_w = u3r_mug(key); @@ -258,10 +262,16 @@ u3h_put(u3p(u3h_root) har_p, u3_noun key, u3_noun val) u3h_slot* sot_w = &(har_u->sot_w[inx_w]); if ( c3y == u3h_slot_is_null(*sot_w) ) { + // if ( 1001 == u3h(u3t(kev)) ) { + // fprintf(stderr, "\r\nu3h_put: slot is null for 1001\r\n"); + // } *sot_w = u3h_noun_be_warm(u3h_noun_to_slot(kev)); har_u->use_w += 1; } else { + // if ( 1001 == u3h(u3t(kev)) ) { + // fprintf(stderr, "\r\nu3h_put: slot is not null for 1001\r\n"); + // } _ch_slot_put(sot_w, kev, 25, rem_w, &(har_u->use_w)); } diff --git a/pkg/noun/nock.c b/pkg/noun/nock.c index ce81df8949..cc35568b0f 100644 --- a/pkg/noun/nock.c +++ b/pkg/noun/nock.c @@ -1,5 +1,6 @@ /// @file +#include "log.h" #include "nock.h" #include "allocate.h" @@ -2627,9 +2628,13 @@ _n_burn(u3n_prog* pog_u, u3_noun bus, c3_ys mov, c3_ys off) x = _n_pep(mov, off); top = _n_peek(off); o = *top; - if ( &(u3H->rod_u) != u3R ) { - u3z_save_m(144 + c3__nock, o, x); - } + // if ( &(u3H->rod_u) != u3R ) { + // u3z_save_m(144 + c3__nock, o, x); + // } + + // save in the cache no matter which road we're on + u3z_save_m(144 + c3__nock, o, x); + *top = x; u3z(o); BURN(); diff --git a/pkg/noun/zave.c b/pkg/noun/zave.c index 60c6fe8f46..00f3954069 100644 --- a/pkg/noun/zave.c +++ b/pkg/noun/zave.c @@ -1,5 +1,6 @@ /// @file +#include "log.h" #include "zave.h" #include "allocate.h" @@ -39,7 +40,18 @@ u3z_key_5(c3_m fun, u3_noun one, u3_noun two, u3_noun tri, u3_noun qua, u3_noun u3_weak u3z_find(u3_noun key) { - return u3h_get(u3R->cax.har_p, key); + // search the parent roads' caches + u3a_road* rod_u = u3R; + while ( 1 ) { + u3_weak got = u3h_get(rod_u->cax.har_p, key); + if ( u3_none != got ) { + return got; + } + if ( 0 == rod_u->par_p ) { + return u3_none; + } + rod_u = u3to(u3a_road, rod_u->par_p); + }; } u3_weak u3z_find_m(c3_m fun, u3_noun one) @@ -47,7 +59,21 @@ u3z_find_m(c3_m fun, u3_noun one) u3_noun key = u3nc(fun, u3k(one)); u3_weak val; + // if ( 1001 == u3h(one) ) { + // u3l_log("\r\nzave: 1001\r\n"); + // } + val = u3h_get(u3R->cax.har_p, key); + + // if ( 1001 == u3h(one) ) { + // if ( u3_none == val ) { + // u3l_log("\r\nzave: miss\r\n"); + // } + // else { + // u3l_log("\r\nzave: hit\r\n"); + // } + // } + u3z(key); return val; } @@ -67,6 +93,11 @@ u3z_save(u3_noun key, u3_noun val) u3_noun u3z_save_m(c3_m fun, u3_noun one, u3_noun val) { + + if ( 1001 == u3h(one) ) { + u3l_log("\r\nzave: 1001\r\n"); + } + u3_noun key = u3nc(fun, u3k(one)); u3h_put(u3R->cax.har_p, key, u3k(val)); @@ -96,6 +127,13 @@ u3z_uniq(u3_noun som) void u3z_reap(u3p(u3h_root) har_p) { + // u3_noun key = u3nc(1001, u3nc(11, u3nt(u3nq(c3__slog, 1, 2, 23130), 1, 40))); + // u3_noun val = u3z_find_m(144 + c3__nock, key); + // u3m_p("u3z_reap", key); + + // if ( u3_none != val ) { + // u3l_log("u3z_reap: hit\r\n"); + // } u3h_uni(u3R->cax.har_p, har_p); u3h_free(har_p); } \ No newline at end of file