do some tail call elimination