Return to anslocal.fs CVS log | Up to [gforth] / gforth / compat |
Environmental query "gforth" now returns the version-string dictionary-end and unused moved into the kernel/basics.fs Minor gforth.el bug fixes Major rewrite of objects.fs (not yet done) fixed -trailing bug (with test in test/other.fs) optimization of fields with offset 0 in struct.fs and compat/struct.fs other changes in compat/struct.fs (not yet done) added ansreports to compat/*.fs documentation changes allot now checks for dict overflow named [IS] (compilation semantics of IS). minor changes
\ This implements a subset of the gforth locals syntax in pure ANS Forth \ This file is in the public domain. NO WARRANTY. \ This implementation technique has been described by John Hayes in \ the SigForth Newsletter 4(2), Fall '92. He did not do the complete \ job, but left some more mundane parts as an exercise to the reader. \ I don't implement the "|" part, because 1) gforth does not implement \ it and 2) it's unnecessary; just put a 0 before the "{" for every \ additional local you want to declare. \ The program uses the following words \ from CORE : \ : bl word count ; >in @ 2dup 0= IF 2drop [char] ELSE THEN drop \ recurse swap ! immediate \ from CORE-EXT : \ parse true \ from BLOCK-EXT : \ \ \ from FILE : \ ( S" \ from LOCAL : \ (local) \ from STRING : \ compare : local ( "name" -- ) bl word count (local) ; : {helper ( -- final-offset ) >in @ bl word count 2dup s" --" compare 0= if 2drop [char] } parse 2drop true else s" }" compare 0= then if drop >in @ else recurse swap >in ! local then ; : { ( -- ) {helper >in ! 0 0 (local) ; immediate \ : test-swap { a b -- b a } ." xxx" \ b a ; \ 1 2 test-swap . . .s cr