diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2022-04-13 02:54:08 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2022-04-13 02:54:08 -0700 |
commit | 3081448751067b32ff758f1ac04e2ec7369bfff4 (patch) | |
tree | 1cb887cca069cdc862a8b21d9a2e94575bda027c /cppawk-include | |
parent | a82b2fbeaa96e3e9531f929bb067448260495d19 (diff) | |
download | cppawk-3081448751067b32ff758f1ac04e2ec7369bfff4.tar.gz cppawk-3081448751067b32ff758f1ac04e2ec7369bfff4.tar.bz2 cppawk-3081448751067b32ff758f1ac04e2ec7369bfff4.zip |
fun now implemented by fun-priv.
Diffstat (limited to 'cppawk-include')
-rw-r--r-- | cppawk-include/cons-priv.h | 8 | ||||
-rw-r--r-- | cppawk-include/fun-priv.h | 50 | ||||
-rw-r--r-- | cppawk-include/fun.h | 25 |
3 files changed, 59 insertions, 24 deletions
diff --git a/cppawk-include/cons-priv.h b/cppawk-include/cons-priv.h index 3ce5873..43bd43f 100644 --- a/cppawk-include/cons-priv.h +++ b/cppawk-include/cons-priv.h @@ -49,8 +49,8 @@ #endif #if __have_indirect_functions -#ifndef __CPPAWK_FUN_H -#include "fun.h" +#ifndef __CPPAWK_FUN_PRIV_H +#include "fun-priv.h" #endif #endif @@ -746,7 +746,7 @@ function __mapcar(__fun, __lst, { __temp = __list_begin() __dolist(__item, __lst) - __temp = __list_add(__temp, call(__fun, __item)) + __temp = __list_add(__temp, __call(__fun, __item)) return __list_end(__temp) } @@ -755,7 +755,7 @@ function __mappend(__fun, __lst, { __temp = __nil __dolist(__item, __lst) - __temp = __append2(__temp, call(__fun, __item)) + __temp = __append2(__temp, __call(__fun, __item)) return __temp } diff --git a/cppawk-include/fun-priv.h b/cppawk-include/fun-priv.h new file mode 100644 index 0000000..56313c0 --- /dev/null +++ b/cppawk-include/fun-priv.h @@ -0,0 +1,50 @@ +// 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_FUN_PRIV_H +#define __CPPAWK_FUN_PRIV_H + +#ifndef __CPPAWK_BASE_H +#include "base.h" +#endif + +#ifndef __CPPAWK_CONS_H +#include "cons-priv.h" +#endif + +#if !__have_indirect_functions +#warning "<fun.h> requires an Awk with function indirection like newer GNU Awk" +#endif + +#define __bind(fname, env) __cons(#fname, env) +#define __fun(fname) #fname +#define __call(fobj, ...) (__consp(fobj) \ + ? __progn(__g(f) = __car(fobj), \ + @__g(f)(__cdr(fobj), __VA_ARGS__)) \ + : @fobj(__VA_ARGS__)) + +#endif diff --git a/cppawk-include/fun.h b/cppawk-include/fun.h index 77ebf38..6bf38ef 100644 --- a/cppawk-include/fun.h +++ b/cppawk-include/fun.h @@ -28,27 +28,12 @@ #ifndef __CPPAWK_FUN_H #define __CPPAWK_FUN_H -#ifndef __CPPAWK_BASE_H -#include "base.h" +#ifndef __CPPAWK_FUN_PRIV_H +#include "fun-priv.h" #endif -#ifndef __CPPAWK_ITER_H -#include "iter.h" -#endif - -#ifndef __CPPAWK_CONS_H -#include "cons-priv.h" -#endif - -#if !__have_indirect_functions -#warning "<fun.h> requires an Awk with function indirection like newer GNU Awk" -#endif - -#define bind(fname, env) cons(#fname, env) -#define fun(fname) #fname -#define call(fobj, ...) (__consp(fobj) \ - ? progn(__g(f) = __car(fobj), \ - @__g(f)(__cdr(fobj), __VA_ARGS__)) \ - : @fobj(__VA_ARGS__)) +#define bind(fname, env) __bind(fname, env) +#define fun(fname) __fun(fname) +#define call(...) __call(__VA_ARGS__) #endif |