summaryrefslogtreecommitdiffstats
path: root/unwind.h
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-10-28 20:18:20 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-10-28 20:18:20 -0700
commita5ef086fc33cfbfce7b03bad291efa28acf739b2 (patch)
treeb6658f3ecbc98054217f72a166b02bfdb0b029e0 /unwind.h
parent67af4be97a2ea8700a841feb893a1f1747987843 (diff)
downloadtxr-a5ef086fc33cfbfce7b03bad291efa28acf739b2.tar.gz
txr-a5ef086fc33cfbfce7b03bad291efa28acf739b2.tar.bz2
txr-a5ef086fc33cfbfce7b03bad291efa28acf739b2.zip
Implementing sys:abscond-from operator.
* eval.c (sys_abscond_from_s): New symbol variable. (op_abscond_from): New static function. (do_expand): Handle abscond-from like return-from. (eval_init): Initialize sys_abscond_from_s and register sys:abscond-from operator. * share/txr/stdlib/yield.tl (yield-from): Use sys:abscond-from instead of return-from, to avoid tearing down the continuation's resources that it may need when restarted. * txr.1: Documented sys:abscond-from and added a mention to the Delimited Continuations introduction. * unwind.c (uw_abscond_to_exit_point): New static function. (uw_block_abscond): New function. * unwind.h (uw_block_abscond): Declared.
Diffstat (limited to 'unwind.h')
-rw-r--r--unwind.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/unwind.h b/unwind.h
index a9b456ae..bcf8d185 100644
--- a/unwind.h
+++ b/unwind.h
@@ -102,6 +102,7 @@ INLINE val uw_block_return(val tag, val result)
{
return uw_block_return_proto(tag, result, nil);
}
+val uw_block_abscond(val tag, val result);
void uw_push_catch(uw_frame_t *, val matches);
void uw_push_handler(uw_frame_t *, val matches, val fun);
noreturn val uw_throw(val sym, val exception);