@@ -517,6 +517,7 @@ _pave_parts(void)
517517
518518 u3R -> cax .har_p = u3h_new_cache (u3C .hap_w ); // transient
519519 u3R -> cax .per_p = u3h_new_cache (u3C .per_w ); // persistent
520+ u3R -> cax .for_p = u3h_new_cache (u3C .per_w ); // ford
520521 u3R -> jed .war_p = u3h_new ();
521522 u3R -> jed .cod_p = u3h_new ();
522523 u3R -> jed .han_p = u3h_new ();
@@ -663,12 +664,11 @@ _find_home(void)
663664 u3H -> pam_d = _pave_params ();
664665 }
665666
666- // if lop_p is zero than it is an old pier pre %loop hint, initialize the
667- // HAMT
667+ // properly initialize things from zero-initialize future proof buffer
668+ // XX cax.for_p
668669 //
669- if (!u3R -> lop_p ) {
670- u3R -> lop_p = u3h_new ();
671- }
670+ if ( !u3R -> lop_p ) u3R -> lop_p = u3h_new ();
671+ if ( !u3R -> cax .for_p ) u3R -> cax .for_p = u3h_new_cache (u3C .per_w );
672672}
673673
674674/* u3m_pave(): instantiate or activate image.
@@ -1002,6 +1002,12 @@ u3m_bail(u3_noun how)
10021002 }
10031003 }
10041004
1005+ // Reset the spin stack pointer
1006+ if ( NULL != u3t_Spin ) {
1007+ u3t_Spin -> off_w = u3R -> off_w ;
1008+ u3t_Spin -> fow_w = u3R -> fow_w ;
1009+ }
1010+
10051011 _longjmp (u3R -> esc .buf , how );
10061012}
10071013
@@ -1214,8 +1220,14 @@ u3m_hate(c3_w pad_w)
12141220 u3_assert (0 == u3R -> ear_p );
12151221
12161222 u3R -> ear_p = u3R -> cap_p ;
1223+
1224+ c3_w fag_w = u3R -> how .fag_w ;
12171225 u3m_leap (pad_w );
12181226
1227+ // inherit forward-flowing flags
1228+ //
1229+ u3R -> how .fag_w |= (fag_w & u3a_flag_cash );
1230+
12191231 u3R -> bug .mer = u3i_string (
12201232 "emergency buffer with sufficient space to cons the trace and bail"
12211233 );
@@ -1340,6 +1352,7 @@ u3m_love(u3_noun pro)
13401352 u3p (u3h_root ) byc_p = u3R -> byc .har_p ;
13411353 u3a_jets jed_u = u3R -> jed ;
13421354 u3p (u3h_root ) per_p = u3R -> cax .per_p ;
1355+ u3p (u3h_root ) for_p = u3R -> cax .for_p ;
13431356
13441357 // are there any timers on the road?
13451358 //
@@ -1363,6 +1376,7 @@ u3m_love(u3_noun pro)
13631376 jed_u = u3j_take (jed_u );
13641377 byc_p = u3n_take (byc_p );
13651378 per_p = u3h_take (per_p );
1379+ for_p = u3h_take (for_p );
13661380
13671381 // pop the stack
13681382 //
@@ -1375,6 +1389,7 @@ u3m_love(u3_noun pro)
13751389 u3j_reap (jed_u );
13761390 u3n_reap (byc_p );
13771391 u3z_reap (u3z_memo_keep , per_p );
1392+ u3z_reap (u3z_memo_ford , for_p );
13781393
13791394 return pro ;
13801395}
@@ -1719,7 +1734,7 @@ u3m_soft_run(u3_noun gul,
17191734 */
17201735
17211736 {
1722- if ( (u3_nul == gul ) || cash_t ) {
1737+ if ( (u3_nul == gul ) || ( u3R -> how . fag_w & u3a_flag_cash ) ) {
17231738 u3R -> ski .gul = u3_nul ;
17241739 }
17251740 else {
0 commit comments