<MARK
( -- DP-mark )
compile-only
=> "FORTH"
memorizes the current DP
on the CS-STACK
used for later. Useful for creation of
compiling words, eg. BEGIN
, see AHEAD
simulate:
: <MARK ?COMP HERE ;
primitive code = [p4_backward_mark]
<RESOLVE
( DP-mark -- )
compile-only
=> "FORTH"
resolves a previous , actually pushes
the DP-address memorized at BRANCH
or => ?BRANCH in compiling
words like UNTIL
simulate:
: <RESOLVE ?COMP , ;
primitive code = [p4_backward_resolve]
MARK>
( -- DP-mark )
compile-only
=> "FORTH"
makes room for a pointer in the dictionary to
be resolved through RESOLVE>
and does therefore
memorize that cell's address on the CS-STACK
Mostly used after BRANCH
or => ?BRANCH in compiling
words like IF
or ELSE
simulate:
: MARK> ?COMP HERE 0 , ;
primitive code = [p4_forward_mark]
RESOLVE>
( DP-mark -- )
compile-only
=> "FORTH"
resolves a pointer created by MARK>
Mostly used in compiling words like THEN
simulate:
: RESOLVE> ?COMP HERE SWAP ! ;
primitive code = [p4_forward_resolve]
BRANCH
( -- )
=> "FORTH"
compiles a branch-runtime into the dictionary that
can be resolved with MARK<
d or <RESOLVE
.
Usage:
BRANCH MARK< or
BRANCH >RESOLVE or ...
this is the runtime-portion of ELSE
- the use of
ELSE
should be preferred. See also => ?BRANCH
: BRANCH COMPILE (BRANCH) ;
immediate code = [p4_branch]
?BRANCH
( -- )
=> "FORTH"
compiles a cond-branch-runtime into the dictionary that
can be resolved with >MARK&
d or RESOLVE>
.
Usage:
?BRANCH MARK< or
?BRANCH >RESOLVE or ...
this is the runtime-portion of IF
- the use of
IF
should be preferred. See also BRANCH
: ?BRANCH COMPILE (?BRANCH) ;
immediate code = [p4_q_branch]