summaryrefslogtreecommitdiffstats
path: root/tests/012/oop.tl
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2023-09-27 21:08:08 -0700
committerKaz Kylheku <kaz@kylheku.com>2023-09-27 21:08:08 -0700
commit9b5c23e7c88535f49dfbc8d5028ff5c82704435a (patch)
tree2974d99914ef067c7f7f8ca4e27d830410248b39 /tests/012/oop.tl
parentf1c442b84179092d93b42fbf629fe7337bf177ba (diff)
downloadtxr-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/oop.tl')
0 files changed, 0 insertions, 0 deletions