aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xcppawk3
-rw-r--r--cppawk-include/base.h9
-rw-r--r--cppawk-include/case-priv.h8
3 files changed, 18 insertions, 2 deletions
diff --git a/cppawk b/cppawk
index 265d293..9af2138 100755
--- a/cppawk
+++ b/cppawk
@@ -134,6 +134,9 @@ while [ $# -gt 0 ] ; do
gawk | mawk | */gawk | */mawk )
prepro_opts="$prepro_opts -U__gawk__ -D__$(basename "$awk")__=1"
;;
+ egawk | */egawk )
+ prepro_opts="$prepro_opts -D__egawk__=1"
+ ;;
esac
;;
--nobash )
diff --git a/cppawk-include/base.h b/cppawk-include/base.h
index 5472233..568ffcd 100644
--- a/cppawk-include/base.h
+++ b/cppawk-include/base.h
@@ -42,9 +42,16 @@
#define __present(arg) ((arg) != "" || (arg) != 0)
+#if __egawk__
+#define __let(...) @let (__VA_ARGS__)
+#define __have_let 1
+#else
+#define __let(...)
+#endif
+
#if __gawk__
#define __have_switch 1
-#if __gawk_ver >= 040000
+#if __gawk_ver >= 040000 || __egawk__
#define __have_indirect_functions 1
#endif
#endif
diff --git a/cppawk-include/case-priv.h b/cppawk-include/case-priv.h
index 6421877..3676e2b 100644
--- a/cppawk-include/case-priv.h
+++ b/cppawk-include/case-priv.h
@@ -64,8 +64,14 @@
#define __mtch_next(p, \
x) p || (__val ~ (x))
+#if !__have_let
#define __case_temps __val, __once, __pass
-#define __case(expr) for ((__once = 1) && (__pass = 0) || (__val = expr); \
+#else
+#define __case_temps __ign
+#endif
+
+#define __case(expr) __let (__val, __once, __pass) \
+ for ((__once = 1) && (__pass = 0) || (__val = expr); \
__once; \
__once = 0)
#define __of(...) __clause(__varexpand(__of_first, __of_next, \