File:  [gforth] / gforth / Attic / anslocal.fs
Revision 1.2: download - view: text, annotated - select for diffs
Mon Mar 20 18:16:22 1995 UTC (29 years, 1 month ago) by anton
Branches: MAIN
CVS tags: HEAD
added make targets bindist and binonlydist
configure now checks the cell size and chooses the image accordingly

    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>