recursive macro expansion