diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2016-04-16 06:01:04 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2016-04-16 06:01:04 -0700 |
commit | a9299da438d46958603801ed48d6fe1f637b69ee (patch) | |
tree | d0bcec3ef8f61696d7e779ee262f7910c986c5d3 | |
parent | c68d46fb0c8c3693e6d906bbe7dc851999cb554c (diff) | |
download | txr-a9299da438d46958603801ed48d6fe1f637b69ee.tar.gz txr-a9299da438d46958603801ed48d6fe1f637b69ee.tar.bz2 txr-a9299da438d46958603801ed48d6fe1f637b69ee.zip |
Block absconds across foreign frames.
* unwind.c (uw_block_abscond): If a UW_GUARD frame
occurs in the search for the abscond point, throw an error.
-rw-r--r-- | unwind.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -435,6 +435,10 @@ val uw_block_abscond(val tag, val result) for (ex = uw_stack; ex != 0; ex = ex->uw.up) { if (ex->uw.type == UW_BLOCK && ex->bl.tag == tag) break; + if (ex->uw.type == UW_GUARD) + uw_throwf(error_s, lit("~a: cannot abscond via foreign stack frames\n"), + prog_string, nao); + } if (ex == 0) |