Otherwise when using the default calling convention we're limited by JVM (for now at least). The Kawa compiler will optimize away the most common kinds of tail-calls, including (self-)tail-recursion, and some kinds of mutual tail-recursion. For example: