In reply to @arnetheduck "the transformation to llvm": Why nim => LLVM IR is lossy I don't fully get there. Unless lossy here means "You lose the macro syntax", because isn't the parsing step just: nim with macros => nim with resolved macro code generation => llvm IR So shouldn't LLVM IR => nim with resolved macro code generation be possible?