support for user-defined macros