A possibly related reproducer (not totally sure):
(
f = { |level = 100|
protect {
if(level > 0) {
f.(level - 1)
} {
// "valid result".postln;
f.doesnotunderstand;
};
};
level
};
)
f.(22); // grinds much longer than you think but eventually...
ERROR: Message 'doesnotunderstand' not understood.
f.(23); // grinds, then crashes
The crash disappears if no error is thrown at the bottom of the recursion chain.
Curiously, though, if it’s Error("throw something else").throw at the bottom, rather than the misunderstood message, then f.(22) crashes too.
Without protect it can do a million recursive steps, no problem.
hjh