aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
l---------cppawk-include/...1
-rw-r--r--cppawk-include/base.h43
-rw-r--r--cppawk-include/case-priv.h78
-rw-r--r--cppawk-include/case.h45
-rw-r--r--cppawk-include/narg-priv.h327
-rwxr-xr-xruntests6
-rw-r--r--testcases-case54
-rwxr-xr-xtestsuite.awk3
8 files changed, 553 insertions, 4 deletions
diff --git a/cppawk-include/... b/cppawk-include/...
deleted file mode 120000
index 945c9b4..0000000
--- a/cppawk-include/...
+++ /dev/null
@@ -1 +0,0 @@
-. \ No newline at end of file
diff --git a/cppawk-include/base.h b/cppawk-include/base.h
new file mode 100644
index 0000000..1f060cb
--- /dev/null
+++ b/cppawk-include/base.h
@@ -0,0 +1,43 @@
+// cppawk: C preprocessor wrapper around awk
+// Kaz Kylheku <kaz@kylheku.com>
+//
+// BSD-2 License
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef __CPPAWK_BASE_H
+#define __CPPAWK_BASE_H
+
+#if __gawk__ && !defined __gawk_ver
+#define __gawk_ver 040000
+#endif
+
+#define __cat(a, b) a ## b
+#define __xcat(a, b) __cat(a, b)
+#define __g(name) __xcat(name, __LINE__)
+
+#define __error(...) { printf(__VA_ARGS__); print; exit 1 }
+
+#define __present(arg) ((arg) != "" || (arg) != 0)
+
+#endif
diff --git a/cppawk-include/case-priv.h b/cppawk-include/case-priv.h
new file mode 100644
index 0000000..7ae5229
--- /dev/null
+++ b/cppawk-include/case-priv.h
@@ -0,0 +1,78 @@
+// cppawk: C preprocessor wrapper around awk
+// Kaz Kylheku <kaz@kylheku.com>
+//
+// BSD-2 License
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef __CPPAWK_CASE_PRIV_H
+#define __CPPAWK_CASE_PRIV_H
+
+#ifndef __CPPAWK_NARG_PRIV
+#include "narg-priv.h"
+#endif
+
+#ifndef __CPPAWK_BASE
+#include "base.h"
+#endif
+
+#if __gawk__
+
+#define __casx(x) case x:
+
+#define __case_temps __ign
+#define __case(expr) switch (expr)
+#define __of(...) __xcat(__rep_, __narg(__VA_ARGS__))(__casx, \
+ __VA_ARGS__) {{{
+#define __matching(...) __xcat(__rep_, __narg(__VA_ARGS__))(__casx, \
+ __VA_ARGS__) {{{
+#define __cbreak break; }}}
+#define __cfall }}}
+#define __cret(val) return val; }}}
+#define __otherwise default: {{{
+
+#else
+
+#define __clause(expr) if (__pass || (expr) && (__pass = 1))
+#define __of_first(x) (__val == (x))
+#define __of_next(x) || (__val == (x))
+#define __mtch_first(x) (__val ~ (x))
+#define __mtch_next(x) || (__val ~ (x))
+
+#define __case_temps __val, __once, __pass
+#define __case(expr) for ((__once = 1) && (__pass = 0) || (__val = expr); \
+ __once; \
+ __once = 0)
+#define __of(...) __clause(__xcat(__repi_, __narg(__VA_ARGS__)) \
+ (__of_first, __of_next, __VA_ARGS__)) {{{
+#define __matching(...) __clause(__xcat(__repi_, __narg(__VA_ARGS__)) \
+ (__mtch_first, __mtch_next, __VA_ARGS__)) {{{
+#define __cbreak break; }}}
+#define __creturn(val) return val; }}}
+#define __cfall }}}
+#define __cret(val) return val; }}}
+#define __otherwise if (__pass = 1) {{{
+
+#endif
+
+#endif
diff --git a/cppawk-include/case.h b/cppawk-include/case.h
new file mode 100644
index 0000000..79a04b8
--- /dev/null
+++ b/cppawk-include/case.h
@@ -0,0 +1,45 @@
+// cppawk: C preprocessor wrapper around awk
+// Kaz Kylheku <kaz@kylheku.com>
+//
+// BSD-2 License
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef __CPPAWK_CASE_H
+#define __CPPAWK_CASE_H
+
+#ifndef __CPPAWK_CASE_PRIV_H
+#include "case-priv.h"
+#endif
+
+#define case_temps __case_temps
+#define case(expr) __case(expr)
+#define of(...) __of(__VA_ARGS__)
+#define matching(...) __matching(__VA_ARGS__)
+#define cbreak __cbreak
+#define cfall __cfall
+#define cret(val) __cret(val)
+#define then __do
+#define otherwise __otherwise
+
+#endif
diff --git a/cppawk-include/narg-priv.h b/cppawk-include/narg-priv.h
new file mode 100644
index 0000000..037e057
--- /dev/null
+++ b/cppawk-include/narg-priv.h
@@ -0,0 +1,327 @@
+// cppawk: C preprocessor wrapper around awk
+// Kaz Kylheku <kaz@kylheku.com>
+//
+// BSD-2 License
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef __CPPAWK_NARG_PRIV
+#define __CPPAWK_NARG_PRIV
+
+#define __narg_34(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, \
+ A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, \
+ A26, A27, A28, A29, A30, A31, A32, A33, N, ...) N
+
+#define __xnarg_34(...) __narg_34(__VA_ARGS__)
+
+#define __narg(...) __xnarg_34(__dummy, ## __VA_ARGS__, 32, 31, 30, 29, 28, \
+ 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, \
+ 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, \
+ 3, 2, 1, 0)
+
+#define __rep_1(mac, a1) \
+ mac(a1)
+#define __rep_2(mac, a1, a2) \
+ mac(a1) mac(a2)
+#define __rep_3(mac, a1, a2, a3) \
+ mac(a1) mac(a2) mac(a3)
+#define __rep_4(mac, a1, a2, a3, a4) \
+ mac(a1) mac(a2) mac(a3) mac(a4)
+#define __rep_5(mac, a1, a2, a3, a4, a5) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5)
+#define __rep_6(mac, a1, a2, a3, a4, a5, a6) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6)
+#define __rep_7(mac, a1, a2, a3, a4, a5, a6, a7) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7)
+#define __rep_8(mac, a1, a2, a3, a4, a5, a6, a7, a8) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8)
+#define __rep_9(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9)
+#define __rep_10(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10)
+#define __rep_11(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11)
+#define __rep_12(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12)
+#define __rep_13(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13)
+#define __rep_14(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14)
+#define __rep_15(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15)
+#define __rep_16(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16)
+#define __rep_17(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17)
+#define __rep_18(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18)
+#define __rep_19(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19)
+#define __rep_20(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19, a20) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19) mac(a20)
+#define __rep_21(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19, a20, a21) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19) mac(a20) mac(a21)
+#define __rep_22(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19, a20, a21, a22) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19) mac(a20) mac(a21) mac(a22)
+#define __rep_23(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19) mac(a20) mac(a21) mac(a22) mac(a23)
+#define __rep_24(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19) mac(a20) mac(a21) mac(a22) mac(a23) mac(a24)
+#define __rep_25(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19) mac(a20) mac(a21) mac(a22) mac(a23) mac(a24) mac(a25)
+#define __rep_26(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, \
+ a26) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19) mac(a20) mac(a21) mac(a22) mac(a23) mac(a24) mac(a25) \
+ mac(a26)
+#define __rep_27(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, \
+ a26, a27) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19) mac(a20) mac(a21) mac(a22) mac(a23) mac(a24) mac(a25) \
+ mac(a26) mac(a27)
+#define __rep_28(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, \
+ a26, a27, a28) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19) mac(a20) mac(a21) mac(a22) mac(a23) mac(a24) mac(a25) \
+ mac(a26) mac(a27) mac(a28)
+#define __rep_29(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, \
+ a26, a27, a28, a29) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19) mac(a20) mac(a21) mac(a22) mac(a23) mac(a24) mac(a25) \
+ mac(a26) mac(a27) mac(a28) mac(a29)
+#define __rep_30(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, \
+ a26, a27, a28, a29, a30) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19) mac(a20) mac(a21) mac(a22) mac(a23) mac(a24) mac(a25) \
+ mac(a26) mac(a27) mac(a28) mac(a29) mac(a30)
+#define __rep_31(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, \
+ a26, a27, a28, a29, a30, a31) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19) mac(a20) mac(a21) mac(a22) mac(a23) mac(a24) mac(a25) \
+ mac(a26) mac(a27) mac(a28) mac(a29) mac(a30) mac(a31)
+#define __rep_32(mac, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, \
+ a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, \
+ a26, a27, a28, a29, a30, a31, a32) \
+ mac(a1) mac(a2) mac(a3) mac(a4) mac(a5) mac(a6) mac(a7) mac(a8) mac(a9) \
+ mac(a10) mac(a11) mac(a12) mac(a13) mac(a14) mac(a15) mac(a16) mac(a17) \
+ mac(a18) mac(a19) mac(a20) mac(a21) mac(a22) mac(a23) mac(a24) mac(a25) \
+ mac(a26) mac(a27) mac(a28) mac(a29) mac(a30) mac(a31) mac(a32)
+
+#define __repi_1(mac1, mac2, a1) \
+ mac1(a1)
+#define __repi_2(mac1, mac2, a1, a2) \
+ mac1(a1) mac2(a2)
+#define __repi_3(mac1, mac2, a1, a2, a3) \
+ mac1(a1) mac2(a2) mac2(a3)
+#define __repi_4(mac1, mac2, a1, a2, a3, a4) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4)
+#define __repi_5(mac1, mac2, a1, a2, a3, a4, a5) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5)
+#define __repi_6(mac1, mac2, a1, a2, a3, a4, a5, a6) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6)
+#define __repi_7(mac1, mac2, a1, a2, a3, a4, a5, a6, a7) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7)
+#define __repi_8(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8)
+#define __repi_9(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9)
+#define __repi_10(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10)
+#define __repi_11(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11)
+#define __repi_12(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12)
+#define __repi_13(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13)
+#define __repi_14(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14)
+#define __repi_15(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15) j\
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15)
+#define __repi_16(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16)
+#define __repi_17(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17)
+#define __repi_18(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18)
+#define __repi_19(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19)
+#define __repi_20(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19) mac2(a20)
+#define __repi_21(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19) mac2(a20) mac2(a21)
+#define __repi_22(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19) mac2(a20) mac2(a21) mac2(a22)
+#define __repi_23(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19) mac2(a20) mac2(a21) mac2(a22) \
+ mac2(a23)
+#define __repi_24(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19) mac2(a20) mac2(a21) mac2(a22) \
+ mac2(a23) mac2(a24)
+#define __repi_25(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19) mac2(a20) mac2(a21) mac2(a22) \
+ mac2(a23) mac2(a24) mac2(a25)
+#define __repi_26(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19) mac2(a20) mac2(a21) mac2(a22) \
+ mac2(a23) mac2(a24) mac2(a25) mac2(a26)
+#define __repi_27(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26, a27) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19) mac2(a20) mac2(a21) mac2(a22) \
+ mac2(a23) mac2(a24) mac2(a25) mac2(a26) mac2(a27)
+#define __repi_28(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26, a27, a28) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19) mac2(a20) mac2(a21) mac2(a22) \
+ mac2(a23) mac2(a24) mac2(a25) mac2(a26) mac2(a27) mac2(a28)
+#define __repi_29(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26, a27, a28, a29) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19) mac2(a20) mac2(a21) mac2(a22) \
+ mac2(a23) mac2(a24) mac2(a25) mac2(a26) mac2(a27) mac2(a28) mac2(a29)
+#define __repi_30(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26, a27, a28, a29, a30) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19) mac2(a20) mac2(a21) mac2(a22) \
+ mac2(a23) mac2(a24) mac2(a25) mac2(a26) mac2(a27) mac2(a28) mac2(a29) \
+ mac2(a30)
+#define __repi_31(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26, a27, a28, a29, a30, a31) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19) mac2(a20) mac2(a21) mac2(a22) \
+ mac2(a23) mac2(a24) mac2(a25) mac2(a26) mac2(a27) mac2(a28) mac2(a29) \
+ mac2(a30) mac2(a31)
+#define __repi_32(mac1, mac2, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, \
+ a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, \
+ a24, a25, a26, a27, a28, a29, a30, a31, a32) \
+ mac1(a1) mac2(a2) mac2(a3) mac2(a4) mac2(a5) mac2(a6) mac2(a7) mac2(a8) \
+ mac2(a9) mac2(a10) mac2(a11) mac2(a12) mac2(a13) mac2(a14) mac2(a15) \
+ mac2(a16) mac2(a17) mac2(a18) mac2(a19) mac2(a20) mac2(a21) mac2(a22) \
+ mac2(a23) mac2(a24) mac2(a25) mac2(a26) mac2(a27) mac2(a28) mac2(a29) \
+ mac2(a30) mac2(a31) mac2(a32)
+
+#endif
diff --git a/runtests b/runtests
index ddc1bbd..3396b07 100755
--- a/runtests
+++ b/runtests
@@ -1,4 +1,6 @@
#!/bin/sh
trap 'rm -f output script.sh' EXIT INT TERM
-cppawk=./cppawk ./testsuite.awk < testcases
-cppawk="./cppawk --nobash" ./testsuite.awk < testcases
+cppawk=./cppawk ./testsuite.awk testcases
+cppawk="./cppawk --nobash" ./testsuite.awk testcases
+cppawk=./cppawk ./testsuite.awk testcases-case
+cppawk="./cppawk --awk=mawk" ./testsuite.awk testcases-case
diff --git a/testcases-case b/testcases-case
new file mode 100644
index 0000000..6e62412
--- /dev/null
+++ b/testcases-case
@@ -0,0 +1,54 @@
+1:
+$cppawk '
+#include <case.h>
+BEGIN {
+#if defined case_temps && defined case && defined of && \
+ defined matching && defined cbreak && defined otherwise
+ print 1
+#endif
+}'
+:
+1
+--
+2:
+printf "%s\n" foo bar xyzzy x b | $cppawk '
+#include <case.h>
+{
+ case ($0) {
+ of ("foo")
+ print "** foo case: fallthrough!"
+ cfall;
+ of ("bar", "xyzzy") {
+ print "** bar/xyzzy case"
+ cbreak;
+ }
+ matching (/x/)
+ print "** /x/ case"
+ cbreak;
+ otherwise
+ print "** default"
+ cbreak;
+ }
+}'
+:
+** foo case: fallthrough!
+** bar/xyzzy case
+** bar/xyzzy case
+** bar/xyzzy case
+** /x/ case
+** default
+--
+3:
+$cppawk '
+#include <case.h>
+function f(arg, case_temps)
+{
+ case (arg) {
+ of (1, 2, 3) cret(arg * 10)
+ otherwise cret(-arg)
+ }
+}
+
+BEGIN { print f(1), f(2), f(3), f(4) }'
+:
+10 20 30 -4
diff --git a/testsuite.awk b/testsuite.awk
index 2c9fd14..27e3561 100755
--- a/testsuite.awk
+++ b/testsuite.awk
@@ -21,7 +21,8 @@ function runtest(id, code, output,
}
if (failed)
- printf("test %s failed (for cppawk = %s)\n", id, ENVIRON["cppawk"])
+ printf("test %s in file '%s' failed (for cppawk = %s)\n",
+ id, FILENAME, ENVIRON["cppawk"])
close("script.sh")
close("output")