tail-recursion opt in user-def call