diff options
Diffstat (limited to 'stdlib/ffi.tl')
-rw-r--r-- | stdlib/ffi.tl | 7 |
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))) |