summaryrefslogtreecommitdiff
path: root/doc/examples/stack.m4
diff options
context:
space:
mode:
Diffstat (limited to 'doc/examples/stack.m4')
-rw-r--r--doc/examples/stack.m416
1 files changed, 16 insertions, 0 deletions
diff --git a/doc/examples/stack.m4 b/doc/examples/stack.m4
new file mode 100644
index 00000000..c1b98333
--- /dev/null
+++ b/doc/examples/stack.m4
@@ -0,0 +1,16 @@
+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