--- /dev/null
+\ Words supporting deferred execution
+
+: abort-defer
+ ." Tried to execute undefined deferred word." cr abort ;
+
+: defer
+ create ['] abort-defer ,
+does>
+ @ execute
+;
+
+hide abort-defer
+
+: defer! ( cfa cfaDef -- )
+ >body ! ;
+
+
+: is immediate
+ bl word find
+
+ 0= abort" Tried to define unknown deferred word."
+
+ state @ 0= if
+ defer!
+ else
+ ['] lit , , ['] defer! ,
+ then
+;
+
+: :noname
+ here current @ 1+ @ ,
+ current @ 1+ !
+ 0 ,
+ here docol ,
+ [compile] ] ;
+
+
+\ Need this for tail call optimization
+
+: goto-deferred ( cfa -- )
+ R> drop >body @ >body >R ;