I don't think it'd actually require that. It can just extract it to the smallest uint size that fits and compare against constants, with a fall-through match arm.

When I say "macros", though, I mostly just mean "any syntax extension", which includes procedural ones (written in pure Rust)