be more careful about macro argument