Replace defmacro hack with pre-macroexpansion check