diff options
l--------- | cppawk-include/... | 1 | ||||
-rw-r--r-- | cppawk-include/base.h | 43 | ||||
-rw-r--r-- | cppawk-include/case-priv.h | 78 | ||||
-rw-r--r-- | cppawk-include/case.h | 45 | ||||
-rw-r--r-- | cppawk-include/narg-priv.h | 327 | ||||
-rwxr-xr-x | runtests | 6 | ||||
-rw-r--r-- | testcases-case | 54 | ||||
-rwxr-xr-x | testsuite.awk | 3 |
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 @@ -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") |