From 29a6ee128d07fe437944c328cbcec87301b7fc53 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sat, 18 Apr 2020 22:05:11 -0400 Subject: [PATCH] core: fix PSP leak in CASE..ENDCASE --- forth/core.fs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/forth/core.fs b/forth/core.fs index 045c83f..1b4c7d5 100644 --- a/forth/core.fs +++ b/forth/core.fs @@ -58,9 +58,9 @@ ( During a CASE, the stack grows by 1 at each ENDOF so that we can fill all those ENDOF branching addrs. So that we know when to stop, we put a 0 on PSP. That's our stopgap. ) -: CASE 0 ; IMMEDIATE +: CASE 0 COMPILE >R ; IMMEDIATE : OF - COMPILE OVER COMPILE = + COMPILE I COMPILE = [COMPILE] IF ; IMMEDIATE : ENDOF [COMPILE] ELSE ; IMMEDIATE @@ -70,10 +70,11 @@ hit 0. ) : ENDCASE BEGIN - DUP NOT IF DROP EXIT THEN + DUP NOT IF + DROP COMPILE R> COMPILE DROP EXIT + THEN [COMPILE] THEN AGAIN - COMPILE DROP ; IMMEDIATE : CREATE