Quick update: The first time I tried to run the posted code I got a crash, but now I suspect that was LV12 doing its thing and not directly related to the code. When I try it this time I actually get a quite helpful error message:
This is a good start but still bugs me a little bit. When you move from the world of strict, static typing into the world of dynamic typing then you expect a lot of errors to move from compile time to run time. This is the price of doing business sometimes. What I wonder is if it is really necessary to stop everything when this happens, could this be an error you could recover from?
This is mostly curiosity, I find recursion and DD to be a bit slow and avoid both as much as I can, combining the two is getting into slow-squared country, population unknown but not me.
Edit: That is a great explanation by AQ, but it did not address what seemed to be happening at the time. I understand what is and is not recursive and agree it is best to wait until run-time. The OPs description was that real, honest-to-goodness recursion was happening and your reply was not a bug, that had me confused. The error window I see makes all of the difference. If the OP did not see it for some reason, ouch.