From 64b80cd114fdd2ccc754355de184c4cd4af73b7a Mon Sep 17 00:00:00 2001 From: "Thomas E. Dickey" Date: Mon, 5 Nov 2012 10:53:43 -0500 Subject: [PATCH] snapshot of project "mawk", label t20121105 --- CHANGES | 5 +- MANIFEST | 2 +- code.c | 3 +- code.h | 3 +- configure | 4 +- configure.in | 6 +- da.c | 3 +- error.c | 5 +- execute.c | 8 +- package/debian/changelog | 5 +- package/mawk.spec | 4 +- parse.c | 1775 +++++++++++++++++++------------------- parse.h | 20 +- parse.y | 72 +- patchlev.h | 4 +- symtype.h | 52 +- 16 files changed, 1022 insertions(+), 949 deletions(-) diff --git a/CHANGES b/CHANGES index 75fbad5..6769d41 100644 --- a/CHANGES +++ b/CHANGES @@ -1,8 +1,9 @@ --- $MawkId: CHANGES,v 1.158 2012/11/02 23:25:41 tom Exp $ +-- $MawkId: CHANGES,v 1.160 2012/11/05 10:48:32 tom Exp $ Changes by Thomas E Dickey -20121102 +20121105 + + support length(array), as done in gawk and BWK awk. + support LC_NUMERIC, which will modify the displayed decimal point in some locales. It does not modify the decimal point used for input, matching the behavior of nawk and BWK awk (prompted by request from diff --git a/MANIFEST b/MANIFEST index 6d28654..d8579d5 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1,4 +1,4 @@ -MANIFEST for mawk, version t20121102 +MANIFEST for mawk, version t20121105 -------------------------------------------------------------------------------- MANIFEST this file ACKNOWLEDGMENT acknowledgements diff --git a/code.c b/code.c index 437986a..028a212 100644 --- a/code.c +++ b/code.c @@ -11,7 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: code.c,v 1.34 2012/11/02 00:39:52 tom Exp $ + * $MawkId: code.c,v 1.35 2012/11/03 13:36:38 tom Exp $ * @Log: code.c,v @ * Revision 1.6 1995/06/18 19:42:13 mike * Remove some redundant declarations and add some prototypes @@ -360,6 +360,7 @@ free_codes(const char *tag, INST * base, size_t size) cdp += 1 + cdp[2].op; break; case A_DEL: + case A_LENGTH: case A_TEST: case DEL_A: case FE_PUSHA: diff --git a/code.h b/code.h index 2cef203..132e5a2 100644 --- a/code.h +++ b/code.h @@ -11,7 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: code.h,v 1.9 2012/11/02 23:21:50 tom Exp $ + * $MawkId: code.h,v 1.10 2012/11/03 13:36:38 tom Exp $ * @Log: code.h,v @ * Revision 1.5 1995/06/18 19:42:15 mike * Remove some redundant declarations and add some prototypes @@ -129,6 +129,7 @@ typedef enum { ,_POW ,_NOT ,_TEST + ,A_LENGTH ,A_TEST ,A_DEL ,ALOOP diff --git a/configure b/configure index b4df33b..9451e69 100755 --- a/configure +++ b/configure @@ -2978,7 +2978,7 @@ if test "${with_builtin_regex+set}" = set; then fi; if test "x${with_builtin_regex}" != xno; then with_builtin_regex=yes - CFLAGS="$CFLAGS -DLOCAL_REGEXP" + CPPFLAGS="$CPPFLAGS -DLOCAL_REGEXP" fi echo "$as_me:2983: result: $with_builtin_regex" >&5 echo "${ECHO_T}$with_builtin_regex" >&6 @@ -3723,7 +3723,7 @@ fi; if test "x${with_init_srand}" != xno; then with_init_srand=yes else - CFLAGS="$CFLAGS -DNO_INIT_SRAND" + CPPFLAGS="$CPPFLAGS -DNO_INIT_SRAND" fi echo "$as_me:3728: result: $with_init_srand" >&5 echo "${ECHO_T}$with_init_srand" >&6 diff --git a/configure.in b/configure.in index f2d1db0..d59efe6 100644 --- a/configure.in +++ b/configure.in @@ -1,4 +1,4 @@ -dnl $MawkId: configure.in,v 1.47 2012/11/01 09:51:00 tom Exp $ +dnl $MawkId: configure.in,v 1.48 2012/11/03 00:22:45 tom Exp $ dnl configure.in for mawk dnl ########################################################################### dnl configure.in @@ -73,7 +73,7 @@ AC_ARG_WITH([builtin-regex], ]) if test "x${with_builtin_regex}" != xno; then with_builtin_regex=yes - CFLAGS="$CFLAGS -DLOCAL_REGEXP" + CPPFLAGS="$CPPFLAGS -DLOCAL_REGEXP" fi AC_MSG_RESULT($with_builtin_regex) @@ -104,7 +104,7 @@ CF_ARG_ENABLE([init-srand], if test "x${with_init_srand}" != xno; then with_init_srand=yes else - CFLAGS="$CFLAGS -DNO_INIT_SRAND" + CPPFLAGS="$CPPFLAGS -DNO_INIT_SRAND" fi AC_MSG_RESULT($with_init_srand) diff --git a/da.c b/da.c index e6a8ccd..a9c6f3c 100644 --- a/da.c +++ b/da.c @@ -11,7 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: da.c,v 1.12 2012/06/27 09:21:13 tom Exp $ + * $MawkId: da.c,v 1.13 2012/11/03 13:36:38 tom Exp $ * @Log: da.c,v @ * Revision 1.6 1995/06/18 19:19:59 mike * remove use of comma operator that broke some sysVr3 compilers @@ -69,6 +69,7 @@ static OP_NAME simple_code[] = {_STOP, "stop"}, {FE_PUSHA, "fe_pusha"}, {FE_PUSHI, "fe_pushi"}, + {A_LENGTH, "a_length"}, {A_TEST, "a_test"}, {A_DEL, "a_del"}, {DEL_A, "del_a"}, diff --git a/error.c b/error.c index 1457f99..594af96 100644 --- a/error.c +++ b/error.c @@ -11,7 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: error.c,v 1.17 2012/10/30 21:43:40 tom Exp $ + * $MawkId: error.c,v 1.18 2012/11/03 00:32:58 tom Exp $ * @Log: error.c,v @ * Revision 1.6 1995/06/06 00:18:22 mike * change mawk_exit(1) to mawk_exit(2) @@ -236,6 +236,9 @@ compile_error(const char *format,...) s0 = s1 = ""; } +#ifdef DEBUG + fflush(stdout); +#endif fprintf(stderr, "%s: %s%sline %u: ", progname, s0, s1, token_lineno); va_start(args, format); vfprintf(stderr, format, args); diff --git a/execute.c b/execute.c index 6f45819..764b11b 100644 --- a/execute.c +++ b/execute.c @@ -11,7 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: execute.c,v 1.27 2012/10/27 00:32:33 tom Exp $ + * $MawkId: execute.c,v 1.29 2012/11/05 10:53:43 tom Exp $ * @Log: execute.c,v @ * Revision 1.13 1996/02/01 04:39:40 mike * dynamic array scheme @@ -1088,6 +1088,12 @@ execute(INST * cdp, /* code ptr, start execution here */ sp->dval = t ? 1.0 : 0.0; break; + case A_LENGTH: + sp--; + sp->type = C_DOUBLE; + sp->dval = (double) (((ARRAY) ((sp + 0)->ptr))->size); + break; + case A_TEST: /* entry : sp[0].ptr-> an array sp[-1] is an expression diff --git a/package/debian/changelog b/package/debian/changelog index 305659f..40df567 100644 --- a/package/debian/changelog +++ b/package/debian/changelog @@ -1,6 +1,7 @@ -mawk-cur (1.3.4-20121102) unstable; urgency=low +mawk-cur (1.3.4-20121105) unstable; urgency=low - * make srand/rand more configurable. + * implement length(array) + * make srand/rand more configurable * add strftime and related functions * fix bug in "/dev/stdin" change * improved configure script diff --git a/package/mawk.spec b/package/mawk.spec index 60de647..83cf4c6 100644 --- a/package/mawk.spec +++ b/package/mawk.spec @@ -1,8 +1,8 @@ Summary: mawk - pattern scanning and text processing language %define AppProgram mawk %define AppVersion 1.3.4 -%define AppRelease 20121102 -# $MawkId: mawk.spec,v 1.16 2012/11/02 08:25:20 tom Exp $ +%define AppRelease 20121105 +# $MawkId: mawk.spec,v 1.18 2012/11/05 10:47:56 tom Exp $ Name: %{AppProgram} Version: %{AppVersion} Release: %{AppRelease} diff --git a/parse.c b/parse.c index 20f6d51..d83e32f 100644 --- a/parse.c +++ b/parse.c @@ -5,7 +5,7 @@ static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 -#define YYPATCH 20120526 +#define YYPATCH 20121003 #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) @@ -67,16 +67,16 @@ static FBLOCK *active_funct ; #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union{ -CELL *cp ; -SYMTAB *stp ; -int start ; /* code starting address as offset from code_base */ -PF_CP fp ; /* ptr to a (print/printf) or (sub/gsub) function */ -BI_REC *bip ; /* ptr to info about a builtin */ -FBLOCK *fbp ; /* ptr to a function block */ -ARG2_REC *arg2p ; -CA_REC *ca_p ; -int ival ; -PTR ptr ; + CELL *cp ; + SYMTAB *stp ; + int start ; /* code starting address as offset from code_base */ + PF_CP fp ; /* ptr to a (print/printf) or (sub/gsub) function */ + BI_REC *bip ; /* ptr to info about a builtin */ + FBLOCK *fbp ; /* ptr to a function block */ + ARG2_REC *arg2p ; + CA_REC *ca_p ; + int ival ; + PTR ptr ; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 82 "y.tab.c" @@ -197,16 +197,16 @@ static const short yylhs[] = { -1, 13, 48, 49, 13, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 10, 25, 25, 26, 26, - 8, 8, 5, 4, 27, 27, 6, 6, 6, 7, - 7, 50, 50, 17, 4, 51, 4, 52, 4, 16, - 4, 4, 18, 18, 19, 19, 53, 53, 13, 13, - 10, 15, 15, 4, 4, 20, 4, 11, 11, 11, - 11, 11, 15, 13, 13, 13, 13, 13, 13, 13, - 15, 22, 54, 54, 15, 23, 4, 4, 21, 21, - 15, 15, 15, 15, 15, 55, 12, 12, 9, 9, - 15, 28, 28, 24, 24, 38, 29, 30, 30, 34, - 34, 35, 35, 39, 15, 31, 31, 32, 32, 32, - 33, 33, + 8, 8, 8, 5, 4, 27, 27, 6, 6, 6, + 7, 7, 50, 50, 17, 4, 51, 4, 52, 4, + 16, 4, 4, 18, 18, 19, 19, 53, 53, 13, + 13, 10, 15, 15, 4, 4, 20, 4, 11, 11, + 11, 11, 11, 15, 13, 13, 13, 13, 13, 13, + 13, 15, 22, 54, 54, 15, 23, 4, 4, 21, + 21, 15, 15, 15, 15, 15, 55, 12, 12, 9, + 9, 15, 28, 28, 24, 24, 38, 29, 30, 30, + 34, 34, 35, 35, 39, 15, 31, 31, 32, 32, + 32, 33, 33, }; static const short yylen[] = { 2, 1, 2, 1, 1, 2, 1, 0, 3, 0, 3, @@ -217,721 +217,743 @@ static const short yylen[] = { 2, 4, 0, 0, 7, 1, 2, 1, 1, 1, 3, 1, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 2, 2, 2, 2, 1, 0, 1, 1, 3, - 5, 1, 0, 5, 1, 1, 1, 3, 2, 3, - 3, 0, 2, 4, 2, 1, 4, 1, 7, 4, - 2, 4, 3, 4, 1, 2, 1, 2, 3, 5, - 5, 5, 6, 7, 3, 6, 2, 1, 2, 6, - 2, 3, 1, 3, 3, 3, 3, 3, 3, 3, - 2, 5, 1, 3, 6, 1, 2, 3, 2, 3, - 1, 2, 2, 3, 4, 1, 1, 1, 2, 3, - 6, 1, 1, 1, 3, 2, 4, 2, 2, 0, - 1, 1, 3, 1, 3, 2, 2, 1, 3, 3, - 2, 2, + 5, 5, 1, 0, 5, 1, 1, 1, 3, 2, + 3, 3, 0, 2, 4, 2, 1, 4, 1, 7, + 4, 2, 4, 3, 4, 1, 2, 1, 2, 3, + 5, 5, 5, 6, 7, 3, 6, 2, 1, 2, + 6, 2, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 2, 5, 1, 3, 6, 1, 2, 3, 2, + 3, 1, 2, 2, 3, 4, 1, 1, 1, 2, + 3, 6, 1, 1, 1, 3, 2, 4, 2, 2, + 0, 1, 1, 3, 1, 3, 2, 2, 1, 3, + 3, 2, 2, }; static const short yydefred[] = { 0, - 164, 0, 146, 0, 0, 0, 0, 0, 118, 0, - 57, 58, 61, 0, 83, 83, 82, 0, 0, 152, - 153, 7, 9, 0, 0, 6, 71, 0, 0, 0, + 165, 0, 147, 0, 0, 0, 0, 0, 119, 0, + 57, 58, 61, 0, 84, 84, 83, 0, 0, 153, + 154, 7, 9, 0, 0, 6, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, - 0, 0, 0, 31, 32, 85, 86, 98, 0, 0, + 0, 0, 0, 31, 32, 86, 87, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, - 20, 0, 0, 0, 0, 0, 28, 83, 24, 0, + 20, 0, 0, 0, 0, 0, 28, 84, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 75, - 0, 121, 0, 0, 0, 72, 0, 0, 0, 0, - 0, 0, 0, 158, 159, 2, 0, 0, 0, 0, + 0, 122, 0, 0, 0, 72, 0, 0, 0, 0, + 0, 0, 0, 159, 160, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 13, 52, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 133, 131, 0, 156, 0, 5, - 149, 147, 148, 0, 17, 25, 0, 0, 26, 27, - 0, 0, 0, 137, 29, 30, 0, 139, 0, 16, - 21, 23, 101, 0, 105, 0, 0, 117, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 122, 0, 60, - 0, 0, 165, 0, 0, 0, 0, 8, 10, 0, + 0, 0, 0, 0, 134, 132, 0, 157, 0, 5, + 150, 148, 149, 0, 17, 25, 0, 0, 26, 27, + 0, 0, 0, 138, 29, 30, 0, 140, 0, 16, + 21, 23, 102, 0, 106, 0, 0, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 123, 0, 60, + 0, 0, 166, 0, 0, 0, 0, 8, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 109, 0, 41, + 0, 0, 0, 0, 0, 0, 0, 110, 0, 41, 42, 43, 44, 45, 46, 18, 12, 19, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, - 0, 150, 0, 103, 0, 0, 0, 0, 115, 138, - 140, 96, 0, 106, 107, 0, 0, 0, 0, 0, - 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 166, 0, 0, 167, 0, 0, 0, 0, 0, 0, - 0, 145, 134, 0, 157, 0, 100, 0, 104, 94, - 0, 97, 108, 102, 89, 0, 0, 0, 0, 0, - 0, 0, 0, 110, 0, 170, 172, 169, 171, 81, - 132, 0, 0, 53, 0, 163, 0, 0, 0, 0, - 84, 0, 0, 0, 111, 120, 113, 135, 15, 0, - 0, 154, 151, 116, 0, 0, 0, 0, 114, 99, - 155, + 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, + 0, 151, 0, 104, 0, 0, 0, 0, 116, 139, + 141, 97, 0, 107, 108, 0, 0, 0, 0, 0, + 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 167, 0, 0, 168, 0, 0, 0, 0, 0, 0, + 0, 0, 146, 135, 0, 158, 0, 101, 0, 105, + 95, 0, 98, 109, 103, 90, 0, 0, 0, 0, + 0, 0, 0, 0, 111, 0, 171, 173, 170, 172, + 81, 82, 133, 0, 0, 53, 0, 164, 0, 0, + 0, 0, 85, 0, 0, 0, 112, 121, 114, 136, + 15, 0, 0, 155, 152, 117, 0, 0, 0, 0, + 115, 100, 156, }; static const short yydgoto[] = { 25, 59, 217, 60, 61, 87, 249, 83, 27, 28, 29, 30, 144, 62, 32, 33, 63, 64, 65, 167, 66, - 67, 34, 228, 323, 251, 252, 68, 35, 36, 37, + 67, 34, 228, 325, 251, 252, 68, 35, 36, 37, 183, 184, 264, 230, 231, 38, 39, 40, 41, 92, - 93, 125, 204, 303, 69, 206, 207, 205, 320, 288, + 93, 125, 204, 305, 69, 206, 207, 205, 322, 289, 243, 70, 247, 136, 42, }; static const short yysindex[] = { -73, - 0, 206, 0, 2222, 2222, 2222, -88, 2132, 0, 2252, - 0, 0, 0, -286, 0, 0, 0, -279, -243, 0, - 0, 0, 0, -291, -73, 0, 0, 2222, 2510, -69, - 2511, 2222, -27, -263, -145, -174, -125, 0, 0, 0, - -174, -156, -191, 0, 0, 0, 0, 0, -123, -117, - -231, -231, -114, -112, 1659, -231, -231, 1659, 0, 56, - 0, 2478, 281, 281, 1750, 281, 0, 0, 0, 281, - 2252, -286, -106, -203, -203, -203, -218, 0, 0, 0, - 0, 0, -257, 2126, 2073, 0, -53, -82, -77, 2252, - 2252, -174, -174, 0, 0, 0, -63, 2252, 2252, 2252, - 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, - 2252, 0, 0, 0, 0, 0, -62, 2252, 2252, 2252, - 2252, 2252, 2252, 2252, 12, -27, 2222, 2222, 2222, 2222, - 2222, -41, 2222, 2252, 0, 0, 2252, 0, -58, 0, - 0, 0, 0, -36, 0, 0, 2252, 1780, 0, 0, - 2252, -231, 2478, 0, 0, 0, 2478, 0, -231, 0, - 0, 0, 0, -49, 0, 53, 2162, 0, 2282, -64, - 2385, -3, -26, 24, 26, 2252, 5, 0, 2252, 0, - 2252, -10, 0, 2312, 2252, 2532, 2553, 0, 0, 2577, - 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, - 2577, 2577, 2577, 2252, 2252, 2252, 2252, 0, 123, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -101, -101, - -203, -203, -203, -88, -63, 2397, 2577, 28, 0, 9, - 44, 0, 2412, 0, -223, 2490, 2424, 60, 0, 0, - 0, 0, 281, 0, 0, 2439, 281, 2192, 62, 2577, - 0, 54, 25, 2252, 2252, 2252, 2577, 36, 2577, -128, - 0, -147, 2100, 0, 48, 40, 2252, 2577, 2565, 2586, - 2464, 0, 0, 2252, 0, 45, 0, 46, 0, 0, - 2252, 0, 0, 0, 0, -235, 2252, -231, 2252, 2252, - -124, -111, -43, 0, 55, 0, 0, 0, 0, 0, - 0, 61, 12, 0, 2127, 0, 77, -14, 5, 2577, - 0, 2577, 2451, 55, 0, 0, 0, 0, 0, 2252, - -88, 0, 0, 0, -231, -231, 2577, 79, 0, 0, - 0, + 0, 203, 0, 2293, 2293, 2293, -88, 2203, 0, 2323, + 0, 0, 0, -286, 0, 0, 0, -276, -273, 0, + 0, 0, 0, -291, -73, 0, 0, 2293, 2576, 62, + 2627, 2293, 263, -263, -243, -192, -226, 0, 0, 0, + -192, -22, -123, 0, 0, 0, 0, 0, -208, -137, + -178, -178, -125, -128, 1656, -178, -178, 1656, 0, 53, + 0, 2579, 278, 278, 1747, 278, 0, 0, 0, 278, + 2323, -286, -111, -200, -200, -200, -110, 0, 0, 0, + 0, 0, -257, 2197, 2144, 0, -79, -109, -107, 2323, + 2323, -192, -192, 0, 0, 0, -87, 2323, 2323, 2323, + 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, + 2323, 0, 0, 0, 0, 0, -82, 2323, 2323, 2323, + 2323, 2323, 2323, 2323, 2, 263, 2293, 2293, 2293, 2293, + 2293, -68, 2293, 2323, 0, 0, 2323, 0, -77, 0, + 0, 0, 0, -56, 0, 0, 2323, 1777, 0, 0, + 2323, -178, 2579, 0, 0, 0, 2579, 0, -178, 0, + 0, 0, 0, -89, 0, 2591, 2233, 0, 2353, -70, + 2486, -9, -42, -4, 5, 2323, -14, 0, 2323, 0, + 2323, -12, 0, 2383, 2413, 2648, 2669, 0, 0, 2693, + 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, + 2693, 2693, 2693, 2323, 2323, 2323, 2323, 0, -127, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -46, -46, + -200, -200, -200, -88, -87, 2498, 2693, 23, 0, -5, + 28, 0, 2513, 0, -210, 2606, 2525, 42, 0, 0, + 0, 0, 278, 0, 0, 2540, 278, 2263, 40, 2693, + 0, 33, 16, 2323, 2323, 2323, 2693, 12, 2693, -120, + 0, -247, 2171, 0, -215, 18, 13, 2323, 2693, 2681, + 2702, 2159, 0, 0, 2323, 0, 19, 0, 30, 0, + 0, 2323, 0, 0, 0, 0, -241, 2323, -178, 2323, + 2323, -114, -66, -61, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 36, 2, 0, 2198, 0, 37, -43, + -14, 2693, 0, 2693, 2552, 9, 0, 0, 0, 0, + 0, 2323, -88, 0, 0, 0, -178, -178, 2693, 41, + 0, 0, 0, }; static const short yyrindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1513, - 47, 20, 1571, 0, 0, 0, 0, 0, 0, 0, - 0, 1339, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1510, + 26, 1989, 1568, 0, 0, 0, 0, 0, 0, 0, + 0, 1336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 469, 585, 817, 875, 933, 0, 353, 0, 0, - 411, 0, 0, 1880, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 991, 0, 0, 0, + 0, 466, 582, 814, 872, 930, 0, 350, 0, 0, + 408, 0, 0, 1931, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1629, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, - 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, - 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 131, 0, 0, 0, 0, -102, 0, + 0, 0, 0, 0, 0, 1626, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, + 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, + 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 0, 0, 0, 0, -237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2342, 0, 0, 87, 0, 0, 0, 0, -212, - 1938, 1946, 1958, 1966, 1978, 1986, 1998, 2006, 2018, 2026, - 2038, 2046, 2058, 0, 0, 0, 0, 0, 136, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1397, 1455, - 1049, 1107, 1165, 1281, 701, 0, -214, 0, 0, 0, - 92, 0, 0, 0, 1716, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, -241, - 0, -216, 0, 0, 0, 0, -169, 0, -168, 0, - 0, 1834, 0, 0, 0, 0, 0, 80, 0, 286, - 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2443, 0, 0, 46, 0, 0, 0, 0, -212, + 35, 283, 2017, 2029, 2037, 2049, 2057, 2069, 2077, 2089, + 2097, 2109, 2117, 0, 0, 0, 0, 0, 133, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1394, 1452, + 1046, 1104, 1162, 1278, 698, 0, -235, 0, 0, 0, + 74, 0, 0, 0, 1713, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -118, -93, + 0, -216, 0, 0, 0, 0, -231, 0, -171, 0, + 0, 1885, 0, 0, 1831, 0, 0, 0, 43, 0, + 6, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1223, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -21, 18, - 0, -93, 0, 759, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2066, 0, 0, 0, - 0, + 0, 0, 0, 0, 0, 1220, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -126, 15, 0, -64, 0, 756, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2129, 0, + 0, 0, 0, }; static const short yygindex[] = { 0, - 21, 96, 0, -50, 17, 0, 134, 0, 0, -7, - -1, -190, 1, 0, 32, 0, 0, 0, 0, 0, - 0, 0, 142, 0, 213, -139, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, + 21, 39, 0, -50, 17, 0, 76, 0, 0, -7, + -1, -205, 1, 0, 32, 0, 0, 0, 0, 0, + 0, 0, 60, 0, 160, -139, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -#define YYTABLESIZE 2871 +#define YYTABLESIZE 2987 static const short yytable[] = { 79, 31, 134, 73, 73, 73, 80, 73, 176, 84, 161, - 85, 86, 163, 164, 94, 168, 95, 79, 79, 170, - 26, 90, 79, 79, 79, 31, 73, 44, 45, 176, - 73, 88, 89, 272, 142, 74, 75, 76, 135, 82, + 85, 86, 163, 164, 94, 168, 95, 297, 273, 170, + 26, 77, 77, 176, 90, 31, 73, 91, 77, 137, + 73, 88, 89, 92, 142, 74, 75, 76, 135, 82, 143, 260, 78, 78, 177, 26, 34, 34, 34, 78, - 136, 34, 34, 34, 278, 153, 138, 91, 157, 97, - 79, 140, 34, 126, 146, 166, 309, 44, 45, 84, - 145, 171, 149, 150, 86, 173, 154, 155, 156, 158, - 8, 9, 77, 162, 169, 78, 2, 136, 172, 34, - 186, 187, 132, 133, 174, 91, 90, 175, 190, 191, + 86, 34, 34, 34, 298, 153, 138, 137, 157, 97, + 311, 140, 34, 126, 146, 166, 137, 279, 2, 84, + 92, 171, 149, 150, 139, 173, 154, 155, 156, 158, + 44, 45, 86, 162, 169, 78, 301, 86, 172, 34, + 186, 187, 147, 91, 174, 132, 133, 175, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 188, 189, 291, 292, 293, 296, 209, 210, + 202, 203, 188, 189, 292, 293, 294, 330, 209, 210, 211, 212, 213, 214, 215, 73, 73, 73, 73, 73, - 328, 73, 91, 90, 226, 295, 289, 227, 141, 314, - 289, 308, 8, 9, 77, 216, 218, 233, 236, 78, - 86, 237, 315, 289, 297, 137, 77, 77, 219, 220, - 221, 222, 223, 77, 225, 80, 80, 246, 238, 250, - 80, 80, 80, 239, 240, 139, 257, 147, 241, 259, - 146, 250, 1, 148, 263, 250, 151, 2, 129, 130, - 131, 112, 282, 152, 132, 133, 284, 105, 106, 107, - 108, 109, 110, 111, 268, 269, 270, 271, 80, 181, - 8, 9, 77, 3, 4, 5, 142, 78, 182, 6, - 316, 289, 143, 185, 7, 8, 9, 10, 112, 11, - 12, 13, 14, 133, 15, 16, 17, 88, 88, 18, - 19, 20, 21, 208, 88, 224, 84, 229, 85, 325, - 289, 22, 23, 253, 250, 250, 250, 24, 232, 254, - 127, 128, 129, 130, 131, 92, 92, 227, 132, 133, - 44, 45, 2, 242, 305, 178, 93, 93, 33, 33, - 33, 250, 258, 33, 33, 33, 255, 310, 256, 312, - 313, 261, 274, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 11, 11, 11, 276, 311, - 275, 159, 244, 142, 44, 45, 2, 160, 289, 143, - 327, 33, 281, 216, 218, 290, 114, 287, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 14, 14, - 14, 294, 3, 4, 5, 301, 329, 330, 6, 300, - 306, 307, 317, 7, 8, 9, 10, 83, 11, 12, - 13, 14, 318, 15, 16, 17, 46, 47, 18, 19, - 20, 21, 48, 49, 50, 51, 52, 53, 324, 54, - 331, 286, 55, 56, 57, 58, 95, 160, 77, 95, - 95, 95, 95, 161, 47, 47, 47, 265, 319, 47, - 47, 47, 119, 120, 121, 122, 123, 124, 302, 47, - 47, 47, 47, 47, 47, 96, 0, 95, 95, 95, - 0, 0, 0, 95, 0, 0, 0, 0, 95, 95, - 95, 95, 0, 95, 95, 95, 95, 47, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 0, 95, 0, 0, 95, 95, 95, - 95, 43, 0, 0, 44, 45, 2, 0, 0, 51, - 51, 51, 0, 0, 51, 51, 51, 0, 0, 0, - 0, 0, 0, 0, 51, 51, 51, 51, 0, 0, - 0, 0, 3, 4, 5, 0, 0, 0, 6, 0, - 0, 0, 0, 7, 8, 9, 10, 0, 11, 12, - 13, 14, 51, 15, 16, 17, 46, 47, 18, 19, - 20, 21, 48, 49, 50, 51, 52, 53, 0, 54, - 0, 0, 55, 56, 57, 58, 159, 0, 0, 44, - 45, 2, 0, 0, 49, 49, 49, 0, 0, 49, - 49, 49, 0, 0, 0, 0, 0, 0, 0, 49, - 49, 49, 0, 0, 0, 0, 0, 3, 4, 5, - 0, 0, 0, 6, 0, 0, 0, 0, 7, 8, - 9, 10, 0, 11, 12, 13, 14, 49, 15, 16, - 17, 46, 47, 18, 19, 20, 21, 48, 49, 50, - 51, 52, 53, 0, 54, 0, 0, 55, 56, 57, - 58, 76, 76, 76, 0, 83, 76, 76, 76, 76, + 91, 73, 89, 89, 226, 44, 45, 227, 145, 89, + 93, 93, 310, 296, 290, 216, 218, 233, 236, 316, + 290, 237, 119, 120, 121, 122, 123, 124, 219, 220, + 221, 222, 223, 148, 225, 79, 79, 246, 238, 250, + 79, 79, 79, 239, 240, 151, 257, 152, 241, 259, + 146, 250, 1, 181, 263, 250, 112, 2, 8, 9, + 77, 182, 283, 185, 80, 80, 285, 317, 290, 80, + 80, 80, 318, 290, 269, 270, 271, 272, 79, 133, + 8, 9, 77, 3, 4, 5, 142, 78, 224, 6, + 327, 290, 143, 208, 7, 8, 9, 10, 229, 11, + 12, 13, 14, 242, 15, 16, 17, 80, 232, 18, + 19, 20, 21, 129, 130, 131, 84, 253, 85, 132, + 133, 22, 23, 254, 250, 250, 250, 24, 255, 178, + 44, 45, 2, 258, 49, 49, 49, 256, 227, 49, + 49, 49, 141, 94, 94, 307, 8, 9, 77, 49, + 49, 49, 250, 78, 11, 11, 11, 275, 312, 261, + 314, 315, 277, 35, 35, 35, 276, 290, 35, 35, + 35, 14, 14, 14, 282, 288, 319, 49, 159, 35, + 313, 44, 45, 2, 160, 142, 291, 295, 303, 302, + 84, 143, 329, 287, 308, 216, 218, 304, 105, 106, + 107, 108, 109, 110, 111, 309, 35, 320, 326, 3, + 4, 5, 333, 321, 266, 6, 161, 77, 331, 332, + 7, 8, 9, 10, 96, 11, 12, 13, 14, 112, + 15, 16, 17, 46, 47, 18, 19, 20, 21, 48, + 49, 50, 51, 52, 53, 162, 54, 0, 0, 55, + 56, 57, 58, 96, 0, 0, 96, 96, 96, 96, + 0, 47, 47, 47, 0, 0, 47, 47, 47, 0, + 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, + 47, 47, 0, 0, 96, 96, 96, 0, 0, 0, + 96, 0, 0, 0, 0, 96, 96, 96, 96, 0, + 96, 96, 96, 96, 47, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 0, 96, 0, 0, 96, 96, 96, 96, 43, 0, + 0, 44, 45, 2, 0, 0, 51, 51, 51, 0, + 0, 51, 51, 51, 0, 0, 0, 0, 0, 0, + 0, 51, 51, 51, 51, 0, 0, 0, 0, 3, + 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, + 7, 8, 9, 10, 0, 11, 12, 13, 14, 51, + 15, 16, 17, 46, 47, 18, 19, 20, 21, 48, + 49, 50, 51, 52, 53, 0, 54, 0, 0, 55, + 56, 57, 58, 159, 0, 0, 44, 45, 2, 0, + 0, 36, 36, 36, 0, 0, 36, 36, 36, 0, + 127, 128, 129, 130, 131, 0, 0, 36, 132, 133, + 0, 0, 0, 0, 3, 4, 5, 0, 0, 0, + 6, 0, 0, 0, 0, 7, 8, 9, 10, 0, + 11, 12, 13, 14, 36, 15, 16, 17, 46, 47, + 18, 19, 20, 21, 48, 49, 50, 51, 52, 53, + 0, 54, 0, 0, 55, 56, 57, 58, 76, 76, + 76, 0, 84, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, 0, 76, + 76, 76, 76, 76, 76, 0, 76, 76, 76, 76, + 76, 76, 76, 0, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, 76, 0, - 76, 76, 76, 0, 0, 76, 76, 76, 76, 119, - 119, 119, 0, 83, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 0, 119, 119, 119, - 119, 119, 119, 119, 0, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 0, 119, 119, - 119, 0, 0, 119, 119, 119, 119, 59, 59, 59, - 0, 83, 59, 59, 59, 59, 59, 59, 59, 59, + 0, 0, 76, 76, 76, 76, 120, 120, 120, 0, + 84, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 0, 120, 120, 120, 120, 120, 120, + 120, 0, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 0, 120, 120, 120, 0, 0, + 120, 120, 120, 120, 59, 59, 59, 0, 84, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 0, 59, 59, 59, 59, 59, - 59, 59, 0, 59, 59, 59, 0, 59, 59, 59, - 59, 59, 59, 59, 59, 0, 59, 59, 59, 0, - 0, 59, 59, 59, 59, 59, 59, 59, 0, 83, - 59, 59, 59, 76, 76, 76, 76, 76, 76, 76, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 0, 59, 59, 59, 59, 59, 59, 59, - 0, 0, 59, 59, 0, 59, 59, 59, 59, 59, - 59, 59, 59, 0, 59, 59, 59, 0, 0, 59, - 59, 59, 59, 123, 123, 123, 0, 0, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 0, 123, 123, 123, 123, 123, 123, 123, 0, 123, - 123, 123, 0, 123, 123, 123, 123, 123, 123, 123, - 123, 0, 123, 123, 123, 0, 0, 123, 123, 123, - 123, 142, 142, 142, 0, 0, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 0, 142, - 142, 142, 142, 142, 142, 142, 0, 0, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, - 142, 142, 142, 0, 0, 142, 142, 142, 142, 67, - 67, 67, 0, 0, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, - 67, 67, 67, 67, 0, 67, 67, 0, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, - 67, 0, 0, 67, 67, 67, 67, 112, 112, 112, - 0, 0, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 0, 112, 112, 112, 112, 112, - 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, - 112, 112, 112, 112, 112, 0, 112, 112, 112, 0, - 0, 112, 112, 112, 112, 69, 69, 69, 0, 0, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 0, 69, 69, 69, 69, 69, 69, 69, - 0, 69, 0, 0, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 0, 69, 69, 69, 0, 0, 69, - 69, 69, 69, 70, 70, 70, 0, 0, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 0, 70, 70, 70, 70, 70, 70, 70, 0, 70, - 0, 0, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 0, 70, 70, 70, 0, 0, 70, 70, 70, - 70, 68, 68, 68, 0, 0, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 0, 68, - 68, 68, 68, 68, 68, 68, 0, 68, 0, 0, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 0, - 68, 68, 68, 0, 0, 68, 68, 68, 68, 143, - 143, 143, 0, 0, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 0, 143, 143, 143, - 143, 143, 143, 143, 0, 143, 0, 0, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 0, 143, 143, - 143, 0, 0, 143, 143, 143, 143, 64, 64, 64, - 0, 0, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, - 64, 64, 0, 64, 0, 0, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 0, 64, 64, 64, 0, - 0, 64, 64, 64, 64, 65, 65, 65, 0, 0, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 0, 65, 65, 65, 65, 65, 65, 65, - 0, 65, 0, 0, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 0, 65, 65, 65, 0, 0, 65, - 65, 65, 65, 66, 66, 66, 0, 0, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 0, 66, 66, 66, 66, 66, 66, 66, 0, 66, - 0, 0, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 0, 66, 66, 66, 0, 0, 66, 66, 66, - 66, 112, 112, 112, 0, 0, 112, 112, 112, 111, - 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 0, 112, - 112, 112, 112, 112, 112, 112, 0, 0, 112, 112, - 0, 112, 112, 112, 112, 112, 112, 112, 112, 0, - 112, 112, 112, 0, 0, 112, 112, 112, 112, 144, - 144, 144, 0, 0, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 0, 144, 144, 144, - 144, 144, 144, 144, 0, 144, 144, 144, 144, 0, - 0, 0, 144, 144, 144, 144, 0, 0, 144, 144, - 144, 0, 0, 144, 144, 144, 144, 141, 141, 141, - 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, - 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, - 141, 141, 141, 141, 0, 141, 141, 141, 141, 141, - 141, 141, 0, 0, 141, 141, 141, 0, 0, 0, - 141, 141, 141, 141, 0, 0, 141, 141, 141, 0, - 0, 141, 141, 141, 141, 62, 62, 62, 0, 0, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 0, 62, 62, 62, 0, 0, 0, 62, - 0, 62, 0, 0, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 0, 62, 62, 62, 0, 0, 62, - 62, 62, 62, 63, 63, 63, 0, 0, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 0, 63, 63, 63, 0, 0, 0, 63, 0, 63, - 0, 0, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 0, 63, 63, 63, 0, 0, 63, 63, 63, - 63, 123, 123, 123, 0, 0, 123, 123, 123, 0, - 0, 0, 0, 0, 0, 0, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 0, 123, - 123, 123, 123, 123, 123, 123, 0, 0, 123, 123, - 0, 123, 123, 123, 123, 123, 123, 123, 123, 0, - 123, 123, 123, 0, 0, 123, 123, 123, 123, 55, - 55, 55, 0, 0, 55, 55, 55, 0, 0, 0, - 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 0, 55, 0, 0, - 0, 0, 0, 55, 0, 0, 0, 0, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, - 55, 0, 0, 55, 55, 55, 55, 56, 56, 56, - 0, 0, 56, 56, 56, 0, 0, 0, 0, 0, - 0, 0, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 0, 56, 0, 44, 45, 0, - 0, 56, 0, 0, 0, 0, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 0, 56, 56, 56, 0, - 0, 56, 56, 56, 56, 3, 4, 5, 0, 0, - 0, 6, 0, 0, 0, 0, 7, 8, 9, 10, - 0, 11, 12, 13, 14, 0, 15, 16, 17, 0, - 0, 18, 19, 20, 21, 59, 0, 0, 83, 0, - 0, 0, 76, 76, 76, 76, 76, 76, 76, 59, - 0, 59, 59, 0, 59, 59, 59, 59, 59, 59, - 59, 0, 59, 59, 59, 59, 59, 59, 59, 165, - 0, 59, 59, 0, 59, 59, 59, 0, 59, 59, + 59, 0, 59, 59, 59, 59, 59, 59, 59, 0, + 59, 59, 59, 0, 59, 59, 59, 59, 59, 59, 59, 59, 0, 59, 59, 59, 0, 0, 59, 59, - 59, 59, 0, 0, 0, 0, 3, 4, 5, 234, - 0, 0, 6, 0, 0, 0, 0, 7, 8, 9, - 10, 0, 11, 12, 13, 14, 0, 15, 16, 17, - 0, 0, 18, 19, 20, 21, 3, 4, 5, 0, - 0, 0, 6, 0, 0, 0, 0, 7, 8, 9, - 10, 0, 11, 12, 13, 235, 0, 15, 16, 17, - 0, 0, 18, 19, 20, 21, 83, 0, 0, 0, - 76, 76, 76, 76, 76, 76, 76, 59, 0, 59, + 59, 59, 59, 59, 59, 0, 84, 59, 59, 59, + 76, 76, 76, 76, 76, 76, 76, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 0, 59, 59, 59, 59, 59, 59, 59, 0, 0, 59, - 59, 0, 59, 59, 59, 0, 59, 59, 59, 59, - 0, 59, 59, 59, 123, 0, 59, 59, 59, 59, - 0, 0, 0, 123, 0, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 0, 123, 123, 123, 123, - 123, 123, 123, 0, 0, 123, 123, 0, 123, 123, - 123, 0, 123, 123, 123, 123, 0, 123, 123, 123, - 0, 0, 123, 123, 123, 123, 35, 35, 35, 0, - 0, 35, 35, 35, 36, 36, 36, 0, 0, 36, - 36, 36, 35, 0, 0, 0, 37, 37, 37, 0, - 36, 37, 37, 37, 38, 38, 38, 0, 0, 38, - 38, 38, 37, 0, 0, 0, 39, 39, 39, 35, - 38, 39, 39, 39, 40, 40, 40, 36, 0, 40, - 40, 40, 39, 0, 0, 0, 124, 124, 124, 37, - 40, 124, 124, 124, 125, 125, 125, 38, 0, 125, - 125, 125, 124, 0, 0, 0, 126, 126, 126, 39, - 125, 126, 126, 126, 127, 127, 127, 40, 0, 127, - 127, 127, 126, 0, 0, 0, 128, 128, 128, 124, - 127, 128, 128, 128, 129, 129, 129, 125, 0, 129, - 129, 129, 128, 0, 0, 0, 130, 130, 130, 126, - 129, 130, 130, 130, 54, 54, 54, 127, 0, 54, - 54, 54, 130, 0, 0, 0, 0, 179, 0, 128, - 54, 0, 0, 0, 0, 0, 114, 129, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 0, 130, - 0, 0, 0, 0, 298, 0, 0, 54, 0, 0, - 0, 0, 0, 114, 180, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 0, 0, 0, 0, - 0, 321, 105, 106, 107, 108, 109, 110, 111, 0, - 114, 299, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 0, 0, 0, 0, 0, 3, 4, - 5, 0, 0, 112, 6, 0, 0, 178, 322, 7, - 8, 9, 71, 0, 11, 12, 13, 72, 81, 15, - 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, - 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, - 8, 9, 10, 245, 11, 12, 13, 14, 0, 15, - 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, - 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, - 8, 9, 10, 285, 11, 12, 13, 14, 0, 15, - 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, - 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, - 8, 9, 71, 0, 11, 12, 13, 72, 0, 15, - 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, - 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, - 8, 9, 10, 0, 11, 12, 13, 14, 0, 15, - 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, - 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, - 8, 9, 248, 0, 11, 12, 13, 14, 0, 15, - 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, - 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, - 8, 9, 10, 0, 11, 12, 13, 262, 0, 15, - 16, 17, 0, 0, 18, 19, 20, 21, 168, 168, - 168, 0, 0, 0, 168, 0, 0, 0, 0, 168, - 168, 168, 168, 0, 168, 168, 168, 168, 0, 168, - 168, 168, 0, 0, 168, 168, 168, 168, 114, 0, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 114, 0, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 0, 0, 114, 180, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 114, 273, 115, + 59, 0, 59, 59, 59, 59, 59, 59, 59, 59, + 0, 59, 59, 59, 0, 0, 59, 59, 59, 59, + 124, 124, 124, 0, 0, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 0, 124, 124, + 124, 124, 124, 124, 124, 0, 124, 124, 124, 0, + 124, 124, 124, 124, 124, 124, 124, 124, 0, 124, + 124, 124, 0, 0, 124, 124, 124, 124, 143, 143, + 143, 0, 0, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 0, 143, 143, 143, 143, + 143, 143, 143, 0, 0, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 0, 143, 143, 143, + 0, 0, 143, 143, 143, 143, 67, 67, 67, 0, + 0, 67, 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 0, 67, 67, 67, 67, 67, 67, + 67, 0, 67, 67, 0, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 0, 67, 67, 67, 0, 0, + 67, 67, 67, 67, 113, 113, 113, 0, 0, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 0, 113, 113, 113, 113, 113, 113, 113, 0, + 113, 113, 113, 0, 113, 113, 113, 113, 113, 113, + 113, 113, 0, 113, 113, 113, 0, 0, 113, 113, + 113, 113, 69, 69, 69, 0, 0, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, + 69, 69, 69, 69, 69, 69, 69, 0, 69, 0, + 0, 69, 69, 69, 69, 69, 69, 69, 69, 69, + 0, 69, 69, 69, 0, 0, 69, 69, 69, 69, + 70, 70, 70, 0, 0, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 0, 70, 70, + 70, 70, 70, 70, 70, 0, 70, 0, 0, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 0, 70, + 70, 70, 0, 0, 70, 70, 70, 70, 68, 68, + 68, 0, 0, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 0, 68, 68, 68, 68, + 68, 68, 68, 0, 68, 0, 0, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 0, 68, 68, 68, + 0, 0, 68, 68, 68, 68, 144, 144, 144, 0, + 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 0, 144, 144, 144, 144, 144, 144, + 144, 0, 144, 0, 0, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 0, 144, 144, 144, 0, 0, + 144, 144, 144, 144, 64, 64, 64, 0, 0, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 0, 64, 64, 64, 64, 64, 64, 64, 0, + 64, 0, 0, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 0, 64, 64, 64, 0, 0, 64, 64, + 64, 64, 65, 65, 65, 0, 0, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 0, + 65, 65, 65, 65, 65, 65, 65, 0, 65, 0, + 0, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 0, 65, 65, 65, 0, 0, 65, 65, 65, 65, + 66, 66, 66, 0, 0, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 0, 66, 66, + 66, 66, 66, 66, 66, 0, 66, 0, 0, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 0, 66, + 66, 66, 0, 0, 66, 66, 66, 66, 113, 113, + 113, 0, 0, 113, 113, 113, 112, 112, 112, 112, + 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 0, 113, 113, 113, 113, + 113, 113, 113, 0, 0, 113, 113, 0, 113, 113, + 113, 113, 113, 113, 113, 113, 0, 113, 113, 113, + 0, 0, 113, 113, 113, 113, 145, 145, 145, 0, + 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 0, 145, 145, 145, 145, 145, 145, + 145, 0, 145, 145, 145, 145, 0, 0, 0, 145, + 145, 145, 145, 0, 0, 145, 145, 145, 0, 0, + 145, 145, 145, 145, 142, 142, 142, 0, 0, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 0, 142, 142, 142, 142, 142, 142, 142, 0, + 0, 142, 142, 142, 0, 0, 0, 142, 142, 142, + 142, 0, 0, 142, 142, 142, 0, 0, 142, 142, + 142, 142, 62, 62, 62, 0, 0, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 0, + 62, 62, 62, 0, 0, 0, 62, 0, 62, 0, + 0, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 0, 62, 62, 62, 0, 0, 62, 62, 62, 62, + 63, 63, 63, 0, 0, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 0, 63, 63, + 63, 0, 0, 0, 63, 0, 63, 0, 0, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 0, 63, + 63, 63, 0, 0, 63, 63, 63, 63, 124, 124, + 124, 0, 0, 124, 124, 124, 0, 0, 0, 0, + 0, 0, 0, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 0, 124, 124, 124, 124, + 124, 124, 124, 0, 0, 124, 124, 0, 124, 124, + 124, 124, 124, 124, 124, 124, 0, 124, 124, 124, + 0, 0, 124, 124, 124, 124, 55, 55, 55, 0, + 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, + 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 0, 55, 0, 0, 0, 0, 0, + 55, 0, 0, 0, 0, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 0, 55, 55, 55, 0, 0, + 55, 55, 55, 55, 56, 56, 56, 0, 0, 56, + 56, 56, 0, 0, 0, 0, 0, 0, 0, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 0, 56, 0, 44, 45, 0, 0, 56, 0, + 0, 0, 0, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 0, 56, 56, 56, 0, 0, 56, 56, + 56, 56, 3, 4, 5, 0, 0, 0, 6, 0, + 0, 0, 0, 7, 8, 9, 10, 0, 11, 12, + 13, 14, 0, 15, 16, 17, 0, 0, 18, 19, + 20, 21, 59, 0, 0, 84, 0, 0, 0, 76, + 76, 76, 76, 76, 76, 76, 59, 0, 59, 59, + 0, 59, 59, 59, 59, 59, 59, 59, 0, 59, + 59, 59, 59, 59, 59, 59, 165, 0, 59, 59, + 0, 59, 59, 59, 0, 59, 59, 59, 59, 0, + 59, 59, 59, 0, 0, 59, 59, 59, 59, 0, + 0, 0, 0, 3, 4, 5, 234, 0, 0, 6, + 0, 0, 0, 0, 7, 8, 9, 10, 0, 11, + 12, 13, 14, 0, 15, 16, 17, 0, 0, 18, + 19, 20, 21, 3, 4, 5, 0, 0, 0, 6, + 0, 0, 0, 0, 7, 8, 9, 10, 0, 11, + 12, 13, 235, 0, 15, 16, 17, 0, 0, 18, + 19, 20, 21, 84, 0, 59, 0, 76, 76, 76, + 76, 76, 76, 76, 59, 0, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 0, 59, 59, 59, + 59, 59, 59, 59, 0, 0, 59, 59, 0, 59, + 59, 59, 0, 59, 59, 59, 59, 0, 59, 59, + 59, 0, 0, 59, 59, 59, 59, 84, 0, 0, + 0, 76, 76, 76, 76, 76, 76, 76, 59, 0, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 0, 59, 59, 59, 59, 59, 59, 59, 0, 0, + 59, 59, 0, 59, 59, 59, 0, 59, 59, 59, + 59, 0, 59, 59, 59, 124, 0, 59, 59, 59, + 59, 0, 0, 0, 124, 0, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 0, 124, 124, 124, + 124, 124, 124, 124, 0, 0, 124, 124, 0, 124, + 124, 124, 0, 124, 124, 124, 124, 0, 124, 124, + 124, 0, 0, 124, 124, 124, 124, 33, 33, 33, + 0, 0, 33, 33, 33, 0, 0, 0, 0, 0, + 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 0, 37, 37, 37, 0, 0, + 37, 37, 37, 0, 0, 0, 0, 38, 38, 38, + 33, 37, 38, 38, 38, 39, 39, 39, 0, 0, + 39, 39, 39, 38, 0, 0, 0, 40, 40, 40, + 0, 39, 40, 40, 40, 125, 125, 125, 37, 0, + 125, 125, 125, 40, 0, 0, 0, 126, 126, 126, + 38, 125, 126, 126, 126, 127, 127, 127, 39, 0, + 127, 127, 127, 126, 0, 0, 0, 128, 128, 128, + 40, 127, 128, 128, 128, 129, 129, 129, 125, 0, + 129, 129, 129, 128, 0, 0, 0, 130, 130, 130, + 126, 129, 130, 130, 130, 131, 131, 131, 127, 0, + 131, 131, 131, 130, 0, 0, 0, 54, 54, 54, + 128, 131, 54, 54, 54, 0, 0, 0, 129, 0, + 0, 0, 0, 54, 0, 0, 0, 0, 179, 0, + 130, 0, 0, 0, 0, 0, 0, 114, 131, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 0, - 0, 0, 114, 277, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 114, 280, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 44, 45, 0, 0, - 283, 117, 118, 119, 120, 121, 122, 123, 124, 279, - 0, 114, 326, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 114, 0, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 113, 98, 99, 100, 101, - 102, 103, 104, 0, 114, 0, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 266, 0, 0, 0, - 0, 0, 0, 0, 0, 114, 0, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 267, 0, 0, - 0, 0, 0, 0, 0, 0, 114, 0, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 114, 304, + 54, 0, 0, 0, 0, 299, 117, 118, 119, 120, + 121, 122, 123, 124, 114, 180, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 0, 0, 0, 0, + 0, 0, 323, 105, 106, 107, 108, 109, 110, 111, + 0, 114, 300, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 0, 0, 0, 0, 0, 3, + 4, 5, 0, 0, 112, 6, 0, 0, 178, 324, + 7, 8, 9, 71, 0, 11, 12, 13, 72, 81, + 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, + 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, + 7, 8, 9, 10, 245, 11, 12, 13, 14, 0, + 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, + 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, + 7, 8, 9, 10, 286, 11, 12, 13, 14, 0, + 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, + 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, + 7, 8, 9, 71, 0, 11, 12, 13, 72, 0, + 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, + 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, + 7, 8, 9, 10, 0, 11, 12, 13, 14, 0, + 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, + 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, + 7, 8, 9, 248, 0, 11, 12, 13, 14, 0, + 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, + 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, + 7, 8, 9, 10, 0, 11, 12, 13, 262, 0, + 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, + 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, + 7, 8, 9, 10, 0, 11, 12, 13, 265, 0, + 15, 16, 17, 0, 0, 18, 19, 20, 21, 169, + 169, 169, 0, 0, 0, 169, 0, 0, 0, 0, + 169, 169, 169, 169, 0, 169, 169, 169, 169, 0, + 169, 169, 169, 0, 0, 169, 169, 169, 169, 114, + 0, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 114, 0, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 0, 0, 114, 180, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 114, 274, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 0, 0, 0, 114, 278, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 114, 281, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 44, 45, 0, + 0, 284, 98, 99, 100, 101, 102, 103, 104, 0, + 244, 0, 114, 328, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 114, 280, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 0, 0, 0, 114, + 0, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 113, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 116, 117, 118, 119, 120, 121, 122, 123, - 124, + 123, 124, 267, 0, 0, 0, 0, 0, 0, 0, + 0, 114, 0, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 268, 0, 0, 0, 0, 0, 0, + 0, 0, 114, 0, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 114, 306, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 114, 0, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 116, 117, + 118, 119, 120, 121, 122, 123, 124, }; static const short yycheck[] = { 7, 0, 265, 4, 5, 6, 7, 8, 265, 10, 60, - 10, 298, 63, 64, 306, 66, 308, 259, 260, 70, - 0, 301, 264, 265, 266, 25, 28, 259, 260, 265, - 32, 15, 16, 224, 42, 4, 5, 6, 302, 8, + 10, 298, 63, 64, 306, 66, 308, 265, 224, 70, + 0, 259, 260, 265, 301, 25, 28, 301, 266, 265, + 32, 15, 16, 265, 42, 4, 5, 6, 302, 8, 42, 181, 259, 260, 302, 25, 259, 260, 261, 266, - 265, 264, 265, 266, 278, 55, 36, 301, 58, 28, - 302, 41, 275, 32, 43, 65, 302, 259, 260, 71, - 262, 71, 51, 52, 298, 77, 55, 56, 57, 58, - 299, 300, 301, 62, 68, 302, 261, 302, 72, 302, - 90, 91, 296, 297, 78, 265, 265, 81, 98, 99, + 298, 264, 265, 266, 302, 55, 36, 301, 58, 28, + 302, 41, 275, 32, 43, 65, 302, 278, 261, 71, + 302, 71, 51, 52, 301, 77, 55, 56, 57, 58, + 259, 260, 298, 62, 68, 302, 302, 298, 72, 302, + 90, 91, 301, 265, 78, 296, 297, 81, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 92, 93, 254, 255, 256, 265, 118, 119, + 110, 111, 92, 93, 254, 255, 256, 323, 118, 119, 120, 121, 122, 123, 124, 127, 128, 129, 130, 131, - 321, 133, 302, 302, 134, 264, 265, 137, 295, 264, - 265, 281, 299, 300, 301, 125, 125, 147, 148, 306, - 298, 151, 264, 265, 302, 301, 259, 260, 127, 128, - 129, 130, 131, 266, 133, 259, 260, 167, 152, 169, - 264, 265, 266, 152, 153, 301, 176, 301, 157, 179, - 159, 181, 256, 301, 184, 185, 301, 261, 290, 291, - 292, 298, 243, 306, 296, 297, 247, 267, 268, 269, - 270, 271, 272, 273, 204, 205, 206, 207, 302, 263, - 299, 300, 301, 287, 288, 289, 224, 306, 301, 293, - 264, 265, 224, 301, 298, 299, 300, 301, 298, 303, - 304, 305, 306, 297, 308, 309, 310, 259, 260, 313, - 314, 315, 316, 306, 266, 287, 248, 306, 248, 264, - 265, 325, 326, 318, 254, 255, 256, 331, 295, 263, - 288, 289, 290, 291, 292, 259, 260, 267, 296, 297, - 259, 260, 261, 323, 274, 302, 259, 260, 259, 260, - 261, 281, 278, 264, 265, 266, 263, 287, 263, 289, - 290, 302, 265, 274, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 259, 260, 261, 265, 288, - 302, 256, 260, 321, 259, 260, 261, 262, 265, 321, - 320, 302, 263, 303, 303, 301, 274, 266, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 259, 260, - 261, 306, 287, 288, 289, 306, 325, 326, 293, 302, - 306, 306, 298, 298, 299, 300, 301, 263, 303, 304, - 305, 306, 302, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 302, 324, - 302, 248, 327, 328, 329, 330, 256, 302, 302, 259, - 260, 261, 262, 302, 259, 260, 261, 185, 303, 264, - 265, 266, 280, 281, 282, 283, 284, 285, 267, 274, - 275, 276, 277, 278, 279, 25, -1, 287, 288, 289, - -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, - 300, 301, -1, 303, 304, 305, 306, 302, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, -1, 324, -1, -1, 327, 328, 329, - 330, 256, -1, -1, 259, 260, 261, -1, -1, 259, - 260, 261, -1, -1, 264, 265, 266, -1, -1, -1, - -1, -1, -1, -1, 274, 275, 276, 277, -1, -1, - -1, -1, 287, 288, 289, -1, -1, -1, 293, -1, - -1, -1, -1, 298, 299, 300, 301, -1, 303, 304, - 305, 306, 302, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, -1, 324, - -1, -1, 327, 328, 329, 330, 256, -1, -1, 259, - 260, 261, -1, -1, 259, 260, 261, -1, -1, 264, - 265, 266, -1, -1, -1, -1, -1, -1, -1, 274, - 275, 276, -1, -1, -1, -1, -1, 287, 288, 289, - -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, - 300, 301, -1, 303, 304, 305, 306, 302, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, -1, 324, -1, -1, 327, 328, 329, - 330, 259, 260, 261, -1, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, - 288, 289, 290, 291, 292, 293, -1, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, - 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, - 260, 261, -1, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, - 290, 291, 292, 293, -1, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, - 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, - -1, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, - 292, 293, -1, 295, 296, 297, -1, 299, 300, 301, - 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, - -1, 313, 314, 315, 316, 259, 260, 261, -1, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, - -1, -1, 296, 297, -1, 299, 300, 301, 302, 303, - 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, - 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, - 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, - 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, - 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, - 288, 289, 290, 291, 292, 293, -1, -1, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, - 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, - 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, - 290, 291, 292, 293, -1, 295, 296, -1, 298, 299, - 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, - 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, - -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, - 292, 293, -1, 295, 296, 297, -1, 299, 300, 301, - 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, - -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, - -1, 295, -1, -1, 298, 299, 300, 301, 302, 303, - 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, - 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, - -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, - 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, - 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, - 288, 289, 290, 291, 292, 293, -1, 295, -1, -1, - 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, - 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, - 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, - 290, 291, 292, 293, -1, 295, -1, -1, 298, 299, - 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, - 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, - -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, - 292, 293, -1, 295, -1, -1, 298, 299, 300, 301, - 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, - -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, - -1, 295, -1, -1, 298, 299, 300, 301, 302, 303, - 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, - 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, - -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, - 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, - 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, - 288, 289, 290, 291, 292, 293, -1, -1, 296, 297, - -1, 299, 300, 301, 302, 303, 304, 305, 306, -1, - 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, - 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, - 290, 291, 292, 293, -1, 295, 296, 297, 298, -1, - -1, -1, 302, 303, 304, 305, -1, -1, 308, 309, - 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, - -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, - 292, 293, -1, -1, 296, 297, 298, -1, -1, -1, - 302, 303, 304, 305, -1, -1, 308, 309, 310, -1, - -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, -1, 287, 288, 289, -1, -1, -1, 293, - -1, 295, -1, -1, 298, 299, 300, 301, 302, 303, - 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, - 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - -1, 287, 288, 289, -1, -1, -1, 293, -1, 295, - -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, - 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, - 316, 259, 260, 261, -1, -1, 264, 265, 266, -1, + 302, 133, 259, 260, 134, 259, 260, 137, 262, 266, + 259, 260, 282, 264, 265, 125, 125, 147, 148, 264, + 265, 151, 280, 281, 282, 283, 284, 285, 127, 128, + 129, 130, 131, 301, 133, 259, 260, 167, 152, 169, + 264, 265, 266, 152, 153, 301, 176, 306, 157, 179, + 159, 181, 256, 263, 184, 185, 298, 261, 299, 300, + 301, 301, 243, 301, 259, 260, 247, 264, 265, 264, + 265, 266, 264, 265, 204, 205, 206, 207, 302, 297, + 299, 300, 301, 287, 288, 289, 224, 306, 287, 293, + 264, 265, 224, 306, 298, 299, 300, 301, 306, 303, + 304, 305, 306, 323, 308, 309, 310, 302, 295, 313, + 314, 315, 316, 290, 291, 292, 248, 318, 248, 296, + 297, 325, 326, 263, 254, 255, 256, 331, 263, 302, + 259, 260, 261, 278, 259, 260, 261, 263, 268, 264, + 265, 266, 295, 259, 260, 275, 299, 300, 301, 274, + 275, 276, 282, 306, 259, 260, 261, 265, 288, 302, + 290, 291, 265, 259, 260, 261, 302, 265, 264, 265, + 266, 259, 260, 261, 263, 266, 298, 302, 256, 275, + 289, 259, 260, 261, 262, 323, 301, 306, 306, 302, + 263, 323, 322, 248, 306, 305, 305, 268, 267, 268, + 269, 270, 271, 272, 273, 306, 302, 302, 302, 287, + 288, 289, 302, 305, 185, 293, 302, 302, 327, 328, + 298, 299, 300, 301, 25, 303, 304, 305, 306, 298, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 302, 324, -1, -1, 327, + 328, 329, 330, 256, -1, -1, 259, 260, 261, 262, + -1, 259, 260, 261, -1, -1, 264, 265, 266, -1, -1, -1, -1, -1, -1, -1, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, - 288, 289, 290, 291, 292, 293, -1, -1, 296, 297, - -1, 299, 300, 301, 302, 303, 304, 305, 306, -1, - 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, - 260, 261, -1, -1, 264, 265, 266, -1, -1, -1, - -1, -1, -1, -1, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, -1, 287, -1, -1, - -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, - 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, + 278, 279, -1, -1, 287, 288, 289, -1, -1, -1, + 293, -1, -1, -1, -1, 298, 299, 300, 301, -1, + 303, 304, 305, 306, 302, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + -1, 324, -1, -1, 327, 328, 329, 330, 256, -1, + -1, 259, 260, 261, -1, -1, 259, 260, 261, -1, + -1, 264, 265, 266, -1, -1, -1, -1, -1, -1, + -1, 274, 275, 276, 277, -1, -1, -1, -1, 287, + 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, + 298, 299, 300, 301, -1, 303, 304, 305, 306, 302, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, -1, 324, -1, -1, 327, + 328, 329, 330, 256, -1, -1, 259, 260, 261, -1, + -1, 259, 260, 261, -1, -1, 264, 265, 266, -1, + 288, 289, 290, 291, 292, -1, -1, 275, 296, 297, + -1, -1, -1, -1, 287, 288, 289, -1, -1, -1, + 293, -1, -1, -1, -1, 298, 299, 300, 301, -1, + 303, 304, 305, 306, 302, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + -1, 324, -1, -1, 327, 328, 329, 330, 259, 260, + 261, -1, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, + 291, 292, 293, -1, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, + 293, -1, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, + 313, 314, 315, 316, 259, 260, 261, -1, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, + 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, + 315, 316, 259, 260, 261, -1, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, + 287, 288, 289, 290, 291, 292, 293, -1, -1, 296, + 297, -1, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, + 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, + 289, 290, 291, 292, 293, -1, 295, 296, 297, -1, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, + 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, + 291, 292, 293, -1, -1, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, + -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, + 293, -1, 295, 296, -1, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, + 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, + 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, + 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, + 287, 288, 289, 290, 291, 292, 293, -1, 295, -1, + -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, + 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, + 289, 290, 291, 292, 293, -1, 295, -1, -1, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, + 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, + 291, 292, 293, -1, 295, -1, -1, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, + -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, + 293, -1, 295, -1, -1, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, + 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, + 295, -1, -1, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, + 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, + 287, 288, 289, 290, 291, 292, 293, -1, 295, -1, + -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, + 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, + 289, 290, 291, 292, 293, -1, 295, -1, -1, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, + 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, + 291, 292, 293, -1, -1, 296, 297, -1, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, + -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, + 293, -1, 295, 296, 297, 298, -1, -1, -1, 302, + 303, 304, 305, -1, -1, 308, 309, 310, -1, -1, + 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, + -1, 296, 297, 298, -1, -1, -1, 302, 303, 304, + 305, -1, -1, 308, 309, 310, -1, -1, 313, 314, + 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, + 287, 288, 289, -1, -1, -1, 293, -1, 295, -1, + -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, + 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, + 289, -1, -1, -1, 293, -1, 295, -1, -1, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, + 261, -1, -1, 264, 265, 266, -1, -1, -1, -1, + -1, -1, -1, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, + 291, 292, 293, -1, -1, 296, 297, -1, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, + -1, 264, 265, 266, -1, -1, -1, -1, -1, -1, + -1, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, -1, 287, -1, -1, -1, -1, -1, + 293, -1, -1, -1, -1, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, + 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, + 265, 266, -1, -1, -1, -1, -1, -1, -1, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, -1, 287, -1, 259, 260, -1, -1, 293, -1, + -1, -1, -1, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, + 315, 316, 287, 288, 289, -1, -1, -1, 293, -1, + -1, -1, -1, 298, 299, 300, 301, -1, 303, 304, + 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, + 315, 316, 260, -1, -1, 263, -1, -1, -1, 267, + 268, 269, 270, 271, 272, 273, 274, -1, 276, 277, + -1, 279, 280, 281, 282, 283, 284, 285, -1, 287, + 288, 289, 290, 291, 292, 293, 260, -1, 296, 297, + -1, 299, 300, 301, -1, 303, 304, 305, 306, -1, + 308, 309, 310, -1, -1, 313, 314, 315, 316, -1, + -1, -1, -1, 287, 288, 289, 260, -1, -1, 293, + -1, -1, -1, -1, 298, 299, 300, 301, -1, 303, + 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, + 314, 315, 316, 287, 288, 289, -1, -1, -1, 293, + -1, -1, -1, -1, 298, 299, 300, 301, -1, 303, + 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, + 314, 315, 316, 263, -1, 265, -1, 267, 268, 269, + 270, 271, 272, 273, 274, -1, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, + 290, 291, 292, 293, -1, -1, 296, 297, -1, 299, + 300, 301, -1, 303, 304, 305, 306, -1, 308, 309, + 310, -1, -1, 313, 314, 315, 316, 263, -1, -1, + -1, 267, 268, 269, 270, 271, 272, 273, 274, -1, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + -1, 287, 288, 289, 290, 291, 292, 293, -1, -1, + 296, 297, -1, 299, 300, 301, -1, 303, 304, 305, + 306, -1, 308, 309, 310, 265, -1, 313, 314, 315, + 316, -1, -1, -1, 274, -1, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, + 290, 291, 292, 293, -1, -1, 296, 297, -1, 299, + 300, 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, -1, -1, -1, -1, -1, -1, -1, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, -1, 287, -1, 259, 260, -1, - -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, - 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, - -1, 313, 314, 315, 316, 287, 288, 289, -1, -1, - -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, - -1, 303, 304, 305, 306, -1, 308, 309, 310, -1, - -1, 313, 314, 315, 316, 260, -1, -1, 263, -1, - -1, -1, 267, 268, 269, 270, 271, 272, 273, 274, - -1, 276, 277, -1, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, 289, 290, 291, 292, 293, 260, - -1, 296, 297, -1, 299, 300, 301, -1, 303, 304, - 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, - 315, 316, -1, -1, -1, -1, 287, 288, 289, 260, - -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, - 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, - -1, -1, 313, 314, 315, 316, 287, 288, 289, -1, - -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, - 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, - -1, -1, 313, 314, 315, 316, 263, -1, -1, -1, - 267, 268, 269, 270, 271, 272, 273, 274, -1, 276, + 282, 283, 284, 285, -1, 259, 260, 261, -1, -1, + 264, 265, 266, -1, -1, -1, -1, 259, 260, 261, + 302, 275, 264, 265, 266, 259, 260, 261, -1, -1, + 264, 265, 266, 275, -1, -1, -1, 259, 260, 261, + -1, 275, 264, 265, 266, 259, 260, 261, 302, -1, + 264, 265, 266, 275, -1, -1, -1, 259, 260, 261, + 302, 275, 264, 265, 266, 259, 260, 261, 302, -1, + 264, 265, 266, 275, -1, -1, -1, 259, 260, 261, + 302, 275, 264, 265, 266, 259, 260, 261, 302, -1, + 264, 265, 266, 275, -1, -1, -1, 259, 260, 261, + 302, 275, 264, 265, 266, 259, 260, 261, 302, -1, + 264, 265, 266, 275, -1, -1, -1, 259, 260, 261, + 302, 275, 264, 265, 266, -1, -1, -1, 302, -1, + -1, -1, -1, 275, -1, -1, -1, -1, 265, -1, + 302, -1, -1, -1, -1, -1, -1, 274, 302, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, - 287, 288, 289, 290, 291, 292, 293, -1, -1, 296, - 297, -1, 299, 300, 301, -1, 303, 304, 305, 306, - -1, 308, 309, 310, 265, -1, 313, 314, 315, 316, - -1, -1, -1, 274, -1, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, - 291, 292, 293, -1, -1, 296, 297, -1, 299, 300, - 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, - -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, - -1, 264, 265, 266, 259, 260, 261, -1, -1, 264, - 265, 266, 275, -1, -1, -1, 259, 260, 261, -1, - 275, 264, 265, 266, 259, 260, 261, -1, -1, 264, - 265, 266, 275, -1, -1, -1, 259, 260, 261, 302, - 275, 264, 265, 266, 259, 260, 261, 302, -1, 264, - 265, 266, 275, -1, -1, -1, 259, 260, 261, 302, - 275, 264, 265, 266, 259, 260, 261, 302, -1, 264, - 265, 266, 275, -1, -1, -1, 259, 260, 261, 302, - 275, 264, 265, 266, 259, 260, 261, 302, -1, 264, - 265, 266, 275, -1, -1, -1, 259, 260, 261, 302, - 275, 264, 265, 266, 259, 260, 261, 302, -1, 264, - 265, 266, 275, -1, -1, -1, 259, 260, 261, 302, - 275, 264, 265, 266, 259, 260, 261, 302, -1, 264, - 265, 266, 275, -1, -1, -1, -1, 265, -1, 302, - 275, -1, -1, -1, -1, -1, 274, 302, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, -1, 302, - -1, -1, -1, -1, 265, -1, -1, 302, -1, -1, - -1, -1, -1, 274, 302, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, -1, -1, -1, -1, -1, - -1, 265, 267, 268, 269, 270, 271, 272, 273, -1, - 274, 302, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, -1, -1, -1, -1, -1, -1, 287, 288, - 289, -1, -1, 298, 293, -1, -1, 302, 302, 298, - 299, 300, 301, -1, 303, 304, 305, 306, 307, 308, - 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, - 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, - 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, - 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, - 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, - 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, - 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, - 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, - 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, - 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, - 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, - 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, - 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, - 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, - 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, - 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, - 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, - 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, - 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, - 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, - 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, - 309, 310, -1, -1, 313, 314, 315, 316, 274, -1, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 274, -1, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, -1, -1, -1, 274, 302, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 274, 302, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, - -1, -1, 274, 302, 276, 277, 278, 279, 280, 281, + 302, -1, -1, -1, -1, 265, 278, 279, 280, 281, 282, 283, 284, 285, 274, 302, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 259, 260, -1, -1, - 302, 278, 279, 280, 281, 282, 283, 284, 285, 260, + 280, 281, 282, 283, 284, 285, -1, -1, -1, -1, + -1, -1, 265, 267, 268, 269, 270, 271, 272, 273, -1, 274, 302, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 274, -1, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 265, 267, 268, 269, 270, - 271, 272, 273, -1, 274, -1, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 265, -1, -1, -1, - -1, -1, -1, -1, -1, 274, -1, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 265, -1, -1, - -1, -1, -1, -1, -1, -1, 274, -1, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 274, 275, + 283, 284, 285, -1, -1, -1, -1, -1, -1, 287, + 288, 289, -1, -1, 298, 293, -1, -1, 302, 302, + 298, 299, 300, 301, -1, 303, 304, 305, 306, 307, + 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, + 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, + 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, + 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, + 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, + 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, + 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, + 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, + 298, 299, 300, 301, -1, 303, 304, 305, 306, -1, + 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, + 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, + 298, 299, 300, 301, -1, 303, 304, 305, 306, -1, + 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, + 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, + 298, 299, 300, 301, -1, 303, 304, 305, 306, -1, + 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, + 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, + 298, 299, 300, 301, -1, 303, 304, 305, 306, -1, + 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, + 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, + 298, 299, 300, 301, -1, 303, 304, 305, 306, -1, + 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, + 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, + 298, 299, 300, 301, -1, 303, 304, 305, 306, -1, + 308, 309, 310, -1, -1, 313, 314, 315, 316, 274, + -1, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 274, -1, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, -1, -1, -1, 274, 302, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 274, 302, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + -1, -1, -1, 274, 302, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 274, 302, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 259, 260, -1, + -1, 302, 267, 268, 269, 270, 271, 272, 273, -1, + 260, -1, 274, 302, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 274, 260, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, -1, -1, -1, 274, + -1, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 265, -1, -1, -1, -1, -1, -1, -1, -1, 274, -1, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 277, 278, 279, 280, 281, 282, 283, 284, - 285, + 284, 285, 265, -1, -1, -1, -1, -1, -1, -1, + -1, 274, -1, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 265, -1, -1, -1, -1, -1, -1, + -1, -1, 274, -1, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 274, -1, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 277, 278, + 279, 280, 281, 282, 283, 284, 285, }; #define YYFINAL 25 #ifndef YYDEBUG @@ -1039,6 +1061,7 @@ static const char *yyrule[] = { "arglist : args", "args : expr", "args : args COMMA expr", +"builtin : BUILTIN mark LPAREN ID RPAREN", "builtin : BUILTIN mark LPAREN arglist RPAREN", "builtin : LENGTH", "mark :", @@ -1168,7 +1191,7 @@ typedef struct { } YYSTACKDATA; /* variables for the parser stack */ static YYSTACKDATA yystack; -#line 1162 "parse.y" +#line 1184 "parse.y" /* resize the code for a user function */ @@ -1185,7 +1208,7 @@ resize_fblock(FBLOCK *fbp) /* code_shrink() zfrees p */ if ( dump_code_flag ) - add_to_fdump_list(fbp) ; + add_to_fdump_list(fbp) ; } @@ -1407,7 +1430,7 @@ parse(void) if ( compile_error_count != 0 ) mawk_exit(2) ; if ( dump_code_flag ) { dump_code() ; mawk_exit(0) ; } } -#line 1410 "y.tab.c" +#line 1433 "y.tab.c" #if YYDEBUG #include /* needed for printf */ @@ -1807,7 +1830,7 @@ case 47: cp->type = C_STRING ; cp->ptr = p3[1].ptr ; cast_to_RE(cp) ; - no_leaks_re_ptr(cp->ptr) ; + no_leaks_re_ptr(cp->ptr) ; code_ptr -= 2 ; code2(_MATCH1, cp->ptr) ; ZFREE(cp) ; @@ -1866,10 +1889,10 @@ break; case 59: #line 397 "parse.y" { check_var(yystack.l_mark[0].stp) ; - yyval.start = code_offset ; - if ( is_local(yystack.l_mark[0].stp) ) - { code2op(L_PUSHI, yystack.l_mark[0].stp->offset) ; } - else code2(_PUSHI, yystack.l_mark[0].stp->stval.cp) ; + yyval.start = code_offset ; + if ( is_local(yystack.l_mark[0].stp) ) + { code2op(L_PUSHI, yystack.l_mark[0].stp->offset) ; } + else code2(_PUSHI, yystack.l_mark[0].stp->stval.cp) ; } break; case 60: @@ -1879,9 +1902,9 @@ break; case 61: #line 409 "parse.y" { yyval.start = code_offset ; - code2(_MATCH0, yystack.l_mark[0].ptr) ; - no_leaks_re_ptr(yystack.l_mark[0].ptr); - } + code2(_MATCH0, yystack.l_mark[0].ptr) ; + no_leaks_re_ptr(yystack.l_mark[0].ptr); + } break; case 62: #line 415 "parse.y" @@ -1970,6 +1993,30 @@ case 80: break; case 81: #line 477 "parse.y" + { BI_REC *p = yystack.l_mark[-4].bip ; + yyval.start = yystack.l_mark[-3].start ; + if ( (int)p->min_args > 1 || (int)p->max_args < 1 ) + compile_error( + "wrong number of arguments in call to %s" , + p->name ) ; + /* if we have length(array), emit a different code */ + if ( p->fp == bi_length && is_array(yystack.l_mark[-1].stp) ) { + code_array(yystack.l_mark[-1].stp) ; + { code1(_PUSHINT) ; code1(1) ; } + code1(A_LENGTH) ; + } else { + check_var(yystack.l_mark[-1].stp); + if ( is_local(yystack.l_mark[-1].stp) ) + { code1(L_PUSHI); code1(yystack.l_mark[-1].stp->offset) ; } + else { code2(_PUSHI, yystack.l_mark[-1].stp->stval.cp) ; } + if ( p->min_args != p->max_args ) /* variable args */ + { code1(_PUSHINT) ; code1(1) ; } + code2(_BUILTIN, p->fp) ; + } + } +break; +case 82: +#line 499 "parse.y" { BI_REC *p = yystack.l_mark[-4].bip ; yyval.start = yystack.l_mark[-3].start ; if ( (int)p->min_args > yystack.l_mark[-1].ival || (int)p->max_args < yystack.l_mark[-1].ival ) @@ -1981,20 +2028,20 @@ case 81: code2(_BUILTIN , p->fp) ; } break; -case 82: -#line 488 "parse.y" +case 83: +#line 510 "parse.y" { yyval.start = code_offset ; code1(_PUSHINT) ; code1(0) ; code2(_BUILTIN, yystack.l_mark[0].bip->fp) ; } break; -case 83: -#line 497 "parse.y" +case 84: +#line 519 "parse.y" { yyval.start = code_offset ; } break; -case 84: -#line 502 "parse.y" +case 85: +#line 524 "parse.y" { code2(_PRINT, yystack.l_mark[-4].fp) ; if ( yystack.l_mark[-4].fp == bi_printf && yystack.l_mark[-2].ival == 0 ) compile_error("no arguments in call to printf") ; @@ -2002,73 +2049,73 @@ case 84: yyval.start = yystack.l_mark[-3].start ; } break; -case 85: -#line 510 "parse.y" +case 86: +#line 532 "parse.y" { yyval.fp = bi_print ; print_flag = 1 ;} break; -case 86: -#line 511 "parse.y" +case 87: +#line 533 "parse.y" { yyval.fp = bi_printf ; print_flag = 1 ; } break; -case 87: -#line 514 "parse.y" +case 88: +#line 536 "parse.y" { code2op(_PUSHINT, yystack.l_mark[0].ival) ; } break; -case 88: -#line 516 "parse.y" +case 89: +#line 538 "parse.y" { yyval.ival = yystack.l_mark[-1].arg2p->cnt ; zfree(yystack.l_mark[-1].arg2p,sizeof(ARG2_REC)) ; code2op(_PUSHINT, yyval.ival) ; } break; -case 89: -#line 520 "parse.y" +case 90: +#line 542 "parse.y" { yyval.ival=0 ; code2op(_PUSHINT, 0) ; } break; -case 90: -#line 524 "parse.y" +case 91: +#line 546 "parse.y" { yyval.arg2p = (ARG2_REC*) zmalloc(sizeof(ARG2_REC)) ; yyval.arg2p->start = yystack.l_mark[-2].start ; yyval.arg2p->cnt = 2 ; } break; -case 91: -#line 529 "parse.y" +case 92: +#line 551 "parse.y" { yyval.arg2p = yystack.l_mark[-2].arg2p ; yyval.arg2p->cnt++ ; } break; -case 93: -#line 534 "parse.y" +case 94: +#line 556 "parse.y" { code2op(_PUSHINT, yystack.l_mark[-1].ival) ; } break; -case 94: -#line 541 "parse.y" +case 95: +#line 563 "parse.y" { yyval.start = yystack.l_mark[-1].start ; eat_nl() ; code_jmp(_JZ, (INST*)0) ; } break; -case 95: -#line 546 "parse.y" +case 96: +#line 568 "parse.y" { patch_jmp( code_ptr ) ; } break; -case 96: -#line 549 "parse.y" +case 97: +#line 571 "parse.y" { eat_nl() ; code_jmp(_JMP, (INST*)0) ; } break; -case 97: -#line 554 "parse.y" +case 98: +#line 576 "parse.y" { patch_jmp(code_ptr) ; patch_jmp(CDP(yystack.l_mark[0].start)) ; } break; -case 98: -#line 563 "parse.y" +case 99: +#line 585 "parse.y" { eat_nl() ; BC_new() ; } break; -case 99: -#line 568 "parse.y" +case 100: +#line 590 "parse.y" { yyval.start = yystack.l_mark[-5].start ; code_jmp(_JNZ, CDP(yystack.l_mark[-5].start)) ; BC_clear(code_ptr, CDP(yystack.l_mark[-2].start)) ; } break; -case 100: -#line 574 "parse.y" +case 101: +#line 596 "parse.y" { eat_nl() ; BC_new() ; yyval.start = yystack.l_mark[-1].start ; @@ -2086,8 +2133,8 @@ case 100: } } break; -case 101: -#line 594 "parse.y" +case 102: +#line 616 "parse.y" { int saved_offset ; int len ; @@ -2110,8 +2157,8 @@ case 101: } } break; -case 102: -#line 620 "parse.y" +case 103: +#line 642 "parse.y" { int cont_offset = code_offset ; unsigned len = code_pop(code_ptr) ; @@ -2134,20 +2181,20 @@ case 102: } break; -case 103: -#line 643 "parse.y" - { yyval.start = code_offset ; } -break; case 104: -#line 645 "parse.y" - { yyval.start = yystack.l_mark[-1].start ; code1(_POP) ; } +#line 665 "parse.y" + { yyval.start = code_offset ; } break; case 105: -#line 648 "parse.y" - { yyval.start = code_offset ; } +#line 667 "parse.y" + { yyval.start = yystack.l_mark[-1].start ; code1(_POP) ; } break; case 106: -#line 650 "parse.y" +#line 670 "parse.y" + { yyval.start = code_offset ; } +break; +case 107: +#line 672 "parse.y" { if ( code_ptr - 2 == CDP(yystack.l_mark[-1].start) && code_ptr[-2].op == _PUSHD && @@ -2163,14 +2210,14 @@ case 106: } } break; -case 107: -#line 667 "parse.y" +case 108: +#line 689 "parse.y" { eat_nl() ; BC_new() ; code_push((INST*)0,0, scope, active_funct) ; } break; -case 108: -#line 671 "parse.y" +case 109: +#line 693 "parse.y" { INST *p1 = CDP(yystack.l_mark[-1].start) ; eat_nl() ; BC_new() ; @@ -2179,15 +2226,15 @@ case 108: code_ptr -= code_ptr - p1 ; } break; -case 109: -#line 684 "parse.y" +case 110: +#line 706 "parse.y" { check_array(yystack.l_mark[0].stp) ; code_array(yystack.l_mark[0].stp) ; code1(A_TEST) ; } break; -case 110: -#line 689 "parse.y" +case 111: +#line 711 "parse.y" { yyval.start = yystack.l_mark[-3].arg2p->start ; code2op(A_CAT, yystack.l_mark[-3].arg2p->cnt) ; zfree(yystack.l_mark[-3].arg2p, sizeof(ARG2_REC)) ; @@ -2197,8 +2244,8 @@ case 110: code1(A_TEST) ; } break; -case 111: -#line 700 "parse.y" +case 112: +#line 722 "parse.y" { if ( yystack.l_mark[-1].ival > 1 ) { code2op(A_CAT, yystack.l_mark[-1].ival) ; } @@ -2210,8 +2257,8 @@ case 111: yyval.start = yystack.l_mark[-3].start ; } break; -case 112: -#line 713 "parse.y" +case 113: +#line 735 "parse.y" { if ( yystack.l_mark[-1].ival > 1 ) { code2op(A_CAT, yystack.l_mark[-1].ival) ; } @@ -2223,8 +2270,8 @@ case 112: yyval.start = yystack.l_mark[-3].start ; } break; -case 113: -#line 725 "parse.y" +case 114: +#line 747 "parse.y" { if ( yystack.l_mark[-2].ival > 1 ) { code2op(A_CAT,yystack.l_mark[-2].ival) ; } @@ -2239,8 +2286,8 @@ case 113: yyval.start = yystack.l_mark[-4].start ; } break; -case 114: -#line 742 "parse.y" +case 115: +#line 764 "parse.y" { yyval.start = yystack.l_mark[-4].start ; if ( yystack.l_mark[-2].ival > 1 ) { code2op(A_CAT, yystack.l_mark[-2].ival) ; } @@ -2249,8 +2296,8 @@ case 114: code1(A_DEL) ; } break; -case 115: -#line 750 "parse.y" +case 116: +#line 772 "parse.y" { yyval.start = code_offset ; check_array(yystack.l_mark[-1].stp) ; @@ -2258,8 +2305,8 @@ case 115: code1(DEL_A) ; } break; -case 116: -#line 761 "parse.y" +case 117: +#line 783 "parse.y" { eat_nl() ; BC_new() ; yyval.start = code_offset ; @@ -2271,8 +2318,8 @@ case 116: code2(SET_ALOOP, (INST*)0) ; } break; -case 117: -#line 775 "parse.y" +case 118: +#line 797 "parse.y" { INST *p2 = CDP(yystack.l_mark[0].start) ; @@ -2282,12 +2329,12 @@ case 117: code1(POP_AL) ; } break; -case 118: -#line 792 "parse.y" +case 119: +#line 814 "parse.y" { yyval.start = code_offset ; code2(F_PUSHA, yystack.l_mark[0].cp) ; } break; -case 119: -#line 794 "parse.y" +case 120: +#line 816 "parse.y" { check_var(yystack.l_mark[0].stp) ; yyval.start = code_offset ; if ( is_local(yystack.l_mark[0].stp) ) @@ -2297,8 +2344,8 @@ case 119: CODE_FE_PUSHA() ; } break; -case 120: -#line 803 "parse.y" +case 121: +#line 825 "parse.y" { if ( yystack.l_mark[-1].ival > 1 ) { code2op(A_CAT, yystack.l_mark[-1].ival) ; } @@ -2313,63 +2360,63 @@ case 120: yyval.start = yystack.l_mark[-3].start ; } break; -case 121: -#line 817 "parse.y" +case 122: +#line 839 "parse.y" { yyval.start = yystack.l_mark[0].start ; CODE_FE_PUSHA() ; } break; -case 122: -#line 819 "parse.y" +case 123: +#line 841 "parse.y" { yyval.start = yystack.l_mark[-1].start ; } break; -case 123: -#line 823 "parse.y" +case 124: +#line 845 "parse.y" { field_A2I() ; } break; -case 124: -#line 826 "parse.y" +case 125: +#line 848 "parse.y" { code1(F_ASSIGN) ; } break; -case 125: -#line 827 "parse.y" +case 126: +#line 849 "parse.y" { code1(F_ADD_ASG) ; } break; -case 126: -#line 828 "parse.y" +case 127: +#line 850 "parse.y" { code1(F_SUB_ASG) ; } break; -case 127: -#line 829 "parse.y" +case 128: +#line 851 "parse.y" { code1(F_MUL_ASG) ; } break; -case 128: -#line 830 "parse.y" +case 129: +#line 852 "parse.y" { code1(F_DIV_ASG) ; } break; -case 129: -#line 831 "parse.y" +case 130: +#line 853 "parse.y" { code1(F_MOD_ASG) ; } break; -case 130: -#line 832 "parse.y" +case 131: +#line 854 "parse.y" { code1(F_POW_ASG) ; } break; -case 131: -#line 839 "parse.y" +case 132: +#line 861 "parse.y" { code2(_BUILTIN, bi_split) ; } break; -case 132: -#line 843 "parse.y" +case 133: +#line 865 "parse.y" { yyval.start = yystack.l_mark[-2].start ; check_array(yystack.l_mark[0].stp) ; code_array(yystack.l_mark[0].stp) ; } break; -case 133: -#line 850 "parse.y" +case 134: +#line 872 "parse.y" { code2(_PUSHI, &fs_shadow) ; } break; -case 134: -#line 852 "parse.y" +case 135: +#line 874 "parse.y" { if ( CDP(yystack.l_mark[-1].start) == code_ptr - 2 ) { @@ -2384,19 +2431,19 @@ case 134: cast_for_split(cp) ; code_ptr[-2].op = _PUSHC ; code_ptr[-1].ptr = (PTR) cp ; - no_leaks_cell(cp); + no_leaks_cell(cp); } } } break; -case 135: -#line 877 "parse.y" +case 136: +#line 899 "parse.y" { yyval.start = yystack.l_mark[-3].start ; code2(_BUILTIN, bi_match) ; } break; -case 136: -#line 884 "parse.y" +case 137: +#line 906 "parse.y" { INST *p1 = CDP(yystack.l_mark[0].start) ; @@ -2412,31 +2459,31 @@ case 136: cast_to_RE(cp) ; p1->op = _PUSHC ; p1[1].ptr = (PTR) cp ; - no_leaks_cell(cp); + no_leaks_cell(cp); } } } break; -case 137: -#line 908 "parse.y" +case 138: +#line 930 "parse.y" { yyval.start = code_offset ; code1(_EXIT0) ; } break; -case 138: -#line 911 "parse.y" +case 139: +#line 933 "parse.y" { yyval.start = yystack.l_mark[-1].start ; code1(_EXIT) ; } break; -case 139: -#line 915 "parse.y" +case 140: +#line 937 "parse.y" { yyval.start = code_offset ; code1(_RET0) ; } break; -case 140: -#line 918 "parse.y" +case 141: +#line 940 "parse.y" { yyval.start = yystack.l_mark[-1].start ; code1(_RET) ; } break; -case 141: -#line 924 "parse.y" +case 142: +#line 946 "parse.y" { yyval.start = code_offset ; code2(F_PUSHA, &field[0]) ; code1(_PUSHINT) ; code1(0) ; @@ -2444,51 +2491,51 @@ case 141: getline_flag = 0 ; } break; -case 142: -#line 931 "parse.y" +case 143: +#line 953 "parse.y" { yyval.start = yystack.l_mark[0].start ; code1(_PUSHINT) ; code1(0) ; code2(_BUILTIN, bi_getline) ; getline_flag = 0 ; } break; -case 143: -#line 937 "parse.y" +case 144: +#line 959 "parse.y" { code1(_PUSHINT) ; code1(F_IN) ; code2(_BUILTIN, bi_getline) ; /* getline_flag already off in yylex() */ } break; -case 144: -#line 942 "parse.y" +case 145: +#line 964 "parse.y" { code2(F_PUSHA, &field[0]) ; code1(_PUSHINT) ; code1(PIPE_IN) ; code2(_BUILTIN, bi_getline) ; } break; -case 145: -#line 947 "parse.y" +case 146: +#line 969 "parse.y" { code1(_PUSHINT) ; code1(PIPE_IN) ; code2(_BUILTIN, bi_getline) ; } break; -case 146: -#line 953 "parse.y" +case 147: +#line 975 "parse.y" { getline_flag = 1 ; } break; -case 149: -#line 958 "parse.y" +case 150: +#line 980 "parse.y" { yyval.start = code_offset ; code2(F_PUSHA, field+0) ; } break; -case 150: -#line 962 "parse.y" +case 151: +#line 984 "parse.y" { yyval.start = yystack.l_mark[-1].start ; } break; -case 151: -#line 970 "parse.y" +case 152: +#line 992 "parse.y" { INST *p5 = CDP(yystack.l_mark[-1].start) ; INST *p6 = CDP(yystack.l_mark[0].start) ; @@ -2501,40 +2548,40 @@ case 151: cast_to_REPL(cp) ; p5->op = _PUSHC ; p5[1].ptr = (PTR) cp ; - no_leaks_cell(cp); + no_leaks_cell(cp); } code2(_BUILTIN, yystack.l_mark[-5].fp) ; yyval.start = yystack.l_mark[-3].start ; } break; -case 152: -#line 989 "parse.y" +case 153: +#line 1011 "parse.y" { yyval.fp = bi_sub ; } break; -case 153: -#line 990 "parse.y" +case 154: +#line 1012 "parse.y" { yyval.fp = bi_gsub ; } break; -case 154: -#line 995 "parse.y" +case 155: +#line 1017 "parse.y" { yyval.start = code_offset ; code2(F_PUSHA, &field[0]) ; } break; -case 155: -#line 1000 "parse.y" +case 156: +#line 1022 "parse.y" { yyval.start = yystack.l_mark[-1].start ; } break; -case 156: -#line 1008 "parse.y" +case 157: +#line 1030 "parse.y" { resize_fblock(yystack.l_mark[-1].fbp) ; restore_ids() ; switch_code_to_main() ; } break; -case 157: -#line 1017 "parse.y" +case 158: +#line 1039 "parse.y" { eat_nl() ; scope = SCOPE_FUNCT ; active_funct = yystack.l_mark[-3].fbp ; @@ -2552,8 +2599,8 @@ case 157: code_warn = code_limit - CODEWARN ; } break; -case 158: -#line 1036 "parse.y" +case 159: +#line 1058 "parse.y" { FBLOCK *fbp ; if ( yystack.l_mark[0].stp->type == ST_NONE ) @@ -2576,27 +2623,27 @@ case 158: yyval.fbp = fbp ; } break; -case 159: -#line 1059 "parse.y" +case 160: +#line 1081 "parse.y" { yyval.fbp = yystack.l_mark[0].fbp ; if ( yystack.l_mark[0].fbp->code ) compile_error("redefinition of %s" , yystack.l_mark[0].fbp->name) ; } break; -case 160: -#line 1065 "parse.y" +case 161: +#line 1087 "parse.y" { yyval.ival = 0 ; } break; -case 162: -#line 1070 "parse.y" +case 163: +#line 1092 "parse.y" { yystack.l_mark[0].stp = save_id(yystack.l_mark[0].stp->name) ; yystack.l_mark[0].stp->type = ST_LOCAL_NONE ; yystack.l_mark[0].stp->offset = 0 ; yyval.ival = 1 ; } break; -case 163: -#line 1076 "parse.y" +case 164: +#line 1098 "parse.y" { if ( is_local(yystack.l_mark[0].stp) ) compile_error("%s is duplicated in argument list", yystack.l_mark[0].stp->name) ; @@ -2608,8 +2655,8 @@ case 163: } } break; -case 164: -#line 1089 "parse.y" +case 165: +#line 1111 "parse.y" { /* we may have to recover from a bungled function definition */ /* can have local ids, before code scope @@ -2619,8 +2666,8 @@ case 164: switch_code_to_main() ; } break; -case 165: -#line 1102 "parse.y" +case 166: +#line 1124 "parse.y" { yyval.start = yystack.l_mark[-1].start ; code2(_CALL, yystack.l_mark[-2].fbp) ; @@ -2630,23 +2677,23 @@ case 165: check_fcall(yystack.l_mark[-2].fbp, scope, code_move_level, active_funct, yystack.l_mark[0].ca_p) ; } break; -case 166: -#line 1113 "parse.y" +case 167: +#line 1135 "parse.y" { yyval.ca_p = (CA_REC *) 0 ; } break; -case 167: -#line 1115 "parse.y" +case 168: +#line 1137 "parse.y" { yyval.ca_p = yystack.l_mark[0].ca_p ; yyval.ca_p->link = yystack.l_mark[-1].ca_p ; yyval.ca_p->arg_num = (short) (yystack.l_mark[-1].ca_p ? yystack.l_mark[-1].ca_p->arg_num+1 : 0) ; } break; -case 168: -#line 1130 "parse.y" +case 169: +#line 1152 "parse.y" { yyval.ca_p = (CA_REC *) 0 ; } break; -case 169: -#line 1132 "parse.y" +case 170: +#line 1154 "parse.y" { yyval.ca_p = ZMALLOC(CA_REC) ; yyval.ca_p->link = yystack.l_mark[-2].ca_p ; yyval.ca_p->type = CA_EXPR ; @@ -2654,8 +2701,8 @@ case 169: yyval.ca_p->call_offset = code_offset ; } break; -case 170: -#line 1139 "parse.y" +case 171: +#line 1161 "parse.y" { yyval.ca_p = ZMALLOC(CA_REC) ; yyval.ca_p->type = ST_NONE ; yyval.ca_p->link = yystack.l_mark[-2].ca_p ; @@ -2664,21 +2711,21 @@ case 170: code_call_id(yyval.ca_p, yystack.l_mark[-1].stp) ; } break; -case 171: -#line 1149 "parse.y" +case 172: +#line 1171 "parse.y" { yyval.ca_p = ZMALLOC(CA_REC) ; yyval.ca_p->type = CA_EXPR ; yyval.ca_p->call_offset = code_offset ; } break; -case 172: -#line 1155 "parse.y" +case 173: +#line 1177 "parse.y" { yyval.ca_p = ZMALLOC(CA_REC) ; yyval.ca_p->type = ST_NONE ; code_call_id(yyval.ca_p, yystack.l_mark[-1].stp) ; } break; -#line 2681 "y.tab.c" +#line 2728 "y.tab.c" } yystack.s_mark -= yym; yystate = *yystack.s_mark; diff --git a/parse.h b/parse.h index bfe61f0..98e87ab 100644 --- a/parse.h +++ b/parse.h @@ -80,16 +80,16 @@ #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union{ -CELL *cp ; -SYMTAB *stp ; -int start ; /* code starting address as offset from code_base */ -PF_CP fp ; /* ptr to a (print/printf) or (sub/gsub) function */ -BI_REC *bip ; /* ptr to info about a builtin */ -FBLOCK *fbp ; /* ptr to a function block */ -ARG2_REC *arg2p ; -CA_REC *ca_p ; -int ival ; -PTR ptr ; + CELL *cp ; + SYMTAB *stp ; + int start ; /* code starting address as offset from code_base */ + PF_CP fp ; /* ptr to a (print/printf) or (sub/gsub) function */ + BI_REC *bip ; /* ptr to info about a builtin */ + FBLOCK *fbp ; /* ptr to a function block */ + ARG2_REC *arg2p ; + CA_REC *ca_p ; + int ival ; + PTR ptr ; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE yylval; diff --git a/parse.y b/parse.y index da692e1..dfff0d2 100644 --- a/parse.y +++ b/parse.y @@ -11,7 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: parse.y,v 1.15 2012/06/27 09:19:17 tom Exp $ + * $MawkId: parse.y,v 1.16 2012/11/05 10:39:14 tom Exp $ * @Log: parse.y,v @ * Revision 1.11 1995/06/11 22:40:09 mike * change if(dump_code) -> if(dump_code_flag) @@ -124,16 +124,16 @@ static FBLOCK *active_funct ; %} %union{ -CELL *cp ; -SYMTAB *stp ; -int start ; /* code starting address as offset from code_base */ -PF_CP fp ; /* ptr to a (print/printf) or (sub/gsub) function */ -BI_REC *bip ; /* ptr to info about a builtin */ -FBLOCK *fbp ; /* ptr to a function block */ -ARG2_REC *arg2p ; -CA_REC *ca_p ; -int ival ; -PTR ptr ; + CELL *cp ; + SYMTAB *stp ; + int start ; /* code starting address as offset from code_base */ + PF_CP fp ; /* ptr to a (print/printf) or (sub/gsub) function */ + BI_REC *bip ; /* ptr to info about a builtin */ + FBLOCK *fbp ; /* ptr to a function block */ + ARG2_REC *arg2p ; + CA_REC *ca_p ; + int ival ; + PTR ptr ; } /* two tokens to help with errors */ @@ -170,7 +170,7 @@ PTR ptr ; %token ID D_ID %token FUNCT_ID %token BUILTIN LENGTH -%token FIELD +%token FIELD %token PRINT PRINTF SPLIT MATCH_FUNC SUB GSUB /* keywords */ @@ -351,7 +351,7 @@ expr : cat_expr cp->type = C_STRING ; cp->ptr = p3[1].ptr ; cast_to_RE(cp) ; - no_leaks_re_ptr(cp->ptr) ; + no_leaks_re_ptr(cp->ptr) ; code_ptr -= 2 ; code2(_MATCH1, cp->ptr) ; ZFREE(cp) ; @@ -395,10 +395,10 @@ p_expr : DOUBLE { $$ = code_offset ; code2(_PUSHS, $1) ; } | ID %prec AND /* anything less than IN */ { check_var($1) ; - $$ = code_offset ; - if ( is_local($1) ) - { code2op(L_PUSHI, $1->offset) ; } - else code2(_PUSHI, $1->stval.cp) ; + $$ = code_offset ; + if ( is_local($1) ) + { code2op(L_PUSHI, $1->offset) ; } + else code2(_PUSHI, $1->stval.cp) ; } | LPAREN expr RPAREN @@ -407,9 +407,9 @@ p_expr : DOUBLE p_expr : RE { $$ = code_offset ; - code2(_MATCH0, $1) ; - no_leaks_re_ptr($1); - } + code2(_MATCH0, $1) ; + no_leaks_re_ptr($1); + } ; p_expr : p_expr PLUS p_expr { code1(_ADD) ; } @@ -473,7 +473,29 @@ args : expr %prec LPAREN ; builtin : - BUILTIN mark LPAREN arglist RPAREN + BUILTIN mark LPAREN ID RPAREN + { BI_REC *p = $1 ; + $$ = $2 ; + if ( (int)p->min_args > 1 || (int)p->max_args < 1 ) + compile_error( + "wrong number of arguments in call to %s" , + p->name ) ; + /* if we have length(array), emit a different code */ + if ( p->fp == bi_length && is_array($4) ) { + code_array($4) ; + { code1(_PUSHINT) ; code1(1) ; } + code1(A_LENGTH) ; + } else { + check_var($4); + if ( is_local($4) ) + { code1(L_PUSHI); code1($4->offset) ; } + else { code2(_PUSHI, $4->stval.cp) ; } + if ( p->min_args != p->max_args ) /* variable args */ + { code1(_PUSHINT) ; code1(1) ; } + code2(_BUILTIN, p->fp) ; + } + } + | BUILTIN mark LPAREN arglist RPAREN { BI_REC *p = $1 ; $$ = $2 ; if ( (int)p->min_args > $4 || (int)p->max_args < $4 ) @@ -863,7 +885,7 @@ split_back : RPAREN cast_for_split(cp) ; code_ptr[-2].op = _PUSHC ; code_ptr[-1].ptr = (PTR) cp ; - no_leaks_cell(cp); + no_leaks_cell(cp); } } } @@ -896,7 +918,7 @@ re_arg : expr cast_to_RE(cp) ; p1->op = _PUSHC ; p1[1].ptr = (PTR) cp ; - no_leaks_cell(cp); + no_leaks_cell(cp); } } } @@ -979,7 +1001,7 @@ p_expr : sub_or_gsub LPAREN re_arg COMMA expr sub_back cast_to_REPL(cp) ; p5->op = _PUSHC ; p5[1].ptr = (PTR) cp ; - no_leaks_cell(cp); + no_leaks_cell(cp); } code2(_BUILTIN, $1) ; $$ = $3 ; @@ -1175,7 +1197,7 @@ resize_fblock(FBLOCK *fbp) /* code_shrink() zfrees p */ if ( dump_code_flag ) - add_to_fdump_list(fbp) ; + add_to_fdump_list(fbp) ; } diff --git a/patchlev.h b/patchlev.h index 4dfe177..3d89214 100644 --- a/patchlev.h +++ b/patchlev.h @@ -11,9 +11,9 @@ the GNU General Public License, version 2, 1991. */ /* - * $MawkId: patchlev.h,v 1.40 2012/11/02 08:25:13 tom Exp $ + * $MawkId: patchlev.h,v 1.42 2012/11/05 10:47:56 tom Exp $ */ #define PATCH_BASE 1 #define PATCH_LEVEL 3 #define PATCH_STRING ".4" -#define DATE_STRING "20121102" +#define DATE_STRING "20121105" diff --git a/symtype.h b/symtype.h index 37d57fd..8043366 100644 --- a/symtype.h +++ b/symtype.h @@ -1,6 +1,6 @@ /******************************************** symtype.h -copyright 2009,2010, Thomas E. Dickey +copyright 2009-2010,2012, Thomas E. Dickey copyright 1991, Michael D. Brennan This is a source file for mawk, an implementation of @@ -11,7 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: symtype.h,v 1.13 2010/12/10 17:00:00 tom Exp $ + * $MawkId: symtype.h,v 1.14 2012/11/03 13:08:35 tom Exp $ * @Log: symtype.h,v @ * Revision 1.6 1996/02/01 04:39:43 mike * dynamic array scheme @@ -53,7 +53,7 @@ the GNU General Public License, version 2, 1991. #ifndef SYMTYPE_H #define SYMTYPE_H -#include "types.h" +#include /* struct to hold info about builtins */ typedef struct { @@ -67,23 +67,10 @@ typedef struct { structures and types for arrays *--------------------------*/ -#include "array.h" +#include extern ARRAY Argv; -#if 0 -/* struct to hold the state of an array loop */ -typedef struct al_state { - struct al_state *link; - CELL *var; - ARRAY A; - int index; /* A[index] */ - ANODE *ptr; -} ALOOP_STATE; - -extern int inc_aloop_state(ALOOP_STATE *); -#endif - /* for parsing (i,j) in A */ typedef struct { int start; /* offset to code_base */ @@ -109,21 +96,24 @@ extern void fdump(void); elements of the symbol table -----------------------*/ -#define ST_NONE 0 -#define ST_VAR 1 -#define ST_KEYWORD 2 -#define ST_BUILTIN 3 /* a pointer to a builtin record */ -#define ST_ARRAY 4 /* a void * ptr to a hash table */ -#define ST_FIELD 5 /* a cell ptr to a field */ -#define ST_FUNCT 6 -#define ST_NR 7 /* NR is special */ -#define ST_ENV 8 /* and so is ENVIRON */ -#define ST_LENGTH 9 /* ditto and bozo */ -#define ST_LOCAL_NONE 10 -#define ST_LOCAL_VAR 11 -#define ST_LOCAL_ARRAY 12 +typedef enum { + ST_NONE + ,ST_VAR + ,ST_KEYWORD + ,ST_BUILTIN /* a pointer to a builtin record */ + ,ST_ARRAY /* a void * ptr to a hash table */ + ,ST_FIELD /* a cell ptr to a field */ + ,ST_FUNCT + ,ST_NR /* NR is special */ + ,ST_ENV /* and so is ENVIRON */ + ,ST_LENGTH /* ditto and bozo */ + ,ST_LOCAL_NONE + ,ST_LOCAL_VAR + ,ST_LOCAL_ARRAY +} SYMTAB_TYPES; -#define is_local(stp) ((stp)->type>=ST_LOCAL_NONE) +#define is_array(stp) ((stp)->type == ST_ARRAY || (stp)->type == ST_LOCAL_ARRAY) +#define is_local(stp) ((stp)->type >= ST_LOCAL_NONE) typedef struct { const char *name;