Separate macros by mutability

* distinguish between mutable and immutable macros