diff options
-rw-r--r-- | embed.fnc | 3 | ||||
-rw-r--r-- | embed.h | 1 | ||||
-rw-r--r-- | op.c | 36 | ||||
-rw-r--r-- | parser.h | 5 | ||||
-rw-r--r-- | perl.h | 1 | ||||
-rw-r--r-- | perly.act | 1027 | ||||
-rw-r--r-- | perly.c | 2 | ||||
-rw-r--r-- | perly.h | 2 | ||||
-rw-r--r-- | perly.tab | 1379 | ||||
-rw-r--r-- | perly.y | 274 | ||||
-rw-r--r-- | pod/perldiag.pod | 54 | ||||
-rw-r--r-- | proto.h | 4 | ||||
-rw-r--r-- | sv.c | 5 | ||||
-rw-r--r-- | t/op/signatures.t | 111 | ||||
-rw-r--r-- | toke.c | 276 |
15 files changed, 1835 insertions, 1345 deletions
@@ -475,7 +475,6 @@ Apd |void |fbm_compile |NN SV* sv|U32 flags ApdR |char* |fbm_instr |NN unsigned char* big|NN unsigned char* bigend \ |NN SV* littlestr|U32 flags p |CV * |find_lexical_cv|PADOFFSET off -pR |OP * |parse_subsignature : Defined in util.c, used only in perl.c p |char* |find_script |NN const char *scriptname|bool dosearch \ |NULLOK const char *const *const search_ext|I32 flags @@ -2990,4 +2989,6 @@ XEop |void |dtrace_probe_op |NN const OP *op XEop |void |dtrace_probe_phase|enum perl_phase phase #endif +xpo |OP* |check_arity |int arity |bool max + : ex: set ts=8 sts=4 sw=4 noet: @@ -1338,7 +1338,6 @@ #define pad_push(a,b) Perl_pad_push(aTHX_ a,b) #define pad_swipe(a,b) Perl_pad_swipe(aTHX_ a,b) #define padlist_store(a,b,c) Perl_padlist_store(aTHX_ a,b,c) -#define parse_subsignature() Perl_parse_subsignature(aTHX) #define parse_unicode_opts(a) Perl_parse_unicode_opts(aTHX_ a) #define parser_free(a) Perl_parser_free(aTHX_ a) #define peep(a) Perl_peep(aTHX_ a) @@ -15018,6 +15018,42 @@ const_av_xsub(pTHX_ CV* cv) XSRETURN(AvFILLp(av)+1); } +/* return an optree that checks for too few or too many args - + * used for subroutine signatures + */ +OP * +Perl_check_arity(pTHX_ int arity, bool max) +{ + return + newSTATEOP(0, NULL, + newLOGOP(OP_OR, 0, + newBINOP((max ? OP_LE : OP_GE), 0, + scalar(newUNOP(OP_RV2AV, 0, + newGVOP(OP_GV, 0, PL_defgv)) + ), + newSVOP(OP_CONST, 0, newSViv(arity)) + ), + op_convert_list(OP_DIE, 0, + op_convert_list(OP_SPRINTF, 0, + op_append_list(OP_LIST, + newSVOP(OP_CONST, 0, + max + ? newSVpvs("Too many arguments for subroutine at %s line %d.\n") + : newSVpvs("Too few arguments for subroutine at %s line %d.\n") + ), + newSLICEOP(0, + op_append_list(OP_LIST, + newSVOP(OP_CONST, 0, newSViv(1)), + newSVOP(OP_CONST, 0, newSViv(2))), + newOP(OP_CALLER, 0) + ) + ) + ) + ) + ) + ); +} + /* * ex: set ts=8 sts=4 sw=4 et: */ @@ -116,6 +116,11 @@ typedef struct yy_parser { char tokenbuf[256]; line_t herelines; /* number of lines in here-doc */ line_t preambling; /* line # when processing $ENV{PERL5DB} */ + + /* these are valid whiling parsing a subroutine signature */ + int sig_elems; /* number of signature elements seen so far */ + int sig_optelems; /* number of optional signature elems seen */ + char sig_slurpy; /* the sigil of the slurpy var (or null) */ } yy_parser; /* flags for lexer API */ @@ -5312,6 +5312,7 @@ typedef enum { XTERMBLOCK, XBLOCKTERM, XPOSTDEREF, + XSIGVAR, /* expecting a var in a sub signature */ XTERMORDORDOR /* evil hack */ /* update exp_name[] in toke.c if adding to this enum */ } expectation; @@ -5,7 +5,7 @@ */ case 2: -#line 115 "perly.y" /* yacc.c:1646 */ +#line 118 "perly.y" /* yacc.c:1646 */ { parser->expect = XSTATE; } @@ -13,7 +13,7 @@ case 2: break; case 3: -#line 119 "perly.y" /* yacc.c:1646 */ +#line 122 "perly.y" /* yacc.c:1646 */ { newPROG(block_end((ps[-1].val.ival),(ps[0].val.opval))); PL_compiling.cop_seq = 0; @@ -23,7 +23,7 @@ case 2: break; case 4: -#line 125 "perly.y" /* yacc.c:1646 */ +#line 128 "perly.y" /* yacc.c:1646 */ { parser->expect = XTERM; } @@ -31,7 +31,7 @@ case 2: break; case 5: -#line 129 "perly.y" /* yacc.c:1646 */ +#line 132 "perly.y" /* yacc.c:1646 */ { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -40,7 +40,7 @@ case 2: break; case 6: -#line 134 "perly.y" /* yacc.c:1646 */ +#line 137 "perly.y" /* yacc.c:1646 */ { parser->expect = XBLOCK; } @@ -48,7 +48,7 @@ case 2: break; case 7: -#line 138 "perly.y" /* yacc.c:1646 */ +#line 141 "perly.y" /* yacc.c:1646 */ { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); @@ -60,7 +60,7 @@ case 2: break; case 8: -#line 146 "perly.y" /* yacc.c:1646 */ +#line 149 "perly.y" /* yacc.c:1646 */ { parser->expect = XSTATE; } @@ -68,7 +68,7 @@ case 2: break; case 9: -#line 150 "perly.y" /* yacc.c:1646 */ +#line 153 "perly.y" /* yacc.c:1646 */ { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); @@ -80,7 +80,7 @@ case 2: break; case 10: -#line 158 "perly.y" /* yacc.c:1646 */ +#line 161 "perly.y" /* yacc.c:1646 */ { parser->expect = XSTATE; } @@ -88,7 +88,7 @@ case 2: break; case 11: -#line 162 "perly.y" /* yacc.c:1646 */ +#line 165 "perly.y" /* yacc.c:1646 */ { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); @@ -100,7 +100,7 @@ case 2: break; case 12: -#line 170 "perly.y" /* yacc.c:1646 */ +#line 173 "perly.y" /* yacc.c:1646 */ { parser->expect = XSTATE; } @@ -108,7 +108,7 @@ case 2: break; case 13: -#line 174 "perly.y" /* yacc.c:1646 */ +#line 177 "perly.y" /* yacc.c:1646 */ { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -117,7 +117,7 @@ case 2: break; case 14: -#line 182 "perly.y" /* yacc.c:1646 */ +#line 185 "perly.y" /* yacc.c:1646 */ { 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)); @@ -126,7 +126,7 @@ case 2: break; case 15: -#line 190 "perly.y" /* yacc.c:1646 */ +#line 193 "perly.y" /* yacc.c:1646 */ { 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)); @@ -135,14 +135,14 @@ case 2: break; case 16: -#line 197 "perly.y" /* yacc.c:1646 */ +#line 200 "perly.y" /* yacc.c:1646 */ { (yyval.ival) = block_start(TRUE); parser->parsed_sub = 0; } break; case 17: -#line 202 "perly.y" /* yacc.c:1646 */ +#line 205 "perly.y" /* yacc.c:1646 */ { 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)); @@ -151,20 +151,20 @@ case 2: break; case 18: -#line 209 "perly.y" /* yacc.c:1646 */ +#line 212 "perly.y" /* yacc.c:1646 */ { (yyval.ival) = block_start(FALSE); parser->parsed_sub = 0; } break; case 19: -#line 215 "perly.y" /* yacc.c:1646 */ +#line 218 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; case 20: -#line 217 "perly.y" /* yacc.c:1646 */ +#line 220 "perly.y" /* yacc.c:1646 */ { (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)) @@ -174,13 +174,13 @@ case 2: break; case 21: -#line 226 "perly.y" /* yacc.c:1646 */ +#line 229 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; case 22: -#line 228 "perly.y" /* yacc.c:1646 */ +#line 231 "perly.y" /* yacc.c:1646 */ { (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)) @@ -190,7 +190,7 @@ case 2: break; case 23: -#line 237 "perly.y" /* yacc.c:1646 */ +#line 240 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL; } @@ -198,13 +198,13 @@ case 2: break; case 24: -#line 241 "perly.y" /* yacc.c:1646 */ +#line 244 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 25: -#line 245 "perly.y" /* yacc.c:1646 */ +#line 248 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newSTATEOP(SVf_UTF8 * (ps[-1].val.pval)[strlen((ps[-1].val.pval))+1], (ps[-1].val.pval), (ps[0].val.opval)); } @@ -212,7 +212,7 @@ case 2: break; case 26: -#line 249 "perly.y" /* yacc.c:1646 */ +#line 252 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newSTATEOP(SVf_UTF8 * (ps[-1].val.pval)[strlen((ps[-1].val.pval))+1], (ps[-1].val.pval), (ps[0].val.opval)); } @@ -220,13 +220,13 @@ case 2: break; case 27: -#line 256 "perly.y" /* yacc.c:1646 */ +#line 259 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 28: -#line 258 "perly.y" /* yacc.c:1646 */ +#line 261 "perly.y" /* yacc.c:1646 */ { CV *fmtcv = PL_compcv; newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval)); @@ -240,7 +240,7 @@ case 2: break; case 29: -#line 268 "perly.y" /* yacc.c:1646 */ +#line 271 "perly.y" /* yacc.c:1646 */ { if ((ps[-1].val.opval)->op_type == OP_CONST) { const char *const name = @@ -266,7 +266,7 @@ case 2: break; case 30: -#line 290 "perly.y" /* yacc.c:1646 */ +#line 293 "perly.y" /* yacc.c:1646 */ { SvREFCNT_inc_simple_void(PL_compcv); (ps[-5].val.opval)->op_type == OP_CONST @@ -281,7 +281,7 @@ case 2: break; case 31: -#line 301 "perly.y" /* yacc.c:1646 */ +#line 304 "perly.y" /* yacc.c:1646 */ { if ((ps[-1].val.opval)->op_type == OP_CONST) { const char *const name = @@ -307,7 +307,7 @@ case 2: break; case 32: -#line 323 "perly.y" /* yacc.c:1646 */ +#line 326 "perly.y" /* yacc.c:1646 */ { OP *body; if (parser->copline > (line_t)(ps[-2].val.ival)) @@ -328,7 +328,7 @@ case 2: break; case 33: -#line 340 "perly.y" /* yacc.c:1646 */ +#line 343 "perly.y" /* yacc.c:1646 */ { package((ps[-1].val.opval)); if ((ps[-2].val.opval)) @@ -339,13 +339,13 @@ case 2: break; case 34: -#line 347 "perly.y" /* yacc.c:1646 */ +#line 350 "perly.y" /* yacc.c:1646 */ { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } break; case 35: -#line 349 "perly.y" /* yacc.c:1646 */ +#line 352 "perly.y" /* yacc.c:1646 */ { 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)); @@ -356,7 +356,7 @@ case 2: break; case 36: -#line 356 "perly.y" /* yacc.c:1646 */ +#line 359 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), op_scope((ps[-1].val.opval)), (ps[0].val.opval))); @@ -366,7 +366,7 @@ case 2: break; case 37: -#line 362 "perly.y" /* yacc.c:1646 */ +#line 365 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), (ps[0].val.opval), op_scope((ps[-1].val.opval)))); @@ -376,7 +376,7 @@ case 2: break; case 38: -#line 368 "perly.y" /* yacc.c:1646 */ +#line 371 "perly.y" /* yacc.c:1646 */ { (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); @@ -385,19 +385,19 @@ case 2: break; case 39: -#line 373 "perly.y" /* yacc.c:1646 */ +#line 376 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); } break; case 40: -#line 375 "perly.y" /* yacc.c:1646 */ +#line 378 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); } break; case 41: -#line 377 "perly.y" /* yacc.c:1646 */ +#line 380 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, (LOOP*)(OP*)NULL, @@ -408,7 +408,7 @@ case 2: break; case 42: -#line 384 "perly.y" /* yacc.c:1646 */ +#line 387 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, (LOOP*)(OP*)NULL, @@ -419,19 +419,19 @@ case 2: break; case 43: -#line 391 "perly.y" /* yacc.c:1646 */ +#line 394 "perly.y" /* yacc.c:1646 */ { parser->expect = XTERM; } break; case 44: -#line 393 "perly.y" /* yacc.c:1646 */ +#line 396 "perly.y" /* yacc.c:1646 */ { parser->expect = XTERM; } break; case 45: -#line 396 "perly.y" /* yacc.c:1646 */ +#line 399 "perly.y" /* yacc.c:1646 */ { OP *initop = (ps[-9].val.opval); OP *forop = newWHILEOP(0, 1, (LOOP*)(OP*)NULL, @@ -450,7 +450,7 @@ case 2: break; case 46: -#line 411 "perly.y" /* yacc.c:1646 */ +#line 414 "perly.y" /* yacc.c:1646 */ { (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); @@ -459,7 +459,7 @@ case 2: break; case 47: -#line 416 "perly.y" /* yacc.c:1646 */ +#line 419 "perly.y" /* yacc.c:1646 */ { (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))); @@ -469,13 +469,13 @@ case 2: break; case 48: -#line 422 "perly.y" /* yacc.c:1646 */ +#line 425 "perly.y" /* yacc.c:1646 */ { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; case 49: -#line 424 "perly.y" /* yacc.c:1646 */ +#line 427 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end( (ps[-7].val.ival), @@ -492,7 +492,7 @@ case 2: break; case 50: -#line 437 "perly.y" /* yacc.c:1646 */ +#line 440 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP( 0, op_lvalue(newUNOP(OP_REFGEN, 0, @@ -504,7 +504,7 @@ case 2: break; case 51: -#line 445 "perly.y" /* yacc.c:1646 */ +#line 448 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0, (OP*)NULL, (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); @@ -514,7 +514,7 @@ case 2: break; case 52: -#line 451 "perly.y" /* yacc.c:1646 */ +#line 454 "perly.y" /* yacc.c:1646 */ { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, (LOOP*)(OP*)NULL, @@ -524,7 +524,7 @@ case 2: break; case 53: -#line 457 "perly.y" /* yacc.c:1646 */ +#line 460 "perly.y" /* yacc.c:1646 */ { package((ps[-2].val.opval)); if ((ps[-3].val.opval)) { @@ -535,7 +535,7 @@ case 2: break; case 54: -#line 464 "perly.y" /* yacc.c:1646 */ +#line 467 "perly.y" /* yacc.c:1646 */ { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, (LOOP*)(OP*)NULL, @@ -547,7 +547,7 @@ case 2: break; case 55: -#line 472 "perly.y" /* yacc.c:1646 */ +#line 475 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[-1].val.opval); } @@ -555,7 +555,7 @@ case 2: break; case 56: -#line 476 "perly.y" /* yacc.c:1646 */ +#line 479 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; parser->copline = NOLINE; @@ -564,7 +564,7 @@ case 2: break; case 57: -#line 484 "perly.y" /* yacc.c:1646 */ +#line 487 "perly.y" /* yacc.c:1646 */ { OP *list; if ((ps[0].val.opval)) { OP *term = (ps[0].val.opval); @@ -583,74 +583,74 @@ case 2: break; case 58: -#line 501 "perly.y" /* yacc.c:1646 */ +#line 504 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = NULL; } break; case 59: -#line 503 "perly.y" /* yacc.c:1646 */ +#line 506 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_unscope((ps[-1].val.opval)); } break; case 60: -#line 508 "perly.y" /* yacc.c:1646 */ +#line 511 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; case 61: -#line 510 "perly.y" /* yacc.c:1646 */ +#line 513 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 62: -#line 512 "perly.y" /* yacc.c:1646 */ +#line 515 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 63: -#line 514 "perly.y" /* yacc.c:1646 */ +#line 517 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 64: -#line 516 "perly.y" /* yacc.c:1646 */ +#line 519 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); } break; case 65: -#line 518 "perly.y" /* yacc.c:1646 */ +#line 521 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); } break; case 66: -#line 520 "perly.y" /* yacc.c:1646 */ +#line 523 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newFOROP(0, (OP*)NULL, (ps[0].val.opval), (ps[-2].val.opval), (OP*)NULL); parser->copline = (line_t)(ps[-1].val.ival); } break; case 67: -#line 523 "perly.y" /* yacc.c:1646 */ +#line 526 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); } break; case 68: -#line 528 "perly.y" /* yacc.c:1646 */ +#line 531 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; case 69: -#line 530 "perly.y" /* yacc.c:1646 */ +#line 533 "perly.y" /* yacc.c:1646 */ { ((ps[0].val.opval))->op_flags |= OPf_PARENS; (yyval.opval) = op_scope((ps[0].val.opval)); @@ -659,7 +659,7 @@ case 2: break; case 70: -#line 535 "perly.y" /* yacc.c:1646 */ +#line 538 "perly.y" /* yacc.c:1646 */ { parser->copline = (line_t)(ps[-5].val.ival); (yyval.opval) = newCONDOP(0, newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)), @@ -670,19 +670,19 @@ case 2: break; case 71: -#line 545 "perly.y" /* yacc.c:1646 */ +#line 548 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; case 72: -#line 547 "perly.y" /* yacc.c:1646 */ +#line 550 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_scope((ps[0].val.opval)); } break; case 73: -#line 552 "perly.y" /* yacc.c:1646 */ +#line 555 "perly.y" /* yacc.c:1646 */ { (yyval.ival) = (PL_min_intro_pending && PL_max_intro_pending >= PL_min_intro_pending); intro_my(); } @@ -690,13 +690,13 @@ case 2: break; case 74: -#line 558 "perly.y" /* yacc.c:1646 */ +#line 561 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; case 76: -#line 564 "perly.y" /* yacc.c:1646 */ +#line 567 "perly.y" /* yacc.c:1646 */ { YYSTYPE tmplval; (void)scan_num("1", &tmplval); (yyval.opval) = tmplval.opval; } @@ -704,148 +704,421 @@ case 2: break; case 78: -#line 572 "perly.y" /* yacc.c:1646 */ +#line 575 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = invert(scalar((ps[0].val.opval))); } break; case 79: -#line 577 "perly.y" /* yacc.c:1646 */ +#line 580 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 80: -#line 581 "perly.y" /* yacc.c:1646 */ +#line 584 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; case 81: -#line 584 "perly.y" /* yacc.c:1646 */ +#line 587 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 82: -#line 585 "perly.y" /* yacc.c:1646 */ +#line 588 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; case 83: -#line 589 "perly.y" /* yacc.c:1646 */ +#line 592 "perly.y" /* yacc.c:1646 */ { (yyval.ival) = start_subparse(FALSE, 0); SAVEFREESV(PL_compcv); } break; case 84: -#line 595 "perly.y" /* yacc.c:1646 */ +#line 598 "perly.y" /* yacc.c:1646 */ { (yyval.ival) = start_subparse(FALSE, CVf_ANON); SAVEFREESV(PL_compcv); } break; case 85: -#line 600 "perly.y" /* yacc.c:1646 */ +#line 603 "perly.y" /* yacc.c:1646 */ { (yyval.ival) = start_subparse(TRUE, 0); SAVEFREESV(PL_compcv); } break; case 88: -#line 611 "perly.y" /* yacc.c:1646 */ +#line 614 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; case 90: -#line 617 "perly.y" /* yacc.c:1646 */ +#line 620 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; case 91: -#line 619 "perly.y" /* yacc.c:1646 */ +#line 622 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 92: -#line 621 "perly.y" /* yacc.c:1646 */ +#line 624 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; case 93: -#line 626 "perly.y" /* yacc.c:1646 */ +#line 629 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; case 94: -#line 628 "perly.y" /* yacc.c:1646 */ +#line 631 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; case 95: -#line 633 "perly.y" /* yacc.c:1646 */ +#line 642 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (OP*)NULL; } + + break; + + case 96: +#line 644 "perly.y" /* yacc.c:1646 */ + { + (yyval.opval) = (ps[0].val.opval); + PL_parser->in_my = 0; + } + + break; + + case 97: +#line 652 "perly.y" /* yacc.c:1646 */ + { (yyval.ival) = '@'; } + + break; + + case 98: +#line 654 "perly.y" /* yacc.c:1646 */ + { (yyval.ival) = '%'; } + + break; + + case 99: +#line 658 "perly.y" /* yacc.c:1646 */ + { + I32 sigil = (ps[-2].val.ival); + OP *var = (ps[-1].val.opval); + OP *defexpr = (ps[0].val.opval); + int type = (sigil == '@' ? OP_PADAV : OP_PADHV); + + if (PL_parser->sig_slurpy) + yyerror("Multiple slurpy parameters not allowed"); + PL_parser->sig_slurpy = sigil; + + if (defexpr) + yyerror("a slurpy parameter may not have " + "a default value"); + + if (var) { + OP *slice; + + var->op_type = type; + var->op_ppaddr = PL_ppaddr[type]; + var->op_flags = (OPf_WANT_LIST | OPf_MOD); + var->op_private = OPpLVAL_INTRO; + + slice = PL_parser->sig_elems + ? op_prepend_elem(OP_ASLICE, + newOP(OP_PUSHMARK, 0), + newLISTOP(OP_ASLICE, 0, + list(newRANGE(0, + newSVOP(OP_CONST, 0, + newSViv(PL_parser->sig_elems)), + newUNOP(OP_AV2ARYLEN, 0, + ref(newUNOP(OP_RV2AV, 0, + newGVOP(OP_GV, 0, PL_defgv)), + OP_AV2ARYLEN)))), + ref(newUNOP(OP_RV2AV, 0, + newGVOP(OP_GV, 0, PL_defgv)), + OP_ASLICE))) + : newUNOP(OP_RV2AV, 0, newGVOP(OP_GV, 0, PL_defgv)); + (yyval.opval) = newSTATEOP(0, NULL, + newASSIGNOP(OPf_STACKED, var, 0, slice)); + } + else + (yyval.opval) = (OP*)NULL; + } + + break; + + case 100: +#line 705 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (OP*)NULL; } + + break; + + case 101: +#line 707 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = newOP(OP_NULL, 0); } + + break; + + case 102: +#line 709 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 103: +#line 715 "perly.y" /* yacc.c:1646 */ { - /* We shouldn't get here otherwise */ - assert(FEATURE_SIGNATURES_IS_ENABLED); + OP *var = (ps[-1].val.opval); + OP *defexpr = (ps[0].val.opval); + OP *argn = NULL; + OP *expr = NULL; + + if (PL_parser->sig_slurpy) + yyerror("Slurpy parameter not last"); + + PL_parser->sig_elems++; + + if (var) { + var->op_type = OP_PADSV; + var->op_ppaddr = PL_ppaddr[OP_PADSV]; + var->op_flags = (OPf_WANT_SCALAR | OPf_MOD); + var->op_private = OPpLVAL_INTRO; + } + + /* $_[N] */ + argn = newBINOP(OP_AELEM, 0, + ref(newUNOP(OP_RV2AV, 0, + newGVOP(OP_GV, 0, PL_defgv)), + OP_RV2AV), + newSVOP(OP_CONST, 0, + newSViv(PL_parser->sig_elems - 1))); + + if (defexpr) { + PL_parser->sig_optelems++; + /* is it '$var=undef', '$=' ? */ + if ( ( defexpr->op_type == OP_NULL + || defexpr->op_type == OP_UNDEF) + && !(defexpr->op_flags & OPf_KIDS)) + { + if (var) { + /* '$=' is legal, '$var=' isn't */ + if (defexpr->op_type == OP_NULL) + yyerror("Optional parameter " + "lacks default expression"); + else + expr = argn; + } + op_free(defexpr); + } + else { + /* @_ >= N */ + OP *ge_op = + newBINOP(OP_GE, 0, + scalar(newUNOP(OP_RV2AV, 0, + newGVOP(OP_GV, 0, PL_defgv))), + newSVOP(OP_CONST, 0, + newSViv(PL_parser->sig_elems))); + + expr = var + ? newCONDOP(0, ge_op, argn, defexpr) + : newLOGOP(OP_OR, 0, ge_op, defexpr); + } + } + else { + if (PL_parser->sig_optelems) + yyerror("Mandatory parameter " + "follows optional parameter"); + expr = argn; + } + + if (var) + expr = newASSIGNOP(OPf_STACKED, var, 0, expr); + if (expr) + (yyval.opval) = op_prepend_elem(OP_LINESEQ, + newSTATEOP(0, NULL, NULL), + expr); + else + (yyval.opval) = (OP*)NULL; + } - Perl_ck_warner_d(aTHX_ - packWARN(WARN_EXPERIMENTAL__SIGNATURES), - "The signatures feature is experimental"); - (yyval.opval) = parse_subsignature(); + break; + + case 104: +#line 793 "perly.y" /* yacc.c:1646 */ + { parser->expect = XSIGVAR; (yyval.opval) = (ps[0].val.opval); } + + break; + + case 105: +#line 795 "perly.y" /* yacc.c:1646 */ + { parser->expect = XSIGVAR; (yyval.opval) = (ps[0].val.opval); } + + break; + + case 106: +#line 801 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[-1].val.opval); } + + break; + + case 107: +#line 803 "perly.y" /* yacc.c:1646 */ + { + (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 96: -#line 643 "perly.y" /* yacc.c:1646 */ + case 108: +#line 807 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 109: +#line 812 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (OP*)NULL; } + + break; + + case 110: +#line 814 "perly.y" /* yacc.c:1646 */ + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 111: +#line 818 "perly.y" /* yacc.c:1646 */ { - (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), - newSTATEOP(0, NULL, sawparens(newNULLLIST()))); - parser->expect = XATTRBLOCK; + ENTER; + SAVEINT(PL_parser->sig_elems); + SAVEINT(PL_parser->sig_optelems); + SAVEI8(PL_parser->sig_slurpy); + PL_parser->sig_elems = 0; + PL_parser->sig_optelems = 0; + PL_parser->sig_slurpy = 0; + parser->expect = XSIGVAR; + } + + break; + + case 112: +#line 830 "perly.y" /* yacc.c:1646 */ + { + OP *sigops = (ps[-1].val.opval); + int min_arity = + PL_parser->sig_elems - PL_parser->sig_optelems; + + assert(FEATURE_SIGNATURES_IS_ENABLED); + + /* We shouldn't get here otherwise */ + Perl_ck_warner_d(aTHX_ + packWARN(WARN_EXPERIMENTAL__SIGNATURES), + "The signatures feature is experimental"); + + /* handle odd/even for %foo */ + if (PL_parser->sig_slurpy == '%') { + OP *chkop = + newLOGOP( + (PL_parser->sig_elems & 1) + ? OP_OR : OP_AND, + 0, + newBINOP(OP_BIT_AND, 0, + scalar(newUNOP(OP_RV2AV, 0, + newGVOP(OP_GV, 0, PL_defgv))), + newSVOP(OP_CONST, 0, newSViv(1))), + op_convert_list(OP_DIE, 0, + op_convert_list(OP_SPRINTF, 0, + op_append_list(OP_LIST, + newSVOP(OP_CONST, 0, + newSVpvs("Odd name/value argument for subroutine at %s line %d.\n")), + newSLICEOP(0, + op_append_list(OP_LIST, + newSVOP(OP_CONST, 0, newSViv(1)), + newSVOP(OP_CONST, 0, newSViv(2))), + newOP(OP_CALLER, 0)))))); + if (PL_parser->sig_optelems) + chkop = newLOGOP(OP_AND, 0, + newBINOP(OP_GT, 0, + scalar(newUNOP(OP_RV2AV, 0, + newGVOP(OP_GV, 0, PL_defgv))), + newSVOP(OP_CONST, 0, + newSViv(PL_parser->sig_elems))), + chkop); + sigops = op_prepend_elem(OP_LINESEQ, + chkop, sigops); + + } + if (min_arity) + sigops = op_prepend_elem(OP_LINESEQ, + Perl_check_arity(aTHX_ min_arity, + FALSE), + sigops); + if (!PL_parser->sig_slurpy) + sigops = op_prepend_elem(OP_LINESEQ, + Perl_check_arity(aTHX_ + PL_parser->sig_elems, TRUE), + sigops); + + (yyval.opval) = op_append_elem(OP_LINESEQ, sigops, + newSTATEOP(0, NULL, NULL)); + + parser->expect = XATTRBLOCK; + LEAVE; } break; - case 98: -#line 652 "perly.y" /* yacc.c:1646 */ + case 114: +#line 898 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; - case 99: -#line 657 "perly.y" /* yacc.c:1646 */ + case 115: +#line 903 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 100: -#line 659 "perly.y" /* yacc.c:1646 */ + case 116: +#line 905 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 101: -#line 661 "perly.y" /* yacc.c:1646 */ + case 117: +#line 907 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 103: -#line 667 "perly.y" /* yacc.c:1646 */ + case 119: +#line 913 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[-1].val.opval); } break; - case 104: -#line 669 "perly.y" /* yacc.c:1646 */ + case 120: +#line 915 "perly.y" /* yacc.c:1646 */ { OP* term = (ps[0].val.opval); (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term); @@ -853,24 +1126,24 @@ case 2: break; - case 106: -#line 678 "perly.y" /* yacc.c:1646 */ + case 122: +#line 924 "perly.y" /* yacc.c:1646 */ { (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 107: -#line 682 "perly.y" /* yacc.c:1646 */ + case 123: +#line 928 "perly.y" /* yacc.c:1646 */ { (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 108: -#line 686 "perly.y" /* yacc.c:1646 */ + case 124: +#line 932 "perly.y" /* yacc.c:1646 */ { (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)), @@ -879,8 +1152,8 @@ case 2: break; - case 109: -#line 692 "perly.y" /* yacc.c:1646 */ + case 125: +#line 938 "perly.y" /* yacc.c:1646 */ { (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)))); @@ -888,8 +1161,8 @@ case 2: break; - case 110: -#line 697 "perly.y" /* yacc.c:1646 */ + case 126: +#line 943 "perly.y" /* yacc.c:1646 */ { (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)), @@ -898,8 +1171,8 @@ case 2: break; - case 111: -#line 703 "perly.y" /* yacc.c:1646 */ + case 127: +#line 949 "perly.y" /* yacc.c:1646 */ { (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)), @@ -908,27 +1181,27 @@ case 2: break; - case 112: -#line 709 "perly.y" /* yacc.c:1646 */ + case 128: +#line 955 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; - case 113: -#line 711 "perly.y" /* yacc.c:1646 */ + case 129: +#line 957 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 114: -#line 713 "perly.y" /* yacc.c:1646 */ + case 130: +#line 959 "perly.y" /* yacc.c:1646 */ { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, (OP*)NULL, (ps[0].val.opval)); } break; - case 115: -#line 716 "perly.y" /* yacc.c:1646 */ + case 131: +#line 962 "perly.y" /* yacc.c:1646 */ { (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))); @@ -936,21 +1209,21 @@ case 2: break; - case 118: -#line 731 "perly.y" /* yacc.c:1646 */ + case 134: +#line 977 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); } break; - case 119: -#line 733 "perly.y" /* yacc.c:1646 */ + case 135: +#line 979 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); } break; - case 120: -#line 736 "perly.y" /* yacc.c:1646 */ + case 136: +#line 982 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-4].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -958,8 +1231,8 @@ case 2: break; - case 121: -#line 741 "perly.y" /* yacc.c:1646 */ + case 137: +#line 987 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-3].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); @@ -967,91 +1240,91 @@ case 2: break; - case 122: -#line 746 "perly.y" /* yacc.c:1646 */ + case 138: +#line 992 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); } break; - case 123: -#line 749 "perly.y" /* yacc.c:1646 */ + case 139: +#line 995 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-5].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } break; - case 124: -#line 753 "perly.y" /* yacc.c:1646 */ + case 140: +#line 999 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-4].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } break; - case 125: -#line 757 "perly.y" /* yacc.c:1646 */ + case 141: +#line 1003 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-3].val.opval)))); } break; - case 126: -#line 760 "perly.y" /* yacc.c:1646 */ + case 142: +#line 1006 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-4].val.opval))))); } break; - case 127: -#line 765 "perly.y" /* yacc.c:1646 */ + case 143: +#line 1011 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-3].val.opval))))); } break; - case 128: -#line 769 "perly.y" /* yacc.c:1646 */ + case 144: +#line 1015 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-2].val.opval)))); } break; - case 129: -#line 772 "perly.y" /* yacc.c:1646 */ + case 145: +#line 1018 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); } break; - case 130: -#line 774 "perly.y" /* yacc.c:1646 */ + case 146: +#line 1020 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } break; - case 131: -#line 776 "perly.y" /* yacc.c:1646 */ + case 147: +#line 1022 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (OP*)NULL); } break; - case 132: -#line 781 "perly.y" /* yacc.c:1646 */ + case 148: +#line 1027 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } break; - case 133: -#line 783 "perly.y" /* yacc.c:1646 */ + case 149: +#line 1029 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 134: -#line 785 "perly.y" /* yacc.c:1646 */ + case 150: +#line 1031 "perly.y" /* yacc.c:1646 */ { 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))); @@ -1059,112 +1332,112 @@ case 2: break; - case 135: -#line 790 "perly.y" /* yacc.c:1646 */ + case 151: +#line 1036 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 136: -#line 792 "perly.y" /* yacc.c:1646 */ + case 152: +#line 1038 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 137: -#line 794 "perly.y" /* yacc.c:1646 */ + case 153: +#line 1040 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 138: -#line 796 "perly.y" /* yacc.c:1646 */ + case 154: +#line 1042 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 139: -#line 798 "perly.y" /* yacc.c:1646 */ + case 155: +#line 1044 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 140: -#line 800 "perly.y" /* yacc.c:1646 */ + case 156: +#line 1046 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 141: -#line 802 "perly.y" /* yacc.c:1646 */ + case 157: +#line 1048 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; - case 142: -#line 804 "perly.y" /* yacc.c:1646 */ + case 158: +#line 1050 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 143: -#line 806 "perly.y" /* yacc.c:1646 */ + case 159: +#line 1052 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 144: -#line 808 "perly.y" /* yacc.c:1646 */ + case 160: +#line 1054 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 145: -#line 810 "perly.y" /* yacc.c:1646 */ + case 161: +#line 1056 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 146: -#line 815 "perly.y" /* yacc.c:1646 */ + case 162: +#line 1061 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } break; - case 147: -#line 817 "perly.y" /* yacc.c:1646 */ + case 163: +#line 1063 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 148: -#line 820 "perly.y" /* yacc.c:1646 */ + case 164: +#line 1066 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; - case 149: -#line 822 "perly.y" /* yacc.c:1646 */ + case 165: +#line 1068 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } break; - case 150: -#line 824 "perly.y" /* yacc.c:1646 */ + case 166: +#line 1070 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_POSTINC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); } break; - case 151: -#line 827 "perly.y" /* yacc.c:1646 */ + case 167: +#line 1073 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_POSTDEC, 0, op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));} break; - case 152: -#line 830 "perly.y" /* yacc.c:1646 */ + case 168: +#line 1076 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_convert_list(OP_JOIN, 0, op_append_elem( OP_LIST, @@ -1178,53 +1451,53 @@ case 2: break; - case 153: -#line 841 "perly.y" /* yacc.c:1646 */ + case 169: +#line 1087 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_PREINC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); } break; - case 154: -#line 844 "perly.y" /* yacc.c:1646 */ + case 170: +#line 1090 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_PREDEC, 0, op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); } break; - case 155: -#line 851 "perly.y" /* yacc.c:1646 */ + case 171: +#line 1097 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newANONLIST((ps[-1].val.opval)); } break; - case 156: -#line 853 "perly.y" /* yacc.c:1646 */ + case 172: +#line 1099 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newANONLIST((OP*)NULL);} break; - case 157: -#line 855 "perly.y" /* yacc.c:1646 */ + case 173: +#line 1101 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newANONHASH((ps[-2].val.opval)); } break; - case 158: -#line 857 "perly.y" /* yacc.c:1646 */ + case 174: +#line 1103 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newANONHASH((OP*)NULL); } break; - case 159: -#line 859 "perly.y" /* yacc.c:1646 */ + case 175: +#line 1105 "perly.y" /* yacc.c:1646 */ { 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 160: -#line 862 "perly.y" /* yacc.c:1646 */ + case 176: +#line 1108 "perly.y" /* yacc.c:1646 */ { OP *body; if (parser->copline > (line_t)(ps[-2].val.ival)) @@ -1237,104 +1510,104 @@ case 2: break; - case 161: -#line 876 "perly.y" /* yacc.c:1646 */ + case 177: +#line 1122 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));} break; - case 162: -#line 878 "perly.y" /* yacc.c:1646 */ + case 178: +#line 1124 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));} break; - case 167: -#line 886 "perly.y" /* yacc.c:1646 */ + case 183: +#line 1132 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 168: -#line 888 "perly.y" /* yacc.c:1646 */ + case 184: +#line 1134 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } break; - case 169: -#line 890 "perly.y" /* yacc.c:1646 */ + case 185: +#line 1136 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } break; - case 170: -#line 892 "perly.y" /* yacc.c:1646 */ + case 186: +#line 1138 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 171: -#line 894 "perly.y" /* yacc.c:1646 */ + case 187: +#line 1140 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = localize((ps[0].val.opval),0); } break; - case 172: -#line 896 "perly.y" /* yacc.c:1646 */ + case 188: +#line 1142 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; - case 173: -#line 898 "perly.y" /* yacc.c:1646 */ + case 189: +#line 1144 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 174: -#line 900 "perly.y" /* yacc.c:1646 */ + case 190: +#line 1146 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = sawparens(newNULLLIST()); } break; - case 175: -#line 902 "perly.y" /* yacc.c:1646 */ + case 191: +#line 1148 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 176: -#line 904 "perly.y" /* yacc.c:1646 */ + case 192: +#line 1150 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 177: -#line 906 "perly.y" /* yacc.c:1646 */ + case 193: +#line 1152 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 178: -#line 908 "perly.y" /* yacc.c:1646 */ + case 194: +#line 1154 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 179: -#line 910 "perly.y" /* yacc.c:1646 */ + case 195: +#line 1156 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} break; - case 180: -#line 912 "perly.y" /* yacc.c:1646 */ + case 196: +#line 1158 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 181: -#line 914 "perly.y" /* yacc.c:1646 */ + case 197: +#line 1160 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, @@ -1347,8 +1620,8 @@ case 2: break; - case 182: -#line 924 "perly.y" /* yacc.c:1646 */ + case 198: +#line 1170 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_prepend_elem(OP_KVASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVASLICE, 0, @@ -1361,8 +1634,8 @@ case 2: break; - case 183: -#line 934 "perly.y" /* yacc.c:1646 */ + case 199: +#line 1180 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -1375,8 +1648,8 @@ case 2: break; - case 184: -#line 944 "perly.y" /* yacc.c:1646 */ + case 200: +#line 1190 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_prepend_elem(OP_KVHSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVHSLICE, 0, @@ -1389,27 +1662,27 @@ case 2: break; - case 185: -#line 954 "perly.y" /* yacc.c:1646 */ + case 201: +#line 1200 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 186: -#line 956 "perly.y" /* yacc.c:1646 */ + case 202: +#line 1202 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); } break; - case 187: -#line 958 "perly.y" /* yacc.c:1646 */ + case 203: +#line 1204 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval))); } break; - case 188: -#line 961 "perly.y" /* yacc.c:1646 */ + case 204: +#line 1207 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval)))); @@ -1417,153 +1690,153 @@ case 2: break; - case 189: -#line 966 "perly.y" /* yacc.c:1646 */ + case 205: +#line 1212 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } break; - case 190: -#line 970 "perly.y" /* yacc.c:1646 */ + case 206: +#line 1216 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newSVREF((ps[-3].val.opval)); } break; - case 191: -#line 972 "perly.y" /* yacc.c:1646 */ + case 207: +#line 1218 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; - case 192: -#line 974 "perly.y" /* yacc.c:1646 */ + case 208: +#line 1220 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newHVREF((ps[-3].val.opval)); } break; - case 193: -#line 976 "perly.y" /* yacc.c:1646 */ + case 209: +#line 1222 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); } break; - case 194: -#line 979 "perly.y" /* yacc.c:1646 */ + case 210: +#line 1225 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); } break; - case 195: -#line 981 "perly.y" /* yacc.c:1646 */ + case 211: +#line 1227 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } break; - case 196: -#line 984 "perly.y" /* yacc.c:1646 */ + case 212: +#line 1230 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); } break; - case 197: -#line 986 "perly.y" /* yacc.c:1646 */ + case 213: +#line 1232 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; - case 198: -#line 988 "perly.y" /* yacc.c:1646 */ + case 214: +#line 1234 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; - case 199: -#line 990 "perly.y" /* yacc.c:1646 */ + case 215: +#line 1236 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; - case 200: -#line 992 "perly.y" /* yacc.c:1646 */ + case 216: +#line 1238 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; - case 201: -#line 994 "perly.y" /* yacc.c:1646 */ + case 217: +#line 1240 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } break; - case 202: -#line 996 "perly.y" /* yacc.c:1646 */ + case 218: +#line 1242 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } break; - case 203: -#line 998 "perly.y" /* yacc.c:1646 */ + case 219: +#line 1244 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; - case 204: -#line 1000 "perly.y" /* yacc.c:1646 */ + case 220: +#line 1246 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } break; - case 205: -#line 1003 "perly.y" /* yacc.c:1646 */ + case 221: +#line 1249 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; - case 206: -#line 1005 "perly.y" /* yacc.c:1646 */ + case 222: +#line 1251 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newOP((ps[-2].val.ival), 0);} break; - case 207: -#line 1007 "perly.y" /* yacc.c:1646 */ + case 223: +#line 1253 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 208: -#line 1009 "perly.y" /* yacc.c:1646 */ + case 224: +#line 1255 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[-2].val.opval); } break; - case 209: -#line 1011 "perly.y" /* yacc.c:1646 */ + case 225: +#line 1257 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; - case 210: -#line 1013 "perly.y" /* yacc.c:1646 */ + case 226: +#line 1259 "perly.y" /* yacc.c:1646 */ { (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 211: -#line 1017 "perly.y" /* yacc.c:1646 */ + case 227: +#line 1263 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 212: -#line 1019 "perly.y" /* yacc.c:1646 */ + case 228: +#line 1265 "perly.y" /* yacc.c:1646 */ { if ( (ps[0].val.opval)->op_type != OP_TRANS && (ps[0].val.opval)->op_type != OP_TRANSR @@ -1577,14 +1850,14 @@ case 2: break; - case 213: -#line 1030 "perly.y" /* yacc.c:1646 */ + case 229: +#line 1276 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); } break; - case 216: -#line 1034 "perly.y" /* yacc.c:1646 */ + case 232: +#line 1280 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), newSVOP(OP_CONST, 0, newSVpvs("Unimplemented"))); @@ -1592,180 +1865,180 @@ case 2: break; - case 218: -#line 1043 "perly.y" /* yacc.c:1646 */ + case 234: +#line 1289 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } break; - case 219: -#line 1045 "perly.y" /* yacc.c:1646 */ + case 235: +#line 1291 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = localize((ps[0].val.opval),1); } break; - case 220: -#line 1047 "perly.y" /* yacc.c:1646 */ + case 236: +#line 1293 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } break; - case 221: -#line 1052 "perly.y" /* yacc.c:1646 */ + case 237: +#line 1298 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; - case 222: -#line 1054 "perly.y" /* yacc.c:1646 */ + case 238: +#line 1300 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = sawparens(newNULLLIST()); } break; - case 223: -#line 1057 "perly.y" /* yacc.c:1646 */ + case 239: +#line 1303 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 224: -#line 1059 "perly.y" /* yacc.c:1646 */ + case 240: +#line 1305 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 225: -#line 1061 "perly.y" /* yacc.c:1646 */ + case 241: +#line 1307 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 226: -#line 1066 "perly.y" /* yacc.c:1646 */ + case 242: +#line 1312 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; - case 227: -#line 1068 "perly.y" /* yacc.c:1646 */ + case 243: +#line 1314 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 228: -#line 1072 "perly.y" /* yacc.c:1646 */ + case 244: +#line 1318 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; - case 229: -#line 1074 "perly.y" /* yacc.c:1646 */ + case 245: +#line 1320 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 230: -#line 1078 "perly.y" /* yacc.c:1646 */ + case 246: +#line 1324 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (OP*)NULL; } break; - case 231: -#line 1080 "perly.y" /* yacc.c:1646 */ + case 247: +#line 1326 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; - case 232: -#line 1086 "perly.y" /* yacc.c:1646 */ + case 248: +#line 1332 "perly.y" /* yacc.c:1646 */ { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; - case 240: -#line 1103 "perly.y" /* yacc.c:1646 */ + case 256: +#line 1349 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); } break; - case 241: -#line 1107 "perly.y" /* yacc.c:1646 */ + case 257: +#line 1353 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newSVREF((ps[0].val.opval)); } break; - case 242: -#line 1111 "perly.y" /* yacc.c:1646 */ + case 258: +#line 1357 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newAVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } break; - case 243: -#line 1117 "perly.y" /* yacc.c:1646 */ + case 259: +#line 1363 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newHVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } break; - case 244: -#line 1123 "perly.y" /* yacc.c:1646 */ + case 260: +#line 1369 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newAVREF((ps[0].val.opval)); } break; - case 245: -#line 1125 "perly.y" /* yacc.c:1646 */ + case 261: +#line 1371 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; - case 246: -#line 1129 "perly.y" /* yacc.c:1646 */ + case 262: +#line 1375 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); } break; - case 248: -#line 1134 "perly.y" /* yacc.c:1646 */ + case 264: +#line 1380 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newAVREF((ps[-2].val.opval)); } break; - case 250: -#line 1139 "perly.y" /* yacc.c:1646 */ + case 266: +#line 1385 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newHVREF((ps[-2].val.opval)); } break; - case 252: -#line 1144 "perly.y" /* yacc.c:1646 */ + case 268: +#line 1390 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } break; - case 253: -#line 1149 "perly.y" /* yacc.c:1646 */ + case 269: +#line 1395 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = scalar((ps[0].val.opval)); } break; - case 254: -#line 1151 "perly.y" /* yacc.c:1646 */ + case 270: +#line 1397 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = scalar((ps[0].val.opval)); } break; - case 255: -#line 1153 "perly.y" /* yacc.c:1646 */ + case 271: +#line 1399 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = op_scope((ps[0].val.opval)); } break; - case 256: -#line 1156 "perly.y" /* yacc.c:1646 */ + case 272: +#line 1402 "perly.y" /* yacc.c:1646 */ { (yyval.opval) = (ps[0].val.opval); } break; @@ -1776,6 +2049,6 @@ case 2: /* Generated from: - * fba24dfc68a3a84c9ae95cb9e14cc156ac487e6f3228cdf84c166d3cd820e59a perly.y + * 719f2ad40259ac9c064749d399f2c7d1e1131abbc8c1f1ec0558cac2d8f2bc4c perly.y * 3e1dff60f26df8933d7aed0c0e87177a0f022c14800c0707eb62a7db4196ac98 regen_perly.pl * ex: set ro: */ @@ -25,6 +25,7 @@ #define PERL_IN_PERLY_C #include "perl.h" #include "feature.h" +#include "keywords.h" typedef unsigned char yytype_uint8; typedef signed char yytype_int8; @@ -246,6 +247,7 @@ S_clear_yystack(pTHX_ const yy_parser *parser) int Perl_yyparse (pTHX_ int gramtype) { + dVAR; int yystate; int yyn; int yyresult; @@ -181,6 +181,6 @@ int yyparse (void); /* Generated from: - * fba24dfc68a3a84c9ae95cb9e14cc156ac487e6f3228cdf84c166d3cd820e59a perly.y + * 719f2ad40259ac9c064749d399f2c7d1e1131abbc8c1f1ec0558cac2d8f2bc4c perly.y * 3e1dff60f26df8933d7aed0c0e87177a0f022c14800c0707eb62a7db4196ac98 regen_perly.pl * ex: set ro: */ @@ -6,16 +6,16 @@ #define YYFINAL 14 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 3111 +#define YYLAST 3085 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 105 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 78 +#define YYNNTS 86 /* YYNRULES -- Number of rules. */ -#define YYNRULES 256 +#define YYNRULES 272 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 521 +#define YYNSTATES 539 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ @@ -69,32 +69,34 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 115, 115, 114, 125, 124, 134, 133, 146, 145, - 158, 157, 170, 169, 181, 189, 197, 201, 209, 215, - 216, 226, 227, 236, 240, 244, 248, 255, 257, 268, - 267, 301, 300, 339, 347, 346, 355, 361, 367, 372, - 374, 376, 383, 391, 393, 390, 410, 415, 422, 421, - 436, 444, 450, 457, 456, 471, 475, 483, 501, 502, - 507, 509, 511, 513, 515, 517, 519, 522, 528, 529, - 534, 545, 546, 552, 558, 559, 564, 567, 571, 576, - 580, 584, 585, 589, 595, 600, 605, 606, 611, 612, - 617, 618, 620, 625, 627, 633, 632, 651, 652, 656, - 658, 660, 662, 666, 668, 673, 677, 681, 685, 691, - 696, 702, 708, 710, 713, 712, 723, 724, 728, 732, - 735, 740, 745, 748, 752, 756, 759, 764, 768, 771, - 773, 775, 780, 782, 784, 789, 791, 793, 795, 797, - 799, 801, 803, 805, 807, 809, 814, 816, 819, 821, - 823, 826, 829, 840, 843, 850, 852, 854, 856, 858, - 861, 875, 877, 881, 882, 883, 884, 885, 887, 889, - 891, 893, 895, 897, 899, 901, 903, 905, 907, 909, - 911, 913, 923, 933, 943, 953, 955, 957, 960, 965, - 969, 971, 973, 975, 978, 980, 983, 985, 987, 989, - 991, 993, 995, 997, 999, 1002, 1004, 1006, 1008, 1010, - 1012, 1016, 1019, 1018, 1031, 1032, 1033, 1038, 1042, 1044, - 1046, 1051, 1053, 1056, 1058, 1060, 1065, 1067, 1072, 1073, - 1078, 1079, 1085, 1089, 1090, 1091, 1094, 1095, 1098, 1099, - 1102, 1106, 1110, 1116, 1122, 1124, 1128, 1132, 1133, 1137, - 1138, 1142, 1143, 1148, 1150, 1152, 1155 + 0, 118, 118, 117, 128, 127, 137, 136, 149, 148, + 161, 160, 173, 172, 184, 192, 200, 204, 212, 218, + 219, 229, 230, 239, 243, 247, 251, 258, 260, 271, + 270, 304, 303, 342, 350, 349, 358, 364, 370, 375, + 377, 379, 386, 394, 396, 393, 413, 418, 425, 424, + 439, 447, 453, 460, 459, 474, 478, 486, 504, 505, + 510, 512, 514, 516, 518, 520, 522, 525, 531, 532, + 537, 548, 549, 555, 561, 562, 567, 570, 574, 579, + 583, 587, 588, 592, 598, 603, 608, 609, 614, 615, + 620, 621, 623, 628, 630, 642, 643, 651, 653, 657, + 705, 706, 708, 714, 792, 794, 800, 802, 806, 812, + 813, 818, 817, 897, 898, 902, 904, 906, 908, 912, + 914, 919, 923, 927, 931, 937, 942, 948, 954, 956, + 959, 958, 969, 970, 974, 978, 981, 986, 991, 994, + 998, 1002, 1005, 1010, 1014, 1017, 1019, 1021, 1026, 1028, + 1030, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, + 1053, 1055, 1060, 1062, 1065, 1067, 1069, 1072, 1075, 1086, + 1089, 1096, 1098, 1100, 1102, 1104, 1107, 1121, 1123, 1127, + 1128, 1129, 1130, 1131, 1133, 1135, 1137, 1139, 1141, 1143, + 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1169, 1179, + 1189, 1199, 1201, 1203, 1206, 1211, 1215, 1217, 1219, 1221, + 1224, 1226, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, + 1245, 1248, 1250, 1252, 1254, 1256, 1258, 1262, 1265, 1264, + 1277, 1278, 1279, 1284, 1288, 1290, 1292, 1297, 1299, 1302, + 1304, 1306, 1311, 1313, 1318, 1319, 1324, 1325, 1331, 1335, + 1336, 1337, 1340, 1341, 1344, 1345, 1348, 1352, 1356, 1362, + 1368, 1370, 1374, 1378, 1379, 1383, 1384, 1388, 1389, 1394, + 1396, 1398, 1401 }; #endif @@ -124,12 +126,14 @@ static const char *const yytname[] = "$@13", "formline", "formarg", "sideff", "else", "cont", "mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr", "formname", "startsub", "startanonsub", "startformsub", "subname", "proto", "subattrlist", - "myattrlist", "subsignature", "@14", "optsubbody", "expr", "listexpr", - "listop", "@15", "method", "subscripted", "termbinop", "termunop", - "anonymous", "termdo", "term", "@16", "myattrterm", "myterm", - "optlistexpr", "optexpr", "optrepl", "my_scalar", "my_var", - "refgen_topic", "my_refgen", "amper", "scalar", "ary", "hsh", "arylen", - "star", "sliceme", "kvslice", "gelem", "indirob", YY_NULLPTR + "myattrlist", "sigvarname", "sigslurpsigil", "sigslurpelem", + "sigdefault", "sigscalarelem", "sigelem", "siglist", "siglistornull", + "subsignature", "$@14", "optsubbody", "expr", "listexpr", "listop", + "@15", "method", "subscripted", "termbinop", "termunop", "anonymous", + "termdo", "term", "@16", "myattrterm", "myterm", "optlistexpr", + "optexpr", "optrepl", "my_scalar", "my_var", "refgen_topic", "my_refgen", + "amper", "scalar", "ary", "hsh", "arylen", "star", "sliceme", "kvslice", + "gelem", "indirob", YY_NULLPTR }; #endif @@ -152,73 +156,74 @@ static const yytype_uint16 yytoknum[] = }; # endif -#define YYPACT_NINF -412 +#define YYPACT_NINF -440 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-412))) + (!!((Yystate) == (-440))) -#define YYTABLE_NINF -252 +#define YYTABLE_NINF -268 #define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-252))) + (!!((Yytable_value) == (-268))) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - 903, -412, -412, -412, -412, -412, -412, 8, -412, 2810, - 16, 1502, 1407, -412, -412, -412, 1973, 2810, 2810, 31, - 31, 31, -412, 31, 31, -412, -412, 46, -66, -412, - 2810, -412, -412, -412, 2810, -412, -54, -20, -19, 1880, - 1785, 31, 1880, 2066, 35, 2810, 62, 2810, 2810, 2810, - 2810, 2810, 2810, 2810, 2159, 31, 31, 341, -13, -412, - 7, -412, -412, -412, -412, 2971, -412, -412, -2, 73, - 79, 82, -412, 76, 123, 180, 92, -412, -412, -412, - -412, -412, 35, 90, -412, 18, 28, 36, 47, 167, - 88, 104, 16, -412, 78, -412, 102, 1971, 1407, -412, - -412, -412, 647, 742, -412, 77, 731, 731, -412, -412, - -412, -412, -412, -412, -412, 2810, 117, 118, 2810, 122, - 367, 16, -4, 2971, 126, 2252, 1785, -412, 367, 545, - -13, -412, 438, 2810, -412, -412, 367, 212, 100, -412, - -412, 2810, 367, 2903, 2345, 157, -412, -412, -412, 367, - -13, 731, 731, 731, 71, 71, 219, 221, -412, -412, - 2810, 2810, 2810, 2810, 2810, 2810, 2438, 2810, 2810, 2810, - 2810, 2810, 2810, 2810, 2810, 2810, 2810, 2810, 2810, 2810, - 2810, 2810, -412, -412, -412, 245, 2531, 2810, 2810, 2810, - 2810, 2810, 2810, 2810, -412, 209, -412, 213, -412, -412, - -412, -412, -412, 144, 55, -412, -412, 139, -412, -412, - -412, 16, -412, -412, 2810, 2810, 2810, 2810, 2810, 2810, - -412, -412, -412, -412, -412, 2810, 2810, 97, -412, -412, - -412, 141, 173, -412, -412, 256, 145, 2810, -13, -412, - 242, -412, 2624, 731, 157, 52, 57, 58, -412, 312, - 230, -412, 2810, 244, 193, 193, -412, 2971, 201, 103, - -412, 346, 1584, 483, 1768, 724, 502, 2971, 2929, 468, - 468, 1675, 408, 1863, 630, 731, 731, 2810, 2810, 170, - 177, 184, -412, 186, 2717, 11, 187, 225, -412, -412, - 473, 218, 119, 259, 125, 279, 132, 309, 837, -412, - 252, 235, 2, 288, 2810, 2810, 2810, 2810, -412, 207, - -412, -412, 236, -412, -412, -412, -412, 1596, 23, -412, - 2810, 2810, -412, 341, -412, 341, 341, 341, 341, 341, - 222, -30, -412, 2810, -412, 173, 323, 16, -412, -412, - 534, -412, 30, 540, -412, -412, -412, 190, 2810, 340, - -412, -412, 2810, 329, 208, -412, -412, -412, -412, -412, - 632, -412, -412, 2810, -412, 352, -412, 354, -412, 380, - -412, 387, -412, -412, -412, 328, -412, -412, -412, 336, - 301, 341, 302, 306, 341, 307, 308, -412, -412, -412, - -412, 310, 325, 264, -412, 2810, 334, 335, -412, 2810, - 338, -412, 343, 426, -412, -412, -412, 42, -412, 211, - -412, 3013, 429, -412, -412, 344, -412, -412, -412, -412, - 355, 173, 141, -412, 2810, -412, -412, 435, 435, 2810, - 2810, 435, -412, 360, 356, 435, 435, 341, -412, -412, - -412, -412, -412, -412, 390, 5, 173, -412, 370, 435, - 435, -412, 32, 32, 373, 374, 78, 2810, 2810, 435, - -412, -412, 932, -412, -412, -412, -412, 466, 1027, -412, - 78, 78, -412, 435, 376, -412, -412, 435, 435, -412, - 382, 388, 78, -412, 29, -412, -412, -412, -412, 1122, - -412, 2810, 78, 78, -412, 435, -412, 411, 471, -412, - 1217, -412, 392, -412, -412, -412, 78, -412, -412, -412, - -412, 435, 1690, -412, 1312, 32, 402, -412, -412, 435, - -412 + 824, -440, -440, -440, -440, -440, -440, 21, -440, 2826, + 44, 1518, 1423, -440, -440, -440, 1989, 2826, 2826, 60, + 60, 60, -440, 60, 60, -440, -440, 8, -68, -440, + 2826, -440, -440, -440, 2826, -440, -46, -29, -18, 1896, + 1801, 60, 1896, 2082, 16, 2826, 137, 2826, 2826, 2826, + 2826, 2826, 2826, 2826, 2175, 60, 60, 170, 36, -440, + 7, -440, -440, -440, -440, 2945, -440, -440, 17, 126, + 209, 221, -440, 89, 239, 266, 113, -440, -440, -440, + -440, -440, 16, 106, -440, 29, 32, 57, 61, 149, + 66, 70, 44, -440, 102, -440, 116, 325, 1423, -440, + -440, -440, 663, 758, -440, 195, 442, 442, -440, -440, + -440, -440, -440, -440, -440, 2826, 73, 122, 2826, 127, + 318, 44, -8, 2945, 142, 2268, 1801, -440, 318, 561, + 36, -440, 485, 2826, -440, -440, 318, 215, 90, -440, + -440, 2826, 318, 2919, 2361, 186, -440, -440, -440, 318, + 36, 442, 442, 442, 535, 535, 252, 256, -440, -440, + 2826, 2826, 2826, 2826, 2826, 2826, 2454, 2826, 2826, 2826, + 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826, + 2826, 2826, -440, -440, -440, 72, 2547, 2826, 2826, 2826, + 2826, 2826, 2826, 2826, -440, 244, -440, 260, -440, -440, + -440, -440, -440, 190, 23, -440, -440, 184, -440, -440, + -440, 44, -440, -440, 2826, 2826, 2826, 2826, 2826, 2826, + -440, -440, -440, -440, -440, 2826, 2826, 217, -440, -440, + -440, 194, 227, -440, -440, 295, 187, 2826, 36, -440, + 296, -440, 2640, 442, 186, 47, 52, 75, -440, 309, + 284, -440, 2826, 301, 251, 251, -440, 2945, 160, 230, + -440, 455, 1600, 518, 1879, 498, 646, 2945, 369, 1692, + 1692, 419, 1786, 1972, 531, 442, 442, 2826, 2826, 224, + 229, 231, -440, 232, 2733, 48, 243, 274, -440, -440, + 475, 192, 235, 370, 246, 399, 250, 408, 853, -440, + 338, 290, -2, 355, 2826, 2826, 2826, 2826, -440, 299, + -440, -440, 297, -440, -440, -440, -440, 1612, 31, -440, + 2826, 2826, -440, 170, -440, 170, 170, 170, 170, 170, + 303, 19, -440, 2826, -440, 227, 380, 44, -440, -440, + 576, -440, 98, 648, -440, -440, -440, 264, 2826, 402, + -440, -440, 2826, 418, 270, -440, -440, -440, -440, -440, + 661, -440, -440, 2826, -440, 409, -440, 412, -440, 415, + -440, 416, -440, -440, -440, 386, -440, -440, -440, 411, + 333, 170, 336, 337, 170, 339, 341, -440, -440, -440, + -440, 340, 345, 312, -440, 2826, 358, 359, -440, 2826, + 363, -440, 112, 459, -440, -440, -440, 107, -440, 275, + -440, 2987, 465, -440, -440, 377, -440, -440, -440, -440, + 368, 227, 194, -440, 2826, -440, -440, 477, 477, 2826, + 2826, 477, -440, 384, 389, 477, 477, 170, -440, -440, + -440, 464, 464, -440, -440, -440, 413, 396, -440, -440, + -440, -440, 427, 5, 227, -440, 398, 477, 477, -440, + 134, 134, 414, 421, 102, 2826, 2826, 477, -440, -440, + -440, 423, 423, 112, -440, 948, -440, -440, -440, -440, + 499, 1043, -440, 102, 102, -440, 477, 407, -440, -440, + 477, 477, -440, 422, 433, 102, 2826, -440, -440, -440, + -440, 3, -440, -440, -440, -440, 1138, -440, 2826, 102, + 102, -440, 477, -440, 2945, 452, 493, -440, 1233, -440, + 436, -440, -440, -440, 102, -440, -440, -440, -440, 477, + 1706, -440, 1328, 134, 448, -440, -440, 477, -440 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -226,85 +231,88 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 0, 2, 4, 6, 8, 10, 12, 0, 16, 228, + 0, 2, 4, 6, 8, 10, 12, 0, 16, 244, 0, 0, 0, 19, 1, 19, 0, 0, 0, 0, - 0, 0, 214, 0, 0, 185, 212, 173, 207, 209, - 203, 84, 217, 84, 195, 216, 205, 0, 0, 198, - 226, 0, 0, 0, 0, 0, 0, 201, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 229, 102, 215, - 180, 163, 164, 165, 166, 105, 170, 5, 186, 175, - 178, 177, 179, 176, 0, 0, 0, 16, 7, 60, + 0, 0, 230, 0, 0, 201, 228, 189, 223, 225, + 219, 84, 233, 84, 211, 232, 221, 0, 0, 214, + 242, 0, 0, 0, 0, 0, 0, 217, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 245, 118, 231, + 196, 179, 180, 181, 182, 121, 186, 5, 202, 191, + 194, 193, 195, 192, 0, 0, 0, 16, 7, 60, 27, 85, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 56, 71, 9, 0, 61, 0, 11, - 24, 23, 0, 0, 156, 0, 146, 147, 253, 256, - 255, 254, 242, 243, 240, 226, 0, 0, 0, 0, - 204, 0, 88, 196, 0, 0, 228, 199, 200, 253, - 227, 112, 254, 0, 244, 162, 161, 0, 0, 86, - 87, 226, 171, 0, 0, 219, 223, 225, 224, 202, - 197, 148, 149, 168, 153, 154, 174, 0, 241, 246, - 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, + 24, 23, 0, 0, 172, 0, 162, 163, 269, 272, + 271, 270, 258, 259, 256, 242, 0, 0, 0, 0, + 220, 0, 88, 212, 0, 0, 244, 215, 216, 269, + 243, 128, 270, 0, 260, 178, 177, 0, 0, 86, + 87, 242, 187, 0, 0, 235, 239, 241, 240, 218, + 213, 164, 165, 184, 169, 170, 190, 0, 257, 262, + 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 150, 151, 152, 0, 0, 0, 0, 0, + 0, 0, 166, 167, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 83, 0, 34, 16, 16, 16, 16, 16, 0, 16, 16, 0, 16, 16, 40, 0, 52, 55, 0, 0, 0, 0, 0, 0, - 26, 25, 20, 155, 110, 228, 0, 0, 208, 114, - 89, 0, 90, 206, 210, 0, 0, 0, 106, 158, - 0, 189, 0, 169, 0, 175, 178, 177, 222, 0, - 94, 218, 0, 172, 100, 101, 99, 104, 0, 0, - 128, 0, 141, 137, 138, 134, 135, 132, 0, 143, - 144, 142, 140, 139, 136, 145, 133, 0, 0, 248, - 250, 0, 116, 0, 0, 0, 252, 109, 117, 187, + 26, 25, 20, 171, 126, 244, 0, 0, 224, 130, + 89, 0, 90, 222, 226, 0, 0, 0, 122, 174, + 0, 205, 0, 185, 0, 191, 194, 193, 238, 0, + 94, 234, 0, 188, 116, 117, 115, 120, 0, 0, + 144, 0, 157, 153, 154, 150, 151, 148, 0, 159, + 160, 158, 156, 155, 152, 161, 149, 0, 0, 264, + 266, 0, 132, 0, 0, 0, 268, 125, 133, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, - 0, 29, 0, 0, 76, 0, 0, 0, 238, 0, - 239, 236, 0, 237, 233, 234, 235, 0, 0, 16, + 0, 29, 0, 0, 76, 0, 0, 0, 254, 0, + 255, 252, 0, 253, 249, 250, 251, 0, 0, 16, 0, 0, 72, 64, 65, 78, 62, 63, 66, 67, - 0, 230, 130, 226, 95, 90, 92, 0, 211, 113, - 0, 157, 174, 0, 220, 221, 93, 0, 0, 0, - 121, 127, 0, 0, 0, 191, 192, 193, 245, 125, - 0, 190, 194, 228, 188, 0, 119, 0, 181, 0, - 182, 0, 14, 16, 28, 88, 16, 16, 33, 0, - 0, 77, 0, 0, 79, 0, 0, 232, 16, 75, - 80, 0, 0, 61, 48, 0, 0, 0, 111, 0, - 0, 115, 0, 0, 91, 159, 107, 172, 131, 0, - 124, 167, 0, 120, 126, 0, 122, 183, 184, 118, - 0, 90, 0, 53, 226, 73, 73, 0, 0, 0, - 0, 0, 43, 0, 0, 0, 0, 231, 213, 96, - 19, 129, 123, 108, 0, 0, 90, 19, 0, 0, - 0, 18, 68, 68, 0, 0, 71, 76, 0, 0, - 38, 39, 0, 21, 98, 97, 30, 0, 0, 35, - 71, 71, 19, 0, 0, 36, 37, 0, 0, 51, - 0, 0, 71, 160, 0, 19, 54, 41, 42, 0, - 69, 0, 71, 71, 44, 0, 47, 58, 0, 22, - 0, 17, 0, 46, 50, 73, 71, 19, 57, 15, - 32, 0, 0, 49, 0, 68, 0, 59, 70, 0, - 45 + 0, 246, 146, 242, 111, 90, 92, 0, 227, 129, + 0, 173, 190, 0, 236, 237, 93, 0, 0, 0, + 137, 143, 0, 0, 0, 207, 208, 209, 261, 141, + 0, 206, 210, 244, 204, 0, 135, 0, 197, 0, + 198, 0, 14, 16, 28, 88, 16, 16, 33, 0, + 0, 77, 0, 0, 79, 0, 0, 248, 16, 75, + 80, 0, 0, 61, 48, 0, 0, 0, 127, 0, + 0, 131, 109, 0, 91, 175, 123, 188, 147, 0, + 140, 183, 0, 136, 142, 0, 138, 199, 200, 134, + 0, 90, 0, 53, 242, 73, 73, 0, 0, 0, + 0, 0, 43, 0, 0, 0, 0, 247, 229, 97, + 98, 95, 95, 105, 104, 108, 110, 0, 19, 145, + 139, 124, 0, 0, 90, 19, 0, 0, 0, 18, + 68, 68, 0, 0, 71, 76, 0, 0, 38, 39, + 96, 100, 100, 106, 112, 0, 21, 114, 113, 30, + 0, 0, 35, 71, 71, 19, 0, 0, 36, 37, + 0, 0, 51, 0, 0, 71, 101, 103, 99, 107, + 176, 0, 19, 54, 41, 42, 0, 69, 0, 71, + 71, 44, 0, 47, 102, 58, 0, 22, 0, 17, + 0, 46, 50, 73, 71, 19, 57, 15, 32, 0, + 0, 49, 0, 68, 0, 59, 70, 0, 45 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -412, -412, -412, -412, -412, -412, -412, -412, 3, -412, - -60, -37, -412, -15, -412, 490, 410, 10, -412, -412, - -412, -412, -412, -412, -412, -412, -412, -315, -399, -75, - -411, -412, 53, 204, -234, 19, -412, 318, 499, -412, - 456, 165, -329, 305, 134, -412, -412, -6, -36, -412, - -412, -412, -412, -412, -412, -412, -412, 198, -412, -412, - 415, -106, -125, -412, -412, 241, -412, -412, 357, 303, - -41, -39, -412, -412, -412, -412, -412, 9 + -440, -440, -440, -440, -440, -440, -440, -440, 10, -440, + -60, -95, -440, -15, -440, 529, 454, -3, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -315, -439, -103, + -420, -440, 88, 282, -206, 26, -440, 361, 522, -440, + 506, 200, -330, 353, 156, -440, -440, 136, -440, 133, + -440, -440, 177, -440, -440, -6, -36, -440, -440, -440, + -440, -440, -440, -440, -440, 25, -440, -440, 468, -106, + -125, -440, -440, 306, -440, -440, 450, 233, -35, -33, + -440, -440, -440, -440, -440, 4 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 7, 8, 9, 10, 11, 12, 13, 94, 374, - 15, 452, 472, 102, 484, 222, 100, 101, 375, 376, - 303, 457, 505, 433, 447, 499, 508, 96, 475, 212, - 449, 390, 380, 324, 383, 392, 300, 198, 121, 195, - 141, 232, 337, 251, 335, 402, 466, 97, 58, 59, - 333, 287, 60, 61, 62, 63, 64, 65, 117, 66, - 145, 131, 67, 400, 386, 311, 312, 206, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 158 + 15, 460, 485, 102, 501, 222, 100, 101, 375, 376, + 303, 465, 523, 433, 455, 517, 526, 96, 488, 212, + 457, 390, 380, 324, 383, 392, 300, 198, 121, 195, + 141, 232, 337, 251, 471, 442, 443, 497, 444, 445, + 446, 447, 335, 402, 479, 97, 58, 59, 333, 287, + 60, 61, 62, 63, 64, 65, 117, 66, 145, 131, + 67, 400, 386, 311, 312, 206, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 158 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -312,232 +320,215 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 103, 236, 389, 57, 130, 147, 403, 148, 14, 224, - 105, 377, 150, 78, 77, 450, 164, 194, 165, 230, - 77, 95, 110, 110, 110, 77, 110, 110, 112, 113, - 114, 108, 115, 116, 119, 241, 109, 138, 19, 20, - 77, 252, 127, 110, 110, 135, 124, 163, 157, 133, - 134, 108, 497, 348, 476, 139, 109, 118, 110, 110, - 140, 187, 231, 188, 163, 159, -247, -249, -247, -249, - 19, 20, 21, 385, 399, 473, 474, 19, 20, 130, - 125, 126, 187, 391, 188, -251, 396, 397, -247, 223, - -247, -249, 445, -249, 512, 210, -16, 238, 186, -222, - 330, 193, 246, 378, 247, 130, 464, 166, 221, 332, - 197, -221, 227, 55, 361, 350, 518, 467, 199, 235, - 57, -223, 310, 211, 229, 55, -225, -224, 200, 110, - 498, 366, 189, 55, 190, 237, 201, 368, 249, 304, - 305, 306, 307, 309, 370, 317, 318, 202, 320, 321, - 160, 161, 162, 143, 254, 255, 256, 55, 258, 259, - 261, 434, 144, 315, 55, 316, -252, -252, -252, 185, - 160, 161, 162, 160, 161, 162, 160, 161, 162, 298, - 290, 291, 292, 293, 294, 295, 296, 297, 208, 191, - 331, 192, 160, 161, 162, 454, 455, 389, 160, 161, - 162, 240, 408, 213, 209, 160, 161, 162, 323, 325, - 326, 327, 328, 329, 322, 106, 107, 225, 226, 57, - 413, 228, 239, 441, 481, 233, 250, 401, 120, 299, - 252, 340, 123, 302, 203, 308, 343, 128, 415, 319, - 136, 334, 336, 142, 339, 149, 347, 151, 152, 153, - 154, 155, 341, 346, 277, 348, 278, 502, 204, 395, - 279, 280, 281, 160, 161, 162, 282, 205, 162, 55, - 373, 353, 354, 355, 160, 161, 162, 315, 360, 316, - 356, 160, 161, 162, 160, 161, 162, 357, 110, 358, - 362, 160, 161, 162, 160, 161, 162, 130, 381, 325, - 384, 384, 349, 214, 215, 216, 217, 283, 379, 55, - 218, 393, 219, 420, 384, 384, 422, 423, 448, 365, - 253, 398, 111, 111, 111, 363, 111, 111, 430, 160, - 161, 162, 160, 161, 162, -31, 388, 160, 161, 162, - 405, 243, 409, 132, 111, 284, 404, 285, 286, 146, - 410, 230, 160, 161, 162, 338, 424, 57, 111, 111, - 367, 257, 416, -79, 417, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 369, 479, 160, 161, 162, 160, 161, 162, 130, 384, - 418, 453, 207, 437, 456, 487, 488, 419, 460, 461, - 425, 426, 160, 161, 162, 427, 428, 496, 429, 431, - 371, 345, 470, 471, 160, 161, 162, 503, 504, 160, - 161, 162, 482, 384, 384, 462, 432, 170, 171, 132, - 412, 513, 468, 435, 436, 440, 490, 438, -175, 442, - 492, 493, 439, 443, 451, 351, 245, 187, 465, 188, - -175, 381, 384, 179, 180, 459, 444, 489, 506, 181, - 458, 463, 182, 183, 184, 185, 168, 169, 170, 171, - 500, 469, 477, 478, 515, 485, 491, -175, -175, -175, - -175, 507, 520, 494, -175, 384, -175, 495, 288, -175, - 509, 511, 514, 178, 179, 180, -175, -175, -175, -175, - 181, 519, 99, 182, 183, 184, 185, 314, 220, 382, - 480, -175, -175, -175, 301, -175, -175, -175, -175, -175, - -175, -175, -175, -175, -175, -175, 168, 169, 170, 171, - -175, 516, 122, -175, -175, -175, -175, -175, 196, -175, - 421, -252, -175, 170, 171, -214, 160, 161, 162, 344, - 411, 176, 177, 178, 179, 180, 446, -214, 244, 394, - 181, 313, 170, 182, 183, 184, 185, 0, 0, 179, - 180, 0, 364, 0, 0, 181, 0, 0, 182, 183, - 184, 185, 0, 0, -214, -214, -214, -214, 111, 180, - 0, -214, 0, -214, 181, 0, -214, 182, 183, 184, - 185, 0, 0, -214, -214, -214, -214, 160, 161, 162, - 0, 0, 387, 160, 161, 162, 0, 0, -214, -214, - -214, 314, -214, -214, -214, -214, -214, -214, -214, -214, - -214, -214, -214, 406, 0, 0, 0, -214, 0, 407, - -214, -214, -214, -214, -214, 0, -214, -13, 79, -214, - 0, 0, 0, 0, 0, 0, 77, 0, 16, 0, - 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, - 25, 26, 0, 27, 28, 29, 30, 31, 32, 80, - 98, 81, 82, 33, 83, 84, 85, 86, 87, 88, - 170, 171, 0, 89, 90, 91, 92, 34, 0, 35, - 36, 37, 38, 39, 40, 160, 161, 162, 0, 41, - 42, 43, 44, 45, 46, 47, 0, 180, 0, 0, - 0, 0, 181, 48, 0, 182, 183, 184, 185, 0, - 0, 414, 0, 0, 0, 49, 50, 0, 51, 0, - 52, 53, -3, 79, 0, 0, 0, 54, 93, 55, - 56, 77, 0, 16, 0, 17, 18, 19, 20, 21, - 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, - 29, 30, 31, 32, 80, 98, 81, 82, 33, 83, - 84, 85, 86, 87, 88, 0, 0, 0, 89, 90, - 91, 92, 34, 0, 35, 36, 37, 38, 39, 40, - 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, - 47, 180, 0, 0, 0, 0, 181, 0, 48, 182, - 183, 184, 185, 181, 0, 0, 182, 183, 184, 185, - 49, 50, 0, 51, 0, 52, 53, 0, 79, 0, - 0, 0, 54, 93, 55, 56, 77, 372, 16, 0, - 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, - 25, 26, 0, 27, 28, 29, 30, 31, 32, 80, - 98, 81, 82, 33, 83, 84, 85, 86, 87, 88, - 0, 0, 0, 89, 90, 91, 92, 34, 0, 35, - 36, 37, 38, 39, 40, 0, 0, 0, 0, 41, - 42, 43, 44, 45, 46, 47, 1, 2, 3, 4, - 5, 6, 0, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 0, 51, 0, - 52, 53, 0, 79, 0, 0, 0, 54, 93, 55, - 56, 77, 483, 16, 0, 17, 18, 19, 20, 21, - 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, - 29, 30, 31, 32, 80, 98, 81, 82, 33, 83, - 84, 85, 86, 87, 88, 0, 0, 0, 89, 90, - 91, 92, 34, 0, 35, 36, 37, 38, 39, 40, - 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, - 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, + 103, 236, 389, 57, 130, 403, 458, 377, 95, 224, + 105, 147, 150, 148, 77, 230, 164, 194, 165, 118, + 78, 14, 489, 112, 113, 114, 515, 115, 116, 110, + 110, 110, 119, 110, 110, 241, 139, 138, 19, 20, + 21, 140, 106, 107, 133, 134, 19, 20, 157, 127, + 110, 110, 135, 77, 124, 120, 187, 77, 188, 123, + 159, -263, 231, -263, 128, 110, 110, 136, 108, 77, + 142, 125, 149, 109, 151, 152, 153, 154, 155, 130, + 108, 277, 126, 278, -265, 109, -265, 279, 280, 281, + 310, 453, -16, 282, 536, 221, 163, 238, -267, 378, + 330, 385, 210, 530, 516, 130, 477, 166, 246, 252, + 247, 391, 227, 163, 396, 397, -239, 186, 348, 235, + 57, -241, 193, 399, 480, 55, 197, 439, 440, 199, + 237, 229, 200, 55, 283, 187, 110, 188, 249, 304, + 305, 306, 307, 309, -240, 317, 318, 211, 320, 321, + 55, 361, 19, 20, 254, 255, 256, 201, 258, 259, + 261, 202, 55, 160, 161, 162, 208, -238, 243, 315, + 209, 316, 284, 225, 285, 286, -237, 486, 487, 298, + 290, 291, 292, 293, 294, 295, 296, 297, 257, 434, + 331, 240, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 223, 323, 325, + 326, 327, 328, 329, 441, 389, 203, 213, -263, 57, + -263, 322, 226, 462, 463, 239, 228, 401, 143, 332, + -265, 340, -265, 160, 161, 162, 343, 144, 415, 55, + 204, 233, 350, 160, 161, 162, 347, 366, 189, 205, + 190, 55, 111, 111, 111, 250, 111, 111, 368, 395, + 494, 349, 370, 252, 299, 160, 161, 162, 160, 161, + 162, 353, 354, 132, 111, 191, 408, 192, 360, 146, + 302, 308, 413, 315, 319, 316, 339, 449, 111, 111, + 160, 161, 162, 365, 334, 110, 336, 130, 381, 325, + 384, 384, 520, 160, 161, 162, 341, 346, 160, 161, + 162, 393, 348, 420, 384, 384, 422, 423, 456, 160, + 161, 162, 207, 160, 161, 162, 162, 355, 430, 160, + 161, 162, 356, 461, 357, 358, 464, 160, 161, 162, + 468, 469, 409, 160, 161, 162, 362, 405, 160, 161, + 162, 214, 215, 216, 217, 253, 373, 57, 218, 132, + 219, 492, 483, 484, 214, 215, 216, 217, 160, 161, + 162, 218, 495, 219, 363, 379, 245, 411, 170, 171, + 504, 505, 160, 161, 162, 160, 161, 162, 130, 384, + -31, 507, 513, 437, 338, 509, 510, 388, 160, 161, + 162, 55, 398, 404, 179, 180, 521, 522, 345, 230, + 181, -79, 410, 182, 183, 184, 185, 524, 288, 416, + 167, 531, 417, 384, 384, 418, 419, 168, 169, 170, + 171, 424, 425, 475, 533, 426, 427, 314, 428, 431, + 481, 429, 538, 160, 161, 162, 432, 172, 173, 352, + 174, 175, 176, 177, 178, 179, 180, 435, 436, 381, + 384, 181, 438, 478, 182, 183, 184, 185, 448, 452, + 506, 367, 160, 161, 162, 450, 451, 168, 169, 170, + 171, 160, 161, 162, 466, -191, 459, 518, 467, 470, + 473, 160, 161, 162, 187, 474, 188, -191, 476, 482, + 369, 496, 384, 177, 178, 179, 180, 508, 502, 371, + 532, 181, 527, 490, 182, 183, 184, 185, 111, 412, + 491, 514, 525, 511, -191, -191, -191, -191, 160, 161, + 162, -191, 512, -191, 181, 529, -191, 182, 183, 184, + 185, 99, 387, -191, -191, -191, -191, 537, 160, 161, + 162, 314, 220, 493, 351, 122, 534, 301, -191, -191, + -191, -230, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -230, 364, 421, -268, -191, 170, 171, + -191, -191, -191, -191, -191, 180, -191, 382, 196, -191, + 181, 170, 171, 182, 183, 184, 185, 344, 472, 454, + -230, -230, -230, -230, 179, 180, 499, -230, 498, -230, + 181, 244, -230, 182, 183, 184, 185, 0, 180, -230, + -230, -230, -230, 181, 394, 0, 182, 183, 184, 185, + -268, -268, -268, 185, -230, -230, -230, 0, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, 160, + 161, 162, 0, -230, 313, 0, -230, -230, -230, -230, + -230, 0, -230, -13, 79, -230, 0, 0, 0, 0, + 0, 0, 77, 0, 16, 406, 17, 18, 19, 20, + 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, + 28, 29, 30, 31, 32, 80, 98, 81, 82, 33, + 83, 84, 85, 86, 87, 88, 170, 0, 0, 89, + 90, 91, 92, 34, 0, 35, 36, 37, 38, 39, + 40, 160, 161, 162, 0, 41, 42, 43, 44, 45, + 46, 47, 0, 180, 160, 161, 162, 0, 181, 48, + 0, 182, 183, 184, 185, 0, 0, 407, 0, 0, + 0, 49, 50, 0, 51, 0, 52, 53, -3, 79, + 414, 0, 0, 54, 93, 55, 56, 77, 0, 16, + 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, + 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, + 80, 98, 81, 82, 33, 83, 84, 85, 86, 87, + 88, 0, 0, 0, 89, 90, 91, 92, 34, 0, + 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, + 41, 42, 43, 44, 45, 46, 47, 1, 2, 3, + 4, 5, 6, 0, 48, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, + 0, 52, 53, 0, 79, 0, 0, 0, 54, 93, + 55, 56, 77, 372, 16, 0, 17, 18, 19, 20, + 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, + 28, 29, 30, 31, 32, 80, 98, 81, 82, 33, + 83, 84, 85, 86, 87, 88, 0, 0, 0, 89, + 90, 91, 92, 34, 0, 35, 36, 37, 38, 39, + 40, 0, 0, 0, 0, 41, 42, 43, 44, 45, + 46, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 50, 0, 51, 0, 52, 53, 0, 79, 0, - 0, 0, 54, 93, 55, 56, 77, 486, 16, 0, - 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, - 25, 26, 0, 27, 28, 29, 30, 31, 32, 80, - 98, 81, 82, 33, 83, 84, 85, 86, 87, 88, - 0, 0, 0, 89, 90, 91, 92, 34, 0, 35, - 36, 37, 38, 39, 40, 0, 0, 0, 0, 41, - 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, - 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 0, 51, 0, - 52, 53, 0, 79, 0, 0, 0, 54, 93, 55, - 56, 77, 501, 16, 0, 17, 18, 19, 20, 21, - 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, - 29, 30, 31, 32, 80, 98, 81, 82, 33, 83, - 84, 85, 86, 87, 88, 0, 0, 0, 89, 90, - 91, 92, 34, 0, 35, 36, 37, 38, 39, 40, - 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, - 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, + 0, 49, 50, 0, 51, 0, 52, 53, 0, 79, + 0, 0, 0, 54, 93, 55, 56, 77, 500, 16, + 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, + 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, + 80, 98, 81, 82, 33, 83, 84, 85, 86, 87, + 88, 0, 0, 0, 89, 90, 91, 92, 34, 0, + 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, + 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, + 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, + 0, 52, 53, 0, 79, 0, 0, 0, 54, 93, + 55, 56, 77, 503, 16, 0, 17, 18, 19, 20, + 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, + 28, 29, 30, 31, 32, 80, 98, 81, 82, 33, + 83, 84, 85, 86, 87, 88, 0, 0, 0, 89, + 90, 91, 92, 34, 0, 35, 36, 37, 38, 39, + 40, 0, 0, 0, 0, 41, 42, 43, 44, 45, + 46, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 50, 0, 51, 0, 52, 53, 0, 79, 0, - 0, 0, 54, 93, 55, 56, 77, 510, 16, 0, - 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, - 25, 26, 0, 27, 28, 29, 30, 31, 32, 80, - 98, 81, 82, 33, 83, 84, 85, 86, 87, 88, - 0, 0, 0, 89, 90, 91, 92, 34, 0, 35, - 36, 37, 38, 39, 40, 0, 0, 0, 0, 41, - 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, - 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 0, 51, 0, - 52, 53, 0, 79, 0, 0, 0, 54, 93, 55, - 56, 77, 0, 16, 0, 17, 18, 19, 20, 21, - 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, - 29, 30, 31, 32, 80, 98, 81, 82, 33, 83, - 84, 85, 86, 87, 88, 0, 0, 0, 89, 90, - 91, 92, 34, 0, 35, 36, 37, 38, 39, 40, - 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, - 47, 0, 0, 517, 0, 0, 0, 0, 48, 0, + 0, 49, 50, 0, 51, 0, 52, 53, 0, 79, + 0, 0, 0, 54, 93, 55, 56, 77, 519, 16, + 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, + 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, + 80, 98, 81, 82, 33, 83, 84, 85, 86, 87, + 88, 0, 0, 0, 89, 90, 91, 92, 34, 0, + 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, + 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, + 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, + 0, 52, 53, 0, 79, 0, 0, 0, 54, 93, + 55, 56, 77, 528, 16, 0, 17, 18, 19, 20, + 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, + 28, 29, 30, 31, 32, 80, 98, 81, 82, 33, + 83, 84, 85, 86, 87, 88, 0, 0, 0, 89, + 90, 91, 92, 34, 0, 35, 36, 37, 38, 39, + 40, 0, 0, 0, 0, 41, 42, 43, 44, 45, + 46, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 50, 0, 51, 0, 52, 53, 0, 79, 0, - 0, 0, 54, 93, 55, 56, 77, 0, 16, 0, - 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, - 25, 26, 0, 27, 28, 29, 30, 31, 32, 80, - 98, 81, 82, 33, 83, 84, 85, 86, 87, 88, - 0, 0, 0, 89, 90, 91, 92, 34, 0, 35, - 36, 37, 38, 39, 40, 0, 0, 0, 0, 41, - 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, - 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 0, 51, 0, - 52, 53, 0, 79, 0, 0, 0, 54, 93, 55, - 56, 77, 0, 16, 0, 17, 18, 19, 20, 21, + 0, 49, 50, 0, 51, 0, 52, 53, 0, 79, + 0, 0, 0, 54, 93, 55, 56, 77, 0, 16, + 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, + 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, + 80, 98, 81, 82, 33, 83, 84, 85, 86, 87, + 88, 0, 0, 0, 89, 90, 91, 92, 34, 0, + 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, + 41, 42, 43, 44, 45, 46, 47, 0, 0, 535, + 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, + 0, 52, 53, 0, 79, 0, 0, 0, 54, 93, + 55, 56, 77, 0, 16, 0, 17, 18, 19, 20, + 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, + 28, 29, 30, 31, 32, 80, 98, 81, 82, 33, + 83, 84, 85, 86, 87, 88, 0, 0, 0, 89, + 90, 91, 92, 34, 0, 35, 36, 37, 38, 39, + 40, 0, 0, 0, 0, 41, 42, 43, 44, 45, + 46, 47, 0, 0, 0, 0, 0, 0, 0, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 49, 50, 0, 51, 0, 52, 53, 0, 79, + 0, 0, 0, 54, 93, 55, 56, 77, 0, 16, + 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, + 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, + 80, 0, 81, 82, 33, 83, 84, 85, 86, 87, + 88, 0, 0, 0, 89, 90, 91, 92, 34, 0, + 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, + 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, + 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, + 0, 52, 53, 79, 0, 0, 0, 0, 54, 93, + 55, 56, 0, 16, 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, - 29, 30, 31, 32, 80, 0, 81, 82, 33, 83, - 84, 85, 86, 87, 88, 0, 0, 0, 89, 90, - 91, 92, 34, 0, 35, 36, 37, 38, 39, 40, + 29, 30, 31, 32, 0, 0, 0, 0, 33, 0, + 0, -268, 0, 0, 0, 0, 0, 0, 168, 169, + 170, 171, 34, 0, 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, - 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 174, 175, 176, 177, 178, 179, 180, 48, 0, + 0, 0, 181, 0, 0, 182, 183, 184, 185, 0, 49, 50, 0, 51, 0, 52, 53, 79, 0, 0, - 0, 0, 54, 93, 55, 56, 0, 16, 0, 17, + 0, 0, 54, -74, 55, 56, 0, 16, 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, 0, 0, - 0, 0, 33, 0, 0, -252, 0, 0, 0, 0, - 0, 0, 168, 169, 170, 171, 34, 0, 35, 36, + 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, + 168, 169, 170, 171, 0, 0, 34, 0, 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, 41, 42, - 43, 44, 45, 46, 47, 174, 175, 176, 177, 178, - 179, 180, 48, 0, 0, 0, 181, 0, 0, 182, - 183, 184, 185, 0, 49, 50, 0, 51, 0, 52, - 53, 79, 0, 0, 0, 0, 54, -74, 55, 56, - 0, 16, 0, 17, 18, 19, 20, 21, 0, 0, - 22, 23, 24, 25, 26, 0, 27, 28, 29, 30, - 31, 32, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 168, 169, 170, 171, 0, 0, 0, - 34, 0, 35, 36, 37, 38, 39, 40, 0, 0, - 0, 0, 41, 42, 43, 44, 45, 46, 47, 177, - 178, 179, 180, 0, 0, 0, 48, 181, 0, 0, - 182, 183, 184, 185, 0, 0, 0, 0, 49, 50, - 0, 51, 0, 52, 53, 0, 0, 0, 0, -74, - 54, 0, 55, 56, 77, 0, 16, 0, 17, 18, - 19, 20, 21, 0, 0, 129, 23, 24, 25, 26, - 109, 27, 28, 29, 30, 31, 32, 0, 0, 0, - 0, 33, 0, 0, 0, 0, 168, -252, 170, 171, - 0, 0, 0, 0, 0, 34, 0, 35, 36, 37, - 38, 39, 40, 0, 0, 0, 0, 41, 42, 43, - 44, 45, 46, 47, 179, 180, 0, 0, 0, 0, - 181, 48, 0, 182, 183, 184, 185, 0, 0, 0, - 0, 0, 0, 49, 50, 0, 51, 0, 52, 53, - 0, 0, 0, 0, 0, 54, 0, 55, 56, 77, - 0, 16, 0, 17, 18, 19, 20, 21, 0, 0, - 22, 23, 24, 25, 26, 0, 27, 28, 29, 30, - 31, 32, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 168, 169, 170, 171, 0, 0, 0, 0, 0, - 34, 0, 35, 36, 37, 38, 39, 40, 0, 0, - 0, 0, 41, 42, 43, 44, 45, 46, 47, 179, - 180, 0, 0, 0, 0, 181, 48, 0, 182, 183, - 184, 185, 0, 0, 0, 0, 0, 0, 49, 50, - 0, 51, 0, 52, 53, 0, 0, 0, 0, 0, - 54, 0, 55, 56, 16, 104, 17, 18, 19, 20, - 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, - 28, 29, 30, 31, 32, 0, 0, 0, 0, 33, - 214, 215, 216, 217, 0, 0, 0, 218, 0, 219, - 0, 0, 0, 34, 0, 35, 36, 37, 38, 39, - 40, 0, 0, 0, 0, 41, 42, 43, 44, 45, - 46, 47, 0, 0, 160, 161, 162, 0, 0, 48, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 50, 0, 51, 0, 52, 53, 0, 0, - 0, 0, 0, 54, 0, 55, 56, 16, 0, 17, + 43, 44, 45, 46, 47, 176, 177, 178, 179, 180, + 0, 0, 48, 0, 181, 0, 0, 182, 183, 184, + 185, 0, 0, 0, 49, 50, 0, 51, 0, 52, + 53, 0, 0, 0, 0, -74, 54, 0, 55, 56, + 77, 0, 16, 0, 17, 18, 19, 20, 21, 0, + 0, 129, 23, 24, 25, 26, 109, 27, 28, 29, + 30, 31, 32, 0, 0, 0, 0, 33, 0, 0, + 0, 0, 0, 0, 168, 169, 170, 171, 0, 0, + 0, 34, 0, 35, 36, 37, 38, 39, 40, 0, + 0, 0, 0, 41, 42, 43, 44, 45, 46, 47, + 0, 178, 179, 180, 0, 0, 0, 48, 181, 0, + 0, 182, 183, 184, 185, 0, 0, 0, 0, 49, + 50, 0, 51, 0, 52, 53, 0, 0, 0, 0, + 0, 54, 0, 55, 56, 77, 0, 16, 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, 0, 0, - 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 34, 0, 35, 36, + 0, 0, 33, 0, 0, 0, 0, 168, -268, 170, + 171, 0, 0, 0, 0, 0, 34, 0, 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, 41, 42, - 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, - 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, + 43, 44, 45, 46, 47, 179, 180, 0, 0, 0, + 0, 181, 48, 0, 182, 183, 184, 185, 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, 0, 52, - 53, 0, 0, 0, 0, 0, 54, 137, 55, 56, - 16, 0, 17, 18, 19, 20, 21, 0, 0, 22, + 53, 0, 0, 0, 0, 0, 54, 0, 55, 56, + 16, 104, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 33, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, + 168, 169, 170, 171, 0, 0, 0, 0, 0, 34, 0, 35, 36, 37, 38, 39, 40, 0, 0, 0, - 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, - 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, - 51, 0, 52, 53, 0, 0, 0, 0, 156, 54, + 0, 41, 42, 43, 44, 45, 46, 47, 179, 180, + 0, 0, 0, 0, 181, 48, 0, 182, 183, 184, + 185, 0, 0, 0, 0, 0, 0, 49, 50, 0, + 51, 0, 52, 53, 0, 0, 0, 0, 0, 54, 0, 55, 56, 16, 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 33, 0, @@ -547,7 +538,7 @@ static const yytype_int16 yytable[] = 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, 0, 52, 53, 0, 0, 0, - 0, 234, 54, 0, 55, 56, 16, 0, 17, 18, + 0, 0, 54, 137, 55, 56, 16, 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, @@ -556,7 +547,7 @@ static const yytype_int16 yytable[] = 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, 0, 52, 53, - 0, 0, 0, 0, 248, 54, 0, 55, 56, 16, + 0, 0, 0, 0, 156, 54, 0, 55, 56, 16, 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, @@ -565,7 +556,7 @@ static const yytype_int16 yytable[] = 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, - 0, 52, 53, 0, 0, 0, 0, 260, 54, 0, + 0, 52, 53, 0, 0, 0, 0, 234, 54, 0, 55, 56, 16, 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 33, 0, 0, @@ -575,7 +566,7 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, 0, 52, 53, 0, 0, 0, 0, - 289, 54, 0, 55, 56, 16, 0, 17, 18, 19, + 248, 54, 0, 55, 56, 16, 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -584,7 +575,7 @@ static const yytype_int16 yytable[] = 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, 0, 52, 53, 0, - 0, 0, 0, 342, 54, 0, 55, 56, 16, 0, + 0, 0, 0, 260, 54, 0, 55, 56, 16, 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, @@ -593,7 +584,7 @@ static const yytype_int16 yytable[] = 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, 0, - 52, 53, 0, 0, 0, 0, 359, 54, 0, 55, + 52, 53, 0, 0, 0, 0, 289, 54, 0, 55, 56, 16, 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 33, 0, 0, 0, @@ -602,7 +593,7 @@ static const yytype_int16 yytable[] = 0, 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 0, 51, 0, 52, 53, 0, 0, 0, 0, 0, + 0, 51, 0, 52, 53, 0, 0, 0, 0, 342, 54, 0, 55, 56, 16, 0, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 33, @@ -610,250 +601,247 @@ static const yytype_int16 yytable[] = 0, 0, 0, 34, 0, 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 48, - 167, 0, 0, 0, 0, 0, 0, 168, 169, 170, - 171, 49, 50, 0, 51, 0, 52, 53, 0, 0, - 0, 0, 0, 242, 0, 55, 56, 172, 173, 352, - 174, 175, 176, 177, 178, 179, 180, 0, 0, 0, - 0, 181, 167, 0, 182, 183, 184, 185, 0, 168, - 169, 170, 171, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, - 173, 0, 174, 175, 176, 177, 178, 179, 180, 0, - 0, 0, 0, 181, 167, 0, 182, 183, 184, 185, - 0, 168, 169, 170, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 173, 0, 174, 175, 176, 177, 178, 179, - 180, 0, 0, 0, 0, 181, 0, 0, 182, 183, - 184, 185 + 0, 49, 50, 0, 51, 0, 52, 53, 0, 0, + 0, 0, 359, 54, 0, 55, 56, 16, 0, 17, + 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, + 26, 0, 27, 28, 29, 30, 31, 32, 0, 0, + 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 34, 0, 35, 36, + 37, 38, 39, 40, 0, 0, 0, 0, 41, 42, + 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, + 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 50, 0, 51, 0, 52, + 53, 0, 0, 0, 0, 0, 54, 0, 55, 56, + 16, 0, 17, 18, 19, 20, 21, 0, 0, 22, + 23, 24, 25, 26, 0, 27, 28, 29, 30, 31, + 32, 0, 0, 0, 0, 33, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, + 0, 35, 36, 37, 38, 39, 40, 0, 0, 0, + 0, 41, 42, 43, 44, 45, 46, 47, 0, 0, + 0, 0, 0, 0, 0, 48, 167, 0, 0, 0, + 0, 0, 0, 168, 169, 170, 171, 49, 50, 0, + 51, 0, 52, 53, 0, 0, 0, 0, 0, 242, + 0, 55, 56, 172, 173, 0, 174, 175, 176, 177, + 178, 179, 180, 0, 0, 0, 0, 181, 167, 0, + 182, 183, 184, 185, 0, 168, 169, 170, 171, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 173, 0, 174, 175, + 176, 177, 178, 179, 180, 0, 0, 0, 0, 181, + 0, 0, 182, 183, 184, 185 }; static const yytype_int16 yycheck[] = { - 15, 126, 317, 9, 40, 46, 335, 46, 0, 115, - 16, 9, 48, 10, 9, 426, 9, 77, 11, 23, - 9, 11, 19, 20, 21, 9, 23, 24, 19, 20, - 21, 20, 23, 24, 100, 141, 25, 43, 15, 16, - 9, 11, 39, 40, 41, 42, 100, 77, 54, 40, - 41, 20, 23, 11, 453, 20, 25, 11, 55, 56, - 25, 9, 122, 11, 77, 56, 9, 9, 11, 11, - 15, 16, 17, 307, 104, 43, 44, 15, 16, 115, - 100, 100, 9, 317, 11, 9, 320, 321, 9, 12, - 11, 9, 421, 11, 505, 92, 100, 133, 100, 69, - 225, 9, 143, 101, 143, 141, 101, 100, 98, 12, - 20, 69, 118, 102, 103, 12, 515, 446, 100, 125, - 126, 69, 67, 45, 121, 102, 69, 69, 100, 126, - 101, 12, 9, 102, 11, 126, 100, 12, 144, 199, - 200, 201, 202, 203, 12, 205, 206, 100, 208, 209, - 73, 74, 75, 91, 160, 161, 162, 102, 164, 165, - 166, 395, 100, 204, 102, 204, 95, 96, 97, 98, - 73, 74, 75, 73, 74, 75, 73, 74, 75, 194, - 186, 187, 188, 189, 190, 191, 192, 193, 100, 9, - 226, 11, 73, 74, 75, 429, 430, 512, 73, 74, - 75, 101, 12, 101, 100, 73, 74, 75, 214, 215, - 216, 217, 218, 219, 211, 17, 18, 100, 100, 225, - 12, 99, 10, 12, 458, 99, 69, 333, 30, 20, - 11, 237, 34, 20, 67, 91, 242, 39, 363, 100, - 42, 100, 69, 45, 99, 47, 252, 49, 50, 51, - 52, 53, 10, 23, 9, 11, 11, 491, 91, 319, - 15, 16, 17, 73, 74, 75, 21, 100, 75, 102, - 18, 277, 278, 103, 73, 74, 75, 318, 284, 318, - 103, 73, 74, 75, 73, 74, 75, 103, 285, 103, - 103, 73, 74, 75, 73, 74, 75, 333, 304, 305, - 306, 307, 101, 39, 40, 41, 42, 62, 20, 102, - 46, 317, 48, 373, 320, 321, 376, 377, 424, 101, - 99, 99, 19, 20, 21, 100, 23, 24, 388, 73, - 74, 75, 73, 74, 75, 100, 100, 73, 74, 75, - 337, 143, 348, 40, 41, 100, 23, 102, 103, 46, - 10, 23, 73, 74, 75, 99, 20, 363, 55, 56, - 101, 163, 10, 99, 10, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 101, 456, 73, 74, 75, 73, 74, 75, 424, 395, - 10, 428, 89, 399, 431, 470, 471, 10, 435, 436, - 99, 99, 73, 74, 75, 99, 99, 482, 100, 99, - 101, 99, 449, 450, 73, 74, 75, 492, 493, 73, - 74, 75, 459, 429, 430, 440, 101, 60, 61, 126, - 101, 506, 447, 99, 99, 9, 473, 99, 0, 10, - 477, 478, 99, 99, 9, 99, 143, 9, 445, 11, - 12, 457, 458, 86, 87, 99, 101, 472, 495, 92, - 100, 71, 95, 96, 97, 98, 58, 59, 60, 61, - 485, 101, 99, 99, 511, 9, 100, 39, 40, 41, - 42, 70, 519, 101, 46, 491, 48, 99, 185, 51, - 19, 99, 507, 85, 86, 87, 58, 59, 60, 61, - 92, 99, 12, 95, 96, 97, 98, 204, 98, 305, - 457, 73, 74, 75, 196, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 58, 59, 60, 61, - 92, 512, 33, 95, 96, 97, 98, 99, 82, 101, - 375, 58, 104, 60, 61, 0, 73, 74, 75, 244, - 352, 83, 84, 85, 86, 87, 422, 12, 143, 318, - 92, 204, 60, 95, 96, 97, 98, -1, -1, 86, - 87, -1, 99, -1, -1, 92, -1, -1, 95, 96, - 97, 98, -1, -1, 39, 40, 41, 42, 285, 87, - -1, 46, -1, 48, 92, -1, 51, 95, 96, 97, - 98, -1, -1, 58, 59, 60, 61, 73, 74, 75, - -1, -1, 309, 73, 74, 75, -1, -1, 73, 74, - 75, 318, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 99, -1, -1, -1, 92, -1, 99, - 95, 96, 97, 98, 99, -1, 101, 0, 1, 104, - -1, -1, -1, -1, -1, -1, 9, -1, 11, -1, - 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, - 23, 24, -1, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 60, 61, -1, 46, 47, 48, 49, 50, -1, 52, - 53, 54, 55, 56, 57, 73, 74, 75, -1, 62, - 63, 64, 65, 66, 67, 68, -1, 87, -1, -1, - -1, -1, 92, 76, -1, 95, 96, 97, 98, -1, - -1, 99, -1, -1, -1, 88, 89, -1, 91, -1, - 93, 94, 0, 1, -1, -1, -1, 100, 101, 102, - 103, 9, -1, 11, -1, 13, 14, 15, 16, 17, - -1, -1, 20, 21, 22, 23, 24, -1, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, -1, -1, -1, 46, 47, - 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, - -1, -1, -1, -1, 62, 63, 64, 65, 66, 67, - 68, 87, -1, -1, -1, -1, 92, -1, 76, 95, - 96, 97, 98, 92, -1, -1, 95, 96, 97, 98, - 88, 89, -1, 91, -1, 93, 94, -1, 1, -1, - -1, -1, 100, 101, 102, 103, 9, 10, 11, -1, - 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, - 23, 24, -1, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - -1, -1, -1, 46, 47, 48, 49, 50, -1, 52, - 53, 54, 55, 56, 57, -1, -1, -1, -1, 62, - 63, 64, 65, 66, 67, 68, 3, 4, 5, 6, - 7, 8, -1, 76, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 88, 89, -1, 91, -1, - 93, 94, -1, 1, -1, -1, -1, 100, 101, 102, - 103, 9, 10, 11, -1, 13, 14, 15, 16, 17, - -1, -1, 20, 21, 22, 23, 24, -1, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, -1, -1, -1, 46, 47, - 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, - -1, -1, -1, -1, 62, 63, 64, 65, 66, 67, - 68, -1, -1, -1, -1, -1, -1, -1, 76, -1, + 15, 126, 317, 9, 40, 335, 426, 9, 11, 115, + 16, 46, 48, 46, 9, 23, 9, 77, 11, 11, + 10, 0, 461, 19, 20, 21, 23, 23, 24, 19, + 20, 21, 100, 23, 24, 141, 20, 43, 15, 16, + 17, 25, 17, 18, 40, 41, 15, 16, 54, 39, + 40, 41, 42, 9, 100, 30, 9, 9, 11, 34, + 56, 9, 122, 11, 39, 55, 56, 42, 20, 9, + 45, 100, 47, 25, 49, 50, 51, 52, 53, 115, + 20, 9, 100, 11, 9, 25, 11, 15, 16, 17, + 67, 421, 100, 21, 533, 98, 77, 133, 9, 101, + 225, 307, 92, 523, 101, 141, 101, 100, 143, 11, + 143, 317, 118, 77, 320, 321, 69, 100, 11, 125, + 126, 69, 9, 104, 454, 102, 20, 15, 16, 100, + 126, 121, 100, 102, 62, 9, 126, 11, 144, 199, + 200, 201, 202, 203, 69, 205, 206, 45, 208, 209, + 102, 103, 15, 16, 160, 161, 162, 100, 164, 165, + 166, 100, 102, 73, 74, 75, 100, 69, 143, 204, + 100, 204, 100, 100, 102, 103, 69, 43, 44, 194, + 186, 187, 188, 189, 190, 191, 192, 193, 163, 395, + 226, 101, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 12, 214, 215, + 216, 217, 218, 219, 102, 530, 67, 101, 9, 225, + 11, 211, 100, 429, 430, 10, 99, 333, 91, 12, + 9, 237, 11, 73, 74, 75, 242, 100, 363, 102, + 91, 99, 12, 73, 74, 75, 252, 12, 9, 100, + 11, 102, 19, 20, 21, 69, 23, 24, 12, 319, + 466, 101, 12, 11, 20, 73, 74, 75, 73, 74, + 75, 277, 278, 40, 41, 9, 12, 11, 284, 46, + 20, 91, 12, 318, 100, 318, 99, 12, 55, 56, + 73, 74, 75, 101, 100, 285, 69, 333, 304, 305, + 306, 307, 508, 73, 74, 75, 10, 23, 73, 74, + 75, 317, 11, 373, 320, 321, 376, 377, 424, 73, + 74, 75, 89, 73, 74, 75, 75, 103, 388, 73, + 74, 75, 103, 428, 103, 103, 431, 73, 74, 75, + 435, 436, 348, 73, 74, 75, 103, 337, 73, 74, + 75, 39, 40, 41, 42, 99, 18, 363, 46, 126, + 48, 464, 457, 458, 39, 40, 41, 42, 73, 74, + 75, 46, 467, 48, 100, 20, 143, 352, 60, 61, + 483, 484, 73, 74, 75, 73, 74, 75, 424, 395, + 100, 486, 495, 399, 99, 490, 491, 100, 73, 74, + 75, 102, 99, 23, 86, 87, 509, 510, 99, 23, + 92, 99, 10, 95, 96, 97, 98, 512, 185, 10, + 51, 524, 10, 429, 430, 10, 10, 58, 59, 60, + 61, 20, 99, 448, 529, 99, 99, 204, 99, 99, + 455, 100, 537, 73, 74, 75, 101, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 99, 99, 465, + 466, 92, 99, 453, 95, 96, 97, 98, 9, 101, + 485, 101, 73, 74, 75, 10, 99, 58, 59, 60, + 61, 73, 74, 75, 100, 0, 9, 502, 99, 25, + 77, 73, 74, 75, 9, 99, 11, 12, 71, 101, + 101, 78, 508, 84, 85, 86, 87, 100, 9, 101, + 525, 92, 19, 99, 95, 96, 97, 98, 285, 101, + 99, 496, 70, 101, 39, 40, 41, 42, 73, 74, + 75, 46, 99, 48, 92, 99, 51, 95, 96, 97, + 98, 12, 309, 58, 59, 60, 61, 99, 73, 74, + 75, 318, 98, 465, 99, 33, 530, 196, 73, 74, + 75, 0, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 12, 99, 375, 58, 92, 60, 61, + 95, 96, 97, 98, 99, 87, 101, 305, 82, 104, + 92, 60, 61, 95, 96, 97, 98, 244, 442, 422, + 39, 40, 41, 42, 86, 87, 473, 46, 472, 48, + 92, 143, 51, 95, 96, 97, 98, -1, 87, 58, + 59, 60, 61, 92, 318, -1, 95, 96, 97, 98, + 95, 96, 97, 98, 73, 74, 75, -1, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 73, + 74, 75, -1, 92, 204, -1, 95, 96, 97, 98, + 99, -1, 101, 0, 1, 104, -1, -1, -1, -1, + -1, -1, 9, -1, 11, 99, 13, 14, 15, 16, + 17, -1, -1, 20, 21, 22, 23, 24, -1, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 60, -1, -1, 46, + 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, + 57, 73, 74, 75, -1, 62, 63, 64, 65, 66, + 67, 68, -1, 87, 73, 74, 75, -1, 92, 76, + -1, 95, 96, 97, 98, -1, -1, 99, -1, -1, + -1, 88, 89, -1, 91, -1, 93, 94, 0, 1, + 99, -1, -1, 100, 101, 102, 103, 9, -1, 11, + -1, 13, 14, 15, 16, 17, -1, -1, 20, 21, + 22, 23, 24, -1, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, -1, -1, -1, 46, 47, 48, 49, 50, -1, + 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, + 62, 63, 64, 65, 66, 67, 68, 3, 4, 5, + 6, 7, 8, -1, 76, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 88, 89, -1, 91, + -1, 93, 94, -1, 1, -1, -1, -1, 100, 101, + 102, 103, 9, 10, 11, -1, 13, 14, 15, 16, + 17, -1, -1, 20, 21, 22, 23, 24, -1, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, -1, -1, -1, 46, + 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, -1, -1, 62, 63, 64, 65, 66, + 67, 68, -1, -1, -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 88, 89, -1, 91, -1, 93, 94, -1, 1, -1, - -1, -1, 100, 101, 102, 103, 9, 10, 11, -1, - 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, - 23, 24, -1, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - -1, -1, -1, 46, 47, 48, 49, 50, -1, 52, - 53, 54, 55, 56, 57, -1, -1, -1, -1, 62, - 63, 64, 65, 66, 67, 68, -1, -1, -1, -1, - -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 88, 89, -1, 91, -1, - 93, 94, -1, 1, -1, -1, -1, 100, 101, 102, - 103, 9, 10, 11, -1, 13, 14, 15, 16, 17, - -1, -1, 20, 21, 22, 23, 24, -1, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, -1, -1, -1, 46, 47, - 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, - -1, -1, -1, -1, 62, 63, 64, 65, 66, 67, - 68, -1, -1, -1, -1, -1, -1, -1, 76, -1, + -1, 88, 89, -1, 91, -1, 93, 94, -1, 1, + -1, -1, -1, 100, 101, 102, 103, 9, 10, 11, + -1, 13, 14, 15, 16, 17, -1, -1, 20, 21, + 22, 23, 24, -1, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, -1, -1, -1, 46, 47, 48, 49, 50, -1, + 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, + 62, 63, 64, 65, 66, 67, 68, -1, -1, -1, + -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 88, 89, -1, 91, + -1, 93, 94, -1, 1, -1, -1, -1, 100, 101, + 102, 103, 9, 10, 11, -1, 13, 14, 15, 16, + 17, -1, -1, 20, 21, 22, 23, 24, -1, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, -1, -1, -1, 46, + 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, -1, -1, 62, 63, 64, 65, 66, + 67, 68, -1, -1, -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 88, 89, -1, 91, -1, 93, 94, -1, 1, -1, - -1, -1, 100, 101, 102, 103, 9, 10, 11, -1, - 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, - 23, 24, -1, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - -1, -1, -1, 46, 47, 48, 49, 50, -1, 52, - 53, 54, 55, 56, 57, -1, -1, -1, -1, 62, - 63, 64, 65, 66, 67, 68, -1, -1, -1, -1, - -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 88, 89, -1, 91, -1, - 93, 94, -1, 1, -1, -1, -1, 100, 101, 102, - 103, 9, -1, 11, -1, 13, 14, 15, 16, 17, - -1, -1, 20, 21, 22, 23, 24, -1, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, -1, -1, -1, 46, 47, - 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, - -1, -1, -1, -1, 62, 63, 64, 65, 66, 67, - 68, -1, -1, 71, -1, -1, -1, -1, 76, -1, + -1, 88, 89, -1, 91, -1, 93, 94, -1, 1, + -1, -1, -1, 100, 101, 102, 103, 9, 10, 11, + -1, 13, 14, 15, 16, 17, -1, -1, 20, 21, + 22, 23, 24, -1, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, -1, -1, -1, 46, 47, 48, 49, 50, -1, + 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, + 62, 63, 64, 65, 66, 67, 68, -1, -1, -1, + -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 88, 89, -1, 91, + -1, 93, 94, -1, 1, -1, -1, -1, 100, 101, + 102, 103, 9, 10, 11, -1, 13, 14, 15, 16, + 17, -1, -1, 20, 21, 22, 23, 24, -1, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, -1, -1, -1, 46, + 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, -1, -1, 62, 63, 64, 65, 66, + 67, 68, -1, -1, -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 88, 89, -1, 91, -1, 93, 94, -1, 1, -1, - -1, -1, 100, 101, 102, 103, 9, -1, 11, -1, - 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, - 23, 24, -1, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - -1, -1, -1, 46, 47, 48, 49, 50, -1, 52, - 53, 54, 55, 56, 57, -1, -1, -1, -1, 62, - 63, 64, 65, 66, 67, 68, -1, -1, -1, -1, - -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 88, 89, -1, 91, -1, - 93, 94, -1, 1, -1, -1, -1, 100, 101, 102, - 103, 9, -1, 11, -1, 13, 14, 15, 16, 17, + -1, 88, 89, -1, 91, -1, 93, 94, -1, 1, + -1, -1, -1, 100, 101, 102, 103, 9, -1, 11, + -1, 13, 14, 15, 16, 17, -1, -1, 20, 21, + 22, 23, 24, -1, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, -1, -1, -1, 46, 47, 48, 49, 50, -1, + 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, + 62, 63, 64, 65, 66, 67, 68, -1, -1, 71, + -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 88, 89, -1, 91, + -1, 93, 94, -1, 1, -1, -1, -1, 100, 101, + 102, 103, 9, -1, 11, -1, 13, 14, 15, 16, + 17, -1, -1, 20, 21, 22, 23, 24, -1, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, -1, -1, -1, 46, + 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, + 57, -1, -1, -1, -1, 62, 63, 64, 65, 66, + 67, 68, -1, -1, -1, -1, -1, -1, -1, 76, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 88, 89, -1, 91, -1, 93, 94, -1, 1, + -1, -1, -1, 100, 101, 102, 103, 9, -1, 11, + -1, 13, 14, 15, 16, 17, -1, -1, 20, 21, + 22, 23, 24, -1, 26, 27, 28, 29, 30, 31, + 32, -1, 34, 35, 36, 37, 38, 39, 40, 41, + 42, -1, -1, -1, 46, 47, 48, 49, 50, -1, + 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, + 62, 63, 64, 65, 66, 67, 68, -1, -1, -1, + -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 88, 89, -1, 91, + -1, 93, 94, 1, -1, -1, -1, -1, 100, 101, + 102, 103, -1, 11, -1, 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, 23, 24, -1, 26, 27, - 28, 29, 30, 31, 32, -1, 34, 35, 36, 37, - 38, 39, 40, 41, 42, -1, -1, -1, 46, 47, - 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, + 28, 29, 30, 31, -1, -1, -1, -1, 36, -1, + -1, 51, -1, -1, -1, -1, -1, -1, 58, 59, + 60, 61, 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, 62, 63, 64, 65, 66, 67, - 68, -1, -1, -1, -1, -1, -1, -1, 76, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 68, 81, 82, 83, 84, 85, 86, 87, 76, -1, + -1, -1, 92, -1, -1, 95, 96, 97, 98, -1, 88, 89, -1, 91, -1, 93, 94, 1, -1, -1, -1, -1, 100, 101, 102, 103, -1, 11, -1, 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, 23, 24, -1, 26, 27, 28, 29, 30, 31, -1, -1, - -1, -1, 36, -1, -1, 51, -1, -1, -1, -1, - -1, -1, 58, 59, 60, 61, 50, -1, 52, 53, + -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, + 58, 59, 60, 61, -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, 62, 63, - 64, 65, 66, 67, 68, 81, 82, 83, 84, 85, - 86, 87, 76, -1, -1, -1, 92, -1, -1, 95, - 96, 97, 98, -1, 88, 89, -1, 91, -1, 93, - 94, 1, -1, -1, -1, -1, 100, 101, 102, 103, - -1, 11, -1, 13, 14, 15, 16, 17, -1, -1, - 20, 21, 22, 23, 24, -1, 26, 27, 28, 29, - 30, 31, -1, -1, -1, -1, 36, -1, -1, -1, - -1, -1, -1, 58, 59, 60, 61, -1, -1, -1, - 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, - -1, -1, 62, 63, 64, 65, 66, 67, 68, 84, - 85, 86, 87, -1, -1, -1, 76, 92, -1, -1, - 95, 96, 97, 98, -1, -1, -1, -1, 88, 89, - -1, 91, -1, 93, 94, -1, -1, -1, -1, 99, - 100, -1, 102, 103, 9, -1, 11, -1, 13, 14, - 15, 16, 17, -1, -1, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, -1, -1, -1, - -1, 36, -1, -1, -1, -1, 58, 59, 60, 61, - -1, -1, -1, -1, -1, 50, -1, 52, 53, 54, - 55, 56, 57, -1, -1, -1, -1, 62, 63, 64, - 65, 66, 67, 68, 86, 87, -1, -1, -1, -1, - 92, 76, -1, 95, 96, 97, 98, -1, -1, -1, - -1, -1, -1, 88, 89, -1, 91, -1, 93, 94, - -1, -1, -1, -1, -1, 100, -1, 102, 103, 9, - -1, 11, -1, 13, 14, 15, 16, 17, -1, -1, - 20, 21, 22, 23, 24, -1, 26, 27, 28, 29, - 30, 31, -1, -1, -1, -1, 36, -1, -1, -1, - -1, 58, 59, 60, 61, -1, -1, -1, -1, -1, - 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, - -1, -1, 62, 63, 64, 65, 66, 67, 68, 86, - 87, -1, -1, -1, -1, 92, 76, -1, 95, 96, - 97, 98, -1, -1, -1, -1, -1, -1, 88, 89, - -1, 91, -1, 93, 94, -1, -1, -1, -1, -1, - 100, -1, 102, 103, 11, 12, 13, 14, 15, 16, - 17, -1, -1, 20, 21, 22, 23, 24, -1, 26, - 27, 28, 29, 30, 31, -1, -1, -1, -1, 36, - 39, 40, 41, 42, -1, -1, -1, 46, -1, 48, - -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, - 57, -1, -1, -1, -1, 62, 63, 64, 65, 66, - 67, 68, -1, -1, 73, 74, 75, -1, -1, 76, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 88, 89, -1, 91, -1, 93, 94, -1, -1, - -1, -1, -1, 100, -1, 102, 103, 11, -1, 13, + 64, 65, 66, 67, 68, 83, 84, 85, 86, 87, + -1, -1, 76, -1, 92, -1, -1, 95, 96, 97, + 98, -1, -1, -1, 88, 89, -1, 91, -1, 93, + 94, -1, -1, -1, -1, 99, 100, -1, 102, 103, + 9, -1, 11, -1, 13, 14, 15, 16, 17, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, -1, -1, -1, -1, 36, -1, -1, + -1, -1, -1, -1, 58, 59, 60, 61, -1, -1, + -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, + -1, -1, -1, 62, 63, 64, 65, 66, 67, 68, + -1, 85, 86, 87, -1, -1, -1, 76, 92, -1, + -1, 95, 96, 97, 98, -1, -1, -1, -1, 88, + 89, -1, 91, -1, 93, 94, -1, -1, -1, -1, + -1, 100, -1, 102, 103, 9, -1, 11, -1, 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, 23, 24, -1, 26, 27, 28, 29, 30, 31, -1, -1, - -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 50, -1, 52, 53, + -1, -1, 36, -1, -1, -1, -1, 58, 59, 60, + 61, -1, -1, -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, 62, 63, - 64, 65, 66, 67, 68, -1, -1, -1, -1, -1, - -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, + 64, 65, 66, 67, 68, 86, 87, -1, -1, -1, + -1, 92, 76, -1, 95, 96, 97, 98, -1, -1, -1, -1, -1, -1, 88, 89, -1, 91, -1, 93, - 94, -1, -1, -1, -1, -1, 100, 101, 102, 103, - 11, -1, 13, 14, 15, 16, 17, -1, -1, 20, + 94, -1, -1, -1, -1, -1, 100, -1, 102, 103, + 11, 12, 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, 23, 24, -1, 26, 27, 28, 29, 30, 31, -1, -1, -1, -1, 36, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 50, + 58, 59, 60, 61, -1, -1, -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, -1, - -1, 62, 63, 64, 65, 66, 67, 68, -1, -1, - -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 88, 89, -1, - 91, -1, 93, 94, -1, -1, -1, -1, 99, 100, + -1, 62, 63, 64, 65, 66, 67, 68, 86, 87, + -1, -1, -1, -1, 92, 76, -1, 95, 96, 97, + 98, -1, -1, -1, -1, -1, -1, 88, 89, -1, + 91, -1, 93, 94, -1, -1, -1, -1, -1, 100, -1, 102, 103, 11, -1, 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, 23, 24, -1, 26, 27, 28, 29, 30, 31, -1, -1, -1, -1, 36, -1, @@ -863,7 +851,7 @@ static const yytype_int16 yycheck[] = 68, -1, -1, -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 88, 89, -1, 91, -1, 93, 94, -1, -1, -1, - -1, 99, 100, -1, 102, 103, 11, -1, 13, 14, + -1, -1, 100, 101, 102, 103, 11, -1, 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, 23, 24, -1, 26, 27, 28, 29, 30, 31, -1, -1, -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, @@ -918,7 +906,7 @@ static const yytype_int16 yycheck[] = -1, -1, 62, 63, 64, 65, 66, 67, 68, -1, -1, -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 88, 89, - -1, 91, -1, 93, 94, -1, -1, -1, -1, -1, + -1, 91, -1, 93, 94, -1, -1, -1, -1, 99, 100, -1, 102, 103, 11, -1, 13, 14, 15, 16, 17, -1, -1, 20, 21, 22, 23, 24, -1, 26, 27, 28, 29, 30, 31, -1, -1, -1, -1, 36, @@ -926,20 +914,34 @@ static const yytype_int16 yycheck[] = -1, -1, -1, 50, -1, 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, 62, 63, 64, 65, 66, 67, 68, -1, -1, -1, -1, -1, -1, -1, 76, - 51, -1, -1, -1, -1, -1, -1, 58, 59, 60, - 61, 88, 89, -1, 91, -1, 93, 94, -1, -1, - -1, -1, -1, 100, -1, 102, 103, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, -1, -1, -1, - -1, 92, 51, -1, 95, 96, 97, 98, -1, 58, - 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 78, - 79, -1, 81, 82, 83, 84, 85, 86, 87, -1, - -1, -1, -1, 92, 51, -1, 95, 96, 97, 98, - -1, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 79, -1, 81, 82, 83, 84, 85, 86, - 87, -1, -1, -1, -1, 92, -1, -1, 95, 96, - 97, 98 + -1, 88, 89, -1, 91, -1, 93, 94, -1, -1, + -1, -1, 99, 100, -1, 102, 103, 11, -1, 13, + 14, 15, 16, 17, -1, -1, 20, 21, 22, 23, + 24, -1, 26, 27, 28, 29, 30, 31, -1, -1, + -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 50, -1, 52, 53, + 54, 55, 56, 57, -1, -1, -1, -1, 62, 63, + 64, 65, 66, 67, 68, -1, -1, -1, -1, -1, + -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 88, 89, -1, 91, -1, 93, + 94, -1, -1, -1, -1, -1, 100, -1, 102, 103, + 11, -1, 13, 14, 15, 16, 17, -1, -1, 20, + 21, 22, 23, 24, -1, 26, 27, 28, 29, 30, + 31, -1, -1, -1, -1, 36, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 50, + -1, 52, 53, 54, 55, 56, 57, -1, -1, -1, + -1, 62, 63, 64, 65, 66, 67, 68, -1, -1, + -1, -1, -1, -1, -1, 76, 51, -1, -1, -1, + -1, -1, -1, 58, 59, 60, 61, 88, 89, -1, + 91, -1, 93, 94, -1, -1, -1, -1, -1, 100, + -1, 102, 103, 78, 79, -1, 81, 82, 83, 84, + 85, 86, 87, -1, -1, -1, -1, 92, 51, -1, + 95, 96, 97, 98, -1, 58, 59, 60, 61, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 79, -1, 81, 82, + 83, 84, 85, 86, 87, -1, -1, -1, -1, 92, + -1, -1, 95, 96, 97, 98 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -951,54 +953,55 @@ static const yytype_uint8 yystos[] = 16, 17, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 36, 50, 52, 53, 54, 55, 56, 57, 62, 63, 64, 65, 66, 67, 68, 76, 88, - 89, 91, 93, 94, 100, 102, 103, 152, 153, 154, - 157, 158, 159, 160, 161, 162, 164, 167, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 9, 113, 1, + 89, 91, 93, 94, 100, 102, 103, 160, 161, 162, + 165, 166, 167, 168, 169, 170, 172, 175, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 9, 113, 1, 32, 34, 35, 37, 38, 39, 40, 41, 42, 46, - 47, 48, 49, 101, 113, 122, 132, 152, 33, 120, - 121, 122, 118, 118, 12, 152, 162, 162, 20, 25, - 113, 174, 182, 182, 182, 182, 182, 163, 11, 100, - 162, 143, 143, 162, 100, 100, 100, 113, 162, 20, - 153, 166, 174, 182, 182, 113, 162, 101, 152, 20, - 25, 145, 162, 91, 100, 165, 174, 175, 176, 162, - 153, 162, 162, 162, 162, 162, 99, 152, 182, 182, + 47, 48, 49, 101, 113, 122, 132, 160, 33, 120, + 121, 122, 118, 118, 12, 160, 170, 170, 20, 25, + 113, 182, 190, 190, 190, 190, 190, 171, 11, 100, + 170, 143, 143, 170, 100, 100, 100, 113, 170, 20, + 161, 174, 182, 190, 190, 113, 170, 101, 160, 20, + 25, 145, 170, 91, 100, 173, 182, 183, 184, 170, + 161, 170, 170, 170, 170, 170, 99, 160, 190, 190, 73, 74, 75, 77, 9, 11, 100, 51, 58, 59, 60, 61, 78, 79, 81, 82, 83, 84, 85, 86, 87, 92, 95, 96, 97, 98, 100, 9, 11, 9, 11, 9, 11, 9, 115, 144, 145, 20, 142, 100, - 100, 100, 100, 67, 91, 100, 172, 174, 100, 100, + 100, 100, 100, 67, 91, 100, 180, 182, 100, 100, 113, 45, 134, 101, 39, 40, 41, 42, 46, 48, - 121, 122, 120, 12, 166, 100, 100, 152, 99, 113, - 23, 115, 146, 99, 99, 152, 167, 182, 153, 10, - 101, 166, 100, 162, 165, 174, 175, 176, 99, 152, - 69, 148, 11, 99, 152, 152, 152, 162, 152, 152, - 99, 152, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 9, 11, 15, - 16, 17, 21, 62, 100, 102, 103, 156, 174, 99, - 152, 152, 152, 152, 152, 152, 152, 152, 118, 20, + 121, 122, 120, 12, 174, 100, 100, 160, 99, 113, + 23, 115, 146, 99, 99, 160, 175, 190, 161, 10, + 101, 174, 100, 170, 173, 182, 183, 184, 99, 160, + 69, 148, 11, 99, 160, 160, 160, 170, 160, 160, + 99, 160, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 9, 11, 15, + 16, 17, 21, 62, 100, 102, 103, 164, 182, 99, + 160, 160, 160, 160, 160, 160, 160, 160, 118, 20, 141, 142, 20, 125, 115, 115, 115, 115, 91, 115, - 67, 170, 171, 173, 174, 175, 176, 115, 115, 100, - 115, 115, 113, 152, 138, 152, 152, 152, 152, 152, - 167, 153, 12, 155, 100, 149, 69, 147, 99, 99, - 152, 10, 99, 152, 148, 99, 23, 152, 11, 101, - 12, 99, 80, 152, 152, 103, 103, 103, 103, 99, - 152, 103, 103, 100, 99, 101, 12, 101, 12, 101, + 67, 178, 179, 181, 182, 183, 184, 115, 115, 100, + 115, 115, 113, 160, 138, 160, 160, 160, 160, 160, + 175, 161, 12, 163, 100, 157, 69, 147, 99, 99, + 160, 10, 99, 160, 148, 99, 23, 160, 11, 101, + 12, 99, 80, 160, 160, 103, 103, 103, 103, 99, + 160, 103, 103, 100, 99, 101, 12, 101, 12, 101, 12, 101, 10, 18, 114, 123, 124, 9, 101, 20, - 137, 152, 138, 139, 152, 139, 169, 174, 100, 132, - 136, 139, 140, 152, 170, 115, 139, 139, 99, 104, - 168, 166, 150, 147, 23, 113, 99, 99, 12, 152, - 10, 162, 101, 12, 99, 167, 10, 10, 10, 10, + 137, 160, 138, 139, 160, 139, 177, 182, 100, 132, + 136, 139, 140, 160, 178, 115, 139, 139, 99, 104, + 176, 174, 158, 147, 23, 113, 99, 99, 12, 160, + 10, 170, 101, 12, 99, 175, 10, 10, 10, 10, 115, 146, 115, 115, 20, 99, 99, 99, 99, 100, - 115, 99, 101, 128, 139, 99, 99, 152, 99, 99, - 9, 12, 10, 99, 101, 147, 149, 129, 166, 135, - 135, 9, 116, 116, 139, 139, 116, 126, 100, 99, - 116, 116, 118, 71, 101, 113, 151, 147, 118, 101, - 116, 116, 117, 43, 44, 133, 133, 99, 99, 134, - 137, 139, 116, 10, 119, 9, 10, 134, 134, 118, - 116, 100, 116, 116, 101, 99, 134, 23, 101, 130, - 118, 10, 139, 134, 134, 127, 116, 70, 131, 19, - 10, 99, 135, 134, 118, 116, 140, 71, 133, 99, - 116 + 115, 99, 101, 128, 139, 99, 99, 160, 99, 15, + 16, 102, 150, 151, 153, 154, 155, 156, 9, 12, + 10, 99, 101, 147, 157, 129, 174, 135, 135, 9, + 116, 116, 139, 139, 116, 126, 100, 99, 116, 116, + 25, 149, 149, 77, 99, 118, 71, 101, 113, 159, + 147, 118, 101, 116, 116, 117, 43, 44, 133, 133, + 99, 99, 134, 137, 139, 116, 78, 152, 152, 154, + 10, 119, 9, 10, 134, 134, 118, 116, 100, 116, + 116, 101, 99, 134, 170, 23, 101, 130, 118, 10, + 139, 134, 134, 127, 116, 70, 131, 19, 10, 99, + 135, 134, 118, 116, 140, 71, 133, 99, 116 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -1013,23 +1016,25 @@ static const yytype_uint8 yyr1[] = 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 135, 136, 136, 137, 137, 138, 139, 140, 141, 141, 142, 143, 144, 145, 145, 146, 146, - 147, 147, 147, 148, 148, 150, 149, 151, 151, 152, - 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, - 154, 154, 154, 154, 155, 154, 156, 156, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, - 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, - 160, 161, 161, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 163, 162, 162, 162, 162, 162, 164, 164, - 164, 165, 165, 165, 165, 165, 166, 166, 167, 167, - 168, 168, 169, 170, 170, 170, 171, 171, 172, 172, - 173, 174, 175, 176, 177, 177, 178, 179, 179, 180, - 180, 181, 181, 182, 182, 182, 182 + 147, 147, 147, 148, 148, 149, 149, 150, 150, 151, + 152, 152, 152, 153, 154, 154, 155, 155, 155, 156, + 156, 158, 157, 159, 159, 160, 160, 160, 160, 161, + 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, + 163, 162, 164, 164, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 168, 168, 168, 168, 168, 168, 169, 169, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, + 170, 170, 170, 170, 172, 172, 172, 173, 173, 173, + 173, 173, 174, 174, 175, 175, 176, 176, 177, 178, + 178, 178, 179, 179, 180, 180, 181, 182, 183, 184, + 185, 185, 186, 187, 187, 188, 188, 189, 189, 190, + 190, 190, 190 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1044,23 +1049,25 @@ static const yytype_uint8 yyr2[] = 1, 1, 3, 3, 3, 3, 3, 3, 0, 2, 6, 0, 2, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 2, 1, 2, 1, 0, 3, 1, 1, 3, - 3, 3, 1, 2, 3, 1, 3, 5, 6, 3, - 3, 5, 2, 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, 3, 3, 3, 3, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 2, 4, 3, 5, - 8, 2, 2, 1, 1, 1, 1, 5, 2, 3, - 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, 1, 3, 2, - 4, 3, 2, 1, 1, 1, 0, 1, 0, 1, - 0, 2, 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 + 0, 2, 1, 2, 1, 0, 1, 1, 1, 3, + 0, 1, 2, 3, 1, 1, 2, 3, 1, 0, + 1, 0, 4, 1, 1, 3, 3, 3, 1, 2, + 3, 1, 3, 5, 6, 3, 3, 5, 2, 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, 3, 3, + 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 3, 2, 4, 3, 5, 8, 2, 2, 1, + 1, 1, 1, 5, 2, 3, 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, 1, 3, 2, 4, 3, 2, 1, + 1, 1, 0, 1, 0, 1, 0, 2, 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 { @@ -1091,15 +1098,17 @@ static const toketypes yy_type_tab[] = 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_ival, 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_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_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_opval, toketype_ival, 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_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: - * fba24dfc68a3a84c9ae95cb9e14cc156ac487e6f3228cdf84c166d3cd820e59a perly.y + * 719f2ad40259ac9c064749d399f2c7d1e1131abbc8c1f1ec0558cac2d8f2bc4c perly.y * 3e1dff60f26df8933d7aed0c0e87177a0f022c14800c0707eb62a7db4196ac98 regen_perly.pl * ex: set ro: */ @@ -74,7 +74,10 @@ %type <opval> formname subname proto optsubbody cont my_scalar my_var %type <opval> refgen_topic formblock %type <opval> subattrlist myattrlist myattrterm myterm -%type <opval> subsignature termbinop termunop anonymous termdo +%type <opval> termbinop termunop anonymous termdo +%type <ival> sigslurpsigil +%type <opval> sigvarname sigdefault sigscalarelem sigslurpelem +%type <opval> sigelem siglist siglistornull subsignature %type <opval> formstmtseq formline formarg %nonassoc <ival> PREC_LOW @@ -628,25 +631,268 @@ myattrlist: COLONATTR THING { $$ = (OP*)NULL; } ; -/* Subroutine signature */ -subsignature: '(' - { - /* We shouldn't get here otherwise */ - assert(FEATURE_SIGNATURES_IS_ENABLED); - Perl_ck_warner_d(aTHX_ - packWARN(WARN_EXPERIMENTAL__SIGNATURES), - "The signatures feature is experimental"); - $<opval>$ = parse_subsignature(); + +/* -------------------------------------- + * subroutine signature parsing + */ + +/* the '' or 'foo' part of a '$' or '@foo' etc signature variable */ +sigvarname: /* NULL */ + { $$ = (OP*)NULL; } + | PRIVATEREF + { + $$ = $1; + PL_parser->in_my = 0; + } + ; + +sigslurpsigil: + '@' + { $$ = '@'; } + | '%' + { $$ = '%'; } + +/* @, %, @foo, %foo */ +sigslurpelem: sigslurpsigil sigvarname sigdefault/* def only to catch errors */ + { + I32 sigil = $1; + OP *var = $2; + OP *defexpr = $3; + int type = (sigil == '@' ? OP_PADAV : OP_PADHV); + + if (PL_parser->sig_slurpy) + yyerror("Multiple slurpy parameters not allowed"); + PL_parser->sig_slurpy = sigil; + + if (defexpr) + yyerror("a slurpy parameter may not have " + "a default value"); + + if (var) { + OP *slice; + + var->op_type = type; + var->op_ppaddr = PL_ppaddr[type]; + var->op_flags = (OPf_WANT_LIST | OPf_MOD); + var->op_private = OPpLVAL_INTRO; + + slice = PL_parser->sig_elems + ? op_prepend_elem(OP_ASLICE, + newOP(OP_PUSHMARK, 0), + newLISTOP(OP_ASLICE, 0, + list(newRANGE(0, + newSVOP(OP_CONST, 0, + newSViv(PL_parser->sig_elems)), + newUNOP(OP_AV2ARYLEN, 0, + ref(newUNOP(OP_RV2AV, 0, + newGVOP(OP_GV, 0, PL_defgv)), + OP_AV2ARYLEN)))), + ref(newUNOP(OP_RV2AV, 0, + newGVOP(OP_GV, 0, PL_defgv)), + OP_ASLICE))) + : newUNOP(OP_RV2AV, 0, newGVOP(OP_GV, 0, PL_defgv)); + $$ = newSTATEOP(0, NULL, + newASSIGNOP(OPf_STACKED, var, 0, slice)); + } + else + $$ = (OP*)NULL; + } + ; + +/* default part of sub signature scalar element: i.e. '= default_expr' */ +sigdefault: /* NULL */ + { $$ = (OP*)NULL; } + | ASSIGNOP + { $$ = newOP(OP_NULL, 0); } + | ASSIGNOP term + { $$ = $2; } + + +/* subroutine signature scalar element: e.g. '$x', '$=', '$x = $default' */ +sigscalarelem: + '$' sigvarname sigdefault + { + OP *var = $2; + OP *defexpr = $3; + OP *argn = NULL; + OP *expr = NULL; + + if (PL_parser->sig_slurpy) + yyerror("Slurpy parameter not last"); + + PL_parser->sig_elems++; + + if (var) { + var->op_type = OP_PADSV; + var->op_ppaddr = PL_ppaddr[OP_PADSV]; + var->op_flags = (OPf_WANT_SCALAR | OPf_MOD); + var->op_private = OPpLVAL_INTRO; + } + + /* $_[N] */ + argn = newBINOP(OP_AELEM, 0, + ref(newUNOP(OP_RV2AV, 0, + newGVOP(OP_GV, 0, PL_defgv)), + OP_RV2AV), + newSVOP(OP_CONST, 0, + newSViv(PL_parser->sig_elems - 1))); + + if (defexpr) { + PL_parser->sig_optelems++; + /* is it '$var=undef', '$=' ? */ + if ( ( defexpr->op_type == OP_NULL + || defexpr->op_type == OP_UNDEF) + && !(defexpr->op_flags & OPf_KIDS)) + { + if (var) { + /* '$=' is legal, '$var=' isn't */ + if (defexpr->op_type == OP_NULL) + yyerror("Optional parameter " + "lacks default expression"); + else + expr = argn; + } + op_free(defexpr); + } + else { + /* @_ >= N */ + OP *ge_op = + newBINOP(OP_GE, 0, + scalar(newUNOP(OP_RV2AV, 0, + newGVOP(OP_GV, 0, PL_defgv))), + newSVOP(OP_CONST, 0, + newSViv(PL_parser->sig_elems))); + + expr = var + ? newCONDOP(0, ge_op, argn, defexpr) + : newLOGOP(OP_OR, 0, ge_op, defexpr); + } + } + else { + if (PL_parser->sig_optelems) + yyerror("Mandatory parameter " + "follows optional parameter"); + expr = argn; + } + + if (var) + expr = newASSIGNOP(OPf_STACKED, var, 0, expr); + if (expr) + $$ = op_prepend_elem(OP_LINESEQ, + newSTATEOP(0, NULL, NULL), + expr); + else + $$ = (OP*)NULL; + } + ; + + +/* subroutine signature element: e.g. '$x = $default' or '%h' */ +sigelem: sigscalarelem + { parser->expect = XSIGVAR; $$ = $1; } + | sigslurpelem + { parser->expect = XSIGVAR; $$ = $1; } + ; + +/* list of subroutine signature elements */ +siglist: + siglist ',' + { $$ = $1; } + | siglist ',' sigelem + { + $$ = op_append_list(OP_LINESEQ, $1, $3); } - ')' + | sigelem %prec PREC_LOW + { $$ = $1; } + ; + +/* () or (....) */ +siglistornull: /* NULL */ + { $$ = (OP*)NULL; } + | siglist + { $$ = $1; } + +/* Subroutine signature */ +subsignature: '(' + { + ENTER; + SAVEINT(PL_parser->sig_elems); + SAVEINT(PL_parser->sig_optelems); + SAVEI8(PL_parser->sig_slurpy); + PL_parser->sig_elems = 0; + PL_parser->sig_optelems = 0; + PL_parser->sig_slurpy = 0; + parser->expect = XSIGVAR; + } + siglistornull + ')' { - $$ = op_append_list(OP_LINESEQ, $<opval>2, - newSTATEOP(0, NULL, sawparens(newNULLLIST()))); - parser->expect = XATTRBLOCK; + OP *sigops = $3; + int min_arity = + PL_parser->sig_elems - PL_parser->sig_optelems; + + assert(FEATURE_SIGNATURES_IS_ENABLED); + + /* We shouldn't get here otherwise */ + Perl_ck_warner_d(aTHX_ + packWARN(WARN_EXPERIMENTAL__SIGNATURES), + "The signatures feature is experimental"); + + /* handle odd/even for %foo */ + if (PL_parser->sig_slurpy == '%') { + OP *chkop = + newLOGOP( + (PL_parser->sig_elems & 1) + ? OP_OR : OP_AND, + 0, + newBINOP(OP_BIT_AND, 0, + scalar(newUNOP(OP_RV2AV, 0, + newGVOP(OP_GV, 0, PL_defgv))), + newSVOP(OP_CONST, 0, newSViv(1))), + op_convert_list(OP_DIE, 0, + op_convert_list(OP_SPRINTF, 0, + op_append_list(OP_LIST, + newSVOP(OP_CONST, 0, + newSVpvs("Odd name/value argument for subroutine at %s line %d.\n")), + newSLICEOP(0, + op_append_list(OP_LIST, + newSVOP(OP_CONST, 0, newSViv(1)), + newSVOP(OP_CONST, 0, newSViv(2))), + newOP(OP_CALLER, 0)))))); + if (PL_parser->sig_optelems) + chkop = newLOGOP(OP_AND, 0, + newBINOP(OP_GT, 0, + scalar(newUNOP(OP_RV2AV, 0, + newGVOP(OP_GV, 0, PL_defgv))), + newSVOP(OP_CONST, 0, + newSViv(PL_parser->sig_elems))), + chkop); + sigops = op_prepend_elem(OP_LINESEQ, + chkop, sigops); + + } + if (min_arity) + sigops = op_prepend_elem(OP_LINESEQ, + Perl_check_arity(aTHX_ min_arity, + FALSE), + sigops); + if (!PL_parser->sig_slurpy) + sigops = op_prepend_elem(OP_LINESEQ, + Perl_check_arity(aTHX_ + PL_parser->sig_elems, TRUE), + sigops); + + $$ = op_append_elem(OP_LINESEQ, sigops, + newSTATEOP(0, NULL, NULL)); + + parser->expect = XATTRBLOCK; + LEAVE; } ; + + /* Optional subroutine body, for named subroutine declaration */ optsubbody: block | ';' { $$ = (OP*)NULL; } diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 146cd52911..19e9dffdb3 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -44,6 +44,22 @@ letter. =over 4 +=item a signature parameter must start with '$', '@' or '%' + +(F) Each subroutine signature parameter declaration must start with a valid +sigil; for example: + + sub foo ($a, $, $b = 1, @c) {} + +=item a slurpy parameter may not have a default value + +(F) Only scalar subroutine signature parameters may have a default value; +for example: + + sub foo ($a = 1) {} # legal + sub foo (@a = (1)) {} # invalid + sub foo (%a = (a => b)) {} # invalid + =item accept() on closed socket %s (W closed) You tried to do an accept on a closed socket. Did you forget @@ -2576,6 +2592,22 @@ declaration. The '_' in a prototype must be followed by a ';', indicating the rest of the parameters are optional, or one of '@' or '%', since those two will accept 0 or more final parameters. +=item illegal character following sigil in a subroutine signature + +(F) A parameter in a subroutine signature contained an unexpected character +following the C<$>, C<@> or C<%> sigil character. Normally the sigil +should be followed by the variable name or C<=> etc. Perhaps you are +trying use a prototype while in the scope of C<use feature 'signatures'>? +For example: + + sub foo ($$) {} # legal - a prototype + + use feature 'signatures; + sub foo ($$) {} # illegal - was expecting a signature + sub foo ($a, $b) + :prototype($$) {} # legal + + =item Illegal character \%o (carriage return) (F) Perl normally treats carriage returns in the program text as it @@ -3641,6 +3673,15 @@ mutable before freeing the ops. (W syntax) Multidimensional arrays aren't written like C<$foo[1,2,3]>. They're written like C<$foo[1][2][3]>, as in C. +=item Multiple slurpy parameters not allowed + +(F) In subroutine signatures, a slurpy parameter (C<@> or C<%>) must be +the last parameter, and there must not be more than one of them; for +example: + + sub foo ($a, @b) {} # legal + sub foo ($a, @b, %) {} # invalid + =item '/' must follow a numeric type in unpack (F) You had an unpack template that contained a '/', but this did not @@ -4053,6 +4094,19 @@ doesn't somehow point to a valid subroutine. See L<overload>. (W syntax) A format specified more picture fields than the next line supplied. See L<perlform>. +=item '#' not allowed immediately following a sigil in a subroutine signature + +(F) In a subroutine signature definition, a comment following a sigil +(C<$>, C<@> or C<%>), needs to be separated by whitespace or a commma etc., +in particular to avoid confusion with the C<$#> variable. For example: + + # bad + sub f ($# ignore first arg + , $b) {} + # good + sub f ($, # ignore first arg + $b) {} + =item %s: not found (A) You've accidentally run your script through the Bourne shell instead @@ -266,6 +266,7 @@ PERL_CALLCONV U32 Perl_cast_ulong(NV f) PERL_CALLCONV UV Perl_cast_uv(NV f) __attribute__warn_unused_result__; +PERL_CALLCONV OP* Perl_check_arity(pTHX_ int arity, bool max); PERL_CALLCONV bool Perl_check_utf8_print(pTHX_ const U8 *s, const STRLEN len); #define PERL_ARGS_ASSERT_CHECK_UTF8_PRINT \ assert(s) @@ -2449,9 +2450,6 @@ PERL_CALLCONV OP* Perl_parse_fullstmt(pTHX_ U32 flags); PERL_CALLCONV SV* Perl_parse_label(pTHX_ U32 flags); PERL_CALLCONV OP* Perl_parse_listexpr(pTHX_ U32 flags); PERL_CALLCONV OP* Perl_parse_stmtseq(pTHX_ U32 flags); -PERL_CALLCONV OP * Perl_parse_subsignature(pTHX) - __attribute__warn_unused_result__; - PERL_CALLCONV OP* Perl_parse_termexpr(pTHX_ U32 flags); PERL_CALLCONV U32 Perl_parse_unicode_opts(pTHX_ const char **popt); #define PERL_ARGS_ASSERT_PARSE_UNICODE_OPTS \ @@ -12981,8 +12981,9 @@ Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param) parser->in_my = proto->in_my; parser->in_my_stash = hv_dup(proto->in_my_stash, param); parser->error_count = proto->error_count; - - + parser->sig_elems = proto->sig_elems; + parser->sig_optelems= proto->sig_optelems; + parser->sig_slurpy = proto->sig_slurpy; parser->linestr = sv_dup_inc(proto->linestr, param); { diff --git a/t/op/signatures.t b/t/op/signatures.t index 217efa3add..3db1b40aa0 100644 --- a/t/op/signatures.t +++ b/t/op/signatures.t @@ -415,7 +415,8 @@ like $@, qr/\AToo many arguments for subroutine at \(eval \d+\) line 1\.\n\z/; is $a, 123; eval "#line 8 foo\nsub t024 (\$a =) { }"; -is $@, "Optional parameter lacks default expression at foo line 8\.\n"; +is $@, + qq{Optional parameter lacks default expression at foo line 8, near "=) "\n}; sub t025 ($ = undef) { $a // "z" } is prototype(\&t025), undef; @@ -557,10 +558,13 @@ like $@, qr/\AToo many arguments for subroutine at \(eval \d+\) line 1\.\n\z/; is $a, 123; eval "#line 8 foo\nsub t030 (\$a = 222, \$b) { }"; -is $@, "Mandatory parameter follows optional parameter at foo line 8\.\n"; +is $@, qq{Mandatory parameter follows optional parameter at foo line 8, near "\$b) "\n}; eval "#line 8 foo\nsub t031 (\$a = 222, \$b = 333, \$c, \$d) { }"; -is $@, "Mandatory parameter follows optional parameter at foo line 8\.\n"; +is $@, <<EOF; +Mandatory parameter follows optional parameter at foo line 8, near "\$c," +Mandatory parameter follows optional parameter at foo line 8, near "\$d) " +EOF sub t034 (@abc) { join("/", @abc).";".scalar(@abc) } is prototype(\&t034), undef; @@ -575,10 +579,10 @@ is eval("t034(456, 789, 987, 654, 321, 111)"), "456/789/987/654/321/111;6"; is $a, 123; eval "#line 8 foo\nsub t136 (\@abc = 222) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, qq{a slurpy parameter may not have a default value at foo line 8, near "222) "\n}; eval "#line 8 foo\nsub t137 (\@abc =) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, qq{a slurpy parameter may not have a default value at foo line 8, near "=) "\n}; sub t035 (@) { $a } is prototype(\&t035), undef; @@ -593,10 +597,10 @@ is eval("t035(456, 789, 987, 654, 321, 111)"), 123; is $a, 123; eval "#line 8 foo\nsub t138 (\@ = 222) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, qq{a slurpy parameter may not have a default value at foo line 8, near "222) "\n}; eval "#line 8 foo\nsub t139 (\@ =) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, qq{a slurpy parameter may not have a default value at foo line 8, near "=) "\n}; sub t039 (%abc) { join("/", map { $_."=".$abc{$_} } sort keys %abc) } is prototype(\&t039), undef; @@ -615,10 +619,10 @@ is eval("t039(456, 789, 987, 654, 321, 111)"), "321=111/456=789/987=654"; is $a, 123; eval "#line 8 foo\nsub t140 (\%abc = 222) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, qq{a slurpy parameter may not have a default value at foo line 8, near "222) "\n}; eval "#line 8 foo\nsub t141 (\%abc =) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, qq{a slurpy parameter may not have a default value at foo line 8, near "=) "\n}; sub t040 (%) { $a } is prototype(\&t040), undef; @@ -637,10 +641,10 @@ is eval("t040(456, 789, 987, 654, 321, 111)"), 123; is $a, 123; eval "#line 8 foo\nsub t142 (\% = 222) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, qq{a slurpy parameter may not have a default value at foo line 8, near "222) "\n}; eval "#line 8 foo\nsub t143 (\% =) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, qq{a slurpy parameter may not have a default value at foo line 8, near "=) "\n}; sub t041 ($a, @b) { $a.";".join("/", @b) } is prototype(\&t041), undef; @@ -873,67 +877,70 @@ is eval("t058(456, 789, 987, 654, 321, 111)"), "456;789;987/654/321/111;4"; is $a, 123; eval "#line 8 foo\nsub t059 (\@a, \$b) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Slurpy parameter not last at foo line 8, near "\$b) "\n}; eval "#line 8 foo\nsub t060 (\@a, \$b = 222) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Slurpy parameter not last at foo line 8, near "222) "\n}; eval "#line 8 foo\nsub t061 (\@a, \@b) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Multiple slurpy parameters not allowed at foo line 8, near "\@b) "\n}; eval "#line 8 foo\nsub t062 (\@a, \%b) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Multiple slurpy parameters not allowed at foo line 8, near "%b) "\n}; eval "#line 8 foo\nsub t063 (\@, \$b) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Slurpy parameter not last at foo line 8, near "\$b) "\n}; eval "#line 8 foo\nsub t064 (\@, \$b = 222) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Slurpy parameter not last at foo line 8, near "222) "\n}; eval "#line 8 foo\nsub t065 (\@, \@b) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Multiple slurpy parameters not allowed at foo line 8, near "\@b) "\n}; eval "#line 8 foo\nsub t066 (\@, \%b) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Multiple slurpy parameters not allowed at foo line 8, near "%b) "\n}; eval "#line 8 foo\nsub t067 (\@a, \$) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Slurpy parameter not last at foo line 8, near "\$) "\n}; eval "#line 8 foo\nsub t068 (\@a, \$ = 222) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Slurpy parameter not last at foo line 8, near "222) "\n}; eval "#line 8 foo\nsub t069 (\@a, \@) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Multiple slurpy parameters not allowed at foo line 8, near "\@) "\n}; eval "#line 8 foo\nsub t070 (\@a, \%) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Multiple slurpy parameters not allowed at foo line 8, near "\%) "\n}; eval "#line 8 foo\nsub t071 (\@, \$) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Slurpy parameter not last at foo line 8, near "\$) "\n}; eval "#line 8 foo\nsub t072 (\@, \$ = 222) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Slurpy parameter not last at foo line 8, near "222) "\n}; eval "#line 8 foo\nsub t073 (\@, \@) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Multiple slurpy parameters not allowed at foo line 8, near "\@) "\n}; eval "#line 8 foo\nsub t074 (\@, \%) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Multiple slurpy parameters not allowed at foo line 8, near "\%) "\n}; eval "#line 8 foo\nsub t075 (\%a, \$b) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Slurpy parameter not last at foo line 8, near "\$b) "\n}; eval "#line 8 foo\nsub t076 (\%, \$b) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Slurpy parameter not last at foo line 8, near "\$b) "\n}; eval "#line 8 foo\nsub t077 (\$a, \@b, \$c) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Slurpy parameter not last at foo line 8, near "\$c) "\n}; eval "#line 8 foo\nsub t078 (\$a, \%b, \$c) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, qq{Slurpy parameter not last at foo line 8, near "\$c) "\n}; eval "#line 8 foo\nsub t079 (\$a, \@b, \$c, \$d) { }"; -is $@, "Slurpy parameter not last at foo line 8\.\n"; +is $@, <<EOF; +Slurpy parameter not last at foo line 8, near "\$c," +Slurpy parameter not last at foo line 8, near "\$d) " +EOF sub t080 ($a,,, $b) { $a.$b } is prototype(\&t080), undef; @@ -962,10 +969,10 @@ like $@, qr/\AToo many arguments for subroutine at \(eval \d+\) line 1\.\n\z/; is $a, 123; eval "#line 8 foo\nsub t082 (, \$a) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, qq{syntax error at foo line 8, near "(,"\n}; eval "#line 8 foo\nsub t083 (,) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, qq{syntax error at foo line 8, near "(,"\n}; sub t084($a,$b){ $a.$b } is prototype(\&t084), undef; @@ -1058,38 +1065,52 @@ is $a, 123; eval "#line 8 foo\nsub t088 (\$ #foo\na) { }"; is $@, ""; + eval "#line 8 foo\nsub t089 (\$#foo\na) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +like $@, qr{\A'#' not allowed immediately following a sigil in a subroutine signature at foo line 8, near "\(\$"\n}; eval "#line 8 foo\nsub t090 (\@ #foo\na) { }"; is $@, ""; eval "#line 8 foo\nsub t091 (\@#foo\na) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +like $@, qr{\A'#' not allowed immediately following a sigil in a subroutine signature at foo line 8, near "\(\@"\n}; eval "#line 8 foo\nsub t092 (\% #foo\na) { }"; is $@, ""; eval "#line 8 foo\nsub t093 (\%#foo\na) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +like $@, qr{\A'#' not allowed immediately following a sigil in a subroutine signature at foo line 8, near "\(%"\n}; eval "#line 8 foo\nsub t094 (123) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +like $@, qr{\Aa signature parameter must start with '\$', '\@' or '%' at foo line 8, near "\(1"\n}; eval "#line 8 foo\nsub t095 (\$a, 123) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, <<EOF; +a signature parameter must start with '\$', '\@' or '%' at foo line 8, near ", 1" +syntax error at foo line 8, near ", 123" +EOF eval "#line 8 foo\nsub t096 (\$a 123) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, qq{syntax error at foo line 8, near "\$a 123"\n}; eval "#line 8 foo\nsub t097 (\$a { }) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, <<EOF; +syntax error at foo line 8, near "\$a { " +a signature parameter must start with '\$', '\@' or '%' at foo line 8, near "{ }" +Missing right curly or square bracket at foo line 8, at end of line +EOF eval "#line 8 foo\nsub t098 (\$a; \$b) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, <<EOF; +syntax error at foo line 8, at EOF +syntax error at foo line 8, near "\$b) " +EOF eval "#line 8 foo\nsub t099 (\$\$) { }"; -like $@, qr/\AParse error at foo line 8\.\n/; +is $@, <<EOF; +illegal character following sigil in a subroutine signature at foo line 8, near "(\$" +syntax error at foo line 8, near "\$\$" +EOF eval "#line 8 foo\nsub t101 (\@_) { }"; like $@, qr/\ACan't use global \@_ in "my" at foo line 8/; @@ -1286,10 +1307,6 @@ while(<$kh>) { # $y should be an error after $x=foo. The exact error we get may # differ if this is __END__ or s or some other special keyword. eval 'sub ($x = ' . $word . ', $y) {}'; - local $::TODO = 'does not work yet' - if $word =~ /^(?:chmod|chown|die|exec|glob|kill|mkdir|print - |printf|return|reverse|select|setpgrp|sort|split - |system|unlink|utime|warn)\z/x; isnt $@, "", "$word does not swallow trailing comma"; } } @@ -4403,7 +4403,7 @@ S_tokenize_use(pTHX_ int is_use, char *s) { static const char* const exp_name[] = { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "ATTRBLOCK", "ATTRTERM", "TERMBLOCK", "XBLOCKTERM", "POSTDEREF", - "TERMORDORDOR" + "SIGVAR", "TERMORDORDOR" }; #endif @@ -4807,6 +4807,67 @@ Perl_yylex(pTHX) PL_oldbufptr = s; PL_parser->saw_infix_sigil = 0; + if (PL_expect == XSIGVAR) { + /* we expect the sigil and optional var name part of a + * signature element here. Since a '$' is not necessarily + * followed by a var name, handle it specially here; the general + * yylex code would otherwise try to interpret whatever follows + * as a var; e.g. ($, ...) would be seen as the var '$,' + */ + + char sigil; + + s = skipspace(s); + sigil = *s++; + PL_bufptr = s; /* for error reporting */ + switch (sigil) { + case '$': + case '@': + case '%': + /* spot stuff that looks like an prototype */ + if (strchr("$:@%&*;\\[]", *s)) { + yyerror("illegal character following sigil in a subroutine signature"); + break; + } + /* '$#' is banned, while '$ # comment' isn't */ + if (*s == '#') { + yyerror("'#' not allowed immediately following a sigil in a subroutine signature"); + break; + } + s = skipspace(s); + if (isIDFIRST_lazy_if(s, UTF)) { + char *dest = PL_tokenbuf + 1; + /* on next call to yylex this causes pending_ident() + * to allocmy() etc */ + PL_in_my = KEY_my; + /* read var name, including sigil, into PL_tokenbuf */ + PL_tokenbuf[0] = sigil; + parse_ident(&s, &dest, dest + sizeof(PL_tokenbuf) - 1, + 0, cBOOL(UTF), FALSE); + *dest = '\0'; + assert(PL_tokenbuf[1]); /* we have a variable name */ + force_ident_maybe_lex(sigil); + } + PL_expect = XOPERATOR; + break; + + case ')': + PL_expect = XBLOCK; + break; + case ',': /* handle ($a,,$b) */ + break; + + default: + yyerror("a signature parameter must start with '$', '@' or '%'"); + /* very crude error recovery: skip to likely next signature + * element */ + while (*s && *s != '$' && *s != '@' && *s != '%' && *s != ')') + s++; + break; + } + TOKEN(sigil); + } + retry: switch (*s) { default: @@ -11736,219 +11797,6 @@ Perl_parse_stmtseq(pTHX_ U32 flags) return stmtseqop; } -#define parse_opt_lexvar() S_parse_opt_lexvar(aTHX) -static OP * -S_parse_opt_lexvar(pTHX) -{ - I32 sigil, c; - char *s, *d; - OP *var; - lex_token_boundary(); - sigil = lex_read_unichar(0); - if (lex_peek_unichar(0) == '#') { - qerror(Perl_mess(aTHX_ "Parse error")); - return NULL; - } - lex_read_space(0); - c = lex_peek_unichar(0); - if (c == -1 || !(UTF ? isIDFIRST_uni(c) : isIDFIRST_A(c))) - return NULL; - s = PL_bufptr; - d = PL_tokenbuf + 1; - PL_tokenbuf[0] = (char)sigil; - parse_ident(&s, &d, PL_tokenbuf + sizeof(PL_tokenbuf) - 1, 0, - cBOOL(UTF), FALSE); - PL_bufptr = s; - if (d == PL_tokenbuf+1) - return NULL; - var = newOP(sigil == '$' ? OP_PADSV : sigil == '@' ? OP_PADAV : OP_PADHV, - OPf_MOD | (OPpLVAL_INTRO<<8)); - var->op_targ = allocmy(PL_tokenbuf, d - PL_tokenbuf, UTF ? SVf_UTF8 : 0); - return var; -} - -OP * -Perl_parse_subsignature(pTHX) -{ - I32 c; - int prev_type = 0, pos = 0, min_arity = 0, max_arity = 0; - OP *initops = NULL; - lex_read_space(0); - c = lex_peek_unichar(0); - while (c != /*(*/')') { - switch (c) { - case '$': { - OP *var, *expr; - if (prev_type == 2) - qerror(Perl_mess(aTHX_ "Slurpy parameter not last")); - var = parse_opt_lexvar(); - expr = var ? - newBINOP(OP_AELEM, 0, - ref(newUNOP(OP_RV2AV, 0, newGVOP(OP_GV, 0, PL_defgv)), - OP_RV2AV), - newSVOP(OP_CONST, 0, newSViv(pos))) : - NULL; - lex_read_space(0); - c = lex_peek_unichar(0); - if (c == '=') { - lex_token_boundary(); - lex_read_unichar(0); - lex_read_space(0); - c = lex_peek_unichar(0); - if (c == ',' || c == /*(*/')') { - if (var) - qerror(Perl_mess(aTHX_ "Optional parameter " - "lacks default expression")); - } else { - OP *defexpr = parse_termexpr(0); - if (defexpr->op_type == OP_UNDEF - && !(defexpr->op_flags & OPf_KIDS)) - { - op_free(defexpr); - } else { - OP *ifop = - newBINOP(OP_GE, 0, - scalar(newUNOP(OP_RV2AV, 0, - newGVOP(OP_GV, 0, PL_defgv))), - newSVOP(OP_CONST, 0, newSViv(pos+1))); - expr = var ? - newCONDOP(0, ifop, expr, defexpr) : - newLOGOP(OP_OR, 0, ifop, defexpr); - } - } - prev_type = 1; - } else { - if (prev_type == 1) - qerror(Perl_mess(aTHX_ "Mandatory parameter " - "follows optional parameter")); - prev_type = 0; - min_arity = pos + 1; - } - if (var) expr = newASSIGNOP(OPf_STACKED, var, 0, expr); - if (expr) - initops = op_append_list(OP_LINESEQ, initops, - newSTATEOP(0, NULL, expr)); - max_arity = ++pos; - } break; - case '@': - case '%': { - OP *var; - if (prev_type == 2) - qerror(Perl_mess(aTHX_ "Slurpy parameter not last")); - var = parse_opt_lexvar(); - if (c == '%') { - OP *chkop = newLOGOP((pos & 1) ? OP_OR : OP_AND, 0, - newBINOP(OP_BIT_AND, 0, - scalar(newUNOP(OP_RV2AV, 0, - newGVOP(OP_GV, 0, PL_defgv))), - newSVOP(OP_CONST, 0, newSViv(1))), - op_convert_list(OP_DIE, 0, - op_convert_list(OP_SPRINTF, 0, - op_append_list(OP_LIST, - newSVOP(OP_CONST, 0, - newSVpvs("Odd name/value argument for subroutine at %s line %d.\n")), - newSLICEOP(0, - op_append_list(OP_LIST, - newSVOP(OP_CONST, 0, newSViv(1)), - newSVOP(OP_CONST, 0, newSViv(2))), - newOP(OP_CALLER, 0)))))); - if (pos != min_arity) - chkop = newLOGOP(OP_AND, 0, - newBINOP(OP_GT, 0, - scalar(newUNOP(OP_RV2AV, 0, - newGVOP(OP_GV, 0, PL_defgv))), - newSVOP(OP_CONST, 0, newSViv(pos))), - chkop); - initops = op_append_list(OP_LINESEQ, - newSTATEOP(0, NULL, chkop), - initops); - } - if (var) { - OP *slice = pos ? - op_prepend_elem(OP_ASLICE, - newOP(OP_PUSHMARK, 0), - newLISTOP(OP_ASLICE, 0, - list(newRANGE(0, - newSVOP(OP_CONST, 0, newSViv(pos)), - newUNOP(OP_AV2ARYLEN, 0, - ref(newUNOP(OP_RV2AV, 0, - newGVOP(OP_GV, 0, PL_defgv)), - OP_AV2ARYLEN)))), - ref(newUNOP(OP_RV2AV, 0, - newGVOP(OP_GV, 0, PL_defgv)), - OP_ASLICE))) : - newUNOP(OP_RV2AV, 0, newGVOP(OP_GV, 0, PL_defgv)); - initops = op_append_list(OP_LINESEQ, initops, - newSTATEOP(0, NULL, - newASSIGNOP(OPf_STACKED, var, 0, slice))); - } - prev_type = 2; - max_arity = -1; - } break; - default: - parse_error: - qerror(Perl_mess(aTHX_ "Parse error")); - return NULL; - } - lex_read_space(0); - c = lex_peek_unichar(0); - switch (c) { - case /*(*/')': break; - case ',': - do { - lex_token_boundary(); - lex_read_unichar(0); - lex_read_space(0); - c = lex_peek_unichar(0); - } while (c == ','); - break; - default: - goto parse_error; - } - } - if (min_arity != 0) { - initops = op_append_list(OP_LINESEQ, - newSTATEOP(0, NULL, - newLOGOP(OP_OR, 0, - newBINOP(OP_GE, 0, - scalar(newUNOP(OP_RV2AV, 0, - newGVOP(OP_GV, 0, PL_defgv))), - newSVOP(OP_CONST, 0, newSViv(min_arity))), - op_convert_list(OP_DIE, 0, - op_convert_list(OP_SPRINTF, 0, - op_append_list(OP_LIST, - newSVOP(OP_CONST, 0, - newSVpvs("Too few arguments for subroutine at %s line %d.\n")), - newSLICEOP(0, - op_append_list(OP_LIST, - newSVOP(OP_CONST, 0, newSViv(1)), - newSVOP(OP_CONST, 0, newSViv(2))), - newOP(OP_CALLER, 0))))))), - initops); - } - if (max_arity != -1) { - initops = op_append_list(OP_LINESEQ, - newSTATEOP(0, NULL, - newLOGOP(OP_OR, 0, - newBINOP(OP_LE, 0, - scalar(newUNOP(OP_RV2AV, 0, - newGVOP(OP_GV, 0, PL_defgv))), - newSVOP(OP_CONST, 0, newSViv(max_arity))), - op_convert_list(OP_DIE, 0, - op_convert_list(OP_SPRINTF, 0, - op_append_list(OP_LIST, - newSVOP(OP_CONST, 0, - newSVpvs("Too many arguments for subroutine at %s line %d.\n")), - newSLICEOP(0, - op_append_list(OP_LIST, - newSVOP(OP_CONST, 0, newSViv(1)), - newSVOP(OP_CONST, 0, newSViv(2))), - newOP(OP_CALLER, 0))))))), - initops); - } - return initops; -} - /* * ex: set ts=8 sts=4 sw=4 et: */ |