From 25b53a1ae20e4ccf372602c53d82f9bdce737d07 Mon Sep 17 00:00:00 2001 From: "Thomas E. Dickey" Date: Tue, 25 Jul 2023 23:42:42 +0000 Subject: [PATCH] snapshot of project "mawk", label t20230725 --- CHANGES | 7 +- MANIFEST | 2 +- bi_funct.c | 27 +- bi_funct.h | 5 +- bi_vars.c | 14 +- bi_vars.h | 14 +- code.c | 11 +- code.h | 7 +- da.c | 162 ++- error.c | 12 +- execute.c | 103 +- fcall.c | 10 +- field.c | 8 +- field.h | 8 +- fin.h | 16 +- fpe_check.c | 26 +- jmp.h | 17 +- kw.c | 46 +- mawk.h | 15 +- memory.c | 17 +- memory.h | 14 +- msdos/dosexec.c | 28 +- nstd.h | 25 +- package/debian/changelog | 18 + package/freebsd/Makefile | 2 +- package/mawk.spec | 4 +- parse.c | 2424 +++++++++++++++++++------------------- parse.y | 155 ++- patchlev.h | 4 +- print.c | 5 +- re_cmpl.c | 14 +- repl.h | 8 +- rexp.c | 6 +- rexp.h | 6 +- rexp1.c | 4 +- rexp3.c | 6 +- rexp4.c | 6 +- rexpdb.c | 6 +- scan.c | 27 +- scan.h | 8 +- scancode.h | 74 +- split.h | 12 +- symtype.h | 11 +- test/fpe_test | 12 +- trace.c | 11 +- types.h | 5 +- zmalloc.h | 18 +- 47 files changed, 1766 insertions(+), 1674 deletions(-) diff --git a/CHANGES b/CHANGES index 0bec3ee..f8c0125 100644 --- a/CHANGES +++ b/CHANGES @@ -1,10 +1,15 @@ --- $MawkId: CHANGES,v 1.348 2023/07/16 23:11:31 tom Exp $ +-- $MawkId: CHANGES,v 1.351 2023/07/25 23:33:45 tom Exp $ NOTE: The regular expression changes begun in 2020 are incomplete, e.g., do not handle a mixture of grouping and brace expressions. Fixing that issue is needed before a new stable release. +20230725 + + use da_string more consistently in dumps. + + improve scanner to some type-checks of arrays versus scalars by + deferring this into the runtime execution (report by Rajeev V Pillai). + 20230716 + modify scanner to accommodate scripts which use the same name for some function-parameters as for a function (report by Kaz Kylheku). diff --git a/MANIFEST b/MANIFEST index 2ae45cd..4181078 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1,4 +1,4 @@ -MANIFEST for mawk, version t20230716 +MANIFEST for mawk, version t20230725 -------------------------------------------------------------------------------- MANIFEST this file ACKNOWLEDGMENT acknowledgements diff --git a/bi_funct.c b/bi_funct.c index 0a3eef6..01fd180 100644 --- a/bi_funct.c +++ b/bi_funct.c @@ -11,7 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: bi_funct.c,v 1.117 2023/04/04 23:39:23 tom Exp $ + * $MawkId: bi_funct.c,v 1.118 2023/07/24 08:23:33 tom Exp $ */ #include @@ -54,7 +54,6 @@ the GNU General Public License, version 2, 1991. const BI_REC bi_funct[] = { /* info to load builtins */ - { "length", bi_length, 0, 1 }, /* special must come first */ { "index", bi_index, 2, 2 }, { "substr", bi_substr, 2, 3 }, { "sprintf", bi_sprintf, 1, 255 }, @@ -93,12 +92,7 @@ bi_funct_init(void) register const BI_REC *p; register SYMTAB *stp; - /* length is special (posix bozo) */ - stp = insert(bi_funct->name); - stp->type = ST_LENGTH; - stp->stval.bip = bi_funct; - - for (p = bi_funct + 1; p->name; p++) { + for (p = bi_funct; p->name; p++) { stp = insert(p->name); stp->type = ST_BUILTIN; stp->stval.bip = p; @@ -128,11 +122,6 @@ bi_length(CELL *sp) TRACE_FUNC("bi_length", sp); - if (sp->type == 0) - cellcpy(sp, field); - else - sp--; - if (sp->type < C_STRING) cast1_to_s(sp); len = string(sp)->len; @@ -144,6 +133,18 @@ bi_length(CELL *sp) return_CELL("bi_length", sp); } +/* length (size) of an array */ +CELL * +bi_alength(CELL *sp) +{ + TRACE_FUNC("bi_alength", sp); + + sp->type = C_DOUBLE; + sp->dval = (double) ((ARRAY) sp->ptr)->size; + + return_CELL("bi_alength", sp); +} + char * str_str(char *target, size_t target_len, const char *key, size_t key_len) { diff --git a/bi_funct.h b/bi_funct.h index 0aaee36..2806657 100644 --- a/bi_funct.h +++ b/bi_funct.h @@ -1,6 +1,6 @@ /******************************************** bi_funct.h -copyright 2009-2012,2016 Thomas E. Dickey +copyright 2009-2016,2023 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: bi_funct.h,v 1.6 2016/09/29 23:13:04 tom Exp $ + * $MawkId: bi_funct.h,v 1.7 2023/07/23 15:32:26 tom Exp $ */ #ifndef BI_FUNCT_H @@ -27,6 +27,7 @@ void bi_init(void); CELL *bi_print(CELL *); CELL *bi_printf(CELL *); CELL *bi_length(CELL *); +CELL *bi_alength(CELL *); /* length/size of an array */ CELL *bi_index(CELL *); CELL *bi_substr(CELL *); CELL *bi_sprintf(CELL *); diff --git a/bi_vars.c b/bi_vars.c index a027a0e..565050d 100644 --- a/bi_vars.c +++ b/bi_vars.c @@ -1,6 +1,6 @@ /******************************************** bi_vars.c -copyright 2009,2010, Thomas E. Dickey +copyright 2009-2010,2023 Thomas E. Dickey copyright 1991-1992,1993, Michael D. Brennan This is a source file for mawk, an implementation of @@ -11,17 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: bi_vars.c,v 1.10 2010/12/10 17:00:00 tom Exp $ - * @Log: bi_vars.c,v @ - * Revision 1.1.1.1 1993/07/03 18:58:09 mike - * move source to cvs - * - * Revision 5.2 1992/07/10 16:17:10 brennan - * MsDOS: remove NO_BINMODE macro - * - * Revision 5.1 1991/12/05 07:55:38 brennan - * 1.1 pre-release - * + * $MawkId: bi_vars.c,v 1.11 2023/07/22 22:28:00 tom Exp $ */ /* bi_vars.c */ diff --git a/bi_vars.h b/bi_vars.h index 2f4399e..3f5b461 100644 --- a/bi_vars.h +++ b/bi_vars.h @@ -1,6 +1,6 @@ /******************************************** bi_vars.h -copyright 2010, Thomas E. Dickey +copyright 2010,2023 Thomas E. Dickey copyright 1993, Michael D. Brennan This is a source file for mawk, an implementation of @@ -11,17 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: bi_vars.h,v 1.8 2010/12/10 17:00:00 tom Exp $ - * @Log: bi_vars.h,v @ - * Revision 1.1.1.1 1993/07/03 18:58:09 mike - * move source to cvs - * - * Revision 5.2 1992/07/10 16:17:10 brennan - * MsDOS: remove NO_BINMODE macro - * - * Revision 5.1 1991/12/05 07:59:05 brennan - * 1.1 pre-release - * + * $MawkId: bi_vars.h,v 1.9 2023/07/22 22:28:10 tom Exp $ */ /* bi_vars.h */ diff --git a/code.c b/code.c index 32bf356..bb07cb0 100644 --- a/code.c +++ b/code.c @@ -1,6 +1,6 @@ /******************************************** code.c -copyright 2009-2016,2019, Thomas E. Dickey +copyright 2009-2019,2023, Thomas E. Dickey copyright 1991-1994,1995, 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: code.c,v 1.39 2019/02/02 01:09:45 tom Exp $ + * $MawkId: code.c,v 1.40 2023/07/24 20:08:54 tom Exp $ */ #include "mawk.h" @@ -40,9 +40,9 @@ INST *execution_start = 0; void code_grow(void) { - unsigned oldsize = (unsigned) (code_limit - code_base); - unsigned newsize = PAGESZ + oldsize; - unsigned delta = (unsigned) (code_ptr - code_base); + size_t oldsize = (size_t) (code_limit - code_base); + size_t newsize = PAGESZ + oldsize; + size_t delta = (size_t) (code_ptr - code_base); if (code_ptr > code_limit) bozo("CODEWARN is too small"); @@ -286,6 +286,7 @@ free_codes(const char *tag, INST * base, size_t size) case A_PUSHA: case L_PUSHA: case L_PUSHI: + case _LENGTH: case _BUILTIN: case _PRINT: case _PUSHA: diff --git a/code.h b/code.h index 77f6398..cfb51c7 100644 --- a/code.h +++ b/code.h @@ -1,6 +1,6 @@ /******************************************** code.h -copyright 2009-2012,2019, Thomas E. Dickey +copyright 2009-2019,2023, Thomas E. Dickey copyright 1991-1994,1995, 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: code.h,v 1.11 2019/01/30 00:49:25 tom Exp $ + * $MawkId: code.h,v 1.12 2023/07/24 08:22:18 tom Exp $ */ /* code.h */ @@ -103,8 +103,9 @@ typedef enum { ,_POW ,_NOT ,_TEST - ,A_LENGTH ,A_TEST + ,_LENGTH + ,A_LENGTH ,A_DEL ,ALOOP ,A_CAT diff --git a/da.c b/da.c index c90833e..733be5a 100644 --- a/da.c +++ b/da.c @@ -1,6 +1,6 @@ /******************************************** da.c -copyright 2008-2020,2021, Thomas E. Dickey +copyright 2008-2021,2023, Thomas E. Dickey copyright 1991-1994,1995, 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: da.c,v 1.30 2021/05/29 00:00:01 tom Exp $ + * $MawkId: da.c,v 1.35 2023/07/25 22:21:08 tom Exp $ */ /* da.c */ @@ -58,7 +58,6 @@ static const 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" }, @@ -124,39 +123,67 @@ static const char *jfmt = "%s%s%03d\n"; static const char *tab2 = "\t\t"; void -da_string(FILE *fp, const char *str, size_t len) +da_string2(FILE *fp, const char *value, size_t length, int delim) { size_t n; - fputc('"', fp); - for (n = 0; n < len; ++n) { - UChar ch = (UChar) str[n]; + fputc(delim, fp); + for (n = 0; n < length; ++n) { + UChar ch = (UChar) value[n]; switch (ch) { case '\\': - fprintf(fp, "\\\\"); + fputc(ch, fp); break; - case '"': - fprintf(fp, "\""); + case '\a': /* alert, ascii 7 */ + fputs("\\\\", fp); + break; + case '\b': /* backspace, ascii 8 */ + fputs("\\b", fp); + break; + case '\t': /* tab, ascii 9 */ + fputs("\\t", fp); + break; + case '\n': /* newline, ascii 10 */ + fputs("\\n", fp); + break; + case '\v': /* vertical tab, ascii 11 */ + fputs("\\v", fp); + break; + case '\f': /* formfeed, ascii 12 */ + fputs("\\f", fp); + break; + case '\r': /* carriage return, ascii 13 */ + fputs("\\r", fp); break; default: - if (ch >= 32 && ch < 127) - fprintf(fp, "%c", ch); + if (ch == delim) + fprintf(fp, "\\%c", ch); + else if (ch >= 32 && ch < 127) + fputc(ch, fp); else fprintf(fp, "\\%03o", ch); break; } } - fputc('"', fp); + fputc(delim, fp); } +void +da_string(FILE *fp, const STRING * sparm, int delim) +{ + da_string2(fp, sparm->str, sparm->len, delim); +} + +#define NORMAL_FORM "%03ld .\t" +#define ADJUST_FORM "# patching %s\n .\t" + INST * da_this(INST * p, INST * start, FILE *fp) { CELL *cp; /* print the relative code address (label) */ - fprintf(fp, "%03ld ", (long) (p - start)); - fprintf(fp, ".\t"); + fprintf(fp, NORMAL_FORM, (long) (p - start)); switch ((MAWK_OPCODES) (p++->op)) { @@ -165,8 +192,9 @@ da_this(INST * p, INST * start, FILE *fp) switch (cp->type) { case C_RE: add_to_regex_list(cp->ptr); - fprintf(fp, "pushc\t%p\t/%s/\n", cp->ptr, - re_uncompile(cp->ptr)); + fprintf(fp, "pushc\t%p\t", cp->ptr); + da_string(fp, re_uncompile(cp->ptr), '/'); + fputc('\n', fp); break; case C_SPACE: @@ -176,13 +204,18 @@ da_this(INST * p, INST * start, FILE *fp) case C_SNULL: fprintf(fp, "pushc\tnull split\n"); break; + case C_REPL: - fprintf(fp, "pushc\trepl\t%s\n", - repl_uncompile(cp)); + + fprintf(fp, "pushc\trepl\t"); + da_string(fp, repl_uncompile(cp), '"'); + fputc('\n', fp); break; + case C_REPLV: - fprintf(fp, "pushc\treplv\t%s\n", - repl_uncompile(cp)); + fprintf(fp, "pushc\treplv\t"); + da_string(fp, repl_uncompile(cp), '"'); + fputc('\n', fp); break; default: @@ -194,21 +227,19 @@ da_this(INST * p, INST * start, FILE *fp) case _PUSHD: fprintf(fp, "pushd\t%.6g\n", *(double *) p++->ptr); break; + case _PUSHS: - { - STRING *sval = (STRING *) p++->ptr; - fprintf(fp, "pushs\t"); - da_string(fp, sval->str, sval->len); - fprintf(fp, "\n"); - break; - } + fprintf(fp, "pushs\t"); + da_string(fp, (STRING *) p++->ptr, '"'); + fputc('\n', fp); + break; case _MATCH0: case _MATCH1: add_to_regex_list(p->ptr); - fprintf(fp, "match%d\t%p\t/%s/\n", - p[-1].op == _MATCH1, p->ptr, - re_uncompile(p->ptr)); + fprintf(fp, "match%d\t%p\t", p[-1].op == _MATCH1, p->ptr); + da_string(fp, re_uncompile(p->ptr), '/'); + fputc('\n', fp); p++; break; @@ -284,6 +315,54 @@ da_this(INST * p, INST * start, FILE *fp) reverse_find(ST_ARRAY, &p++->ptr)); break; + case A_LENGTH: + { + SYMTAB *stp = (SYMTAB *) p++->ptr; + fprintf(fp, ADJUST_FORM, type_to_str(stp->type)); + switch (stp->type) { + case ST_VAR: + fprintf(fp, "pushi\t%s\t# defer_alen\n", stp->name); + break; + case ST_ARRAY: + fprintf(fp, "a_pusha\t%s\t# defer_alen\n", stp->name); + p[1].ptr = (PTR) bi_alength; + break; + case ST_NONE: + fprintf(fp, "pushi\t%s\t# defer_alen\n", "@missing"); + break; + default: + bozo("da A_LENGTH"); + /* NOTREACHED */ + } + } + break; + + case _LENGTH: + { + DEFER_LEN *dl = (DEFER_LEN *) p++->ptr; + FBLOCK *fbp = dl->fbp; + short offset = dl->offset; + int type = fbp->typev[offset]; + fprintf(fp, ADJUST_FORM, type_to_str(type)); + switch (type) { + case ST_LOCAL_VAR: + fprintf(fp, "lpushi\t%s %u\t# defer_len\n", + fbp->name, offset); + break; + case ST_LOCAL_ARRAY: + fprintf(fp, "la_pusha\t%s %u\t# defer_len\n", + fbp->name, offset); + p[1].ptr = (PTR) bi_alength; + break; + case ST_LOCAL_NONE: + fprintf(fp, "pushi\t%s\t# defer_len\n", "@missing"); + break; + default: + bozo("da _LENGTH"); + /* NOTREACHED */ + } + } + break; case _PUSHINT: fprintf(fp, "pushint\t%d\n", p++->op); break; @@ -352,6 +431,7 @@ da_this(INST * p, INST * start, FILE *fp) (long) (p - start + p[3].op)); p += 4; break; + default: { const OP_NAME *q = simple_code; @@ -378,19 +458,21 @@ da(INST * p, FILE *fp) fflush(fp); } /* *INDENT-OFF* */ -static struct +static const struct { PF_CP action ; - const char *name ; + const char name[10] ; } special_cases[] = { - {bi_split, "split"}, - {bi_match, "match"}, - {bi_getline, "getline"}, - {bi_sub, "sub"}, - {bi_gsub, "gsub"}, - {(PF_CP) 0, (char *) 0} + { bi_split, "split" }, + { bi_length, "length" }, + { bi_alength, "alength" }, + { bi_match, "match" }, + { bi_getline, "getline" }, + { bi_sub, "sub" }, + { bi_gsub, "gsub" }, + { (PF_CP) 0, "" } } ; /* *INDENT-ON* */ @@ -530,6 +612,8 @@ static const OP_NAME other_codes[] = { { _PUSHINT, "pushint" }, { _PUSHS, "pushs" }, { _RANGE, "range" }, + { _LENGTH, "defer_len" }, + { A_LENGTH, "defer_alen" }, { _HALT, "" } }; /* *INDENT-ON* */ diff --git a/error.c b/error.c index 0648c84..aaed881 100644 --- a/error.c +++ b/error.c @@ -1,6 +1,6 @@ /******************************************** error.c -copyright 2008-2016,2020 Thomas E. Dickey +copyright 2008-2020,2023 Thomas E. Dickey copyright 1991-1994,1995 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: error.c,v 1.24 2020/08/25 20:08:35 tom Exp $ + * $MawkId: error.c,v 1.25 2023/07/24 21:18:55 tom Exp $ */ #include @@ -102,11 +102,6 @@ missing(int c, const char *n, unsigned ln) errmsg(0, "%s%sline %u: missing %c near %s", s0, s1, ln, c, n); } -/* we won't use s as input - (yacc and bison force this). - We will use s for storage to keep lint or the compiler - off our back. -*/ void yyerror(const char *s GCC_UNUSED) { @@ -320,9 +315,6 @@ type_to_str(int type) case ST_FUNCT: retval = "function"; break; - case ST_LENGTH: - retval = "length"; - break; case ST_LOCAL_VAR: retval = "local variable"; break; diff --git a/execute.c b/execute.c index 0d87fc5..ad6ceb8 100644 --- a/execute.c +++ b/execute.c @@ -1,6 +1,6 @@ /******************************************** execute.c -copyright 2008-2018,2020, Thomas E. Dickey +copyright 2008-2020,2023, Thomas E. Dickey copyright 1991-1995,1996, Michael D. Brennan This is a source file for mawk, an implementation of @@ -11,20 +11,20 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: execute.c,v 1.47 2020/09/11 23:32:09 tom Exp $ + * $MawkId: execute.c,v 1.48 2023/07/25 22:25:27 tom Exp $ */ -#include "mawk.h" -#include "files.h" -#include "code.h" -#include "memory.h" -#include "symtype.h" -#include "field.h" -#include "bi_funct.h" -#include "bi_vars.h" -#include "regexp.h" -#include "repl.h" -#include "fin.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include @@ -99,9 +99,7 @@ clear_aloop_stack(ALOOP_STATE * top) } while (top); } -static INST *restart_label; /* control flow labels */ -INST *next_label; -static CELL tc; /*useful temp */ +INST *next_label; /* control flow label */ void execute(INST * cdp, /* code ptr, start execution here */ @@ -109,6 +107,10 @@ execute(INST * cdp, /* code ptr, start execution here */ CELL *fp) /* frame ptr into eval_stack for user defined functions */ { + static INST *restart_label; /* control flow label */ + static CELL tc; /*useful temp */ + static CELL missing; /* no value (use zero) */ + /* some useful temporaries */ CELL *cp; int t; @@ -350,6 +352,69 @@ execute(INST * cdp, /* code ptr, start execution here */ } break; + case A_LENGTH: + /* parameter for length() was ST_NONE; improve it here */ + { + SYMTAB *stp = (SYMTAB *) cdp->ptr; + cdp--; + TRACE(("patching %s\n", type_to_str(stp->type))); + switch (stp->type) { + case ST_VAR: + cdp[0].op = _PUSHI; + cdp[1].ptr = stp->stval.cp; + break; + case ST_ARRAY: + cdp[0].op = A_PUSHA; + cdp[1].ptr = stp->stval.array; + assert(cdp[2].op == _BUILTIN); + cdp[3].ptr = (PTR) bi_alength; + break; + case ST_NONE: + cdp[0].op = _PUSHI; + cdp[1].ptr = &missing; + break; + default: + bozo("execute A_LENGTH"); + /* NOTREACHED */ + } + } + /* resume, interpreting the updated code */ + break; + + case _LENGTH: + /* parameter for length() was ST_LOCAL_NONE; improve it here */ + { + DEFER_LEN *dl = (DEFER_LEN *) cdp->ptr; + FBLOCK *fbp = dl->fbp; + short offset = dl->offset; + int type = fbp->typev[offset]; + + ZFREE(dl); + cdp--; + TRACE(("patching %s\n", type_to_str(type))); + switch (type) { + case ST_LOCAL_VAR: + cdp[0].op = L_PUSHI; + cdp[1].op = offset; + break; + case ST_LOCAL_ARRAY: + cdp[0].op = LA_PUSHA; + cdp[1].op = offset; + assert(cdp[2].op == _BUILTIN); + cdp[3].ptr = (PTR) bi_alength; + break; + case ST_LOCAL_NONE: + cdp[0].op = _PUSHI; + cdp[1].ptr = &missing; + break; + default: + bozo("execute _LENGTH"); + /* NOTREACHED */ + } + } + /* resume, interpreting the updated code */ + break; + case SET_ALOOP: { ALOOP_STATE *ap = ZMALLOC(ALOOP_STATE); @@ -1026,12 +1091,6 @@ execute(INST * cdp, /* code ptr, start execution here */ sp->dval = t ? 1.0 : 0.0; break; - case A_LENGTH: - dec_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/fcall.c b/fcall.c index 3c6ac74..bd63ea9 100644 --- a/fcall.c +++ b/fcall.c @@ -1,6 +1,6 @@ /******************************************** fcall.c -copyright 2009-2012,2020 Thomas E. Dickey +copyright 2009-2020,2023 Thomas E. Dickey copyright 1991-1993,1995, 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: fcall.c,v 1.11 2020/01/07 00:47:38 tom Exp $ + * $MawkId: fcall.c,v 1.12 2023/07/25 21:04:05 tom Exp $ */ #include "mawk.h" @@ -139,8 +139,10 @@ call_arg_check(FBLOCK * callee, callee->typev[q->arg_num] = (char) q->type; } else if (q->type != callee->typev[q->arg_num]) { token_lineno = q->call_lineno; - compile_error("type error in arg(%d) in call to %s", - q->arg_num + 1, callee->name); + compile_error("type error in arg(%d) in call to %s (actual %s vs %s)", + q->arg_num + 1, callee->name, + type_to_str(q->type), + type_to_str(callee->typev[q->arg_num])); } ZFREE(q); diff --git a/field.c b/field.c index be2e6eb..be5c51c 100644 --- a/field.c +++ b/field.c @@ -1,6 +1,6 @@ /******************************************** field.c -copyright 2008-2020,2021 Thomas E. Dickey +copyright 2008-2021,2023 Thomas E. Dickey copyright 1991-1995,2014 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: field.c,v 1.39 2021/05/29 00:00:11 tom Exp $ + * $MawkId: field.c,v 1.41 2023/07/23 11:33:56 tom Exp $ */ /* field.c */ @@ -106,7 +106,7 @@ set_rs_shadow(void) CELL c; STRING *sval; char *s; - SLen len; + size_t len; if (posix_space_flag && mawk_state == EXECUTION) scan_code['\n'] = SC_UNEXPECTED; @@ -207,7 +207,7 @@ field_init(void) } void -set_field0(char *s, size_t len) +set_field0(const char *s, size_t len) { cell_destroy(&field[0]); nf = -1; diff --git a/field.h b/field.h index 8a52af7..1914d74 100644 --- a/field.h +++ b/field.h @@ -1,6 +1,6 @@ /******************************************** field.h -copyright 2009-2014,2020 Thomas E. Dickey +copyright 2009-2020,2023 Thomas E. Dickey copyright 1991-1995,2014 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: field.h,v 1.13 2020/09/07 12:13:20 tom Exp $ + * $MawkId: field.h,v 1.15 2023/07/23 11:33:56 tom Exp $ */ /* field.h */ @@ -22,10 +22,10 @@ the GNU General Public License, version 2, 1991. #include "nstd.h" #include "types.h" -extern void set_field0(char *, size_t); +extern void set_field0(const char *, size_t); extern void split_field0(void); extern void field_assign(CELL *, CELL *); -extern char *is_string_split(PTR, SLen *); +extern char *is_string_split(PTR, size_t *); extern void slow_cell_assign(CELL *, CELL *); extern CELL *slow_field_ptr(int); extern int field_addr_to_index(CELL *); diff --git a/fin.h b/fin.h index 0103ac4..514ad70 100644 --- a/fin.h +++ b/fin.h @@ -1,6 +1,6 @@ /******************************************** fin.h -copyright 2009-2010,2014 Thomas E. Dickey +copyright 2009-2014,2023 Thomas E. Dickey copyright 1991-1992,1993, Michael D. Brennan This is a source file for mawk, an implementation of @@ -11,18 +11,8 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: fin.h,v 1.13 2014/09/13 01:01:10 tom Exp $ - * @Log: fin.h,v @ - * Revision 1.1.1.1 1993/07/03 18:58:13 mike - * move source to cvs - * - * Revision 5.2 1992/01/06 08:16:24 brennan - * setmode() proto for MSDOS - * - * Revision 5.1 91/12/05 07:59:20 brennan - * 1.1 pre-release - * -*/ + * $MawkId: fin.h,v 1.14 2023/07/22 22:27:30 tom Exp $ + */ /* fin.h */ diff --git a/fpe_check.c b/fpe_check.c index 7124ee5..1a7a807 100644 --- a/fpe_check.c +++ b/fpe_check.c @@ -1,6 +1,6 @@ /******************************************** fpe_check.c -copyright 2008-2010,2013 Thomas E. Dickey +copyright 2008-2013,2023 Thomas E. Dickey copyright 1996, Michael D. Brennan This is a source file for mawk, an implementation of @@ -15,28 +15,8 @@ the GNU General Public License, version 2, 1991. */ /* - * $MawkId: fpe_check.c,v 1.16 2013/12/27 00:44:59 tom Exp $ - * @Log: fpe_check.c,v @ - * Revision 1.7 1996/08/30 00:07:14 mike - * Modifications to the test and implementation of the bug fix for - * solaris overflow in strtod. - * - * Revision 1.6 1996/08/25 19:25:46 mike - * Added test for solaris strtod overflow bug. - * - * Revision 1.5 1996/08/11 22:10:39 mike - * Some systems blow the !(d==d) test for a NAN. Added a work around. - * - * Revision 1.4 1995/01/09 01:22:28 mike - * check sig handler ret type to make fpe_check.c more robust - * - * Revision 1.3 1994/12/18 20:54:00 mike - * check NetBSD mathlib defines - * - * Revision 1.2 1994/12/14 14:37:26 mike - * add messages to user - * -*/ + * $MawkId: fpe_check.c,v 1.17 2023/07/22 22:27:46 tom Exp $ + */ #include #include diff --git a/jmp.h b/jmp.h index a841261..86a011e 100644 --- a/jmp.h +++ b/jmp.h @@ -1,6 +1,6 @@ /******************************************** jmp.h -copyright 2009,2010 Thomas E. Dickey +copyright 2009-2010,2023 Thomas E. Dickey copyright 1991, Michael D. Brennan This is a source file for mawk, an implementation of @@ -11,20 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: jmp.h,v 1.5 2010/12/10 17:00:00 tom Exp $ - * @Log: jmp.h,v @ - * Revision 1.2 1995/04/21 14:20:19 mike - * move_level variable to fix bug in arglist patching of moved code. - * - * Revision 1.1.1.1 1993/07/03 18:58:15 mike - * move source to cvs - * - * Revision 5.2 1993/01/09 19:03:44 mike - * code_pop checks if the resolve_list needs relocation - * - * Revision 5.1 1991/12/05 07:59:24 brennan - * 1.1 pre-release - * + * $MawkId: jmp.h,v 1.6 2023/07/22 22:28:22 tom Exp $ */ #ifndef MAWK_JMP_H diff --git a/kw.c b/kw.c index 44e7978..b0cf199 100644 --- a/kw.c +++ b/kw.c @@ -1,6 +1,6 @@ /******************************************** kw.c -copyright 2008-2020,2021, Thomas E. Dickey +copyright 2008-2021,2023, Thomas E. Dickey copyright 1991-1993, Michael D. Brennan This is a source file for mawk, an implementation of @@ -11,15 +11,16 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: kw.c,v 1.9 2021/05/29 00:17:26 tom Exp $ + * $MawkId: kw.c,v 1.10 2023/07/24 08:10:12 tom Exp $ */ /* kw.c */ -#include "mawk.h" -#include "symtype.h" -#include "parse.h" -#include "init.h" +#include +#include +#include +#include + /* *INDENT-OFF* */ static const struct kw { @@ -28,29 +29,30 @@ static const struct kw } keywords[] = { - { "print", PRINT }, - { "printf", PRINTF }, - { "do", DO }, - { "while", WHILE }, - { "for", FOR }, - { "break", BREAK }, - { "continue", CONTINUE }, - { "if", IF }, - { "else", ELSE }, - { "in", IN }, - { "delete", DELETE }, - { "split", SPLIT }, - { "match", MATCH_FUNC }, { "BEGIN", BEGIN }, { "END", END }, + { "break", BREAK }, + { "continue", CONTINUE }, + { "delete", DELETE }, + { "do", DO }, + { "else", ELSE }, { "exit", EXIT }, + { "for", FOR }, + { "function", FUNCTION }, + { "getline", GETLINE }, + { "gsub", GSUB }, + { "if", IF }, + { "in", IN }, + { "length", LENGTH }, + { "match", MATCH_FUNC }, { "next", NEXT }, { "nextfile", NEXTFILE }, + { "print", PRINT }, + { "printf", PRINTF }, { "return", RETURN }, - { "getline", GETLINE }, + { "split", SPLIT }, { "sub", SUB }, - { "gsub", GSUB }, - { "function", FUNCTION }, + { "while", WHILE }, { "", 0 } }; /* *INDENT-ON* */ diff --git a/mawk.h b/mawk.h index 642fcbe..8d9078c 100644 --- a/mawk.h +++ b/mawk.h @@ -1,6 +1,6 @@ /******************************************** mawk.h -copyright 2008-2020,2021 Thomas E. Dickey +copyright 2008-2021,2023 Thomas E. Dickey copyright 1991-1995,1996 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: mawk.h,v 1.62 2021/05/28 22:02:11 tom Exp $ + * $MawkId: mawk.h,v 1.63 2023/07/20 00:11:29 tom Exp $ */ /* mawk.h */ @@ -170,18 +170,19 @@ extern char *str_str(char *, size_t, const char *, size_t); extern void parse(void); extern void scan_cleanup(void); -#ifndef YYBYACC +#ifndef YYBYACC extern int yylex(void); #endif extern void yyerror(const char *); extern GCC_NORETURN void bozo(const char *); -extern void errmsg(int, const char *,...) GCC_PRINTFLIKE(2,3); -extern void compile_error(const char *,...) GCC_PRINTFLIKE(1,2); +extern void errmsg(int, const char *, ...) GCC_PRINTFLIKE(2,3); +extern void compile_error(const char *, ...) GCC_PRINTFLIKE(1,2); extern void execute(INST *, CELL *, CELL *); extern const char *find_kw_str(int); -extern void da_string(FILE *fp, const char *, size_t); +extern void da_string(FILE *fp, const STRING *, int); +extern void da_string2(FILE *fp, const char *, size_t, int); #ifdef HAVE_STRTOD_OVF_BUG extern double strtod_with_ovf_bug(const char *, char **); @@ -189,7 +190,7 @@ extern double strtod_with_ovf_bug(const char *, char **); #endif #if OPT_TRACE > 0 -extern void Trace(const char *,...) GCC_PRINTFLIKE(1,2); +extern void Trace(const char *, ...) GCC_PRINTFLIKE(1,2); extern void TraceVA(const char *, va_list); #define TRACE(params) Trace params #if OPT_TRACE > 1 diff --git a/memory.c b/memory.c index a651ed1..44953df 100644 --- a/memory.c +++ b/memory.c @@ -1,6 +1,6 @@ /******************************************** memory.c -copyright 2009,2010 Thomas E. Dickey +copyright 2009-2010,2023 Thomas E. Dickey copyright 1991-1992,1993 Michael D. Brennan This is a source file for mawk, an implementation of @@ -11,20 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: memory.c,v 1.8 2010/12/10 17:00:00 tom Exp $ - * @Log: memory.c,v @ - * Revision 1.2 1993/07/17 13:23:08 mike - * indent and general code cleanup - * - * Revision 1.1.1.1 1993/07/03 18:58:17 mike - * move source to cvs - * - * Revision 5.2 1993/01/01 21:30:48 mike - * split new_STRING() into new_STRING and new_STRING0 - * - * Revision 5.1 1991/12/05 07:56:21 brennan - * 1.1 pre-release - * + * $MawkId: memory.c,v 1.9 2023/07/22 22:28:36 tom Exp $ */ /* memory.c */ diff --git a/memory.h b/memory.h index 5ffd62a..70db452 100644 --- a/memory.h +++ b/memory.h @@ -1,6 +1,6 @@ /******************************************** memory.h -copyright 2009,2010, Thomas E. Dickey +copyright 2009-2010,2023 Thomas E. Dickey copyright 1991,1993, Michael D. Brennan This is a source file for mawk, an implementation of @@ -11,17 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: memory.h,v 1.9 2010/12/10 17:00:00 tom Exp $ - * @Log: memory.h,v @ - * Revision 1.1.1.1 1993/07/03 18:58:17 mike - * move source to cvs - * - * Revision 5.2 1993/01/01 21:30:48 mike - * split new_STRING() into new_STRING and new_STRING0 - * - * Revision 5.1 1991/12/05 07:59:28 brennan - * 1.1 pre-release - * + * $MawkId: memory.h,v 1.10 2023/07/22 22:28:48 tom Exp $ */ /* memory.h */ diff --git a/msdos/dosexec.c b/msdos/dosexec.c index 1ed5759..e3640ec 100644 --- a/msdos/dosexec.c +++ b/msdos/dosexec.c @@ -1,6 +1,6 @@ /******************************************** dosexec.c -copyright 2009,2010,2014, Thomas E. Dickey +copyright 2009-2014,2023, Thomas E. Dickey copyright 1991-1994,1995, Michael D. Brennan This is a source file for mawk, an implementation of @@ -11,31 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: dosexec.c,v 1.5 2014/09/14 22:29:49 tom Exp $ - * - * @Log: dosexec.c,v @ - * Revision 1.3 1995/08/20 16:37:22 mike - * exit(1) -> exit(2) - * - * Revision 1.2 1994/10/08 18:50:03 mike - * remove SM_DOS - * - * Revision 1.1.1.1 1993/07/03 18:58:47 mike - * move source to cvs - * - * Revision 1.4 1992/12/05 22:29:43 mike - * dos patch 112d: - * don't use string_buff - * check COMSPEC - * - * Revision 1.3 1992/07/10 16:21:57 brennan - * store exit code of input pipes - * - * Revision 1.2 1991/11/16 10:27:18 brennan - * BINMODE - * - * Revision 1.1 91/10/29 09:45:56 brennan - * Initial revision + * $MawkId: dosexec.c,v 1.6 2023/07/25 21:27:16 tom Exp $ */ /* system() and pipes() for MSDOS and Win32 console */ diff --git a/nstd.h b/nstd.h index 74ed48e..c16c8c5 100644 --- a/nstd.h +++ b/nstd.h @@ -1,6 +1,6 @@ /******************************************** nstd.h -copyright 2009-2012,2017 Thomas E. Dickey +copyright 2009-2017,2023 Thomas E. Dickey copyright 1995, Michael D. Brennan This is a source file for mawk, an implementation of @@ -18,27 +18,8 @@ the GNU General Public License, version 2, 1991. */ /* - * $MawkId: nstd.h,v 1.11 2017/10/17 01:19:15 tom Exp $ - * @Log: nstd.h,v @ - * Revision 1.6 1995/06/18 19:42:22 mike - * Remove some redundant declarations and add some prototypes - * - * Revision 1.5 1995/04/20 20:26:56 mike - * beta improvements from Carl Mascott - * - * Revision 1.4 1994/12/11 22:08:24 mike - * add STDC_MATHERR - * - * Revision 1.3 1993/07/15 23:56:09 mike - * general cleanup - * - * Revision 1.2 1993/07/07 00:07:43 mike - * more work on 1.2 - * - * Revision 1.1 1993/07/04 12:38:06 mike - * Initial revision - * -*/ + * $MawkId: nstd.h,v 1.12 2023/07/22 22:27:11 tom Exp $ + */ #ifndef NSTD_H #define NSTD_H 1 diff --git a/package/debian/changelog b/package/debian/changelog index b3c0176..d6d8418 100644 --- a/package/debian/changelog +++ b/package/debian/changelog @@ -1,3 +1,21 @@ +mawk-cur (1.3.4-20230725) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey Mon, 17 Jul 2023 16:42:46 -0400 + +mawk-cur (1.3.4-20230716) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey Sun, 16 Jul 2023 18:20:07 -0400 + +mawk-cur (1.3.4-20230712) unstable; urgency=low + + * maintenance updates + + -- Thomas E. Dickey Wed, 12 Jul 2023 19:23:14 -0400 + mawk-cur (1.3.4-20230525) unstable; urgency=low * maintenance updates diff --git a/package/freebsd/Makefile b/package/freebsd/Makefile index dcb055d..bbb1860 100644 --- a/package/freebsd/Makefile +++ b/package/freebsd/Makefile @@ -2,7 +2,7 @@ # $FreeBSD: head/lang/mawk/Makefile 516890 2019-11-06 14:17:48Z wen $ PORTNAME= mawk -DISTVERSION= 1.3.4.20230525 +DISTVERSION= 1.3.4.20230725 CATEGORIES= lang MASTER_SITES= https://invisible-island.net/archives/${PORTNAME}/ \ https://invisible-mirror.net/archives/${PORTNAME}/ diff --git a/package/mawk.spec b/package/mawk.spec index 0e1e4e8..c628475 100644 --- a/package/mawk.spec +++ b/package/mawk.spec @@ -1,9 +1,9 @@ Summary: mawk - pattern scanning and text processing language %global AppProgram mawk %global AppVersion 1.3.4 -%global AppPatched 20230525 +%global AppPatched 20230725 %global MySite https://invisible-island.net -# $MawkId: mawk.spec,v 1.103 2023/05/25 23:29:39 tom Exp $ +# $MawkId: mawk.spec,v 1.104 2023/07/25 23:29:43 tom Exp $ Name: %{AppProgram} Version: %{AppVersion} Release: %{AppPatched} diff --git a/parse.c b/parse.c index 16eab00..fb21ee7 100644 --- a/parse.c +++ b/parse.c @@ -22,20 +22,24 @@ #line 18 "parse.y" -#include -#include "mawk.h" -#include "symtype.h" -#include "code.h" -#include "memory.h" -#include "bi_funct.h" -#include "bi_vars.h" -#include "jmp.h" -#include "field.h" -#include "files.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include -#define YYMAXDEPTH 200 +#define YYMAXDEPTH 200 + +#if defined(YYBYACC) && (YYBYACC < 2) +extern int yylex(void); +#endif extern void eat_nl(void); + static SYMTAB *save_arglist(const char *); static int init_arglist(void); static void RE_as_arg(void); @@ -73,7 +77,7 @@ static CA_REC *active_arglist; #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 -#line 66 "parse.y" +#line 70 "parse.y" typedef union YYSTYPE{ CELL *cp ; SYMTAB *stp ; @@ -87,7 +91,7 @@ typedef union YYSTYPE{ PTR ptr ; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ -#line 91 "parse.c" +#line 95 "parse.c" /* compatibility with bison */ #ifdef YYPARSE_PARAM @@ -210,16 +214,16 @@ static const YYINT 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, 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, 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, 15, 15, 15, 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 YYINT yylen[] = { 2, 1, 2, 1, 1, 2, 1, 0, 3, 0, 3, @@ -230,52 +234,52 @@ static const YYINT 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, 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, 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, 1, 3, 4, 4, 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 YYINT yydefred[] = { 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, + 167, 0, 149, 0, 0, 0, 0, 0, 117, 0, + 57, 58, 61, 0, 82, 82, 0, 0, 0, 155, + 156, 7, 9, 0, 0, 6, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, - 0, 0, 0, 31, 32, 86, 87, 99, 0, 0, + 0, 0, 0, 31, 32, 84, 85, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, - 20, 0, 0, 0, 0, 0, 28, 84, 24, 0, + 20, 0, 0, 0, 0, 0, 28, 82, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 75, - 0, 122, 0, 0, 0, 72, 0, 0, 0, 0, - 0, 0, 0, 159, 160, 2, 0, 0, 0, 0, + 0, 120, 0, 0, 0, 72, 0, 0, 0, 0, + 0, 0, 0, 0, 161, 162, 2, 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, 74, 13, 52, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 132, 130, 0, 159, 0, + 5, 152, 150, 151, 0, 17, 25, 0, 0, 26, + 27, 0, 0, 0, 140, 29, 30, 0, 142, 0, + 16, 21, 23, 100, 0, 104, 0, 0, 116, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, + 60, 0, 0, 168, 0, 0, 135, 0, 0, 0, + 0, 8, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, + 0, 108, 0, 41, 42, 43, 44, 45, 46, 18, + 12, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 165, 0, 0, 153, 0, 102, 0, 0, + 0, 0, 114, 141, 143, 95, 0, 105, 106, 0, + 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 169, 0, 0, 170, 0, 137, + 136, 0, 0, 0, 0, 0, 0, 148, 133, 0, + 160, 0, 99, 0, 103, 93, 0, 96, 107, 101, + 88, 0, 0, 0, 0, 0, 0, 0, 0, 109, + 0, 173, 175, 172, 174, 81, 131, 0, 0, 53, + 0, 166, 0, 0, 0, 0, 83, 0, 0, 0, + 110, 119, 112, 138, 15, 0, 0, 157, 154, 115, + 0, 0, 0, 0, 113, 98, 158, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT yystos[] = { 0, @@ -288,112 +292,112 @@ static const YYINT yystos[] = { 0, 337, 346, 349, 350, 351, 353, 354, 360, 378, 385, 301, 306, 344, 348, 348, 348, 301, 306, 343, 344, 307, 348, 340, 344, 346, 298, 338, 338, 338, 301, - 301, 373, 374, 306, 308, 369, 348, 267, 268, 269, - 270, 271, 272, 273, 267, 268, 269, 270, 271, 272, - 273, 298, 265, 274, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 375, 348, 288, 289, 290, 291, - 292, 296, 297, 265, 302, 387, 301, 334, 301, 334, - 295, 343, 344, 345, 262, 378, 301, 301, 378, 378, - 301, 306, 346, 378, 378, 378, 346, 378, 256, 262, - 337, 378, 337, 337, 260, 346, 352, 337, 338, 337, - 346, 338, 344, 338, 338, 265, 302, 302, 265, 302, - 263, 301, 364, 365, 301, 346, 346, 334, 334, 346, - 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, - 346, 346, 346, 376, 381, 379, 380, 306, 346, 346, - 346, 346, 346, 346, 346, 334, 335, 378, 348, 348, - 348, 348, 348, 287, 348, 346, 346, 356, 306, 367, - 368, 295, 346, 260, 306, 346, 346, 338, 378, 378, - 378, 323, 384, 260, 302, 346, 386, 301, 339, 346, - 358, 359, 318, 263, 263, 263, 346, 278, 346, 359, - 302, 306, 346, 366, 306, 358, 265, 265, 346, 346, - 346, 346, 345, 302, 265, 302, 265, 302, 278, 260, - 302, 263, 337, 302, 337, 302, 340, 266, 383, 265, - 301, 359, 359, 359, 306, 264, 265, 302, 265, 302, - 302, 302, 306, 356, 377, 275, 346, 306, 306, 359, - 302, 346, 378, 346, 346, 264, 264, 264, 298, 302, - 335, 382, 265, 302, 357, 302, 264, 302, 346, 345, - 378, 378, 302, + 301, 301, 373, 374, 306, 308, 369, 348, 267, 268, + 269, 270, 271, 272, 273, 267, 268, 269, 270, 271, + 272, 273, 298, 265, 274, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 375, 348, 288, 289, 290, + 291, 292, 296, 297, 265, 302, 387, 301, 334, 301, + 334, 295, 343, 344, 345, 262, 378, 301, 301, 378, + 378, 301, 306, 346, 378, 378, 378, 346, 378, 256, + 262, 337, 378, 337, 337, 260, 346, 352, 337, 338, + 337, 346, 338, 344, 338, 338, 265, 302, 302, 265, + 302, 263, 301, 364, 365, 301, 302, 306, 346, 346, + 346, 334, 334, 346, 346, 346, 346, 346, 346, 346, + 346, 346, 346, 346, 346, 346, 346, 376, 381, 379, + 380, 306, 346, 346, 346, 346, 346, 346, 346, 334, + 335, 378, 348, 348, 348, 348, 348, 287, 348, 346, + 346, 356, 306, 367, 368, 295, 346, 260, 306, 346, + 346, 338, 378, 378, 378, 323, 384, 260, 302, 346, + 386, 301, 339, 346, 358, 359, 318, 263, 263, 263, + 346, 278, 346, 359, 302, 306, 346, 366, 358, 302, + 302, 265, 265, 346, 346, 346, 346, 345, 302, 265, + 302, 265, 302, 278, 260, 302, 263, 337, 302, 337, + 302, 340, 266, 383, 265, 301, 359, 359, 359, 306, + 264, 265, 302, 265, 302, 302, 306, 356, 377, 275, + 346, 306, 306, 359, 302, 346, 378, 346, 346, 264, + 264, 264, 298, 302, 335, 382, 265, 302, 357, 302, + 264, 302, 346, 345, 378, 378, 302, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT 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, 325, 251, 252, 68, 35, 36, 37, - 183, 184, 264, 230, 231, 38, 39, 40, 41, 92, - 93, 125, 204, 305, 69, 206, 207, 205, 322, 289, - 243, 70, 247, 136, 42, + 59, 221, 60, 61, 87, 253, 83, 27, 28, 29, + 30, 145, 62, 32, 33, 63, 64, 65, 168, 66, + 67, 34, 232, 329, 255, 256, 68, 35, 36, 37, + 184, 185, 268, 234, 235, 38, 39, 40, 41, 93, + 94, 126, 208, 309, 69, 210, 211, 209, 326, 294, + 247, 70, 251, 137, 42, }; -static const YYINT yysindex[] = { -73, - 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 YYINT yysindex[] = { 57, + 0, 268, 0, 2322, 2322, 2322, 23, 2202, 0, 2352, + 0, 0, 0, -286, 0, 0, -246, -243, -207, 0, + 0, 0, 0, -174, 57, 0, 0, 2322, 349, 122, + 2637, 2322, -13, -263, -166, -144, -142, 0, 0, 0, + -144, -43, -163, 0, 0, 0, 0, 0, -136, -113, + -122, -122, -99, -291, -70, -122, -122, -70, 0, 118, + 0, 2578, 343, 343, 1840, 343, 0, 0, 0, 343, + 2352, -286, -152, -155, -155, -155, -271, 0, 0, 0, + 0, 0, -257, -3, 2143, 0, -84, -81, -79, 2232, + 2352, 2352, -144, -144, 0, 0, 0, -65, 2352, 2352, + 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, + 2352, 2352, 0, 0, 0, 0, 0, -64, 2352, 2352, + 2352, 2352, 2352, 2352, 2352, -68, -13, 2322, 2322, 2322, + 2322, 2322, -40, 2322, 2352, 0, 0, 2352, 0, -44, + 0, 0, 0, 0, -58, 0, 0, 2352, 1870, 0, + 0, 2352, -122, 2578, 0, 0, 0, 2578, 0, -122, + 0, 0, 0, 0, -41, 0, 2604, 2262, 0, 2382, + -45, 2485, 30, -22, 35, 49, 2352, 11, 0, 2352, + 0, 2352, 15, 0, 2412, 2352, 0, -215, 2497, 2658, + 2679, 0, 0, 2703, 2703, 2703, 2703, 2703, 2703, 2703, + 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2352, 2352, 2352, + 2352, 0, 185, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -42, -42, -155, -155, -155, 23, -65, 2512, + 2703, 54, 0, 19, 60, 0, 2524, 0, -256, 2616, + 2539, 79, 0, 0, 0, 0, 343, 0, 0, 2551, + 343, 2292, 77, 2703, 0, 86, 51, 2352, 2352, 2352, + 2703, 53, 2703, -110, 0, -125, 2170, 0, 62, 0, + 0, 63, 2352, 2703, 2691, 119, 262, 0, 0, 2352, + 0, 70, 0, 75, 0, 0, 2352, 0, 0, 0, + 0, -231, 2352, -122, 2352, 2352, -80, -69, 7, 0, + 87, 0, 0, 0, 0, 0, 0, 66, -68, 0, + 2197, 0, 82, 50, 11, 2703, 0, 2703, 2566, 87, + 0, 0, 0, 0, 0, 2352, 23, 0, 0, 0, + -122, -122, 2703, 84, 0, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, 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, 589, 0, 0, 647, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1633, + -53, 26, 1691, 0, 0, 0, 0, 0, 0, 0, + 0, 1459, 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, 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, 531, 705, 937, 995, 1053, 0, 415, 0, 0, + 473, 0, 0, 1970, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1111, 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, 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, 1749, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, + 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, + 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 193, 0, 0, 0, 0, -191, 0, 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, 2442, 0, 0, 107, 0, 1924, 0, 0, + 0, 0, 0, -212, 273, 348, 2028, 2036, 2048, 2056, + 2068, 2076, 2088, 2096, 2108, 2116, 2128, 0, 0, 0, + 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1517, 1575, 1169, 1227, 1285, 1401, 821, 0, + -214, 0, 0, 0, 108, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1220, 0, 0, 0, 0, + 0, 0, 76, -241, 0, -216, 0, 0, 0, 0, + -184, 0, -183, 0, 0, 1924, 0, 0, 0, 0, + 0, 0, 0, -35, 0, 73, -61, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1343, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -92, 81, 0, -108, 0, 879, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2136, 0, 0, 0, 0, }; #if YYBTYACC static const YYINT yycindex[] = { 0, @@ -430,608 +434,609 @@ static const YYINT yycindex[] = { 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, 0, 0, - 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT yygindex[] = { 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, + 21, 103, 0, -50, 17, 0, 161, 0, 0, -7, + -1, -211, 1, 0, 32, 0, 0, 0, 0, 0, + 0, 0, 141, 0, 229, -115, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -#define YYTABLESIZE 2987 +#define YYTABLESIZE 2988 static const YYINT yytable[] = { 79, - 31, 134, 73, 73, 73, 80, 73, 176, 84, 161, - 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, - 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, 292, 293, 294, 330, 209, 210, - 211, 212, 213, 214, 215, 73, 73, 73, 73, 73, - 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, + 31, 135, 73, 73, 73, 80, 73, 177, 84, 162, + 85, 86, 164, 165, 153, 169, 278, 79, 79, 171, + 26, 284, 79, 79, 79, 31, 73, 8, 9, 77, + 73, 88, 89, 177, 143, 74, 75, 76, 136, 82, + 144, 86, 78, 78, 178, 26, 34, 34, 34, 78, + 139, 34, 34, 34, 90, 154, 139, 91, 158, 98, + 79, 141, 34, 127, 147, 167, 264, 77, 77, 84, + 315, 172, 150, 151, 77, 174, 155, 156, 157, 159, + 90, 89, 86, 163, 170, 78, 270, 139, 173, 34, + 189, 190, 191, 92, 175, 44, 45, 176, 146, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 192, 193, 334, 2, 90, 89, 213, + 214, 215, 216, 217, 218, 219, 73, 73, 73, 73, + 73, 95, 73, 96, 138, 230, 44, 45, 231, 302, + 133, 134, 297, 298, 299, 113, 220, 222, 237, 240, + 80, 80, 241, 301, 295, 80, 80, 80, 140, 223, + 224, 225, 226, 227, 148, 229, 87, 87, 250, 242, + 254, 314, 86, 87, 243, 244, 303, 261, 182, 245, + 263, 147, 254, 320, 295, 267, 254, 149, 44, 45, + 44, 45, 2, 80, 321, 295, 288, 51, 51, 51, + 290, 152, 51, 51, 51, 11, 11, 11, 274, 275, + 276, 277, 51, 51, 51, 51, 3, 4, 5, 183, + 143, 186, 6, 14, 14, 14, 144, 7, 8, 9, + 10, 134, 11, 12, 13, 14, 236, 15, 16, 17, + 51, 212, 18, 19, 20, 21, 228, 130, 131, 132, + 84, 142, 85, 133, 134, 8, 9, 77, 254, 254, + 254, 233, 78, 106, 107, 108, 109, 110, 111, 112, + 322, 295, 257, 231, 128, 129, 130, 131, 132, 179, + 311, 246, 133, 134, 33, 33, 33, 254, 262, 33, + 33, 33, 258, 316, 113, 318, 319, 259, 179, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 260, 1, 331, 295, 317, 265, 2, 280, 143, + 281, 8, 9, 77, 282, 144, 333, 33, 78, 220, + 222, 49, 49, 49, 91, 91, 49, 49, 49, 92, + 92, 287, 293, 3, 4, 5, 49, 49, 49, 6, + 295, 296, 335, 336, 7, 8, 9, 10, 300, 11, + 12, 13, 14, 306, 15, 16, 17, 324, 307, 18, + 19, 20, 21, 160, 49, 312, 44, 45, 2, 161, + 313, 22, 23, 330, 323, 337, 163, 24, 106, 107, + 108, 109, 110, 111, 112, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 3, 4, 5, 82, 77, 164, + 6, 325, 292, 308, 269, 7, 8, 9, 10, 113, + 11, 12, 13, 14, 97, 15, 16, 17, 46, 47, + 18, 19, 20, 21, 48, 49, 50, 51, 52, 53, + 0, 54, 0, 0, 55, 56, 57, 58, 94, 0, + 0, 94, 94, 94, 94, 0, 47, 47, 47, 0, + 0, 47, 47, 47, 120, 121, 122, 123, 124, 125, + 0, 47, 47, 47, 47, 47, 47, 0, 0, 94, + 94, 94, 0, 0, 0, 94, 0, 0, 0, 0, + 94, 94, 94, 94, 0, 94, 94, 94, 94, 47, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 0, 94, 0, 0, 94, + 94, 94, 94, 43, 0, 0, 44, 45, 2, 0, + 0, 35, 35, 35, 0, 0, 35, 35, 35, 118, + 119, 120, 121, 122, 123, 124, 125, 35, 0, 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, 36, 15, 16, 17, 46, 47, + 11, 12, 13, 14, 35, 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, + 0, 54, 0, 0, 55, 56, 57, 58, 160, 0, + 0, 44, 45, 2, 0, 0, 36, 36, 36, 0, + 0, 36, 36, 36, 0, 99, 100, 101, 102, 103, + 104, 105, 36, 0, 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, 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, 82, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 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, - 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, + 76, 76, 76, 76, 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, 0, 0, 76, 76, 76, + 76, 118, 118, 118, 0, 82, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 0, 118, + 118, 118, 118, 118, 118, 118, 0, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 0, + 118, 118, 118, 0, 0, 118, 118, 118, 118, 59, + 59, 59, 0, 82, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 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, 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, 82, 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, 134, 134, 134, 0, 0, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 0, 134, 134, 134, 134, 134, 134, 134, + 0, 134, 134, 134, 134, 134, 134, 0, 134, 134, + 134, 134, 134, 0, 134, 134, 134, 0, 0, 134, + 134, 134, 134, 122, 122, 122, 0, 0, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 0, 122, 122, 122, 122, 122, 122, 122, 0, 122, + 122, 122, 0, 122, 122, 122, 122, 122, 122, 122, + 122, 0, 122, 122, 122, 0, 0, 122, 122, 122, + 122, 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, 0, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, + 145, 145, 145, 0, 0, 145, 145, 145, 145, 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, 111, 111, 111, + 0, 0, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 0, 111, 111, 111, 111, 111, + 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, + 111, 111, 111, 111, 111, 0, 111, 111, 111, 0, + 0, 111, 111, 111, 111, 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, 146, + 146, 146, 0, 0, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 0, 146, 146, 146, + 146, 146, 146, 146, 0, 146, 0, 0, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 0, 146, 146, + 146, 0, 0, 146, 146, 146, 146, 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, 111, 111, 111, 0, 0, 111, 111, 111, 110, + 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 0, 111, + 111, 111, 111, 111, 111, 111, 0, 0, 111, 111, + 0, 111, 111, 111, 111, 111, 111, 111, 111, 0, + 111, 111, 111, 0, 0, 111, 111, 111, 111, 147, + 147, 147, 0, 0, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 0, 147, 147, 147, + 147, 147, 147, 147, 0, 147, 147, 147, 147, 0, + 0, 0, 147, 147, 147, 147, 0, 0, 147, 147, + 147, 0, 0, 147, 147, 147, 147, 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, 0, 144, 144, 144, 0, 0, 0, + 144, 144, 144, 144, 0, 0, 144, 144, 144, 0, + 0, 144, 144, 144, 144, 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, 122, 122, 122, 0, 0, 122, 122, 122, 0, + 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 0, 122, + 122, 122, 122, 122, 122, 122, 0, 0, 122, 122, + 0, 122, 122, 122, 122, 122, 122, 122, 122, 0, + 122, 122, 122, 0, 0, 122, 122, 122, 122, 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, 0, 0, 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, 59, 0, 0, 82, 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, 166, + 0, 59, 59, 0, 59, 59, 59, 0, 59, 59, 59, 59, 0, 59, 59, 59, 0, 0, 59, 59, - 59, 59, 59, 59, 59, 0, 84, 59, 59, 59, - 76, 76, 76, 76, 76, 76, 76, 59, 59, 59, + 59, 59, 0, 0, 0, 0, 3, 4, 5, 238, + 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, 239, 0, 15, 16, 17, + 0, 0, 18, 19, 20, 21, 82, 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, 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, - 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, 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, + 59, 0, 59, 59, 59, 0, 59, 59, 59, 59, + 0, 59, 59, 59, 122, 0, 59, 59, 59, 59, + 0, 0, 0, 122, 0, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 0, 122, 122, 122, 122, + 122, 122, 122, 0, 0, 122, 122, 0, 122, 122, + 122, 0, 122, 122, 122, 122, 0, 122, 122, 122, + 0, 0, 122, 122, 122, 122, 37, 37, 37, 0, + 0, 37, 37, 37, 38, 38, 38, 0, 0, 38, + 38, 38, 37, 0, 0, 0, 39, 39, 39, 0, + 38, 39, 39, 39, 40, 40, 40, 0, 0, 40, + 40, 40, 39, 0, 0, 0, 123, 123, 123, 37, + 40, 123, 123, 123, 124, 124, 124, 38, 0, 124, + 124, 124, 123, 0, 0, 0, 125, 125, 125, 39, + 124, 125, 125, 125, 126, 126, 126, 40, 0, 126, + 126, 126, 125, 0, 0, 0, 127, 127, 127, 123, + 126, 127, 127, 127, 128, 128, 128, 124, 0, 128, + 128, 128, 127, 0, 0, 0, 129, 129, 129, 125, + 128, 129, 129, 129, 54, 54, 54, 126, 0, 54, + 54, 54, 129, 0, 0, 0, 0, 180, 0, 127, + 54, 0, 0, 0, 0, 0, 115, 128, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 0, 129, + 0, 0, 0, 0, 304, 0, 0, 54, 0, 0, + 0, 0, 0, 115, 181, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, + 115, 305, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 0, 0, 0, 0, 0, 0, 3, 4, + 5, 0, 0, 0, 6, 0, 0, 0, 328, 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, 187, 11, 12, 13, 188, 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, 249, 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, 291, 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, 252, 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, 266, 0, 15, + 16, 17, 0, 0, 18, 19, 20, 21, 171, 171, + 171, 0, 0, 0, 171, 0, 0, 0, 0, 171, + 171, 171, 171, 0, 171, 171, 171, 171, 0, 171, + 171, 171, 0, 0, 171, 171, 171, 171, 115, 0, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 115, 0, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 0, 0, 0, 115, 181, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 115, 271, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, + 0, 0, 115, 279, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 115, 283, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 44, 45, 0, 115, + 286, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 115, 289, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 248, 0, 0, 0, 332, 0, 0, + 0, 0, 0, 0, 0, 285, 0, 115, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 115, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 114, 0, 0, 0, 0, 0, 0, 0, 0, + 115, 0, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 272, 0, 0, 0, 0, 0, 0, 0, + 0, 115, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 273, 0, 0, 0, 0, 0, 0, + 0, 0, 115, 0, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 115, 310, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 115, 0, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, }; static const YYINT yycheck[] = { 7, 0, 265, 4, 5, 6, 7, 8, 265, 10, 60, - 10, 298, 63, 64, 306, 66, 308, 265, 224, 70, - 0, 259, 260, 265, 301, 25, 28, 301, 266, 265, + 10, 298, 63, 64, 306, 66, 228, 259, 260, 70, + 0, 278, 264, 265, 266, 25, 28, 299, 300, 301, 32, 15, 16, 265, 42, 4, 5, 6, 302, 8, - 42, 181, 259, 260, 302, 25, 259, 260, 261, 266, - 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, + 42, 298, 259, 260, 302, 25, 259, 260, 261, 266, + 265, 264, 265, 266, 301, 55, 36, 301, 58, 28, + 302, 41, 275, 32, 43, 65, 182, 259, 260, 71, + 302, 71, 51, 52, 266, 77, 55, 56, 57, 58, + 265, 265, 298, 62, 68, 302, 302, 302, 72, 302, + 90, 91, 92, 301, 78, 259, 260, 81, 262, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 92, 93, 254, 255, 256, 323, 118, 119, - 120, 121, 122, 123, 124, 127, 128, 129, 130, 131, - 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, -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, + 110, 111, 112, 93, 94, 327, 261, 302, 302, 119, + 120, 121, 122, 123, 124, 125, 128, 129, 130, 131, + 132, 306, 134, 308, 301, 135, 259, 260, 138, 265, + 296, 297, 258, 259, 260, 298, 126, 126, 148, 149, + 259, 260, 152, 264, 265, 264, 265, 266, 301, 128, + 129, 130, 131, 132, 301, 134, 259, 260, 168, 153, + 170, 287, 298, 266, 153, 154, 302, 177, 263, 158, + 180, 160, 182, 264, 265, 185, 186, 301, 259, 260, + 259, 260, 261, 302, 264, 265, 247, 259, 260, 261, + 251, 301, 264, 265, 266, 259, 260, 261, 208, 209, + 210, 211, 274, 275, 276, 277, 287, 288, 289, 301, + 228, 301, 293, 259, 260, 261, 228, 298, 299, 300, + 301, 297, 303, 304, 305, 306, 295, 308, 309, 310, + 302, 306, 313, 314, 315, 316, 287, 290, 291, 292, + 252, 295, 252, 296, 297, 299, 300, 301, 258, 259, + 260, 306, 306, 267, 268, 269, 270, 271, 272, 273, + 264, 265, 318, 273, 288, 289, 290, 291, 292, 302, + 280, 323, 296, 297, 259, 260, 261, 287, 278, 264, + 265, 266, 263, 293, 298, 295, 296, 263, 302, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 263, 256, 264, 265, 294, 302, 261, 265, 327, + 302, 299, 300, 301, 265, 327, 326, 302, 306, 309, + 309, 259, 260, 261, 259, 260, 264, 265, 266, 259, + 260, 263, 266, 287, 288, 289, 274, 275, 276, 293, + 265, 301, 331, 332, 298, 299, 300, 301, 306, 303, + 304, 305, 306, 302, 308, 309, 310, 302, 306, 313, + 314, 315, 316, 256, 302, 306, 259, 260, 261, 262, + 306, 325, 326, 302, 298, 302, 302, 331, 267, 268, + 269, 270, 271, 272, 273, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 287, 288, 289, 263, 302, 302, + 293, 309, 252, 273, 186, 298, 299, 300, 301, 298, + 303, 304, 305, 306, 25, 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, + -1, 259, 260, 261, 262, -1, 259, 260, 261, -1, + -1, 264, 265, 266, 280, 281, 282, 283, 284, 285, + -1, 274, 275, 276, 277, 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, - 288, 289, 290, 291, 292, -1, -1, 275, 296, 297, + -1, 259, 260, 261, -1, -1, 264, 265, 266, 278, + 279, 280, 281, 282, 283, 284, 285, 275, -1, -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, -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, + -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, 267, 268, 269, 270, 271, + 272, 273, 275, -1, -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, -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, + -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, -1, 296, 297, -1, 299, - 300, 301, -1, 303, 304, 305, 306, -1, 308, 309, + 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, 298, 299, 300, -1, 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, 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, + 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, 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, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, - 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, -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, 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, + 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, -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, 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, + 281, 282, 283, 284, 285, -1, -1, -1, -1, -1, + -1, 265, -1, -1, -1, -1, -1, -1, -1, -1, + 274, 302, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, -1, -1, -1, -1, -1, -1, 287, 288, + 289, -1, -1, -1, 293, -1, -1, -1, 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, 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, + 282, 283, 284, 285, 274, 302, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 259, 260, -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, 260, -1, -1, -1, 302, -1, -1, + -1, -1, -1, -1, -1, 260, -1, 274, -1, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 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, @@ -1041,8 +1046,7 @@ static const YYINT yycheck[] = { 7, -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, + 278, 279, 280, 281, 282, 283, 284, 285, }; #if YYBTYACC static const YYINT yyctable[] = { -1, @@ -1344,7 +1348,7 @@ static const YYINT yyctable[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, }; #endif #define YYFINAL 25 @@ -1463,9 +1467,7 @@ static const char *const yyrule[] = { "arglist : args", "args : expr", "args : args COMMA expr", -"builtin : BUILTIN mark LPAREN ID RPAREN", "builtin : BUILTIN mark LPAREN arglist RPAREN", -"builtin : LENGTH", "mark :", "statement : print mark pr_args pr_direction separator", "print : PRINT", @@ -1518,6 +1520,10 @@ static const char *const yyrule[] = { "split_front : SPLIT LPAREN expr COMMA ID", "split_back : RPAREN", "split_back : COMMA expr RPAREN", +"p_expr : LENGTH", +"p_expr : LENGTH LPAREN RPAREN", +"p_expr : LENGTH LPAREN expr RPAREN", +"p_expr : LENGTH LPAREN ID RPAREN", "p_expr : MATCH_FUNC LPAREN expr COMMA re_arg RPAREN", "re_arg : expr", "statement : EXIT separator", @@ -1687,7 +1693,7 @@ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ -#line 1130 "parse.y" +#line 1167 "parse.y" /* * Check for special case where there is a forward reference to a newly @@ -1748,7 +1754,7 @@ save_arglist(const char *s) CA_REC *saveit = ZMALLOC(CA_REC); if (saveit != 0) { - CA_REC *p, *q; + CA_REC *p, *q; int arg_num = 0; for (p = active_arglist, q = 0; p != 0; q = p, p = p->link) { @@ -2007,7 +2013,7 @@ parse(void) mawk_exit(0); } } -#line 2011 "parse.c" +#line 2017 "parse.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) @@ -2678,44 +2684,44 @@ yyreduce: switch (yyn) { case 6: -#line 152 "parse.y" +#line 156 "parse.y" { /* this do nothing action removes a vacuous warning from Bison */ } -#line 2686 "parse.c" +#line 2692 "parse.c" break; case 7: -#line 157 "parse.y" +#line 161 "parse.y" { be_setup(scope = SCOPE_BEGIN) ; } -#line 2691 "parse.c" +#line 2697 "parse.c" break; case 8: -#line 160 "parse.y" +#line 164 "parse.y" { switch_code_to_main() ; } -#line 2696 "parse.c" +#line 2702 "parse.c" break; case 9: -#line 163 "parse.y" +#line 167 "parse.y" { be_setup(scope = SCOPE_END) ; } -#line 2701 "parse.c" +#line 2707 "parse.c" break; case 10: -#line 166 "parse.y" +#line 170 "parse.y" { switch_code_to_main() ; } -#line 2706 "parse.c" +#line 2712 "parse.c" break; case 11: -#line 169 "parse.y" +#line 173 "parse.y" { code_jmp(_JZ, (INST*)0) ; } -#line 2711 "parse.c" +#line 2717 "parse.c" break; case 12: -#line 172 "parse.y" +#line 176 "parse.y" { patch_jmp( code_ptr ) ; } -#line 2716 "parse.c" +#line 2722 "parse.c" break; case 13: -#line 176 "parse.y" +#line 180 "parse.y" { INST *p1 = CDP(yystack.l_mark[-1].start) ; int len ; @@ -2731,166 +2737,166 @@ case 13: p1 = CDP(yystack.l_mark[-1].start) ; p1[2].op = CodeOffset(p1 + 1) ; } -#line 2735 "parse.c" +#line 2741 "parse.c" break; case 14: -#line 192 "parse.y" +#line 196 "parse.y" { code1(_STOP) ; } -#line 2740 "parse.c" +#line 2746 "parse.c" break; case 15: -#line 195 "parse.y" +#line 199 "parse.y" { INST *p1 = CDP(yystack.l_mark[-5].start) ; p1[3].op = (int) (CDP(yystack.l_mark[0].start) - (p1 + 1)) ; p1[4].op = CodeOffset(p1 + 1) ; } -#line 2750 "parse.c" +#line 2756 "parse.c" break; case 16: -#line 206 "parse.y" +#line 210 "parse.y" { yyval.start = yystack.l_mark[-1].start ; } -#line 2755 "parse.c" +#line 2761 "parse.c" break; case 17: -#line 208 "parse.y" +#line 212 "parse.y" { yyval.start = code_offset ; /* does nothing won't be executed */ print_flag = getline_flag = paren_cnt = 0 ; yyerrok ; } -#line 2762 "parse.c" +#line 2768 "parse.c" break; case 19: -#line 215 "parse.y" +#line 219 "parse.y" { yyval.start = code_offset ; code1(_PUSHINT) ; code1(0) ; code2(_PRINT, bi_print) ; } -#line 2770 "parse.c" +#line 2776 "parse.c" break; case 23: -#line 228 "parse.y" +#line 232 "parse.y" { code1(_POP) ; } -#line 2775 "parse.c" +#line 2781 "parse.c" break; case 24: -#line 230 "parse.y" +#line 234 "parse.y" { yyval.start = code_offset ; } -#line 2780 "parse.c" +#line 2786 "parse.c" break; case 25: -#line 232 "parse.y" +#line 236 "parse.y" { yyval.start = code_offset ; print_flag = getline_flag = 0 ; paren_cnt = 0 ; yyerrok ; } -#line 2789 "parse.c" -break; -case 26: -#line 238 "parse.y" - { yyval.start = code_offset ; BC_insert('B', code_ptr+1) ; - code2(_JMP, 0) /* don't use code_jmp ! */ ; } #line 2795 "parse.c" break; -case 27: -#line 241 "parse.y" - { yyval.start = code_offset ; BC_insert('C', code_ptr+1) ; - code2(_JMP, 0) ; } +case 26: +#line 242 "parse.y" + { yyval.start = code_offset ; BC_insert('B', code_ptr+1) ; + code2(_JMP, 0) /* don't use code_jmp ! */ ; } #line 2801 "parse.c" break; +case 27: +#line 245 "parse.y" + { yyval.start = code_offset ; BC_insert('C', code_ptr+1) ; + code2(_JMP, 0) ; } +#line 2807 "parse.c" +break; case 28: -#line 244 "parse.y" +#line 248 "parse.y" { if ( scope != SCOPE_FUNCT ) compile_error("return outside function body") ; } -#line 2808 "parse.c" +#line 2814 "parse.c" break; case 29: -#line 248 "parse.y" +#line 252 "parse.y" { if ( scope != SCOPE_MAIN ) compile_error( "improper use of next" ) ; yyval.start = code_offset ; code1(_NEXT) ; } -#line 2817 "parse.c" +#line 2823 "parse.c" break; case 30: -#line 254 "parse.y" +#line 258 "parse.y" { if ( scope != SCOPE_MAIN ) compile_error( "improper use of nextfile" ) ; yyval.start = code_offset ; code1(_NEXTFILE) ; } -#line 2826 "parse.c" +#line 2832 "parse.c" break; case 34: -#line 265 "parse.y" +#line 269 "parse.y" { code1(_ASSIGN) ; } -#line 2831 "parse.c" +#line 2837 "parse.c" break; case 35: -#line 266 "parse.y" +#line 270 "parse.y" { code1(_ADD_ASG) ; } -#line 2836 "parse.c" +#line 2842 "parse.c" break; case 36: -#line 267 "parse.y" +#line 271 "parse.y" { code1(_SUB_ASG) ; } -#line 2841 "parse.c" +#line 2847 "parse.c" break; case 37: -#line 268 "parse.y" +#line 272 "parse.y" { code1(_MUL_ASG) ; } -#line 2846 "parse.c" +#line 2852 "parse.c" break; case 38: -#line 269 "parse.y" +#line 273 "parse.y" { code1(_DIV_ASG) ; } -#line 2851 "parse.c" +#line 2857 "parse.c" break; case 39: -#line 270 "parse.y" +#line 274 "parse.y" { code1(_MOD_ASG) ; } -#line 2856 "parse.c" +#line 2862 "parse.c" break; case 40: -#line 271 "parse.y" +#line 275 "parse.y" { code1(_POW_ASG) ; } -#line 2861 "parse.c" +#line 2867 "parse.c" break; case 41: -#line 272 "parse.y" +#line 276 "parse.y" { code1(_EQ) ; } -#line 2866 "parse.c" +#line 2872 "parse.c" break; case 42: -#line 273 "parse.y" +#line 277 "parse.y" { code1(_NEQ) ; } -#line 2871 "parse.c" +#line 2877 "parse.c" break; case 43: -#line 274 "parse.y" +#line 278 "parse.y" { code1(_LT) ; } -#line 2876 "parse.c" +#line 2882 "parse.c" break; case 44: -#line 275 "parse.y" +#line 279 "parse.y" { code1(_LTE) ; } -#line 2881 "parse.c" +#line 2887 "parse.c" break; case 45: -#line 276 "parse.y" +#line 280 "parse.y" { code1(_GT) ; } -#line 2886 "parse.c" +#line 2892 "parse.c" break; case 46: -#line 277 "parse.y" +#line 281 "parse.y" { code1(_GTE) ; } -#line 2891 "parse.c" +#line 2897 "parse.c" break; case 47: -#line 280 "parse.y" +#line 284 "parse.y" { INST *p3 = CDP(yystack.l_mark[0].start) ; @@ -2916,132 +2922,132 @@ case 47: if ( !yystack.l_mark[-1].ival ) code1(_NOT) ; } -#line 2920 "parse.c" +#line 2926 "parse.c" break; case 48: -#line 308 "parse.y" +#line 312 "parse.y" { code1(_TEST) ; code_jmp(_LJNZ, (INST*)0) ; } -#line 2927 "parse.c" +#line 2933 "parse.c" break; case 49: -#line 312 "parse.y" +#line 316 "parse.y" { code1(_TEST) ; patch_jmp(code_ptr) ; } -#line 2932 "parse.c" +#line 2938 "parse.c" break; case 50: -#line 315 "parse.y" +#line 319 "parse.y" { code1(_TEST) ; code_jmp(_LJZ, (INST*)0) ; } -#line 2939 "parse.c" +#line 2945 "parse.c" break; case 51: -#line 319 "parse.y" +#line 323 "parse.y" { code1(_TEST) ; patch_jmp(code_ptr) ; } -#line 2944 "parse.c" +#line 2950 "parse.c" break; case 52: -#line 321 "parse.y" +#line 325 "parse.y" { code_jmp(_JZ, (INST*)0) ; } -#line 2949 "parse.c" +#line 2955 "parse.c" break; case 53: -#line 322 "parse.y" +#line 326 "parse.y" { code_jmp(_JMP, (INST*)0) ; } -#line 2954 "parse.c" +#line 2960 "parse.c" break; case 54: -#line 324 "parse.y" +#line 328 "parse.y" { patch_jmp(code_ptr) ; patch_jmp(CDP(yystack.l_mark[0].start)) ; } -#line 2959 "parse.c" +#line 2965 "parse.c" break; case 56: -#line 329 "parse.y" +#line 333 "parse.y" { code1(_CAT) ; } -#line 2964 "parse.c" +#line 2970 "parse.c" break; case 57: -#line 333 "parse.y" +#line 337 "parse.y" { yyval.start = code_offset ; code2(_PUSHD, yystack.l_mark[0].ptr) ; } -#line 2969 "parse.c" +#line 2975 "parse.c" break; case 58: -#line 335 "parse.y" +#line 339 "parse.y" { yyval.start = code_offset ; code2(_PUSHS, yystack.l_mark[0].ptr) ; } -#line 2974 "parse.c" +#line 2980 "parse.c" break; case 59: -#line 337 "parse.y" +#line 341 "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) ; } -#line 2984 "parse.c" +#line 2990 "parse.c" break; case 60: -#line 345 "parse.y" +#line 349 "parse.y" { yyval.start = yystack.l_mark[-1].start ; } -#line 2989 "parse.c" +#line 2995 "parse.c" break; case 61: -#line 349 "parse.y" +#line 353 "parse.y" { yyval.start = code_offset ; code2(_MATCH0, yystack.l_mark[0].ptr) ; no_leaks_re_ptr(yystack.l_mark[0].ptr); } -#line 2997 "parse.c" +#line 3003 "parse.c" break; case 62: -#line 355 "parse.y" +#line 359 "parse.y" { code1(_ADD) ; } -#line 3002 "parse.c" +#line 3008 "parse.c" break; case 63: -#line 356 "parse.y" +#line 360 "parse.y" { code1(_SUB) ; } -#line 3007 "parse.c" +#line 3013 "parse.c" break; case 64: -#line 357 "parse.y" +#line 361 "parse.y" { code1(_MUL) ; } -#line 3012 "parse.c" +#line 3018 "parse.c" break; case 65: -#line 358 "parse.y" +#line 362 "parse.y" { code1(_DIV) ; } -#line 3017 "parse.c" +#line 3023 "parse.c" break; case 66: -#line 359 "parse.y" +#line 363 "parse.y" { code1(_MOD) ; } -#line 3022 "parse.c" +#line 3028 "parse.c" break; case 67: -#line 360 "parse.y" +#line 364 "parse.y" { code1(_POW) ; } -#line 3027 "parse.c" +#line 3033 "parse.c" break; case 68: -#line 362 "parse.y" +#line 366 "parse.y" { yyval.start = yystack.l_mark[0].start ; code1(_NOT) ; } -#line 3032 "parse.c" +#line 3038 "parse.c" break; case 69: -#line 364 "parse.y" +#line 368 "parse.y" { yyval.start = yystack.l_mark[0].start ; code1(_UPLUS) ; } -#line 3037 "parse.c" +#line 3043 "parse.c" break; case 70: -#line 366 "parse.y" +#line 370 "parse.y" { yyval.start = yystack.l_mark[0].start ; code1(_UMINUS) ; } -#line 3042 "parse.c" +#line 3048 "parse.c" break; case 72: -#line 371 "parse.y" +#line 375 "parse.y" { check_var(yystack.l_mark[-1].stp) ; yyval.start = code_offset ; code_address(yystack.l_mark[-1].stp) ; @@ -3049,82 +3055,56 @@ case 72: if ( yystack.l_mark[0].ival == '+' ) code1(_POST_INC) ; else code1(_POST_DEC) ; } -#line 3053 "parse.c" +#line 3059 "parse.c" break; case 73: -#line 379 "parse.y" +#line 383 "parse.y" { yyval.start = yystack.l_mark[0].start ; if ( yystack.l_mark[-1].ival == '+' ) code1(_PRE_INC) ; else code1(_PRE_DEC) ; } -#line 3061 "parse.c" +#line 3067 "parse.c" break; case 74: -#line 386 "parse.y" +#line 390 "parse.y" { if (yystack.l_mark[0].ival == '+' ) code1(F_POST_INC ) ; else code1(F_POST_DEC) ; } -#line 3068 "parse.c" +#line 3074 "parse.c" break; case 75: -#line 390 "parse.y" +#line 394 "parse.y" { yyval.start = yystack.l_mark[0].start ; if ( yystack.l_mark[-1].ival == '+' ) code1(F_PRE_INC) ; else code1( F_PRE_DEC) ; } -#line 3076 "parse.c" +#line 3082 "parse.c" break; case 76: -#line 397 "parse.y" +#line 401 "parse.y" { yyval.start = code_offset ; check_var(yystack.l_mark[0].stp) ; code_address(yystack.l_mark[0].stp) ; } -#line 3084 "parse.c" +#line 3090 "parse.c" break; case 77: -#line 405 "parse.y" +#line 409 "parse.y" { yyval.ival = 0 ; } -#line 3089 "parse.c" +#line 3095 "parse.c" break; case 79: -#line 410 "parse.y" +#line 414 "parse.y" { yyval.ival = 1 ; } -#line 3094 "parse.c" +#line 3100 "parse.c" break; case 80: -#line 412 "parse.y" +#line 416 "parse.y" { yyval.ival = yystack.l_mark[-2].ival + 1 ; } -#line 3099 "parse.c" +#line 3105 "parse.c" break; case 81: -#line 417 "parse.y" - { const 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) ) { - check_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) ; - } - } -#line 3125 "parse.c" -break; -case 82: -#line 440 "parse.y" +#line 421 "parse.y" { const 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 ) @@ -3135,113 +3115,104 @@ case 82: { code1(_PUSHINT) ; code1(yystack.l_mark[-1].ival) ; } code2(_BUILTIN , p->fp) ; } -#line 3139 "parse.c" +#line 3119 "parse.c" +break; +case 82: +#line 435 "parse.y" + { yyval.start = code_offset ; } +#line 3124 "parse.c" break; case 83: -#line 451 "parse.y" - { - yyval.start = code_offset ; - code1(_PUSHINT) ; code1(0) ; - code2(_BUILTIN, yystack.l_mark[0].bip->fp) ; - } -#line 3148 "parse.c" -break; -case 84: -#line 460 "parse.y" - { yyval.start = code_offset ; } -#line 3153 "parse.c" -break; -case 85: -#line 465 "parse.y" +#line 440 "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") ; print_flag = 0 ; yyval.start = yystack.l_mark[-3].start ; } -#line 3163 "parse.c" +#line 3134 "parse.c" +break; +case 84: +#line 448 "parse.y" + { yyval.fp = bi_print ; print_flag = 1 ;} +#line 3139 "parse.c" +break; +case 85: +#line 449 "parse.y" + { yyval.fp = bi_printf ; print_flag = 1 ; } +#line 3144 "parse.c" break; case 86: -#line 473 "parse.y" - { yyval.fp = bi_print ; print_flag = 1 ;} -#line 3168 "parse.c" +#line 452 "parse.y" + { code2op(_PUSHINT, yystack.l_mark[0].ival) ; } +#line 3149 "parse.c" break; case 87: -#line 474 "parse.y" - { yyval.fp = bi_printf ; print_flag = 1 ; } -#line 3173 "parse.c" -break; -case 88: -#line 477 "parse.y" - { code2op(_PUSHINT, yystack.l_mark[0].ival) ; } -#line 3178 "parse.c" -break; -case 89: -#line 479 "parse.y" +#line 454 "parse.y" { yyval.ival = yystack.l_mark[-1].arg2p->cnt ; zfree(yystack.l_mark[-1].arg2p,sizeof(ARG2_REC)) ; code2op(_PUSHINT, yyval.ival) ; } -#line 3185 "parse.c" +#line 3156 "parse.c" break; -case 90: -#line 483 "parse.y" +case 88: +#line 458 "parse.y" { yyval.ival=0 ; code2op(_PUSHINT, 0) ; } -#line 3190 "parse.c" +#line 3161 "parse.c" break; -case 91: -#line 487 "parse.y" - { yyval.arg2p = (ARG2_REC*) zmalloc(sizeof(ARG2_REC)) ; +case 89: +#line 462 "parse.y" + { yyval.arg2p = ZMALLOC(ARG2_REC) ; yyval.arg2p->start = yystack.l_mark[-2].start ; yyval.arg2p->cnt = 2 ; } -#line 3198 "parse.c" +#line 3169 "parse.c" +break; +case 90: +#line 467 "parse.y" + { yyval.arg2p = yystack.l_mark[-2].arg2p ; yyval.arg2p->cnt++ ; } +#line 3174 "parse.c" break; case 92: -#line 492 "parse.y" - { yyval.arg2p = yystack.l_mark[-2].arg2p ; yyval.arg2p->cnt++ ; } -#line 3203 "parse.c" +#line 472 "parse.y" + { code2op(_PUSHINT, yystack.l_mark[-1].ival) ; } +#line 3179 "parse.c" +break; +case 93: +#line 479 "parse.y" + { yyval.start = yystack.l_mark[-1].start ; eat_nl() ; code_jmp(_JZ, (INST*)0) ; } +#line 3184 "parse.c" break; case 94: -#line 497 "parse.y" - { code2op(_PUSHINT, yystack.l_mark[-1].ival) ; } -#line 3208 "parse.c" +#line 484 "parse.y" + { patch_jmp( code_ptr ) ; } +#line 3189 "parse.c" break; case 95: -#line 504 "parse.y" - { yyval.start = yystack.l_mark[-1].start ; eat_nl() ; code_jmp(_JZ, (INST*)0) ; } -#line 3213 "parse.c" +#line 487 "parse.y" + { eat_nl() ; code_jmp(_JMP, (INST*)0) ; } +#line 3194 "parse.c" break; case 96: -#line 509 "parse.y" - { patch_jmp( code_ptr ) ; } -#line 3218 "parse.c" -break; -case 97: -#line 512 "parse.y" - { eat_nl() ; code_jmp(_JMP, (INST*)0) ; } -#line 3223 "parse.c" -break; -case 98: -#line 517 "parse.y" +#line 492 "parse.y" { patch_jmp(code_ptr) ; patch_jmp(CDP(yystack.l_mark[0].start)) ; } -#line 3230 "parse.c" +#line 3201 "parse.c" break; -case 99: -#line 526 "parse.y" +case 97: +#line 501 "parse.y" { eat_nl() ; BC_new() ; } -#line 3235 "parse.c" +#line 3206 "parse.c" break; -case 100: -#line 531 "parse.y" +case 98: +#line 506 "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)) ; } -#line 3242 "parse.c" +#line 3213 "parse.c" break; -case 101: -#line 537 "parse.y" +case 99: +#line 512 "parse.y" { eat_nl() ; BC_new() ; yyval.start = yystack.l_mark[-1].start ; @@ -3258,10 +3229,10 @@ case 101: code2(_JMP, (INST*)0) ; /* code2() not code_jmp() */ } } -#line 3262 "parse.c" +#line 3233 "parse.c" break; -case 102: -#line 557 "parse.y" +case 100: +#line 532 "parse.y" { INST *p1 = CDP(yystack.l_mark[-1].start) ; INST *p2 = CDP(yystack.l_mark[0].start) ; @@ -3284,10 +3255,10 @@ case 102: BC_clear(code_ptr, CDP(yystack.l_mark[0].start)) ; } } -#line 3288 "parse.c" +#line 3259 "parse.c" break; -case 103: -#line 584 "parse.y" +case 101: +#line 559 "parse.y" { int cont_offset = code_offset ; unsigned len = code_pop(code_ptr) ; @@ -3309,25 +3280,25 @@ case 103: BC_clear(code_ptr, CDP(cont_offset)) ; } -#line 3313 "parse.c" +#line 3284 "parse.c" +break; +case 102: +#line 582 "parse.y" + { yyval.start = code_offset ; } +#line 3289 "parse.c" +break; +case 103: +#line 584 "parse.y" + { yyval.start = yystack.l_mark[-1].start ; code1(_POP) ; } +#line 3294 "parse.c" break; case 104: -#line 607 "parse.y" +#line 587 "parse.y" { yyval.start = code_offset ; } -#line 3318 "parse.c" +#line 3299 "parse.c" break; case 105: -#line 609 "parse.y" - { yyval.start = yystack.l_mark[-1].start ; code1(_POP) ; } -#line 3323 "parse.c" -break; -case 106: -#line 612 "parse.y" - { yyval.start = code_offset ; } -#line 3328 "parse.c" -break; -case 107: -#line 614 "parse.y" +#line 589 "parse.y" { if ( code_ptr - 2 == CDP(yystack.l_mark[-1].start) && code_ptr[-2].op == _PUSHD && @@ -3342,17 +3313,17 @@ case 107: code2(_JMP, (INST*)0) ; } } -#line 3346 "parse.c" +#line 3317 "parse.c" break; -case 108: -#line 631 "parse.y" +case 106: +#line 606 "parse.y" { eat_nl() ; BC_new() ; code_push((INST*)0,0, scope, active_funct) ; } -#line 3353 "parse.c" +#line 3324 "parse.c" break; -case 109: -#line 635 "parse.y" +case 107: +#line 610 "parse.y" { INST *p1 = CDP(yystack.l_mark[-1].start) ; eat_nl() ; BC_new() ; @@ -3360,18 +3331,18 @@ case 109: code_push(p1, (unsigned) CodeOffset(p1), scope, active_funct) ; code_ptr -= code_ptr - p1 ; } -#line 3364 "parse.c" +#line 3335 "parse.c" break; -case 110: -#line 648 "parse.y" +case 108: +#line 623 "parse.y" { check_array(yystack.l_mark[0].stp) ; code_array(yystack.l_mark[0].stp) ; code1(A_TEST) ; } -#line 3372 "parse.c" +#line 3343 "parse.c" break; -case 111: -#line 653 "parse.y" +case 109: +#line 628 "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)) ; @@ -3380,10 +3351,10 @@ case 111: code_array(yystack.l_mark[0].stp) ; code1(A_TEST) ; } -#line 3384 "parse.c" +#line 3355 "parse.c" break; -case 112: -#line 664 "parse.y" +case 110: +#line 639 "parse.y" { if ( yystack.l_mark[-1].ival > 1 ) { code2op(A_CAT, yystack.l_mark[-1].ival) ; } @@ -3394,10 +3365,10 @@ case 112: else code2(AE_PUSHA, yystack.l_mark[-4].stp->stval.array) ; yyval.start = yystack.l_mark[-3].start ; } -#line 3398 "parse.c" +#line 3369 "parse.c" break; -case 113: -#line 677 "parse.y" +case 111: +#line 652 "parse.y" { if ( yystack.l_mark[-1].ival > 1 ) { code2op(A_CAT, yystack.l_mark[-1].ival) ; } @@ -3408,10 +3379,10 @@ case 113: else code2(AE_PUSHI, yystack.l_mark[-4].stp->stval.array) ; yyval.start = yystack.l_mark[-3].start ; } -#line 3412 "parse.c" +#line 3383 "parse.c" break; -case 114: -#line 689 "parse.y" +case 112: +#line 664 "parse.y" { if ( yystack.l_mark[-2].ival > 1 ) { code2op(A_CAT,yystack.l_mark[-2].ival) ; } @@ -3425,10 +3396,10 @@ case 114: yyval.start = yystack.l_mark[-4].start ; } -#line 3429 "parse.c" +#line 3400 "parse.c" break; -case 115: -#line 706 "parse.y" +case 113: +#line 681 "parse.y" { yyval.start = yystack.l_mark[-4].start ; if ( yystack.l_mark[-2].ival > 1 ) { code2op(A_CAT, yystack.l_mark[-2].ival) ; } @@ -3436,20 +3407,20 @@ case 115: code_array(yystack.l_mark[-5].stp) ; code1(A_DEL) ; } -#line 3440 "parse.c" +#line 3411 "parse.c" break; -case 116: -#line 714 "parse.y" +case 114: +#line 689 "parse.y" { yyval.start = code_offset ; check_array(yystack.l_mark[-1].stp) ; code_array(yystack.l_mark[-1].stp) ; code1(DEL_A) ; } -#line 3450 "parse.c" +#line 3421 "parse.c" break; -case 117: -#line 725 "parse.y" +case 115: +#line 700 "parse.y" { eat_nl() ; BC_new() ; yyval.start = code_offset ; @@ -3460,10 +3431,10 @@ case 117: code2(SET_ALOOP, (INST*)0) ; } -#line 3464 "parse.c" +#line 3435 "parse.c" break; -case 118: -#line 739 "parse.y" +case 116: +#line 714 "parse.y" { INST *p2 = CDP(yystack.l_mark[0].start) ; @@ -3472,15 +3443,15 @@ case 118: code_jmp(ALOOP, p2) ; code1(POP_AL) ; } -#line 3476 "parse.c" +#line 3447 "parse.c" break; -case 119: -#line 756 "parse.y" +case 117: +#line 731 "parse.y" { yyval.start = code_offset ; code2(F_PUSHA, yystack.l_mark[0].cp) ; } -#line 3481 "parse.c" +#line 3452 "parse.c" break; -case 120: -#line 758 "parse.y" +case 118: +#line 733 "parse.y" { check_var(yystack.l_mark[0].stp) ; yyval.start = code_offset ; if ( is_local(yystack.l_mark[0].stp) ) @@ -3489,10 +3460,10 @@ case 120: CODE_FE_PUSHA() ; } -#line 3493 "parse.c" +#line 3464 "parse.c" break; -case 121: -#line 767 "parse.y" +case 119: +#line 742 "parse.y" { if ( yystack.l_mark[-1].ival > 1 ) { code2op(A_CAT, yystack.l_mark[-1].ival) ; } @@ -3506,83 +3477,84 @@ case 121: yyval.start = yystack.l_mark[-3].start ; } -#line 3510 "parse.c" +#line 3481 "parse.c" +break; +case 120: +#line 756 "parse.y" + { yyval.start = yystack.l_mark[0].start ; CODE_FE_PUSHA() ; } +#line 3486 "parse.c" +break; +case 121: +#line 758 "parse.y" + { yyval.start = yystack.l_mark[-1].start ; } +#line 3491 "parse.c" break; case 122: -#line 781 "parse.y" - { yyval.start = yystack.l_mark[0].start ; CODE_FE_PUSHA() ; } -#line 3515 "parse.c" +#line 762 "parse.y" + { field_A2I() ; } +#line 3496 "parse.c" break; case 123: -#line 783 "parse.y" - { yyval.start = yystack.l_mark[-1].start ; } -#line 3520 "parse.c" +#line 765 "parse.y" + { code1(F_ASSIGN) ; } +#line 3501 "parse.c" break; case 124: -#line 787 "parse.y" - { field_A2I() ; } -#line 3525 "parse.c" +#line 766 "parse.y" + { code1(F_ADD_ASG) ; } +#line 3506 "parse.c" break; case 125: -#line 790 "parse.y" - { code1(F_ASSIGN) ; } -#line 3530 "parse.c" +#line 767 "parse.y" + { code1(F_SUB_ASG) ; } +#line 3511 "parse.c" break; case 126: -#line 791 "parse.y" - { code1(F_ADD_ASG) ; } -#line 3535 "parse.c" +#line 768 "parse.y" + { code1(F_MUL_ASG) ; } +#line 3516 "parse.c" break; case 127: -#line 792 "parse.y" - { code1(F_SUB_ASG) ; } -#line 3540 "parse.c" +#line 769 "parse.y" + { code1(F_DIV_ASG) ; } +#line 3521 "parse.c" break; case 128: -#line 793 "parse.y" - { code1(F_MUL_ASG) ; } -#line 3545 "parse.c" +#line 770 "parse.y" + { code1(F_MOD_ASG) ; } +#line 3526 "parse.c" break; case 129: -#line 794 "parse.y" - { code1(F_DIV_ASG) ; } -#line 3550 "parse.c" +#line 771 "parse.y" + { code1(F_POW_ASG) ; } +#line 3531 "parse.c" break; case 130: -#line 795 "parse.y" - { code1(F_MOD_ASG) ; } -#line 3555 "parse.c" +#line 778 "parse.y" + { code2(_BUILTIN, bi_split) ; } +#line 3536 "parse.c" break; case 131: -#line 796 "parse.y" - { code1(F_POW_ASG) ; } -#line 3560 "parse.c" -break; -case 132: -#line 803 "parse.y" - { code2(_BUILTIN, bi_split) ; } -#line 3565 "parse.c" -break; -case 133: -#line 807 "parse.y" +#line 782 "parse.y" { yyval.start = yystack.l_mark[-2].start ; check_array(yystack.l_mark[0].stp) ; code_array(yystack.l_mark[0].stp) ; } -#line 3573 "parse.c" +#line 3544 "parse.c" break; -case 134: -#line 814 "parse.y" +case 132: +#line 789 "parse.y" { code2(_PUSHI, &fs_shadow) ; } -#line 3578 "parse.c" +#line 3549 "parse.c" break; -case 135: -#line 816 "parse.y" +case 133: +#line 791 "parse.y" { if ( CDP(yystack.l_mark[-1].start) == code_ptr - 2 ) { - if ( code_ptr[-2].op == _MATCH0 ) + if ( code_ptr[-2].op == _MATCH0 ) { RE_as_arg() ; + } else if ( code_ptr[-2].op == _PUSHS ) { CELL *cp = ZMALLOC(CELL) ; @@ -3596,17 +3568,90 @@ case 135: } } } -#line 3600 "parse.c" +#line 3572 "parse.c" +break; +case 134: +#line 814 "parse.y" + { yyval.start = code_offset ; + code2(_PUSHI,field) ; + code2(_BUILTIN,bi_length) ; + } +#line 3580 "parse.c" +break; +case 135: +#line 819 "parse.y" + { yyval.start = code_offset ; + code2(_PUSHI,field) ; + code2(_BUILTIN,bi_length) ; + } +#line 3588 "parse.c" break; case 136: -#line 841 "parse.y" +#line 824 "parse.y" + { yyval.start = yystack.l_mark[-1].start ; + code2(_BUILTIN,bi_length) ; + } +#line 3595 "parse.c" +break; +case 137: +#line 828 "parse.y" + { + SYMTAB* stp = yystack.l_mark[-1].stp; + yyval.start = code_offset; + switch (stp->type) { + case ST_VAR: + code2(_PUSHI, stp->stval.cp); + code2(_BUILTIN, bi_length); + break; + + case ST_ARRAY: + code2(A_PUSHA, stp->stval.array); + code2(_BUILTIN, bi_alength); + break; + + case ST_LOCAL_VAR: + code2op(L_PUSHI, stp->offset); + code2(_BUILTIN, bi_length); + break; + + case ST_LOCAL_ARRAY: + code2op(LA_PUSHA, stp->offset); + code2(_BUILTIN, bi_alength); + break; + + case ST_NONE: + /* defer_alen */ + code2(A_LENGTH, stp); + code2(_BUILTIN, bi_length); + break; + + case ST_LOCAL_NONE: + /* defer_len */ + { + DEFER_LEN* pi = ZMALLOC(DEFER_LEN); + pi->fbp = active_funct; + pi->offset = stp->offset; + code2(_LENGTH, pi); + code2(_BUILTIN, bi_length); + } + break; + + default: + type_error(stp); + break; + } + } +#line 3645 "parse.c" +break; +case 138: +#line 879 "parse.y" { yyval.start = yystack.l_mark[-3].start ; code2(_BUILTIN, bi_match) ; } -#line 3607 "parse.c" +#line 3652 "parse.c" break; -case 137: -#line 848 "parse.y" +case 139: +#line 886 "parse.y" { INST *p1 = CDP(yystack.l_mark[0].start) ; @@ -3626,92 +3671,92 @@ case 137: } } } -#line 3630 "parse.c" -break; -case 138: -#line 872 "parse.y" - { yyval.start = code_offset ; - code1(_EXIT0) ; } -#line 3636 "parse.c" -break; -case 139: -#line 875 "parse.y" - { yyval.start = yystack.l_mark[-1].start ; code1(_EXIT) ; } -#line 3641 "parse.c" +#line 3675 "parse.c" break; case 140: -#line 879 "parse.y" +#line 910 "parse.y" { yyval.start = code_offset ; - code1(_RET0) ; } -#line 3647 "parse.c" + code1(_EXIT0) ; } +#line 3681 "parse.c" break; case 141: -#line 882 "parse.y" - { yyval.start = yystack.l_mark[-1].start ; code1(_RET) ; } -#line 3652 "parse.c" +#line 913 "parse.y" + { yyval.start = yystack.l_mark[-1].start ; code1(_EXIT) ; } +#line 3686 "parse.c" break; case 142: -#line 888 "parse.y" +#line 917 "parse.y" + { yyval.start = code_offset ; + code1(_RET0) ; } +#line 3692 "parse.c" +break; +case 143: +#line 920 "parse.y" + { yyval.start = yystack.l_mark[-1].start ; code1(_RET) ; } +#line 3697 "parse.c" +break; +case 144: +#line 926 "parse.y" { yyval.start = code_offset ; code2(F_PUSHA, &field[0]) ; code1(_PUSHINT) ; code1(0) ; code2(_BUILTIN, bi_getline) ; getline_flag = 0 ; } -#line 3662 "parse.c" +#line 3707 "parse.c" break; -case 143: -#line 895 "parse.y" +case 145: +#line 933 "parse.y" { yyval.start = yystack.l_mark[0].start ; code1(_PUSHINT) ; code1(0) ; code2(_BUILTIN, bi_getline) ; getline_flag = 0 ; } -#line 3671 "parse.c" +#line 3716 "parse.c" break; -case 144: -#line 901 "parse.y" +case 146: +#line 939 "parse.y" { code1(_PUSHINT) ; code1(F_IN) ; code2(_BUILTIN, bi_getline) ; /* getline_flag already off in yylex() */ } -#line 3679 "parse.c" +#line 3724 "parse.c" break; -case 145: -#line 906 "parse.y" +case 147: +#line 944 "parse.y" { code2(F_PUSHA, &field[0]) ; code1(_PUSHINT) ; code1(PIPE_IN) ; code2(_BUILTIN, bi_getline) ; } -#line 3687 "parse.c" +#line 3732 "parse.c" break; -case 146: -#line 911 "parse.y" +case 148: +#line 949 "parse.y" { code1(_PUSHINT) ; code1(PIPE_IN) ; code2(_BUILTIN, bi_getline) ; } -#line 3695 "parse.c" +#line 3740 "parse.c" break; -case 147: -#line 917 "parse.y" +case 149: +#line 955 "parse.y" { getline_flag = 1 ; } -#line 3700 "parse.c" +#line 3745 "parse.c" break; -case 150: -#line 922 "parse.y" +case 152: +#line 960 "parse.y" { yyval.start = code_offset ; code2(F_PUSHA, field+0) ; } -#line 3707 "parse.c" +#line 3752 "parse.c" break; -case 151: -#line 926 "parse.y" +case 153: +#line 964 "parse.y" { yyval.start = yystack.l_mark[-1].start ; } -#line 3712 "parse.c" +#line 3757 "parse.c" break; -case 152: -#line 934 "parse.y" +case 154: +#line 972 "parse.y" { INST *p5 = CDP(yystack.l_mark[-1].start) ; INST *p6 = CDP(yystack.l_mark[0].start) ; @@ -3729,41 +3774,41 @@ case 152: code2(_BUILTIN, yystack.l_mark[-5].fp) ; yyval.start = yystack.l_mark[-3].start ; } -#line 3733 "parse.c" -break; -case 153: -#line 953 "parse.y" - { yyval.fp = bi_sub ; } -#line 3738 "parse.c" -break; -case 154: -#line 954 "parse.y" - { yyval.fp = bi_gsub ; } -#line 3743 "parse.c" +#line 3778 "parse.c" break; case 155: -#line 959 "parse.y" +#line 991 "parse.y" + { yyval.fp = bi_sub ; } +#line 3783 "parse.c" +break; +case 156: +#line 992 "parse.y" + { yyval.fp = bi_gsub ; } +#line 3788 "parse.c" +break; +case 157: +#line 997 "parse.y" { yyval.start = code_offset ; code2(F_PUSHA, &field[0]) ; } -#line 3750 "parse.c" +#line 3795 "parse.c" break; -case 156: -#line 964 "parse.y" +case 158: +#line 1002 "parse.y" { yyval.start = yystack.l_mark[-1].start ; } -#line 3755 "parse.c" +#line 3800 "parse.c" break; -case 157: -#line 972 "parse.y" +case 159: +#line 1010 "parse.y" { resize_fblock(yystack.l_mark[-1].fbp) ; restore_ids() ; switch_code_to_main() ; } -#line 3764 "parse.c" +#line 3809 "parse.c" break; -case 158: -#line 981 "parse.y" +case 160: +#line 1019 "parse.y" { eat_nl() ; scope = SCOPE_FUNCT ; active_funct = yystack.l_mark[-3].fbp ; @@ -3779,20 +3824,19 @@ case 158: (INST *) zmalloc(INST_BYTES(PAGESZ)); code_limit = code_base + PAGESZ ; code_warn = code_limit - CODEWARN ; - improve_arglist(yystack.l_mark[-3].fbp->name); - free_arglist(); + improve_arglist(yystack.l_mark[-3].fbp->name); + free_arglist(); } -#line 3786 "parse.c" +#line 3831 "parse.c" break; -case 159: -#line 1002 "parse.y" +case 161: +#line 1040 "parse.y" { FBLOCK *fbp ; if ( yystack.l_mark[0].stp->type == ST_NONE ) { yystack.l_mark[0].stp->type = ST_FUNCT ; - fbp = yystack.l_mark[0].stp->stval.fbp = - (FBLOCK *) zmalloc(sizeof(FBLOCK)) ; + fbp = yystack.l_mark[0].stp->stval.fbp = ZMALLOC(FBLOCK) ; fbp->name = yystack.l_mark[0].stp->name ; fbp->code = (INST*) 0 ; } @@ -3802,37 +3846,37 @@ case 159: /* this FBLOCK will not be put in the symbol table */ - fbp = (FBLOCK*) zmalloc(sizeof(FBLOCK)) ; + fbp = ZMALLOC(FBLOCK) ; fbp->name = "" ; } yyval.fbp = fbp ; } -#line 3811 "parse.c" +#line 3855 "parse.c" break; -case 160: -#line 1025 "parse.y" +case 162: +#line 1062 "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) ; } -#line 3819 "parse.c" -break; -case 161: -#line 1031 "parse.y" - { yyval.ival = init_arglist() ; } -#line 3824 "parse.c" +#line 3863 "parse.c" break; case 163: -#line 1036 "parse.y" +#line 1068 "parse.y" + { yyval.ival = init_arglist() ; } +#line 3868 "parse.c" +break; +case 165: +#line 1073 "parse.y" { init_arglist(); - yystack.l_mark[0].stp = save_arglist(yystack.l_mark[0].stp->name) ; + yystack.l_mark[0].stp = save_arglist(yystack.l_mark[0].stp->name) ; yystack.l_mark[0].stp->offset = 0 ; yyval.ival = 1 ; } -#line 3833 "parse.c" +#line 3877 "parse.c" break; -case 164: -#line 1042 "parse.y" +case 166: +#line 1079 "parse.y" { if ( is_local(yystack.l_mark[0].stp) ) compile_error("%s is duplicated in argument list", yystack.l_mark[0].stp->name) ; @@ -3842,10 +3886,10 @@ case 164: yyval.ival = yystack.l_mark[-2].ival + 1 ; } } -#line 3846 "parse.c" +#line 3890 "parse.c" break; -case 165: -#line 1054 "parse.y" +case 167: +#line 1091 "parse.y" { /* we may have to recover from a bungled function definition */ /* can have local ids, before code scope @@ -3854,10 +3898,10 @@ case 165: switch_code_to_main() ; } -#line 3858 "parse.c" +#line 3902 "parse.c" break; -case 166: -#line 1067 "parse.y" +case 168: +#line 1104 "parse.y" { yyval.start = yystack.l_mark[-1].start ; code2(_CALL, yystack.l_mark[-2].fbp) ; @@ -3866,67 +3910,67 @@ case 166: check_fcall(yystack.l_mark[-2].fbp, scope, code_move_level, active_funct, yystack.l_mark[0].ca_p) ; } -#line 3870 "parse.c" +#line 3914 "parse.c" break; -case 167: -#line 1078 "parse.y" +case 169: +#line 1115 "parse.y" { yyval.ca_p = (CA_REC *) 0 ; } -#line 3875 "parse.c" +#line 3919 "parse.c" break; -case 168: -#line 1080 "parse.y" +case 170: +#line 1117 "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) ; - yyval.ca_p->call_lineno = token_lineno; + yyval.ca_p->call_lineno = token_lineno; } -#line 3884 "parse.c" +#line 3928 "parse.c" break; -case 169: -#line 1096 "parse.y" +case 171: +#line 1133 "parse.y" { yyval.ca_p = (CA_REC *) 0 ; } -#line 3889 "parse.c" +#line 3933 "parse.c" break; -case 170: -#line 1098 "parse.y" +case 172: +#line 1135 "parse.y" { yyval.ca_p = ZMALLOC(CA_REC) ; yyval.ca_p->link = yystack.l_mark[-2].ca_p ; yyval.ca_p->type = CA_EXPR ; yyval.ca_p->arg_num = (short) (yystack.l_mark[-2].ca_p ? yystack.l_mark[-2].ca_p->arg_num+1 : 0) ; yyval.ca_p->call_offset = code_offset ; - yyval.ca_p->call_lineno = token_lineno; + yyval.ca_p->call_lineno = token_lineno; } -#line 3900 "parse.c" +#line 3944 "parse.c" break; -case 171: -#line 1106 "parse.y" +case 173: +#line 1143 "parse.y" { yyval.ca_p = ZMALLOC(CA_REC) ; yyval.ca_p->type = ST_NONE ; yyval.ca_p->link = yystack.l_mark[-2].ca_p ; yyval.ca_p->arg_num = (short) (yystack.l_mark[-2].ca_p ? yystack.l_mark[-2].ca_p->arg_num+1 : 0) ; - yyval.ca_p->call_lineno = token_lineno; + yyval.ca_p->call_lineno = token_lineno; code_call_id(yyval.ca_p, yystack.l_mark[-1].stp) ; } -#line 3912 "parse.c" +#line 3956 "parse.c" break; -case 172: -#line 1117 "parse.y" +case 174: +#line 1154 "parse.y" { yyval.ca_p = ZMALLOC(CA_REC) ; yyval.ca_p->type = CA_EXPR ; yyval.ca_p->call_offset = code_offset ; } -#line 3920 "parse.c" +#line 3964 "parse.c" break; -case 173: -#line 1123 "parse.y" +case 175: +#line 1160 "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) ; } -#line 3928 "parse.c" +#line 3972 "parse.c" break; -#line 3930 "parse.c" +#line 3974 "parse.c" default: break; } diff --git a/parse.y b/parse.y index 7b5ebbf..3d67d86 100644 --- a/parse.y +++ b/parse.y @@ -1,6 +1,6 @@ /******************************************** parse.y -copyright 2008-2016,2020, Thomas E. Dickey +copyright 2008-2020,2023, Thomas E. Dickey copyright 1991-1994,1995, Michael D. Brennan This is a source file for mawk, an implementation of @@ -11,25 +11,29 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: parse.y,v 1.24 2023/07/11 23:05:34 tom Exp $ + * $MawkId: parse.y,v 1.28 2023/07/25 19:03:52 tom Exp $ */ %{ -#include -#include "mawk.h" -#include "symtype.h" -#include "code.h" -#include "memory.h" -#include "bi_funct.h" -#include "bi_vars.h" -#include "jmp.h" -#include "field.h" -#include "files.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include -#define YYMAXDEPTH 200 +#define YYMAXDEPTH 200 + +#if defined(YYBYACC) && (YYBYACC < 2) +extern int yylex(void); +#endif extern void eat_nl(void); + static SYMTAB *save_arglist(const char *); static int init_arglist(void); static void RE_as_arg(void); @@ -335,10 +339,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 @@ -413,30 +417,7 @@ args : expr %prec LPAREN ; builtin : - BUILTIN mark LPAREN ID RPAREN - { const 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) ) { - check_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 + BUILTIN mark LPAREN arglist RPAREN { const BI_REC *p = $1 ; $$ = $2 ; if ( (int)p->min_args > $4 || (int)p->max_args < $4 ) @@ -447,12 +428,6 @@ builtin : { code1(_PUSHINT) ; code1($4) ; } code2(_BUILTIN , p->fp) ; } - | LENGTH /* this is an irritation */ - { - $$ = code_offset ; - code1(_PUSHINT) ; code1(0) ; - code2(_BUILTIN, $1->fp) ; - } ; /* an empty production to store the code_ptr */ @@ -484,7 +459,7 @@ pr_args : arglist { code2op(_PUSHINT, $1) ; } ; arg2 : expr COMMA expr - { $$ = (ARG2_REC*) zmalloc(sizeof(ARG2_REC)) ; + { $$ = ZMALLOC(ARG2_REC) ; $$->start = $1 ; $$->cnt = 2 ; } @@ -816,8 +791,9 @@ split_back : RPAREN { if ( CDP($2) == code_ptr - 2 ) { - if ( code_ptr[-2].op == _MATCH0 ) + if ( code_ptr[-2].op == _MATCH0 ) { RE_as_arg() ; + } else if ( code_ptr[-2].op == _PUSHS ) { CELL *cp = ZMALLOC(CELL) ; @@ -833,7 +809,69 @@ split_back : RPAREN } ; +/* distinguish length vs length(string) vs length(array) */ +p_expr : LENGTH + { $$ = code_offset ; + code2(_PUSHI,field) ; + code2(_BUILTIN,bi_length) ; + } + | LENGTH LPAREN RPAREN + { $$ = code_offset ; + code2(_PUSHI,field) ; + code2(_BUILTIN,bi_length) ; + } + | LENGTH LPAREN expr RPAREN + { $$ = $3 ; + code2(_BUILTIN,bi_length) ; + } + | LENGTH LPAREN ID RPAREN + { + SYMTAB* stp = $3; + $$ = code_offset; + switch (stp->type) { + case ST_VAR: + code2(_PUSHI, stp->stval.cp); + code2(_BUILTIN, bi_length); + break; + case ST_ARRAY: + code2(A_PUSHA, stp->stval.array); + code2(_BUILTIN, bi_alength); + break; + + case ST_LOCAL_VAR: + code2op(L_PUSHI, stp->offset); + code2(_BUILTIN, bi_length); + break; + + case ST_LOCAL_ARRAY: + code2op(LA_PUSHA, stp->offset); + code2(_BUILTIN, bi_alength); + break; + + case ST_NONE: + /* defer_alen */ + code2(A_LENGTH, stp); + code2(_BUILTIN, bi_length); + break; + + case ST_LOCAL_NONE: + /* defer_len */ + { + DEFER_LEN* pi = ZMALLOC(DEFER_LEN); + pi->fbp = active_funct; + pi->offset = stp->offset; + code2(_LENGTH, pi); + code2(_BUILTIN, bi_length); + } + break; + + default: + type_error(stp); + break; + } + } + ; /* match(expr, RE) */ @@ -993,8 +1031,8 @@ funct_start : funct_head LPAREN f_arglist RPAREN (INST *) zmalloc(INST_BYTES(PAGESZ)); code_limit = code_base + PAGESZ ; code_warn = code_limit - CODEWARN ; - improve_arglist($1->name); - free_arglist(); + improve_arglist($1->name); + free_arglist(); } ; @@ -1004,8 +1042,7 @@ funct_head : FUNCTION ID if ( $2->type == ST_NONE ) { $2->type = ST_FUNCT ; - fbp = $2->stval.fbp = - (FBLOCK *) zmalloc(sizeof(FBLOCK)) ; + fbp = $2->stval.fbp = ZMALLOC(FBLOCK) ; fbp->name = $2->name ; fbp->code = (INST*) 0 ; } @@ -1015,7 +1052,7 @@ funct_head : FUNCTION ID /* this FBLOCK will not be put in the symbol table */ - fbp = (FBLOCK*) zmalloc(sizeof(FBLOCK)) ; + fbp = ZMALLOC(FBLOCK) ; fbp->name = "" ; } $$ = fbp ; @@ -1034,7 +1071,7 @@ f_arglist : /* empty */ { $$ = init_arglist() ; } f_args : ID { init_arglist(); - $1 = save_arglist($1->name) ; + $1 = save_arglist($1->name) ; $1->offset = 0 ; $$ = 1 ; } @@ -1080,7 +1117,7 @@ call_args : LPAREN RPAREN { $$ = $2 ; $$->link = $1 ; $$->arg_num = (short) ($1 ? $1->arg_num+1 : 0) ; - $$->call_lineno = token_lineno; + $$->call_lineno = token_lineno; } ; @@ -1100,14 +1137,14 @@ ca_front : LPAREN $$->type = CA_EXPR ; $$->arg_num = (short) ($1 ? $1->arg_num+1 : 0) ; $$->call_offset = code_offset ; - $$->call_lineno = token_lineno; + $$->call_lineno = token_lineno; } | ca_front ID COMMA { $$ = ZMALLOC(CA_REC) ; $$->type = ST_NONE ; $$->link = $1 ; $$->arg_num = (short) ($1 ? $1->arg_num+1 : 0) ; - $$->call_lineno = token_lineno; + $$->call_lineno = token_lineno; code_call_id($$, $2) ; } @@ -1187,7 +1224,7 @@ save_arglist(const char *s) CA_REC *saveit = ZMALLOC(CA_REC); if (saveit != 0) { - CA_REC *p, *q; + CA_REC *p, *q; int arg_num = 0; for (p = active_arglist, q = 0; p != 0; q = p, p = p->link) { diff --git a/patchlev.h b/patchlev.h index 234d8a2..082376a 100644 --- a/patchlev.h +++ b/patchlev.h @@ -11,9 +11,9 @@ the GNU General Public License, version 2, 1991. */ /* - * $MawkId: patchlev.h,v 1.131 2023/05/25 23:29:39 tom Exp $ + * $MawkId: patchlev.h,v 1.132 2023/07/25 23:29:43 tom Exp $ */ #define PATCH_BASE 1 #define PATCH_LEVEL 3 #define PATCH_STRING ".4" -#define DATE_STRING "20230525" +#define DATE_STRING "20230725" diff --git a/print.c b/print.c index fe3f83a..b87eca8 100644 --- a/print.c +++ b/print.c @@ -11,7 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: print.c,v 1.43 2023/05/26 00:08:54 tom Exp $ + * $MawkId: print.c,v 1.44 2023/07/23 15:14:06 tom Exp $ */ #include "mawk.h" @@ -105,8 +105,7 @@ print_cell(CELL *p, FILE *fp) */ CELL * -bi_print( - CELL *sp) /* stack ptr passed in */ +bi_print(CELL *sp) /* stack ptr passed in */ { register CELL *p; register int k; diff --git a/re_cmpl.c b/re_cmpl.c index 88843bd..a4ea89b 100644 --- a/re_cmpl.c +++ b/re_cmpl.c @@ -1,6 +1,6 @@ /******************************************** re_cmpl.c -copyright 2008-2016,2020, Thomas E. Dickey +copyright 2008-2020,2023, Thomas E. Dickey copyright 1991-1994,2014, 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: re_cmpl.c,v 1.32 2020/09/25 08:11:16 tom Exp $ + * $MawkId: re_cmpl.c,v 1.34 2023/07/20 00:32:26 tom Exp $ */ /* re_cmpl.c */ @@ -98,14 +98,14 @@ re_compile(STRING * sval) /* this is only used by da() */ -char * +STRING * re_uncompile(PTR m) { register RE_NODE *p; for (p = re_list; p; p = p->link) if (p->re.compiled == cast_to_re(m)) - return p->sval->str; + return p->sval; #ifdef DEBUG bozo("non compiled machine"); #else @@ -364,7 +364,7 @@ repl_compile(STRING * sval) /* return the string for a CELL or type REPL or REPLV, this is only used by da() */ -char * +const STRING * repl_uncompile(CELL *cp) { register REPL_NODE *p = repl_list; @@ -372,7 +372,7 @@ repl_uncompile(CELL *cp) if (cp->type == C_REPL) { while (p) { if (p->cp->type == C_REPL && p->cp->ptr == cp->ptr) - return p->sval->str; + return p->sval; else p = p->link; } @@ -381,7 +381,7 @@ repl_uncompile(CELL *cp) if (p->cp->type == C_REPLV && memcmp(cp->ptr, p->cp->ptr, cp->vcnt * sizeof(STRING *)) == 0) - return p->sval->str; + return p->sval; else p = p->link; } diff --git a/repl.h b/repl.h index 0110d0b..207c731 100644 --- a/repl.h +++ b/repl.h @@ -1,6 +1,6 @@ /******************************************** repl.h -copyright 2009-2014,2020, Thomas E. Dickey +copyright 2009-2020,2023, Thomas E. Dickey copyright 1991,1993, 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: repl.h,v 1.9 2020/07/17 23:16:52 tom Exp $ + * $MawkId: repl.h,v 1.11 2023/07/20 00:32:26 tom Exp $ */ /* repl.h */ @@ -36,10 +36,10 @@ typedef struct re_data { #define refRE_DATA(re) ((PTR) &(re)) PTR re_compile(STRING *); -char *re_uncompile(PTR); +STRING *re_uncompile(PTR); CELL *repl_compile(STRING *); -char *repl_uncompile(CELL *); +const STRING *repl_uncompile(CELL *); void re_destroy(PTR); void repl_destroy(CELL *); CELL *replv_cpy(CELL *, CELL *); diff --git a/rexp.c b/rexp.c index 369faa3..326daf7 100644 --- a/rexp.c +++ b/rexp.c @@ -1,6 +1,6 @@ /******************************************** rexp.c -copyright 2008-2017,2020, Thomas E. Dickey +copyright 2008-2020,2023, Thomas E. Dickey copyright 1991-1993,1996, 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: rexp.c,v 1.34 2020/10/23 08:07:50 tom Exp $ + * $MawkId: rexp.c,v 1.35 2023/07/24 20:46:40 tom Exp $ */ /* op precedence parser for regular expressions */ @@ -348,7 +348,7 @@ REdestroy(STATE * ptr) int n = 0; STATE *q = ptr; - TRACE(("REdestroy %p\n", ptr)); + TRACE(("REdestroy %p\n", (void *) ptr)); while (!done) { TRACE(("...%d type %d\n", n, q->s_type)); switch (q->s_type) { diff --git a/rexp.h b/rexp.h index 831bb4c..9b68704 100644 --- a/rexp.h +++ b/rexp.h @@ -1,6 +1,6 @@ /******************************************** rexp.h -copyright 2008-2020,2021, Thomas E. Dickey +copyright 2008-2021,2023, Thomas E. Dickey copyright 2010, Jonathan Nieder copyright 1991,2014, Michael D. Brennan @@ -12,7 +12,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: rexp.h,v 1.39 2021/05/28 08:23:39 tom Exp $ + * $MawkId: rexp.h,v 1.40 2023/07/23 11:32:20 tom Exp $ */ #ifndef REXP_H @@ -61,7 +61,7 @@ typedef UChar BV[32]; /* bit vector */ typedef struct { SType s_type; - SLen s_len; /* used for M_STR */ + size_t s_len; /* used for M_STR */ union { char *str; /* string */ BV *bvp; /* class */ diff --git a/rexp1.c b/rexp1.c index bb52fbb..2f8bd64 100644 --- a/rexp1.c +++ b/rexp1.c @@ -11,7 +11,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: rexp1.c,v 1.23 2023/07/13 08:09:35 tom Exp $ + * $MawkId: rexp1.c,v 1.24 2023/07/23 11:30:35 tom Exp $ */ /* re machine operations */ @@ -90,7 +90,7 @@ RE_str(char *str, size_t len) MACHINE x; new_TWO(M_STR, &x); - x.start->s_len = (SLen) len; + x.start->s_len = len; x.start->s_data.str = str; return x; } diff --git a/rexp3.c b/rexp3.c index 95d4f2b..8261a18 100644 --- a/rexp3.c +++ b/rexp3.c @@ -1,6 +1,6 @@ /******************************************** rexp3.c -copyright 2008-2017,2020, Thomas E. Dickey +copyright 2008-2020,2023, Thomas E. Dickey copyright 2010, Jonathan Nieder copyright 1991-1992,1993, Michael D. Brennan @@ -12,7 +12,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: rexp3.c,v 1.48 2020/10/22 22:45:12 tom Exp $ + * $MawkId: rexp3.c,v 1.50 2023/07/24 20:43:39 tom Exp $ */ /* match a string against a machine */ @@ -206,7 +206,7 @@ REmatch(char *str, /* string to test */ case M_STR + U_ON + END_ON: TRACE2(("@%d, now %03d\n", __LINE__, (int) (m - machine))); - t = (int) ((SLen) (str_end - s) - m->s_len); + t = (int) ((size_t) (str_end - s) - m->s_len); if (t < 0 || memcmp(ts = s + t, m->s_data.str, (size_t) m->s_len)) { RE_FILL(); } diff --git a/rexp4.c b/rexp4.c index 2ead00f..a79046d 100644 --- a/rexp4.c +++ b/rexp4.c @@ -1,6 +1,6 @@ /* regexp_system.c -copyright 2009-2010,2014 Thomas E. Dickey +copyright 2009-2014,2023 Thomas E. Dickey copyright 2005, Aleksey Cheusov This is a source file for mawk, an implementation of @@ -11,14 +11,14 @@ the GNU General Public License, version 2, 1991. */ /* - * $MawkId: rexp4.c,v 1.8 2014/08/22 00:52:21 tom Exp $ + * $MawkId: rexp4.c,v 1.9 2023/07/23 11:32:20 tom Exp $ */ #include "mawk.h" #include "rexp.h" #include "field.h" char * -is_string_split(PTR q, SLen * lenp) +is_string_split(PTR q, size_t * lenp) { STATE *p = (STATE *) q; diff --git a/rexpdb.c b/rexpdb.c index 9e8f26b..1f47adc 100644 --- a/rexpdb.c +++ b/rexpdb.c @@ -1,6 +1,6 @@ /******************************************** rexpdb.c -copyright 2008-2016,2020, Thomas E. Dickey +copyright 2008-2020,2023, Thomas E. Dickey copyright 1991,1993, 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: rexpdb.c,v 1.23 2020/10/23 23:32:39 tom Exp $ + * $MawkId: rexpdb.c,v 1.24 2023/07/20 00:10:52 tom Exp $ */ #include "rexp.h" @@ -67,7 +67,7 @@ REmprint(STATE * m, FILE *f) switch (p->s_type) { case M_STR: fprintf(f, "\t"); - da_string(f, p->s_data.str, (size_t) p->s_len); + da_string2(f, p->s_data.str, (size_t) p->s_len, '"'); break; case M_1J: diff --git a/scan.c b/scan.c index 060fe7d..c61e16b 100644 --- a/scan.c +++ b/scan.c @@ -12,7 +12,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: scan.c,v 1.50 2023/07/16 23:38:30 tom Exp $ + * $MawkId: scan.c,v 1.52 2023/07/25 19:12:26 tom Exp $ */ #include "mawk.h" @@ -420,7 +420,7 @@ yylex(void) case SC_ESCAPE: while (scan_code[NextUChar(c)] == SC_SPACE) { ; /* empty */ - }; + } if (c == '\n') { token_lineno = ++lineno; goto reswitch; @@ -533,8 +533,8 @@ yylex(void) ct_ret(RBOX); case SC_MATCH: - string_buff[1] = '~'; - string_buff[0] = 0; + string_buff[0] = '~'; + string_buff[1] = 0; yylval.ival = 1; ct_ret(MATCH); @@ -675,7 +675,7 @@ yylex(void) while (scan_code[NextUChar(c)] == SC_SPACE) { ; /* empty */ - }; + } if (scan_code[c] != SC_DIGIT && scan_code[c] != SC_DOT) { un_next(); @@ -726,8 +726,7 @@ yylex(void) /* check for function call before defined */ if (next() == CHR_LPAREN) { stp->type = ST_FUNCT; - stp->stval.fbp = (FBLOCK *) - zmalloc(sizeof(FBLOCK)); + stp->stval.fbp = ZMALLOC(FBLOCK); stp->stval.fbp->name = stp->name; stp->stval.fbp->code = (INST *) 0; stp->stval.fbp->size = 0; @@ -780,20 +779,6 @@ yylex(void) current_token = BUILTIN; break; - case ST_LENGTH: - - yylval.bip = stp->stval.bip; - - /* check for length alone, this is an ugly - hack */ - while (scan_code[NextUChar(c)] == SC_SPACE) { - ; /* empty */ - }; - un_next(); - - current_token = c == CHR_LPAREN ? BUILTIN : LENGTH; - break; - case ST_FIELD: yylval.cp = stp->stval.cp; current_token = FIELD; diff --git a/scan.h b/scan.h index 0a2d667..cdcb9cc 100644 --- a/scan.h +++ b/scan.h @@ -12,13 +12,13 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: scan.h,v 1.6 2023/07/16 19:21:02 tom Exp $ + * $MawkId: scan.h,v 1.7 2023/07/23 08:56:43 tom Exp $ */ /* scan.h */ -#ifndef SCAN_H_INCLUDED -#define SCAN_H_INCLUDED 1 +#ifndef MAWK_SCAN_H +#define MAWK_SCAN_H #include @@ -34,4 +34,4 @@ extern void eat_nl(void); /* in error.c */ extern void unexpected_char(void); -#endif /* SCAN_H_INCLUDED */ +#endif /* MAWK_SCAN_H */ diff --git a/scancode.h b/scancode.h index 0c91cc4..af06f23 100644 --- a/scancode.h +++ b/scancode.h @@ -1,5 +1,6 @@ /******************************************** scancode.h +copyright 2023, Thomas E. Dickey copyright 2009, Jonathan Nieder copyright 1991, Michael D. Brennan @@ -11,8 +12,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: scancode.h,v 1.2 2010/12/10 17:00:00 tom Exp $ - * @Log: scancode.h,v @ + * $MawkId: scancode.h,v 1.3 2023/07/22 22:31:02 tom Exp $ */ /* scancode.h */ @@ -24,39 +24,41 @@ extern char scan_code[256]; /* the scan codes to compactify the main switch */ -#define SC_SPACE 1 -#define SC_NL 2 -#define SC_SEMI_COLON 3 -#define SC_FAKE_SEMI_COLON 4 -#define SC_LBRACE 5 -#define SC_RBRACE 6 -#define SC_QMARK 7 -#define SC_COLON 8 -#define SC_OR 9 -#define SC_AND 10 -#define SC_PLUS 11 -#define SC_MINUS 12 -#define SC_MUL 13 -#define SC_DIV 14 -#define SC_MOD 15 -#define SC_POW 16 -#define SC_LPAREN 17 -#define SC_RPAREN 18 -#define SC_LBOX 19 -#define SC_RBOX 20 -#define SC_IDCHAR 21 -#define SC_DIGIT 22 -#define SC_DQUOTE 23 -#define SC_ESCAPE 24 -#define SC_COMMENT 25 -#define SC_EQUAL 26 -#define SC_NOT 27 -#define SC_LT 28 -#define SC_GT 29 -#define SC_COMMA 30 -#define SC_DOT 31 -#define SC_MATCH 32 -#define SC_DOLLAR 33 -#define SC_UNEXPECTED 34 +typedef enum { + SC_SPACE = 1 + ,SC_NL + ,SC_SEMI_COLON + ,SC_FAKE_SEMI_COLON + ,SC_LBRACE + ,SC_RBRACE + ,SC_QMARK + ,SC_COLON + ,SC_OR + ,SC_AND + ,SC_PLUS + ,SC_MINUS + ,SC_MUL + ,SC_DIV + ,SC_MOD + ,SC_POW + ,SC_LPAREN + ,SC_RPAREN + ,SC_LBOX + ,SC_RBOX + ,SC_IDCHAR + ,SC_DIGIT + ,SC_DQUOTE + ,SC_ESCAPE + ,SC_COMMENT + ,SC_EQUAL + ,SC_NOT + ,SC_LT + ,SC_GT + ,SC_COMMA + ,SC_DOT + ,SC_MATCH + ,SC_DOLLAR + ,SC_UNEXPECTED +} SCAN_CODES; #endif /* SCANCODE_H_INCLUDED */ diff --git a/split.h b/split.h index fc45bc5..541cb59 100644 --- a/split.h +++ b/split.h @@ -1,6 +1,6 @@ /******************************************** split.h -copyright 2014, Thomas E. Dickey +copyright 2014,2023 Thomas E. Dickey copyright 2014, Michael D. Brennan This is a source file for mawk, an implementation of @@ -11,18 +11,18 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: split.h,v 1.2 2014/09/14 21:34:37 tom Exp $ + * $MawkId: split.h,v 1.4 2023/07/23 08:58:07 tom Exp $ */ /* split.h */ -#ifndef SCAN_H -#define SCAN_H +#ifndef MAWK_SPLIT_H +#define MAWK_SPLIT_H extern size_t null_split(const char *s, size_t slen); extern size_t re_split(char *s, size_t slen, PTR re); extern size_t space_split(const char *s, size_t slen); extern void transfer_to_array(CELL cp[], size_t cnt); -extern void transfer_to_fields(size_t); +extern void transfer_to_fields(size_t cnt); -#endif /* SCAN_H */ +#endif /* MAWK_SPLIT_H */ diff --git a/symtype.h b/symtype.h index 44ad00e..d100ab4 100644 --- a/symtype.h +++ b/symtype.h @@ -1,6 +1,6 @@ /******************************************** symtype.h -copyright 2009-2016,2020, Thomas E. Dickey +copyright 2009-2020,2023, 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.20 2020/01/07 02:20:06 tom Exp $ + * $MawkId: symtype.h,v 1.21 2023/07/24 21:40:11 tom Exp $ */ /* types related to symbols are defined here */ @@ -73,7 +73,6 @@ typedef enum { ,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 @@ -132,6 +131,12 @@ typedef struct fcall { short arg_cnt_checked; } FCALL_REC; +/* defer analysis from length() parameter for forward-references */ +typedef struct { + short offset; + FBLOCK *fbp; +} DEFER_LEN; + extern FCALL_REC *resolve_list; extern void resolve_fcalls(void); diff --git a/test/fpe_test b/test/fpe_test index bba9379..4898f71 100755 --- a/test/fpe_test +++ b/test/fpe_test @@ -1,7 +1,7 @@ #!/bin/sh -# $MawkId: fpe_test,v 1.8 2022/12/29 15:20:09 tom Exp $ +# $MawkId: fpe_test,v 1.9 2023/07/25 21:27:38 tom Exp $ ############################################################################### -# copyright 2009-2010,2022, Thomas E. Dickey +# copyright 2009-2022,2023, Thomas E. Dickey # copyright 2010, Guido Berhoerster # copyright 1994,1995, Michael D. Brennan # @@ -14,14 +14,6 @@ # tests if mawk has been compiled to correctly handle # floating point exceptions -# -# @Log: fpe_test,v @ -# Revision 1.3 1995/08/29 14:17:18 mike -# exit 2 changes -# -# Revision 1.2 1994/12/18 18:51:55 mike -# recognize NAN printed as ? for hpux -# PROG="${MAWK:-../mawk}" diff --git a/trace.c b/trace.c index 6bf1c30..bc693a8 100644 --- a/trace.c +++ b/trace.c @@ -1,6 +1,6 @@ /******************************************** trace.c -copyright 2012-2016,2019 Thomas E. Dickey +copyright 2012-2019,2023 Thomas E. Dickey This is a source file for mawk, an implementation of the AWK programming language. @@ -10,7 +10,7 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: trace.c,v 1.16 2019/02/02 02:02:33 tom Exp $ + * $MawkId: trace.c,v 1.18 2023/07/24 20:42:21 tom Exp $ */ #include #include @@ -68,7 +68,9 @@ TraceCell(CELL *cp) TRACE(("split on the empty string\n")); break; case C_RE: - TRACE(("a regular expression at %p: %s\n", cp->ptr, re_uncompile(cp->ptr))); + TRACE(("a regular expression at %p: ", cp->ptr)); + da_string(trace_fp, re_uncompile(cp->ptr), '/'); + fputc('\n', trace_fp); break; case C_REPL: TRACE(("a replacement string at %p: ", cp->ptr)); @@ -144,7 +146,6 @@ TraceInst(INST * p, INST * base) case ALOOP: case A_CAT: case A_DEL: - case A_LENGTH: case A_TEST: case DEL_A: case FE_PUSHA: @@ -166,6 +167,8 @@ TraceInst(INST * p, INST * base) case LA_PUSHA: case L_PUSHA: case L_PUSHI: + case _LENGTH: + case A_LENGTH: case NF_PUSHI: case OL_GL: case OL_GL_NR: diff --git a/types.h b/types.h index 005205d..c2f55cf 100644 --- a/types.h +++ b/types.h @@ -1,6 +1,6 @@ /******************************************** types.h -copyright 2009-2014,2016 Thomas E. Dickey +copyright 2009-2016,2023 Thomas E. Dickey copyright 1991-1993,2014 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: types.h,v 1.13 2016/09/27 00:59:29 tom Exp $ + * $MawkId: types.h,v 1.14 2023/07/23 11:32:20 tom Exp $ */ /* types.h */ @@ -90,6 +90,5 @@ typedef union { /* regex types */ typedef int SType; -typedef size_t SLen; #endif /* MAWK_TYPES_H */ diff --git a/zmalloc.h b/zmalloc.h index 69709a1..e07fd85 100644 --- a/zmalloc.h +++ b/zmalloc.h @@ -1,6 +1,6 @@ /******************************************** zmalloc.h -copyright 2009,2010, Thomas E. Dickey +copyright 2009-2010,2023 Thomas E. Dickey copyright 1991,1993, Michael D. Brennan This is a source file for mawk, an implementation of @@ -11,25 +11,13 @@ the GNU General Public License, version 2, 1991. ********************************************/ /* - * $MawkId: zmalloc.h,v 1.7 2010/12/10 17:00:00 tom Exp $ - * @Log: zmalloc.h,v @ - * Revision 1.2 1993/07/04 12:52:22 mike - * start on autoconfig changes - * - * Revision 1.1.1.1 1993/07/03 18:58:23 mike - * move source to cvs - * - * Revision 5.1 1991/12/05 07:59:41 brennan - * 1.1 pre-release - * + * $MawkId: zmalloc.h,v 1.8 2023/07/25 21:20:54 tom Exp $ */ -/* zmalloc.h */ - #ifndef ZMALLOC_H #define ZMALLOC_H -#include "nstd.h" +#include extern PTR zmalloc(size_t); extern void zfree(PTR, size_t);