compat
Portable (mostly standard) implementations of some Gforth features
- raw README
 - raw anslocal.fs
 - raw assert.fs
 - raw caseext.fs
 - raw control.fs
 - raw defer.fs
 - raw exception.fs
 - raw execute-parsing.fs
 - raw loops.fs
 - raw macros.fs
 - raw package.4th
 - raw required.fs
 - raw strcomp.fs
 - raw struct.fs
 - raw vocabulary.fs
 - raw xlocals.fs
 
\ 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
              by AntonErtl
Versions
Tags
forth-94, forth-2012, strings, gforth, locals, assertions, control-structures, macros
Dependencies
None
Dependents
None