You've written a recursive macro. That is usually a mistake. Here (unless you mean the first argument always to be a constant) you're recursing based on values that won't be available till runtime, yet the macro could be expanded at compile-time.
You should just expand into a do.