This is still not exhaustive, but it at least guards against some cases
discovered by the fuzzer.
Tail calls would likely solve this, though maybe even that is not
enough, you _could_ overflow the native stack with a very deeply nested
expression. The eventual solution might be to have a bytecode
interpreter with jumps, but for now, let's patch it ad-hoc ...