finish rewriting compiler, but macro is wrong