Node:Interpreter Directives, Previous:Interpret/Compile states, Up:The Text Interpreter
These words are usually used in interpret state; typically to control
which parts of a source file are processed by the text
interpreter. There are only a few ANS Forth Standard words, but Gforth
supplements these with a rich set of immediate control structure words
to compensate for the fact that the non-immediate versions can only be
used in compile state (see Control Structures). Typical usages:
FALSE Constant HAVE-ASSEMBLER . . HAVE-ASSEMBLER [IF] : ASSEMBLER-FEATURE ... ; [ENDIF] . . : SEE ... \ general-purpose SEE code [ HAVE-ASSEMBLER [IF] ] ... \ assembler-specific SEE code [ [ENDIF] ] ;
[IF] flag -- tools-ext ``bracket-if''
If flag is TRUE do nothing (and therefore
execute subsequent words as normal). If flag is FALSE,
parse and discard words from the parse
area (refilling it if necessary using
REFILL) including nested instances of [IF]..
[ELSE].. [THEN] and [IF].. [THEN]
until the balancing [ELSE] or [THEN] has been
parsed and discarded. Immediate word.
[ELSE] -- tools-ext ``bracket-else''
Parse and discard words from the parse
area (refilling it if necessary using
REFILL) including nested instances of [IF]..
[ELSE].. [THEN] and [IF].. [THEN]
until the balancing [THEN] has been parsed and discarded.
[ELSE] only gets executed if the balancing [IF]
was TRUE; if it was FALSE, [IF] would
have parsed and discarded the [ELSE], leaving the
subsequent words to be executed as normal.
Immediate word.
[THEN] -- tools-ext ``bracket-then''
Do nothing; used as a marker for other words to parse
and discard up to. Immediate word.
[ENDIF] -- gforth ``bracket-end-if''
Do nothing; synonym for [THEN]
[IFDEF] "<spaces>name" -- gforth ``bracket-if-def''
If name is found in the current search-order, behave like
[IF] with a TRUE flag, otherwise behave like
[IF] with a FALSE flag. Immediate word.
[IFUNDEF] "<spaces>name" -- gforth ``bracket-if-un-def''
If name is not found in the current search-order, behave like
[IF] with a TRUE flag, otherwise behave like
[IF] with a FALSE flag. Immediate word.
[?DO] n-limit n-index -- gforth ``bracket-question-do''
[DO] n-limit n-index -- gforth ``bracket-do''
[FOR] n -- gforth ``bracket-for''
[LOOP] -- gforth ``bracket-loop''
[+LOOP] n -- gforth ``bracket-question-plus-loop''
[NEXT] n -- gforth ``bracket-next''
[BEGIN] -- gforth ``bracket-begin''
[UNTIL] flag -- gforth ``bracket-until''
[AGAIN] -- gforth ``bracket-again''
[WHILE] flag -- gforth ``bracket-while''
[REPEAT] -- gforth ``bracket-repeat''