From d38e9a82b7bdff9f990ff5c5650366890f16cfe8 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 30 Oct 2015 21:50:32 -0700 Subject: Define suspend operator. * lisplib.c (yield_set_entries): Added "suspend" to end of name. * share/txr/stdlib/yield.tl (suspend): New macro. * txr.1: Documented suspend. Replaced subtly incorect shift/reset implementation example with suspend implementation. --- share/txr/stdlib/yield.tl | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'share') diff --git a/share/txr/stdlib/yield.tl b/share/txr/stdlib/yield.tl index 236faaa8..3b58ace2 100644 --- a/share/txr/stdlib/yield.tl +++ b/share/txr/stdlib/yield.tl @@ -64,3 +64,11 @@ (defmacro yield (form) ^(yield-from nil ,form)) + +(defmacro suspend (:form form name var . body) + (with-gensyms (cap val) + ^(tree-bind (,cap . ,val) (sys:capture-cont ',name ',form) + (if ,cap + (let ((,var ,val)) + (sys:abscond-from ,name ,*body)) + ,val)))) -- cgit v1.2.3