2 - Forth Interest Group
2 - Forth Interest Group
2 - Forth Interest Group
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
1<br />
: ?branch,<br />
,<br />
: <<br />
0 IF 0 WHILE 0 UNTIL<br />
( CASE )<br />
last do-ZERO-EOUAL =<br />
IF<br />
ELSE<br />
( CASE )<br />
penult @ do-OUEDUP =<br />
IF \ ?DUP O= IF I UNTIL I WHILE<br />
-2 codes gap<br />
do-QUEDUP-BRANCH-UNLESS-ZERO COMPILE,<br />
ELSE<br />
penult @ Go-ZERO-EOUAL =<br />
IF \ o= o= IFIUNTILIWHILE<br />
-2 codes gap<br />
do-BRANCH-IF-ZERO COMPILE,<br />
ELSE \ O= IF/ UNTIL1 WHILE<br />
-1 codes gap<br />
do-BRANCH-UNLESS-ZERO COMPILE,<br />
( 0 ENDCASE ) THEN THEN<br />
last @ do-DUP =<br />
IF \ DUP IF I UNTIL I WHILE<br />
-1 codes gap<br />
do-DUP-BRANCH-IF-ZERO COMPILE,<br />
ELSE<br />
last @ do-LITERAL =<br />
ANDIF<br />
next 1 codes - @ 0=<br />
THEN<br />
IF \ 0 IFIUNTILI WHILE<br />
-2 codes gap<br />
do-BRANCH COMP ILE,<br />
ELSE \ IF I UNTIL I WHILE<br />
do-BRANCH-IF-ZERO COMPILE,<br />
( 0 ENDCASE ) THEN THEN THEN<br />
We wil optimize other things in ?branch,, but they wil all follow that pattern.<br />
n < and n >, for a literal n, can be optimized with the following paradigm.<br />
( CASE )<br />
$- o=<br />
IF<br />
do-LESS EXECUTE<br />
ELSE<br />
last @ do-LITERAL =<br />
IF<br />
( CASE )<br />
next 1 codes - @ 0=<br />
IF \ O <<br />
penult @ last !<br />
-2 codes gap<br />
do-NEGATIVE COMPILE,<br />
<strong>Forth</strong> Dimensions 33 July 1995 August