1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
\ deferred words and perform
\ This file is in the public domain. NO WARRANTY.
: perform ( ? addr -- ? )
@ execute ;
: defer ( "name" -- )
create ['] abort , \ you should not rely on initialization with noop
does> ( ? -- ? )
perform ;
: defer@ ( xt1 -- xt2 )
>body @ ;
: defer! ( xt2 xt1 -- )
>body ! ;
: <is> ( xt "name" -- )
' defer! ;
: [is] ( compilation: "name" -- ; run-time: xt -- )
postpone ['] postpone defer! ; immediate
: is
state @ if
postpone [is]
else
<is>
then ; immediate
: action-of
state @ if
POSTPONE ['] POSTPONE defer@
else
' defer@
then ; immediate
|