summaryrefslogtreecommitdiff
path: root/support/regression/m4include
diff options
context:
space:
mode:
authorXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
committerXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
commit268a53de823a6750d6256ee1fb1e7707b4b45740 (patch)
tree42c1799a9a82b2f7d9790ee9fe181d72a7274751 /support/regression/m4include
downloadsdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'support/regression/m4include')
-rw-r--r--support/regression/m4include/rtmacros.m449
1 files changed, 49 insertions, 0 deletions
diff --git a/support/regression/m4include/rtmacros.m4 b/support/regression/m4include/rtmacros.m4
new file mode 100644
index 0000000..ad79393
--- /dev/null
+++ b/support/regression/m4include/rtmacros.m4
@@ -0,0 +1,49 @@
+divert(-1)
+#
+# macros borrowed from m4 examples
+#
+
+# from forloop3.m4:
+# forloop_arg(from, to, macro) - invoke MACRO(value) for
+# each value between FROM and TO, without define overhead
+define(`forloop_arg', `ifelse(eval(`($1) <= ($2)'), `1',
+ `_forloop(`$1', eval(`$2'), `$3(', `)')')')
+# forloop(var, from, to, stmt) - refactored to share code
+define(`forloop', `ifelse(eval(`($2) <= ($3)'), `1',
+ `pushdef(`$1')_forloop(eval(`$2'), eval(`$3'),
+ `define(`$1',', `)$4')popdef(`$1')')')
+define(`_forloop',
+ `$3`$1'$4`'ifelse(`$1', `$2', `',
+ `$0(incr(`$1'), `$2', `$3', `$4')')')
+
+# from quote.m4:
+# quote(args) - convert args to single-quoted string
+define(`quote', `ifelse(`$#', `0', `', ``$*'')')
+# dquote(args) - convert args to quoted list of quoted strings
+define(`dquote', ``$@'')
+# dquote_elt(args) - convert args to list of double-quoted strings
+define(`dquote_elt', `ifelse(`$#', `0', `', `$#', `1', ```$1''',
+ ```$1'',$0(shift($@))')')
+
+# from foreachq4.m4:
+# foreachq(x, `item_1, item_2, ..., item_n', stmt)
+# quoted list, version based on forloop
+define(`foreachq',
+`ifelse(`$2', `', `', `_$0(`$1', `$3', $2)')')
+define(`_foreachq',
+`pushdef(`$1', forloop(`$1', `3', `$#',
+ `$0_(`1', `2', indir(`$1'))')`popdef(
+ `$1')')indir(`$1', $@)')
+define(`_foreachq_',
+``define(`$$1', `$$3')$$2`''')
+
+# from foreach2.m4:
+# foreach(x, (item_1, item_2, ..., item_n), stmt)
+# parenthesized list, improved version
+define(`foreach', `pushdef(`$1')_$0(`$1',
+ (dquote(dquote_elt$2)), `$3')popdef(`$1')')
+define(`_arg1', `$1')
+define(`_foreach', `ifelse(`$2', `(`')', `',
+ `define(`$1', _arg1$2)$3`'$0(`$1', (dquote(shift$2)), `$3')')')
+
+divert(0)dnl