| divert(`-1') |
| # stack_foreach(macro, action) |
| # Invoke ACTION with a single argument of each definition |
| # from the definition stack of MACRO, starting with the oldest. |
| define(`stack_foreach', |
| `_stack_reverse(`$1', `tmp-$1')'dnl |
| `_stack_reverse(`tmp-$1', `$1', `$2(defn(`$1'))')') |
| # stack_foreach_lifo(macro, action) |
| # Invoke ACTION with a single argument of each definition |
| # from the definition stack of MACRO, starting with the newest. |
| define(`stack_foreach_lifo', |
| `_stack_reverse(`$1', `tmp-$1', `$2(defn(`$1'))')'dnl |
| `_stack_reverse(`tmp-$1', `$1')') |
| define(`_stack_reverse', |
| `ifdef(`$1', `pushdef(`$2', defn(`$1'))$3`'popdef(`$1')$0($@)')') |
| divert`'dnl |