define function in macro, not var