X-Git-Url: http://git.subgeniuskitty.com/pforth/.git/blobdiff_plain/bb6b2dcdd9acffabfd373c4c3f6b64a9cc43f335..40c6f87ff261cacf78377241c8746da1aaa504c5:/fth/condcomp.fth diff --git a/fth/condcomp.fth b/fth/condcomp.fth index d312ca1..dc65c6b 100644 --- a/fth/condcomp.fth +++ b/fth/condcomp.fth @@ -1,50 +1,50 @@ -\ @(#) condcomp.fth 98/01/26 1.2 -\ Conditional Compilation support -\ -\ Words: STRINGS= [IF] [ELSE] [THEN] EXISTS? -\ -\ Lifted from X3J14 dpANS-6 document. - -anew task-condcomp.fth - -: [ELSE] ( -- ) - 1 - BEGIN \ level - BEGIN - BL WORD \ level $word - COUNT DUP \ level adr len len - WHILE \ level adr len - 2DUP S" [IF]" COMPARE 0= - IF \ level adr len - 2DROP 1+ \ level' - ELSE \ level adr len - 2DUP S" [ELSE]" - COMPARE 0= \ level adr len flag - IF \ level adr len - 2DROP 1- DUP IF 1+ THEN \ level' - ELSE \ level adr len - S" [THEN]" COMPARE 0= - IF - 1- \ level' - THEN - THEN - THEN - ?DUP 0= IF EXIT THEN \ level' - REPEAT 2DROP \ level - REFILL 0= UNTIL \ level - DROP -; IMMEDIATE - -: [IF] ( flag -- ) - 0= - IF POSTPONE [ELSE] - THEN -; IMMEDIATE - -: [THEN] ( -- ) -; IMMEDIATE - -: EXISTS? ( -- flag , true if defined ) - bl word find - swap drop -; immediate +\ @(#) condcomp.fth 98/01/26 1.2 +\ Conditional Compilation support +\ +\ Words: STRINGS= [IF] [ELSE] [THEN] EXISTS? +\ +\ Lifted from X3J14 dpANS-6 document. + +anew task-condcomp.fth + +: [ELSE] ( -- ) + 1 + BEGIN \ level + BEGIN + BL WORD \ level $word + COUNT DUP \ level adr len len + WHILE \ level adr len + 2DUP S" [IF]" COMPARE 0= + IF \ level adr len + 2DROP 1+ \ level' + ELSE \ level adr len + 2DUP S" [ELSE]" + COMPARE 0= \ level adr len flag + IF \ level adr len + 2DROP 1- DUP IF 1+ THEN \ level' + ELSE \ level adr len + S" [THEN]" COMPARE 0= + IF + 1- \ level' + THEN + THEN + THEN + ?DUP 0= IF EXIT THEN \ level' + REPEAT 2DROP \ level + REFILL 0= UNTIL \ level + DROP +; IMMEDIATE + +: [IF] ( flag -- ) + 0= + IF POSTPONE [ELSE] + THEN +; IMMEDIATE + +: [THEN] ( -- ) +; IMMEDIATE + +: EXISTS? ( -- flag , true if defined ) + bl word find + swap drop +; immediate