-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathminimal.fs
51 lines (38 loc) · 1.39 KB
/
minimal.fs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
\ Minimal Forth Workbench: main file uh 2015-10-05
: tick ( <spaces>name<spaces> -- comp-xt exec-xt flag )
STATE @ >R
] >IN @ >R BL WORD FIND
IF R> >IN !
POSTPONE [ BL WORD FIND
ELSE R> DROP
DROP 0 0 false
THEN
R> IF ] ELSE POSTPONE [ THEN ;
: immediate-alias ( comp-xt exec-xt <spaces>name<spaces> -- )
CREATE , , IMMEDIATE DOES> STATE @ IF CELL+ THEN @ EXECUTE ;
: non-immediate-alias ( comp-xt exec-xt <spaces>name<spaces> -- )
CREATE , , IMMEDIATE DOES> STATE @ IF CELL+ @ COMPILE, ELSE @ EXECUTE THEN ;
VARIABLE #primitives 0 #primitives !
VARIABLE #words 0 #words !
: another-primitive ( -- ) 1 #primitives +! 1 #words +! ;
wordlist Constant minimal
: primitive ( <space>ccc<space> -- )
get-order
minimal 1 set-order >IN @ >R tick R> >IN ! NIP NIP
0= IF
forth-wordlist 1 set-order
another-primitive
>IN @ >R tick R> >IN ! DUP 0= Abort" ?"
0< IF non-immediate-alias ELSE immediate-alias THEN
ELSE
CR BL WORD COUNT TYPE ." is already defined."
THEN
set-order ;
minimal set-current
include primitives.fs \ Minimal Forth primitives
get-order ' set-order
minimal 1 set-order
include prelude.fs \ System configuration
execute
cr .( Minimal Forth Workbench: ) #primitives @ . .( primitives, ) #words @ . .( words) cr
minimal 1 set-order