| divert(`-1') | |
| # stack_foreach_sep(macro, pre, post, sep) | |
| # Invoke PRE`'defn`'POST with a single argument of each definition | |
| # from the definition stack of MACRO, starting with the oldest, and | |
| # separated by SEP between definitions. | |
| define(`stack_foreach_sep', | |
| `_stack_reverse_sep(`$1', `tmp-$1')'dnl | |
| `_stack_reverse_sep(`tmp-$1', `$1', `$2`'defn(`$1')$3', `$4`'')') | |
| # stack_foreach_sep_lifo(macro, pre, post, sep) | |
| # Like stack_foreach_sep, but starting with the newest definition. | |
| define(`stack_foreach_sep_lifo', | |
| `_stack_reverse_sep(`$1', `tmp-$1', `$2`'defn(`$1')$3', `$4`'')'dnl | |
| `_stack_reverse_sep(`tmp-$1', `$1')') | |
| define(`_stack_reverse_sep', | |
| `ifdef(`$1', `pushdef(`$2', defn(`$1'))$3`'popdef(`$1')$0( | |
| `$1', `$2', `$4$3')')') | |
| divert`'dnl |