move defmacro before call instead of mysterious eval-when-compile

for the byte-compileness