26.10.2013 Views

2 - Forth Interest Group

2 - Forth Interest Group

2 - Forth Interest Group

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!