Separated the macro proper and the syntax checking as a compiler macro.