implement macros
make it compile