Macros are the last resort. When they can be file-scope static functions
without a huge pain in the ass, always do that instead. I think we need to
take these case by case, rather than trying to review one giant patch.
Also, attachments suck and you'll get far quicker review if you avoid them.