1: \ This implements a subset of the gforth locals syntax in pure ANS Forth
2:
3: \ This implementation technique has been described by John Hayes in
4: \ the SigForth Newsletter 4(2), Fall '92. He did not do the complete
5: \ job, but left some more mundane parts as an exercise to the reader.
6:
7: \ I don't implement the "|" part, because 1) gforth does not implement
8: \ it and 2) it's unnecessary; just put a 0 before the "{" for every
9: \ additional local you want to declare.
10:
11: \ This program uses PARSE from the core ext and compare from the
12: \ string wordsets
13:
14: : local ( "name" -- )
15: bl word count (local) ;
16:
17: : {helper ( -- final-offset )
18: >in @
19: bl parse
20: 2dup s" --" compare 0= if
21: 2drop [char] } parse 2drop true
22: else
23: s" }" compare 0=
24: then
25: if
26: drop >in @
27: else
28: recurse
29: swap >in ! local
30: then ;
31:
32: : { ( -- )
33: {helper >in ! 0 0 (local) ; immediate
34:
35: \ : test-swap { a b -- b a } ." xxx"
36: \ b a ;
37:
38: \ 1 2 test-swap . . .s cr
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>