How is this supposed to work given the JVM does not support tail calls?
Can't you lambda-lift & fully CPS-convert the code somewhere throughout compilation, then use a trampoline at runtime?
I'd say that's a huge performance hit (return, check, call instead of jump). Plus, your JIT might not like it.