Annotation of gforth/anslocal.fs, revision 1.2

1.1       anton       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: 
1.2     ! anton      11: \ This program uses PARSE from the core ext and COMPARE from the
1.1       anton      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>