1/* -*- mode: C; buffer-read-only: t -*- 2 !!!!!!! DO NOT EDIT THIS FILE !!!!!!! 3 This file is built by regen_perly.pl from perly.y. 4 Any changes made here will be lost! 5 */ 6 7case 2: /* @1: %empty */ 8#line 161 "perly.y" 9 { 10 parser->expect = XSTATE; 11 (yyval.ival) = 0; 12 } 13 14 break; 15 16 case 3: /* grammar: GRAMPROG @1 remember stmtseq */ 17#line 166 "perly.y" 18 { 19 newPROG(block_end((ps[-1].val.ival),(ps[0].val.opval))); 20 PL_compiling.cop_seq = 0; 21 (yyval.ival) = 0; 22 } 23 24 break; 25 26 case 4: /* @2: %empty */ 27#line 172 "perly.y" 28 { 29 parser->expect = XTERM; 30 (yyval.ival) = 0; 31 } 32 33 break; 34 35 case 5: /* grammar: GRAMEXPR @2 optexpr */ 36#line 177 "perly.y" 37 { 38 PL_eval_root = (ps[0].val.opval); 39 (yyval.ival) = 0; 40 } 41 42 break; 43 44 case 6: /* @3: %empty */ 45#line 182 "perly.y" 46 { 47 parser->expect = XBLOCK; 48 (yyval.ival) = 0; 49 } 50 51 break; 52 53 case 7: /* grammar: GRAMBLOCK @3 block */ 54#line 187 "perly.y" 55 { 56 PL_pad_reset_pending = TRUE; 57 PL_eval_root = (ps[0].val.opval); 58 (yyval.ival) = 0; 59 yyunlex(); 60 parser->yychar = yytoken = YYEOF; 61 } 62 63 break; 64 65 case 8: /* @4: %empty */ 66#line 195 "perly.y" 67 { 68 parser->expect = XSTATE; 69 (yyval.ival) = 0; 70 } 71 72 break; 73 74 case 9: /* grammar: GRAMBARESTMT @4 barestmt */ 75#line 200 "perly.y" 76 { 77 PL_pad_reset_pending = TRUE; 78 PL_eval_root = (ps[0].val.opval); 79 (yyval.ival) = 0; 80 yyunlex(); 81 parser->yychar = yytoken = YYEOF; 82 } 83 84 break; 85 86 case 10: /* @5: %empty */ 87#line 208 "perly.y" 88 { 89 parser->expect = XSTATE; 90 (yyval.ival) = 0; 91 } 92 93 break; 94 95 case 11: /* grammar: GRAMFULLSTMT @5 fullstmt */ 96#line 213 "perly.y" 97 { 98 PL_pad_reset_pending = TRUE; 99 PL_eval_root = (ps[0].val.opval); 100 (yyval.ival) = 0; 101 yyunlex(); 102 parser->yychar = yytoken = YYEOF; 103 } 104 105 break; 106 107 case 12: /* @6: %empty */ 108#line 221 "perly.y" 109 { 110 parser->expect = XSTATE; 111 (yyval.ival) = 0; 112 } 113 114 break; 115 116 case 13: /* grammar: GRAMSTMTSEQ @6 stmtseq */ 117#line 226 "perly.y" 118 { 119 PL_eval_root = (ps[0].val.opval); 120 (yyval.ival) = 0; 121 } 122 123 break; 124 125 case 14: /* @7: %empty */ 126#line 231 "perly.y" 127 { 128 parser->expect = XSTATE; 129 (yyval.ival) = 0; 130 } 131 132 break; 133 134 case 15: /* grammar: GRAMSUBSIGNATURE @7 subsigguts */ 135#line 236 "perly.y" 136 { 137 PL_eval_root = (ps[0].val.opval); 138 (yyval.ival) = 0; 139 } 140 141 break; 142 143 case 16: /* sigsub_or_method_named: KW_SUB_named_sig */ 144#line 245 "perly.y" 145 { (yyval.ival) = KW_SUB_named_sig; } 146 147 break; 148 149 case 17: /* sigsub_or_method_named: KW_METHOD_named */ 150#line 247 "perly.y" 151 { (yyval.ival) = KW_METHOD_named; } 152 153 break; 154 155 case 18: /* block: PERLY_BRACE_OPEN remember stmtseq PERLY_BRACE_CLOSE */ 156#line 252 "perly.y" 157 { if (parser->copline > (line_t)(ps[-3].val.ival)) 158 parser->copline = (line_t)(ps[-3].val.ival); 159 (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval)); 160 } 161 162 break; 163 164 case 19: /* empty: %empty */ 165#line 259 "perly.y" 166 { (yyval.opval) = NULL; } 167 168 break; 169 170 case 20: /* formblock: PERLY_EQUAL_SIGN remember PERLY_SEMICOLON FORMRBRACK formstmtseq PERLY_SEMICOLON PERLY_DOT */ 171#line 264 "perly.y" 172 { if (parser->copline > (line_t)(ps[-6].val.ival)) 173 parser->copline = (line_t)(ps[-6].val.ival); 174 (yyval.opval) = block_end((ps[-5].val.ival), (ps[-2].val.opval)); 175 } 176 177 break; 178 179 case 21: /* remember: %empty */ 180#line 271 "perly.y" 181 { (yyval.ival) = block_start(TRUE); 182 parser->parsed_sub = 0; } 183 184 break; 185 186 case 22: /* mblock: PERLY_BRACE_OPEN mremember stmtseq PERLY_BRACE_CLOSE */ 187#line 276 "perly.y" 188 { if (parser->copline > (line_t)(ps[-3].val.ival)) 189 parser->copline = (line_t)(ps[-3].val.ival); 190 (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval)); 191 } 192 193 break; 194 195 case 23: /* mremember: %empty */ 196#line 283 "perly.y" 197 { (yyval.ival) = block_start(FALSE); 198 parser->parsed_sub = 0; } 199 200 break; 201 202 case 25: /* $@8: %empty */ 203#line 292 "perly.y" 204 { parser->in_my = 1; } 205 206 break; 207 208 case 26: /* $@9: %empty */ 209#line 294 "perly.y" 210 { parser->in_my = 0; intro_my(); } 211 212 break; 213 214 case 27: /* catch_paren: PERLY_PAREN_OPEN $@8 scalar $@9 PERLY_PAREN_CLOSE */ 215#line 296 "perly.y" 216 { (yyval.opval) = (ps[-2].val.opval); } 217 218 break; 219 220 case 29: /* stmtseq: stmtseq fullstmt */ 221#line 303 "perly.y" 222 { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); 223 PL_pad_reset_pending = TRUE; 224 if ((ps[-1].val.opval) && (ps[0].val.opval)) 225 PL_hints |= HINT_BLOCK_SCOPE; 226 } 227 228 break; 229 230 case 31: /* formstmtseq: formstmtseq formline */ 231#line 314 "perly.y" 232 { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); 233 PL_pad_reset_pending = TRUE; 234 if ((ps[-1].val.opval) && (ps[0].val.opval)) 235 PL_hints |= HINT_BLOCK_SCOPE; 236 } 237 238 break; 239 240 case 32: /* fullstmt: barestmt */ 241#line 323 "perly.y" 242 { 243 (yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL; 244 } 245 246 break; 247 248 case 33: /* fullstmt: labfullstmt */ 249#line 327 "perly.y" 250 { (yyval.opval) = (ps[0].val.opval); } 251 252 break; 253 254 case 34: /* labfullstmt: LABEL barestmt */ 255#line 331 "perly.y" 256 { 257 SV *label = cSVOPx_sv((ps[-1].val.opval)); 258 (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, 259 savepv(SvPVX_const(label)), (ps[0].val.opval)); 260 op_free((ps[-1].val.opval)); 261 } 262 263 break; 264 265 case 35: /* labfullstmt: LABEL labfullstmt */ 266#line 338 "perly.y" 267 { 268 SV *label = cSVOPx_sv((ps[-1].val.opval)); 269 (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, 270 savepv(SvPVX_const(label)), (ps[0].val.opval)); 271 op_free((ps[-1].val.opval)); 272 } 273 274 break; 275 276 case 36: /* barestmt: PLUGSTMT */ 277#line 348 "perly.y" 278 { (yyval.opval) = (ps[0].val.opval); } 279 280 break; 281 282 case 37: /* barestmt: KW_FORMAT startformsub formname formblock */ 283#line 350 "perly.y" 284 { 285 CV *fmtcv = PL_compcv; 286 newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval)); 287 (yyval.opval) = NULL; 288 if (CvOUTSIDE(fmtcv) && !CvEVAL(CvOUTSIDE(fmtcv))) { 289 pad_add_weakref(fmtcv); 290 } 291 parser->parsed_sub = 1; 292 } 293 294 break; 295 296 case 38: /* $@10: %empty */ 297#line 362 "perly.y" 298 { 299 init_named_cv(PL_compcv, (ps[-1].val.opval)); 300 parser->in_my = 0; 301 parser->in_my_stash = NULL; 302 } 303 304 break; 305 306 case 39: /* barestmt: KW_SUB_named subname startsub $@10 proto subattrlist optsubbody */ 307#line 368 "perly.y" 308 { 309 SvREFCNT_inc_simple_void(PL_compcv); 310 (ps[-5].val.opval)->op_type == OP_CONST 311 ? newATTRSUB((ps[-4].val.ival), (ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)) 312 : newMYSUB((ps[-4].val.ival), (ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)) 313 ; 314 (yyval.opval) = NULL; 315 intro_my(); 316 parser->parsed_sub = 1; 317 } 318 319 break; 320 321 case 40: /* $@11: %empty */ 322#line 383 "perly.y" 323 { 324 init_named_cv(PL_compcv, (ps[-1].val.opval)); 325 if((ps[-2].val.ival) == KW_METHOD_named) { 326 croak_kw_unless_class("method"); 327 class_prepare_method_parse(PL_compcv); 328 } 329 parser->in_my = 0; 330 parser->in_my_stash = NULL; 331 } 332 333 break; 334 335 case 41: /* barestmt: sigsub_or_method_named subname startsub $@11 subattrlist optsigsubbody */ 336#line 393 "perly.y" 337 { 338 OP *body = (ps[0].val.opval); 339 340 SvREFCNT_inc_simple_void(PL_compcv); 341 (ps[-4].val.opval)->op_type == OP_CONST 342 ? newATTRSUB((ps[-3].val.ival), (ps[-4].val.opval), NULL, (ps[-1].val.opval), body) 343 : newMYSUB( (ps[-3].val.ival), (ps[-4].val.opval), NULL, (ps[-1].val.opval), body) 344 ; 345 (yyval.opval) = NULL; 346 intro_my(); 347 parser->parsed_sub = 1; 348 } 349 350 break; 351 352 case 42: /* $@12: %empty */ 353#line 406 "perly.y" 354 { 355 switch((ps[-1].val.ival)) { 356 case KEY_ADJUST: 357 croak_kw_unless_class("ADJUST"); 358 class_prepare_method_parse(PL_compcv); 359 break; 360 default: 361 NOT_REACHED; 362 } 363 } 364 365 break; 366 367 case 43: /* barestmt: PHASER startsub $@12 optsubbody */ 368#line 417 "perly.y" 369 { 370 OP *body = (ps[0].val.opval); 371 SvREFCNT_inc_simple_void(PL_compcv); 372 373 CV *cv; 374 375 switch((ps[-3].val.ival)) { 376 case KEY_ADJUST: 377 cv = newATTRSUB((ps[-2].val.ival), NULL, NULL, NULL, body); 378 class_add_ADJUST(PL_curstash, cv); 379 break; 380 } 381 (yyval.opval) = NULL; 382 } 383 384 break; 385 386 case 44: /* barestmt: KW_PACKAGE BAREWORD BAREWORD PERLY_SEMICOLON */ 387#line 436 "perly.y" 388 { 389 package((ps[-1].val.opval)); 390 if ((ps[-2].val.opval)) 391 package_version((ps[-2].val.opval)); 392 (yyval.opval) = NULL; 393 } 394 395 break; 396 397 case 45: /* barestmt: KW_CLASS BAREWORD BAREWORD subattrlist PERLY_SEMICOLON */ 398#line 443 "perly.y" 399 { 400 package((ps[-2].val.opval)); 401 if ((ps[-3].val.opval)) 402 package_version((ps[-3].val.opval)); 403 (yyval.opval) = NULL; 404 class_setup_stash(PL_curstash); 405 if ((ps[-1].val.opval)) { 406 class_apply_attributes(PL_curstash, (ps[-1].val.opval)); 407 } 408 } 409 410 break; 411 412 case 46: /* $@13: %empty */ 413#line 454 "perly.y" 414 { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } 415 416 break; 417 418 case 47: /* barestmt: KW_USE_or_NO startsub $@13 BAREWORD BAREWORD optlistexpr PERLY_SEMICOLON */ 419#line 458 "perly.y" 420 { 421 SvREFCNT_inc_simple_void(PL_compcv); 422 utilize((ps[-6].val.ival), (ps[-5].val.ival), (ps[-3].val.opval), (ps[-2].val.opval), (ps[-1].val.opval)); 423 parser->parsed_sub = 1; 424 (yyval.opval) = NULL; 425 } 426 427 break; 428 429 case 48: /* barestmt: KW_IF PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else */ 430#line 465 "perly.y" 431 { 432 (yyval.opval) = block_end((ps[-4].val.ival), 433 newCONDOP(0, (ps[-3].val.opval), op_scope((ps[-1].val.opval)), (ps[0].val.opval))); 434 parser->copline = (line_t)(ps[-6].val.ival); 435 } 436 437 break; 438 439 case 49: /* barestmt: KW_UNLESS PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else */ 440#line 471 "perly.y" 441 { 442 (yyval.opval) = block_end((ps[-4].val.ival), 443 newCONDOP(0, (ps[-3].val.opval), (ps[0].val.opval), op_scope((ps[-1].val.opval)))); 444 parser->copline = (line_t)(ps[-6].val.ival); 445 } 446 447 break; 448 449 case 50: /* barestmt: KW_GIVEN PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock */ 450#line 477 "perly.y" 451 { 452 (yyval.opval) = block_end((ps[-3].val.ival), newGIVENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)), 0)); 453 parser->copline = (line_t)(ps[-5].val.ival); 454 } 455 456 break; 457 458 case 51: /* barestmt: KW_WHEN PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock */ 459#line 482 "perly.y" 460 { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); } 461 462 break; 463 464 case 52: /* barestmt: KW_DEFAULT block */ 465#line 484 "perly.y" 466 { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); } 467 468 break; 469 470 case 53: /* barestmt: KW_WHILE PERLY_PAREN_OPEN remember texpr PERLY_PAREN_CLOSE mintro mblock cont */ 471#line 486 "perly.y" 472 { 473 (yyval.opval) = block_end((ps[-5].val.ival), 474 newWHILEOP(0, 1, NULL, 475 (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival))); 476 parser->copline = (line_t)(ps[-7].val.ival); 477 } 478 479 break; 480 481 case 54: /* barestmt: KW_UNTIL PERLY_PAREN_OPEN remember iexpr PERLY_PAREN_CLOSE mintro mblock cont */ 482#line 493 "perly.y" 483 { 484 (yyval.opval) = block_end((ps[-5].val.ival), 485 newWHILEOP(0, 1, NULL, 486 (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival))); 487 parser->copline = (line_t)(ps[-7].val.ival); 488 } 489 490 break; 491 492 case 55: /* $@14: %empty */ 493#line 500 "perly.y" 494 { parser->expect = XTERM; } 495 496 break; 497 498 case 56: /* $@15: %empty */ 499#line 502 "perly.y" 500 { parser->expect = XTERM; } 501 502 break; 503 504 case 57: /* barestmt: KW_FOR PERLY_PAREN_OPEN remember mnexpr PERLY_SEMICOLON $@14 texpr PERLY_SEMICOLON $@15 mintro mnexpr PERLY_PAREN_CLOSE mblock */ 505#line 505 "perly.y" 506 { 507 OP *initop = (ps[-9].val.opval); 508 OP *forop = newWHILEOP(0, 1, NULL, 509 scalar((ps[-6].val.opval)), (ps[0].val.opval), (ps[-2].val.opval), (ps[-3].val.ival)); 510 if (initop) { 511 forop = op_prepend_elem(OP_LINESEQ, initop, 512 op_append_elem(OP_LINESEQ, 513 newOP(OP_UNSTACK, OPf_SPECIAL), 514 forop)); 515 } 516 PL_hints |= HINT_BLOCK_SCOPE; 517 (yyval.opval) = block_end((ps[-10].val.ival), forop); 518 parser->copline = (line_t)(ps[-12].val.ival); 519 } 520 521 break; 522 523 case 58: /* barestmt: KW_FOR KW_MY remember my_scalar PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ 524#line 520 "perly.y" 525 { 526 (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))); 527 parser->copline = (line_t)(ps[-8].val.ival); 528 } 529 530 break; 531 532 case 59: /* barestmt: KW_FOR KW_MY remember PERLY_PAREN_OPEN my_list_of_scalars PERLY_PAREN_CLOSE PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ 533#line 525 "perly.y" 534 { 535 if ((ps[-6].val.opval)->op_type == OP_PADSV) 536 /* degenerate case of 1 var: for my ($x) .... 537 Flag it so it can be special-cased in newFOROP */ 538 (ps[-6].val.opval)->op_flags |= OPf_PARENS; 539 (yyval.opval) = block_end((ps[-8].val.ival), newFOROP(0, (ps[-6].val.opval), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); 540 parser->copline = (line_t)(ps[-10].val.ival); 541 } 542 543 break; 544 545 case 60: /* barestmt: KW_FOR scalar PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ 546#line 534 "perly.y" 547 { 548 (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0, 549 op_lvalue((ps[-6].val.opval), OP_ENTERLOOP), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); 550 parser->copline = (line_t)(ps[-7].val.ival); 551 } 552 553 break; 554 555 case 61: /* @16: %empty */ 556#line 540 "perly.y" 557 { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } 558 559 break; 560 561 case 62: /* barestmt: KW_FOR my_refgen remember my_var @16 PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont */ 562#line 542 "perly.y" 563 { 564 (yyval.opval) = block_end( 565 (ps[-7].val.ival), 566 newFOROP(0, 567 op_lvalue( 568 newUNOP(OP_REFGEN, 0, 569 (ps[-5].val.opval)), 570 OP_ENTERLOOP), 571 (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)) 572 ); 573 parser->copline = (line_t)(ps[-9].val.ival); 574 } 575 576 break; 577 578 case 63: /* barestmt: KW_FOR REFGEN refgen_topic PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ 579#line 555 "perly.y" 580 { 581 (yyval.opval) = block_end((ps[-4].val.ival), newFOROP( 582 0, op_lvalue(newUNOP(OP_REFGEN, 0, 583 (ps[-6].val.opval)), 584 OP_ENTERLOOP), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); 585 parser->copline = (line_t)(ps[-8].val.ival); 586 } 587 588 break; 589 590 case 64: /* barestmt: KW_FOR PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont */ 591#line 563 "perly.y" 592 { 593 (yyval.opval) = block_end((ps[-4].val.ival), 594 newFOROP(0, NULL, (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); 595 parser->copline = (line_t)(ps[-6].val.ival); 596 } 597 598 break; 599 600 case 65: /* $@17: %empty */ 601#line 569 "perly.y" 602 { 603 if(!(ps[0].val.opval)) { 604 yyerror("catch block requires a (VAR)"); 605 YYERROR; 606 } 607 } 608 609 break; 610 611 case 66: /* barestmt: KW_TRY mblock KW_CATCH remember catch_paren $@17 mblock finally */ 612#line 576 "perly.y" 613 { 614 (yyval.opval) = newTRYCATCHOP(0, 615 (ps[-6].val.opval), (ps[-3].val.opval), block_end((ps[-4].val.ival), op_scope((ps[-1].val.opval)))); 616 if((ps[0].val.opval)) 617 (yyval.opval) = op_wrap_finally((yyval.opval), (ps[0].val.opval)); 618 parser->copline = (line_t)(ps[-7].val.ival); 619 } 620 621 break; 622 623 case 67: /* barestmt: block cont */ 624#line 584 "perly.y" 625 { 626 /* a block is a loop that happens once */ 627 (yyval.opval) = newWHILEOP(0, 1, NULL, 628 NULL, (ps[-1].val.opval), (ps[0].val.opval), 0); 629 } 630 631 break; 632 633 case 68: /* $@18: %empty */ 634#line 590 "perly.y" 635 { 636 package((ps[-2].val.opval)); 637 if ((ps[-3].val.opval)) { 638 package_version((ps[-3].val.opval)); 639 } 640 } 641 642 break; 643 644 case 69: /* barestmt: KW_PACKAGE BAREWORD BAREWORD PERLY_BRACE_OPEN remember $@18 stmtseq PERLY_BRACE_CLOSE */ 645#line 597 "perly.y" 646 { 647 /* a block is a loop that happens once */ 648 (yyval.opval) = newWHILEOP(0, 1, NULL, 649 NULL, block_end((ps[-3].val.ival), (ps[-1].val.opval)), NULL, 0); 650 if (parser->copline > (line_t)(ps[-4].val.ival)) 651 parser->copline = (line_t)(ps[-4].val.ival); 652 } 653 654 break; 655 656 case 70: /* $@19: %empty */ 657#line 605 "perly.y" 658 { 659 package((ps[-3].val.opval)); 660 661 if ((ps[-4].val.opval)) { 662 package_version((ps[-4].val.opval)); 663 } 664 class_setup_stash(PL_curstash); 665 if ((ps[-2].val.opval)) { 666 class_apply_attributes(PL_curstash, (ps[-2].val.opval)); 667 } 668 } 669 670 break; 671 672 case 71: /* barestmt: KW_CLASS BAREWORD BAREWORD subattrlist PERLY_BRACE_OPEN remember $@19 stmtseq PERLY_BRACE_CLOSE */ 673#line 617 "perly.y" 674 { 675 /* a block is a loop that happens once */ 676 (yyval.opval) = newWHILEOP(0, 1, NULL, 677 NULL, block_end((ps[-3].val.ival), (ps[-1].val.opval)), NULL, 0); 678 if (parser->copline > (line_t)(ps[-4].val.ival)) 679 parser->copline = (line_t)(ps[-4].val.ival); 680 } 681 682 break; 683 684 case 72: /* barestmt: fielddecl PERLY_SEMICOLON */ 685#line 625 "perly.y" 686 { 687 (yyval.opval) = (ps[-1].val.opval); 688 } 689 690 break; 691 692 case 73: /* barestmt: sideff PERLY_SEMICOLON */ 693#line 629 "perly.y" 694 { 695 (yyval.opval) = (ps[-1].val.opval); 696 } 697 698 break; 699 700 case 74: /* barestmt: KW_DEFER mblock */ 701#line 633 "perly.y" 702 { 703 (yyval.opval) = newDEFEROP(0, op_scope((ps[0].val.opval))); 704 } 705 706 break; 707 708 case 75: /* barestmt: YADAYADA PERLY_SEMICOLON */ 709#line 637 "perly.y" 710 { 711 /* diag_listed_as: Unimplemented */ 712 (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), 713 newSVOP(OP_CONST, 0, newSVpvs("Unimplemented"))); 714 } 715 716 break; 717 718 case 76: /* barestmt: PERLY_SEMICOLON */ 719#line 643 "perly.y" 720 { 721 (yyval.opval) = NULL; 722 parser->copline = NOLINE; 723 } 724 725 break; 726 727 case 77: /* formline: THING formarg */ 728#line 651 "perly.y" 729 { OP *list; 730 if ((ps[0].val.opval)) { 731 OP *term = (ps[0].val.opval); 732 list = op_append_elem(OP_LIST, (ps[-1].val.opval), term); 733 } 734 else { 735 list = (ps[-1].val.opval); 736 } 737 if (parser->copline == NOLINE) 738 parser->copline = CopLINE(PL_curcop)-1; 739 else parser->copline--; 740 (yyval.opval) = newSTATEOP(0, NULL, 741 op_convert_list(OP_FORMLINE, 0, list)); 742 } 743 744 break; 745 746 case 79: /* formarg: FORMLBRACK stmtseq FORMRBRACK */ 747#line 670 "perly.y" 748 { (yyval.opval) = op_unscope((ps[-1].val.opval)); } 749 750 break; 751 752 case 81: /* sideff: error */ 753#line 678 "perly.y" 754 { (yyval.opval) = NULL; } 755 756 break; 757 758 case 82: /* sideff: expr */ 759#line 680 "perly.y" 760 { (yyval.opval) = (ps[0].val.opval); } 761 762 break; 763 764 case 83: /* sideff: expr KW_IF condition */ 765#line 682 "perly.y" 766 { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); } 767 768 break; 769 770 case 84: /* sideff: expr KW_UNLESS condition */ 771#line 684 "perly.y" 772 { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); } 773 774 break; 775 776 case 85: /* sideff: expr KW_WHILE condition */ 777#line 686 "perly.y" 778 { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); } 779 780 break; 781 782 case 86: /* sideff: expr KW_UNTIL iexpr */ 783#line 688 "perly.y" 784 { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); } 785 786 break; 787 788 case 87: /* sideff: expr KW_FOR condition */ 789#line 690 "perly.y" 790 { (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL); 791 parser->copline = (line_t)(ps[-1].val.ival); } 792 793 break; 794 795 case 88: /* sideff: expr KW_WHEN condition */ 796#line 693 "perly.y" 797 { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); } 798 799 break; 800 801 case 90: /* else: KW_ELSE mblock */ 802#line 700 "perly.y" 803 { 804 ((ps[0].val.opval))->op_flags |= OPf_PARENS; 805 (yyval.opval) = op_scope((ps[0].val.opval)); 806 } 807 808 break; 809 810 case 91: /* else: KW_ELSIF PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock else */ 811#line 705 "perly.y" 812 { parser->copline = (line_t)(ps[-5].val.ival); 813 (yyval.opval) = newCONDOP(0, 814 newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)), 815 op_scope((ps[-1].val.opval)), (ps[0].val.opval)); 816 PL_hints |= HINT_BLOCK_SCOPE; 817 } 818 819 break; 820 821 case 93: /* cont: KW_CONTINUE block */ 822#line 717 "perly.y" 823 { (yyval.opval) = op_scope((ps[0].val.opval)); } 824 825 break; 826 827 case 94: /* finally: %empty */ 828#line 722 "perly.y" 829 { (yyval.opval) = NULL; } 830 831 break; 832 833 case 95: /* finally: KW_FINALLY block */ 834#line 724 "perly.y" 835 { (yyval.opval) = op_scope((ps[0].val.opval)); } 836 837 break; 838 839 case 96: /* mintro: %empty */ 840#line 729 "perly.y" 841 { (yyval.ival) = (PL_min_intro_pending && 842 PL_max_intro_pending >= PL_min_intro_pending); 843 intro_my(); } 844 845 break; 846 847 case 99: /* texpr: %empty */ 848#line 741 "perly.y" 849 { YYSTYPE tmplval; 850 (void)scan_num("1", &tmplval); 851 (yyval.opval) = tmplval.opval; } 852 853 break; 854 855 case 101: /* iexpr: expr */ 856#line 749 "perly.y" 857 { (yyval.opval) = invert(scalar((ps[0].val.opval))); } 858 859 break; 860 861 case 102: /* mexpr: expr */ 862#line 754 "perly.y" 863 { (yyval.opval) = (ps[0].val.opval); intro_my(); } 864 865 break; 866 867 case 103: /* mnexpr: nexpr */ 868#line 758 "perly.y" 869 { (yyval.opval) = (ps[0].val.opval); intro_my(); } 870 871 break; 872 873 case 104: /* formname: BAREWORD */ 874#line 761 "perly.y" 875 { (yyval.opval) = (ps[0].val.opval); } 876 877 break; 878 879 case 106: /* startsub: %empty */ 880#line 766 "perly.y" 881 { (yyval.ival) = start_subparse(FALSE, 0); 882 SAVEFREESV(PL_compcv); } 883 884 break; 885 886 case 107: /* startanonsub: %empty */ 887#line 772 "perly.y" 888 { (yyval.ival) = start_subparse(FALSE, CVf_ANON); 889 SAVEFREESV(PL_compcv); } 890 891 break; 892 893 case 108: /* startanonmethod: %empty */ 894#line 777 "perly.y" 895 { (yyval.ival) = start_subparse(FALSE, CVf_ANON|CVf_IsMETHOD); 896 SAVEFREESV(PL_compcv); } 897 898 break; 899 900 case 109: /* startformsub: %empty */ 901#line 782 "perly.y" 902 { (yyval.ival) = start_subparse(TRUE, 0); 903 SAVEFREESV(PL_compcv); } 904 905 break; 906 907 case 115: /* subattrlist: COLONATTR THING */ 908#line 801 "perly.y" 909 { 910 OP *attrlist = (ps[0].val.opval); 911 if(attrlist && !PL_parser->sig_seen) 912 attrlist = apply_builtin_cv_attributes(PL_compcv, attrlist); 913 (yyval.opval) = attrlist; 914 } 915 916 break; 917 918 case 116: /* subattrlist: COLONATTR */ 919#line 808 "perly.y" 920 { (yyval.opval) = NULL; } 921 922 break; 923 924 case 117: /* myattrlist: COLONATTR THING */ 925#line 813 "perly.y" 926 { (yyval.opval) = (ps[0].val.opval); } 927 928 break; 929 930 case 118: /* myattrlist: COLONATTR */ 931#line 815 "perly.y" 932 { (yyval.opval) = NULL; } 933 934 break; 935 936 case 119: /* sigvarname: %empty */ 937#line 826 "perly.y" 938 { parser->in_my = 0; (yyval.opval) = NULL; } 939 940 break; 941 942 case 120: /* sigvarname: PRIVATEREF */ 943#line 828 "perly.y" 944 { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } 945 946 break; 947 948 case 121: /* sigslurpsigil: PERLY_SNAIL */ 949#line 833 "perly.y" 950 { (yyval.ival) = '@'; } 951 952 break; 953 954 case 122: /* sigslurpsigil: PERLY_PERCENT_SIGN */ 955#line 835 "perly.y" 956 { (yyval.ival) = '%'; } 957 958 break; 959 960 case 123: /* sigslurpelem: sigslurpsigil sigvarname sigdefault */ 961#line 839 "perly.y" 962 { 963 I32 sigil = (ps[-2].val.ival); 964 OP *var = (ps[-1].val.opval); 965 OP *defop = (ps[0].val.opval); 966 967 if (parser->sig_slurpy) 968 yyerror("Multiple slurpy parameters not allowed"); 969 parser->sig_slurpy = (char)sigil; 970 971 if (defop) 972 yyerror("A slurpy parameter may not have " 973 "a default value"); 974 975 (yyval.opval) = var ? newSTATEOP(0, NULL, var) : NULL; 976 } 977 978 break; 979 980 case 125: /* sigdefault: ASSIGNOP */ 981#line 860 "perly.y" 982 { (yyval.opval) = newARGDEFELEMOP(0, newOP(OP_NULL, 0), parser->sig_elems); } 983 984 break; 985 986 case 126: /* sigdefault: ASSIGNOP term */ 987#line 862 "perly.y" 988 { 989 I32 flags = 0; 990 if ((ps[-1].val.ival) == OP_DORASSIGN) 991 flags |= OPpARG_IF_UNDEF << 8; 992 if ((ps[-1].val.ival) == OP_ORASSIGN) 993 flags |= OPpARG_IF_FALSE << 8; 994 (yyval.opval) = newARGDEFELEMOP(flags, (ps[0].val.opval), parser->sig_elems); 995 } 996 997 break; 998 999 case 127: /* sigscalarelem: PERLY_DOLLAR sigvarname sigdefault */ 1000#line 875 "perly.y" 1001 { 1002 OP *var = (ps[-1].val.opval); 1003 OP *defop = (ps[0].val.opval); 1004 1005 if (parser->sig_slurpy) 1006 yyerror("Slurpy parameter not last"); 1007 1008 parser->sig_elems++; 1009 1010 if (defop) { 1011 parser->sig_optelems++; 1012 1013 OP *defexpr = cLOGOPx(defop)->op_first; 1014 1015 if ( defexpr->op_type == OP_NULL 1016 && !(defexpr->op_flags & OPf_KIDS)) 1017 { 1018 /* handle '$=' special case */ 1019 if (var) 1020 yyerror("Optional parameter " 1021 "lacks default expression"); 1022 op_free(defop); 1023 } 1024 else { 1025 /* a normal '=default' expression */ 1026 if (var) { 1027 var->op_flags |= OPf_STACKED; 1028 (void)op_sibling_splice(var, 1029 NULL, 0, defop); 1030 scalar(defop); 1031 } 1032 else 1033 var = newUNOP(OP_NULL, 0, defop); 1034 1035 LINKLIST(var); 1036 /* NB: normally the first child of a 1037 * logop is executed before the logop, 1038 * and it pushes a boolean result 1039 * ready for the logop. For ARGDEFELEM, 1040 * the op itself does the boolean 1041 * calculation, so set the first op to 1042 * it instead. 1043 */ 1044 var->op_next = defop; 1045 defexpr->op_next = var; 1046 } 1047 } 1048 else { 1049 if (parser->sig_optelems) 1050 yyerror("Mandatory parameter " 1051 "follows optional parameter"); 1052 } 1053 1054 (yyval.opval) = var ? newSTATEOP(0, NULL, var) : NULL; 1055 } 1056 1057 break; 1058 1059 case 128: /* sigelem: sigscalarelem */ 1060#line 935 "perly.y" 1061 { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } 1062 1063 break; 1064 1065 case 129: /* sigelem: sigslurpelem */ 1066#line 937 "perly.y" 1067 { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } 1068 1069 break; 1070 1071 case 130: /* siglist: siglist PERLY_COMMA */ 1072#line 943 "perly.y" 1073 { (yyval.opval) = (ps[-1].val.opval); } 1074 1075 break; 1076 1077 case 131: /* siglist: siglist PERLY_COMMA sigelem */ 1078#line 945 "perly.y" 1079 { 1080 (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-2].val.opval), (ps[0].val.opval)); 1081 } 1082 1083 break; 1084 1085 case 132: /* siglist: sigelem */ 1086#line 949 "perly.y" 1087 { (yyval.opval) = (ps[0].val.opval); } 1088 1089 break; 1090 1091 case 137: /* subsignature: PERLY_PAREN_OPEN subsigguts PERLY_PAREN_CLOSE */ 1092#line 966 "perly.y" 1093 { (yyval.opval) = (ps[-1].val.opval); } 1094 1095 break; 1096 1097 case 138: /* $@20: %empty */ 1098#line 969 "perly.y" 1099 { 1100 ENTER; 1101 SAVEIV(parser->sig_elems); 1102 SAVEIV(parser->sig_optelems); 1103 SAVEI8(parser->sig_slurpy); 1104 parser->sig_elems = 0; 1105 parser->sig_optelems = 0; 1106 parser->sig_slurpy = 0; 1107 parser->in_my = KEY_sigvar; 1108 } 1109 1110 break; 1111 1112 case 139: /* subsigguts: $@20 optsiglist */ 1113#line 980 "perly.y" 1114 { 1115 OP *sigops = (ps[0].val.opval); 1116 struct op_argcheck_aux *aux; 1117 OP *check; 1118 1119 if (!FEATURE_SIGNATURES_IS_ENABLED && !CvIsMETHOD(PL_compcv)) 1120 Perl_croak(aTHX_ "Experimental " 1121 "subroutine signatures not enabled"); 1122 1123 /* We shouldn't get here otherwise */ 1124 aux = (struct op_argcheck_aux*) 1125 PerlMemShared_malloc( 1126 sizeof(struct op_argcheck_aux)); 1127 aux->params = parser->sig_elems; 1128 aux->opt_params = parser->sig_optelems; 1129 aux->slurpy = parser->sig_slurpy; 1130 check = newUNOP_AUX(OP_ARGCHECK, 0, NULL, 1131 (UNOP_AUX_item *)aux); 1132 sigops = op_prepend_elem(OP_LINESEQ, check, sigops); 1133 sigops = op_prepend_elem(OP_LINESEQ, 1134 newSTATEOP(0, NULL, NULL), 1135 sigops); 1136 /* a nextstate at the end handles context 1137 * correctly for an empty sub body */ 1138 sigops = op_append_elem(OP_LINESEQ, 1139 sigops, 1140 newSTATEOP(0, NULL, NULL)); 1141 /* wrap the list of arg ops in a NULL aux op. 1142 This serves two purposes. First, it makes 1143 the arg list a separate subtree from the 1144 body of the sub, and secondly the null op 1145 may in future be upgraded to an OP_SIGNATURE 1146 when implemented. For now leave it as 1147 ex-argcheck */ 1148 (yyval.opval) = newUNOP_AUX(OP_ARGCHECK, 0, sigops, NULL); 1149 op_null((yyval.opval)); 1150 1151 CvSIGNATURE_on(PL_compcv); 1152 1153 parser->in_my = 0; 1154 /* tell the toker that attrributes can follow 1155 * this sig, but only so that the toker 1156 * can skip through any (illegal) trailing 1157 * attribute text then give a useful error 1158 * message about "attributes before sig", 1159 * rather than falling over ina mess at 1160 * unrecognised syntax. 1161 */ 1162 parser->expect = XATTRBLOCK; 1163 parser->sig_seen = TRUE; 1164 LEAVE; 1165 } 1166 1167 break; 1168 1169 case 141: /* optsubbody: PERLY_SEMICOLON */ 1170#line 1037 "perly.y" 1171 { (yyval.opval) = NULL; } 1172 1173 break; 1174 1175 case 142: /* subbody: remember PERLY_BRACE_OPEN stmtseq PERLY_BRACE_CLOSE */ 1176#line 1043 "perly.y" 1177 { 1178 if (parser->copline > (line_t)(ps[-2].val.ival)) 1179 parser->copline = (line_t)(ps[-2].val.ival); 1180 (yyval.opval) = block_end((ps[-3].val.ival), (ps[-1].val.opval)); 1181 } 1182 1183 break; 1184 1185 case 144: /* optsigsubbody: PERLY_SEMICOLON */ 1186#line 1055 "perly.y" 1187 { (yyval.opval) = NULL; } 1188 1189 break; 1190 1191 case 145: /* $@21: %empty */ 1192#line 1060 "perly.y" 1193 { PL_parser->sig_seen = FALSE; } 1194 1195 break; 1196 1197 case 146: /* sigsubbody: remember optsubsignature PERLY_BRACE_OPEN $@21 stmtseq PERLY_BRACE_CLOSE */ 1198#line 1062 "perly.y" 1199 { 1200 if (parser->copline > (line_t)(ps[-3].val.ival)) 1201 parser->copline = (line_t)(ps[-3].val.ival); 1202 (yyval.opval) = block_end((ps[-5].val.ival), 1203 op_append_list(OP_LINESEQ, (ps[-4].val.opval), (ps[-1].val.opval))); 1204 } 1205 1206 break; 1207 1208 case 147: /* expr: expr ANDOP expr */ 1209#line 1073 "perly.y" 1210 { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } 1211 1212 break; 1213 1214 case 148: /* expr: expr PLUGIN_LOGICAL_AND_LOW_OP expr */ 1215#line 1075 "perly.y" 1216 { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } 1217 1218 break; 1219 1220 case 149: /* expr: expr OROP expr */ 1221#line 1077 "perly.y" 1222 { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } 1223 1224 break; 1225 1226 case 150: /* expr: expr PLUGIN_LOGICAL_OR_LOW_OP expr */ 1227#line 1079 "perly.y" 1228 { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } 1229 1230 break; 1231 1232 case 152: /* listexpr: listexpr PERLY_COMMA */ 1233#line 1085 "perly.y" 1234 { (yyval.opval) = (ps[-1].val.opval); } 1235 1236 break; 1237 1238 case 153: /* listexpr: listexpr PERLY_COMMA term */ 1239#line 1087 "perly.y" 1240 { 1241 OP* term = (ps[0].val.opval); 1242 (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term); 1243 } 1244 1245 break; 1246 1247 case 155: /* listop: LSTOP indirob listexpr */ 1248#line 1096 "perly.y" 1249 { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED, 1250 op_prepend_elem(OP_LIST, newGVREF((ps[-2].val.ival),(ps[-1].val.opval)), (ps[0].val.opval)) ); 1251 } 1252 1253 break; 1254 1255 case 156: /* listop: FUNC PERLY_PAREN_OPEN indirob expr PERLY_PAREN_CLOSE */ 1256#line 1100 "perly.y" 1257 { (yyval.opval) = op_convert_list((ps[-4].val.ival), OPf_STACKED, 1258 op_prepend_elem(OP_LIST, newGVREF((ps[-4].val.ival),(ps[-2].val.opval)), (ps[-1].val.opval)) ); 1259 } 1260 1261 break; 1262 1263 case 157: /* listop: term ARROW methodname PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ 1264#line 1104 "perly.y" 1265 { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, 1266 op_append_elem(OP_LIST, 1267 op_prepend_elem(OP_LIST, scalar((ps[-5].val.opval)), (ps[-1].val.opval)), 1268 newMETHOP(OP_METHOD, 0, (ps[-3].val.opval)))); 1269 } 1270 1271 break; 1272 1273 case 158: /* listop: term ARROW methodname */ 1274#line 1110 "perly.y" 1275 { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, 1276 op_append_elem(OP_LIST, scalar((ps[-2].val.opval)), 1277 newMETHOP(OP_METHOD, 0, (ps[0].val.opval)))); 1278 } 1279 1280 break; 1281 1282 case 159: /* listop: METHCALL0 indirob optlistexpr */ 1283#line 1115 "perly.y" 1284 { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, 1285 op_append_elem(OP_LIST, 1286 op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), 1287 newMETHOP(OP_METHOD, 0, (ps[-2].val.opval)))); 1288 } 1289 1290 break; 1291 1292 case 160: /* listop: METHCALL indirob PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ 1293#line 1121 "perly.y" 1294 { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, 1295 op_append_elem(OP_LIST, 1296 op_prepend_elem(OP_LIST, (ps[-3].val.opval), (ps[-1].val.opval)), 1297 newMETHOP(OP_METHOD, 0, (ps[-4].val.opval)))); 1298 } 1299 1300 break; 1301 1302 case 161: /* listop: LSTOP optlistexpr */ 1303#line 1127 "perly.y" 1304 { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); } 1305 1306 break; 1307 1308 case 162: /* listop: FUNC PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE */ 1309#line 1129 "perly.y" 1310 { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } 1311 1312 break; 1313 1314 case 163: /* listop: FUNC SUBLEXSTART optexpr SUBLEXEND */ 1315#line 1131 "perly.y" 1316 { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } 1317 1318 break; 1319 1320 case 164: /* @22: %empty */ 1321#line 1133 "perly.y" 1322 { SvREFCNT_inc_simple_void(PL_compcv); 1323 (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, NULL, (ps[0].val.opval)); 1324 /* prevent double op_free() if the following fails to parse */ 1325 (ps[0].val.opval) = NULL; 1326 } 1327 1328 break; 1329 1330 case 165: /* listop: LSTOPSUB startanonsub block @22 optlistexpr */ 1331#line 1139 "perly.y" 1332 { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, 1333 op_append_elem(OP_LIST, 1334 op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), (ps[-4].val.opval))); 1335 } 1336 1337 break; 1338 1339 case 168: /* subscripted: gelem PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ 1340#line 1154 "perly.y" 1341 { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); } 1342 1343 break; 1344 1345 case 169: /* subscripted: scalar PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ 1346#line 1156 "perly.y" 1347 { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); 1348 } 1349 1350 break; 1351 1352 case 170: /* subscripted: term ARROW PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ 1353#line 1159 "perly.y" 1354 { (yyval.opval) = newBINOP(OP_AELEM, 0, 1355 ref(newAVREF((ps[-4].val.opval)),OP_RV2AV), 1356 scalar((ps[-1].val.opval))); 1357 } 1358 1359 break; 1360 1361 case 171: /* subscripted: subscripted PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ 1362#line 1164 "perly.y" 1363 { (yyval.opval) = newBINOP(OP_AELEM, 0, 1364 ref(newAVREF((ps[-3].val.opval)),OP_RV2AV), 1365 scalar((ps[-1].val.opval))); 1366 } 1367 1368 break; 1369 1370 case 172: /* subscripted: scalar PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ 1371#line 1169 "perly.y" 1372 { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); 1373 } 1374 1375 break; 1376 1377 case 173: /* subscripted: term ARROW PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ 1378#line 1172 "perly.y" 1379 { (yyval.opval) = newBINOP(OP_HELEM, 0, 1380 ref(newHVREF((ps[-5].val.opval)),OP_RV2HV), 1381 jmaybe((ps[-2].val.opval))); } 1382 1383 break; 1384 1385 case 174: /* subscripted: subscripted PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ 1386#line 1176 "perly.y" 1387 { (yyval.opval) = newBINOP(OP_HELEM, 0, 1388 ref(newHVREF((ps[-4].val.opval)),OP_RV2HV), 1389 jmaybe((ps[-2].val.opval))); } 1390 1391 break; 1392 1393 case 175: /* subscripted: term ARROW PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ 1394#line 1180 "perly.y" 1395 { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, 1396 newCVREF(0, scalar((ps[-3].val.opval)))); 1397 if (parser->expect == XBLOCK) 1398 parser->expect = XOPERATOR; 1399 } 1400 1401 break; 1402 1403 case 176: /* subscripted: term ARROW PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ 1404#line 1186 "perly.y" 1405 { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, 1406 op_append_elem(OP_LIST, (ps[-1].val.opval), 1407 newCVREF(0, scalar((ps[-4].val.opval))))); 1408 if (parser->expect == XBLOCK) 1409 parser->expect = XOPERATOR; 1410 } 1411 1412 break; 1413 1414 case 177: /* subscripted: subscripted PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ 1415#line 1194 "perly.y" 1416 { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, 1417 op_append_elem(OP_LIST, (ps[-1].val.opval), 1418 newCVREF(0, scalar((ps[-3].val.opval))))); 1419 if (parser->expect == XBLOCK) 1420 parser->expect = XOPERATOR; 1421 } 1422 1423 break; 1424 1425 case 178: /* subscripted: subscripted PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ 1426#line 1201 "perly.y" 1427 { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, 1428 newCVREF(0, scalar((ps[-2].val.opval)))); 1429 if (parser->expect == XBLOCK) 1430 parser->expect = XOPERATOR; 1431 } 1432 1433 break; 1434 1435 case 179: /* subscripted: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ 1436#line 1207 "perly.y" 1437 { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); } 1438 1439 break; 1440 1441 case 180: /* subscripted: QWLIST PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ 1442#line 1209 "perly.y" 1443 { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } 1444 1445 break; 1446 1447 case 181: /* subscripted: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ 1448#line 1211 "perly.y" 1449 { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } 1450 1451 break; 1452 1453 case 182: /* termbinop: term PLUGIN_HIGH_OP term */ 1454#line 1216 "perly.y" 1455 { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } 1456 1457 break; 1458 1459 case 183: /* termbinop: term ASSIGNOP term */ 1460#line 1218 "perly.y" 1461 { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } 1462 1463 break; 1464 1465 case 184: /* termbinop: term PLUGIN_ASSIGN_OP term */ 1466#line 1220 "perly.y" 1467 { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } 1468 1469 break; 1470 1471 case 185: /* termbinop: term POWOP term */ 1472#line 1222 "perly.y" 1473 { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } 1474 1475 break; 1476 1477 case 186: /* termbinop: term PLUGIN_POW_OP term */ 1478#line 1224 "perly.y" 1479 { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } 1480 1481 break; 1482 1483 case 187: /* termbinop: term MULOP term */ 1484#line 1226 "perly.y" 1485 { if ((ps[-1].val.ival) != OP_REPEAT) 1486 scalar((ps[-2].val.opval)); 1487 (yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval))); 1488 } 1489 1490 break; 1491 1492 case 188: /* termbinop: term PLUGIN_MUL_OP term */ 1493#line 1231 "perly.y" 1494 { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } 1495 1496 break; 1497 1498 case 189: /* termbinop: term ADDOP term */ 1499#line 1233 "perly.y" 1500 { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } 1501 1502 break; 1503 1504 case 190: /* termbinop: term PLUGIN_ADD_OP term */ 1505#line 1235 "perly.y" 1506 { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } 1507 1508 break; 1509 1510 case 191: /* termbinop: term SHIFTOP term */ 1511#line 1237 "perly.y" 1512 { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } 1513 1514 break; 1515 1516 case 192: /* termbinop: termrelop */ 1517#line 1239 "perly.y" 1518 { (yyval.opval) = (ps[0].val.opval); } 1519 1520 break; 1521 1522 case 193: /* termbinop: termeqop */ 1523#line 1241 "perly.y" 1524 { (yyval.opval) = (ps[0].val.opval); } 1525 1526 break; 1527 1528 case 194: /* termbinop: term BITANDOP term */ 1529#line 1243 "perly.y" 1530 { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } 1531 1532 break; 1533 1534 case 195: /* termbinop: term BITOROP term */ 1535#line 1245 "perly.y" 1536 { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } 1537 1538 break; 1539 1540 case 196: /* termbinop: term DOTDOT term */ 1541#line 1247 "perly.y" 1542 { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } 1543 1544 break; 1545 1546 case 197: /* termbinop: term ANDAND term */ 1547#line 1249 "perly.y" 1548 { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } 1549 1550 break; 1551 1552 case 198: /* termbinop: term PLUGIN_LOGICAL_AND_OP term */ 1553#line 1251 "perly.y" 1554 { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } 1555 1556 break; 1557 1558 case 199: /* termbinop: term OROR term */ 1559#line 1253 "perly.y" 1560 { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } 1561 1562 break; 1563 1564 case 200: /* termbinop: term PLUGIN_LOGICAL_OR_OP term */ 1565#line 1255 "perly.y" 1566 { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } 1567 1568 break; 1569 1570 case 201: /* termbinop: term DORDOR term */ 1571#line 1257 "perly.y" 1572 { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } 1573 1574 break; 1575 1576 case 202: /* termbinop: term MATCHOP term */ 1577#line 1259 "perly.y" 1578 { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } 1579 1580 break; 1581 1582 case 203: /* termbinop: term PLUGIN_LOW_OP term */ 1583#line 1261 "perly.y" 1584 { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } 1585 1586 break; 1587 1588 case 204: /* termrelop: relopchain */ 1589#line 1265 "perly.y" 1590 { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } 1591 1592 break; 1593 1594 case 205: /* termrelop: term NCRELOP term */ 1595#line 1267 "perly.y" 1596 { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } 1597 1598 break; 1599 1600 case 206: /* termrelop: termrelop NCRELOP */ 1601#line 1269 "perly.y" 1602 { yyerror("syntax error"); YYERROR; } 1603 1604 break; 1605 1606 case 207: /* termrelop: termrelop CHRELOP */ 1607#line 1271 "perly.y" 1608 { yyerror("syntax error"); YYERROR; } 1609 1610 break; 1611 1612 case 208: /* termrelop: term PLUGIN_REL_OP term */ 1613#line 1273 "perly.y" 1614 { (yyval.opval) = build_infix_plugin((ps[-2].val.opval), (ps[0].val.opval), (ps[-1].val.pval)); } 1615 1616 break; 1617 1618 case 209: /* relopchain: term CHRELOP term */ 1619#line 1277 "perly.y" 1620 { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } 1621 1622 break; 1623 1624 case 210: /* relopchain: relopchain CHRELOP term */ 1625#line 1279 "perly.y" 1626 { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } 1627 1628 break; 1629 1630 case 211: /* termeqop: eqopchain */ 1631#line 1283 "perly.y" 1632 { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } 1633 1634 break; 1635 1636 case 212: /* termeqop: term NCEQOP term */ 1637#line 1285 "perly.y" 1638 { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } 1639 1640 break; 1641 1642 case 213: /* termeqop: termeqop NCEQOP */ 1643#line 1287 "perly.y" 1644 { yyerror("syntax error"); YYERROR; } 1645 1646 break; 1647 1648 case 214: /* termeqop: termeqop CHEQOP */ 1649#line 1289 "perly.y" 1650 { yyerror("syntax error"); YYERROR; } 1651 1652 break; 1653 1654 case 215: /* eqopchain: term CHEQOP term */ 1655#line 1293 "perly.y" 1656 { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } 1657 1658 break; 1659 1660 case 216: /* eqopchain: eqopchain CHEQOP term */ 1661#line 1295 "perly.y" 1662 { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } 1663 1664 break; 1665 1666 case 217: /* termunop: PERLY_MINUS term */ 1667#line 1300 "perly.y" 1668 { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } 1669 1670 break; 1671 1672 case 218: /* termunop: PERLY_PLUS term */ 1673#line 1302 "perly.y" 1674 { (yyval.opval) = (ps[0].val.opval); } 1675 1676 break; 1677 1678 case 219: /* termunop: PERLY_EXCLAMATION_MARK term */ 1679#line 1305 "perly.y" 1680 { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } 1681 1682 break; 1683 1684 case 220: /* termunop: PERLY_TILDE term */ 1685#line 1307 "perly.y" 1686 { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } 1687 1688 break; 1689 1690 case 221: /* termunop: term POSTINC */ 1691#line 1309 "perly.y" 1692 { (yyval.opval) = newUNOP(OP_POSTINC, 0, 1693 op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); } 1694 1695 break; 1696 1697 case 222: /* termunop: term POSTDEC */ 1698#line 1312 "perly.y" 1699 { (yyval.opval) = newUNOP(OP_POSTDEC, 0, 1700 op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));} 1701 1702 break; 1703 1704 case 223: /* termunop: term POSTJOIN */ 1705#line 1315 "perly.y" 1706 { (yyval.opval) = op_convert_list(OP_JOIN, 0, 1707 op_append_elem( 1708 OP_LIST, 1709 newSVREF(scalar( 1710 newSVOP(OP_CONST,0, 1711 newSVpvs("\"")) 1712 )), 1713 (ps[-1].val.opval) 1714 )); 1715 } 1716 1717 break; 1718 1719 case 224: /* termunop: PREINC term */ 1720#line 1326 "perly.y" 1721 { (yyval.opval) = newUNOP(OP_PREINC, 0, 1722 op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); } 1723 1724 break; 1725 1726 case 225: /* termunop: PREDEC term */ 1727#line 1329 "perly.y" 1728 { (yyval.opval) = newUNOP(OP_PREDEC, 0, 1729 op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); } 1730 1731 break; 1732 1733 case 226: /* anonymous: PERLY_BRACKET_OPEN optexpr PERLY_BRACKET_CLOSE */ 1734#line 1337 "perly.y" 1735 { (yyval.opval) = newANONLIST((ps[-1].val.opval)); } 1736 1737 break; 1738 1739 case 227: /* anonymous: HASHBRACK optexpr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ 1740#line 1339 "perly.y" 1741 { (yyval.opval) = newANONHASH((ps[-2].val.opval)); } 1742 1743 break; 1744 1745 case 228: /* anonymous: KW_SUB_anon startanonsub proto subattrlist subbody */ 1746#line 1341 "perly.y" 1747 { SvREFCNT_inc_simple_void(PL_compcv); 1748 (yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); } 1749 1750 break; 1751 1752 case 229: /* anonymous: KW_SUB_anon_sig startanonsub subattrlist sigsubbody */ 1753#line 1344 "perly.y" 1754 { SvREFCNT_inc_simple_void(PL_compcv); 1755 (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); } 1756 1757 break; 1758 1759 case 230: /* anonymous: KW_METHOD_anon startanonmethod subattrlist sigsubbody */ 1760#line 1347 "perly.y" 1761 { 1762 SvREFCNT_inc_simple_void(PL_compcv); 1763 (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); 1764 } 1765 1766 break; 1767 1768 case 231: /* termdo: KW_DO term */ 1769#line 1355 "perly.y" 1770 { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));} 1771 1772 break; 1773 1774 case 232: /* termdo: KW_DO block */ 1775#line 1357 "perly.y" 1776 { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));} 1777 1778 break; 1779 1780 case 237: /* term: term PERLY_QUESTION_MARK term PERLY_COLON term */ 1781#line 1365 "perly.y" 1782 { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } 1783 1784 break; 1785 1786 case 238: /* term: REFGEN term */ 1787#line 1367 "perly.y" 1788 { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } 1789 1790 break; 1791 1792 case 239: /* term: myattrterm */ 1793#line 1369 "perly.y" 1794 { (yyval.opval) = (ps[0].val.opval); } 1795 1796 break; 1797 1798 case 240: /* term: KW_LOCAL term */ 1799#line 1371 "perly.y" 1800 { (yyval.opval) = localize((ps[0].val.opval),0); } 1801 1802 break; 1803 1804 case 241: /* term: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ 1805#line 1373 "perly.y" 1806 { (yyval.opval) = sawparens((ps[-1].val.opval)); } 1807 1808 break; 1809 1810 case 242: /* term: QWLIST */ 1811#line 1375 "perly.y" 1812 { (yyval.opval) = (ps[0].val.opval); } 1813 1814 break; 1815 1816 case 243: /* term: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ 1817#line 1377 "perly.y" 1818 { (yyval.opval) = sawparens(newNULLLIST()); } 1819 1820 break; 1821 1822 case 244: /* term: scalar */ 1823#line 1379 "perly.y" 1824 { (yyval.opval) = (ps[0].val.opval); } 1825 1826 break; 1827 1828 case 245: /* term: star */ 1829#line 1381 "perly.y" 1830 { (yyval.opval) = (ps[0].val.opval); } 1831 1832 break; 1833 1834 case 246: /* term: hsh */ 1835#line 1383 "perly.y" 1836 { (yyval.opval) = (ps[0].val.opval); } 1837 1838 break; 1839 1840 case 247: /* term: ary */ 1841#line 1385 "perly.y" 1842 { (yyval.opval) = (ps[0].val.opval); } 1843 1844 break; 1845 1846 case 248: /* term: arylen */ 1847#line 1387 "perly.y" 1848 { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} 1849 1850 break; 1851 1852 case 249: /* term: subscripted */ 1853#line 1389 "perly.y" 1854 { (yyval.opval) = (ps[0].val.opval); } 1855 1856 break; 1857 1858 case 250: /* term: sliceme PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ 1859#line 1391 "perly.y" 1860 { (yyval.opval) = op_prepend_elem(OP_ASLICE, 1861 newOP(OP_PUSHMARK, 0), 1862 newLISTOP(OP_ASLICE, 0, 1863 list((ps[-1].val.opval)), 1864 ref((ps[-3].val.opval), OP_ASLICE))); 1865 if ((yyval.opval) && (ps[-3].val.opval)) 1866 (yyval.opval)->op_private |= 1867 (ps[-3].val.opval)->op_private & OPpSLICEWARNING; 1868 } 1869 1870 break; 1871 1872 case 251: /* term: kvslice PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE */ 1873#line 1401 "perly.y" 1874 { (yyval.opval) = op_prepend_elem(OP_KVASLICE, 1875 newOP(OP_PUSHMARK, 0), 1876 newLISTOP(OP_KVASLICE, 0, 1877 list((ps[-1].val.opval)), 1878 ref(oopsAV((ps[-3].val.opval)), OP_KVASLICE))); 1879 if ((yyval.opval) && (ps[-3].val.opval)) 1880 (yyval.opval)->op_private |= 1881 (ps[-3].val.opval)->op_private & OPpSLICEWARNING; 1882 } 1883 1884 break; 1885 1886 case 252: /* term: sliceme PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ 1887#line 1411 "perly.y" 1888 { (yyval.opval) = op_prepend_elem(OP_HSLICE, 1889 newOP(OP_PUSHMARK, 0), 1890 newLISTOP(OP_HSLICE, 0, 1891 list((ps[-2].val.opval)), 1892 ref(oopsHV((ps[-4].val.opval)), OP_HSLICE))); 1893 if ((yyval.opval) && (ps[-4].val.opval)) 1894 (yyval.opval)->op_private |= 1895 (ps[-4].val.opval)->op_private & OPpSLICEWARNING; 1896 } 1897 1898 break; 1899 1900 case 253: /* term: kvslice PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE */ 1901#line 1421 "perly.y" 1902 { (yyval.opval) = op_prepend_elem(OP_KVHSLICE, 1903 newOP(OP_PUSHMARK, 0), 1904 newLISTOP(OP_KVHSLICE, 0, 1905 list((ps[-2].val.opval)), 1906 ref((ps[-4].val.opval), OP_KVHSLICE))); 1907 if ((yyval.opval) && (ps[-4].val.opval)) 1908 (yyval.opval)->op_private |= 1909 (ps[-4].val.opval)->op_private & OPpSLICEWARNING; 1910 } 1911 1912 break; 1913 1914 case 254: /* term: THING */ 1915#line 1431 "perly.y" 1916 { (yyval.opval) = (ps[0].val.opval); } 1917 1918 break; 1919 1920 case 255: /* term: amper */ 1921#line 1433 "perly.y" 1922 { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); } 1923 1924 break; 1925 1926 case 256: /* term: amper PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ 1927#line 1435 "perly.y" 1928 { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval))); 1929 } 1930 1931 break; 1932 1933 case 257: /* term: amper PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ 1934#line 1438 "perly.y" 1935 { 1936 (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, 1937 op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval)))); 1938 } 1939 1940 break; 1941 1942 case 258: /* term: NOAMP subname optlistexpr */ 1943#line 1443 "perly.y" 1944 { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, 1945 op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); 1946 } 1947 1948 break; 1949 1950 case 259: /* term: term ARROW PERLY_DOLLAR PERLY_STAR */ 1951#line 1447 "perly.y" 1952 { (yyval.opval) = newSVREF((ps[-3].val.opval)); } 1953 1954 break; 1955 1956 case 260: /* term: term ARROW PERLY_SNAIL PERLY_STAR */ 1957#line 1449 "perly.y" 1958 { (yyval.opval) = newAVREF((ps[-3].val.opval)); } 1959 1960 break; 1961 1962 case 261: /* term: term ARROW PERLY_PERCENT_SIGN PERLY_STAR */ 1963#line 1451 "perly.y" 1964 { (yyval.opval) = newHVREF((ps[-3].val.opval)); } 1965 1966 break; 1967 1968 case 262: /* term: term ARROW PERLY_AMPERSAND PERLY_STAR */ 1969#line 1453 "perly.y" 1970 { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, 1971 scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); } 1972 1973 break; 1974 1975 case 263: /* term: term ARROW PERLY_STAR PERLY_STAR */ 1976#line 1456 "perly.y" 1977 { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); } 1978 1979 break; 1980 1981 case 264: /* term: LOOPEX */ 1982#line 1458 "perly.y" 1983 { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL); 1984 PL_hints |= HINT_BLOCK_SCOPE; } 1985 1986 break; 1987 1988 case 265: /* term: LOOPEX term */ 1989#line 1461 "perly.y" 1990 { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); } 1991 1992 break; 1993 1994 case 266: /* term: NOTOP listexpr */ 1995#line 1463 "perly.y" 1996 { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } 1997 1998 break; 1999 2000 case 267: /* term: UNIOP */ 2001#line 1465 "perly.y" 2002 { (yyval.opval) = newOP((ps[0].val.ival), 0); } 2003 2004 break; 2005 2006 case 268: /* term: UNIOP block */ 2007#line 1467 "perly.y" 2008 { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } 2009 2010 break; 2011 2012 case 269: /* term: UNIOP term */ 2013#line 1469 "perly.y" 2014 { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } 2015 2016 break; 2017 2018 case 270: /* term: KW_REQUIRE */ 2019#line 1471 "perly.y" 2020 { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } 2021 2022 break; 2023 2024 case 271: /* term: KW_REQUIRE term */ 2025#line 1473 "perly.y" 2026 { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } 2027 2028 break; 2029 2030 case 272: /* term: UNIOPSUB */ 2031#line 1475 "perly.y" 2032 { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } 2033 2034 break; 2035 2036 case 273: /* term: UNIOPSUB term */ 2037#line 1477 "perly.y" 2038 { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, 2039 op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } 2040 2041 break; 2042 2043 case 274: /* term: FUNC0 */ 2044#line 1480 "perly.y" 2045 { (yyval.opval) = newOP((ps[0].val.ival), 0); } 2046 2047 break; 2048 2049 case 275: /* term: FUNC0 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ 2050#line 1482 "perly.y" 2051 { (yyval.opval) = newOP((ps[-2].val.ival), 0);} 2052 2053 break; 2054 2055 case 276: /* term: FUNC0OP */ 2056#line 1484 "perly.y" 2057 { (yyval.opval) = (ps[0].val.opval); } 2058 2059 break; 2060 2061 case 277: /* term: FUNC0OP PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ 2062#line 1486 "perly.y" 2063 { (yyval.opval) = (ps[-2].val.opval); } 2064 2065 break; 2066 2067 case 278: /* term: FUNC0SUB */ 2068#line 1488 "perly.y" 2069 { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } 2070 2071 break; 2072 2073 case 279: /* term: FUNC1 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ 2074#line 1490 "perly.y" 2075 { (yyval.opval) = ((ps[-2].val.ival) == OP_NOT) 2076 ? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0))) 2077 : newOP((ps[-2].val.ival), OPf_SPECIAL); } 2078 2079 break; 2080 2081 case 280: /* term: FUNC1 PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ 2082#line 1494 "perly.y" 2083 { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); } 2084 2085 break; 2086 2087 case 281: /* @23: %empty */ 2088#line 1496 "perly.y" 2089 { 2090 if ( (ps[0].val.opval)->op_type != OP_TRANS 2091 && (ps[0].val.opval)->op_type != OP_TRANSR 2092 && (((PMOP*)(ps[0].val.opval))->op_pmflags & PMf_HAS_CV)) 2093 { 2094 (yyval.ival) = start_subparse(FALSE, CVf_ANON); 2095 SAVEFREESV(PL_compcv); 2096 } else 2097 (yyval.ival) = 0; 2098 } 2099 2100 break; 2101 2102 case 282: /* term: PMFUNC @23 SUBLEXSTART listexpr optrepl SUBLEXEND */ 2103#line 1507 "perly.y" 2104 { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); } 2105 2106 break; 2107 2108 case 286: /* myattrterm: KW_MY myterm myattrlist */ 2109#line 1516 "perly.y" 2110 { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } 2111 2112 break; 2113 2114 case 287: /* myattrterm: KW_MY myterm */ 2115#line 1518 "perly.y" 2116 { (yyval.opval) = localize((ps[0].val.opval),1); } 2117 2118 break; 2119 2120 case 288: /* myattrterm: KW_MY REFGEN myterm myattrlist */ 2121#line 1520 "perly.y" 2122 { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } 2123 2124 break; 2125 2126 case 289: /* myattrterm: KW_MY REFGEN term */ 2127#line 1522 "perly.y" 2128 { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } 2129 2130 break; 2131 2132 case 290: /* myterm: PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE */ 2133#line 1527 "perly.y" 2134 { (yyval.opval) = sawparens((ps[-1].val.opval)); } 2135 2136 break; 2137 2138 case 291: /* myterm: PERLY_PAREN_OPEN PERLY_PAREN_CLOSE */ 2139#line 1529 "perly.y" 2140 { (yyval.opval) = sawparens(newNULLLIST()); } 2141 2142 break; 2143 2144 case 292: /* myterm: scalar */ 2145#line 1532 "perly.y" 2146 { (yyval.opval) = (ps[0].val.opval); } 2147 2148 break; 2149 2150 case 293: /* myterm: hsh */ 2151#line 1534 "perly.y" 2152 { (yyval.opval) = (ps[0].val.opval); } 2153 2154 break; 2155 2156 case 294: /* myterm: ary */ 2157#line 1536 "perly.y" 2158 { (yyval.opval) = (ps[0].val.opval); } 2159 2160 break; 2161 2162 case 295: /* fieldvar: scalar */ 2163#line 1541 "perly.y" 2164 { 2165 (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; 2166 op_free((ps[0].val.opval)); 2167 } 2168 2169 break; 2170 2171 case 296: /* fieldvar: hsh */ 2172#line 1546 "perly.y" 2173 { 2174 (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; 2175 op_free((ps[0].val.opval)); 2176 } 2177 2178 break; 2179 2180 case 297: /* fieldvar: ary */ 2181#line 1551 "perly.y" 2182 { 2183 (yyval.pval) = PadnamelistARRAY(PL_comppad_name)[(ps[0].val.opval)->op_targ]; 2184 op_free((ps[0].val.opval)); 2185 } 2186 2187 break; 2188 2189 case 298: /* optfieldattrlist: COLONATTR THING */ 2190#line 1559 "perly.y" 2191 { (yyval.opval) = (ps[0].val.opval); } 2192 2193 break; 2194 2195 case 299: /* optfieldattrlist: COLONATTR */ 2196#line 1561 "perly.y" 2197 { (yyval.opval) = NULL; } 2198 2199 break; 2200 2201 case 301: /* fielddecl: KW_FIELD fieldvar optfieldattrlist */ 2202#line 1567 "perly.y" 2203 { 2204 parser->in_my = 0; 2205 if((ps[0].val.opval)) 2206 class_apply_field_attributes((PADNAME *)(ps[-1].val.pval), (ps[0].val.opval)); 2207 (yyval.opval) = newOP(OP_NULL, 0); 2208 } 2209 2210 break; 2211 2212 case 302: /* $@24: %empty */ 2213#line 1574 "perly.y" 2214 { 2215 parser->in_my = 0; 2216 if((ps[-1].val.opval)) 2217 class_apply_field_attributes((PADNAME *)(ps[-2].val.pval), (ps[-1].val.opval)); 2218 ENTER; 2219 class_prepare_initfield_parse(); 2220 } 2221 2222 break; 2223 2224 case 303: /* fielddecl: KW_FIELD fieldvar optfieldattrlist ASSIGNOP $@24 term */ 2225#line 1582 "perly.y" 2226 { 2227 class_set_field_defop((PADNAME *)(ps[-4].val.pval), (ps[-2].val.ival), (ps[0].val.opval)); 2228 LEAVE; 2229 (yyval.opval) = newOP(OP_NULL, 0); 2230 } 2231 2232 break; 2233 2234 case 309: /* optrepl: PERLY_SLASH expr */ 2235#line 1602 "perly.y" 2236 { (yyval.opval) = (ps[0].val.opval); } 2237 2238 break; 2239 2240 case 310: /* my_scalar: scalar */ 2241#line 1608 "perly.y" 2242 { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } 2243 2244 break; 2245 2246 case 311: /* list_of_scalars: list_of_scalars PERLY_COMMA */ 2247#line 1613 "perly.y" 2248 { (yyval.opval) = (ps[-1].val.opval); } 2249 2250 break; 2251 2252 case 312: /* list_of_scalars: list_of_scalars PERLY_COMMA scalar */ 2253#line 1615 "perly.y" 2254 { 2255 (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), (ps[0].val.opval)); 2256 } 2257 2258 break; 2259 2260 case 314: /* my_list_of_scalars: list_of_scalars */ 2261#line 1622 "perly.y" 2262 { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } 2263 2264 break; 2265 2266 case 322: /* amper: PERLY_AMPERSAND indirob */ 2267#line 1639 "perly.y" 2268 { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); } 2269 2270 break; 2271 2272 case 323: /* scalar: PERLY_DOLLAR indirob */ 2273#line 1643 "perly.y" 2274 { (yyval.opval) = newSVREF((ps[0].val.opval)); } 2275 2276 break; 2277 2278 case 324: /* ary: PERLY_SNAIL indirob */ 2279#line 1647 "perly.y" 2280 { (yyval.opval) = newAVREF((ps[0].val.opval)); 2281 if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); 2282 } 2283 2284 break; 2285 2286 case 325: /* hsh: PERLY_PERCENT_SIGN indirob */ 2287#line 1653 "perly.y" 2288 { (yyval.opval) = newHVREF((ps[0].val.opval)); 2289 if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); 2290 } 2291 2292 break; 2293 2294 case 326: /* arylen: DOLSHARP indirob */ 2295#line 1659 "perly.y" 2296 { (yyval.opval) = newAVREF((ps[0].val.opval)); } 2297 2298 break; 2299 2300 case 327: /* arylen: term ARROW DOLSHARP PERLY_STAR */ 2301#line 1661 "perly.y" 2302 { (yyval.opval) = newAVREF((ps[-3].val.opval)); } 2303 2304 break; 2305 2306 case 328: /* star: PERLY_STAR indirob */ 2307#line 1665 "perly.y" 2308 { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); } 2309 2310 break; 2311 2312 case 330: /* sliceme: term ARROW PERLY_SNAIL */ 2313#line 1670 "perly.y" 2314 { (yyval.opval) = newAVREF((ps[-2].val.opval)); } 2315 2316 break; 2317 2318 case 332: /* kvslice: term ARROW PERLY_PERCENT_SIGN */ 2319#line 1675 "perly.y" 2320 { (yyval.opval) = newHVREF((ps[-2].val.opval)); } 2321 2322 break; 2323 2324 case 334: /* gelem: term ARROW PERLY_STAR */ 2325#line 1680 "perly.y" 2326 { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } 2327 2328 break; 2329 2330 case 335: /* indirob: BAREWORD */ 2331#line 1685 "perly.y" 2332 { (yyval.opval) = scalar((ps[0].val.opval)); } 2333 2334 break; 2335 2336 case 336: /* indirob: scalar */ 2337#line 1687 "perly.y" 2338 { (yyval.opval) = scalar((ps[0].val.opval)); } 2339 2340 break; 2341 2342 case 337: /* indirob: block */ 2343#line 1689 "perly.y" 2344 { (yyval.opval) = op_scope((ps[0].val.opval)); } 2345 2346 break; 2347 2348 case 338: /* indirob: PRIVATEREF */ 2349#line 1692 "perly.y" 2350 { (yyval.opval) = (ps[0].val.opval); } 2351 2352 break; 2353 2354 2355 2356 2357 default: break; 2358 2359 2360/* Generated from: 2361 * 823630846fc59cc2a19502726ec723b568eabded55fdc5e9722c600e1098779e perly.y 2362 * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl 2363 * ex: set ro ft=c: */ 2364