transl: do not assume a catch's mode based on the last body form
commit7f31302868d92415abd3d4589efec9d783c3f6b7
authorKris Katterjohn <katterjohn@gmail.com>
Fri, 5 Jul 2024 21:37:54 +0000 (5 17:37 -0400)
committerKris Katterjohn <katterjohn@gmail.com>
Fri, 5 Jul 2024 21:37:54 +0000 (5 17:37 -0400)
treeb5cfb8efaed32e6c5ad09b4246498d48f6204716
parent1a0107475b468c852d7a762f67e868362150ef89
transl: do not assume a catch's mode based on the last body form

It's not uncommon for user code to throw a symbol on failure, when
the last body form of a catch has a very different mode.

Even in other cases with, e.g., only numbers involved, it's been
trivial to get a lisp error due to an incorrect mode assumption:

(%i1) foo () := throw (1/2)$

(%i2) bar () := 1 + catch (foo (), 2)$

(%i3) translate (foo, bar)$

(%i4) bar ();
<lisp error>

No problems with the test suite, share test suite or rtest_translator.
New tests have been added to rtest_translator.
src/trans1.lisp
tests/rtest_translator.mac