▲ | bitwize 2 days ago | |
Hint: IF, THEN, and ELSE are words that are partially evaluated at compile time. IF remembers its own location and reserves space for a jump; THEN compiles a conditional jump if NOT true to its location, in the place where IF was, unless there was an intervening ELSE, in which case it will compile such a conditional jump to ELSE's location at IF, and an unconditional jump to then just before ELSE. So a full use might look like:
Which is the equivalent of:
THEN works differently in Forth than in, like, BASIC. It marks the end of the whole conditional block, not the start of the consequent. |