From 2355afc957932e3137e42c8c17d985d08bbc1f49 Mon Sep 17 00:00:00 2001 From: "Paul \"LeoNerd\" Evans" Date: Thu, 28 Aug 2025 11:27:26 +0100 Subject: [PATCH 1/2] WIP: named signature params --- dump.c | 5 + embed.fnc | 5 + embed.h | 1 + op.c | 273 +++++-- op.h | 23 +- perly.act | 970 +++++++++++++------------ perly.h | 2 +- perly.tab | 1755 +++++++++++++++++++++++---------------------- perly.y | 24 +- pod/perldiag.pod | 20 + pp.c | 176 ++++- proto.h | 6 + t/op/signatures.t | 29 + toke.c | 22 + 14 files changed, 1854 insertions(+), 1457 deletions(-) diff --git a/dump.c b/dump.c index 58271d92f2f2..391045937de7 100644 --- a/dump.c +++ b/dump.c @@ -1804,6 +1804,11 @@ S_do_op_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const OP *o, S_opdump_indent(aTHX_ o, level, bar, file, " PARAM [%zd] ANON\n", i); } + for(size_t i = 0; i < aux->n_named; i++) { + struct op_multiparam_named_aux *named = aux->named + i; + S_opdump_indent(aTHX_ o, level, bar, file, " NAMEDPARAM <%.*s> PADIX = %" UVuf "%s\n", + named->namelen, named->namepv, named->padix, named->is_required ? "" : " OPT"); + } if(aux->slurpy) S_opdump_indent(aTHX_ o, level, bar, file, "SLURPY = '%c' PADIX = %" UVuf "\n", diff --git a/embed.fnc b/embed.fnc index 8e32ba20ce9a..1811750f98ad 100644 --- a/embed.fnc +++ b/embed.fnc @@ -3126,6 +3126,11 @@ p |void |sub_crush_depth|NN CV *cv : Used in perly.y p |void |subsignature_append_fence_op \ |NN OP *o +p |void |subsignature_append_named \ + |NN const char *paramname \ + |PADOFFSET padix \ + |OPCODE defmode \ + |NULLOK OP *defexpr p |void |subsignature_append_positional \ |PADOFFSET padix \ |OPCODE defmode \ diff --git a/embed.h b/embed.h index 3ccf89db85ca..011105502979 100644 --- a/embed.h +++ b/embed.h @@ -1165,6 +1165,7 @@ # define sighandler3 Perl_sighandler3 # define sub_crush_depth(a) Perl_sub_crush_depth(aTHX_ a) # define subsignature_append_fence_op(a) Perl_subsignature_append_fence_op(aTHX_ a) +# define subsignature_append_named(a,b,c,d) Perl_subsignature_append_named(aTHX_ a,b,c,d) # define subsignature_append_positional(a,b,c) Perl_subsignature_append_positional(aTHX_ a,b,c) # define subsignature_append_slurpy(a,b) Perl_subsignature_append_slurpy(aTHX_ a,b) # define subsignature_finish() Perl_subsignature_finish(aTHX) diff --git a/op.c b/op.c index 93510fbc0544..e49eddd8a72d 100644 --- a/op.c +++ b/op.c @@ -1227,7 +1227,17 @@ Perl_op_clear(pTHX_ OP *o) break; case OP_MULTIPARAM: - PerlMemShared_free(cUNOP_AUXo->op_aux); + { + struct op_multiparam_aux *aux = (struct op_multiparam_aux *)cUNOP_AUXo->op_aux; + if(aux->named) { + for(size_t namedix = 0; namedix < aux->n_named; namedix++) { + struct op_multiparam_named_aux *named = aux->named + namedix; + Safefree(named->namepv); + } + PerlMemShared_free(aux->named); + } + PerlMemShared_free(aux); + } break; case OP_MULTICONCAT: @@ -16562,7 +16572,8 @@ Perl_rcpv_copy(pTHX_ char *pv) { /* Subroutine signature parsing */ struct yy_parser_signature_param { - size_t argix; /* positional index of the param */ + size_t argix; /* positional params: index of the param */ + SV *paramname; /* named params: name of the param */ PADOFFSET padix; /* pad index of the var holding the param */ OP *defcop; OPCODE defmode; @@ -16578,9 +16589,10 @@ struct yy_parser_signature { * parameter. Here, while it is exactly one *parameter*, it may account * zero or more arguments. */ - UV next_argix; /* the argument index of the next parameter we add */ - UV opt_params; /* number of optional scalar parameters */ - char slurpy; /* the sigil of the slurpy var (or null) */ + UV next_argix; /* the argument index of the next parameter we add */ + UV opt_params; /* number of optional positional scalar parameters */ + UV named_params; /* number of named scalar parameters */ + char slurpy; /* the sigil of the slurpy var (or null) */ UV nparams; /* number of elements of the following array that are in use */ UV params_size; /* number of elements we could store in the following array */ @@ -16598,6 +16610,8 @@ destroy_subsignature_context(pTHX_ void *p) for(size_t parami = 0; parami < signature->nparams; parami++) { struct yy_parser_signature_param *param = signature->params + parami; + if(param->paramname) + SvREFCNT_dec(param->paramname); if(param->defcop) op_free(param->defcop); if(param->defexpr) @@ -16628,6 +16642,7 @@ S_subsignature_push_param(pTHX) signature->nparams++; param->argix = 0; + param->paramname = NULL; param->padix = 0; param->defcop = NULL; param->defmode = 0; @@ -16693,6 +16708,38 @@ Perl_subsignature_append_fence_op(pTHX_ OP *o) signature->fenceops = newLISTOP(OP_LINESEQ, 0, o, NULL); } +#define subsignature_param_add_defexpr(param, defmode, defexpr) S_subsignature_param_add_defexpr(aTHX_ param, defmode, defexpr) +static void +S_subsignature_param_add_defexpr(pTHX_ struct yy_parser_signature_param *param, OPCODE defmode, OP *defexpr) +{ + if(defexpr->op_type == OP_NULL && !(defexpr->op_flags & OPf_KIDS)) + { + /* caller passed in newOP(OP_NULL, 0), so we should not leak it */ + op_free(defexpr); + + defexpr = newOP(OP_STUB, OPf_WANT_SCALAR); + + /* handle '$=' special case */ + if(param->padix) + yyerror("Optional parameter lacks default expression"); + } + + /* generate the COP here so the line number is correct */ + param->defcop = newSTATEOP(0, NULL, NULL); + + param->defmode = defmode; + param->defexpr = defexpr; + scalar(defexpr); + + if(!param->padix) { + /* A defaulting expression with anonymous var still needs to be + * conditional. We'll just have to allocate a pad temporary to + * store the value in anyway, so OP_PARAMTEST can check it. + */ + param->padix = pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK, NULL, NULL); + } +} + /* Appends another positional scalar parameter to the accumulated set of * subroutine params. `padix` may be zero, but if not it must be the pad * index of a scalar pad lexical to store the incoming argument value into. @@ -16719,6 +16766,11 @@ Perl_subsignature_append_positional(pTHX_ PADOFFSET padix, OPCODE defmode, OP *d return; } + if(signature->named_params) { + yyerror("Positional parameter follows named parameter"); + return; + } + UV argix = signature->next_argix; signature->next_argix++; @@ -16743,36 +16795,52 @@ Perl_subsignature_append_positional(pTHX_ PADOFFSET padix, OPCODE defmode, OP *d if(defexpr) { signature->opt_params++; + subsignature_param_add_defexpr(param, defmode, defexpr); + } - if(defexpr->op_type == OP_NULL && !(defexpr->op_flags & OPf_KIDS)) - { - /* caller passed in newOP(OP_NULL, 0), so we should not leak it */ - op_free(defexpr); + assert(param->padix || param->defexpr); +} - defexpr = newOP(OP_STUB, OPf_WANT_SCALAR); +/* Appends another named scalar parameter to the accumulated set of subroutine + * params. `padix` gives the pad index of a scalar pad lexical to store the + * incoming argument value into. It must not be zero, as "anonymous" named + * parameters are not allowed (in any case it's hard to imagine how that would + * be parsed ;) ). + * If `defexpr` is not NULL, it gives a defaulting expression to be evaluated + * if required, according to `defmode` - one of zero, `OP_DORASSIGN` or + * `OP_ORASSIGN`. + */ - /* handle '$=' special case */ - if(padix) - yyerror("Optional parameter lacks default expression"); - } +void +Perl_subsignature_append_named(pTHX_ const char *paramname, PADOFFSET padix, OPCODE defmode, OP *defexpr) +{ + PERL_ARGS_ASSERT_SUBSIGNATURE_APPEND_NAMED; + assert(padix); + + assert(PL_parser); + yy_parser_signature *signature = PL_parser->signature; + assert(signature); + + if(signature->slurpy) { + yyerror("Slurpy parameter not last"); + return; + } - /* generate the COP here so the line number is correct */ - param->defcop = newSTATEOP(0, NULL, NULL); + struct yy_parser_signature_param *param = subsignature_push_param(); + param->paramname = newSVpvn_utf8(paramname, strlen(paramname), true); - param->defmode = defmode; - param->defexpr = defexpr; - scalar(defexpr); + signature->named_params++; - if(!padix) { - /* A defaulting expression with anonymous var still needs to be - * conditional. We'll just have to allocate a pad temporary to - * store the value in anyway, so OP_PARAMTEST can check it. - */ - param->padix = pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK, NULL, NULL); - } + param->padix = padix; + + intro_my(); /* introduce the new pad variable now */ + + if(defexpr) { + subsignature_param_add_defexpr(param, defmode, defexpr); } - assert(param->padix || param->defexpr); + assert(param->padix); + assert(param->paramname); } /* Appends a final slurpy parameter to the accumulated set of subroutine @@ -16810,6 +16878,42 @@ Perl_subsignature_append_slurpy(pTHX_ I32 sigil, PADOFFSET padix) param->padix = padix; } +#define subsignature_build_defop(param) S_subsignature_build_defop(aTHX_ param) +static OP * +S_subsignature_build_defop(pTHX_ struct yy_parser_signature_param *param) +{ + OP *defexpr = param->defexpr; + assert(defexpr); + OP *defexpr_start = LINKLIST(defexpr); + + /* Need to build OP_PARAMTEST[ other: OP_PARAMSTORE[ default-expr ] ] */ + OP *paramstore; + OP *paramtest = (OP *)alloc_LOGOP(OP_PARAMTEST, + paramstore = newUNOP(OP_PARAMSTORE, 0, defexpr), + defexpr_start); + + paramtest->op_flags |= OPf_WANT_VOID; + paramtest->op_targ = paramstore->op_targ = param->padix; + + if(param->defmode == OP_DORASSIGN) + paramtest->op_private |= OPpPARAM_IF_UNDEF; + if(param->defmode == OP_ORASSIGN) + paramtest->op_private |= OPpPARAM_IF_FALSE; + + defexpr->op_next = paramstore; + + /* Wrap both in an outer OP_NULL so we can point both ->op_next + * pointers within into it + */ + OP *o = newUNOP(OP_NULL, 0, paramtest); + + paramstore->op_next = o; + paramtest->op_next = o; + o->op_next = paramtest; /* set start of o */ + + return o; +} + /* Called from perly.y on encountering the closing `)` of a subroutine * signature. This creates the optree fragment responsible for processing all * the accumulated subroutine params, to be inserted at the start of the @@ -16831,16 +16935,36 @@ Perl_subsignature_finish(pTHX) newSTATEOP(0, NULL, NULL)); size_t end_argix = signature->next_argix; + size_t n_named = signature->named_params; + /* This allocates two sections in one chunk: + * the op_multiparam_aux header + * an array of end_argix * PADOFFSETs + */ struct op_multiparam_aux *aux = (struct op_multiparam_aux *)PerlMemShared_malloc( - sizeof(struct op_multiparam_aux) + (end_argix * sizeof(PADOFFSET))); - aux->param_padix = (PADOFFSET *)((char *)aux + sizeof(struct op_multiparam_aux)); + sizeof(struct op_multiparam_aux) + + (end_argix * sizeof(PADOFFSET))); + + aux->param_padix = (PADOFFSET *)( + (char *)aux + sizeof(struct op_multiparam_aux)); + + if(n_named) { + aux->named = (struct op_multiparam_named_aux *)PerlMemShared_malloc( + n_named * sizeof(struct op_multiparam_named_aux)); + } + else + aux->named = NULL; aux->min_args = end_argix - signature->opt_params; aux->n_positional = end_argix; + aux->n_named = signature->named_params; aux->slurpy = signature->slurpy; aux->slurpy_padix = 0; + if(signature->named_params && !aux->slurpy) + // maybe argcheck should do this? + aux->slurpy = '%'; + OP *multiparam = newUNOP_AUX(OP_MULTIPARAM, 0, NULL, (UNOP_AUX_item *)aux); sigops = op_append_elem(OP_LINESEQ, sigops, @@ -16862,13 +16986,20 @@ Perl_subsignature_finish(pTHX) struct yy_parser_signature_param *params = signature->params; size_t max_argix = 0; + size_t namedix = 0; - for(size_t parami = 0; parami < signature->nparams; parami++) { + size_t parami = 0; + + /* Collect up the positional scalar params */ + for(/**/; parami < signature->nparams; parami++) { struct yy_parser_signature_param *param = params + parami; size_t argix = param->argix; PADOFFSET padix = param->padix; + if(param->paramname || argix >= aux->n_positional) + break; + while(max_argix < argix) { aux->param_padix[max_argix] = 0; max_argix++; @@ -16884,46 +17015,16 @@ Perl_subsignature_finish(pTHX) aux->param_padix[argix] = padix; - OP *defexpr = param->defexpr; - assert(defexpr); - OP *defexpr_start = LINKLIST(defexpr); - - /* Need to build OP_PARAMTEST[ other: OP_PARAMSTORE[ default-expr ] ] */ - OP *paramstore; - OP *paramtest = (OP *)alloc_LOGOP(OP_PARAMTEST, - paramstore = newUNOP(OP_PARAMSTORE, 0, defexpr), - defexpr_start); - - paramtest->op_flags |= OPf_WANT_VOID; - paramtest->op_targ = paramstore->op_targ = padix; - - if(param->defmode == OP_DORASSIGN) - paramtest->op_private |= OPpPARAM_IF_UNDEF; - if(param->defmode == OP_ORASSIGN) - paramtest->op_private |= OPpPARAM_IF_FALSE; - - defexpr->op_next = paramstore; - - /* Wrap both in an outer OP_NULL so we can point both ->op_next - * pointers within into it - */ - OP *o = newUNOP(OP_NULL, 0, paramtest); - - paramstore->op_next = o; - paramtest->op_next = o; - o->op_next = paramtest; /* set start of o */ - sigops = op_append_elem(OP_LINESEQ, sigops, param->defcop); param->defcop = NULL; sigops = op_append_elem(OP_LINESEQ, sigops, - o); + subsignature_build_defop(param)); param->defexpr = NULL; } else { - /* This is the final slurpy */ - aux->slurpy_padix = padix; + NOT_REACHED; } max_argix = argix + 1; @@ -16934,6 +17035,54 @@ Perl_subsignature_finish(pTHX) max_argix++; } + /* Collect up the named params */ + for(/**/; parami < signature->nparams; parami++) { + struct yy_parser_signature_param *param = params + parami; + + if(!param->paramname) + /* this is final slurpy */ + break; + + /* For now, build the named param array in iteration order. We'll + * sort it at the end. + */ + STRLEN namelen; + char *namepv = SvPVutf8(param->paramname, namelen); + U32 namehash; + PERL_HASH(namehash, namepv, namelen); + + struct op_multiparam_named_aux *named = aux->named + namedix; + namedix++; + + named->namepv = savepv(namepv); + named->namelen = namelen; + named->namehash = namehash; + named->padix = param->padix; + + if(param->defexpr) { + named->is_required = 0; + + sigops = op_append_elem(OP_LINESEQ, sigops, + param->defcop); + param->defcop = NULL; + + sigops = op_append_elem(OP_LINESEQ, sigops, + subsignature_build_defop(param)); + param->defexpr = NULL; + } + else + named->is_required = 1; + } + + /* The final slurpy */ + if(parami < signature->nparams) { + struct yy_parser_signature_param *param = params + parami; + + assert(param->argix >= aux->n_positional); + + aux->slurpy_padix = param->padix; + } + /* a nextstate at the end handles context correctly for an empty sub body */ sigops = op_append_elem(OP_LINESEQ, sigops, newSTATEOP(0, NULL, NULL)); diff --git a/op.h b/op.h index 985b22c93b18..a4d08845ab72 100644 --- a/op.h +++ b/op.h @@ -1191,12 +1191,31 @@ struct op_argcheck_aux { /* for OP_MULTIPARAM */ +struct op_multiparam_named_aux { + const char *namepv; + STRLEN namelen; + U32 namehash; + PADOFFSET padix; + + int is_required : 1; +}; + struct op_multiparam_aux { + /* This struct will be allocated in one big chunk, containing this header + * itself, followed an array whose size is given by n_positional. The + * pointer at the end will point into the same malloc block + */ size_t min_args; /* = the number of mandatory scalar parameters */ - size_t n_positional; /* = the number of mandatory + optional scalar parameters, not counting a final slurpy */ + size_t n_positional; /* = the number of mandatory + optional positional scalar parameters, not counting a final slurpy */ + size_t n_named; /* = the number of (mandatory or optional) named scalar parameters */ char slurpy; - PADOFFSET *param_padix; /* points at storage allocated along with the struct itself, immediately following */ PADOFFSET slurpy_padix; + + /* The following points at storage allocated along with the struct itself, immediately afterwards */ + PADOFFSET *param_padix; + + /* The following may be separately allocated */ + struct op_multiparam_named_aux *named; }; #define MI_INIT_WORKAROUND_PACK "Module::Install::DSL" diff --git a/perly.act b/perly.act index e052adcce1e1..35d1f06beea7 100644 --- a/perly.act +++ b/perly.act @@ -5,7 +5,7 @@ */ case 2: /* @1: %empty */ -#line 161 "perly.y" +#line 162 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -14,7 +14,7 @@ case 2: /* @1: %empty */ break; case 3: /* grammar: GRAMPROG @1 remember stmtseq */ -#line 166 "perly.y" +#line 167 "perly.y" { newPROG(block_end((ps[-1].val.ival),(ps[0].val.opval))); PL_compiling.cop_seq = 0; @@ -24,7 +24,7 @@ case 2: /* @1: %empty */ break; case 4: /* @2: %empty */ -#line 172 "perly.y" +#line 173 "perly.y" { parser->expect = XTERM; (yyval.ival) = 0; @@ -33,7 +33,7 @@ case 2: /* @1: %empty */ break; case 5: /* grammar: GRAMEXPR @2 optexpr */ -#line 177 "perly.y" +#line 178 "perly.y" { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -42,7 +42,7 @@ case 2: /* @1: %empty */ break; case 6: /* @3: %empty */ -#line 182 "perly.y" +#line 183 "perly.y" { parser->expect = XBLOCK; (yyval.ival) = 0; @@ -51,7 +51,7 @@ case 2: /* @1: %empty */ break; case 7: /* grammar: GRAMBLOCK @3 block */ -#line 187 "perly.y" +#line 188 "perly.y" { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); @@ -63,7 +63,7 @@ case 2: /* @1: %empty */ break; case 8: /* @4: %empty */ -#line 195 "perly.y" +#line 196 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -72,7 +72,7 @@ case 2: /* @1: %empty */ break; case 9: /* grammar: GRAMBARESTMT @4 barestmt */ -#line 200 "perly.y" +#line 201 "perly.y" { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); @@ -84,7 +84,7 @@ case 2: /* @1: %empty */ break; case 10: /* @5: %empty */ -#line 208 "perly.y" +#line 209 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -93,7 +93,7 @@ case 2: /* @1: %empty */ break; case 11: /* grammar: GRAMFULLSTMT @5 fullstmt */ -#line 213 "perly.y" +#line 214 "perly.y" { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); @@ -105,7 +105,7 @@ case 2: /* @1: %empty */ break; case 12: /* @6: %empty */ -#line 221 "perly.y" +#line 222 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -114,7 +114,7 @@ case 2: /* @1: %empty */ break; case 13: /* grammar: GRAMSTMTSEQ @6 stmtseq */ -#line 226 "perly.y" +#line 227 "perly.y" { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -123,7 +123,7 @@ case 2: /* @1: %empty */ break; case 14: /* @7: %empty */ -#line 231 "perly.y" +#line 232 "perly.y" { parser->expect = XSTATE; (yyval.ival) = 0; @@ -132,7 +132,7 @@ case 2: /* @1: %empty */ break; case 15: /* grammar: GRAMSUBSIGNATURE @7 subsigguts */ -#line 236 "perly.y" +#line 237 "perly.y" { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -141,19 +141,19 @@ case 2: /* @1: %empty */ break; case 16: /* sigsub_or_method_named: KW_SUB_named_sig */ -#line 245 "perly.y" +#line 246 "perly.y" { (yyval.ival) = KW_SUB_named_sig; } break; case 17: /* sigsub_or_method_named: KW_METHOD_named */ -#line 247 "perly.y" +#line 248 "perly.y" { (yyval.ival) = KW_METHOD_named; } break; case 18: /* block: PERLY_BRACE_OPEN remember stmtseq PERLY_BRACE_CLOSE */ -#line 252 "perly.y" +#line 253 "perly.y" { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval)); @@ -162,13 +162,13 @@ case 2: /* @1: %empty */ break; case 19: /* empty: %empty */ -#line 259 "perly.y" +#line 260 "perly.y" { (yyval.opval) = NULL; } break; case 20: /* formblock: PERLY_EQUAL_SIGN remember PERLY_SEMICOLON FORMRBRACK formstmtseq PERLY_SEMICOLON PERLY_DOT */ -#line 264 "perly.y" +#line 265 "perly.y" { if (parser->copline > (line_t)(ps[-6].val.ival)) parser->copline = (line_t)(ps[-6].val.ival); (yyval.opval) = block_end((ps[-5].val.ival), (ps[-2].val.opval)); @@ -177,14 +177,14 @@ case 2: /* @1: %empty */ break; case 21: /* remember: %empty */ -#line 271 "perly.y" +#line 272 "perly.y" { (yyval.ival) = block_start(TRUE); parser->parsed_sub = 0; } break; case 22: /* mblock: PERLY_BRACE_OPEN mremember stmtseq PERLY_BRACE_CLOSE */ -#line 276 "perly.y" +#line 277 "perly.y" { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval)); @@ -193,32 +193,32 @@ case 2: /* @1: %empty */ break; case 23: /* mremember: %empty */ -#line 283 "perly.y" +#line 284 "perly.y" { (yyval.ival) = block_start(FALSE); parser->parsed_sub = 0; } break; case 25: /* $@8: %empty */ -#line 292 "perly.y" +#line 293 "perly.y" { parser->in_my = KEY_catch; } break; case 26: /* $@9: %empty */ -#line 294 "perly.y" +#line 295 "perly.y" { parser->in_my = 0; intro_my(); } break; case 27: /* catch_paren: PERLY_PAREN_OPEN $@8 scalar $@9 PERLY_PAREN_CLOSE */ -#line 296 "perly.y" +#line 297 "perly.y" { (yyval.opval) = (ps[-2].val.opval); } break; case 29: /* stmtseq: stmtseq fullstmt */ -#line 303 "perly.y" +#line 304 "perly.y" { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); PL_pad_reset_pending = TRUE; if ((ps[-1].val.opval) && (ps[0].val.opval)) @@ -228,7 +228,7 @@ case 2: /* @1: %empty */ break; case 31: /* formstmtseq: formstmtseq formline */ -#line 314 "perly.y" +#line 315 "perly.y" { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); PL_pad_reset_pending = TRUE; if ((ps[-1].val.opval) && (ps[0].val.opval)) @@ -238,7 +238,7 @@ case 2: /* @1: %empty */ break; case 32: /* fullstmt: barestmt */ -#line 323 "perly.y" +#line 324 "perly.y" { (yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL; } @@ -246,13 +246,13 @@ case 2: /* @1: %empty */ break; case 33: /* fullstmt: labfullstmt */ -#line 327 "perly.y" +#line 328 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 34: /* labfullstmt: LABEL barestmt */ -#line 331 "perly.y" +#line 332 "perly.y" { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, @@ -263,7 +263,7 @@ case 2: /* @1: %empty */ break; case 35: /* labfullstmt: LABEL labfullstmt */ -#line 338 "perly.y" +#line 339 "perly.y" { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, @@ -274,13 +274,13 @@ case 2: /* @1: %empty */ break; case 36: /* barestmt: PLUGSTMT */ -#line 348 "perly.y" +#line 349 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 37: /* barestmt: KW_FORMAT startformsub formname formblock */ -#line 350 "perly.y" +#line 351 "perly.y" { CV *fmtcv = PL_compcv; newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval)); @@ -294,7 +294,7 @@ case 2: /* @1: %empty */ break; case 38: /* $@10: %empty */ -#line 362 "perly.y" +#line 363 "perly.y" { init_named_cv(PL_compcv, (ps[-1].val.opval)); parser->in_my = 0; @@ -304,7 +304,7 @@ case 2: /* @1: %empty */ break; case 39: /* barestmt: KW_SUB_named subname startsub $@10 proto subattrlist optsubbody */ -#line 368 "perly.y" +#line 369 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (ps[-5].val.opval)->op_type == OP_CONST @@ -319,7 +319,7 @@ case 2: /* @1: %empty */ break; case 40: /* $@11: %empty */ -#line 383 "perly.y" +#line 384 "perly.y" { init_named_cv(PL_compcv, (ps[-1].val.opval)); if((ps[-2].val.ival) == KW_METHOD_named) { @@ -333,7 +333,7 @@ case 2: /* @1: %empty */ break; case 41: /* barestmt: sigsub_or_method_named subname startsub $@11 subattrlist optsigsubbody */ -#line 393 "perly.y" +#line 394 "perly.y" { OP *body = (ps[0].val.opval); @@ -350,7 +350,7 @@ case 2: /* @1: %empty */ break; case 42: /* $@12: %empty */ -#line 406 "perly.y" +#line 407 "perly.y" { switch((ps[-1].val.ival)) { case KEY_ADJUST: @@ -365,7 +365,7 @@ case 2: /* @1: %empty */ break; case 43: /* barestmt: PHASER startsub $@12 optsubbody */ -#line 417 "perly.y" +#line 418 "perly.y" { OP *body = (ps[0].val.opval); SvREFCNT_inc_simple_void(PL_compcv); @@ -384,7 +384,7 @@ case 2: /* @1: %empty */ break; case 44: /* barestmt: KW_PACKAGE BAREWORD BAREWORD PERLY_SEMICOLON */ -#line 436 "perly.y" +#line 437 "perly.y" { package((ps[-1].val.opval)); if ((ps[-2].val.opval)) @@ -395,7 +395,7 @@ case 2: /* @1: %empty */ break; case 45: /* barestmt: KW_CLASS BAREWORD BAREWORD subattrlist PERLY_SEMICOLON */ -#line 443 "perly.y" +#line 444 "perly.y" { package((ps[-2].val.opval)); if ((ps[-3].val.opval)) @@ -410,13 +410,13 @@ case 2: /* @1: %empty */ break; case 46: /* $@13: %empty */ -#line 454 "perly.y" +#line 455 "perly.y" { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } break; case 47: /* barestmt: KW_USE_or_NO startsub $@13 BAREWORD BAREWORD optlistexpr PERLY_SEMICOLON */ -#line 458 "perly.y" +#line 459 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); utilize((ps[-6].val.ival), (ps[-5].val.ival), (ps[-3].val.opval), (ps[-2].val.opval), (ps[-1].val.opval)); @@ -427,7 +427,7 @@ case 2: /* @1: %empty */ break; case 48: /* barestmt: KW_IF PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else */ -#line 465 "perly.y" +#line 466 "perly.y" { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), op_scope((ps[-1].val.opval)), (ps[0].val.opval))); @@ -437,7 +437,7 @@ case 2: /* @1: %empty */ break; case 49: /* barestmt: KW_UNLESS PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else */ -#line 471 "perly.y" +#line 472 "perly.y" { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), (ps[0].val.opval), op_scope((ps[-1].val.opval)))); @@ -447,7 +447,7 @@ case 2: /* @1: %empty */ break; case 50: /* barestmt: KW_GIVEN PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock */ -#line 477 "perly.y" +#line 478 "perly.y" { (yyval.opval) = block_end((ps[-3].val.ival), newGIVENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)), 0)); parser->copline = (line_t)(ps[-5].val.ival); @@ -456,19 +456,19 @@ case 2: /* @1: %empty */ break; case 51: /* barestmt: KW_WHEN PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock */ -#line 482 "perly.y" +#line 483 "perly.y" { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); } break; case 52: /* barestmt: KW_DEFAULT block */ -#line 484 "perly.y" +#line 485 "perly.y" { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); } break; case 53: /* barestmt: KW_WHILE PERLY_PAREN_OPEN remember texpr PERLY_PAREN_CLOSE mintro mblock cont */ -#line 486 "perly.y" +#line 487 "perly.y" { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, @@ -479,7 +479,7 @@ case 2: /* @1: %empty */ break; case 54: /* barestmt: KW_UNTIL PERLY_PAREN_OPEN remember iexpr PERLY_PAREN_CLOSE mintro mblock cont */ -#line 493 "perly.y" +#line 494 "perly.y" { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, @@ -490,19 +490,19 @@ case 2: /* @1: %empty */ break; case 55: /* $@14: %empty */ -#line 500 "perly.y" +#line 501 "perly.y" { parser->expect = XTERM; } break; case 56: /* $@15: %empty */ -#line 502 "perly.y" +#line 503 "perly.y" { parser->expect = XTERM; } break; case 57: /* barestmt: KW_FOR PERLY_PAREN_OPEN remember mnexpr PERLY_SEMICOLON $@14 texpr PERLY_SEMICOLON $@15 mintro mnexpr PERLY_PAREN_CLOSE mblock */ -#line 505 "perly.y" +#line 506 "perly.y" { OP *initop = (ps[-9].val.opval); OP *forop = newWHILEOP(0, 1, NULL, @@ -521,7 +521,7 @@ case 2: /* @1: %empty */ break; case 58: /* barestmt: KW_FOR KW_MY remember my_scalar PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 520 "perly.y" +#line 521 "perly.y" { (yyval.opval) = block_end((ps[-6].val.ival), newFOROP(0, (ps[-5].val.opval), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); parser->copline = (line_t)(ps[-8].val.ival); @@ -530,7 +530,7 @@ case 2: /* @1: %empty */ break; case 59: /* barestmt: KW_FOR KW_MY remember PERLY_PAREN_OPEN my_list_of_scalars PERLY_PAREN_CLOSE PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 525 "perly.y" +#line 526 "perly.y" { if ((ps[-6].val.opval)->op_type == OP_PADSV) /* degenerate case of 1 var: for my ($x) .... @@ -543,7 +543,7 @@ case 2: /* @1: %empty */ break; case 60: /* barestmt: KW_FOR scalar PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 534 "perly.y" +#line 535 "perly.y" { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0, op_lvalue((ps[-6].val.opval), OP_ENTERLOOP), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); @@ -553,13 +553,13 @@ case 2: /* @1: %empty */ break; case 61: /* @16: %empty */ -#line 540 "perly.y" +#line 541 "perly.y" { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; case 62: /* barestmt: KW_FOR my_refgen remember my_var @16 PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 542 "perly.y" +#line 543 "perly.y" { (yyval.opval) = block_end( (ps[-7].val.ival), @@ -576,7 +576,7 @@ case 2: /* @1: %empty */ break; case 63: /* barestmt: KW_FOR REFGEN refgen_topic PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 555 "perly.y" +#line 556 "perly.y" { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP( 0, op_lvalue(newUNOP(OP_REFGEN, 0, @@ -588,7 +588,7 @@ case 2: /* @1: %empty */ break; case 64: /* barestmt: KW_FOR PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ -#line 563 "perly.y" +#line 564 "perly.y" { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0, NULL, (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); @@ -598,7 +598,7 @@ case 2: /* @1: %empty */ break; case 65: /* $@17: %empty */ -#line 569 "perly.y" +#line 570 "perly.y" { if(!(ps[0].val.opval)) { yyerror("catch block requires a (VAR)"); @@ -609,7 +609,7 @@ case 2: /* @1: %empty */ break; case 66: /* barestmt: KW_TRY mblock KW_CATCH remember catch_paren $@17 mblock finally */ -#line 576 "perly.y" +#line 577 "perly.y" { (yyval.opval) = newTRYCATCHOP(0, (ps[-6].val.opval), (ps[-3].val.opval), block_end((ps[-4].val.ival), op_scope((ps[-1].val.opval)))); @@ -621,7 +621,7 @@ case 2: /* @1: %empty */ break; case 67: /* barestmt: block cont */ -#line 584 "perly.y" +#line 585 "perly.y" { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, @@ -631,7 +631,7 @@ case 2: /* @1: %empty */ break; case 68: /* $@18: %empty */ -#line 590 "perly.y" +#line 591 "perly.y" { package((ps[-2].val.opval)); if ((ps[-3].val.opval)) { @@ -642,7 +642,7 @@ case 2: /* @1: %empty */ break; case 69: /* barestmt: KW_PACKAGE BAREWORD BAREWORD PERLY_BRACE_OPEN remember $@18 stmtseq PERLY_BRACE_CLOSE */ -#line 597 "perly.y" +#line 598 "perly.y" { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, @@ -654,7 +654,7 @@ case 2: /* @1: %empty */ break; case 70: /* $@19: %empty */ -#line 605 "perly.y" +#line 606 "perly.y" { package((ps[-3].val.opval)); @@ -670,7 +670,7 @@ case 2: /* @1: %empty */ break; case 71: /* barestmt: KW_CLASS BAREWORD BAREWORD subattrlist PERLY_BRACE_OPEN remember $@19 stmtseq PERLY_BRACE_CLOSE */ -#line 617 "perly.y" +#line 618 "perly.y" { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, @@ -682,7 +682,7 @@ case 2: /* @1: %empty */ break; case 72: /* barestmt: fielddecl PERLY_SEMICOLON */ -#line 625 "perly.y" +#line 626 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } @@ -690,7 +690,7 @@ case 2: /* @1: %empty */ break; case 73: /* barestmt: sideff PERLY_SEMICOLON */ -#line 629 "perly.y" +#line 630 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } @@ -698,7 +698,7 @@ case 2: /* @1: %empty */ break; case 74: /* barestmt: KW_DEFER mblock */ -#line 633 "perly.y" +#line 634 "perly.y" { (yyval.opval) = newDEFEROP(0, op_scope((ps[0].val.opval))); } @@ -706,7 +706,7 @@ case 2: /* @1: %empty */ break; case 75: /* barestmt: YADAYADA PERLY_SEMICOLON */ -#line 637 "perly.y" +#line 638 "perly.y" { /* diag_listed_as: Unimplemented */ (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), @@ -716,7 +716,7 @@ case 2: /* @1: %empty */ break; case 76: /* barestmt: PERLY_SEMICOLON */ -#line 643 "perly.y" +#line 644 "perly.y" { (yyval.opval) = NULL; parser->copline = NOLINE; @@ -725,7 +725,7 @@ case 2: /* @1: %empty */ break; case 77: /* formline: THING formarg */ -#line 651 "perly.y" +#line 652 "perly.y" { OP *list; if ((ps[0].val.opval)) { OP *term = (ps[0].val.opval); @@ -744,62 +744,62 @@ case 2: /* @1: %empty */ break; case 79: /* formarg: FORMLBRACK stmtseq FORMRBRACK */ -#line 670 "perly.y" +#line 671 "perly.y" { (yyval.opval) = op_unscope((ps[-1].val.opval)); } break; case 81: /* sideff: error */ -#line 678 "perly.y" +#line 679 "perly.y" { (yyval.opval) = NULL; } break; case 82: /* sideff: expr */ -#line 680 "perly.y" +#line 681 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 83: /* sideff: expr KW_IF condition */ -#line 682 "perly.y" +#line 683 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 84: /* sideff: expr KW_UNLESS condition */ -#line 684 "perly.y" +#line 685 "perly.y" { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 85: /* sideff: expr KW_WHILE condition */ -#line 686 "perly.y" +#line 687 "perly.y" { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); } break; case 86: /* sideff: expr KW_UNTIL iexpr */ -#line 688 "perly.y" +#line 689 "perly.y" { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 87: /* sideff: expr KW_FOR condition */ -#line 690 "perly.y" +#line 691 "perly.y" { (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL); parser->copline = (line_t)(ps[-1].val.ival); } break; case 88: /* sideff: expr KW_WHEN condition */ -#line 693 "perly.y" +#line 694 "perly.y" { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); } break; case 90: /* else: KW_ELSE mblock */ -#line 700 "perly.y" +#line 701 "perly.y" { ((ps[0].val.opval))->op_flags |= OPf_PARENS; (yyval.opval) = op_scope((ps[0].val.opval)); @@ -808,7 +808,7 @@ case 2: /* @1: %empty */ break; case 91: /* else: KW_ELSIF PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock else */ -#line 705 "perly.y" +#line 706 "perly.y" { parser->copline = (line_t)(ps[-5].val.ival); (yyval.opval) = newCONDOP(0, newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)), @@ -819,25 +819,25 @@ case 2: /* @1: %empty */ break; case 93: /* cont: KW_CONTINUE block */ -#line 717 "perly.y" +#line 718 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; case 94: /* finally: %empty */ -#line 722 "perly.y" +#line 723 "perly.y" { (yyval.opval) = NULL; } break; case 95: /* finally: KW_FINALLY block */ -#line 724 "perly.y" +#line 725 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; case 96: /* mintro: %empty */ -#line 729 "perly.y" +#line 730 "perly.y" { (yyval.ival) = (PL_min_intro_pending && PL_max_intro_pending >= PL_min_intro_pending); intro_my(); } @@ -845,7 +845,7 @@ case 2: /* @1: %empty */ break; case 99: /* texpr: %empty */ -#line 741 "perly.y" +#line 742 "perly.y" { YYSTYPE tmplval; (void)scan_num("1", &tmplval); (yyval.opval) = tmplval.opval; } @@ -853,59 +853,59 @@ case 2: /* @1: %empty */ break; case 101: /* iexpr: expr */ -#line 749 "perly.y" +#line 750 "perly.y" { (yyval.opval) = invert(scalar((ps[0].val.opval))); } break; case 102: /* mexpr: expr */ -#line 754 "perly.y" +#line 755 "perly.y" { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 103: /* mnexpr: nexpr */ -#line 758 "perly.y" +#line 759 "perly.y" { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 104: /* formname: BAREWORD */ -#line 761 "perly.y" +#line 762 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 106: /* startsub: %empty */ -#line 766 "perly.y" +#line 767 "perly.y" { (yyval.ival) = start_subparse(FALSE, 0); SAVEFREESV(PL_compcv); } break; case 107: /* startanonsub: %empty */ -#line 772 "perly.y" +#line 773 "perly.y" { (yyval.ival) = start_subparse(FALSE, CVf_ANON); SAVEFREESV(PL_compcv); } break; case 108: /* startanonmethod: %empty */ -#line 777 "perly.y" +#line 778 "perly.y" { (yyval.ival) = start_subparse(FALSE, CVf_ANON|CVf_IsMETHOD); SAVEFREESV(PL_compcv); } break; case 109: /* startformsub: %empty */ -#line 782 "perly.y" +#line 783 "perly.y" { (yyval.ival) = start_subparse(TRUE, 0); SAVEFREESV(PL_compcv); } break; case 115: /* subattrlist: COLONATTR THING */ -#line 801 "perly.y" +#line 802 "perly.y" { OP *attrlist = (ps[0].val.opval); if(attrlist && !PL_parser->sig_seen) @@ -916,49 +916,49 @@ case 2: /* @1: %empty */ break; case 116: /* subattrlist: COLONATTR */ -#line 808 "perly.y" +#line 809 "perly.y" { (yyval.opval) = NULL; } break; case 117: /* myattrlist: COLONATTR THING */ -#line 813 "perly.y" +#line 814 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; case 118: /* myattrlist: COLONATTR */ -#line 815 "perly.y" +#line 816 "perly.y" { (yyval.opval) = NULL; } break; case 119: /* sigvar: %empty */ -#line 826 "perly.y" +#line 827 "perly.y" { parser->in_my = 0; (yyval.ival) = 0; } break; case 120: /* sigvar: PRIVATEREF */ -#line 828 "perly.y" +#line 829 "perly.y" { parser->in_my = 0; (yyval.ival) = (ps[0].val.opval)->op_targ; op_free((ps[0].val.opval)); } break; case 121: /* sigslurpsigil: PERLY_SNAIL */ -#line 833 "perly.y" +#line 834 "perly.y" { (yyval.ival) = '@'; } break; case 122: /* sigslurpsigil: PERLY_PERCENT_SIGN */ -#line 835 "perly.y" +#line 836 "perly.y" { (yyval.ival) = '%'; } break; case 123: /* sigslurpelem: sigslurpsigil sigvar */ -#line 839 "perly.y" +#line 840 "perly.y" { subsignature_append_slurpy((ps[-1].val.ival), (ps[0].val.ival)); (yyval.opval) = NULL; @@ -967,7 +967,7 @@ case 2: /* @1: %empty */ break; case 124: /* sigslurpelem: sigslurpsigil sigvar ASSIGNOP */ -#line 844 "perly.y" +#line 845 "perly.y" { yyerror("A slurpy parameter may not have a default value"); } @@ -975,57 +975,73 @@ case 2: /* @1: %empty */ break; case 125: /* sigslurpelem: sigslurpsigil sigvar ASSIGNOP term */ -#line 848 "perly.y" +#line 849 "perly.y" { yyerror("A slurpy parameter may not have a default value"); } break; - case 126: /* sigscalarelem: PERLY_DOLLAR sigvar */ -#line 856 "perly.y" + case 126: /* optcolon: %empty */ +#line 855 "perly.y" + { (yyval.ival) = 0; } + + break; + + case 128: /* sigscalarelem: optcolon PERLY_DOLLAR sigvar */ +#line 862 "perly.y" { - subsignature_append_positional((ps[0].val.ival), 0, NULL); + if((ps[-2].val.ival)) { + PADNAME *pn = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.ival)]; + subsignature_append_named(PadnamePV(pn)+1, (ps[0].val.ival), 0, NULL); + } + else + subsignature_append_positional((ps[0].val.ival), 0, NULL); (yyval.opval) = NULL; } break; - case 127: /* sigscalarelem: PERLY_DOLLAR sigvar ASSIGNOP optsigscalardefault */ -#line 861 "perly.y" + case 129: /* sigscalarelem: optcolon PERLY_DOLLAR sigvar ASSIGNOP optsigscalardefault */ +#line 872 "perly.y" { - subsignature_append_positional((ps[-2].val.ival), (ps[-1].val.ival), (ps[0].val.opval)); + if((ps[-4].val.ival)) { + PADNAME *pn = PadnamelistARRAY(PL_comppad_name)[(ps[-2].val.ival)]; + subsignature_append_named(PadnamePV(pn)+1, (ps[-2].val.ival), (ps[-1].val.ival), (ps[0].val.opval)); + } + else + subsignature_append_positional((ps[-2].val.ival), (ps[-1].val.ival), (ps[0].val.opval)); (yyval.opval) = NULL; } break; - case 128: /* optsigscalardefault: %empty */ -#line 869 "perly.y" + case 130: /* optsigscalardefault: %empty */ +#line 885 "perly.y" { (yyval.opval) = newOP(OP_NULL, 0); } break; - case 130: /* sigelem: sigscalarelem */ -#line 876 "perly.y" + case 132: /* sigelem: sigscalarelem */ +#line 892 "perly.y" { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; - case 131: /* sigelem: sigslurpelem */ -#line 878 "perly.y" + case 133: /* sigelem: sigslurpelem */ +#line 894 "perly.y" { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; - case 139: /* subsignature: PERLY_PAREN_OPEN subsigguts PERLY_PAREN_CLOSE */ -#line 904 "perly.y" + case 141: /* subsignature: PERLY_PAREN_OPEN subsigguts PERLY_PAREN_CLOSE */ +#line 920 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; - case 140: /* $@20: %empty */ -#line 907 "perly.y" + case 142: /* $@20: %empty */ +#line 923 "perly.y" { ENTER; subsignature_start(); @@ -1034,8 +1050,8 @@ case 2: /* @1: %empty */ break; - case 141: /* subsigguts: $@20 optsiglist */ -#line 913 "perly.y" + case 143: /* subsigguts: $@20 optsiglist */ +#line 929 "perly.y" { if (!FEATURE_SIGNATURES_IS_ENABLED && !CvIsMETHOD(PL_compcv)) croak("Experimental " @@ -1062,14 +1078,14 @@ case 2: /* @1: %empty */ break; - case 143: /* optsubbody: PERLY_SEMICOLON */ -#line 941 "perly.y" + case 145: /* optsubbody: PERLY_SEMICOLON */ +#line 957 "perly.y" { (yyval.opval) = NULL; } break; - case 144: /* subbody: remember PERLY_BRACE_OPEN stmtseq PERLY_BRACE_CLOSE */ -#line 947 "perly.y" + case 146: /* subbody: remember PERLY_BRACE_OPEN stmtseq PERLY_BRACE_CLOSE */ +#line 963 "perly.y" { if (parser->copline > (line_t)(ps[-2].val.ival)) parser->copline = (line_t)(ps[-2].val.ival); @@ -1078,20 +1094,20 @@ case 2: /* @1: %empty */ break; - case 146: /* optsigsubbody: PERLY_SEMICOLON */ -#line 959 "perly.y" + case 148: /* optsigsubbody: PERLY_SEMICOLON */ +#line 975 "perly.y" { (yyval.opval) = NULL; } break; - case 147: /* $@21: %empty */ -#line 964 "perly.y" + case 149: /* $@21: %empty */ +#line 980 "perly.y" { PL_parser->sig_seen = FALSE; } break; - case 148: /* sigsubbody: remember optsubsignature PERLY_BRACE_OPEN $@21 stmtseq PERLY_BRACE_CLOSE */ -#line 966 "perly.y" + case 150: /* sigsubbody: remember optsubsignature PERLY_BRACE_OPEN $@21 stmtseq PERLY_BRACE_CLOSE */ +#line 982 "perly.y" { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); @@ -1101,38 +1117,38 @@ case 2: /* @1: %empty */ break; - case 149: /* expr: expr ANDOP expr */ -#line 977 "perly.y" + case 151: /* expr: expr ANDOP expr */ +#line 993 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 150: /* expr: expr PLUGIN_LOGICAL_AND_LOW_OP expr */ -#line 979 "perly.y" + case 152: /* expr: expr PLUGIN_LOGICAL_AND_LOW_OP expr */ +#line 995 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; - case 151: /* expr: expr OROP expr */ -#line 981 "perly.y" + case 153: /* expr: expr OROP expr */ +#line 997 "perly.y" { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 152: /* expr: expr PLUGIN_LOGICAL_OR_LOW_OP expr */ -#line 983 "perly.y" + case 154: /* expr: expr PLUGIN_LOGICAL_OR_LOW_OP expr */ +#line 999 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; - case 154: /* listexpr: listexpr PERLY_COMMA */ -#line 989 "perly.y" + case 156: /* listexpr: listexpr PERLY_COMMA */ +#line 1005 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; - case 155: /* listexpr: listexpr PERLY_COMMA term */ -#line 991 "perly.y" + case 157: /* listexpr: listexpr PERLY_COMMA term */ +#line 1007 "perly.y" { OP* term = (ps[0].val.opval); (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term); @@ -1140,32 +1156,32 @@ case 2: /* @1: %empty */ break; - case 157: /* listop: LSTOP indirob listexpr */ -#line 1000 "perly.y" + case 159: /* listop: LSTOP indirob listexpr */ +#line 1016 "perly.y" { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED, op_prepend_elem(OP_LIST, newGVREF((ps[-2].val.ival),(ps[-1].val.opval)), (ps[0].val.opval)) ); } break; - case 158: /* listop: BLKLSTOP block listexpr */ -#line 1004 "perly.y" + case 160: /* listop: BLKLSTOP block listexpr */ +#line 1020 "perly.y" { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED, op_prepend_elem(OP_LIST, newUNOP(OP_NULL, 0, op_scope((ps[-1].val.opval))), (ps[0].val.opval)) ); } break; - case 159: /* listop: FUNC PERLY_PAREN_OPEN indirob expr PERLY_PAREN_CLOSE */ -#line 1008 "perly.y" + case 161: /* listop: FUNC PERLY_PAREN_OPEN indirob expr PERLY_PAREN_CLOSE */ +#line 1024 "perly.y" { (yyval.opval) = op_convert_list((ps[-4].val.ival), OPf_STACKED, op_prepend_elem(OP_LIST, newGVREF((ps[-4].val.ival),(ps[-2].val.opval)), (ps[-1].val.opval)) ); } break; - case 160: /* listop: term ARROW methodname PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1012 "perly.y" + case 162: /* listop: term ARROW methodname PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ +#line 1028 "perly.y" { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, scalar((ps[-5].val.opval)), (ps[-1].val.opval)), @@ -1174,8 +1190,8 @@ case 2: /* @1: %empty */ break; - case 161: /* listop: term ARROW methodname */ -#line 1018 "perly.y" + case 163: /* listop: term ARROW methodname */ +#line 1034 "perly.y" { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, scalar((ps[-2].val.opval)), newMETHOP(OP_METHOD, 0, (ps[0].val.opval)))); @@ -1183,8 +1199,8 @@ case 2: /* @1: %empty */ break; - case 162: /* listop: term ARROW PERLY_AMPERSAND subname PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1023 "perly.y" + case 164: /* listop: term ARROW PERLY_AMPERSAND subname PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ +#line 1039 "perly.y" { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, scalar((ps[-6].val.opval)), (ps[-1].val.opval)), @@ -1193,8 +1209,8 @@ case 2: /* @1: %empty */ break; - case 163: /* listop: term ARROW PERLY_AMPERSAND subname */ -#line 1029 "perly.y" + case 165: /* listop: term ARROW PERLY_AMPERSAND subname */ +#line 1045 "perly.y" { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, scalar((ps[-3].val.opval)), @@ -1203,8 +1219,8 @@ case 2: /* @1: %empty */ break; - case 164: /* listop: METHCALL0 indirob optlistexpr */ -#line 1035 "perly.y" + case 166: /* listop: METHCALL0 indirob optlistexpr */ +#line 1051 "perly.y" { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), @@ -1213,8 +1229,8 @@ case 2: /* @1: %empty */ break; - case 165: /* listop: METHCALL indirob PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1041 "perly.y" + case 167: /* listop: METHCALL indirob PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ +#line 1057 "perly.y" { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, (ps[-3].val.opval), (ps[-1].val.opval)), @@ -1223,26 +1239,26 @@ case 2: /* @1: %empty */ break; - case 166: /* listop: LSTOP optlistexpr */ -#line 1047 "perly.y" + case 168: /* listop: LSTOP optlistexpr */ +#line 1063 "perly.y" { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; - case 167: /* listop: FUNC PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ -#line 1049 "perly.y" + case 169: /* listop: FUNC PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ +#line 1065 "perly.y" { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 168: /* listop: FUNC SUBLEXSTART optexpr SUBLEXEND */ -#line 1051 "perly.y" + case 170: /* listop: FUNC SUBLEXSTART optexpr SUBLEXEND */ +#line 1067 "perly.y" { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 169: /* @22: %empty */ -#line 1053 "perly.y" + case 171: /* @22: %empty */ +#line 1069 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, NULL, (ps[0].val.opval)); /* prevent double op_free() if the following fails to parse */ @@ -1251,8 +1267,8 @@ case 2: /* @1: %empty */ break; - case 170: /* listop: LSTOPSUB startanonsub block @22 optlistexpr */ -#line 1059 "perly.y" + case 172: /* listop: LSTOPSUB startanonsub block @22 optlistexpr */ +#line 1075 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), (ps[-4].val.opval))); @@ -1260,21 +1276,21 @@ case 2: /* @1: %empty */ break; - case 173: /* subscripted: gelem PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1074 "perly.y" + case 175: /* subscripted: gelem PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ +#line 1090 "perly.y" { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); } break; - case 174: /* subscripted: scalar PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1076 "perly.y" + case 176: /* subscripted: scalar PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ +#line 1092 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); } break; - case 175: /* subscripted: term ARROW PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1079 "perly.y" + case 177: /* subscripted: term ARROW PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ +#line 1095 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-4].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -1282,8 +1298,8 @@ case 2: /* @1: %empty */ break; - case 176: /* subscripted: subscripted PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1084 "perly.y" + case 178: /* subscripted: subscripted PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ +#line 1100 "perly.y" { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-3].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -1291,31 +1307,31 @@ case 2: /* @1: %empty */ break; - case 177: /* subscripted: scalar PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1089 "perly.y" + case 179: /* subscripted: scalar PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ +#line 1105 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); } break; - case 178: /* subscripted: term ARROW PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1092 "perly.y" + case 180: /* subscripted: term ARROW PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ +#line 1108 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-5].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } break; - case 179: /* subscripted: subscripted PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1096 "perly.y" + case 181: /* subscripted: subscripted PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ +#line 1112 "perly.y" { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-4].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } break; - case 180: /* subscripted: term ARROW PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1100 "perly.y" + case 182: /* subscripted: term ARROW PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1116 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-3].val.opval)))); if (parser->expect == XBLOCK) @@ -1324,8 +1340,8 @@ case 2: /* @1: %empty */ break; - case 181: /* subscripted: term ARROW PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1106 "perly.y" + case 183: /* subscripted: term ARROW PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ +#line 1122 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-4].val.opval))))); @@ -1335,8 +1351,8 @@ case 2: /* @1: %empty */ break; - case 182: /* subscripted: subscripted PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1114 "perly.y" + case 184: /* subscripted: subscripted PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ +#line 1130 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-3].val.opval))))); @@ -1346,8 +1362,8 @@ case 2: /* @1: %empty */ break; - case 183: /* subscripted: subscripted PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1121 "perly.y" + case 185: /* subscripted: subscripted PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1137 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-2].val.opval)))); if (parser->expect == XBLOCK) @@ -1356,56 +1372,56 @@ case 2: /* @1: %empty */ break; - case 184: /* subscripted: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1127 "perly.y" + case 186: /* subscripted: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ +#line 1143 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); } break; - case 185: /* subscripted: QWLIST PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1129 "perly.y" + case 187: /* subscripted: QWLIST PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ +#line 1145 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } break; - case 186: /* subscripted: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1131 "perly.y" + case 188: /* subscripted: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ +#line 1147 "perly.y" { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } break; - case 187: /* termbinop: term PLUGIN_HIGH_OP term */ -#line 1136 "perly.y" + case 189: /* termbinop: term PLUGIN_HIGH_OP term */ +#line 1152 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; - case 188: /* termbinop: term ASSIGNOP term */ -#line 1138 "perly.y" + case 190: /* termbinop: term ASSIGNOP term */ +#line 1154 "perly.y" { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } break; - case 189: /* termbinop: term PLUGIN_ASSIGN_OP term */ -#line 1140 "perly.y" + case 191: /* termbinop: term PLUGIN_ASSIGN_OP term */ +#line 1156 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; - case 190: /* termbinop: term POWOP term */ -#line 1142 "perly.y" + case 192: /* termbinop: term POWOP term */ +#line 1158 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 191: /* termbinop: term PLUGIN_POW_OP term */ -#line 1144 "perly.y" + case 193: /* termbinop: term PLUGIN_POW_OP term */ +#line 1160 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; - case 192: /* termbinop: term MULOP term */ -#line 1146 "perly.y" + case 194: /* termbinop: term MULOP term */ +#line 1162 "perly.y" { if ((ps[-1].val.ival) != OP_REPEAT) scalar((ps[-2].val.opval)); (yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval))); @@ -1413,220 +1429,220 @@ case 2: /* @1: %empty */ break; - case 193: /* termbinop: term PLUGIN_MUL_OP term */ -#line 1151 "perly.y" + case 195: /* termbinop: term PLUGIN_MUL_OP term */ +#line 1167 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; - case 194: /* termbinop: term ADDOP term */ -#line 1153 "perly.y" + case 196: /* termbinop: term ADDOP term */ +#line 1169 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 195: /* termbinop: term PLUGIN_ADD_OP term */ -#line 1155 "perly.y" + case 197: /* termbinop: term PLUGIN_ADD_OP term */ +#line 1171 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; - case 196: /* termbinop: term SHIFTOP term */ -#line 1157 "perly.y" + case 198: /* termbinop: term SHIFTOP term */ +#line 1173 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 197: /* termbinop: termrelop */ -#line 1159 "perly.y" + case 199: /* termbinop: termrelop */ +#line 1175 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 198: /* termbinop: termeqop */ -#line 1161 "perly.y" + case 200: /* termbinop: termeqop */ +#line 1177 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 199: /* termbinop: term BITANDOP term */ -#line 1163 "perly.y" + case 201: /* termbinop: term BITANDOP term */ +#line 1179 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 200: /* termbinop: term BITOROP term */ -#line 1165 "perly.y" + case 202: /* termbinop: term BITOROP term */ +#line 1181 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 201: /* termbinop: term DOTDOT term */ -#line 1167 "perly.y" + case 203: /* termbinop: term DOTDOT term */ +#line 1183 "perly.y" { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 202: /* termbinop: term ANDAND term */ -#line 1169 "perly.y" + case 204: /* termbinop: term ANDAND term */ +#line 1185 "perly.y" { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 203: /* termbinop: term PLUGIN_LOGICAL_AND_OP term */ -#line 1171 "perly.y" + case 205: /* termbinop: term PLUGIN_LOGICAL_AND_OP term */ +#line 1187 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; - case 204: /* termbinop: term OROR term */ -#line 1173 "perly.y" + case 206: /* termbinop: term OROR term */ +#line 1189 "perly.y" { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 205: /* termbinop: term PLUGIN_LOGICAL_OR_OP term */ -#line 1175 "perly.y" + case 207: /* termbinop: term PLUGIN_LOGICAL_OR_OP term */ +#line 1191 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; - case 206: /* termbinop: term DORDOR term */ -#line 1177 "perly.y" + case 208: /* termbinop: term DORDOR term */ +#line 1193 "perly.y" { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 207: /* termbinop: term MATCHOP term */ -#line 1179 "perly.y" + case 209: /* termbinop: term MATCHOP term */ +#line 1195 "perly.y" { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 208: /* termbinop: term PLUGIN_LOW_OP term */ -#line 1181 "perly.y" + case 210: /* termbinop: term PLUGIN_LOW_OP term */ +#line 1197 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; - case 209: /* termrelop: relopchain */ -#line 1185 "perly.y" + case 211: /* termrelop: relopchain */ +#line 1201 "perly.y" { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; - case 210: /* termrelop: term NCRELOP term */ -#line 1187 "perly.y" + case 212: /* termrelop: term NCRELOP term */ +#line 1203 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 211: /* termrelop: termrelop NCRELOP */ -#line 1189 "perly.y" + case 213: /* termrelop: termrelop NCRELOP */ +#line 1205 "perly.y" { yyerror("syntax error"); YYERROR; } break; - case 212: /* termrelop: termrelop CHRELOP */ -#line 1191 "perly.y" + case 214: /* termrelop: termrelop CHRELOP */ +#line 1207 "perly.y" { yyerror("syntax error"); YYERROR; } break; - case 213: /* termrelop: term PLUGIN_REL_OP term */ -#line 1193 "perly.y" + case 215: /* termrelop: term PLUGIN_REL_OP term */ +#line 1209 "perly.y" { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } break; - case 214: /* relopchain: term CHRELOP term */ -#line 1197 "perly.y" + case 216: /* relopchain: term CHRELOP term */ +#line 1213 "perly.y" { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 215: /* relopchain: relopchain CHRELOP term */ -#line 1199 "perly.y" + case 217: /* relopchain: relopchain CHRELOP term */ +#line 1215 "perly.y" { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 216: /* termeqop: eqopchain */ -#line 1203 "perly.y" + case 218: /* termeqop: eqopchain */ +#line 1219 "perly.y" { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; - case 217: /* termeqop: term NCEQOP term */ -#line 1205 "perly.y" + case 219: /* termeqop: term NCEQOP term */ +#line 1221 "perly.y" { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 218: /* termeqop: termeqop NCEQOP */ -#line 1207 "perly.y" + case 220: /* termeqop: termeqop NCEQOP */ +#line 1223 "perly.y" { yyerror("syntax error"); YYERROR; } break; - case 219: /* termeqop: termeqop CHEQOP */ -#line 1209 "perly.y" + case 221: /* termeqop: termeqop CHEQOP */ +#line 1225 "perly.y" { yyerror("syntax error"); YYERROR; } break; - case 220: /* eqopchain: term CHEQOP term */ -#line 1213 "perly.y" + case 222: /* eqopchain: term CHEQOP term */ +#line 1229 "perly.y" { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 221: /* eqopchain: eqopchain CHEQOP term */ -#line 1215 "perly.y" + case 223: /* eqopchain: eqopchain CHEQOP term */ +#line 1231 "perly.y" { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 222: /* termunop: PERLY_MINUS term */ -#line 1220 "perly.y" + case 224: /* termunop: PERLY_MINUS term */ +#line 1236 "perly.y" { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } break; - case 223: /* termunop: PERLY_PLUS term */ -#line 1222 "perly.y" + case 225: /* termunop: PERLY_PLUS term */ +#line 1238 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 224: /* termunop: PERLY_EXCLAMATION_MARK term */ -#line 1225 "perly.y" + case 226: /* termunop: PERLY_EXCLAMATION_MARK term */ +#line 1241 "perly.y" { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; - case 225: /* termunop: PERLY_TILDE term */ -#line 1227 "perly.y" + case 227: /* termunop: PERLY_TILDE term */ +#line 1243 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } break; - case 226: /* termunop: term POSTINC */ -#line 1229 "perly.y" + case 228: /* termunop: term POSTINC */ +#line 1245 "perly.y" { (yyval.opval) = newUNOP(OP_POSTINC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); } break; - case 227: /* termunop: term POSTDEC */ -#line 1232 "perly.y" + case 229: /* termunop: term POSTDEC */ +#line 1248 "perly.y" { (yyval.opval) = newUNOP(OP_POSTDEC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));} break; - case 228: /* termunop: term POSTJOIN */ -#line 1235 "perly.y" + case 230: /* termunop: term POSTJOIN */ +#line 1251 "perly.y" { (yyval.opval) = op_convert_list(OP_JOIN, 0, op_append_elem( OP_LIST, @@ -1640,60 +1656,60 @@ case 2: /* @1: %empty */ break; - case 229: /* termunop: PREINC term */ -#line 1246 "perly.y" + case 231: /* termunop: PREINC term */ +#line 1262 "perly.y" { (yyval.opval) = newUNOP(OP_PREINC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); } break; - case 230: /* termunop: PREDEC term */ -#line 1249 "perly.y" + case 232: /* termunop: PREDEC term */ +#line 1265 "perly.y" { (yyval.opval) = newUNOP(OP_PREDEC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); } break; - case 231: /* anonymous: PERLY_BRACKET_OPEN optexpr PERLY_BRACKET_CLOSE */ -#line 1257 "perly.y" + case 233: /* anonymous: PERLY_BRACKET_OPEN optexpr PERLY_BRACKET_CLOSE */ +#line 1273 "perly.y" { (yyval.opval) = newANONLIST((ps[-1].val.opval)); } break; - case 232: /* anonymous: HASHBRACK optexpr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1259 "perly.y" + case 234: /* anonymous: HASHBRACK optexpr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ +#line 1275 "perly.y" { (yyval.opval) = newANONHASH((ps[-2].val.opval)); } break; - case 233: /* anonymous: KW_SUB_anon startanonsub proto subattrlist subbody */ -#line 1261 "perly.y" + case 235: /* anonymous: KW_SUB_anon startanonsub proto subattrlist subbody */ +#line 1277 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); } break; - case 234: /* anonymous: KW_SUB_anon startanonsub proto subattrlist */ -#line 1264 "perly.y" + case 236: /* anonymous: KW_SUB_anon startanonsub proto subattrlist */ +#line 1280 "perly.y" { yyerror("Illegal declaration of anonymous subroutine"); YYERROR; } break; - case 235: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist sigsubbody */ -#line 1266 "perly.y" + case 237: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist sigsubbody */ +#line 1282 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); } break; - case 236: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist */ -#line 1269 "perly.y" + case 238: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist */ +#line 1285 "perly.y" { yyerror("Illegal declaration of anonymous subroutine"); YYERROR; } break; - case 237: /* anonymous: KW_METHOD_anon startanonmethod subattrlist sigsubbody */ -#line 1271 "perly.y" + case 239: /* anonymous: KW_METHOD_anon startanonmethod subattrlist sigsubbody */ +#line 1287 "perly.y" { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); @@ -1701,104 +1717,104 @@ case 2: /* @1: %empty */ break; - case 238: /* anonymous: KW_METHOD_anon startanonmethod subattrlist */ -#line 1276 "perly.y" + case 240: /* anonymous: KW_METHOD_anon startanonmethod subattrlist */ +#line 1292 "perly.y" { yyerror("Illegal declaration of anonymous subroutine"); YYERROR; } break; - case 239: /* termdo: KW_DO term */ -#line 1281 "perly.y" + case 241: /* termdo: KW_DO term */ +#line 1297 "perly.y" { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));} break; - case 240: /* termdo: KW_DO block */ -#line 1283 "perly.y" + case 242: /* termdo: KW_DO block */ +#line 1299 "perly.y" { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));} break; - case 245: /* term: term PERLY_QUESTION_MARK term PERLY_COLON term */ -#line 1291 "perly.y" + case 247: /* term: term PERLY_QUESTION_MARK term PERLY_COLON term */ +#line 1307 "perly.y" { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 246: /* term: REFGEN term */ -#line 1293 "perly.y" + case 248: /* term: REFGEN term */ +#line 1309 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } break; - case 247: /* term: myattrterm */ -#line 1295 "perly.y" + case 249: /* term: myattrterm */ +#line 1311 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 248: /* term: KW_LOCAL term */ -#line 1297 "perly.y" + case 250: /* term: KW_LOCAL term */ +#line 1313 "perly.y" { (yyval.opval) = localize((ps[0].val.opval),0); } break; - case 249: /* term: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1299 "perly.y" + case 251: /* term: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ +#line 1315 "perly.y" { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; - case 250: /* term: QWLIST */ -#line 1301 "perly.y" + case 252: /* term: QWLIST */ +#line 1317 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 251: /* term: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1303 "perly.y" + case 253: /* term: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1319 "perly.y" { (yyval.opval) = sawparens(newNULLLIST()); } break; - case 252: /* term: scalar */ -#line 1305 "perly.y" + case 254: /* term: scalar */ +#line 1321 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 253: /* term: star */ -#line 1307 "perly.y" + case 255: /* term: star */ +#line 1323 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 254: /* term: hsh */ -#line 1309 "perly.y" + case 256: /* term: hsh */ +#line 1325 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 255: /* term: ary */ -#line 1311 "perly.y" + case 257: /* term: ary */ +#line 1327 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 256: /* term: arylen */ -#line 1313 "perly.y" + case 258: /* term: arylen */ +#line 1329 "perly.y" { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} break; - case 257: /* term: subscripted */ -#line 1315 "perly.y" + case 259: /* term: subscripted */ +#line 1331 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 258: /* term: sliceme PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1317 "perly.y" + case 260: /* term: sliceme PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ +#line 1333 "perly.y" { (yyval.opval) = op_prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, @@ -1811,8 +1827,8 @@ case 2: /* @1: %empty */ break; - case 259: /* term: kvslice PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ -#line 1327 "perly.y" + case 261: /* term: kvslice PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ +#line 1343 "perly.y" { (yyval.opval) = op_prepend_elem(OP_KVASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVASLICE, 0, @@ -1825,8 +1841,8 @@ case 2: /* @1: %empty */ break; - case 260: /* term: sliceme PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1337 "perly.y" + case 262: /* term: sliceme PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ +#line 1353 "perly.y" { (yyval.opval) = op_prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -1839,8 +1855,8 @@ case 2: /* @1: %empty */ break; - case 261: /* term: kvslice PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ -#line 1347 "perly.y" + case 263: /* term: kvslice PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ +#line 1363 "perly.y" { (yyval.opval) = op_prepend_elem(OP_KVHSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVHSLICE, 0, @@ -1853,27 +1869,27 @@ case 2: /* @1: %empty */ break; - case 262: /* term: THING */ -#line 1357 "perly.y" + case 264: /* term: THING */ +#line 1373 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 263: /* term: amper */ -#line 1359 "perly.y" + case 265: /* term: amper */ +#line 1375 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); } break; - case 264: /* term: amper PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1361 "perly.y" + case 266: /* term: amper PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1377 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval))); } break; - case 265: /* term: amper PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1364 "perly.y" + case 267: /* term: amper PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ +#line 1380 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval)))); @@ -1881,153 +1897,153 @@ case 2: /* @1: %empty */ break; - case 266: /* term: NOAMP subname optlistexpr */ -#line 1369 "perly.y" + case 268: /* term: NOAMP subname optlistexpr */ +#line 1385 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } break; - case 267: /* term: term ARROW PERLY_DOLLAR PERLY_STAR */ -#line 1373 "perly.y" + case 269: /* term: term ARROW PERLY_DOLLAR PERLY_STAR */ +#line 1389 "perly.y" { (yyval.opval) = newSVREF((ps[-3].val.opval)); } break; - case 268: /* term: term ARROW PERLY_SNAIL PERLY_STAR */ -#line 1375 "perly.y" + case 270: /* term: term ARROW PERLY_SNAIL PERLY_STAR */ +#line 1391 "perly.y" { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; - case 269: /* term: term ARROW PERLY_PERCENT_SIGN PERLY_STAR */ -#line 1377 "perly.y" + case 271: /* term: term ARROW PERLY_PERCENT_SIGN PERLY_STAR */ +#line 1393 "perly.y" { (yyval.opval) = newHVREF((ps[-3].val.opval)); } break; - case 270: /* term: term ARROW PERLY_AMPERSAND PERLY_STAR */ -#line 1379 "perly.y" + case 272: /* term: term ARROW PERLY_AMPERSAND PERLY_STAR */ +#line 1395 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); } break; - case 271: /* term: term ARROW PERLY_STAR PERLY_STAR */ -#line 1382 "perly.y" + case 273: /* term: term ARROW PERLY_STAR PERLY_STAR */ +#line 1398 "perly.y" { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); } break; - case 272: /* term: LOOPEX */ -#line 1384 "perly.y" + case 274: /* term: LOOPEX */ +#line 1400 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } break; - case 273: /* term: LOOPEX term */ -#line 1387 "perly.y" + case 275: /* term: LOOPEX term */ +#line 1403 "perly.y" { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); } break; - case 274: /* term: NOTOP listexpr */ -#line 1389 "perly.y" + case 276: /* term: NOTOP listexpr */ +#line 1405 "perly.y" { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; - case 275: /* term: UNIOP */ -#line 1391 "perly.y" + case 277: /* term: UNIOP */ +#line 1407 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; - case 276: /* term: UNIOP block */ -#line 1393 "perly.y" + case 278: /* term: UNIOP block */ +#line 1409 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; - case 277: /* term: UNIOP term */ -#line 1395 "perly.y" + case 279: /* term: UNIOP term */ +#line 1411 "perly.y" { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; - case 278: /* term: KW_REQUIRE */ -#line 1397 "perly.y" + case 280: /* term: KW_REQUIRE */ +#line 1413 "perly.y" { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } break; - case 279: /* term: KW_REQUIRE term */ -#line 1399 "perly.y" + case 281: /* term: KW_REQUIRE term */ +#line 1415 "perly.y" { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } break; - case 280: /* term: UNIOPSUB */ -#line 1401 "perly.y" + case 282: /* term: UNIOPSUB */ +#line 1417 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; - case 281: /* term: UNIOPSUB term */ -#line 1403 "perly.y" + case 283: /* term: UNIOPSUB term */ +#line 1419 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } break; - case 282: /* term: FUNC0 */ -#line 1406 "perly.y" + case 284: /* term: FUNC0 */ +#line 1422 "perly.y" { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; - case 283: /* term: FUNC0 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1408 "perly.y" + case 285: /* term: FUNC0 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1424 "perly.y" { (yyval.opval) = newOP((ps[-2].val.ival), 0);} break; - case 284: /* term: FUNC0OP */ -#line 1410 "perly.y" + case 286: /* term: FUNC0OP */ +#line 1426 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 285: /* term: FUNC0OP PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1412 "perly.y" + case 287: /* term: FUNC0OP PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1428 "perly.y" { (yyval.opval) = (ps[-2].val.opval); } break; - case 286: /* term: FUNC0SUB */ -#line 1414 "perly.y" + case 288: /* term: FUNC0SUB */ +#line 1430 "perly.y" { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; - case 287: /* term: FUNC1 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1416 "perly.y" + case 289: /* term: FUNC1 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1432 "perly.y" { (yyval.opval) = ((ps[-2].val.ival) == OP_NOT) ? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0))) : newOP((ps[-2].val.ival), OPf_SPECIAL); } break; - case 288: /* term: FUNC1 PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1420 "perly.y" + case 290: /* term: FUNC1 PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ +#line 1436 "perly.y" { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 289: /* @23: %empty */ -#line 1422 "perly.y" + case 291: /* @23: %empty */ +#line 1438 "perly.y" { if ( (ps[0].val.opval)->op_type != OP_TRANS && (ps[0].val.opval)->op_type != OP_TRANSR @@ -2041,68 +2057,68 @@ case 2: /* @1: %empty */ break; - case 290: /* term: PMFUNC @23 SUBLEXSTART listexpr optrepl SUBLEXEND */ -#line 1433 "perly.y" + case 292: /* term: PMFUNC @23 SUBLEXSTART listexpr optrepl SUBLEXEND */ +#line 1449 "perly.y" { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); } break; - case 294: /* myattrterm: KW_MY myterm myattrlist */ -#line 1442 "perly.y" + case 296: /* myattrterm: KW_MY myterm myattrlist */ +#line 1458 "perly.y" { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } break; - case 295: /* myattrterm: KW_MY myterm */ -#line 1444 "perly.y" + case 297: /* myattrterm: KW_MY myterm */ +#line 1460 "perly.y" { (yyval.opval) = localize((ps[0].val.opval),1); } break; - case 296: /* myattrterm: KW_MY REFGEN myterm myattrlist */ -#line 1446 "perly.y" + case 298: /* myattrterm: KW_MY REFGEN myterm myattrlist */ +#line 1462 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } break; - case 297: /* myattrterm: KW_MY REFGEN term */ -#line 1448 "perly.y" + case 299: /* myattrterm: KW_MY REFGEN term */ +#line 1464 "perly.y" { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } break; - case 298: /* myterm: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ -#line 1453 "perly.y" + case 300: /* myterm: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ +#line 1469 "perly.y" { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; - case 299: /* myterm: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ -#line 1455 "perly.y" + case 301: /* myterm: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ +#line 1471 "perly.y" { (yyval.opval) = sawparens(newNULLLIST()); } break; - case 300: /* myterm: scalar */ -#line 1458 "perly.y" + case 302: /* myterm: scalar */ +#line 1474 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 301: /* myterm: hsh */ -#line 1460 "perly.y" + case 303: /* myterm: hsh */ +#line 1476 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 302: /* myterm: ary */ -#line 1462 "perly.y" + case 304: /* myterm: ary */ +#line 1478 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 303: /* fieldvar: scalar */ -#line 1467 "perly.y" + case 305: /* fieldvar: scalar */ +#line 1483 "perly.y" { (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; op_free((ps[0].val.opval)); @@ -2110,8 +2126,8 @@ case 2: /* @1: %empty */ break; - case 304: /* fieldvar: hsh */ -#line 1472 "perly.y" + case 306: /* fieldvar: hsh */ +#line 1488 "perly.y" { (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; op_free((ps[0].val.opval)); @@ -2119,8 +2135,8 @@ case 2: /* @1: %empty */ break; - case 305: /* fieldvar: ary */ -#line 1477 "perly.y" + case 307: /* fieldvar: ary */ +#line 1493 "perly.y" { (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; op_free((ps[0].val.opval)); @@ -2128,20 +2144,20 @@ case 2: /* @1: %empty */ break; - case 306: /* optfieldattrlist: COLONATTR THING */ -#line 1485 "perly.y" + case 308: /* optfieldattrlist: COLONATTR THING */ +#line 1501 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 307: /* optfieldattrlist: COLONATTR */ -#line 1487 "perly.y" + case 309: /* optfieldattrlist: COLONATTR */ +#line 1503 "perly.y" { (yyval.opval) = NULL; } break; - case 309: /* fielddecl: KW_FIELD fieldvar optfieldattrlist */ -#line 1493 "perly.y" + case 311: /* fielddecl: KW_FIELD fieldvar optfieldattrlist */ +#line 1509 "perly.y" { parser->in_my = 0; if((ps[0].val.opval)) @@ -2151,8 +2167,8 @@ case 2: /* @1: %empty */ break; - case 310: /* $@24: %empty */ -#line 1500 "perly.y" + case 312: /* $@24: %empty */ +#line 1516 "perly.y" { parser->in_my = 0; if((ps[-1].val.opval)) @@ -2163,8 +2179,8 @@ case 2: /* @1: %empty */ break; - case 311: /* fielddecl: KW_FIELD fieldvar optfieldattrlist ASSIGNOP $@24 term */ -#line 1508 "perly.y" + case 313: /* fielddecl: KW_FIELD fieldvar optfieldattrlist ASSIGNOP $@24 term */ +#line 1524 "perly.y" { class_set_field_defop((PADNAME *)(ps[-4].val.pval), (ps[-2].val.ival), (ps[0].val.opval)); LEAVE; @@ -2173,122 +2189,122 @@ case 2: /* @1: %empty */ break; - case 317: /* optrepl: PERLY_SLASH expr */ -#line 1528 "perly.y" + case 319: /* optrepl: PERLY_SLASH expr */ +#line 1544 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; - case 318: /* my_scalar: scalar */ -#line 1534 "perly.y" + case 320: /* my_scalar: scalar */ +#line 1550 "perly.y" { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; - case 319: /* list_of_scalars: list_of_scalars PERLY_COMMA */ -#line 1539 "perly.y" + case 321: /* list_of_scalars: list_of_scalars PERLY_COMMA */ +#line 1555 "perly.y" { (yyval.opval) = (ps[-1].val.opval); } break; - case 320: /* list_of_scalars: list_of_scalars PERLY_COMMA scalar */ -#line 1541 "perly.y" + case 322: /* list_of_scalars: list_of_scalars PERLY_COMMA scalar */ +#line 1557 "perly.y" { (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 322: /* my_list_of_scalars: list_of_scalars */ -#line 1548 "perly.y" + case 324: /* my_list_of_scalars: list_of_scalars */ +#line 1564 "perly.y" { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } break; - case 330: /* amper: PERLY_AMPERSAND indirob */ -#line 1565 "perly.y" + case 332: /* amper: PERLY_AMPERSAND indirob */ +#line 1581 "perly.y" { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); } break; - case 331: /* scalar: PERLY_DOLLAR indirob */ -#line 1569 "perly.y" + case 333: /* scalar: PERLY_DOLLAR indirob */ +#line 1585 "perly.y" { (yyval.opval) = newSVREF((ps[0].val.opval)); } break; - case 332: /* ary: PERLY_SNAIL indirob */ -#line 1573 "perly.y" + case 334: /* ary: PERLY_SNAIL indirob */ +#line 1589 "perly.y" { (yyval.opval) = newAVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } break; - case 333: /* hsh: PERLY_PERCENT_SIGN indirob */ -#line 1579 "perly.y" + case 335: /* hsh: PERLY_PERCENT_SIGN indirob */ +#line 1595 "perly.y" { (yyval.opval) = newHVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } break; - case 334: /* arylen: DOLSHARP indirob */ -#line 1585 "perly.y" + case 336: /* arylen: DOLSHARP indirob */ +#line 1601 "perly.y" { (yyval.opval) = newAVREF((ps[0].val.opval)); } break; - case 335: /* arylen: term ARROW DOLSHARP PERLY_STAR */ -#line 1587 "perly.y" + case 337: /* arylen: term ARROW DOLSHARP PERLY_STAR */ +#line 1603 "perly.y" { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; - case 336: /* star: PERLY_STAR indirob */ -#line 1591 "perly.y" + case 338: /* star: PERLY_STAR indirob */ +#line 1607 "perly.y" { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); } break; - case 338: /* sliceme: term ARROW PERLY_SNAIL */ -#line 1596 "perly.y" + case 340: /* sliceme: term ARROW PERLY_SNAIL */ +#line 1612 "perly.y" { (yyval.opval) = newAVREF((ps[-2].val.opval)); } break; - case 340: /* kvslice: term ARROW PERLY_PERCENT_SIGN */ -#line 1601 "perly.y" + case 342: /* kvslice: term ARROW PERLY_PERCENT_SIGN */ +#line 1617 "perly.y" { (yyval.opval) = newHVREF((ps[-2].val.opval)); } break; - case 342: /* gelem: term ARROW PERLY_STAR */ -#line 1606 "perly.y" + case 344: /* gelem: term ARROW PERLY_STAR */ +#line 1622 "perly.y" { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } break; - case 343: /* indirob: BAREWORD */ -#line 1611 "perly.y" + case 345: /* indirob: BAREWORD */ +#line 1627 "perly.y" { (yyval.opval) = scalar((ps[0].val.opval)); } break; - case 344: /* indirob: scalar */ -#line 1613 "perly.y" + case 346: /* indirob: scalar */ +#line 1629 "perly.y" { (yyval.opval) = scalar((ps[0].val.opval)); } break; - case 345: /* indirob: block */ -#line 1615 "perly.y" + case 347: /* indirob: block */ +#line 1631 "perly.y" { (yyval.opval) = op_scope((ps[0].val.opval)); } break; - case 346: /* indirob: PRIVATEREF */ -#line 1618 "perly.y" + case 348: /* indirob: PRIVATEREF */ +#line 1634 "perly.y" { (yyval.opval) = (ps[0].val.opval); } break; @@ -2300,6 +2316,6 @@ case 2: /* @1: %empty */ /* Generated from: - * c36bc8f06e0d028fe375ec5042a868f1249c42d01a2da5b7be104611f300ff06 perly.y + * 5ef40f799dcfd916754b2a23aad727800798632e125ef33b61dd91ba47002c9a perly.y * f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl * ex: set ro ft=c: */ diff --git a/perly.h b/perly.h index 330a5c5dce46..057d2b0bb463 100644 --- a/perly.h +++ b/perly.h @@ -246,6 +246,6 @@ int yyparse (void); /* Generated from: - * c36bc8f06e0d028fe375ec5042a868f1249c42d01a2da5b7be104611f300ff06 perly.y + * 5ef40f799dcfd916754b2a23aad727800798632e125ef33b61dd91ba47002c9a perly.y * f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl * ex: set ro ft=c: */ diff --git a/perly.tab b/perly.tab index 2d2de6914fc3..e6fe7e66992d 100644 --- a/perly.tab +++ b/perly.tab @@ -200,61 +200,62 @@ enum yysymbol_kind_t YYSYMBOL_sigvar = 189, /* sigvar */ YYSYMBOL_sigslurpsigil = 190, /* sigslurpsigil */ YYSYMBOL_sigslurpelem = 191, /* sigslurpelem */ - YYSYMBOL_sigscalarelem = 192, /* sigscalarelem */ - YYSYMBOL_optsigscalardefault = 193, /* optsigscalardefault */ - YYSYMBOL_sigelem = 194, /* sigelem */ - YYSYMBOL_siglist = 195, /* siglist */ - YYSYMBOL_optsiglist = 196, /* optsiglist */ - YYSYMBOL_optsubsignature = 197, /* optsubsignature */ - YYSYMBOL_subsignature = 198, /* subsignature */ - YYSYMBOL_subsigguts = 199, /* subsigguts */ - YYSYMBOL_200_20 = 200, /* $@20 */ - YYSYMBOL_optsubbody = 201, /* optsubbody */ - YYSYMBOL_subbody = 202, /* subbody */ - YYSYMBOL_optsigsubbody = 203, /* optsigsubbody */ - YYSYMBOL_sigsubbody = 204, /* sigsubbody */ - YYSYMBOL_205_21 = 205, /* $@21 */ - YYSYMBOL_expr = 206, /* expr */ - YYSYMBOL_listexpr = 207, /* listexpr */ - YYSYMBOL_listop = 208, /* listop */ - YYSYMBOL_209_22 = 209, /* @22 */ - YYSYMBOL_methodname = 210, /* methodname */ - YYSYMBOL_subscripted = 211, /* subscripted */ - YYSYMBOL_termbinop = 212, /* termbinop */ - YYSYMBOL_termrelop = 213, /* termrelop */ - YYSYMBOL_relopchain = 214, /* relopchain */ - YYSYMBOL_termeqop = 215, /* termeqop */ - YYSYMBOL_eqopchain = 216, /* eqopchain */ - YYSYMBOL_termunop = 217, /* termunop */ - YYSYMBOL_anonymous = 218, /* anonymous */ - YYSYMBOL_termdo = 219, /* termdo */ - YYSYMBOL_term = 220, /* term */ - YYSYMBOL_221_23 = 221, /* @23 */ - YYSYMBOL_myattrterm = 222, /* myattrterm */ - YYSYMBOL_myterm = 223, /* myterm */ - YYSYMBOL_fieldvar = 224, /* fieldvar */ - YYSYMBOL_optfieldattrlist = 225, /* optfieldattrlist */ - YYSYMBOL_fielddecl = 226, /* fielddecl */ - YYSYMBOL_227_24 = 227, /* $@24 */ - YYSYMBOL_optlistexpr = 228, /* optlistexpr */ - YYSYMBOL_optexpr = 229, /* optexpr */ - YYSYMBOL_optrepl = 230, /* optrepl */ - YYSYMBOL_my_scalar = 231, /* my_scalar */ - YYSYMBOL_list_of_scalars = 232, /* list_of_scalars */ - YYSYMBOL_my_list_of_scalars = 233, /* my_list_of_scalars */ - YYSYMBOL_my_var = 234, /* my_var */ - YYSYMBOL_refgen_topic = 235, /* refgen_topic */ - YYSYMBOL_my_refgen = 236, /* my_refgen */ - YYSYMBOL_amper = 237, /* amper */ - YYSYMBOL_scalar = 238, /* scalar */ - YYSYMBOL_ary = 239, /* ary */ - YYSYMBOL_hsh = 240, /* hsh */ - YYSYMBOL_arylen = 241, /* arylen */ - YYSYMBOL_star = 242, /* star */ - YYSYMBOL_sliceme = 243, /* sliceme */ - YYSYMBOL_kvslice = 244, /* kvslice */ - YYSYMBOL_gelem = 245, /* gelem */ - YYSYMBOL_indirob = 246 /* indirob */ + YYSYMBOL_optcolon = 192, /* optcolon */ + YYSYMBOL_sigscalarelem = 193, /* sigscalarelem */ + YYSYMBOL_optsigscalardefault = 194, /* optsigscalardefault */ + YYSYMBOL_sigelem = 195, /* sigelem */ + YYSYMBOL_siglist = 196, /* siglist */ + YYSYMBOL_optsiglist = 197, /* optsiglist */ + YYSYMBOL_optsubsignature = 198, /* optsubsignature */ + YYSYMBOL_subsignature = 199, /* subsignature */ + YYSYMBOL_subsigguts = 200, /* subsigguts */ + YYSYMBOL_201_20 = 201, /* $@20 */ + YYSYMBOL_optsubbody = 202, /* optsubbody */ + YYSYMBOL_subbody = 203, /* subbody */ + YYSYMBOL_optsigsubbody = 204, /* optsigsubbody */ + YYSYMBOL_sigsubbody = 205, /* sigsubbody */ + YYSYMBOL_206_21 = 206, /* $@21 */ + YYSYMBOL_expr = 207, /* expr */ + YYSYMBOL_listexpr = 208, /* listexpr */ + YYSYMBOL_listop = 209, /* listop */ + YYSYMBOL_210_22 = 210, /* @22 */ + YYSYMBOL_methodname = 211, /* methodname */ + YYSYMBOL_subscripted = 212, /* subscripted */ + YYSYMBOL_termbinop = 213, /* termbinop */ + YYSYMBOL_termrelop = 214, /* termrelop */ + YYSYMBOL_relopchain = 215, /* relopchain */ + YYSYMBOL_termeqop = 216, /* termeqop */ + YYSYMBOL_eqopchain = 217, /* eqopchain */ + YYSYMBOL_termunop = 218, /* termunop */ + YYSYMBOL_anonymous = 219, /* anonymous */ + YYSYMBOL_termdo = 220, /* termdo */ + YYSYMBOL_term = 221, /* term */ + YYSYMBOL_222_23 = 222, /* @23 */ + YYSYMBOL_myattrterm = 223, /* myattrterm */ + YYSYMBOL_myterm = 224, /* myterm */ + YYSYMBOL_fieldvar = 225, /* fieldvar */ + YYSYMBOL_optfieldattrlist = 226, /* optfieldattrlist */ + YYSYMBOL_fielddecl = 227, /* fielddecl */ + YYSYMBOL_228_24 = 228, /* $@24 */ + YYSYMBOL_optlistexpr = 229, /* optlistexpr */ + YYSYMBOL_optexpr = 230, /* optexpr */ + YYSYMBOL_optrepl = 231, /* optrepl */ + YYSYMBOL_my_scalar = 232, /* my_scalar */ + YYSYMBOL_list_of_scalars = 233, /* list_of_scalars */ + YYSYMBOL_my_list_of_scalars = 234, /* my_list_of_scalars */ + YYSYMBOL_my_var = 235, /* my_var */ + YYSYMBOL_refgen_topic = 236, /* refgen_topic */ + YYSYMBOL_my_refgen = 237, /* my_refgen */ + YYSYMBOL_amper = 238, /* amper */ + YYSYMBOL_scalar = 239, /* scalar */ + YYSYMBOL_ary = 240, /* ary */ + YYSYMBOL_hsh = 241, /* hsh */ + YYSYMBOL_arylen = 242, /* arylen */ + YYSYMBOL_star = 243, /* star */ + YYSYMBOL_sliceme = 244, /* sliceme */ + YYSYMBOL_kvslice = 245, /* kvslice */ + YYSYMBOL_gelem = 246, /* gelem */ + YYSYMBOL_indirob = 247 /* indirob */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -263,16 +264,16 @@ typedef enum yysymbol_kind_t yysymbol_kind_t; #define YYFINAL 16 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 3753 +#define YYLAST 3777 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 133 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 114 +#define YYNNTS 115 /* YYNRULES -- Number of rules. */ -#define YYNRULES 346 +#define YYNRULES 348 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 677 +#define YYNSTATES 679 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 387 @@ -334,41 +335,41 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 161, 161, 160, 172, 171, 182, 181, 195, 194, - 208, 207, 221, 220, 231, 230, 244, 246, 251, 259, - 263, 270, 275, 282, 288, 292, 294, 291, 301, 302, - 312, 313, 322, 326, 330, 337, 347, 349, 362, 359, - 383, 378, 406, 405, 431, 442, 454, 453, 464, 470, - 476, 481, 483, 485, 492, 500, 502, 499, 519, 524, - 533, 540, 539, 554, 562, 569, 568, 583, 590, 589, - 605, 604, 624, 628, 632, 636, 642, 650, 668, 669, - 673, 677, 679, 681, 683, 685, 687, 689, 692, 698, - 699, 704, 715, 716, 721, 723, 728, 735, 736, 740, - 744, 748, 753, 757, 761, 762, 765, 771, 776, 781, - 787, 788, 793, 794, 799, 800, 807, 812, 814, 825, - 827, 832, 834, 838, 843, 847, 855, 860, 868, 870, - 875, 877, 885, 886, 887, 892, 893, 898, 899, 903, - 907, 907, 940, 941, 946, 958, 959, 964, 963, 976, - 978, 980, 982, 984, 988, 990, 995, 999, 1003, 1007, - 1011, 1017, 1022, 1028, 1034, 1040, 1046, 1048, 1050, 1053, - 1052, 1066, 1067, 1071, 1075, 1078, 1083, 1088, 1091, 1095, - 1099, 1105, 1113, 1120, 1126, 1128, 1130, 1135, 1137, 1139, - 1141, 1143, 1145, 1150, 1152, 1154, 1156, 1158, 1160, 1162, - 1164, 1166, 1168, 1170, 1172, 1174, 1176, 1178, 1180, 1184, - 1186, 1188, 1190, 1192, 1196, 1198, 1202, 1204, 1206, 1208, - 1212, 1214, 1219, 1221, 1224, 1226, 1228, 1231, 1234, 1245, - 1248, 1256, 1258, 1260, 1263, 1265, 1268, 1270, 1275, 1280, - 1282, 1286, 1287, 1288, 1289, 1290, 1292, 1294, 1296, 1298, - 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 1326, - 1336, 1346, 1356, 1358, 1360, 1363, 1368, 1372, 1374, 1376, - 1378, 1381, 1383, 1386, 1388, 1390, 1392, 1394, 1396, 1398, - 1400, 1402, 1405, 1407, 1409, 1411, 1413, 1415, 1419, 1422, - 1421, 1434, 1435, 1436, 1441, 1443, 1445, 1447, 1452, 1454, - 1457, 1459, 1461, 1466, 1471, 1476, 1484, 1486, 1488, 1492, - 1500, 1499, 1517, 1518, 1522, 1523, 1527, 1528, 1533, 1538, - 1540, 1544, 1547, 1551, 1552, 1553, 1556, 1557, 1560, 1561, - 1564, 1568, 1572, 1578, 1584, 1586, 1590, 1594, 1595, 1599, - 1600, 1604, 1605, 1610, 1612, 1614, 1617 + 0, 162, 162, 161, 173, 172, 183, 182, 196, 195, + 209, 208, 222, 221, 232, 231, 245, 247, 252, 260, + 264, 271, 276, 283, 289, 293, 295, 292, 302, 303, + 313, 314, 323, 327, 331, 338, 348, 350, 363, 360, + 384, 379, 407, 406, 432, 443, 455, 454, 465, 471, + 477, 482, 484, 486, 493, 501, 503, 500, 520, 525, + 534, 541, 540, 555, 563, 570, 569, 584, 591, 590, + 606, 605, 625, 629, 633, 637, 643, 651, 669, 670, + 674, 678, 680, 682, 684, 686, 688, 690, 693, 699, + 700, 705, 716, 717, 722, 724, 729, 736, 737, 741, + 745, 749, 754, 758, 762, 763, 766, 772, 777, 782, + 788, 789, 794, 795, 800, 801, 808, 813, 815, 826, + 828, 833, 835, 839, 844, 848, 854, 856, 861, 871, + 884, 886, 891, 893, 901, 902, 903, 908, 909, 914, + 915, 919, 923, 923, 956, 957, 962, 974, 975, 980, + 979, 992, 994, 996, 998, 1000, 1004, 1006, 1011, 1015, + 1019, 1023, 1027, 1033, 1038, 1044, 1050, 1056, 1062, 1064, + 1066, 1069, 1068, 1082, 1083, 1087, 1091, 1094, 1099, 1104, + 1107, 1111, 1115, 1121, 1129, 1136, 1142, 1144, 1146, 1151, + 1153, 1155, 1157, 1159, 1161, 1166, 1168, 1170, 1172, 1174, + 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, + 1196, 1200, 1202, 1204, 1206, 1208, 1212, 1214, 1218, 1220, + 1222, 1224, 1228, 1230, 1235, 1237, 1240, 1242, 1244, 1247, + 1250, 1261, 1264, 1272, 1274, 1276, 1279, 1281, 1284, 1286, + 1291, 1296, 1298, 1302, 1303, 1304, 1305, 1306, 1308, 1310, + 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, + 1332, 1342, 1352, 1362, 1372, 1374, 1376, 1379, 1384, 1388, + 1390, 1392, 1394, 1397, 1399, 1402, 1404, 1406, 1408, 1410, + 1412, 1414, 1416, 1418, 1421, 1423, 1425, 1427, 1429, 1431, + 1435, 1438, 1437, 1450, 1451, 1452, 1457, 1459, 1461, 1463, + 1468, 1470, 1473, 1475, 1477, 1482, 1487, 1492, 1500, 1502, + 1504, 1508, 1516, 1515, 1533, 1534, 1538, 1539, 1543, 1544, + 1549, 1554, 1556, 1560, 1563, 1567, 1568, 1569, 1572, 1573, + 1576, 1577, 1580, 1584, 1588, 1594, 1600, 1602, 1606, 1610, + 1611, 1615, 1616, 1620, 1621, 1626, 1628, 1630, 1633 }; #endif @@ -420,17 +421,17 @@ static const char *const yytname[] = "mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr", "formname", "startsub", "startanonsub", "startanonmethod", "startformsub", "subname", "proto", "subattrlist", "myattrlist", "sigvar", "sigslurpsigil", - "sigslurpelem", "sigscalarelem", "optsigscalardefault", "sigelem", - "siglist", "optsiglist", "optsubsignature", "subsignature", "subsigguts", - "$@20", "optsubbody", "subbody", "optsigsubbody", "sigsubbody", "$@21", - "expr", "listexpr", "listop", "@22", "methodname", "subscripted", - "termbinop", "termrelop", "relopchain", "termeqop", "eqopchain", - "termunop", "anonymous", "termdo", "term", "@23", "myattrterm", "myterm", - "fieldvar", "optfieldattrlist", "fielddecl", "$@24", "optlistexpr", - "optexpr", "optrepl", "my_scalar", "list_of_scalars", - "my_list_of_scalars", "my_var", "refgen_topic", "my_refgen", "amper", - "scalar", "ary", "hsh", "arylen", "star", "sliceme", "kvslice", "gelem", - "indirob", YY_NULLPTR + "sigslurpelem", "optcolon", "sigscalarelem", "optsigscalardefault", + "sigelem", "siglist", "optsiglist", "optsubsignature", "subsignature", + "subsigguts", "$@20", "optsubbody", "subbody", "optsigsubbody", + "sigsubbody", "$@21", "expr", "listexpr", "listop", "@22", "methodname", + "subscripted", "termbinop", "termrelop", "relopchain", "termeqop", + "eqopchain", "termunop", "anonymous", "termdo", "term", "@23", + "myattrterm", "myterm", "fieldvar", "optfieldattrlist", "fielddecl", + "$@24", "optlistexpr", "optexpr", "optrepl", "my_scalar", + "list_of_scalars", "my_list_of_scalars", "my_var", "refgen_topic", + "my_refgen", "amper", "scalar", "ary", "hsh", "arylen", "star", + "sliceme", "kvslice", "gelem", "indirob", YY_NULLPTR }; static const char * @@ -440,12 +441,12 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-548) +#define YYPACT_NINF (-561) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-345) +#define YYTABLE_NINF (-347) #define yytable_value_is_error(Yyn) \ ((Yyn) == YYTABLE_NINF) @@ -454,74 +455,74 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - 784, -548, -548, -548, -548, -548, -548, -548, 37, -548, - 3019, 55, 1961, 1844, -548, -548, -548, -548, 126, 3019, - 126, 3019, 126, 3019, 126, 126, 3019, 32, 3019, 2290, - -548, -548, -548, -548, 126, 126, -548, -548, 60, -56, - -548, 3019, -548, -548, 3019, -28, -3, -55, 2290, 2209, - 55, 126, 3019, 39, 3019, 3019, 3019, 3019, 3019, 3019, - 2371, -548, 386, 146, -548, 11, -548, -14, 76, -61, - 79, -548, -548, -548, 3267, -548, -548, 66, 46, 68, - 115, -548, 208, 211, 219, 212, -548, -548, -548, -548, - -548, 177, 180, 300, 105, 114, 25, 119, 125, 130, - 132, 55, 236, 236, -548, 39, -548, -548, -548, 244, - -548, 39, 228, -548, 250, 372, 267, 1844, -548, -548, - -548, -548, 688, -548, 302, 862, -548, -548, -548, -548, - -548, 279, -548, 546, -548, 546, -548, -548, 3603, 3100, - 2452, 214, -548, -548, -548, 3603, -548, 3603, 233, 220, - 220, 3019, 173, 230, 3019, 192, 3603, 55, 3267, 203, - 2533, 3019, 2209, -548, 3603, 3181, -548, 146, -548, 2614, - 3019, 3019, -548, 313, -548, -548, 3019, 146, 546, 546, - 546, 493, 493, 323, 303, 3019, 3019, 3019, 3019, 3019, - 3019, 3019, 2695, -548, -548, 3019, -548, -548, 3019, 3019, - 3019, 3019, 3019, 3019, 3019, 3019, 3019, 3019, 3019, 3019, - 3019, 3019, 3019, 3019, 3019, 3019, 3019, 3019, 3019, 3019, - 3019, 3019, 3019, 3019, -548, -548, -548, 3019, 193, 2776, - 3019, 3019, 3019, 3019, 3019, 3019, 3019, -548, 284, 287, - 310, 285, -548, -548, -548, -548, -548, 257, 571, -548, - -548, 253, -548, -548, -548, -548, -548, -548, 347, -548, - -548, -548, -548, -548, -548, 55, -548, -548, -548, 3019, - 3019, 3019, 3019, 3019, 3019, -548, -548, -548, -548, 331, - -548, -548, -548, 331, -548, -548, -548, 371, -548, -548, - 2857, 546, 214, 69, 73, 74, -548, 325, 336, -548, - -548, -548, 220, 364, -548, 18, 18, -548, 3019, 3019, - 13, -548, -548, -548, -548, 342, 316, 283, 3019, 146, - 146, 415, -548, 3019, 416, 15, 15, -548, -548, 3371, - 96, 78, -548, 355, 361, 3564, 3423, 546, 405, 381, - 3319, 3371, 3371, 3215, 3462, 3462, 3462, 3485, 3485, 3524, - 3545, 3564, 3564, 361, 361, 3584, 3623, 381, 405, 546, - 546, 5, 7, 3019, 3019, 204, 403, 406, 408, -548, - 420, 2938, 308, -548, -548, 446, 190, 89, 234, 200, - 268, 213, 280, 979, -548, -548, 428, 61, 220, 388, - -548, 354, 3019, 3019, -548, 24, -548, -548, 322, -548, - -548, -548, -548, 2047, 300, -548, 3019, 3019, 3019, 3019, - -548, -548, 401, -548, 437, -548, -548, -548, 386, -548, - -548, -548, 386, -548, -548, -548, 365, 366, 302, 20, - 451, -548, -548, -548, 449, -548, 338, -548, -548, 332, - 28, -548, 3019, -548, -548, -548, 510, -548, 255, 3019, - 459, -548, -548, 3019, -548, 340, 293, 259, -548, -548, - -548, -548, -548, -548, 521, 3019, -548, 480, -548, 482, - -548, 484, -548, 489, -548, -548, -548, -548, -548, 154, - -548, -548, 383, 386, 384, 486, 380, -548, -548, -548, - -548, -548, 385, 496, 217, -548, 3019, 390, 391, 386, - 393, 396, 1142, 387, 473, 233, -548, 525, -548, -548, - 220, 3019, 3019, -548, 41, -548, -548, -548, 541, -548, - -548, 3019, -548, 465, -548, -548, -548, 263, -548, 1012, - 3019, 544, -548, -548, 426, -548, -548, -548, -548, 538, - -548, -548, -548, 3019, 236, 236, 547, 430, -548, 3019, - 3019, 236, -548, 432, 434, -548, -548, 236, 236, -548, - -548, -548, -548, 3019, 220, -548, 548, -548, 3267, 3267, - 435, -548, 386, -548, -548, 440, -548, -548, 487, -548, - -548, 3267, 134, 134, 486, 436, 443, 445, 228, 3019, - 3019, 236, 236, 236, -548, -548, 486, 236, 557, 437, - 1259, -548, -548, -548, -548, -548, -548, -548, 1376, -548, - 236, 456, -548, -548, -548, -548, 3019, 236, 236, -548, - 561, 461, 228, 228, 228, -548, 549, -548, -548, -548, - 1493, -548, 31, -548, 1610, -548, 3019, 469, 228, 228, - -548, 236, -548, -548, -548, 471, 55, -548, -548, 579, - 522, -548, -548, 477, 236, -548, -548, -548, 228, -548, - -548, -548, -548, -548, -548, 236, 228, 2128, -548, 1727, - 134, -548, 499, -548, -548, 236, -548 + 632, -561, -561, -561, -561, -561, -561, -561, 77, -561, + 3047, 53, 1989, 1872, -561, -561, -561, -561, 392, 3047, + 392, 3047, 392, 3047, 392, 392, 3047, 64, 3047, 2318, + -561, -561, -561, -561, 392, 392, -561, -561, 92, -24, + -561, 3047, -561, -561, 3047, -6, -1, -37, 2318, 2237, + 53, 392, 3047, 30, 3047, 3047, 3047, 3047, 3047, 3047, + 2399, -561, 491, 130, -561, 11, -561, 75, 45, 133, + 82, -561, -561, -561, 3239, -561, -561, 28, 50, 180, + 186, -561, 152, 203, 219, 156, -561, -561, -561, -561, + -561, 144, 149, 281, 47, 101, -3, 121, 160, 164, + 166, 53, 198, 198, -561, 30, -561, -561, -561, 286, + -561, 30, 280, -561, 291, 318, 309, 1872, -561, -561, + -561, -561, 690, -561, 69, 864, -561, -561, -561, -561, + -561, 320, -561, 263, -561, 263, -561, -561, 3647, 3128, + 2480, 265, -561, -561, -561, 3647, -561, 3647, 288, 275, + 275, 3047, 235, 293, 3047, 254, 3647, 53, 3239, 256, + 2561, 3047, 2237, -561, 3647, 3209, -561, 130, -561, 2642, + 3047, 3047, -561, 374, -561, -561, 3047, 130, 263, 263, + 263, 360, 360, 384, 226, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 2723, -561, -561, 3047, -561, -561, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, + 3047, 3047, 3047, 3047, -561, -561, -561, 3047, 49, 2804, + 3047, 3047, 3047, 3047, 3047, 3047, 3047, -561, 346, 348, + 350, 321, -561, -561, -561, -561, -561, 295, 499, -561, + -561, 287, -561, -561, -561, -561, -561, -561, 377, -561, + -561, -561, -561, -561, -561, 53, -561, -561, -561, 3047, + 3047, 3047, 3047, 3047, 3047, -561, -561, -561, -561, -561, + -561, -561, -561, 357, -561, 406, -561, -561, 413, -561, + -561, 2885, 263, 265, 21, 79, 172, -561, 342, 370, + -561, -561, -561, 275, 375, -561, 1, 1, -561, 3047, + 3047, 27, -561, -561, -561, -561, 373, 353, 301, 3047, + 130, 130, 428, -561, 3047, 432, 163, 163, -561, -561, + 3343, 128, 116, -561, 380, 3608, 3588, 3447, 263, 331, + 494, 3291, 3343, 3343, 1015, 3486, 3486, 3486, 3509, 3509, + 3548, 3569, 3588, 3588, 3608, 3608, 3627, 1030, 494, 331, + 263, 263, 173, 26, 3047, 3047, 88, 421, 425, 427, + -561, 430, 2966, 330, -561, -561, 403, 176, 123, 233, + 140, 269, 145, 278, 981, -561, -561, 445, 98, 275, + 412, -561, 366, 3047, 3047, -561, 3, -561, -561, 351, + -561, -561, -561, -561, 2075, 281, -561, 3047, 3047, 3047, + 3047, -561, -561, 424, -561, 471, -561, -561, -561, 491, + -561, -561, -561, 491, -561, -561, -561, 385, 357, 69, + 42, 446, -561, -561, -561, 484, -561, 371, -561, -561, + 379, 55, -561, 3047, -561, -561, -561, 462, -561, 168, + 3047, 490, -561, -561, 3047, -561, 376, 304, 242, -561, + -561, -561, -561, -561, -561, 487, 3047, -561, 500, -561, + 502, -561, 505, -561, 508, -561, -561, -561, -561, -561, + 151, -561, -561, 391, 491, 396, 512, 399, -561, -561, + -561, -561, -561, 401, 511, 274, -561, 3047, 404, 405, + 491, 408, 415, 1170, 416, 450, 288, -561, 526, -561, + -561, 275, 3047, 452, -561, 62, -561, -561, -561, 533, + -561, -561, 3047, -561, 459, -561, -561, -561, 252, -561, + 3395, 3047, 548, -561, -561, 433, -561, -561, -561, -561, + 539, -561, -561, -561, 3047, 198, 198, 550, 438, -561, + 3047, 3047, 198, -561, 447, 439, -561, -561, 198, 198, + -561, -561, -561, -561, 3047, 275, -561, 558, 3239, 3047, + 461, -561, 491, -561, -561, 463, -561, -561, 509, -561, + -561, 3239, 344, 344, 512, 458, 465, 467, 280, 3047, + 3047, 198, 198, 198, -561, -561, 512, 198, 579, 471, + 1287, -561, -561, -561, -561, 3239, -561, -561, -561, -561, + 1404, -561, 198, 470, -561, -561, -561, -561, 3047, 198, + 198, -561, 581, 473, 280, 280, 280, -561, 562, -561, + -561, -561, 1521, -561, 57, -561, 1638, -561, 3047, 477, + 280, 280, -561, 198, -561, -561, -561, 478, 53, -561, + -561, 596, 532, -561, -561, 495, 198, -561, -561, -561, + 280, -561, -561, -561, -561, -561, -561, 198, 280, 2156, + -561, 1755, 344, -561, 496, -561, -561, 198, -561 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -530,107 +531,107 @@ static const yytype_int16 yypact[] = static const yytype_int16 yydefact[] = { 0, 2, 4, 6, 8, 10, 12, 14, 0, 21, - 19, 0, 0, 0, 19, 140, 1, 19, 0, 19, - 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, - 107, 107, 108, 291, 0, 0, 262, 289, 250, 284, - 286, 280, 107, 293, 272, 282, 0, 0, 275, 19, + 19, 0, 0, 0, 19, 142, 1, 19, 0, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, + 107, 107, 108, 293, 0, 0, 264, 291, 252, 286, + 288, 282, 107, 295, 274, 284, 0, 0, 277, 19, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, - 0, 314, 315, 153, 292, 257, 241, 197, 209, 198, - 216, 242, 243, 244, 156, 247, 5, 263, 252, 255, - 254, 256, 253, 0, 0, 0, 21, 7, 81, 76, + 0, 316, 317, 155, 294, 259, 243, 199, 211, 200, + 218, 244, 245, 246, 158, 249, 5, 265, 254, 257, + 256, 258, 255, 0, 0, 0, 21, 7, 81, 76, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 16, 17, 36, 0, 106, 0, 19, 9, 0, 82, 0, 0, 11, 33, - 32, 28, 0, 15, 19, 0, 343, 346, 345, 344, - 330, 0, 331, 222, 333, 223, 332, 336, 248, 0, - 0, 295, 300, 302, 301, 279, 240, 239, 19, 19, - 19, 19, 0, 0, 0, 0, 281, 0, 273, 0, - 0, 19, 19, 276, 277, 291, 312, 313, 166, 252, - 0, 0, 334, 0, 110, 111, 19, 274, 224, 225, - 246, 229, 230, 251, 0, 0, 0, 0, 0, 154, - 0, 0, 0, 212, 211, 0, 219, 218, 0, 0, + 32, 28, 0, 15, 19, 0, 345, 348, 347, 346, + 332, 0, 333, 224, 335, 225, 334, 338, 250, 0, + 0, 297, 302, 304, 303, 281, 242, 241, 19, 19, + 19, 19, 0, 0, 0, 0, 283, 0, 275, 0, + 0, 19, 19, 278, 279, 293, 314, 315, 168, 254, + 0, 0, 336, 0, 110, 111, 19, 276, 226, 227, + 248, 231, 232, 253, 0, 0, 0, 0, 0, 156, + 0, 0, 0, 214, 213, 0, 221, 220, 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, 226, 227, 228, 0, 0, 0, + 0, 0, 0, 0, 228, 229, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 0, - 0, 19, 303, 305, 304, 21, 21, 21, 0, 21, + 0, 19, 305, 307, 306, 21, 21, 21, 0, 21, 21, 0, 21, 21, 21, 21, 52, 23, 0, 74, 46, 106, 75, 42, 106, 0, 92, 67, 73, 0, - 0, 0, 0, 0, 0, 72, 35, 34, 29, 119, - 122, 121, 135, 119, 131, 130, 134, 136, 141, 231, - 0, 297, 0, 252, 255, 254, 299, 0, 118, 294, - 113, 112, 19, 116, 114, 236, 238, 164, 19, 0, - 0, 285, 169, 283, 287, 0, 0, 0, 0, 157, - 158, 0, 266, 0, 249, 151, 152, 149, 150, 155, - 0, 0, 183, 0, 215, 221, 201, 190, 192, 194, - 208, 188, 189, 0, 204, 206, 205, 202, 203, 200, - 199, 220, 217, 214, 210, 213, 196, 195, 193, 207, - 191, 187, 0, 0, 0, 0, 340, 338, 342, 171, - 0, 0, 161, 172, 264, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 104, 105, 0, 0, 19, 307, - 308, 309, 0, 0, 328, 0, 329, 326, 0, 327, - 323, 324, 325, 0, 0, 21, 0, 99, 0, 0, - 19, 21, 0, 38, 21, 40, 93, 83, 80, 84, - 87, 86, 101, 85, 88, 120, 126, 123, 132, 251, - 0, 296, 298, 117, 234, 115, 19, 235, 237, 0, - 19, 185, 19, 288, 168, 167, 0, 232, 0, 0, - 0, 176, 182, 0, 270, 163, 0, 0, 267, 269, - 268, 271, 335, 180, 0, 19, 265, 0, 174, 0, - 258, 0, 259, 0, 18, 21, 37, 21, 44, 0, - 306, 310, 0, 102, 0, 0, 0, 318, 21, 97, - 98, 103, 0, 0, 82, 61, 0, 0, 0, 100, - 0, 0, 0, 19, 0, 19, 143, 0, 43, 142, - 19, 128, 124, 133, 249, 233, 140, 137, 0, 138, - 165, 0, 316, 0, 170, 159, 186, 0, 179, 245, - 19, 0, 175, 181, 0, 177, 260, 261, 173, 0, - 68, 21, 45, 0, 0, 0, 322, 0, 321, 0, - 0, 0, 55, 0, 0, 96, 96, 0, 0, 22, - 25, 24, 65, 19, 19, 19, 21, 127, 129, 125, - 0, 147, 317, 290, 184, 0, 178, 160, 0, 19, - 70, 311, 19, 19, 319, 0, 0, 0, 19, 99, + 0, 0, 0, 0, 0, 72, 35, 34, 29, 122, + 121, 127, 137, 119, 133, 0, 132, 136, 138, 143, + 233, 0, 299, 0, 254, 257, 256, 301, 0, 118, + 296, 113, 112, 19, 116, 114, 238, 240, 166, 19, + 0, 0, 287, 171, 285, 289, 0, 0, 0, 0, + 159, 160, 0, 268, 0, 251, 153, 154, 151, 152, + 157, 0, 0, 185, 0, 217, 223, 203, 192, 194, + 196, 210, 190, 191, 0, 206, 208, 207, 204, 205, + 202, 201, 222, 219, 216, 212, 215, 198, 197, 195, + 209, 193, 189, 0, 0, 0, 0, 342, 340, 344, + 173, 0, 0, 163, 174, 266, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 104, 105, 0, 0, 19, + 309, 310, 311, 0, 0, 330, 0, 331, 328, 0, + 329, 325, 326, 327, 0, 0, 21, 0, 99, 0, + 0, 19, 21, 0, 38, 21, 40, 93, 83, 80, + 84, 87, 86, 101, 85, 88, 120, 123, 119, 134, + 253, 0, 298, 300, 117, 236, 115, 19, 237, 239, + 0, 19, 187, 19, 290, 170, 169, 0, 234, 0, + 0, 0, 178, 184, 0, 272, 165, 0, 0, 269, + 271, 270, 273, 337, 182, 0, 19, 267, 0, 176, + 0, 260, 0, 261, 0, 18, 21, 37, 21, 44, + 0, 308, 312, 0, 102, 0, 0, 0, 320, 21, + 97, 98, 103, 0, 0, 82, 61, 0, 0, 0, + 100, 0, 0, 0, 19, 0, 19, 145, 0, 43, + 144, 19, 124, 128, 135, 251, 235, 142, 139, 0, + 140, 167, 0, 318, 0, 172, 161, 188, 0, 181, + 247, 19, 0, 177, 183, 0, 179, 262, 263, 175, + 0, 68, 21, 45, 0, 0, 0, 324, 0, 323, + 0, 0, 0, 55, 0, 0, 96, 96, 0, 0, + 22, 25, 24, 65, 19, 19, 19, 21, 125, 130, + 0, 149, 319, 292, 186, 0, 180, 162, 0, 19, + 70, 313, 19, 19, 321, 0, 0, 0, 19, 99, 0, 0, 0, 0, 50, 51, 0, 0, 0, 21, - 0, 146, 41, 145, 139, 19, 162, 19, 0, 19, - 0, 0, 89, 48, 49, 320, 0, 0, 0, 64, - 0, 0, 19, 19, 19, 26, 94, 47, 39, 144, - 0, 30, 0, 69, 0, 90, 0, 0, 19, 19, - 56, 0, 60, 54, 53, 0, 0, 66, 148, 0, - 19, 31, 71, 0, 0, 58, 63, 96, 19, 27, - 95, 20, 19, 78, 77, 0, 19, 0, 62, 0, - 19, 59, 0, 79, 91, 0, 57 + 0, 148, 41, 147, 129, 131, 141, 19, 164, 19, + 0, 19, 0, 0, 89, 48, 49, 322, 0, 0, + 0, 64, 0, 0, 19, 19, 19, 26, 94, 47, + 39, 146, 0, 30, 0, 69, 0, 90, 0, 0, + 19, 19, 56, 0, 60, 54, 53, 0, 0, 66, + 150, 0, 19, 31, 71, 0, 0, 58, 63, 96, + 19, 27, 95, 20, 19, 78, 77, 0, 19, 0, + 62, 0, 19, 59, 0, 79, 91, 0, 57 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, - -4, -10, -548, 92, -7, -548, -548, -548, -548, -16, - -548, 614, 514, 3, -548, -548, -548, -548, -548, -548, - -548, -548, -548, -548, -548, -548, -63, -397, -547, -255, - -548, -544, -548, 43, 229, -315, -30, -548, -84, 174, - -548, -548, -88, 133, -140, 351, 356, -548, -548, -548, - -548, 216, -548, -548, -548, -548, 135, -548, 50, 221, - -548, -295, -548, 9, -46, -548, -548, -548, -548, -548, - -548, -548, -548, -548, -548, -548, -548, 638, -548, -548, - 511, -548, -548, -548, -548, -138, -17, -548, -548, -548, - -548, 249, -548, -548, 414, 40, -23, -22, -548, -548, - -548, -548, -548, 97 + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -4, -10, -561, 29, -67, -561, -561, -561, -561, -16, + -561, 612, 515, 17, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, 71, -402, -560, -308, + -561, -517, -561, 40, 236, -361, -36, -561, -100, 153, + -561, -561, -94, 139, -135, 354, 218, -561, -561, -561, + -561, -561, 220, -561, -561, -561, -561, 134, -561, 54, + 217, -561, -299, -561, 16, 4, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, 640, -561, + -561, 516, -561, -561, -561, -561, -148, -15, -561, -561, + -561, -561, 251, -561, -561, 409, 76, -22, -21, -561, + -561, -561, -561, -561, 32 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { 0, 8, 9, 10, 11, 12, 13, 14, 15, 111, - 112, 121, 476, 436, 258, 410, 562, 596, 645, 122, - 632, 278, 119, 120, 505, 510, 414, 412, 589, 657, - 553, 597, 579, 609, 651, 664, 417, 114, 613, 267, - 647, 592, 491, 498, 421, 482, 493, 386, 260, 148, - 150, 238, 176, 302, 305, 299, 426, 283, 284, 285, - 567, 286, 287, 288, 518, 519, 123, 124, 508, 509, - 602, 437, 605, 115, 63, 64, 442, 372, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 153, 75, - 141, 241, 391, 116, 543, 168, 76, 523, 486, 546, - 547, 397, 398, 250, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 132 + 112, 121, 477, 437, 258, 411, 563, 596, 647, 122, + 634, 278, 119, 120, 506, 511, 415, 413, 589, 659, + 554, 597, 579, 611, 653, 666, 418, 114, 615, 267, + 649, 592, 492, 499, 422, 483, 494, 387, 260, 148, + 150, 238, 176, 303, 306, 300, 427, 283, 284, 285, + 286, 604, 287, 288, 289, 519, 520, 123, 124, 509, + 510, 602, 438, 607, 115, 63, 64, 443, 373, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 153, + 75, 141, 241, 392, 116, 544, 168, 76, 524, 487, + 547, 548, 398, 399, 250, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 132 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -638,171 +639,127 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 61, 125, 131, 167, 143, 144, 490, 87, 177, 61, - 306, 438, 593, 307, 128, 113, 128, 261, 128, 62, - 128, 128, 190, 264, 191, 146, 263, 441, 62, -21, - 128, 128, 454, 323, 161, 173, 614, 16, 322, 166, - 20, 20, 61, 189, 163, 128, 171, 128, 20, 196, - 197, 521, 22, 649, 449, 247, 24, 230, 129, 231, - 129, 62, 129, 174, 129, 129, 86, 142, 175, 184, - 243, 244, 477, 154, 129, 129, 155, 162, 484, -337, - 230, -337, 231, 478, -337, -339, -337, -339, 492, 169, - 650, 129, 451, 500, 501, 174, 259, 256, 193, 194, - 175, 17, 266, 468, 159, 167, -299, 185, 186, 187, - 188, 187, 188, 667, 282, 130, 294, 295, 450, 134, - 277, 136, 137, 674, 319, 320, -339, -298, -339, 160, - 167, 151, 152, 242, -345, 228, 251, 86, 301, 304, - 304, 166, 20, 192, 316, 317, 170, 248, 172, 297, - -21, 61, 61, 312, 139, -300, 485, 249, 128, -302, - -301, 189, 434, 310, 140, 541, 166, 610, 611, 315, - 62, 62, 185, 186, 187, 188, 542, 413, 237, 293, - 415, 554, 126, 185, 186, 187, 188, 127, 195, 198, - 185, 186, 187, 188, 325, 326, 327, 328, 229, 330, - 331, 333, 169, 362, 363, 149, 364, 419, 420, 365, - 423, 424, 467, 366, 470, 86, 157, 367, 368, -341, - 20, 383, 232, 236, 233, 401, 402, 472, 385, 458, - 234, 390, 235, 239, 586, 587, 240, 245, 375, 376, - 377, 378, 379, 380, 381, 382, 246, 257, 479, 269, - 369, 252, 270, 271, 272, 273, 469, 253, 274, 318, - 126, 416, 254, 440, 255, 127, 262, 265, 373, 526, - 490, 603, 268, 532, 455, 621, 370, 574, 418, 418, - 418, 422, 418, 418, 185, 186, 187, 188, 400, 275, - 471, 439, 304, 289, 185, 186, 187, 188, 61, 430, - 298, 637, 473, 300, 524, 308, 303, 185, 186, 187, - 188, 185, 186, 187, 188, 531, 20, 62, 279, 309, - 22, 653, 280, 311, 24, 371, 281, 446, 185, 186, - 187, 188, 448, 619, 313, 321, 323, 392, 393, 395, - 384, 403, 404, 387, 406, 407, 408, 409, -102, 185, - 186, 187, 188, 185, 186, 187, 188, 185, 186, 187, - 188, 128, 185, 186, 187, 188, 388, 642, 643, 644, - 566, 389, 456, 457, 185, 186, 187, 188, 304, 394, - 464, 401, 402, 655, 656, 405, 428, 185, 186, 187, - 188, 411, 425, 489, 502, 433, 167, 185, 186, 187, - 188, 483, 483, 668, 269, 129, 444, 270, 271, 272, - 273, 671, 494, 274, 445, 422, 499, 483, 483, 185, - 186, 187, 188, 435, 599, 598, 517, 447, 459, 449, - 522, 460, 166, 461, 324, 487, 185, 186, 187, 188, - 465, 200, 201, 202, 400, 462, 475, 480, 534, 185, - 186, 187, 188, 481, 488, 61, 432, 504, 527, 506, - -21, 200, 201, 520, 511, 512, 185, 186, 187, 188, - 516, 528, 530, 443, 62, 218, 219, 220, 221, 222, - 185, 186, 187, 188, 223, 200, 452, 224, 225, 226, - 227, 228, 535, 561, 536, 301, 537, 496, 221, 222, - 304, 538, 20, 503, 223, 483, 507, 224, 225, 226, - 227, 228, 549, 575, 544, 545, 551, 167, 552, 560, - 61, 555, 556, 222, 557, 548, 507, 558, 223, 563, - 572, 224, 225, 226, 227, 228, 565, 582, 583, 62, - 185, 186, 187, 188, 588, 185, 186, 187, 188, 600, - 594, 595, 571, 166, 304, 573, 576, 577, 483, 483, - 578, 585, 584, 608, 590, 591, 604, 539, 616, 540, - 601, 606, 612, 612, 617, 607, 618, 466, 266, 627, - 550, 18, 514, 640, 622, 623, 624, 20, 636, 630, - 626, 22, 641, 634, 646, 24, 661, 631, 499, 483, - 654, 396, 659, 635, 185, 186, 187, 188, 665, 662, - 638, 639, 266, 266, 266, 185, 186, 187, 188, -345, - -345, -345, 227, 228, 615, 483, 200, 118, 266, 266, - 675, 276, 620, 580, 658, 497, 625, 672, 564, 427, - 663, 525, 660, 431, 513, 483, 669, 666, 266, 628, - 292, 570, 533, 495, 0, 515, 266, 489, 670, 133, - 612, 135, 399, 0, 138, 0, 145, 147, 676, 223, - 0, 0, 224, 225, 226, 227, 228, 0, 0, 156, - 0, 0, 158, 0, 0, 0, 164, 0, -13, 88, - 0, 507, 0, 178, 179, 180, 181, 182, 18, 86, - 0, 19, 0, 0, 20, 0, 0, 21, 22, 23, - 89, 0, 24, 25, 90, 91, 92, 26, 27, 93, - 94, 0, 0, 95, 96, 97, 98, 0, 99, 100, - 101, 102, 0, 0, 103, 28, 29, 104, 105, 106, - 30, 31, 107, 32, 33, 34, 35, 36, 37, 0, - 38, 39, 40, 41, 42, 43, 108, 117, 0, 44, - 0, 109, 45, 46, 47, 48, 49, 50, 0, 0, - 0, 51, 52, 53, 0, 0, 0, 291, 0, 110, - 0, 0, 0, 0, 0, 0, 54, 1, 2, 3, - 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, - 57, 0, 58, 59, 0, 0, 0, 0, 0, 0, - 60, 0, 0, 0, 0, 0, 0, 329, 0, 0, - 0, 0, 0, 334, 0, 0, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, -3, 88, 0, 361, 0, 0, 0, 0, - 0, 0, 18, 86, 0, 19, 0, 0, 20, 0, - 0, 21, 22, 23, 89, 0, 24, 25, 90, 91, - 92, 26, 27, 93, 94, 0, 0, 95, 96, 97, - 98, 0, 99, 100, 101, 102, 0, 0, 103, 28, - 29, 104, 105, 106, 30, 31, 107, 32, 33, 34, - 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, - 108, 117, 0, 44, 0, 109, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, - 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 55, 56, 0, 57, 0, 58, 59, 0, 18, - 86, 474, 19, 0, 60, 20, 0, 0, 21, 22, - 23, 89, 0, 24, 25, 90, 91, 92, 26, 27, - 93, 94, 0, 0, 95, 96, 97, 98, 0, 99, - 100, 101, 102, 0, 0, 103, 28, 29, 104, 105, - 106, 30, 31, 107, 32, 33, 34, 35, 36, 37, - 0, 38, 39, 40, 41, 42, 43, 108, 117, 0, - 44, 0, 109, 45, 46, 47, 48, 49, 50, 0, - 0, 0, 51, 52, 53, 0, 0, 0, 0, 0, - 110, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, - 0, 529, 200, 201, 202, 0, 0, 0, 55, 56, - 0, 57, 0, 58, 59, 0, 0, 0, 0, 0, - 0, 60, 0, 206, 0, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - 222, 0, 0, 0, 0, 223, 0, 0, 224, 225, - 226, 227, 228, 88, 0, 0, 0, 0, 0, 568, - 569, 0, 18, 86, 559, 19, 0, 0, 20, 0, - 0, 21, 22, 23, 89, 0, 24, 25, 90, 91, - 92, 26, 27, 93, 94, 0, 0, 95, 96, 97, - 98, 581, 99, 100, 101, 102, 0, 0, 103, 28, - 29, 104, 105, 106, 30, 31, 107, 32, 33, 34, - 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, - 108, 117, 0, 44, 0, 109, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, - 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, - 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 55, 56, 0, 57, 0, 58, 59, 0, 18, - 86, 629, 19, 0, 60, 20, 0, 0, 21, 22, - 23, 89, 0, 24, 25, 90, 91, 92, 26, 27, - 93, 94, 0, 0, 95, 96, 97, 98, 0, 99, - 100, 101, 102, 0, 0, 103, 28, 29, 104, 105, - 106, 30, 31, 107, 32, 33, 34, 35, 36, 37, - 0, 38, 39, 40, 41, 42, 43, 108, 117, 0, - 44, 0, 109, 45, 46, 47, 48, 49, 50, 0, - 0, 0, 51, 52, 53, 0, 0, 0, 0, 0, - 110, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 88, 55, 56, - 0, 57, 0, 58, 59, 0, 18, 86, 633, 19, - 0, 60, 20, 0, 0, 21, 22, 23, 89, 0, - 24, 25, 90, 91, 92, 26, 27, 93, 94, 0, - 0, 95, 96, 97, 98, 0, 99, 100, 101, 102, - 0, 0, 103, 28, 29, 104, 105, 106, 30, 31, - 107, 32, 33, 34, 35, 36, 37, 0, 38, 39, - 40, 41, 42, 43, 108, 117, 0, 44, 0, 109, - 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, - 52, 53, 0, 0, 0, 0, 0, 110, 0, 0, - 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, + 61, 125, 491, 308, 131, 143, 144, 87, 439, 61, + 263, 261, -21, 20, 128, 307, 128, 264, 128, 20, + 128, 128, 190, 616, 191, 146, 62, 247, 323, 113, + 128, 128, 230, 485, 231, 62, 259, 173, 17, 166, + 593, 442, 61, 493, 163, 128, 171, 128, 501, 502, + 130, 455, 161, 167, 134, 324, 136, 137, 177, 363, + 364, 230, 365, 231, 86, 366, 151, 152, 62, 367, + 189, 243, 244, 368, 369, 450, 184, 16, 522, 651, + 20, 170, 174, 172, 22, -126, 174, 175, 24, 279, + -339, 175, -339, 280, 129, 162, 129, 256, 129, 86, + 129, 129, 266, 142, 20, 154, 370, -302, 155, 478, + 129, 129, 676, 459, 282, 237, 652, 295, 296, 248, + 479, 185, 186, 187, 188, 169, 159, 129, -301, 249, + 452, 160, 371, -21, 277, 486, 555, 469, 302, 305, + 305, 166, 669, 192, 126, 189, 317, 318, -300, 127, + 451, 61, 61, 313, 471, 167, 298, 195, 128, 473, + 229, 414, 542, -343, 416, -304, 166, 236, 435, 242, + 311, 281, 251, 543, 320, 321, 316, 62, 62, 245, + 167, 372, 527, -341, 149, -341, 139, 193, 194, 586, + 587, -339, 198, -339, 319, 157, 140, -341, 468, -341, + 239, 326, 327, 328, 329, 240, 331, 332, 334, 257, + 185, 186, 187, 188, 232, 294, 233, 185, 186, 187, + 188, 384, 185, 186, 187, 188, 402, 403, 386, 623, + 234, 391, 235, 246, 185, 186, 187, 188, 169, 185, + 186, 187, 188, 196, 197, 376, 377, 378, 379, 380, + 381, 382, 383, 252, 480, 470, 533, 639, -303, 187, + 188, 417, 185, 186, 187, 188, 574, 491, 603, 456, + 185, 186, 187, 188, 393, 394, 396, 655, 404, 405, + 621, 407, 408, 409, 410, 419, 419, 419, 423, 419, + 419, 472, 253, 305, 440, 525, 254, 20, 255, 61, + 474, 22, -347, 228, 374, 24, 269, 431, 262, 270, + 271, 272, 273, 268, 441, 274, 644, 645, 646, 265, + 185, 186, 187, 188, 401, 62, 532, 185, 186, 187, + 188, 275, 657, 658, 290, 447, 185, 186, 187, 188, + 449, 420, 421, 200, 424, 425, 185, 186, 187, 188, + 269, 299, 670, 270, 271, 272, 273, 325, 301, 274, + 673, 304, 128, 185, 186, 187, 188, 309, 185, 186, + 187, 188, 185, 186, 187, 188, 567, 612, 613, 305, + 457, 458, 310, 402, 403, 312, 223, 314, 465, 224, + 225, 226, 227, 228, 490, 503, 322, 324, 185, 186, + 187, 188, 385, 86, 388, -102, 389, 390, 20, 484, + 484, 200, 185, 186, 187, 188, 598, 395, 426, 406, + 495, 412, 428, 423, 500, 484, 484, 518, 429, 434, + 599, 523, 446, 166, 436, 497, 185, 186, 187, 188, + 448, 504, 129, 445, 508, 450, 460, 167, 126, 222, + 461, 535, 462, 127, 223, 463, 61, 224, 225, 226, + 227, 228, 466, 476, 508, 482, 528, 185, 186, 187, + 188, 481, 488, 433, 185, 186, 187, 188, 582, 583, + 505, 401, 62, 489, 512, 588, -347, -347, -347, 227, + 228, 594, 595, 507, 562, -21, 302, 185, 186, 187, + 188, 305, 529, 517, 444, 540, 564, 541, 531, 18, + 521, 453, 536, 484, 537, 20, 575, 538, 551, 22, + 539, 61, 545, 24, 624, 625, 626, 546, 20, 397, + 628, 550, 552, 553, 467, 556, 557, 566, 572, 558, + 185, 186, 187, 188, 571, 637, 559, 62, 561, 573, + 600, 569, 640, 641, 166, 305, 185, 186, 187, 188, + 576, 578, 549, 610, 577, 584, 484, 484, 167, 585, + 591, 580, 614, 614, 200, 201, 660, 515, 266, 590, + 601, 185, 186, 187, 188, 185, 186, 187, 188, 668, + 618, 632, 606, 526, 608, 636, 619, 609, 620, 633, + 672, 629, 638, 642, 643, 500, 484, 648, 656, 661, + 678, 221, 222, 663, 266, 266, 266, 223, 534, 664, + 224, 225, 226, 227, 228, 118, 667, 677, 508, 622, + 266, 266, 276, 674, 484, 1, 2, 3, 4, 5, + 6, 7, 665, 498, 662, 565, 513, 432, 671, 514, + 266, 570, 516, 630, 484, 293, 496, 400, 266, 490, + 617, 133, 614, 135, 0, 0, 138, 0, 145, 147, + 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, + 0, 156, 0, 0, 158, 0, 0, 0, 164, 0, + -13, 88, 0, 0, 0, 178, 179, 180, 181, 182, + 18, 86, 0, 19, 0, 0, 20, 0, 0, 21, + 22, 23, 89, 0, 24, 25, 90, 91, 92, 26, + 27, 93, 94, 0, 0, 95, 96, 97, 98, 0, + 99, 100, 101, 102, 0, 0, 103, 28, 29, 104, + 105, 106, 30, 31, 107, 32, 33, 34, 35, 36, + 37, 0, 38, 39, 40, 41, 42, 43, 108, 117, + 0, 44, 0, 109, 45, 46, 47, 48, 49, 50, + 0, 0, 0, 51, 52, 53, 0, 0, 0, 292, + 0, 110, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 88, 55, 56, 0, 57, 0, - 58, 59, 0, 18, 86, 648, 19, 0, 60, 20, - 0, 0, 21, 22, 23, 89, 0, 24, 25, 90, - 91, 92, 26, 27, 93, 94, 0, 0, 95, 96, - 97, 98, 0, 99, 100, 101, 102, 0, 0, 103, - 28, 29, 104, 105, 106, 30, 31, 107, 32, 33, - 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, - 43, 108, 117, 0, 44, 0, 109, 45, 46, 47, - 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, - 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, - 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, + 56, 0, 57, 0, 58, 59, 0, 0, 0, 0, + 0, 0, 60, 0, 0, 0, 0, 0, 0, 330, + 0, 0, 0, 0, 0, 335, 0, 0, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, -3, 88, 0, 362, 0, 0, + 0, 0, 0, 0, 18, 86, 0, 19, 0, 0, + 20, 0, 0, 21, 22, 23, 89, 0, 24, 25, + 90, 91, 92, 26, 27, 93, 94, 0, 0, 95, + 96, 97, 98, 0, 99, 100, 101, 102, 0, 0, + 103, 28, 29, 104, 105, 106, 30, 31, 107, 32, + 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, + 42, 43, 108, 117, 0, 44, 0, 109, 45, 46, + 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, + 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 88, 55, 56, 0, 57, 0, 58, 59, 0, - 18, 86, 652, 19, 0, 60, 20, 0, 0, 21, + 0, 0, 88, 55, 56, 0, 57, 0, 58, 59, + 0, 18, 86, 475, 19, 0, 60, 20, 0, 0, + 21, 22, 23, 89, 0, 24, 25, 90, 91, 92, + 26, 27, 93, 94, 0, 0, 95, 96, 97, 98, + 0, 99, 100, 101, 102, 0, 0, 103, 28, 29, + 104, 105, 106, 30, 31, 107, 32, 33, 34, 35, + 36, 37, 0, 38, 39, 40, 41, 42, 43, 108, + 117, 0, 44, 0, 109, 45, 46, 47, 48, 49, + 50, 0, 0, 0, 51, 52, 53, 0, 0, 0, + 0, 0, 110, 0, 0, 0, 0, 0, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, + 0, 0, 0, 0, 530, 200, 201, 202, 0, 0, + 55, 56, 0, 57, 0, 58, 59, 0, 203, 0, + 200, 201, 202, 60, 204, 205, 206, 454, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, + 219, 220, 221, 222, 0, 0, 0, 0, 223, 0, + 0, 224, 225, 226, 227, 228, 220, 221, 222, 0, + 0, 0, 568, 223, 0, 0, 224, 225, 226, 227, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 86, 560, 19, 581, 0, 20, 0, 0, 21, 22, 23, 89, 0, 24, 25, 90, 91, 92, 26, - 27, 93, 94, 0, 0, 95, 96, 97, 98, 0, + 27, 93, 94, 0, 0, 95, 96, 97, 98, 605, 99, 100, 101, 102, 0, 0, 103, 28, 29, 104, 105, 106, 30, 31, 107, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 108, 117, @@ -811,7 +768,7 @@ static const yytype_int16 yytable[] = 0, 110, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 55, - 56, 0, 57, 0, 58, 59, 0, 18, 86, 0, + 56, 0, 57, 0, 58, 59, 0, 18, 86, 631, 19, 0, 60, 20, 0, 0, 21, 22, 23, 89, 0, 24, 25, 90, 91, 92, 26, 27, 93, 94, 0, 0, 95, 96, 97, 98, 0, 99, 100, 101, @@ -819,11 +776,11 @@ static const yytype_int16 yytable[] = 31, 107, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 108, 117, 0, 44, 0, 109, 45, 46, 47, 48, 49, 50, 0, 0, 0, - 51, 52, 53, 0, 0, 673, 0, 0, 110, 0, + 51, 52, 53, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 55, 56, 0, 57, - 0, 58, 59, 0, 18, 86, 0, 19, 0, 60, + 0, 58, 59, 0, 18, 86, 635, 19, 0, 60, 20, 0, 0, 21, 22, 23, 89, 0, 24, 25, 90, 91, 92, 26, 27, 93, 94, 0, 0, 95, 96, 97, 98, 0, 99, 100, 101, 102, 0, 0, @@ -835,23 +792,86 @@ static const yytype_int16 yytable[] = 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 55, 56, 0, 57, 0, 58, 59, - 0, 18, 86, 0, 19, 0, 60, 20, 0, 0, + 0, 18, 86, 650, 19, 0, 60, 20, 0, 0, 21, 22, 23, 89, 0, 24, 25, 90, 91, 92, 26, 27, 93, 94, 0, 0, 95, 96, 97, 98, 0, 99, 100, 101, 102, 0, 0, 103, 28, 29, 104, 105, 106, 30, 31, 107, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 108, - 0, 0, 44, 0, 109, 45, 46, 47, 48, 49, - 50, 0, 0, 0, 51, 52, 53, 0, 88, 0, - 0, 0, 110, 0, 0, 0, 0, 18, 0, 54, - 19, 0, 0, 20, 0, 0, 21, 22, 23, -19, + 117, 0, 44, 0, 109, 45, 46, 47, 48, 49, + 50, 0, 0, 0, 51, 52, 53, 0, 0, 0, + 0, 0, 110, 0, 0, 0, 0, 0, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, + 55, 56, 0, 57, 0, 58, 59, 0, 18, 86, + 654, 19, 0, 60, 20, 0, 0, 21, 22, 23, + 89, 0, 24, 25, 90, 91, 92, 26, 27, 93, + 94, 0, 0, 95, 96, 97, 98, 0, 99, 100, + 101, 102, 0, 0, 103, 28, 29, 104, 105, 106, + 30, 31, 107, 32, 33, 34, 35, 36, 37, 0, + 38, 39, 40, 41, 42, 43, 108, 117, 0, 44, + 0, 109, 45, 46, 47, 48, 49, 50, 0, 0, + 0, 51, 52, 53, 0, 0, 0, 0, 0, 110, + 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 88, 55, 56, 0, + 57, 0, 58, 59, 0, 18, 86, 0, 19, 0, + 60, 20, 0, 0, 21, 22, 23, 89, 0, 24, + 25, 90, 91, 92, 26, 27, 93, 94, 0, 0, + 95, 96, 97, 98, 0, 99, 100, 101, 102, 0, + 0, 103, 28, 29, 104, 105, 106, 30, 31, 107, + 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, + 41, 42, 43, 108, 117, 0, 44, 0, 109, 45, + 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, + 53, 0, 0, 675, 0, 0, 110, 0, 0, 0, + 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 88, 55, 56, 0, 57, 0, 58, + 59, 0, 18, 86, 0, 19, 0, 60, 20, 0, + 0, 21, 22, 23, 89, 0, 24, 25, 90, 91, + 92, 26, 27, 93, 94, 0, 0, 95, 96, 97, + 98, 0, 99, 100, 101, 102, 0, 0, 103, 28, + 29, 104, 105, 106, 30, 31, 107, 32, 33, 34, + 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, + 108, 117, 0, 44, 0, 109, 45, 46, 47, 48, + 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, + 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, + 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 88, 55, 56, 0, 57, 0, 58, 59, 0, 18, + 86, 0, 19, 0, 60, 20, 0, 0, 21, 22, + 23, 89, 0, 24, 25, 90, 91, 92, 26, 27, + 93, 94, 0, 0, 95, 96, 97, 98, 0, 99, + 100, 101, 102, 0, 0, 103, 28, 29, 104, 105, + 106, 30, 31, 107, 32, 33, 34, 35, 36, 37, + 0, 38, 39, 40, 41, 42, 43, 108, 0, 0, + 44, 0, 109, 45, 46, 47, 48, 49, 50, 0, + 0, 0, 51, 52, 53, 0, 88, 0, 0, 0, + 110, 0, 0, 0, 0, 18, 0, 54, 19, 0, + 0, 20, 0, 0, 21, 22, 23, -19, 0, 24, + 25, 0, 0, 0, 26, 27, 0, 0, 55, 56, + 0, 57, 0, 58, 59, 0, 0, 0, 0, 0, + 0, 60, 28, 29, 0, 0, 0, 30, 31, 0, + 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, + 41, 42, 43, 0, 0, 0, 44, 0, 0, 45, + 46, 47, 48, 49, 50, 0, 0, 88, 51, 52, + 53, 0, 0, 0, 0, 0, 18, 0, 0, 19, + 0, 0, 20, 54, 0, 21, 22, 23, 0, 0, + 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, + 0, 0, 0, 0, 55, 56, 0, 57, 0, 58, + 59, 0, 0, 28, 29, 0, 0, 60, 30, 31, + 0, 32, 33, 34, 35, 36, 37, 0, 38, 39, + 40, 41, 42, 43, 0, 0, 0, 44, 0, 0, + 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, + 52, 53, 0, 0, 0, 0, 0, 18, 86, 0, + 19, 0, 0, 20, 54, 0, 21, 22, 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, - 55, 56, 0, 57, 0, 58, 59, 0, 0, 0, - 0, 0, 0, 60, 28, 29, 0, 0, 0, 30, - 31, 0, 32, 33, 34, 35, 36, 37, 0, 38, + 0, 0, 0, 0, 0, 55, 56, 0, 57, 0, + 58, 59, 0, 0, 28, 29, 0, -19, 60, 30, + 31, 0, 32, 165, 34, 35, 36, 37, 127, 38, 39, 40, 41, 42, 43, 0, 0, 0, 44, 0, - 0, 45, 46, 47, 48, 49, 50, 0, 0, 88, - 51, 52, 53, 0, 0, 0, 0, 0, 18, 0, + 0, 45, 46, 47, 48, 49, 50, 0, 0, 0, + 51, 52, 53, 0, 0, 0, 0, 0, 18, 86, 0, 19, 0, 0, 20, 54, 0, 21, 22, 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 57, @@ -860,19 +880,19 @@ static const yytype_int16 yytable[] = 38, 39, 40, 41, 42, 43, 0, 0, 0, 44, 0, 0, 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, 0, 0, 0, 18, - 86, 0, 19, 0, 0, 20, 54, 0, 21, 22, + 0, 0, 19, 0, 0, 20, 54, 0, 21, 22, 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, - 57, 0, 58, 59, 0, 0, 28, 29, 0, -19, - 60, 30, 31, 0, 32, 165, 34, 35, 36, 37, - 127, 38, 39, 40, 41, 42, 43, 0, 0, 0, + 57, 0, 58, 59, 0, 0, 28, 29, 0, 0, + 60, 30, 31, 0, 32, 33, 34, 35, 36, 37, + 0, 38, 39, 40, 41, 42, 43, 0, 0, 0, 44, 0, 0, 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, 0, 0, 0, - 18, 86, 0, 19, 0, 0, 20, 54, 0, 21, + 18, 0, 0, 19, 0, 0, 20, 54, 0, 21, 22, 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, 28, 29, 0, - 0, 60, 30, 31, 0, 32, 33, 34, 35, 36, + 183, 60, 30, 31, 0, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 0, 0, 0, 44, 0, 0, 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, 0, 0, @@ -880,39 +900,39 @@ static const yytype_int16 yytable[] = 21, 22, 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, 28, 29, - 0, 0, 60, 30, 31, 0, 32, 33, 34, 35, + 0, 297, 60, 30, 31, 0, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 0, 0, 0, 44, 0, 0, 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, 0, - 0, 0, 18, 0, 0, 19, 0, 0, 20, 54, - 0, 21, 22, 23, 0, 0, 24, 25, 0, 0, - 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, - 55, 56, 0, 57, 0, 58, 59, 0, 0, 28, - 29, 0, 183, 60, 30, 31, 0, 32, 33, 34, - 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, - 0, 0, 0, 44, 0, 0, 45, 46, 47, 48, - 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, + 0, 0, -346, 230, 0, 231, 0, 0, -346, 54, + 0, -346, -346, -346, 0, 0, -346, -346, 0, 0, + 0, -346, -346, 0, 0, 0, 0, 0, 0, 0, + 55, 56, 0, 57, 0, 58, 59, 0, 0, -346, + -346, 0, 315, 60, -346, -346, 0, -346, -346, -346, + -346, -346, -346, 0, -346, -346, -346, -346, -346, -346, + 0, 0, 0, -346, 0, 0, -346, -346, -346, -346, + -346, -346, 0, 0, 0, -346, -346, -346, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 20, - 54, 0, 21, 22, 23, 0, 0, 24, 25, 0, + -346, 0, 21, 22, 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, - 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, - 28, 29, 0, 296, 60, 30, 31, 0, 32, 33, + 0, -346, -346, 0, -346, 0, -346, -346, 0, 0, + 28, 29, 0, 0, -346, 30, 31, 0, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 0, 0, 0, 44, 0, 0, 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, - 0, 0, 0, 0, -344, 230, 0, 231, 0, 0, - -344, 54, 0, -344, -344, -344, 0, 0, -344, -344, - 0, 0, 0, -344, -344, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, + 20, 54, 0, 21, 22, 23, 0, 0, 24, 25, + 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 57, 0, 58, 59, 0, - 0, -344, -344, 0, 314, 60, -344, -344, 0, -344, - -344, -344, -344, -344, -344, 0, -344, -344, -344, -344, - -344, -344, 0, 0, 0, -344, 0, 0, -344, -344, - -344, -344, -344, -344, 0, 0, 0, -344, -344, -344, + 0, 28, 29, 0, 333, 60, 30, 31, 0, 32, + 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, + 42, 43, 0, 0, 0, 44, 0, 0, 45, 46, + 47, 48, 49, 50, 0, 0, 0, 51, 52, 53, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, - 0, 20, -344, 0, 21, 22, 23, 0, 0, 24, + 0, 20, 54, 0, 21, 22, 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, 0, - 0, 0, 0, -344, -344, 0, -344, 0, -344, -344, - 0, 0, 28, 29, 0, 0, -344, 30, 31, 0, + 0, 0, 0, 55, 56, 0, 57, 0, 58, 59, + 0, 0, 28, 29, 0, 375, 60, 30, 31, 0, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 0, 0, 0, 44, 0, 0, 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, 52, @@ -920,7 +940,7 @@ static const yytype_int16 yytable[] = 0, 0, 20, 54, 0, 21, 22, 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 57, 0, 58, - 59, 0, 0, 28, 29, 0, 332, 60, 30, 31, + 59, 0, 0, 28, 29, 0, 430, 60, 30, 31, 0, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 0, 0, 0, 44, 0, 0, 45, 46, 47, 48, 49, 50, 0, 0, 0, 51, @@ -928,7 +948,7 @@ static const yytype_int16 yytable[] = 19, 0, 0, 20, 54, 0, 21, 22, 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 57, 0, - 58, 59, 0, 0, 28, 29, 0, 374, 60, 30, + 58, 59, 0, 0, 28, 29, 0, 464, 60, 30, 31, 0, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 0, 0, 0, 44, 0, 0, 45, 46, 47, 48, 49, 50, 0, 0, 0, @@ -936,253 +956,192 @@ static const yytype_int16 yytable[] = 0, 19, 0, 0, 20, 54, 0, 21, 22, 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, 57, - 0, 58, 59, 0, 0, 28, 29, 0, 429, 60, + 0, 58, 59, 0, 0, 28, 29, 0, 0, 60, 30, 31, 0, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 0, 0, 0, 44, 0, 0, 45, 46, 47, 48, 49, 50, 0, 0, - 0, 51, 52, 53, 0, 0, 0, 0, 0, 18, - 0, 0, 19, 0, 0, 20, 54, 0, 21, 22, - 23, 0, 0, 24, 25, 0, 0, 0, 26, 27, + 0, 51, 52, 53, 0, 0, 0, 0, 0, -345, + 0, 0, -345, 0, 0, -345, 54, 0, -345, -345, + -345, 0, 0, -345, -345, 0, 0, 0, -345, -345, 0, 0, 0, 0, 0, 0, 0, 55, 56, 0, - 57, 0, 58, 59, 0, 0, 28, 29, 0, 463, - 60, 30, 31, 0, 32, 33, 34, 35, 36, 37, - 0, 38, 39, 40, 41, 42, 43, 0, 0, 0, - 44, 0, 0, 45, 46, 47, 48, 49, 50, 0, - 0, 0, 51, 52, 53, 0, 0, 0, 0, 0, - 18, 0, 0, 19, 0, 0, 20, 54, 0, 21, - 22, 23, 0, 0, 24, 25, 0, 0, 0, 26, - 27, 0, 0, 0, 0, 0, 0, 0, 55, 56, - 0, 57, 0, 58, 59, 0, 0, 28, 29, 0, - 0, 60, 30, 31, 0, 32, 33, 34, 35, 36, - 37, 0, 38, 39, 40, 41, 42, 43, 0, 0, - 0, 44, 0, 0, 45, 46, 47, 48, 49, 50, - 0, 0, 0, 51, 52, 53, 0, 0, 0, 0, - 0, -343, 0, 0, -343, 0, 0, -343, 54, 0, - -343, -343, -343, 0, 0, -343, -343, 0, 0, 0, - -343, -343, 0, 0, 0, 0, 0, 0, 0, 55, - 56, 0, 57, 0, 58, 59, 0, 0, -343, -343, - 0, 0, 290, -343, -343, 0, -343, -343, -343, -343, - -343, -343, 0, -343, -343, -343, -343, -343, -343, 0, - 0, 0, -343, 0, 0, -343, -343, -343, -343, -343, - -343, 0, 0, 0, -343, -343, -343, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -343, - 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 0, 0, 200, 201, 202, 0, 0, - -343, -343, 0, -343, 0, -343, -343, 0, 203, 0, - 0, 0, 0, -343, 204, 205, 206, 453, 207, 208, - 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 220, 221, 222, 0, 0, 0, 0, 223, 199, - 0, 224, 225, 226, 227, 228, 0, 200, 201, 202, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 203, 0, 0, 0, 0, 0, 204, 205, 206, 0, - 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, - 217, 218, 219, 220, 221, 222, 0, 0, 0, 0, - 223, 199, 0, 224, 225, 226, 227, 228, 0, 200, - 201, 202, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -345, 0, 0, 0, 0, 0, 204, 205, - 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, + 57, 0, 58, 59, 0, 0, -345, -345, 0, 0, + 291, -345, -345, 0, -345, -345, -345, -345, -345, -345, + 0, -345, -345, -345, -345, -345, -345, 0, 0, 0, + -345, 0, 0, -345, -345, -345, -345, -345, -345, 0, + 0, 0, -345, -345, -345, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -345, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 0, 0, 200, + 201, 202, 0, 0, 0, 0, 0, 0, -345, -345, + 0, -345, 203, -345, -345, 0, 0, 0, 204, 205, + 206, -345, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 0, 0, 0, 0, 223, 199, 0, 224, 225, 226, 227, 228, 0, 200, 201, 202, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -347, 0, 0, 0, 0, 0, 204, 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 0, 0, 0, 0, 223, -345, 0, 224, 225, 226, + 0, 0, 0, 0, 223, 199, 0, 224, 225, 226, 227, 228, 0, 200, 201, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 207, 208, 209, 210, + 0, 0, 204, 205, 206, 0, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 200, 201, 202, 0, 223, 0, 0, 224, - 225, 226, 227, 228, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 200, 201, 202, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - 222, 0, 0, 0, 0, 223, 0, 0, 224, 225, - 226, 227, 228, 212, 213, 214, 215, 216, 217, 218, - 219, 220, 221, 222, 200, 201, 202, 0, 223, 0, - 0, 224, 225, 226, 227, 228, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 200, 201, 202, 0, 0, - 0, 0, 0, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 0, 200, 201, 202, 223, 0, 0, - 224, 225, 226, 227, 228, 214, 215, 216, 217, 218, - 219, 220, 221, 222, 200, 201, 202, 0, 223, 0, - 0, 224, 225, 226, 227, 228, 216, 217, 218, 219, - 220, 221, 222, 200, 201, 202, 0, 223, 0, 0, - 224, 225, 226, 227, 228, 0, 0, 0, -345, 219, - 220, 221, 222, 200, 201, 202, 0, 223, 0, 0, - 224, 225, 226, 227, 228, 0, 0, 0, 219, 220, - 221, 222, 0, 0, 0, 0, 223, 0, 0, 224, - 225, 226, 227, 228, 0, 0, 0, 0, 0, 220, - 221, 222, 0, 0, 0, 0, 223, 0, 0, 224, - 225, 226, 227, 228 + 221, 222, 0, 0, 0, 0, 223, 199, 0, 224, + 225, 226, 227, 228, 0, 200, 201, 202, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, + 219, 220, 221, 222, 0, 0, 0, 0, 223, -347, + 0, 224, 225, 226, 227, 228, 0, 200, 201, 202, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 200, 201, 202, 0, + 223, 0, 0, 224, 225, 226, 227, 228, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, + 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 0, 0, 0, 0, 223, + 0, 0, 224, 225, 226, 227, 228, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 200, 201, + 202, 0, 223, 0, 0, 224, 225, 226, 227, 228, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, + 201, 202, 0, 0, 0, 0, 0, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 0, 200, 201, + 202, 223, 0, 0, 224, 225, 226, 227, 228, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 200, 201, + 202, 0, 223, 0, 0, 224, 225, 226, 227, 228, + 216, 217, 218, 219, 220, 221, 222, 200, 201, 202, + 0, 223, 0, 0, 224, 225, 226, 227, 228, 0, + 0, 0, 218, 219, 220, 221, 222, 200, 201, 202, + 0, 223, 0, 0, 224, 225, 226, 227, 228, 0, + 0, -347, 219, 220, 221, 222, 0, 0, 0, 0, + 223, 0, 0, 224, 225, 226, 227, 228, 0, 0, + 0, 0, 219, 220, 221, 222, 0, 0, 0, 0, + 223, 0, 0, 224, 225, 226, 227, 228 }; static const yytype_int16 yycheck[] = { - 10, 17, 19, 49, 27, 27, 403, 11, 54, 19, - 150, 306, 556, 151, 18, 12, 20, 105, 22, 10, - 24, 25, 11, 111, 13, 29, 110, 14, 19, 11, - 34, 35, 25, 13, 89, 52, 583, 0, 176, 49, - 16, 16, 52, 15, 48, 49, 50, 51, 16, 110, - 111, 23, 20, 22, 13, 30, 24, 11, 18, 13, - 20, 52, 22, 56, 24, 25, 11, 27, 61, 60, - 93, 93, 11, 13, 34, 35, 132, 132, 393, 11, - 11, 13, 13, 22, 11, 11, 13, 13, 403, 49, - 59, 51, 14, 408, 409, 56, 103, 101, 112, 113, - 61, 9, 112, 14, 132, 151, 86, 94, 95, 96, - 97, 96, 97, 657, 124, 18, 139, 139, 22, 22, - 117, 24, 25, 670, 170, 171, 11, 86, 13, 132, - 176, 34, 35, 93, 129, 130, 96, 11, 148, 149, - 150, 151, 16, 132, 161, 162, 49, 122, 51, 140, - 132, 161, 162, 157, 122, 86, 132, 132, 162, 86, - 86, 15, 302, 154, 132, 11, 176, 33, 34, 160, - 161, 162, 94, 95, 96, 97, 22, 261, 86, 139, - 264, 496, 56, 94, 95, 96, 97, 61, 112, 110, - 94, 95, 96, 97, 185, 186, 187, 188, 132, 190, - 191, 192, 162, 10, 11, 31, 13, 270, 271, 16, - 273, 274, 22, 20, 14, 11, 42, 24, 25, 11, - 16, 237, 11, 11, 13, 248, 248, 14, 238, 25, - 11, 241, 13, 56, 549, 550, 56, 132, 229, 230, - 231, 232, 233, 234, 235, 236, 132, 11, 388, 32, - 57, 132, 35, 36, 37, 38, 22, 132, 41, 162, - 56, 265, 132, 309, 132, 61, 22, 39, 228, 14, - 667, 566, 22, 14, 362, 590, 83, 14, 269, 270, - 271, 272, 273, 274, 94, 95, 96, 97, 248, 22, - 22, 308, 302, 14, 94, 95, 96, 97, 308, 290, - 86, 616, 22, 70, 442, 132, 86, 94, 95, 96, - 97, 94, 95, 96, 97, 22, 16, 308, 16, 89, - 20, 636, 20, 131, 24, 132, 24, 318, 94, 95, - 96, 97, 323, 588, 131, 22, 13, 245, 246, 247, - 56, 249, 250, 56, 252, 253, 254, 255, 131, 94, - 95, 96, 97, 94, 95, 96, 97, 94, 95, 96, - 97, 365, 94, 95, 96, 97, 56, 622, 623, 624, - 510, 86, 363, 364, 94, 95, 96, 97, 388, 122, - 371, 404, 404, 638, 639, 132, 15, 94, 95, 96, - 97, 44, 61, 403, 410, 59, 442, 94, 95, 96, - 97, 392, 393, 658, 32, 365, 90, 35, 36, 37, - 38, 666, 403, 41, 131, 406, 407, 408, 409, 94, - 95, 96, 97, 59, 564, 563, 436, 12, 25, 13, - 440, 25, 442, 25, 131, 395, 94, 95, 96, 97, - 132, 80, 81, 82, 404, 25, 18, 59, 465, 94, - 95, 96, 97, 99, 132, 465, 131, 56, 449, 22, - 11, 80, 81, 131, 99, 99, 94, 95, 96, 97, - 132, 12, 132, 131, 465, 114, 115, 116, 117, 118, - 94, 95, 96, 97, 123, 80, 131, 126, 127, 128, - 129, 130, 12, 503, 12, 505, 12, 405, 117, 118, - 510, 12, 16, 411, 123, 496, 414, 126, 127, 128, - 129, 130, 132, 530, 131, 131, 131, 563, 22, 132, - 530, 131, 131, 118, 131, 485, 434, 131, 123, 56, - 521, 126, 127, 128, 129, 130, 11, 544, 545, 530, - 94, 95, 96, 97, 551, 94, 95, 96, 97, 565, - 557, 558, 11, 563, 564, 90, 12, 131, 549, 550, - 22, 131, 15, 579, 132, 131, 131, 475, 132, 477, - 22, 131, 582, 583, 131, 88, 131, 131, 588, 22, - 488, 10, 131, 22, 591, 592, 593, 16, 132, 605, - 597, 20, 131, 609, 45, 24, 17, 607, 589, 590, - 131, 30, 131, 610, 94, 95, 96, 97, 131, 87, - 617, 618, 622, 623, 624, 94, 95, 96, 97, 126, - 127, 128, 129, 130, 584, 616, 80, 13, 638, 639, - 131, 117, 589, 541, 641, 406, 596, 667, 505, 283, - 650, 131, 646, 292, 428, 636, 662, 654, 658, 599, - 139, 516, 131, 404, -1, 434, 666, 667, 665, 21, - 670, 23, 248, -1, 26, -1, 28, 29, 675, 123, - -1, -1, 126, 127, 128, 129, 130, -1, -1, 41, - -1, -1, 44, -1, -1, -1, 48, -1, 0, 1, - -1, 599, -1, 55, 56, 57, 58, 59, 10, 11, - -1, 13, -1, -1, 16, -1, -1, 19, 20, 21, - 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, - 32, -1, -1, 35, 36, 37, 38, -1, 40, 41, - 42, 43, -1, -1, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, - 62, 63, 64, 65, 66, 67, 68, 69, -1, 71, - -1, 73, 74, 75, 76, 77, 78, 79, -1, -1, - -1, 83, 84, 85, -1, -1, -1, 139, -1, 91, - -1, -1, -1, -1, -1, -1, 98, 3, 4, 5, - 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, - 122, -1, 124, 125, -1, -1, -1, -1, -1, -1, - 132, -1, -1, -1, -1, -1, -1, 189, -1, -1, - -1, -1, -1, 195, -1, -1, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - 222, 223, 0, 1, -1, 227, -1, -1, -1, -1, - -1, -1, 10, 11, -1, 13, -1, -1, 16, -1, - -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, - 28, 29, 30, 31, 32, -1, -1, 35, 36, 37, - 38, -1, 40, 41, 42, 43, -1, -1, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, -1, 62, 63, 64, 65, 66, 67, - 68, 69, -1, 71, -1, 73, 74, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, -1, -1, - -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, - 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, 119, 120, -1, 122, -1, 124, 125, -1, 10, - 11, 12, 13, -1, 132, 16, -1, -1, 19, 20, - 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, -1, 35, 36, 37, 38, -1, 40, - 41, 42, 43, -1, -1, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - -1, 62, 63, 64, 65, 66, 67, 68, 69, -1, - 71, -1, 73, 74, 75, 76, 77, 78, 79, -1, - -1, -1, 83, 84, 85, -1, -1, -1, -1, -1, - 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, - -1, -1, -1, -1, 72, -1, -1, -1, -1, -1, - -1, 453, 80, 81, 82, -1, -1, -1, 119, 120, - -1, 122, -1, 124, 125, -1, -1, -1, -1, -1, - -1, 132, -1, 101, -1, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, -1, -1, -1, -1, 123, -1, -1, 126, 127, - 128, 129, 130, 1, -1, -1, -1, -1, -1, 511, - 512, -1, 10, 11, 12, 13, -1, -1, 16, -1, - -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, - 28, 29, 30, 31, 32, -1, -1, 35, 36, 37, - 38, 543, 40, 41, 42, 43, -1, -1, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, -1, 62, 63, 64, 65, 66, 67, - 68, 69, -1, 71, -1, 73, 74, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, -1, -1, - -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, - 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, 119, 120, -1, 122, -1, 124, 125, -1, 10, - 11, 12, 13, -1, 132, 16, -1, -1, 19, 20, - 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, -1, 35, 36, 37, 38, -1, 40, - 41, 42, 43, -1, -1, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - -1, 62, 63, 64, 65, 66, 67, 68, 69, -1, - 71, -1, 73, 74, 75, 76, 77, 78, 79, -1, - -1, -1, 83, 84, 85, -1, -1, -1, -1, -1, - 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1, 119, 120, - -1, 122, -1, 124, 125, -1, 10, 11, 12, 13, - -1, 132, 16, -1, -1, 19, 20, 21, 22, -1, - 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, - -1, 35, 36, 37, 38, -1, 40, 41, 42, 43, - -1, -1, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, - 64, 65, 66, 67, 68, 69, -1, 71, -1, 73, - 74, 75, 76, 77, 78, 79, -1, -1, -1, 83, - 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, - -1, -1, -1, -1, 98, -1, -1, -1, -1, -1, + 10, 17, 404, 151, 19, 27, 27, 11, 307, 19, + 110, 105, 11, 16, 18, 150, 20, 111, 22, 16, + 24, 25, 11, 583, 13, 29, 10, 30, 176, 12, + 34, 35, 11, 394, 13, 19, 103, 52, 9, 49, + 557, 14, 52, 404, 48, 49, 50, 51, 409, 410, + 18, 25, 89, 49, 22, 13, 24, 25, 54, 10, + 11, 11, 13, 13, 11, 16, 34, 35, 52, 20, + 15, 93, 93, 24, 25, 13, 60, 0, 23, 22, + 16, 49, 56, 51, 20, 16, 56, 61, 24, 20, + 11, 61, 13, 24, 18, 132, 20, 101, 22, 11, + 24, 25, 112, 27, 16, 13, 57, 86, 132, 11, + 34, 35, 672, 25, 124, 86, 59, 139, 139, 122, + 22, 94, 95, 96, 97, 49, 132, 51, 86, 132, + 14, 132, 83, 132, 117, 132, 497, 14, 148, 149, + 150, 151, 659, 132, 56, 15, 161, 162, 86, 61, + 22, 161, 162, 157, 14, 151, 140, 112, 162, 14, + 132, 261, 11, 11, 264, 86, 176, 11, 303, 93, + 154, 102, 96, 22, 170, 171, 160, 161, 162, 132, + 176, 132, 14, 11, 31, 13, 122, 112, 113, 550, + 551, 11, 110, 13, 162, 42, 132, 11, 22, 13, + 56, 185, 186, 187, 188, 56, 190, 191, 192, 11, + 94, 95, 96, 97, 11, 139, 13, 94, 95, 96, + 97, 237, 94, 95, 96, 97, 248, 248, 238, 590, + 11, 241, 13, 132, 94, 95, 96, 97, 162, 94, + 95, 96, 97, 110, 111, 229, 230, 231, 232, 233, + 234, 235, 236, 132, 389, 22, 14, 618, 86, 96, + 97, 265, 94, 95, 96, 97, 14, 669, 567, 363, + 94, 95, 96, 97, 245, 246, 247, 638, 249, 250, + 588, 252, 253, 254, 255, 269, 270, 271, 272, 273, + 274, 22, 132, 303, 309, 443, 132, 16, 132, 309, + 22, 20, 129, 130, 228, 24, 32, 291, 22, 35, + 36, 37, 38, 22, 310, 41, 624, 625, 626, 39, + 94, 95, 96, 97, 248, 309, 22, 94, 95, 96, + 97, 22, 640, 641, 14, 319, 94, 95, 96, 97, + 324, 270, 271, 80, 273, 274, 94, 95, 96, 97, + 32, 86, 660, 35, 36, 37, 38, 131, 70, 41, + 668, 86, 366, 94, 95, 96, 97, 132, 94, 95, + 96, 97, 94, 95, 96, 97, 511, 33, 34, 389, + 364, 365, 89, 405, 405, 131, 123, 131, 372, 126, + 127, 128, 129, 130, 404, 411, 22, 13, 94, 95, + 96, 97, 56, 11, 56, 131, 56, 86, 16, 393, + 394, 80, 94, 95, 96, 97, 564, 122, 61, 132, + 404, 44, 16, 407, 408, 409, 410, 437, 15, 59, + 565, 441, 131, 443, 59, 406, 94, 95, 96, 97, + 12, 412, 366, 90, 415, 13, 25, 443, 56, 118, + 25, 466, 25, 61, 123, 25, 466, 126, 127, 128, + 129, 130, 132, 18, 435, 99, 450, 94, 95, 96, + 97, 59, 396, 131, 94, 95, 96, 97, 545, 546, + 56, 405, 466, 132, 99, 552, 126, 127, 128, 129, + 130, 558, 559, 22, 504, 11, 506, 94, 95, 96, + 97, 511, 12, 132, 131, 476, 56, 478, 132, 10, + 131, 131, 12, 497, 12, 16, 531, 12, 489, 20, + 12, 531, 131, 24, 591, 592, 593, 131, 16, 30, + 597, 132, 131, 22, 131, 131, 131, 11, 522, 131, + 94, 95, 96, 97, 11, 612, 131, 531, 132, 90, + 566, 99, 619, 620, 564, 565, 94, 95, 96, 97, + 12, 22, 486, 579, 131, 15, 550, 551, 564, 131, + 131, 542, 582, 583, 80, 81, 643, 131, 588, 132, + 22, 94, 95, 96, 97, 94, 95, 96, 97, 656, + 132, 607, 131, 131, 131, 611, 131, 88, 131, 609, + 667, 22, 132, 22, 131, 589, 590, 45, 131, 131, + 677, 117, 118, 17, 624, 625, 626, 123, 131, 87, + 126, 127, 128, 129, 130, 13, 131, 131, 599, 589, + 640, 641, 117, 669, 618, 3, 4, 5, 6, 7, + 8, 9, 652, 407, 648, 506, 428, 293, 664, 429, + 660, 517, 435, 599, 638, 139, 405, 248, 668, 669, + 584, 21, 672, 23, -1, -1, 26, -1, 28, 29, + -1, -1, 596, -1, -1, -1, -1, -1, -1, -1, + -1, 41, -1, -1, 44, -1, -1, -1, 48, -1, + 0, 1, -1, -1, -1, 55, 56, 57, 58, 59, + 10, 11, -1, 13, -1, -1, 16, -1, -1, 19, + 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, + 30, 31, 32, -1, -1, 35, 36, 37, 38, -1, + 40, 41, 42, 43, -1, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, -1, 62, 63, 64, 65, 66, 67, 68, 69, + -1, 71, -1, 73, 74, 75, 76, 77, 78, 79, + -1, -1, -1, 83, 84, 85, -1, -1, -1, 139, + -1, 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, 119, 120, -1, 122, -1, - 124, 125, -1, 10, 11, 12, 13, -1, 132, 16, - -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, - 27, 28, 29, 30, 31, 32, -1, -1, 35, 36, - 37, 38, -1, 40, 41, 42, 43, -1, -1, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, -1, 62, 63, 64, 65, 66, - 67, 68, 69, -1, 71, -1, 73, 74, 75, 76, - 77, 78, 79, -1, -1, -1, 83, 84, 85, -1, - -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, - -1, 98, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 119, + 120, -1, 122, -1, 124, 125, -1, -1, -1, -1, + -1, -1, 132, -1, -1, -1, -1, -1, -1, 189, + -1, -1, -1, -1, -1, 195, -1, -1, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 0, 1, -1, 227, -1, -1, + -1, -1, -1, -1, 10, 11, -1, 13, -1, -1, + 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, + 26, 27, 28, 29, 30, 31, 32, -1, -1, 35, + 36, 37, 38, -1, 40, 41, 42, 43, -1, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, + 66, 67, 68, 69, -1, 71, -1, 73, 74, 75, + 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, + -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, + -1, -1, 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, 119, 120, -1, 122, -1, 124, 125, -1, - 10, 11, 12, 13, -1, 132, 16, -1, -1, 19, + -1, -1, 1, 119, 120, -1, 122, -1, 124, 125, + -1, 10, 11, 12, 13, -1, 132, 16, -1, -1, + 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, + 29, 30, 31, 32, -1, -1, 35, 36, 37, 38, + -1, 40, 41, 42, 43, -1, -1, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, -1, 62, 63, 64, 65, 66, 67, 68, + 69, -1, 71, -1, 73, 74, 75, 76, 77, 78, + 79, -1, -1, -1, 83, 84, 85, -1, -1, -1, + -1, -1, 91, -1, -1, -1, -1, -1, -1, 98, + -1, -1, -1, -1, -1, -1, -1, 72, -1, -1, + -1, -1, -1, -1, 454, 80, 81, 82, -1, -1, + 119, 120, -1, 122, -1, 124, 125, -1, 93, -1, + 80, 81, 82, 132, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, -1, -1, -1, -1, 123, -1, + -1, 126, 127, 128, 129, 130, 116, 117, 118, -1, + -1, -1, 512, 123, -1, -1, 126, 127, 128, 129, + 130, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, + 10, 11, 12, 13, 544, -1, 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, - 30, 31, 32, -1, -1, 35, 36, 37, 38, -1, + 30, 31, 32, -1, -1, 35, 36, 37, 38, 569, 40, 41, 42, 43, -1, -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, 66, 67, 68, 69, @@ -1191,7 +1150,7 @@ static const yytype_int16 yycheck[] = -1, 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 119, - 120, -1, 122, -1, 124, 125, -1, 10, 11, -1, + 120, -1, 122, -1, 124, 125, -1, 10, 11, 12, 13, -1, 132, 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, 35, 36, 37, 38, -1, 40, 41, 42, @@ -1199,11 +1158,11 @@ static const yytype_int16 yycheck[] = 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, 66, 67, 68, 69, -1, 71, -1, 73, 74, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, -1, -1, 88, -1, -1, 91, -1, + 83, 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 119, 120, -1, 122, - -1, 124, 125, -1, 10, 11, -1, 13, -1, 132, + -1, 124, 125, -1, 10, 11, 12, 13, -1, 132, 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, 35, 36, 37, 38, -1, 40, 41, 42, 43, -1, -1, @@ -1215,23 +1174,86 @@ static const yytype_int16 yycheck[] = -1, -1, 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 119, 120, -1, 122, -1, 124, 125, - -1, 10, 11, -1, 13, -1, 132, 16, -1, -1, + -1, 10, 11, 12, 13, -1, 132, 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, 35, 36, 37, 38, -1, 40, 41, 42, 43, -1, -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, 66, 67, 68, - -1, -1, 71, -1, 73, 74, 75, 76, 77, 78, - 79, -1, -1, -1, 83, 84, 85, -1, 1, -1, - -1, -1, 91, -1, -1, -1, -1, 10, -1, 98, - 13, -1, -1, 16, -1, -1, 19, 20, 21, 22, + 69, -1, 71, -1, 73, 74, 75, 76, 77, 78, + 79, -1, -1, -1, 83, 84, 85, -1, -1, -1, + -1, -1, 91, -1, -1, -1, -1, -1, -1, 98, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, + 119, 120, -1, 122, -1, 124, 125, -1, 10, 11, + 12, 13, -1, 132, 16, -1, -1, 19, 20, 21, + 22, -1, 24, 25, 26, 27, 28, 29, 30, 31, + 32, -1, -1, 35, 36, 37, 38, -1, 40, 41, + 42, 43, -1, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, + 62, 63, 64, 65, 66, 67, 68, 69, -1, 71, + -1, 73, 74, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, -1, -1, -1, -1, -1, 91, + -1, -1, -1, -1, -1, -1, 98, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1, 119, 120, -1, + 122, -1, 124, 125, -1, 10, 11, -1, 13, -1, + 132, 16, -1, -1, 19, 20, 21, 22, -1, 24, + 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, + 35, 36, 37, 38, -1, 40, 41, 42, 43, -1, + -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, + 65, 66, 67, 68, 69, -1, 71, -1, 73, 74, + 75, 76, 77, 78, 79, -1, -1, -1, 83, 84, + 85, -1, -1, 88, -1, -1, 91, -1, -1, -1, + -1, -1, -1, 98, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1, 119, 120, -1, 122, -1, 124, + 125, -1, 10, 11, -1, 13, -1, 132, 16, -1, + -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, + 28, 29, 30, 31, 32, -1, -1, 35, 36, 37, + 38, -1, 40, 41, 42, 43, -1, -1, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, -1, 62, 63, 64, 65, 66, 67, + 68, 69, -1, 71, -1, 73, 74, 75, 76, 77, + 78, 79, -1, -1, -1, 83, 84, 85, -1, -1, + -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, + 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 119, 120, -1, 122, -1, 124, 125, -1, 10, + 11, -1, 13, -1, 132, 16, -1, -1, 19, 20, + 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, + 31, 32, -1, -1, 35, 36, 37, 38, -1, 40, + 41, 42, 43, -1, -1, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + -1, 62, 63, 64, 65, 66, 67, 68, -1, -1, + 71, -1, 73, 74, 75, 76, 77, 78, 79, -1, + -1, -1, 83, 84, 85, -1, 1, -1, -1, -1, + 91, -1, -1, -1, -1, 10, -1, 98, 13, -1, + -1, 16, -1, -1, 19, 20, 21, 22, -1, 24, + 25, -1, -1, -1, 29, 30, -1, -1, 119, 120, + -1, 122, -1, 124, 125, -1, -1, -1, -1, -1, + -1, 132, 47, 48, -1, -1, -1, 52, 53, -1, + 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, + 65, 66, 67, -1, -1, -1, 71, -1, -1, 74, + 75, 76, 77, 78, 79, -1, -1, 1, 83, 84, + 85, -1, -1, -1, -1, -1, 10, -1, -1, 13, + -1, -1, 16, 98, -1, 19, 20, 21, -1, -1, + 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, + -1, -1, -1, -1, 119, 120, -1, 122, -1, 124, + 125, -1, -1, 47, 48, -1, -1, 132, 52, 53, + -1, 55, 56, 57, 58, 59, 60, -1, 62, 63, + 64, 65, 66, 67, -1, -1, -1, 71, -1, -1, + 74, 75, 76, 77, 78, 79, -1, -1, -1, 83, + 84, 85, -1, -1, -1, -1, -1, 10, 11, -1, + 13, -1, -1, 16, 98, -1, 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, - 119, 120, -1, 122, -1, 124, 125, -1, -1, -1, - -1, -1, -1, 132, 47, 48, -1, -1, -1, 52, - 53, -1, 55, 56, 57, 58, 59, 60, -1, 62, + -1, -1, -1, -1, -1, 119, 120, -1, 122, -1, + 124, 125, -1, -1, 47, 48, -1, 131, 132, 52, + 53, -1, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, 71, -1, - -1, 74, 75, 76, 77, 78, 79, -1, -1, 1, - 83, 84, 85, -1, -1, -1, -1, -1, 10, -1, + -1, 74, 75, 76, 77, 78, 79, -1, -1, -1, + 83, 84, 85, -1, -1, -1, -1, -1, 10, 11, -1, 13, -1, -1, 16, 98, -1, 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, 122, @@ -1240,19 +1262,19 @@ static const yytype_int16 yycheck[] = 62, 63, 64, 65, 66, 67, -1, -1, -1, 71, -1, -1, 74, 75, 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, -1, -1, -1, -1, -1, 10, - 11, -1, 13, -1, -1, 16, 98, -1, 19, 20, + -1, -1, 13, -1, -1, 16, 98, -1, 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, - 122, -1, 124, 125, -1, -1, 47, 48, -1, 131, + 122, -1, 124, 125, -1, -1, 47, 48, -1, -1, 132, 52, 53, -1, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, + -1, 62, 63, 64, 65, 66, 67, -1, -1, -1, 71, -1, -1, 74, 75, 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, -1, -1, -1, -1, -1, - 10, 11, -1, 13, -1, -1, 16, 98, -1, 19, + 10, -1, -1, 13, -1, -1, 16, 98, -1, 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, 122, -1, 124, 125, -1, -1, 47, 48, -1, - -1, 132, 52, 53, -1, 55, 56, 57, 58, 59, + 131, 132, 52, 53, -1, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, 66, 67, -1, -1, -1, 71, -1, -1, 74, 75, 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, -1, -1, -1, -1, @@ -1260,11 +1282,11 @@ static const yytype_int16 yycheck[] = 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, 122, -1, 124, 125, -1, -1, 47, 48, - -1, -1, 132, 52, 53, -1, 55, 56, 57, 58, + -1, 131, 132, 52, 53, -1, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, 66, 67, -1, -1, -1, 71, -1, -1, 74, 75, 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, -1, -1, -1, - -1, -1, 10, -1, -1, 13, -1, -1, 16, 98, + -1, -1, 10, 11, -1, 13, -1, -1, 16, 98, -1, 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, 122, -1, 124, 125, -1, -1, 47, @@ -1276,11 +1298,11 @@ static const yytype_int16 yycheck[] = 98, -1, 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, 122, -1, 124, 125, -1, -1, - 47, 48, -1, 131, 132, 52, 53, -1, 55, 56, + 47, 48, -1, -1, 132, 52, 53, -1, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, 66, 67, -1, -1, -1, 71, -1, -1, 74, 75, 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, -1, - -1, -1, -1, -1, 10, 11, -1, 13, -1, -1, + -1, -1, -1, -1, 10, -1, -1, 13, -1, -1, 16, 98, -1, 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, 122, -1, 124, 125, -1, @@ -1292,7 +1314,7 @@ static const yytype_int16 yycheck[] = -1, 16, 98, -1, 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, 122, -1, 124, 125, - -1, -1, 47, 48, -1, -1, 132, 52, 53, -1, + -1, -1, 47, 48, -1, 131, 132, 52, 53, -1, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, 66, 67, -1, -1, -1, 71, -1, -1, 74, 75, 76, 77, 78, 79, -1, -1, -1, 83, 84, @@ -1316,7 +1338,7 @@ static const yytype_int16 yycheck[] = -1, 13, -1, -1, 16, 98, -1, 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, 122, - -1, 124, 125, -1, -1, 47, 48, -1, 131, 132, + -1, 124, 125, -1, -1, 47, 48, -1, -1, 132, 52, 53, -1, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, 66, 67, -1, -1, -1, 71, -1, -1, 74, 75, 76, 77, 78, 79, -1, -1, @@ -1324,76 +1346,59 @@ static const yytype_int16 yycheck[] = -1, -1, 13, -1, -1, 16, 98, -1, 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, 30, -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, - 122, -1, 124, 125, -1, -1, 47, 48, -1, 131, + 122, -1, 124, 125, -1, -1, 47, 48, -1, -1, 132, 52, 53, -1, 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 65, 66, 67, -1, -1, -1, 71, -1, -1, 74, 75, 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, -1, -1, -1, -1, -1, - 10, -1, -1, 13, -1, -1, 16, 98, -1, 19, - 20, 21, -1, -1, 24, 25, -1, -1, -1, 29, - 30, -1, -1, -1, -1, -1, -1, -1, 119, 120, - -1, 122, -1, 124, 125, -1, -1, 47, 48, -1, - -1, 132, 52, 53, -1, 55, 56, 57, 58, 59, - 60, -1, 62, 63, 64, 65, 66, 67, -1, -1, - -1, 71, -1, -1, 74, 75, 76, 77, 78, 79, - -1, -1, -1, 83, 84, 85, -1, -1, -1, -1, - -1, 10, -1, -1, 13, -1, -1, 16, 98, -1, - 19, 20, 21, -1, -1, 24, 25, -1, -1, -1, - 29, 30, -1, -1, -1, -1, -1, -1, -1, 119, - 120, -1, 122, -1, 124, 125, -1, -1, 47, 48, - -1, -1, 132, 52, 53, -1, 55, 56, 57, 58, - 59, 60, -1, 62, 63, 64, 65, 66, 67, -1, - -1, -1, 71, -1, -1, 74, 75, 76, 77, 78, - 79, -1, -1, -1, 83, 84, 85, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 98, - -1, -1, -1, -1, -1, -1, -1, 72, -1, -1, - -1, -1, -1, -1, -1, 80, 81, 82, -1, -1, - 119, 120, -1, 122, -1, 124, 125, -1, 93, -1, - -1, -1, -1, 132, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, -1, -1, -1, 123, 72, - -1, 126, 127, 128, 129, 130, -1, 80, 81, 82, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 93, -1, -1, -1, -1, -1, 99, 100, 101, -1, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, - 123, 72, -1, 126, 127, 128, 129, 130, -1, 80, - 81, 82, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 93, -1, -1, -1, -1, -1, 99, 100, - 101, -1, 103, 104, 105, 106, 107, 108, 109, 110, + -1, -1, -1, -1, -1, -1, -1, 98, -1, -1, + -1, 72, -1, -1, -1, -1, -1, -1, -1, 80, + 81, 82, -1, -1, -1, -1, -1, -1, 119, 120, + -1, 122, 93, 124, 125, -1, -1, -1, 99, 100, + 101, 132, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, 123, 72, -1, 126, 127, 128, 129, 130, -1, 80, 81, 82, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, 99, 100, 101, -1, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, -1, -1, -1, 123, 72, -1, 126, 127, 128, 129, 130, -1, 80, 81, 82, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 103, 104, 105, 106, + -1, -1, 99, 100, 101, -1, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 80, 81, 82, -1, 123, -1, -1, 126, - 127, 128, 129, 130, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 80, 81, 82, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, -1, -1, -1, -1, 123, -1, -1, 126, 127, - 128, 129, 130, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 80, 81, 82, -1, 123, -1, - -1, 126, 127, 128, 129, 130, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 80, 81, 82, -1, -1, - -1, -1, -1, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, -1, 80, 81, 82, 123, -1, -1, - 126, 127, 128, 129, 130, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 80, 81, 82, -1, 123, -1, - -1, 126, 127, 128, 129, 130, 112, 113, 114, 115, - 116, 117, 118, 80, 81, 82, -1, 123, -1, -1, - 126, 127, 128, 129, 130, -1, -1, -1, 114, 115, - 116, 117, 118, 80, 81, 82, -1, 123, -1, -1, - 126, 127, 128, 129, 130, -1, -1, -1, 115, 116, - 117, 118, -1, -1, -1, -1, 123, -1, -1, 126, - 127, 128, 129, 130, -1, -1, -1, -1, -1, 116, - 117, 118, -1, -1, -1, -1, 123, -1, -1, 126, - 127, 128, 129, 130 + 117, 118, -1, -1, -1, -1, 123, 72, -1, 126, + 127, 128, 129, 130, -1, 80, 81, 82, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 101, -1, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, -1, -1, -1, -1, 123, 72, + -1, 126, 127, 128, 129, 130, -1, 80, 81, 82, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 80, 81, 82, -1, + 123, -1, -1, 126, 127, 128, 129, 130, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 80, + 81, 82, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, -1, -1, -1, -1, 123, + -1, -1, 126, 127, 128, 129, 130, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 80, 81, + 82, -1, 123, -1, -1, 126, 127, 128, 129, 130, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 80, + 81, 82, -1, -1, -1, -1, -1, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, -1, 80, 81, + 82, 123, -1, -1, 126, 127, 128, 129, 130, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 80, 81, + 82, -1, 123, -1, -1, 126, 127, 128, 129, 130, + 112, 113, 114, 115, 116, 117, 118, 80, 81, 82, + -1, 123, -1, -1, 126, 127, 128, 129, 130, -1, + -1, -1, 114, 115, 116, 117, 118, 80, 81, 82, + -1, 123, -1, -1, 126, 127, 128, 129, 130, -1, + -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, + 123, -1, -1, 126, 127, 128, 129, 130, -1, -1, + -1, -1, 115, 116, 117, 118, -1, -1, -1, -1, + 123, -1, -1, 126, 127, 128, 129, 130 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of @@ -1406,68 +1411,68 @@ static const yytype_uint8 yystos[] = 52, 53, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 71, 74, 75, 76, 77, 78, 79, 83, 84, 85, 98, 119, 120, 122, 124, 125, - 132, 144, 206, 207, 208, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 222, 229, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 11, 143, 1, 22, + 132, 144, 207, 208, 209, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 223, 230, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 11, 143, 1, 22, 26, 27, 28, 31, 32, 35, 36, 37, 38, 40, 41, 42, 43, 46, 49, 50, 51, 54, 68, 73, - 91, 142, 143, 156, 170, 206, 226, 69, 154, 155, - 156, 144, 152, 199, 200, 152, 56, 61, 143, 238, - 246, 229, 246, 220, 246, 220, 246, 246, 220, 122, - 132, 223, 238, 239, 240, 220, 143, 220, 182, 182, - 183, 246, 246, 221, 13, 132, 220, 182, 220, 132, - 132, 89, 132, 143, 220, 56, 144, 207, 228, 238, - 246, 143, 246, 229, 56, 61, 185, 207, 220, 220, - 220, 220, 220, 131, 206, 94, 95, 96, 97, 15, + 91, 142, 143, 156, 170, 207, 227, 69, 154, 155, + 156, 144, 152, 200, 201, 152, 56, 61, 143, 239, + 247, 230, 247, 221, 247, 221, 247, 247, 221, 122, + 132, 224, 239, 240, 241, 221, 143, 221, 182, 182, + 183, 247, 247, 222, 13, 132, 221, 182, 221, 132, + 132, 89, 132, 143, 221, 56, 144, 208, 229, 239, + 247, 143, 247, 230, 56, 61, 185, 208, 221, 221, + 221, 221, 221, 131, 207, 94, 95, 96, 97, 15, 11, 13, 132, 112, 113, 112, 110, 111, 110, 72, 80, 81, 82, 93, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 123, 126, 127, 128, 129, 130, 132, 11, 13, 11, 13, 11, 13, 11, 146, 184, 56, - 56, 224, 238, 239, 240, 132, 132, 30, 122, 132, - 236, 238, 132, 132, 132, 132, 143, 11, 147, 147, + 56, 225, 239, 240, 241, 132, 132, 30, 122, 132, + 237, 239, 132, 132, 132, 132, 143, 11, 147, 147, 181, 185, 22, 181, 185, 39, 144, 172, 22, 32, - 35, 36, 37, 38, 41, 22, 155, 156, 154, 16, - 20, 24, 144, 190, 191, 192, 194, 195, 196, 14, - 132, 220, 223, 238, 239, 240, 131, 206, 86, 188, - 70, 144, 186, 86, 144, 187, 187, 228, 132, 89, - 206, 131, 143, 131, 131, 206, 229, 229, 246, 207, - 207, 22, 228, 13, 131, 206, 206, 206, 206, 220, - 206, 206, 131, 206, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 10, 11, 13, 16, 20, 24, 25, 57, - 83, 132, 210, 238, 131, 206, 206, 206, 206, 206, - 206, 206, 206, 152, 56, 144, 180, 56, 56, 86, - 144, 225, 146, 146, 122, 146, 30, 234, 235, 237, - 238, 239, 240, 146, 146, 132, 146, 146, 146, 146, - 148, 44, 160, 181, 159, 181, 143, 169, 206, 169, - 169, 177, 206, 169, 169, 61, 189, 189, 15, 131, - 206, 188, 131, 59, 187, 59, 146, 204, 204, 229, - 207, 14, 209, 131, 90, 131, 206, 12, 206, 13, - 22, 14, 131, 102, 25, 185, 206, 206, 25, 25, - 25, 25, 25, 131, 206, 132, 131, 22, 14, 22, - 14, 22, 14, 22, 12, 18, 145, 11, 22, 187, - 59, 99, 178, 206, 178, 132, 231, 238, 132, 144, - 170, 175, 178, 179, 206, 234, 146, 177, 176, 206, - 178, 178, 152, 146, 56, 157, 22, 146, 201, 202, - 158, 99, 99, 194, 131, 202, 132, 144, 197, 198, - 131, 23, 144, 230, 228, 131, 14, 206, 12, 220, - 132, 22, 14, 131, 229, 12, 12, 12, 12, 146, - 146, 11, 22, 227, 131, 131, 232, 233, 238, 132, - 146, 131, 22, 163, 178, 131, 131, 131, 131, 12, - 132, 144, 149, 56, 186, 11, 187, 193, 220, 220, - 199, 11, 206, 90, 14, 229, 12, 131, 22, 165, - 146, 220, 147, 147, 15, 131, 178, 178, 147, 161, - 132, 131, 174, 174, 147, 147, 150, 164, 228, 187, - 152, 22, 203, 204, 131, 205, 131, 88, 152, 166, - 33, 34, 144, 171, 171, 238, 132, 131, 131, 172, - 176, 178, 147, 147, 147, 238, 147, 22, 201, 12, - 152, 144, 153, 12, 152, 147, 132, 178, 147, 147, - 22, 131, 172, 172, 172, 151, 45, 173, 12, 22, - 59, 167, 12, 178, 131, 172, 172, 162, 147, 131, - 143, 17, 87, 144, 168, 131, 147, 174, 172, 152, - 147, 172, 179, 88, 171, 131, 147 + 35, 36, 37, 38, 41, 22, 155, 156, 154, 20, + 24, 102, 144, 190, 191, 192, 193, 195, 196, 197, + 14, 132, 221, 224, 239, 240, 241, 131, 207, 86, + 188, 70, 144, 186, 86, 144, 187, 187, 229, 132, + 89, 207, 131, 143, 131, 131, 207, 230, 230, 247, + 208, 208, 22, 229, 13, 131, 207, 207, 207, 207, + 221, 207, 207, 131, 207, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 10, 11, 13, 16, 20, 24, 25, + 57, 83, 132, 211, 239, 131, 207, 207, 207, 207, + 207, 207, 207, 207, 152, 56, 144, 180, 56, 56, + 86, 144, 226, 146, 146, 122, 146, 30, 235, 236, + 238, 239, 240, 241, 146, 146, 132, 146, 146, 146, + 146, 148, 44, 160, 181, 159, 181, 143, 169, 207, + 169, 169, 177, 207, 169, 169, 61, 189, 16, 15, + 131, 207, 188, 131, 59, 187, 59, 146, 205, 205, + 230, 208, 14, 210, 131, 90, 131, 207, 12, 207, + 13, 22, 14, 131, 102, 25, 185, 207, 207, 25, + 25, 25, 25, 25, 131, 207, 132, 131, 22, 14, + 22, 14, 22, 14, 22, 12, 18, 145, 11, 22, + 187, 59, 99, 178, 207, 178, 132, 232, 239, 132, + 144, 170, 175, 178, 179, 207, 235, 146, 177, 176, + 207, 178, 178, 152, 146, 56, 157, 22, 146, 202, + 203, 158, 99, 189, 195, 131, 203, 132, 144, 198, + 199, 131, 23, 144, 231, 229, 131, 14, 207, 12, + 221, 132, 22, 14, 131, 230, 12, 12, 12, 12, + 146, 146, 11, 22, 228, 131, 131, 233, 234, 239, + 132, 146, 131, 22, 163, 178, 131, 131, 131, 131, + 12, 132, 144, 149, 56, 186, 11, 187, 221, 99, + 200, 11, 207, 90, 14, 230, 12, 131, 22, 165, + 146, 221, 147, 147, 15, 131, 178, 178, 147, 161, + 132, 131, 174, 174, 147, 147, 150, 164, 229, 187, + 152, 22, 204, 205, 194, 221, 131, 206, 131, 88, + 152, 166, 33, 34, 144, 171, 171, 239, 132, 131, + 131, 172, 176, 178, 147, 147, 147, 239, 147, 22, + 202, 12, 152, 144, 153, 12, 152, 147, 132, 178, + 147, 147, 22, 131, 172, 172, 172, 151, 45, 173, + 12, 22, 59, 167, 12, 178, 131, 172, 172, 162, + 147, 131, 143, 17, 87, 144, 168, 131, 147, 174, + 172, 152, 147, 172, 179, 88, 171, 131, 147 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ @@ -1486,28 +1491,28 @@ static const yytype_uint8 yyr1[] = 176, 177, 178, 179, 180, 180, 181, 182, 183, 184, 185, 185, 186, 186, 187, 187, 187, 188, 188, 189, 189, 190, 190, 191, 191, 191, 192, 192, 193, 193, - 194, 194, 195, 195, 195, 196, 196, 197, 197, 198, - 200, 199, 201, 201, 202, 203, 203, 205, 204, 206, - 206, 206, 206, 206, 207, 207, 207, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 209, - 208, 210, 210, 211, 211, 211, 211, 211, 211, 211, - 211, 211, 211, 211, 211, 211, 211, 212, 212, 212, - 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 194, 194, 195, 195, 196, 196, 196, 197, 197, 198, + 198, 199, 201, 200, 202, 202, 203, 204, 204, 206, + 205, 207, 207, 207, 207, 207, 208, 208, 208, 209, + 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, + 209, 210, 209, 211, 211, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 213, - 213, 213, 213, 213, 214, 214, 215, 215, 215, 215, - 216, 216, 217, 217, 217, 217, 217, 217, 217, 217, - 217, 218, 218, 218, 218, 218, 218, 218, 218, 219, - 219, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 220, 220, 220, 220, 220, 220, 221, - 220, 220, 220, 220, 222, 222, 222, 222, 223, 223, - 223, 223, 223, 224, 224, 224, 225, 225, 225, 226, - 227, 226, 228, 228, 229, 229, 230, 230, 231, 232, - 232, 232, 233, 234, 234, 234, 235, 235, 236, 236, - 237, 238, 239, 240, 241, 241, 242, 243, 243, 244, - 244, 245, 245, 246, 246, 246, 246 + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 214, 214, 214, 214, 214, 215, 215, 216, 216, + 216, 216, 217, 217, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 219, 219, 219, 219, 219, 219, 219, + 219, 220, 220, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 222, 221, 221, 221, 221, 223, 223, 223, 223, + 224, 224, 224, 224, 224, 225, 225, 225, 226, 226, + 226, 227, 228, 227, 229, 229, 230, 230, 231, 231, + 232, 233, 233, 233, 234, 235, 235, 235, 236, 236, + 237, 237, 238, 239, 240, 241, 242, 242, 243, 244, + 244, 245, 245, 246, 246, 247, 247, 247, 247 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -1525,29 +1530,29 @@ static const yytype_int8 yyr2[] = 2, 6, 1, 2, 0, 2, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 0, - 1, 1, 1, 2, 3, 4, 2, 4, 0, 1, - 1, 1, 2, 3, 1, 1, 1, 1, 1, 3, - 0, 2, 1, 1, 4, 1, 1, 0, 6, 3, - 3, 3, 3, 1, 2, 3, 1, 3, 3, 5, - 6, 3, 7, 4, 3, 5, 2, 4, 4, 0, - 5, 1, 1, 5, 4, 5, 4, 5, 6, 5, - 4, 5, 4, 3, 6, 4, 5, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, + 1, 1, 1, 2, 3, 4, 0, 1, 3, 5, + 0, 1, 1, 1, 2, 3, 1, 1, 1, 1, + 1, 3, 0, 2, 1, 1, 4, 1, 1, 0, + 6, 3, 3, 3, 3, 1, 2, 3, 1, 3, + 3, 5, 6, 3, 7, 4, 3, 5, 2, 4, + 4, 0, 5, 1, 1, 5, 4, 5, 4, 5, + 6, 5, 4, 5, 4, 3, 6, 4, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, - 3, 2, 2, 3, 3, 3, 1, 3, 2, 2, - 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 3, 4, 5, 4, 4, 3, 4, 3, 2, - 2, 1, 1, 1, 1, 5, 2, 1, 2, 3, - 1, 2, 1, 1, 1, 1, 1, 1, 4, 4, - 5, 5, 1, 1, 3, 4, 3, 4, 4, 4, - 4, 4, 1, 2, 2, 1, 2, 2, 1, 2, - 1, 2, 1, 3, 1, 3, 1, 3, 4, 0, - 6, 1, 1, 1, 3, 2, 4, 3, 3, 2, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, - 0, 6, 1, 1, 1, 1, 1, 2, 1, 2, - 3, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 4, 2, 1, 3, 1, - 3, 1, 3, 1, 1, 1, 1 + 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 1, 3, 2, 2, 3, 3, 3, 1, 3, + 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 4, 5, 4, 4, 3, 4, + 3, 2, 2, 1, 1, 1, 1, 5, 2, 1, + 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, + 4, 4, 5, 5, 1, 1, 3, 4, 3, 4, + 4, 4, 4, 4, 1, 2, 2, 1, 2, 2, + 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, + 4, 0, 6, 1, 1, 1, 3, 2, 4, 3, + 3, 2, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 3, 0, 6, 1, 1, 1, 1, 1, 2, + 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 4, 2, 1, + 3, 1, 3, 1, 3, 1, 1, 1, 1 }; typedef enum { @@ -1593,20 +1598,20 @@ static const toketypes yy_type_tab[] = toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_ival, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, - toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, + toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, - toketype_pval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, + toketype_opval, toketype_opval, toketype_pval, toketype_opval, toketype_opval, + toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval + toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_opval }; /* Generated from: - * c36bc8f06e0d028fe375ec5042a868f1249c42d01a2da5b7be104611f300ff06 perly.y + * 5ef40f799dcfd916754b2a23aad727800798632e125ef33b61dd91ba47002c9a perly.y * f13e9c08cea6302f0c1d1f467405bd0e0880d0ea92d0669901017a7f7e94ab28 regen_perly.pl * ex: set ro ft=c: */ diff --git a/perly.y b/perly.y index 5af726410676..253c32eabbdb 100644 --- a/perly.y +++ b/perly.y @@ -116,6 +116,7 @@ %type termrelop relopchain termeqop eqopchain %type sigslurpsigil sigvar %type sigscalarelem optsigscalardefault sigslurpelem +%type optcolon %type sigelem siglist optsiglist subsigguts subsignature optsubsignature %type subbody optsubbody sigsubbody optsigsubbody %type formstmtseq formline formarg @@ -850,16 +851,31 @@ sigslurpelem: sigslurpsigil sigvar } ; +optcolon: %empty + { $$ = 0; } + | PERLY_COLON + ; + /* subroutine signature scalar element: e.g. '$x', '$=', '$x = $default' */ sigscalarelem: - PERLY_DOLLAR sigvar + optcolon PERLY_DOLLAR sigvar { - subsignature_append_positional($sigvar, 0, NULL); + if($optcolon) { + PADNAME *pn = PadnamelistARRAY(PL_comppad_name)[$sigvar]; + subsignature_append_named(PadnamePV(pn)+1, $sigvar, 0, NULL); + } + else + subsignature_append_positional($sigvar, 0, NULL); $$ = NULL; } - | PERLY_DOLLAR sigvar ASSIGNOP optsigscalardefault + | optcolon PERLY_DOLLAR sigvar ASSIGNOP optsigscalardefault { - subsignature_append_positional($sigvar, $ASSIGNOP, $optsigscalardefault); + if($optcolon) { + PADNAME *pn = PadnamelistARRAY(PL_comppad_name)[$sigvar]; + subsignature_append_named(PadnamePV(pn)+1, $sigvar, $ASSIGNOP, $optsigscalardefault); + } + else + subsignature_append_positional($sigvar, $ASSIGNOP, $optsigscalardefault); $$ = NULL; } ; diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 1ecf2c43e54f..5730ddcfe262 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -4132,6 +4132,10 @@ L and L. compiled with C or C with an empty string an undefined value which is forbidden. See L and L. +=item Missing required named parameter '%s' to subroutine '%s' + +(F) TODO signature-named-params + =item Missing right brace on \%c{} in regex; marked by S<<-- HERE> in m/%s/ (F) Missing right brace in C<\x{...}>, C<\p{...}>, C<\P{...}>, or C<\N{...}>. @@ -4331,6 +4335,10 @@ but also uses any of the others it will not trigger this warning. Symbols beginning with an underscore and symbols using special identifiers (q.v. L) are exempt from this warning. +=item Named parameters must actually have a name + +(F) TODO signature-named-params + =item Need exactly 3 octal digits in regex; marked by S<<-- HERE> in m/%s/ (F) Within S>, all constants interpreted as octal need to be @@ -4838,6 +4846,10 @@ Cing a file, or when seeking past the end of a scalar opened for I/O (in anticipation of future reads and to imitate the behavior with real files). +=item Only a scalar parameter may be named + +(F) TODO signature-named-params + =item Only scalar fields can take a :param attribute (F) You tried to apply the C<:param> attribute to an array or hash field. @@ -5426,6 +5438,10 @@ fine from VMS' perspective, it's probably not what you intended. (F) The unpack format P must have an explicit size, not "*". +=item Positional parameter follows named parameter + +(F) TODO signature-named-params + =item POSIX class [:%s:] unknown in regex; marked by S<<-- HERE> in m/%s/ (F) The class in the character class [: :] syntax is unknown. The S<<-- HERE> @@ -7460,6 +7476,10 @@ whereabouts in the regular expression the escape was discovered. (F) You attempted to add a named attribute to a C definition, but perl does not recognise the name of the requested attribute. +=item Unrecognized named parameter '%s' to subroutine '%s' + +(F) TODO signature-named-params + =item Unrecognised parameters for "%s" constructor: %s (F) You called new on a class but supplied a parameter name that diff --git a/pp.c b/pp.c index 6ee5ec9a2710..bfea9f09bc5e 100644 --- a/pp.c +++ b/pp.c @@ -7930,64 +7930,168 @@ PP(pp_multiparam) SvSetMagicSV(*padentry, val); } - if(!slurpy || !aux->slurpy_padix) + if((!slurpy || !aux->slurpy_padix) && !aux->n_named) return PL_op->op_next; - /* Now we know we have a slurpy */ - SV **padentry = &PAD_SVl(aux->slurpy_padix); - save_clearsv(padentry); + /* Now we know we have a slurpy, named params, or both */ + SV **slurpypad = NULL; - if(slurpy == '@') { - AV *av = (AV *)*padentry; - assert(SvTYPE(av) == SVt_PVAV); + if(aux->slurpy_padix) { + /* Prepare the slurpy xV */ + slurpypad = &PAD_SVl(aux->slurpy_padix); + save_clearsv(slurpypad); - if(av_count(av)) { - /* see "target should be empty" comments in pp_argelem above */ - av_refresh_elements_range(defav, parami, parami + argc); - av_clear(av); - } + if(slurpy == '@') { + AV *av = (AV *)*slurpypad; + assert(SvTYPE(av) == SVt_PVAV); - av_extend(av, argc); + if(av_count(av)) { + /* see "target should be empty" comments in pp_argelem above */ + av_refresh_elements_range(defav, parami, parami + argc); + av_clear(av); + } - size_t avidx = 0; - for(; argc; parami++, argc--) { - SV **valp = av_fetch(defav, parami, FALSE); - SV *val = valp ? *valp : &PL_sv_undef; + av_extend(av, argc); + } + else if(slurpy == '%') { + HV *hv = (HV *)*slurpypad; + assert(SvTYPE(hv) == SVt_PVHV); - assert(TAINTING_get || !TAINT_get); - if (UNLIKELY(TAINT_get) && !SvTAINTED(val)) - TAINT_NOT; + if(SvRMAGICAL(hv) || HvUSEDKEYS(hv) > 0) { + /* see "target should be empty" comments in pp_argelem above */ + av_refresh_elements_range(defav, parami, parami + argc); + hv_clear(hv); + } - av_store(av, avidx++, newSVsv(val)); + assert((argc % 2) == 0); } } - else if(slurpy == '%') { - HV *hv = (HV *)*padentry; - assert(SvTYPE(hv) == SVt_PVHV); - if(SvRMAGICAL(hv) || HvUSEDKEYS(hv) > 0) { - /* see "target should be empty" comments in pp_argelem above */ - av_refresh_elements_range(defav, parami, parami + argc); - hv_clear(hv); + size_t n_named = aux->n_named; + if(n_named) { + /* Initially mark the pad slot for every named parameter variable as + * PADSTALE, so afterwards we can detect missing ones + */ + for(size_t namedix = 0; namedix < n_named; namedix++) { + struct op_multiparam_named_aux *named = aux->named + namedix; + SvPADSTALE_on(PAD_SVl(named->padix)); } - assert((argc % 2) == 0); - while(argc) { SV **svp; svp = av_fetch(defav, parami, FALSE); parami++; - SV *key = svp ? *svp : &PL_sv_undef; + SV *name = svp ? *svp : &PL_sv_undef; svp = av_fetch(defav, parami, FALSE); parami++; SV *val = svp ? *svp : &PL_sv_undef; argc -= 2; - if (UNLIKELY(SvGMAGICAL(key))) - key = sv_mortalcopy(key); + STRLEN namelen; + const char *namepv = SvPV(name, namelen); + + U32 namehash; + PERL_HASH(namehash, namepv, namelen); + + PADOFFSET padix = 0; + for(size_t namedix = 0; namedix < n_named; namedix++) { + struct op_multiparam_named_aux *named = aux->named + namedix; + + if(named->namehash != namehash || named->namelen != namelen) + continue; + if(!strnEQ(named->namepv, namepv, namelen)) + continue; + + padix = named->padix; + break; + } + + if(padix) { + SV **padentry = &PAD_SVl(padix); + save_clearsv(padentry); + + assert(TAINTING_get || !TAINT_get); + if (UNLIKELY(TAINT_get) && !SvTAINTED(val)) + TAINT_NOT; + + SvPADSTALE_off(*padentry); + SvSetMagicSV(*padentry, val); + } + else if(slurpypad && slurpy == '@') { + AV *av = (AV *)*slurpypad; - hv_store_ent(hv, key, newSVsv(val), 0); - if (UNLIKELY(TAINT_get) && !SvTAINTED(val)) - TAINT_NOT; + assert(TAINTING_get || !TAINT_get); + if (UNLIKELY(TAINT_get) && !SvTAINTED(name)) + TAINT_NOT; + if (UNLIKELY(TAINT_get) && !SvTAINTED(val)) + TAINT_NOT; + + av_push(av, newSVsv(name)); + av_push(av, newSVsv(val)); + } + else if(slurpypad && slurpy == '%') { + HV *hv = (HV *)*slurpypad; + + if (UNLIKELY(SvGMAGICAL(name))) + name = sv_mortalcopy(name); + + if (UNLIKELY(TAINT_get) && !SvTAINTED(val)) + TAINT_NOT; + hv_store_ent(hv, name, newSVsv(val), 0); + } + else { + // TODO: Consider collecting up all the names of unrecognised + // in one string + croak("Unrecognized named parameter '%s' to subroutine '%" SVf "'", + namepv, S_find_runcv_name()); + } + } + + for(size_t namedix = 0; namedix < n_named; namedix++) { + struct op_multiparam_named_aux *named = aux->named + namedix; + if(!named->is_required || !SvPADSTALE(PAD_SVl(named->padix))) + continue; + + // TODO: Consider collecting up all the names of missing + // parameters in one string + croak("Missing required named parameter '%s' to subroutine '%" SVf "'", + named->namepv, S_find_runcv_name()); + } + } + + if(argc && slurpypad) { + if(slurpy == '@') { + AV *av = (AV *)*slurpypad; + size_t avidx = 0; + while(argc) { + SV **valp = av_fetch(defav, parami, FALSE); parami++; + SV *val = valp ? *valp : &PL_sv_undef; + argc -= 1; + + assert(TAINTING_get || !TAINT_get); + if (UNLIKELY(TAINT_get) && !SvTAINTED(val)) + TAINT_NOT; + + av_store(av, avidx++, newSVsv(val)); + } + } + else if(slurpy == '%') { + HV *hv = (HV *)*slurpypad; + while(argc) { + SV **svp; + + svp = av_fetch(defav, parami, FALSE); parami++; + SV *key = svp ? *svp : &PL_sv_undef; + svp = av_fetch(defav, parami, FALSE); parami++; + SV *val = svp ? *svp : &PL_sv_undef; + argc -= 2; + + if (UNLIKELY(SvGMAGICAL(key))) + key = sv_mortalcopy(key); + + hv_store_ent(hv, key, newSVsv(val), 0); + if (UNLIKELY(TAINT_get) && !SvTAINTED(val)) + TAINT_NOT; + } } } diff --git a/proto.h b/proto.h index 64d50774ad2e..b1b49887aa80 100644 --- a/proto.h +++ b/proto.h @@ -4370,6 +4370,12 @@ Perl_subsignature_append_fence_op(pTHX_ OP *o) #define PERL_ARGS_ASSERT_SUBSIGNATURE_APPEND_FENCE_OP \ assert(o) +PERL_CALLCONV void +Perl_subsignature_append_named(pTHX_ const char *paramname, PADOFFSET padix, OPCODE defmode, OP *defexpr) + __attribute__visibility__("hidden"); +#define PERL_ARGS_ASSERT_SUBSIGNATURE_APPEND_NAMED \ + assert(paramname) + PERL_CALLCONV void Perl_subsignature_append_positional(pTHX_ PADOFFSET padix, OPCODE defmode, OP *defexpr) __attribute__visibility__("hidden"); diff --git a/t/op/signatures.t b/t/op/signatures.t index 6edb4066d4d2..68ff998cd04f 100644 --- a/t/op/signatures.t +++ b/t/op/signatures.t @@ -1031,6 +1031,35 @@ is eval("t084(456, 789, 987, 654)"), undef; like $@, _create_mismatch_regexp('main::t084', 4, 2); is $a, 123; +sub tnamed01 (:$alpha, :$beta) { "alpha=$alpha beta=$beta"; } +is prototype(\&tnamed01), undef; +is eval("tnamed01(alpha => 123, beta => 456)"), "alpha=123 beta=456"; +is eval("tnamed01(beta => 654, alpha => 321)"), "alpha=321 beta=654"; +is eval("tnamed01(alpha => 1)"), undef; +like $@, qr/^Missing required named parameter 'beta' to subroutine 'main::tnamed01' at /; +is eval("tnamed01(alpha => 1, beta => 2, gamma => 3)"), undef; +like $@, qr/^Unrecognized named parameter 'gamma' to subroutine 'main::tnamed01' at /; +is eval("tnamed01(alpha => 1, beta => 2, beta => 3, beta => 4)"), "alpha=1 beta=4"; + +sub tnamed02 (:$alpha = "A", :$beta = "B") { "alpha=$alpha beta=$beta"; } +is prototype(\&tnamed02), undef; +is eval("tnamed02(alpha => 98, beta => 76)"), "alpha=98 beta=76"; +is eval("tnamed02(alpha => 98)"), "alpha=98 beta=B"; +is eval("tnamed02(beta => 76)"), "alpha=A beta=76"; +is eval("tnamed02()"), "alpha=A beta=B"; + +sub tnamed03 ($a, $b, :$x, :$y) { "a=$a b=$b x=$x y=$y"; } +is prototype(\&tnamed03), undef; +is eval("tnamed03(12, 34, x => 'X', y => 'Y')"), "a=12 b=34 x=X y=Y"; + +sub tnamed04 (:$x, :$y, @rest) { "x=$x y=$y <@rest>"; } +is prototype(\&tnamed04), undef; +is eval("tnamed04(w => 'W', x => 'X', y => 'Y', z => 'Z')"), "x=X y=Y "; + +sub tnamed05 (:$x, :$y, %rest) { "x=$x y=$y " . join(",", map { "$_=$rest{$_}" } sort keys %rest); } +is prototype(\&tnamed05), undef; +is eval("tnamed05(w => 'W', x => 'X', y => 'Y', z => 'Z')"), "x=X y=Y w=W,z=Z"; + sub t085 ( $ diff --git a/toke.c b/toke.c index 650284657c7b..5985346fae18 100644 --- a/toke.c +++ b/toke.c @@ -5233,6 +5233,14 @@ yyl_sigvar(pTHX_ char *s) U8 sigil; s = skipspace(s); + + bool is_named = false; + if(*s == ':') { + is_named = true; + s++; + s = skipspace(s); + } + sigil = *s++; PL_bufptr = s; /* for error reporting */ switch (sigil) { @@ -5249,6 +5257,10 @@ yyl_sigvar(pTHX_ char *s) yyerror("'#' not allowed immediately following a sigil in a subroutine signature"); break; } + if (is_named && sigil != '$') { + yyerror("Only a scalar parameter may be named"); + break; + } s = skipspace(s); if (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) { char *dest = PL_tokenbuf + 1; @@ -5260,6 +5272,10 @@ yyl_sigvar(pTHX_ char *s) assert(PL_tokenbuf[1]); /* we have a variable name */ } else { + if (is_named) { + yyerror("Named parameters must actually have a name"); + break; + } *PL_tokenbuf = 0; PL_in_my = 0; } @@ -5329,6 +5345,12 @@ yyl_sigvar(pTHX_ char *s) break; } + if (is_named) { + assert(sigil == '$'); + force_next(PERLY_DOLLAR); + TOKEN (PERLY_COLON); + } + switch (sigil) { case ',': TOKEN (PERLY_COMMA); case '$': TOKEN (PERLY_DOLLAR); From daf96f369eda2e0db35f66f194b184218344d430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Harald=20J=C3=B6rg?= Date: Fri, 29 Aug 2025 17:27:48 +0200 Subject: [PATCH 2/2] Named parameters: Two test cases for bad signatures tnamed01 and tnamed07 both have a positional parameter before a named one. With an initializer, the error message is a bit off... --- t/op/signatures.t | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/t/op/signatures.t b/t/op/signatures.t index 68ff998cd04f..c0ceaefe27d9 100644 --- a/t/op/signatures.t +++ b/t/op/signatures.t @@ -1060,6 +1060,12 @@ sub tnamed05 (:$x, :$y, %rest) { "x=$x y=$y " . join(",", map { "$_=$rest{$_}" } is prototype(\&tnamed05), undef; is eval("tnamed05(w => 'W', x => 'X', y => 'Y', z => 'Z')"), "x=X y=Y w=W,z=Z"; +eval q(sub tnamed06 (:$x,$y) { ... } ); +like $@,qr/Positional parameter follows named parameter at .*?, near "\$y/; + +eval q(sub tnamed07 (:$x,$y = $ARGV[0]) { ... } ); +like $@,qr/Positional parameter follows named parameter at .*?, near "\$y/; + sub t085 ( $