From 791c5f64785ba33bfc1d48614833fe3fbadb902d Mon Sep 17 00:00:00 2001 From: crumbtoo Date: Thu, 7 Dec 2023 09:39:26 -0700 Subject: [PATCH] fix evil bug unwind unsaturated SC rule was not firing --- src/GM.hs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/GM.hs b/src/GM.hs index 1f7cb37..0875e6b 100644 --- a/src/GM.hs +++ b/src/GM.hs @@ -396,15 +396,18 @@ step st = case head (st ^. gmCode) of -- leave the Unwind instr; continue unwinding & gmStack %~ (f:) - NGlobal k _ - | n < k -> st - & gmCode .~ i' + NGlobal n _ + | k <= n -> traceWith (render . showState) $ st + & gmCode .~ i & gmStack .~ s' - & gmDump .~ d' + & gmDump .~ d where - ((i',s') : d') = st ^. gmDump - n = st ^. gmStack & length - -- assumes length s < d (i.e. enough args have been supplied) + as = st ^. gmStack + s' = last as : s + ((i,s) : d) = st ^. gmDump + k = length as + + -- assumes length s > d (i.e. enough args have been supplied) NGlobal n c -> st -- 'jump' to global's code by replacing our current -- code with `c`