summaryrefslogtreecommitdiffstats
path: root/stdlib/ffi.tl
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/ffi.tl')
-rw-r--r--stdlib/ffi.tl7
1 files changed, 7 insertions, 0 deletions
diff --git a/stdlib/ffi.tl b/stdlib/ffi.tl
index ea561091..b7a29110 100644
--- a/stdlib/ffi.tl
+++ b/stdlib/ffi.tl
@@ -167,3 +167,10 @@
'znew))
(let ((qpairs (mappend (aret ^(',@1 ,@2)) (tuples 2 pairs))))
^(make-zstruct (ffi ,type) ,*qpairs)))
+
+(defmacro setjmp (:form f jmp-buf longjmp-var try-expr . longjmp-exprs)
+ (unless (bindable longjmp-var)
+ (compile-error f "~s is not a bindable symbol" longjmp-var))
+ ^(sys:rt-setjmp ,jmp-buf
+ (lambda () ,try-expr)
+ (lambda (,longjmp-var) ,*longjmp-exprs)))