Moved source to src directory.
[scheme.forth.jl.git] / src / defer-is.4th
diff --git a/src/defer-is.4th b/src/defer-is.4th
new file mode 100644 (file)
index 0000000..89f07de
--- /dev/null
@@ -0,0 +1,41 @@
+\ 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 ;