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