aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClyne Sullivan <clyne@bitgloo.com>2023-02-25 10:09:33 -0500
committerClyne Sullivan <clyne@bitgloo.com>2023-02-25 10:09:33 -0500
commitfc0d3ed9cfebd853db2a2ab26993a186a29180b1 (patch)
tree618730ac12c318950c24ef40fe21a839216a5c4a
parent34e5d76f9851f13a2c6611de065c229bafb17378 (diff)
implement leave
-rw-r--r--compat.txt2
-rw-r--r--core.fth7
2 files changed, 6 insertions, 3 deletions
diff --git a/compat.txt b/compat.txt
index 7685f8c..a4c6326 100644
--- a/compat.txt
+++ b/compat.txt
@@ -88,7 +88,7 @@ yes 6.1.1710 IMMEDIATE (as "imm")
yes 6.1.1720 INVERT
yes 6.1.1730 J
yes 6.1.1750 KEY
- 6.1.1760 LEAVE
+yes 6.1.1760 LEAVE
yes 6.1.1780 LITERAL
yes 6.1.1800 LOOP
yes 6.1.1805 LSHIFT
diff --git a/core.fth b/core.fth
index 0f00ba8..bcdd577 100644
--- a/core.fth
+++ b/core.fth
@@ -73,11 +73,14 @@
: until ['] _jmp0 , , drop ; imm
: again postpone repeat ; imm
-: do postpone 2>r here ; imm
+: do ['] _lit , here 0 , ['] >r , postpone 2>r here ; imm
: unloop postpone 2r> ['] 2drop , ; imm
+: leave postpone unloop postpone 2r>
+ ['] drop , ['] >r , ['] exit , ; imm
: +loop postpone 2r> ['] rot , ['] + , ['] 2dup ,
postpone 2>r ['] - , ['] 0= , ['] _jmp0 , ,
- postpone unloop ; imm
+ postpone unloop
+ here swap ! ['] r> , ['] drop , ; imm
: loop 1 postpone literal postpone +loop ; imm
: i postpone r@ ; imm
: j postpone 2r> postpone r@ ['] -rot , postpone 2>r ; imm