update defmacro