diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2023-09-27 21:08:08 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2023-09-27 21:08:08 -0700 |
commit | 9b5c23e7c88535f49dfbc8d5028ff5c82704435a (patch) | |
tree | 2974d99914ef067c7f7f8ca4e27d830410248b39 /tests/012/stack.tl | |
parent | f1c442b84179092d93b42fbf629fe7337bf177ba (diff) | |
download | txr-9b5c23e7c88535f49dfbc8d5028ff5c82704435a.tar.gz txr-9b5c23e7c88535f49dfbc8d5028ff5c82704435a.tar.bz2 txr-9b5c23e7c88535f49dfbc8d5028ff5c82704435a.zip |
Integration with setjmp/longjmp.
Defining libpng bindings, with longjmp catching, is
now possible.
* autoload.c (ffi_set_entries): Add setjmp symbol, which is
a new macro in stdlib/ffi.tl.
* ffi.c (jmp_buf_s): New symbol variable.
(mk_jmp_buf, rt_setjmp, longjmp_wrap): New functions.
(ffi_init): Initialize jmp_buf_s. Register
sys:rt-setjmp and longjmp intrinsics.
* ffi.h (jmp_buf_s): Declared.
* stdlib/ffi.h (setjmp): New macro. Rather than introducing
a new special operator, we use a run-time support function
called sys:rt-setjmp, which takes functional arguments.
* unwind.[ch] (uw_snapshot, uw_restore): New functions.
The rt_setjmp function needs these to restore our unwind
frame stack into a sane state after catching a longjmp,
which bails without unwinding it, leaving the pointers
referring to frames that no longer exist.
* tests/017/setjmp.tl,
* tests/017/setjmp.expected: New files.
* txr.1: Documented.
Diffstat (limited to 'tests/012/stack.tl')
0 files changed, 0 insertions, 0 deletions