Wouldn't a better way than using Leave calls be simply to put enter calls just after all non-tail calls? I.e., you never leave, you just re-enter your caller. This would keep everything tail-recursive (or not) and would probably decrease the number of calls to these routines as a nice side effect.