]> code.bitgloo.com Git - clyne/sforth.git/commitdiff
add create, does>, etc
authorClyne Sullivan <clyne@bitgloo.com>
Fri, 29 Nov 2024 19:01:00 +0000 (14:01 -0500)
committerClyne Sullivan <clyne@bitgloo.com>
Fri, 29 Nov 2024 19:01:00 +0000 (14:01 -0500)
core.fth

index b90287ac1ffd56bc4b97b4798fe64c8eb7c73cf9..96dc0f2337ec3c00ee3fb6a40e32b693e06f9183 100644 (file)
--- a/core.fth
+++ b/core.fth
 : decimal   10 base ! ;
 : hex       16 base ! ;
 
-: begin    0 here ; immediate
-: while    swap 1+ swap postpone if -rot ; immediate
-: repeat   ['] _jmp , , if postpone then then ; immediate
-: until    ['] _jmp0 , , drop ; immediate
-
-: do       ['] _lit , here 0 , ['] >r , postpone 2>r here ; immediate
-: unloop   postpone 2r> ['] 2drop , ['] r> , ['] drop , ; immediate
-: leave    postpone 2r> ['] 2drop , ['] exit , ; immediate
-: +loop    ['] r> , ['] 2dup , ['] + ,
-           postpone r@ ['] swap , ['] >r ,
-           ['] - , ['] 2dup , ['] + , ['] over , ['] xor ,
-           ['] rot , ['] rot , ['] xor , ['] and , ['] _lit , 0 ,
-           ['] < , ['] _jmp0 , ,
-           postpone unloop here 1 cells - swap ! ; immediate
-: loop     postpone 2r> ['] 1+ , ['] 2dup ,
-           postpone 2>r ['] = , ['] _jmp0 , ,
-           postpone unloop here 1 cells - swap ! ; immediate
-: i        postpone r@ ; immediate
-: j        postpone 2r> ['] r> , postpone r@ ['] swap ,
-           ['] >r , ['] -rot , postpone 2>r ; immediate
-
+: begin     0 here ; immediate
+: while     swap 1+ swap postpone if -rot ; immediate
+: repeat    ['] _jmp , , if postpone then then ; immediate
+: until     ['] _jmp0 , , drop ; immediate
+
+: do        ['] _lit , here 0 , ['] >r , postpone 2>r here ; immediate
+: unloop    postpone 2r> ['] 2drop , ['] r> , ['] drop , ; immediate
+: leave     postpone 2r> ['] 2drop , ['] exit , ; immediate
+: +loop     ['] r> , ['] 2dup , ['] + ,
+            postpone r@ ['] swap , ['] >r ,
+            ['] - , ['] 2dup , ['] + , ['] over , ['] xor ,
+            ['] rot , ['] rot , ['] xor , ['] and , ['] _lit , 0 ,
+            ['] < , ['] _jmp0 , ,
+            postpone unloop here 1 cells - swap ! ; immediate
+: loop      postpone 2r> ['] 1+ , ['] 2dup ,
+            postpone 2>r ['] = , ['] _jmp0 , ,
+            postpone unloop here 1 cells - swap ! ; immediate
+: i         postpone r@ ; immediate
+: j         postpone 2r> ['] r> , postpone r@ ['] swap ,
+            ['] >r , ['] -rot , postpone 2>r ; immediate
+
+: create    : here [ 4 cells ] literal + postpone literal postpone ; 0 , ;
+: >body     [ 2 cells ] literal + @ ;
+
+: _does>    latest dup cell+ @ [ 5 cells ] literal + +
+            ['] _jmp over ! cell+ ! ;
+
+: does>     here 4 cells + postpone literal ['] _does> , 0 , ; immediate
+
+: variable create cell allot ;
+: constant create , does> @ ;