1 #line 2 "op.c" 2 /* op.c 3 * 4 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 5 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others 6 * 7 * You may distribute under the terms of either the GNU General Public 8 * License or the Artistic License, as specified in the README file. 9 * 10 */ 11 12 /* 13 * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was 14 * our Mr. Bilbo's first cousin on the mother's side (her mother being the 15 * youngest of the Old Took's daughters); and Mr. Drogo was his second 16 * cousin. So Mr. Frodo is his first *and* second cousin, once removed 17 * either way, as the saying is, if you follow me.' --the Gaffer 18 * 19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"] 20 */ 21 22 /* This file contains the functions that create, manipulate and optimize 23 * the OP structures that hold a compiled perl program. 24 * 25 * Note that during the build of miniperl, a temporary copy of this file 26 * is made, called opmini.c. 27 * 28 * A Perl program is compiled into a tree of OP nodes. Each op contains: 29 * * structural OP pointers to its children and siblings (op_sibling, 30 * op_first etc) that define the tree structure; 31 * * execution order OP pointers (op_next, plus sometimes op_other, 32 * op_lastop etc) that define the execution sequence plus variants; 33 * * a pointer to the C "pp" function that would execute the op; 34 * * any data specific to that op. 35 * For example, an OP_CONST op points to the pp_const() function and to an 36 * SV containing the constant value. When pp_const() is executed, its job 37 * is to push that SV onto the stack. 38 * 39 * OPs are mainly created by the newFOO() functions, which are mainly 40 * called from the parser (in perly.y) as the code is parsed. For example 41 * the Perl code $a + $b * $c would cause the equivalent of the following 42 * to be called (oversimplifying a bit): 43 * 44 * newBINOP(OP_ADD, flags, 45 * newSVREF($a), 46 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c)) 47 * ) 48 * 49 * As the parser reduces low-level rules, it creates little op subtrees; 50 * as higher-level rules are resolved, these subtrees get joined together 51 * as branches on a bigger subtree, until eventually a top-level rule like 52 * a subroutine definition is reduced, at which point there is one large 53 * parse tree left. 54 * 55 * The execution order pointers (op_next) are generated as the subtrees 56 * are joined together. Consider this sub-expression: A*B + C/D: at the 57 * point when it's just been parsed, the op tree looks like: 58 * 59 * [+] 60 * | 61 * [*]------[/] 62 * | | 63 * A---B C---D 64 * 65 * with the intended execution order being: 66 * 67 * [PREV] => A => B => [*] => C => D => [/] => [+] => [NEXT] 68 * 69 * At this point all the nodes' op_next pointers will have been set, 70 * except that: 71 * * we don't know what the [NEXT] node will be yet; 72 * * we don't know what the [PREV] node will be yet, but when it gets 73 * created and needs its op_next set, it needs to be set to point to 74 * A, which is non-obvious. 75 * To handle both those cases, we temporarily set the top node's 76 * op_next to point to the first node to be executed in this subtree (A in 77 * this case). This means that initially a subtree's op_next chain, 78 * starting from the top node, will visit each node in execution sequence 79 * then point back at the top node. 80 * When we embed this subtree in a larger tree, its top op_next is used 81 * to get the start node, then is set to point to its new neighbour. 82 * For example the two separate [*],A,B and [/],C,D subtrees would 83 * initially have had: 84 * [*] => A; A => B; B => [*] 85 * and 86 * [/] => C; C => D; D => [/] 87 * When these two subtrees were joined together to make the [+] subtree, 88 * [+]'s op_next was set to [*]'s op_next, i.e. A; then [*]'s op_next was 89 * set to point to [/]'s op_next, i.e. C. 90 * 91 * This op_next linking is done by the LINKLIST() macro and its underlying 92 * op_linklist() function. Given a top-level op, if its op_next is 93 * non-null, it's already been linked, so leave it. Otherwise link it with 94 * its children as described above, possibly recursively if any of the 95 * children have a null op_next. 96 * 97 * In summary: given a subtree, its top-level node's op_next will either 98 * be: 99 * NULL: the subtree hasn't been LINKLIST()ed yet; 100 * fake: points to the start op for this subtree; 101 * real: once the subtree has been embedded into a larger tree 102 */ 103 104 /* 105 106 Here's an older description from Larry. 107 108 Perl's compiler is essentially a 3-pass compiler with interleaved phases: 109 110 A bottom-up pass 111 A top-down pass 112 An execution-order pass 113 114 The bottom-up pass is represented by all the "newOP" routines and 115 the ck_ routines. The bottom-upness is actually driven by yacc. 116 So at the point that a ck_ routine fires, we have no idea what the 117 context is, either upward in the syntax tree, or either forward or 118 backward in the execution order. (The bottom-up parser builds that 119 part of the execution order it knows about, but if you follow the "next" 120 links around, you'll find it's actually a closed loop through the 121 top level node.) 122 123 Whenever the bottom-up parser gets to a node that supplies context to 124 its components, it invokes that portion of the top-down pass that applies 125 to that part of the subtree (and marks the top node as processed, so 126 if a node further up supplies context, it doesn't have to take the 127 plunge again). As a particular subcase of this, as the new node is 128 built, it takes all the closed execution loops of its subcomponents 129 and links them into a new closed loop for the higher level node. But 130 it's still not the real execution order. 131 132 The actual execution order is not known till we get a grammar reduction 133 to a top-level unit like a subroutine or file that will be called by 134 "name" rather than via a "next" pointer. At that point, we can call 135 into peep() to do that code's portion of the 3rd pass. It has to be 136 recursive, but it's recursive on basic blocks, not on tree nodes. 137 */ 138 139 /* To implement user lexical pragmas, there needs to be a way at run time to 140 get the compile time state of %^H for that block. Storing %^H in every 141 block (or even COP) would be very expensive, so a different approach is 142 taken. The (running) state of %^H is serialised into a tree of HE-like 143 structs. Stores into %^H are chained onto the current leaf as a struct 144 refcounted_he * with the key and the value. Deletes from %^H are saved 145 with a value of PL_sv_placeholder. The state of %^H at any point can be 146 turned back into a regular HV by walking back up the tree from that point's 147 leaf, ignoring any key you've already seen (placeholder or not), storing 148 the rest into the HV structure, then removing the placeholders. Hence 149 memory is only used to store the %^H deltas from the enclosing COP, rather 150 than the entire %^H on each COP. 151 152 To cause actions on %^H to write out the serialisation records, it has 153 magic type 'H'. This magic (itself) does nothing, but its presence causes 154 the values to gain magic type 'h', which has entries for set and clear. 155 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store 156 record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS> 157 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that 158 it will be correctly restored when any inner compiling scope is exited. 159 */ 160 161 #include "EXTERN.h" 162 #define PERL_IN_OP_C 163 #include "perl.h" 164 #include "keywords.h" 165 #include "feature.h" 166 #include "regcomp.h" 167 168 #define CALL_PEEP(o) PL_peepp(aTHX_ o) 169 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o) 170 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o) 171 172 static const char array_passed_to_stat[] = "Array passed to stat will be coerced to a scalar"; 173 174 /* Used to avoid recursion through the op tree in scalarvoid() and 175 op_free() 176 */ 177 178 #define dDEFER_OP \ 179 SSize_t defer_stack_alloc = 0; \ 180 SSize_t defer_ix = -1; \ 181 OP **defer_stack = NULL; 182 #define DEFER_OP_CLEANUP Safefree(defer_stack) 183 #define DEFERRED_OP_STEP 100 184 #define DEFER_OP(o) \ 185 STMT_START { \ 186 if (UNLIKELY(defer_ix == (defer_stack_alloc-1))) { \ 187 defer_stack_alloc += DEFERRED_OP_STEP; \ 188 assert(defer_stack_alloc > 0); \ 189 Renew(defer_stack, defer_stack_alloc, OP *); \ 190 } \ 191 defer_stack[++defer_ix] = o; \ 192 } STMT_END 193 #define DEFER_REVERSE(count) \ 194 STMT_START { \ 195 UV cnt = (count); \ 196 if (cnt > 1) { \ 197 OP **top = defer_stack + defer_ix; \ 198 /* top - (cnt) + 1 isn't safe here */ \ 199 OP **bottom = top - (cnt - 1); \ 200 OP *tmp; \ 201 assert(bottom >= defer_stack); \ 202 while (top > bottom) { \ 203 tmp = *top; \ 204 *top-- = *bottom; \ 205 *bottom++ = tmp; \ 206 } \ 207 } \ 208 } STMT_END; 209 210 #define POP_DEFERRED_OP() (defer_ix >= 0 ? defer_stack[defer_ix--] : (OP *)NULL) 211 212 /* remove any leading "empty" ops from the op_next chain whose first 213 * node's address is stored in op_p. Store the updated address of the 214 * first node in op_p. 215 */ 216 217 STATIC void 218 S_prune_chain_head(OP** op_p) 219 { 220 while (*op_p 221 && ( (*op_p)->op_type == OP_NULL 222 || (*op_p)->op_type == OP_SCOPE 223 || (*op_p)->op_type == OP_SCALAR 224 || (*op_p)->op_type == OP_LINESEQ) 225 ) 226 *op_p = (*op_p)->op_next; 227 } 228 229 230 /* See the explanatory comments above struct opslab in op.h. */ 231 232 #ifdef PERL_DEBUG_READONLY_OPS 233 # define PERL_SLAB_SIZE 128 234 # define PERL_MAX_SLAB_SIZE 4096 235 # include <sys/mman.h> 236 #endif 237 238 #ifndef PERL_SLAB_SIZE 239 # define PERL_SLAB_SIZE 64 240 #endif 241 #ifndef PERL_MAX_SLAB_SIZE 242 # define PERL_MAX_SLAB_SIZE 2048 243 #endif 244 245 /* rounds up to nearest pointer */ 246 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *)) 247 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o))) 248 249 /* malloc a new op slab (suitable for attaching to PL_compcv) */ 250 251 static OPSLAB * 252 S_new_slab(pTHX_ size_t sz) 253 { 254 #ifdef PERL_DEBUG_READONLY_OPS 255 OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *), 256 PROT_READ|PROT_WRITE, 257 MAP_ANON|MAP_PRIVATE, -1, 0); 258 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n", 259 (unsigned long) sz, slab)); 260 if (slab == MAP_FAILED) { 261 perror("mmap failed"); 262 abort(); 263 } 264 slab->opslab_size = (U16)sz; 265 #else 266 OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *)); 267 #endif 268 #ifndef WIN32 269 /* The context is unused in non-Windows */ 270 PERL_UNUSED_CONTEXT; 271 #endif 272 slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1); 273 return slab; 274 } 275 276 /* requires double parens and aTHX_ */ 277 #define DEBUG_S_warn(args) \ 278 DEBUG_S( \ 279 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \ 280 ) 281 282 /* Returns a sz-sized block of memory (suitable for holding an op) from 283 * a free slot in the chain of op slabs attached to PL_compcv. 284 * Allocates a new slab if necessary. 285 * if PL_compcv isn't compiling, malloc() instead. 286 */ 287 288 void * 289 Perl_Slab_Alloc(pTHX_ size_t sz) 290 { 291 OPSLAB *slab; 292 OPSLAB *slab2; 293 OPSLOT *slot; 294 OP *o; 295 size_t opsz, space; 296 297 /* We only allocate ops from the slab during subroutine compilation. 298 We find the slab via PL_compcv, hence that must be non-NULL. It could 299 also be pointing to a subroutine which is now fully set up (CvROOT() 300 pointing to the top of the optree for that sub), or a subroutine 301 which isn't using the slab allocator. If our sanity checks aren't met, 302 don't use a slab, but allocate the OP directly from the heap. */ 303 if (!PL_compcv || CvROOT(PL_compcv) 304 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv))) 305 { 306 o = (OP*)PerlMemShared_calloc(1, sz); 307 goto gotit; 308 } 309 310 /* While the subroutine is under construction, the slabs are accessed via 311 CvSTART(), to avoid needing to expand PVCV by one pointer for something 312 unneeded at runtime. Once a subroutine is constructed, the slabs are 313 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been 314 allocated yet. See the commit message for 8be227ab5eaa23f2 for more 315 details. */ 316 if (!CvSTART(PL_compcv)) { 317 CvSTART(PL_compcv) = 318 (OP *)(slab = S_new_slab(aTHX_ PERL_SLAB_SIZE)); 319 CvSLABBED_on(PL_compcv); 320 slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */ 321 } 322 else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt; 323 324 opsz = SIZE_TO_PSIZE(sz); 325 sz = opsz + OPSLOT_HEADER_P; 326 327 /* The slabs maintain a free list of OPs. In particular, constant folding 328 will free up OPs, so it makes sense to re-use them where possible. A 329 freed up slot is used in preference to a new allocation. */ 330 if (slab->opslab_freed) { 331 OP **too = &slab->opslab_freed; 332 o = *too; 333 DEBUG_S_warn((aTHX_ "found free op at %p, slab %p", (void*)o, (void*)slab)); 334 while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) { 335 DEBUG_S_warn((aTHX_ "Alas! too small")); 336 o = *(too = &o->op_next); 337 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); } 338 } 339 if (o) { 340 *too = o->op_next; 341 Zero(o, opsz, I32 *); 342 o->op_slabbed = 1; 343 goto gotit; 344 } 345 } 346 347 #define INIT_OPSLOT \ 348 slot->opslot_slab = slab; \ 349 slot->opslot_next = slab2->opslab_first; \ 350 slab2->opslab_first = slot; \ 351 o = &slot->opslot_op; \ 352 o->op_slabbed = 1 353 354 /* The partially-filled slab is next in the chain. */ 355 slab2 = slab->opslab_next ? slab->opslab_next : slab; 356 if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) { 357 /* Remaining space is too small. */ 358 359 /* If we can fit a BASEOP, add it to the free chain, so as not 360 to waste it. */ 361 if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) { 362 slot = &slab2->opslab_slots; 363 INIT_OPSLOT; 364 o->op_type = OP_FREED; 365 o->op_next = slab->opslab_freed; 366 slab->opslab_freed = o; 367 } 368 369 /* Create a new slab. Make this one twice as big. */ 370 slot = slab2->opslab_first; 371 while (slot->opslot_next) slot = slot->opslot_next; 372 slab2 = S_new_slab(aTHX_ 373 (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE 374 ? PERL_MAX_SLAB_SIZE 375 : (DIFF(slab2, slot)+1)*2); 376 slab2->opslab_next = slab->opslab_next; 377 slab->opslab_next = slab2; 378 } 379 assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz); 380 381 /* Create a new op slot */ 382 slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz); 383 assert(slot >= &slab2->opslab_slots); 384 if (DIFF(&slab2->opslab_slots, slot) 385 < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) 386 slot = &slab2->opslab_slots; 387 INIT_OPSLOT; 388 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", (void*)o, (void*)slab)); 389 390 gotit: 391 /* moresib == 0, op_sibling == 0 implies a solitary unattached op */ 392 assert(!o->op_moresib); 393 assert(!o->op_sibparent); 394 395 return (void *)o; 396 } 397 398 #undef INIT_OPSLOT 399 400 #ifdef PERL_DEBUG_READONLY_OPS 401 void 402 Perl_Slab_to_ro(pTHX_ OPSLAB *slab) 403 { 404 PERL_ARGS_ASSERT_SLAB_TO_RO; 405 406 if (slab->opslab_readonly) return; 407 slab->opslab_readonly = 1; 408 for (; slab; slab = slab->opslab_next) { 409 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n", 410 (unsigned long) slab->opslab_size, slab));*/ 411 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ)) 412 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab, 413 (unsigned long)slab->opslab_size, errno); 414 } 415 } 416 417 void 418 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab) 419 { 420 OPSLAB *slab2; 421 422 PERL_ARGS_ASSERT_SLAB_TO_RW; 423 424 if (!slab->opslab_readonly) return; 425 slab2 = slab; 426 for (; slab2; slab2 = slab2->opslab_next) { 427 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n", 428 (unsigned long) size, slab2));*/ 429 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *), 430 PROT_READ|PROT_WRITE)) { 431 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab, 432 (unsigned long)slab2->opslab_size, errno); 433 } 434 } 435 slab->opslab_readonly = 0; 436 } 437 438 #else 439 # define Slab_to_rw(op) NOOP 440 #endif 441 442 /* This cannot possibly be right, but it was copied from the old slab 443 allocator, to which it was originally added, without explanation, in 444 commit 083fcd5. */ 445 #ifdef NETWARE 446 # define PerlMemShared PerlMem 447 #endif 448 449 /* make freed ops die if they're inadvertently executed */ 450 #ifdef DEBUGGING 451 static OP * 452 S_pp_freed(pTHX) 453 { 454 DIE(aTHX_ "panic: freed op 0x%p called\n", PL_op); 455 } 456 #endif 457 458 459 /* Return the block of memory used by an op to the free list of 460 * the OP slab associated with that op. 461 */ 462 463 void 464 Perl_Slab_Free(pTHX_ void *op) 465 { 466 OP * const o = (OP *)op; 467 OPSLAB *slab; 468 469 PERL_ARGS_ASSERT_SLAB_FREE; 470 471 #ifdef DEBUGGING 472 o->op_ppaddr = S_pp_freed; 473 #endif 474 475 if (!o->op_slabbed) { 476 if (!o->op_static) 477 PerlMemShared_free(op); 478 return; 479 } 480 481 slab = OpSLAB(o); 482 /* If this op is already freed, our refcount will get screwy. */ 483 assert(o->op_type != OP_FREED); 484 o->op_type = OP_FREED; 485 o->op_next = slab->opslab_freed; 486 slab->opslab_freed = o; 487 DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab)); 488 OpslabREFCNT_dec_padok(slab); 489 } 490 491 void 492 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab) 493 { 494 const bool havepad = !!PL_comppad; 495 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD; 496 if (havepad) { 497 ENTER; 498 PAD_SAVE_SETNULLPAD(); 499 } 500 opslab_free(slab); 501 if (havepad) LEAVE; 502 } 503 504 /* Free a chain of OP slabs. Should only be called after all ops contained 505 * in it have been freed. At this point, its reference count should be 1, 506 * because OpslabREFCNT_dec() skips doing rc-- when it detects that rc == 1, 507 * and just directly calls opslab_free(). 508 * (Note that the reference count which PL_compcv held on the slab should 509 * have been removed once compilation of the sub was complete). 510 * 511 * 512 */ 513 514 void 515 Perl_opslab_free(pTHX_ OPSLAB *slab) 516 { 517 OPSLAB *slab2; 518 PERL_ARGS_ASSERT_OPSLAB_FREE; 519 PERL_UNUSED_CONTEXT; 520 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab)); 521 assert(slab->opslab_refcnt == 1); 522 do { 523 slab2 = slab->opslab_next; 524 #ifdef DEBUGGING 525 slab->opslab_refcnt = ~(size_t)0; 526 #endif 527 #ifdef PERL_DEBUG_READONLY_OPS 528 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n", 529 (void*)slab)); 530 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) { 531 perror("munmap failed"); 532 abort(); 533 } 534 #else 535 PerlMemShared_free(slab); 536 #endif 537 slab = slab2; 538 } while (slab); 539 } 540 541 /* like opslab_free(), but first calls op_free() on any ops in the slab 542 * not marked as OP_FREED 543 */ 544 545 void 546 Perl_opslab_force_free(pTHX_ OPSLAB *slab) 547 { 548 OPSLAB *slab2; 549 #ifdef DEBUGGING 550 size_t savestack_count = 0; 551 #endif 552 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE; 553 slab2 = slab; 554 do { 555 OPSLOT *slot; 556 for (slot = slab2->opslab_first; 557 slot->opslot_next; 558 slot = slot->opslot_next) { 559 if (slot->opslot_op.op_type != OP_FREED 560 && !(slot->opslot_op.op_savefree 561 #ifdef DEBUGGING 562 && ++savestack_count 563 #endif 564 ) 565 ) { 566 assert(slot->opslot_op.op_slabbed); 567 op_free(&slot->opslot_op); 568 if (slab->opslab_refcnt == 1) goto free; 569 } 570 } 571 } while ((slab2 = slab2->opslab_next)); 572 /* > 1 because the CV still holds a reference count. */ 573 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */ 574 #ifdef DEBUGGING 575 assert(savestack_count == slab->opslab_refcnt-1); 576 #endif 577 /* Remove the CV’s reference count. */ 578 slab->opslab_refcnt--; 579 return; 580 } 581 free: 582 opslab_free(slab); 583 } 584 585 #ifdef PERL_DEBUG_READONLY_OPS 586 OP * 587 Perl_op_refcnt_inc(pTHX_ OP *o) 588 { 589 if(o) { 590 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL; 591 if (slab && slab->opslab_readonly) { 592 Slab_to_rw(slab); 593 ++o->op_targ; 594 Slab_to_ro(slab); 595 } else { 596 ++o->op_targ; 597 } 598 } 599 return o; 600 601 } 602 603 PADOFFSET 604 Perl_op_refcnt_dec(pTHX_ OP *o) 605 { 606 PADOFFSET result; 607 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL; 608 609 PERL_ARGS_ASSERT_OP_REFCNT_DEC; 610 611 if (slab && slab->opslab_readonly) { 612 Slab_to_rw(slab); 613 result = --o->op_targ; 614 Slab_to_ro(slab); 615 } else { 616 result = --o->op_targ; 617 } 618 return result; 619 } 620 #endif 621 /* 622 * In the following definition, the ", (OP*)0" is just to make the compiler 623 * think the expression is of the right type: croak actually does a Siglongjmp. 624 */ 625 #define CHECKOP(type,o) \ 626 ((PL_op_mask && PL_op_mask[type]) \ 627 ? ( op_free((OP*)o), \ 628 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \ 629 (OP*)0 ) \ 630 : PL_check[type](aTHX_ (OP*)o)) 631 632 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2) 633 634 #define OpTYPE_set(o,type) \ 635 STMT_START { \ 636 o->op_type = (OPCODE)type; \ 637 o->op_ppaddr = PL_ppaddr[type]; \ 638 } STMT_END 639 640 STATIC OP * 641 S_no_fh_allowed(pTHX_ OP *o) 642 { 643 PERL_ARGS_ASSERT_NO_FH_ALLOWED; 644 645 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function", 646 OP_DESC(o))); 647 return o; 648 } 649 650 STATIC OP * 651 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags) 652 { 653 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV; 654 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags); 655 return o; 656 } 657 658 STATIC OP * 659 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags) 660 { 661 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV; 662 663 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags); 664 return o; 665 } 666 667 STATIC void 668 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid) 669 { 670 PERL_ARGS_ASSERT_BAD_TYPE_PV; 671 672 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)", 673 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0); 674 } 675 676 /* remove flags var, its unused in all callers, move to to right end since gv 677 and kid are always the same */ 678 STATIC void 679 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t) 680 { 681 SV * const namesv = cv_name((CV *)gv, NULL, 0); 682 PERL_ARGS_ASSERT_BAD_TYPE_GV; 683 684 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %" SVf " must be %s (not %s)", 685 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv)); 686 } 687 688 STATIC void 689 S_no_bareword_allowed(pTHX_ OP *o) 690 { 691 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED; 692 693 qerror(Perl_mess(aTHX_ 694 "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use", 695 SVfARG(cSVOPo_sv))); 696 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */ 697 } 698 699 /* "register" allocation */ 700 701 PADOFFSET 702 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags) 703 { 704 PADOFFSET off; 705 const bool is_our = (PL_parser->in_my == KEY_our); 706 707 PERL_ARGS_ASSERT_ALLOCMY; 708 709 if (flags & ~SVf_UTF8) 710 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf, 711 (UV)flags); 712 713 /* complain about "my $<special_var>" etc etc */ 714 if ( len 715 && !( is_our 716 || isALPHA(name[1]) 717 || ( (flags & SVf_UTF8) 718 && isIDFIRST_utf8_safe((U8 *)name+1, name + len)) 719 || (name[1] == '_' && len > 2))) 720 { 721 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1])) 722 && isASCII(name[1]) 723 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) { 724 /* diag_listed_as: Can't use global %s in "%s" */ 725 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"", 726 name[0], toCTRL(name[1]), (int)(len - 2), name + 2, 727 PL_parser->in_my == KEY_state ? "state" : "my")); 728 } else { 729 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name, 730 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8); 731 } 732 } 733 734 /* allocate a spare slot and store the name in that slot */ 735 736 off = pad_add_name_pvn(name, len, 737 (is_our ? padadd_OUR : 738 PL_parser->in_my == KEY_state ? padadd_STATE : 0), 739 PL_parser->in_my_stash, 740 (is_our 741 /* $_ is always in main::, even with our */ 742 ? (PL_curstash && !memEQs(name,len,"$_") 743 ? PL_curstash 744 : PL_defstash) 745 : NULL 746 ) 747 ); 748 /* anon sub prototypes contains state vars should always be cloned, 749 * otherwise the state var would be shared between anon subs */ 750 751 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv)) 752 CvCLONE_on(PL_compcv); 753 754 return off; 755 } 756 757 /* 758 =head1 Optree Manipulation Functions 759 760 =for apidoc alloccopstash 761 762 Available only under threaded builds, this function allocates an entry in 763 C<PL_stashpad> for the stash passed to it. 764 765 =cut 766 */ 767 768 #ifdef USE_ITHREADS 769 PADOFFSET 770 Perl_alloccopstash(pTHX_ HV *hv) 771 { 772 PADOFFSET off = 0, o = 1; 773 bool found_slot = FALSE; 774 775 PERL_ARGS_ASSERT_ALLOCCOPSTASH; 776 777 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix; 778 779 for (; o < PL_stashpadmax; ++o) { 780 if (PL_stashpad[o] == hv) return PL_stashpadix = o; 781 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV) 782 found_slot = TRUE, off = o; 783 } 784 if (!found_slot) { 785 Renew(PL_stashpad, PL_stashpadmax + 10, HV *); 786 Zero(PL_stashpad + PL_stashpadmax, 10, HV *); 787 off = PL_stashpadmax; 788 PL_stashpadmax += 10; 789 } 790 791 PL_stashpad[PL_stashpadix = off] = hv; 792 return off; 793 } 794 #endif 795 796 /* free the body of an op without examining its contents. 797 * Always use this rather than FreeOp directly */ 798 799 static void 800 S_op_destroy(pTHX_ OP *o) 801 { 802 FreeOp(o); 803 } 804 805 /* Destructor */ 806 807 /* 808 =for apidoc Am|void|op_free|OP *o 809 810 Free an op. Only use this when an op is no longer linked to from any 811 optree. 812 813 =cut 814 */ 815 816 void 817 Perl_op_free(pTHX_ OP *o) 818 { 819 dVAR; 820 OPCODE type; 821 dDEFER_OP; 822 823 do { 824 825 /* Though ops may be freed twice, freeing the op after its slab is a 826 big no-no. */ 827 assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0); 828 /* During the forced freeing of ops after compilation failure, kidops 829 may be freed before their parents. */ 830 if (!o || o->op_type == OP_FREED) 831 continue; 832 833 type = o->op_type; 834 835 /* an op should only ever acquire op_private flags that we know about. 836 * If this fails, you may need to fix something in regen/op_private. 837 * Don't bother testing if: 838 * * the op_ppaddr doesn't match the op; someone may have 839 * overridden the op and be doing strange things with it; 840 * * we've errored, as op flags are often left in an 841 * inconsistent state then. Note that an error when 842 * compiling the main program leaves PL_parser NULL, so 843 * we can't spot faults in the main code, only 844 * evaled/required code */ 845 #ifdef DEBUGGING 846 if ( o->op_ppaddr == PL_ppaddr[o->op_type] 847 && PL_parser 848 && !PL_parser->error_count) 849 { 850 assert(!(o->op_private & ~PL_op_private_valid[type])); 851 } 852 #endif 853 854 if (o->op_private & OPpREFCOUNTED) { 855 switch (type) { 856 case OP_LEAVESUB: 857 case OP_LEAVESUBLV: 858 case OP_LEAVEEVAL: 859 case OP_LEAVE: 860 case OP_SCOPE: 861 case OP_LEAVEWRITE: 862 { 863 PADOFFSET refcnt; 864 OP_REFCNT_LOCK; 865 refcnt = OpREFCNT_dec(o); 866 OP_REFCNT_UNLOCK; 867 if (refcnt) { 868 /* Need to find and remove any pattern match ops from the list 869 we maintain for reset(). */ 870 find_and_forget_pmops(o); 871 continue; 872 } 873 } 874 break; 875 default: 876 break; 877 } 878 } 879 880 /* Call the op_free hook if it has been set. Do it now so that it's called 881 * at the right time for refcounted ops, but still before all of the kids 882 * are freed. */ 883 CALL_OPFREEHOOK(o); 884 885 if (o->op_flags & OPf_KIDS) { 886 OP *kid, *nextkid; 887 assert(cUNOPo->op_first); /* OPf_KIDS implies op_first non-null */ 888 for (kid = cUNOPo->op_first; kid; kid = nextkid) { 889 nextkid = OpSIBLING(kid); /* Get before next freeing kid */ 890 if (kid->op_type == OP_FREED) 891 /* During the forced freeing of ops after 892 compilation failure, kidops may be freed before 893 their parents. */ 894 continue; 895 if (!(kid->op_flags & OPf_KIDS)) 896 /* If it has no kids, just free it now */ 897 op_free(kid); 898 else 899 DEFER_OP(kid); 900 } 901 } 902 if (type == OP_NULL) 903 type = (OPCODE)o->op_targ; 904 905 if (o->op_slabbed) 906 Slab_to_rw(OpSLAB(o)); 907 908 /* COP* is not cleared by op_clear() so that we may track line 909 * numbers etc even after null() */ 910 if (type == OP_NEXTSTATE || type == OP_DBSTATE) { 911 cop_free((COP*)o); 912 } 913 914 op_clear(o); 915 FreeOp(o); 916 if (PL_op == o) 917 PL_op = NULL; 918 } while ( (o = POP_DEFERRED_OP()) ); 919 920 DEFER_OP_CLEANUP; 921 } 922 923 /* S_op_clear_gv(): free a GV attached to an OP */ 924 925 STATIC 926 #ifdef USE_ITHREADS 927 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp) 928 #else 929 void S_op_clear_gv(pTHX_ OP *o, SV**svp) 930 #endif 931 { 932 933 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV 934 || o->op_type == OP_MULTIDEREF) 935 #ifdef USE_ITHREADS 936 && PL_curpad 937 ? ((GV*)PAD_SVl(*ixp)) : NULL; 938 #else 939 ? (GV*)(*svp) : NULL; 940 #endif 941 /* It's possible during global destruction that the GV is freed 942 before the optree. Whilst the SvREFCNT_inc is happy to bump from 943 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0 944 will trigger an assertion failure, because the entry to sv_clear 945 checks that the scalar is not already freed. A check of for 946 !SvIS_FREED(gv) turns out to be invalid, because during global 947 destruction the reference count can be forced down to zero 948 (with SVf_BREAK set). In which case raising to 1 and then 949 dropping to 0 triggers cleanup before it should happen. I 950 *think* that this might actually be a general, systematic, 951 weakness of the whole idea of SVf_BREAK, in that code *is* 952 allowed to raise and lower references during global destruction, 953 so any *valid* code that happens to do this during global 954 destruction might well trigger premature cleanup. */ 955 bool still_valid = gv && SvREFCNT(gv); 956 957 if (still_valid) 958 SvREFCNT_inc_simple_void(gv); 959 #ifdef USE_ITHREADS 960 if (*ixp > 0) { 961 pad_swipe(*ixp, TRUE); 962 *ixp = 0; 963 } 964 #else 965 SvREFCNT_dec(*svp); 966 *svp = NULL; 967 #endif 968 if (still_valid) { 969 int try_downgrade = SvREFCNT(gv) == 2; 970 SvREFCNT_dec_NN(gv); 971 if (try_downgrade) 972 gv_try_downgrade(gv); 973 } 974 } 975 976 977 void 978 Perl_op_clear(pTHX_ OP *o) 979 { 980 981 dVAR; 982 983 PERL_ARGS_ASSERT_OP_CLEAR; 984 985 switch (o->op_type) { 986 case OP_NULL: /* Was holding old type, if any. */ 987 /* FALLTHROUGH */ 988 case OP_ENTERTRY: 989 case OP_ENTEREVAL: /* Was holding hints. */ 990 case OP_ARGDEFELEM: /* Was holding signature index. */ 991 o->op_targ = 0; 992 break; 993 default: 994 if (!(o->op_flags & OPf_REF) 995 || (PL_check[o->op_type] != Perl_ck_ftst)) 996 break; 997 /* FALLTHROUGH */ 998 case OP_GVSV: 999 case OP_GV: 1000 case OP_AELEMFAST: 1001 #ifdef USE_ITHREADS 1002 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix)); 1003 #else 1004 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv)); 1005 #endif 1006 break; 1007 case OP_METHOD_REDIR: 1008 case OP_METHOD_REDIR_SUPER: 1009 #ifdef USE_ITHREADS 1010 if (cMETHOPx(o)->op_rclass_targ) { 1011 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1); 1012 cMETHOPx(o)->op_rclass_targ = 0; 1013 } 1014 #else 1015 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv); 1016 cMETHOPx(o)->op_rclass_sv = NULL; 1017 #endif 1018 /* FALLTHROUGH */ 1019 case OP_METHOD_NAMED: 1020 case OP_METHOD_SUPER: 1021 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv); 1022 cMETHOPx(o)->op_u.op_meth_sv = NULL; 1023 #ifdef USE_ITHREADS 1024 if (o->op_targ) { 1025 pad_swipe(o->op_targ, 1); 1026 o->op_targ = 0; 1027 } 1028 #endif 1029 break; 1030 case OP_CONST: 1031 case OP_HINTSEVAL: 1032 SvREFCNT_dec(cSVOPo->op_sv); 1033 cSVOPo->op_sv = NULL; 1034 #ifdef USE_ITHREADS 1035 /** Bug #15654 1036 Even if op_clear does a pad_free for the target of the op, 1037 pad_free doesn't actually remove the sv that exists in the pad; 1038 instead it lives on. This results in that it could be reused as 1039 a target later on when the pad was reallocated. 1040 **/ 1041 if(o->op_targ) { 1042 pad_swipe(o->op_targ,1); 1043 o->op_targ = 0; 1044 } 1045 #endif 1046 break; 1047 case OP_DUMP: 1048 case OP_GOTO: 1049 case OP_NEXT: 1050 case OP_LAST: 1051 case OP_REDO: 1052 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS)) 1053 break; 1054 /* FALLTHROUGH */ 1055 case OP_TRANS: 1056 case OP_TRANSR: 1057 if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR) 1058 && (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))) 1059 { 1060 #ifdef USE_ITHREADS 1061 if (cPADOPo->op_padix > 0) { 1062 pad_swipe(cPADOPo->op_padix, TRUE); 1063 cPADOPo->op_padix = 0; 1064 } 1065 #else 1066 SvREFCNT_dec(cSVOPo->op_sv); 1067 cSVOPo->op_sv = NULL; 1068 #endif 1069 } 1070 else { 1071 PerlMemShared_free(cPVOPo->op_pv); 1072 cPVOPo->op_pv = NULL; 1073 } 1074 break; 1075 case OP_SUBST: 1076 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot); 1077 goto clear_pmop; 1078 1079 case OP_SPLIT: 1080 if ( (o->op_private & OPpSPLIT_ASSIGN) /* @array = split */ 1081 && !(o->op_flags & OPf_STACKED)) /* @{expr} = split */ 1082 { 1083 if (o->op_private & OPpSPLIT_LEX) 1084 pad_free(cPMOPo->op_pmreplrootu.op_pmtargetoff); 1085 else 1086 #ifdef USE_ITHREADS 1087 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE); 1088 #else 1089 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv)); 1090 #endif 1091 } 1092 /* FALLTHROUGH */ 1093 case OP_MATCH: 1094 case OP_QR: 1095 clear_pmop: 1096 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE)) 1097 op_free(cPMOPo->op_code_list); 1098 cPMOPo->op_code_list = NULL; 1099 forget_pmop(cPMOPo); 1100 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL; 1101 /* we use the same protection as the "SAFE" version of the PM_ macros 1102 * here since sv_clean_all might release some PMOPs 1103 * after PL_regex_padav has been cleared 1104 * and the clearing of PL_regex_padav needs to 1105 * happen before sv_clean_all 1106 */ 1107 #ifdef USE_ITHREADS 1108 if(PL_regex_pad) { /* We could be in destruction */ 1109 const IV offset = (cPMOPo)->op_pmoffset; 1110 ReREFCNT_dec(PM_GETRE(cPMOPo)); 1111 PL_regex_pad[offset] = &PL_sv_undef; 1112 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset, 1113 sizeof(offset)); 1114 } 1115 #else 1116 ReREFCNT_dec(PM_GETRE(cPMOPo)); 1117 PM_SETRE(cPMOPo, NULL); 1118 #endif 1119 1120 break; 1121 1122 case OP_ARGCHECK: 1123 PerlMemShared_free(cUNOP_AUXo->op_aux); 1124 break; 1125 1126 case OP_MULTICONCAT: 1127 { 1128 UNOP_AUX_item *aux = cUNOP_AUXo->op_aux; 1129 /* aux[PERL_MULTICONCAT_IX_PLAIN_PV] and/or 1130 * aux[PERL_MULTICONCAT_IX_UTF8_PV] point to plain and/or 1131 * utf8 shared strings */ 1132 char *p1 = aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv; 1133 char *p2 = aux[PERL_MULTICONCAT_IX_UTF8_PV].pv; 1134 if (p1) 1135 PerlMemShared_free(p1); 1136 if (p2 && p1 != p2) 1137 PerlMemShared_free(p2); 1138 PerlMemShared_free(aux); 1139 } 1140 break; 1141 1142 case OP_MULTIDEREF: 1143 { 1144 UNOP_AUX_item *items = cUNOP_AUXo->op_aux; 1145 UV actions = items->uv; 1146 bool last = 0; 1147 bool is_hash = FALSE; 1148 1149 while (!last) { 1150 switch (actions & MDEREF_ACTION_MASK) { 1151 1152 case MDEREF_reload: 1153 actions = (++items)->uv; 1154 continue; 1155 1156 case MDEREF_HV_padhv_helem: 1157 is_hash = TRUE; 1158 /* FALLTHROUGH */ 1159 case MDEREF_AV_padav_aelem: 1160 pad_free((++items)->pad_offset); 1161 goto do_elem; 1162 1163 case MDEREF_HV_gvhv_helem: 1164 is_hash = TRUE; 1165 /* FALLTHROUGH */ 1166 case MDEREF_AV_gvav_aelem: 1167 #ifdef USE_ITHREADS 1168 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset)); 1169 #else 1170 S_op_clear_gv(aTHX_ o, &((++items)->sv)); 1171 #endif 1172 goto do_elem; 1173 1174 case MDEREF_HV_gvsv_vivify_rv2hv_helem: 1175 is_hash = TRUE; 1176 /* FALLTHROUGH */ 1177 case MDEREF_AV_gvsv_vivify_rv2av_aelem: 1178 #ifdef USE_ITHREADS 1179 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset)); 1180 #else 1181 S_op_clear_gv(aTHX_ o, &((++items)->sv)); 1182 #endif 1183 goto do_vivify_rv2xv_elem; 1184 1185 case MDEREF_HV_padsv_vivify_rv2hv_helem: 1186 is_hash = TRUE; 1187 /* FALLTHROUGH */ 1188 case MDEREF_AV_padsv_vivify_rv2av_aelem: 1189 pad_free((++items)->pad_offset); 1190 goto do_vivify_rv2xv_elem; 1191 1192 case MDEREF_HV_pop_rv2hv_helem: 1193 case MDEREF_HV_vivify_rv2hv_helem: 1194 is_hash = TRUE; 1195 /* FALLTHROUGH */ 1196 do_vivify_rv2xv_elem: 1197 case MDEREF_AV_pop_rv2av_aelem: 1198 case MDEREF_AV_vivify_rv2av_aelem: 1199 do_elem: 1200 switch (actions & MDEREF_INDEX_MASK) { 1201 case MDEREF_INDEX_none: 1202 last = 1; 1203 break; 1204 case MDEREF_INDEX_const: 1205 if (is_hash) { 1206 #ifdef USE_ITHREADS 1207 /* see RT #15654 */ 1208 pad_swipe((++items)->pad_offset, 1); 1209 #else 1210 SvREFCNT_dec((++items)->sv); 1211 #endif 1212 } 1213 else 1214 items++; 1215 break; 1216 case MDEREF_INDEX_padsv: 1217 pad_free((++items)->pad_offset); 1218 break; 1219 case MDEREF_INDEX_gvsv: 1220 #ifdef USE_ITHREADS 1221 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset)); 1222 #else 1223 S_op_clear_gv(aTHX_ o, &((++items)->sv)); 1224 #endif 1225 break; 1226 } 1227 1228 if (actions & MDEREF_FLAG_last) 1229 last = 1; 1230 is_hash = FALSE; 1231 1232 break; 1233 1234 default: 1235 assert(0); 1236 last = 1; 1237 break; 1238 1239 } /* switch */ 1240 1241 actions >>= MDEREF_SHIFT; 1242 } /* while */ 1243 1244 /* start of malloc is at op_aux[-1], where the length is 1245 * stored */ 1246 PerlMemShared_free(cUNOP_AUXo->op_aux - 1); 1247 } 1248 break; 1249 } 1250 1251 if (o->op_targ > 0) { 1252 pad_free(o->op_targ); 1253 o->op_targ = 0; 1254 } 1255 } 1256 1257 STATIC void 1258 S_cop_free(pTHX_ COP* cop) 1259 { 1260 PERL_ARGS_ASSERT_COP_FREE; 1261 1262 CopFILE_free(cop); 1263 if (! specialWARN(cop->cop_warnings)) 1264 PerlMemShared_free(cop->cop_warnings); 1265 cophh_free(CopHINTHASH_get(cop)); 1266 if (PL_curcop == cop) 1267 PL_curcop = NULL; 1268 } 1269 1270 STATIC void 1271 S_forget_pmop(pTHX_ PMOP *const o) 1272 { 1273 HV * const pmstash = PmopSTASH(o); 1274 1275 PERL_ARGS_ASSERT_FORGET_PMOP; 1276 1277 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) { 1278 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab); 1279 if (mg) { 1280 PMOP **const array = (PMOP**) mg->mg_ptr; 1281 U32 count = mg->mg_len / sizeof(PMOP**); 1282 U32 i = count; 1283 1284 while (i--) { 1285 if (array[i] == o) { 1286 /* Found it. Move the entry at the end to overwrite it. */ 1287 array[i] = array[--count]; 1288 mg->mg_len = count * sizeof(PMOP**); 1289 /* Could realloc smaller at this point always, but probably 1290 not worth it. Probably worth free()ing if we're the 1291 last. */ 1292 if(!count) { 1293 Safefree(mg->mg_ptr); 1294 mg->mg_ptr = NULL; 1295 } 1296 break; 1297 } 1298 } 1299 } 1300 } 1301 if (PL_curpm == o) 1302 PL_curpm = NULL; 1303 } 1304 1305 STATIC void 1306 S_find_and_forget_pmops(pTHX_ OP *o) 1307 { 1308 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS; 1309 1310 if (o->op_flags & OPf_KIDS) { 1311 OP *kid = cUNOPo->op_first; 1312 while (kid) { 1313 switch (kid->op_type) { 1314 case OP_SUBST: 1315 case OP_SPLIT: 1316 case OP_MATCH: 1317 case OP_QR: 1318 forget_pmop((PMOP*)kid); 1319 } 1320 find_and_forget_pmops(kid); 1321 kid = OpSIBLING(kid); 1322 } 1323 } 1324 } 1325 1326 /* 1327 =for apidoc Am|void|op_null|OP *o 1328 1329 Neutralizes an op when it is no longer needed, but is still linked to from 1330 other ops. 1331 1332 =cut 1333 */ 1334 1335 void 1336 Perl_op_null(pTHX_ OP *o) 1337 { 1338 dVAR; 1339 1340 PERL_ARGS_ASSERT_OP_NULL; 1341 1342 if (o->op_type == OP_NULL) 1343 return; 1344 op_clear(o); 1345 o->op_targ = o->op_type; 1346 OpTYPE_set(o, OP_NULL); 1347 } 1348 1349 void 1350 Perl_op_refcnt_lock(pTHX) 1351 PERL_TSA_ACQUIRE(PL_op_mutex) 1352 { 1353 #ifdef USE_ITHREADS 1354 dVAR; 1355 #endif 1356 PERL_UNUSED_CONTEXT; 1357 OP_REFCNT_LOCK; 1358 } 1359 1360 void 1361 Perl_op_refcnt_unlock(pTHX) 1362 PERL_TSA_RELEASE(PL_op_mutex) 1363 { 1364 #ifdef USE_ITHREADS 1365 dVAR; 1366 #endif 1367 PERL_UNUSED_CONTEXT; 1368 OP_REFCNT_UNLOCK; 1369 } 1370 1371 1372 /* 1373 =for apidoc op_sibling_splice 1374 1375 A general function for editing the structure of an existing chain of 1376 op_sibling nodes. By analogy with the perl-level C<splice()> function, allows 1377 you to delete zero or more sequential nodes, replacing them with zero or 1378 more different nodes. Performs the necessary op_first/op_last 1379 housekeeping on the parent node and op_sibling manipulation on the 1380 children. The last deleted node will be marked as as the last node by 1381 updating the op_sibling/op_sibparent or op_moresib field as appropriate. 1382 1383 Note that op_next is not manipulated, and nodes are not freed; that is the 1384 responsibility of the caller. It also won't create a new list op for an 1385 empty list etc; use higher-level functions like op_append_elem() for that. 1386 1387 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if 1388 the splicing doesn't affect the first or last op in the chain. 1389 1390 C<start> is the node preceding the first node to be spliced. Node(s) 1391 following it will be deleted, and ops will be inserted after it. If it is 1392 C<NULL>, the first node onwards is deleted, and nodes are inserted at the 1393 beginning. 1394 1395 C<del_count> is the number of nodes to delete. If zero, no nodes are deleted. 1396 If -1 or greater than or equal to the number of remaining kids, all 1397 remaining kids are deleted. 1398 1399 C<insert> is the first of a chain of nodes to be inserted in place of the nodes. 1400 If C<NULL>, no nodes are inserted. 1401 1402 The head of the chain of deleted ops is returned, or C<NULL> if no ops were 1403 deleted. 1404 1405 For example: 1406 1407 action before after returns 1408 ------ ----- ----- ------- 1409 1410 P P 1411 splice(P, A, 2, X-Y-Z) | | B-C 1412 A-B-C-D A-X-Y-Z-D 1413 1414 P P 1415 splice(P, NULL, 1, X-Y) | | A 1416 A-B-C-D X-Y-B-C-D 1417 1418 P P 1419 splice(P, NULL, 3, NULL) | | A-B-C 1420 A-B-C-D D 1421 1422 P P 1423 splice(P, B, 0, X-Y) | | NULL 1424 A-B-C-D A-B-X-Y-C-D 1425 1426 1427 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>, 1428 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>. 1429 1430 =cut 1431 */ 1432 1433 OP * 1434 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert) 1435 { 1436 OP *first; 1437 OP *rest; 1438 OP *last_del = NULL; 1439 OP *last_ins = NULL; 1440 1441 if (start) 1442 first = OpSIBLING(start); 1443 else if (!parent) 1444 goto no_parent; 1445 else 1446 first = cLISTOPx(parent)->op_first; 1447 1448 assert(del_count >= -1); 1449 1450 if (del_count && first) { 1451 last_del = first; 1452 while (--del_count && OpHAS_SIBLING(last_del)) 1453 last_del = OpSIBLING(last_del); 1454 rest = OpSIBLING(last_del); 1455 OpLASTSIB_set(last_del, NULL); 1456 } 1457 else 1458 rest = first; 1459 1460 if (insert) { 1461 last_ins = insert; 1462 while (OpHAS_SIBLING(last_ins)) 1463 last_ins = OpSIBLING(last_ins); 1464 OpMAYBESIB_set(last_ins, rest, NULL); 1465 } 1466 else 1467 insert = rest; 1468 1469 if (start) { 1470 OpMAYBESIB_set(start, insert, NULL); 1471 } 1472 else { 1473 assert(parent); 1474 cLISTOPx(parent)->op_first = insert; 1475 if (insert) 1476 parent->op_flags |= OPf_KIDS; 1477 else 1478 parent->op_flags &= ~OPf_KIDS; 1479 } 1480 1481 if (!rest) { 1482 /* update op_last etc */ 1483 U32 type; 1484 OP *lastop; 1485 1486 if (!parent) 1487 goto no_parent; 1488 1489 /* ought to use OP_CLASS(parent) here, but that can't handle 1490 * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't 1491 * either */ 1492 type = parent->op_type; 1493 if (type == OP_CUSTOM) { 1494 dTHX; 1495 type = XopENTRYCUSTOM(parent, xop_class); 1496 } 1497 else { 1498 if (type == OP_NULL) 1499 type = parent->op_targ; 1500 type = PL_opargs[type] & OA_CLASS_MASK; 1501 } 1502 1503 lastop = last_ins ? last_ins : start ? start : NULL; 1504 if ( type == OA_BINOP 1505 || type == OA_LISTOP 1506 || type == OA_PMOP 1507 || type == OA_LOOP 1508 ) 1509 cLISTOPx(parent)->op_last = lastop; 1510 1511 if (lastop) 1512 OpLASTSIB_set(lastop, parent); 1513 } 1514 return last_del ? first : NULL; 1515 1516 no_parent: 1517 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent"); 1518 } 1519 1520 /* 1521 =for apidoc op_parent 1522 1523 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise. 1524 1525 =cut 1526 */ 1527 1528 OP * 1529 Perl_op_parent(OP *o) 1530 { 1531 PERL_ARGS_ASSERT_OP_PARENT; 1532 while (OpHAS_SIBLING(o)) 1533 o = OpSIBLING(o); 1534 return o->op_sibparent; 1535 } 1536 1537 /* replace the sibling following start with a new UNOP, which becomes 1538 * the parent of the original sibling; e.g. 1539 * 1540 * op_sibling_newUNOP(P, A, unop-args...) 1541 * 1542 * P P 1543 * | becomes | 1544 * A-B-C A-U-C 1545 * | 1546 * B 1547 * 1548 * where U is the new UNOP. 1549 * 1550 * parent and start args are the same as for op_sibling_splice(); 1551 * type and flags args are as newUNOP(). 1552 * 1553 * Returns the new UNOP. 1554 */ 1555 1556 STATIC OP * 1557 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags) 1558 { 1559 OP *kid, *newop; 1560 1561 kid = op_sibling_splice(parent, start, 1, NULL); 1562 newop = newUNOP(type, flags, kid); 1563 op_sibling_splice(parent, start, 0, newop); 1564 return newop; 1565 } 1566 1567 1568 /* lowest-level newLOGOP-style function - just allocates and populates 1569 * the struct. Higher-level stuff should be done by S_new_logop() / 1570 * newLOGOP(). This function exists mainly to avoid op_first assignment 1571 * being spread throughout this file. 1572 */ 1573 1574 LOGOP * 1575 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other) 1576 { 1577 dVAR; 1578 LOGOP *logop; 1579 OP *kid = first; 1580 NewOp(1101, logop, 1, LOGOP); 1581 OpTYPE_set(logop, type); 1582 logop->op_first = first; 1583 logop->op_other = other; 1584 if (first) 1585 logop->op_flags = OPf_KIDS; 1586 while (kid && OpHAS_SIBLING(kid)) 1587 kid = OpSIBLING(kid); 1588 if (kid) 1589 OpLASTSIB_set(kid, (OP*)logop); 1590 return logop; 1591 } 1592 1593 1594 /* Contextualizers */ 1595 1596 /* 1597 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context 1598 1599 Applies a syntactic context to an op tree representing an expression. 1600 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>, 1601 or C<G_VOID> to specify the context to apply. The modified op tree 1602 is returned. 1603 1604 =cut 1605 */ 1606 1607 OP * 1608 Perl_op_contextualize(pTHX_ OP *o, I32 context) 1609 { 1610 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE; 1611 switch (context) { 1612 case G_SCALAR: return scalar(o); 1613 case G_ARRAY: return list(o); 1614 case G_VOID: return scalarvoid(o); 1615 default: 1616 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld", 1617 (long) context); 1618 } 1619 } 1620 1621 /* 1622 1623 =for apidoc Am|OP*|op_linklist|OP *o 1624 This function is the implementation of the L</LINKLIST> macro. It should 1625 not be called directly. 1626 1627 =cut 1628 */ 1629 1630 OP * 1631 Perl_op_linklist(pTHX_ OP *o) 1632 { 1633 OP *first; 1634 1635 PERL_ARGS_ASSERT_OP_LINKLIST; 1636 1637 if (o->op_next) 1638 return o->op_next; 1639 1640 /* establish postfix order */ 1641 first = cUNOPo->op_first; 1642 if (first) { 1643 OP *kid; 1644 o->op_next = LINKLIST(first); 1645 kid = first; 1646 for (;;) { 1647 OP *sibl = OpSIBLING(kid); 1648 if (sibl) { 1649 kid->op_next = LINKLIST(sibl); 1650 kid = sibl; 1651 } else { 1652 kid->op_next = o; 1653 break; 1654 } 1655 } 1656 } 1657 else 1658 o->op_next = o; 1659 1660 return o->op_next; 1661 } 1662 1663 static OP * 1664 S_scalarkids(pTHX_ OP *o) 1665 { 1666 if (o && o->op_flags & OPf_KIDS) { 1667 OP *kid; 1668 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) 1669 scalar(kid); 1670 } 1671 return o; 1672 } 1673 1674 STATIC OP * 1675 S_scalarboolean(pTHX_ OP *o) 1676 { 1677 PERL_ARGS_ASSERT_SCALARBOOLEAN; 1678 1679 if ((o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST && 1680 !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) || 1681 (o->op_type == OP_NOT && cUNOPo->op_first->op_type == OP_SASSIGN && 1682 cBINOPx(cUNOPo->op_first)->op_first->op_type == OP_CONST && 1683 !(cBINOPx(cUNOPo->op_first)->op_first->op_flags & OPf_SPECIAL))) { 1684 if (ckWARN(WARN_SYNTAX)) { 1685 const line_t oldline = CopLINE(PL_curcop); 1686 1687 if (PL_parser && PL_parser->copline != NOLINE) { 1688 /* This ensures that warnings are reported at the first line 1689 of the conditional, not the last. */ 1690 CopLINE_set(PL_curcop, PL_parser->copline); 1691 } 1692 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be =="); 1693 CopLINE_set(PL_curcop, oldline); 1694 } 1695 } 1696 return scalar(o); 1697 } 1698 1699 static SV * 1700 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type) 1701 { 1702 assert(o); 1703 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV || 1704 o->op_type == OP_PADHV || o->op_type == OP_RV2HV); 1705 { 1706 const char funny = o->op_type == OP_PADAV 1707 || o->op_type == OP_RV2AV ? '@' : '%'; 1708 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) { 1709 GV *gv; 1710 if (cUNOPo->op_first->op_type != OP_GV 1711 || !(gv = cGVOPx_gv(cUNOPo->op_first))) 1712 return NULL; 1713 return varname(gv, funny, 0, NULL, 0, subscript_type); 1714 } 1715 return 1716 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type); 1717 } 1718 } 1719 1720 static SV * 1721 S_op_varname(pTHX_ const OP *o) 1722 { 1723 return S_op_varname_subscript(aTHX_ o, 1); 1724 } 1725 1726 static void 1727 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv) 1728 { /* or not so pretty :-) */ 1729 if (o->op_type == OP_CONST) { 1730 *retsv = cSVOPo_sv; 1731 if (SvPOK(*retsv)) { 1732 SV *sv = *retsv; 1733 *retsv = sv_newmortal(); 1734 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL, 1735 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT); 1736 } 1737 else if (!SvOK(*retsv)) 1738 *retpv = "undef"; 1739 } 1740 else *retpv = "..."; 1741 } 1742 1743 static void 1744 S_scalar_slice_warning(pTHX_ const OP *o) 1745 { 1746 OP *kid; 1747 const bool h = o->op_type == OP_HSLICE 1748 || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE); 1749 const char lbrack = 1750 h ? '{' : '['; 1751 const char rbrack = 1752 h ? '}' : ']'; 1753 SV *name; 1754 SV *keysv = NULL; /* just to silence compiler warnings */ 1755 const char *key = NULL; 1756 1757 if (!(o->op_private & OPpSLICEWARNING)) 1758 return; 1759 if (PL_parser && PL_parser->error_count) 1760 /* This warning can be nonsensical when there is a syntax error. */ 1761 return; 1762 1763 kid = cLISTOPo->op_first; 1764 kid = OpSIBLING(kid); /* get past pushmark */ 1765 /* weed out false positives: any ops that can return lists */ 1766 switch (kid->op_type) { 1767 case OP_BACKTICK: 1768 case OP_GLOB: 1769 case OP_READLINE: 1770 case OP_MATCH: 1771 case OP_RV2AV: 1772 case OP_EACH: 1773 case OP_VALUES: 1774 case OP_KEYS: 1775 case OP_SPLIT: 1776 case OP_LIST: 1777 case OP_SORT: 1778 case OP_REVERSE: 1779 case OP_ENTERSUB: 1780 case OP_CALLER: 1781 case OP_LSTAT: 1782 case OP_STAT: 1783 case OP_READDIR: 1784 case OP_SYSTEM: 1785 case OP_TMS: 1786 case OP_LOCALTIME: 1787 case OP_GMTIME: 1788 case OP_ENTEREVAL: 1789 return; 1790 } 1791 1792 /* Don't warn if we have a nulled list either. */ 1793 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST) 1794 return; 1795 1796 assert(OpSIBLING(kid)); 1797 name = S_op_varname(aTHX_ OpSIBLING(kid)); 1798 if (!name) /* XS module fiddling with the op tree */ 1799 return; 1800 S_op_pretty(aTHX_ kid, &keysv, &key); 1801 assert(SvPOK(name)); 1802 sv_chop(name,SvPVX(name)+1); 1803 if (key) 1804 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */ 1805 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), 1806 "Scalar value @%" SVf "%c%s%c better written as $%" SVf 1807 "%c%s%c", 1808 SVfARG(name), lbrack, key, rbrack, SVfARG(name), 1809 lbrack, key, rbrack); 1810 else 1811 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */ 1812 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), 1813 "Scalar value @%" SVf "%c%" SVf "%c better written as $%" 1814 SVf "%c%" SVf "%c", 1815 SVfARG(name), lbrack, SVfARG(keysv), rbrack, 1816 SVfARG(name), lbrack, SVfARG(keysv), rbrack); 1817 } 1818 1819 OP * 1820 Perl_scalar(pTHX_ OP *o) 1821 { 1822 OP *kid; 1823 1824 /* assumes no premature commitment */ 1825 if (!o || (PL_parser && PL_parser->error_count) 1826 || (o->op_flags & OPf_WANT) 1827 || o->op_type == OP_RETURN) 1828 { 1829 return o; 1830 } 1831 1832 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR; 1833 1834 switch (o->op_type) { 1835 case OP_REPEAT: 1836 scalar(cBINOPo->op_first); 1837 if (o->op_private & OPpREPEAT_DOLIST) { 1838 kid = cLISTOPx(cUNOPo->op_first)->op_first; 1839 assert(kid->op_type == OP_PUSHMARK); 1840 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) { 1841 op_null(cLISTOPx(cUNOPo->op_first)->op_first); 1842 o->op_private &=~ OPpREPEAT_DOLIST; 1843 } 1844 } 1845 break; 1846 case OP_OR: 1847 case OP_AND: 1848 case OP_COND_EXPR: 1849 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid)) 1850 scalar(kid); 1851 break; 1852 /* FALLTHROUGH */ 1853 case OP_SPLIT: 1854 case OP_MATCH: 1855 case OP_QR: 1856 case OP_SUBST: 1857 case OP_NULL: 1858 default: 1859 if (o->op_flags & OPf_KIDS) { 1860 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) 1861 scalar(kid); 1862 } 1863 break; 1864 case OP_LEAVE: 1865 case OP_LEAVETRY: 1866 kid = cLISTOPo->op_first; 1867 scalar(kid); 1868 kid = OpSIBLING(kid); 1869 do_kids: 1870 while (kid) { 1871 OP *sib = OpSIBLING(kid); 1872 if (sib && kid->op_type != OP_LEAVEWHEN 1873 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL 1874 || ( sib->op_targ != OP_NEXTSTATE 1875 && sib->op_targ != OP_DBSTATE ))) 1876 scalarvoid(kid); 1877 else 1878 scalar(kid); 1879 kid = sib; 1880 } 1881 PL_curcop = &PL_compiling; 1882 break; 1883 case OP_SCOPE: 1884 case OP_LINESEQ: 1885 case OP_LIST: 1886 kid = cLISTOPo->op_first; 1887 goto do_kids; 1888 case OP_SORT: 1889 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context"); 1890 break; 1891 case OP_KVHSLICE: 1892 case OP_KVASLICE: 1893 { 1894 /* Warn about scalar context */ 1895 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '['; 1896 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']'; 1897 SV *name; 1898 SV *keysv; 1899 const char *key = NULL; 1900 1901 /* This warning can be nonsensical when there is a syntax error. */ 1902 if (PL_parser && PL_parser->error_count) 1903 break; 1904 1905 if (!ckWARN(WARN_SYNTAX)) break; 1906 1907 kid = cLISTOPo->op_first; 1908 kid = OpSIBLING(kid); /* get past pushmark */ 1909 assert(OpSIBLING(kid)); 1910 name = S_op_varname(aTHX_ OpSIBLING(kid)); 1911 if (!name) /* XS module fiddling with the op tree */ 1912 break; 1913 S_op_pretty(aTHX_ kid, &keysv, &key); 1914 assert(SvPOK(name)); 1915 sv_chop(name,SvPVX(name)+1); 1916 if (key) 1917 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */ 1918 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), 1919 "%%%" SVf "%c%s%c in scalar context better written " 1920 "as $%" SVf "%c%s%c", 1921 SVfARG(name), lbrack, key, rbrack, SVfARG(name), 1922 lbrack, key, rbrack); 1923 else 1924 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */ 1925 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), 1926 "%%%" SVf "%c%" SVf "%c in scalar context better " 1927 "written as $%" SVf "%c%" SVf "%c", 1928 SVfARG(name), lbrack, SVfARG(keysv), rbrack, 1929 SVfARG(name), lbrack, SVfARG(keysv), rbrack); 1930 } 1931 } 1932 return o; 1933 } 1934 1935 OP * 1936 Perl_scalarvoid(pTHX_ OP *arg) 1937 { 1938 dVAR; 1939 OP *kid; 1940 SV* sv; 1941 OP *o = arg; 1942 dDEFER_OP; 1943 1944 PERL_ARGS_ASSERT_SCALARVOID; 1945 1946 do { 1947 U8 want; 1948 SV *useless_sv = NULL; 1949 const char* useless = NULL; 1950 1951 if (o->op_type == OP_NEXTSTATE 1952 || o->op_type == OP_DBSTATE 1953 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE 1954 || o->op_targ == OP_DBSTATE))) 1955 PL_curcop = (COP*)o; /* for warning below */ 1956 1957 /* assumes no premature commitment */ 1958 want = o->op_flags & OPf_WANT; 1959 if ((want && want != OPf_WANT_SCALAR) 1960 || (PL_parser && PL_parser->error_count) 1961 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN) 1962 { 1963 continue; 1964 } 1965 1966 if ((o->op_private & OPpTARGET_MY) 1967 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */ 1968 { 1969 /* newASSIGNOP has already applied scalar context, which we 1970 leave, as if this op is inside SASSIGN. */ 1971 continue; 1972 } 1973 1974 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID; 1975 1976 switch (o->op_type) { 1977 default: 1978 if (!(PL_opargs[o->op_type] & OA_FOLDCONST)) 1979 break; 1980 /* FALLTHROUGH */ 1981 case OP_REPEAT: 1982 if (o->op_flags & OPf_STACKED) 1983 break; 1984 if (o->op_type == OP_REPEAT) 1985 scalar(cBINOPo->op_first); 1986 goto func_ops; 1987 case OP_CONCAT: 1988 if ((o->op_flags & OPf_STACKED) && 1989 !(o->op_private & OPpCONCAT_NESTED)) 1990 break; 1991 goto func_ops; 1992 case OP_SUBSTR: 1993 if (o->op_private == 4) 1994 break; 1995 /* FALLTHROUGH */ 1996 case OP_WANTARRAY: 1997 case OP_GV: 1998 case OP_SMARTMATCH: 1999 case OP_AV2ARYLEN: 2000 case OP_REF: 2001 case OP_REFGEN: 2002 case OP_SREFGEN: 2003 case OP_DEFINED: 2004 case OP_HEX: 2005 case OP_OCT: 2006 case OP_LENGTH: 2007 case OP_VEC: 2008 case OP_INDEX: 2009 case OP_RINDEX: 2010 case OP_SPRINTF: 2011 case OP_KVASLICE: 2012 case OP_KVHSLICE: 2013 case OP_UNPACK: 2014 case OP_PACK: 2015 case OP_JOIN: 2016 case OP_LSLICE: 2017 case OP_ANONLIST: 2018 case OP_ANONHASH: 2019 case OP_SORT: 2020 case OP_REVERSE: 2021 case OP_RANGE: 2022 case OP_FLIP: 2023 case OP_FLOP: 2024 case OP_CALLER: 2025 case OP_FILENO: 2026 case OP_EOF: 2027 case OP_TELL: 2028 case OP_GETSOCKNAME: 2029 case OP_GETPEERNAME: 2030 case OP_READLINK: 2031 case OP_TELLDIR: 2032 case OP_GETPPID: 2033 case OP_GETPGRP: 2034 case OP_GETPRIORITY: 2035 case OP_TIME: 2036 case OP_TMS: 2037 case OP_LOCALTIME: 2038 case OP_GMTIME: 2039 case OP_GHBYNAME: 2040 case OP_GHBYADDR: 2041 case OP_GHOSTENT: 2042 case OP_GNBYNAME: 2043 case OP_GNBYADDR: 2044 case OP_GNETENT: 2045 case OP_GPBYNAME: 2046 case OP_GPBYNUMBER: 2047 case OP_GPROTOENT: 2048 case OP_GSBYNAME: 2049 case OP_GSBYPORT: 2050 case OP_GSERVENT: 2051 case OP_GPWNAM: 2052 case OP_GPWUID: 2053 case OP_GGRNAM: 2054 case OP_GGRGID: 2055 case OP_GETLOGIN: 2056 case OP_PROTOTYPE: 2057 case OP_RUNCV: 2058 func_ops: 2059 useless = OP_DESC(o); 2060 break; 2061 2062 case OP_GVSV: 2063 case OP_PADSV: 2064 case OP_PADAV: 2065 case OP_PADHV: 2066 case OP_PADANY: 2067 case OP_AELEM: 2068 case OP_AELEMFAST: 2069 case OP_AELEMFAST_LEX: 2070 case OP_ASLICE: 2071 case OP_HELEM: 2072 case OP_HSLICE: 2073 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO))) 2074 /* Otherwise it's "Useless use of grep iterator" */ 2075 useless = OP_DESC(o); 2076 break; 2077 2078 case OP_SPLIT: 2079 if (!(o->op_private & OPpSPLIT_ASSIGN)) 2080 useless = OP_DESC(o); 2081 break; 2082 2083 case OP_NOT: 2084 kid = cUNOPo->op_first; 2085 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST && 2086 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) { 2087 goto func_ops; 2088 } 2089 useless = "negative pattern binding (!~)"; 2090 break; 2091 2092 case OP_SUBST: 2093 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT) 2094 useless = "non-destructive substitution (s///r)"; 2095 break; 2096 2097 case OP_TRANSR: 2098 useless = "non-destructive transliteration (tr///r)"; 2099 break; 2100 2101 case OP_RV2GV: 2102 case OP_RV2SV: 2103 case OP_RV2AV: 2104 case OP_RV2HV: 2105 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) && 2106 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE)) 2107 useless = "a variable"; 2108 break; 2109 2110 case OP_CONST: 2111 sv = cSVOPo_sv; 2112 if (cSVOPo->op_private & OPpCONST_STRICT) 2113 no_bareword_allowed(o); 2114 else { 2115 if (ckWARN(WARN_VOID)) { 2116 NV nv; 2117 /* don't warn on optimised away booleans, eg 2118 * use constant Foo, 5; Foo || print; */ 2119 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT) 2120 useless = NULL; 2121 /* the constants 0 and 1 are permitted as they are 2122 conventionally used as dummies in constructs like 2123 1 while some_condition_with_side_effects; */ 2124 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0)) 2125 useless = NULL; 2126 else if (SvPOK(sv)) { 2127 SV * const dsv = newSVpvs(""); 2128 useless_sv 2129 = Perl_newSVpvf(aTHX_ 2130 "a constant (%s)", 2131 pv_pretty(dsv, SvPVX_const(sv), 2132 SvCUR(sv), 32, NULL, NULL, 2133 PERL_PV_PRETTY_DUMP 2134 | PERL_PV_ESCAPE_NOCLEAR 2135 | PERL_PV_ESCAPE_UNI_DETECT)); 2136 SvREFCNT_dec_NN(dsv); 2137 } 2138 else if (SvOK(sv)) { 2139 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%" SVf ")", SVfARG(sv)); 2140 } 2141 else 2142 useless = "a constant (undef)"; 2143 } 2144 } 2145 op_null(o); /* don't execute or even remember it */ 2146 break; 2147 2148 case OP_POSTINC: 2149 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */ 2150 break; 2151 2152 case OP_POSTDEC: 2153 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */ 2154 break; 2155 2156 case OP_I_POSTINC: 2157 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */ 2158 break; 2159 2160 case OP_I_POSTDEC: 2161 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */ 2162 break; 2163 2164 case OP_SASSIGN: { 2165 OP *rv2gv; 2166 UNOP *refgen, *rv2cv; 2167 LISTOP *exlist; 2168 2169 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2) 2170 break; 2171 2172 rv2gv = ((BINOP *)o)->op_last; 2173 if (!rv2gv || rv2gv->op_type != OP_RV2GV) 2174 break; 2175 2176 refgen = (UNOP *)((BINOP *)o)->op_first; 2177 2178 if (!refgen || (refgen->op_type != OP_REFGEN 2179 && refgen->op_type != OP_SREFGEN)) 2180 break; 2181 2182 exlist = (LISTOP *)refgen->op_first; 2183 if (!exlist || exlist->op_type != OP_NULL 2184 || exlist->op_targ != OP_LIST) 2185 break; 2186 2187 if (exlist->op_first->op_type != OP_PUSHMARK 2188 && exlist->op_first != exlist->op_last) 2189 break; 2190 2191 rv2cv = (UNOP*)exlist->op_last; 2192 2193 if (rv2cv->op_type != OP_RV2CV) 2194 break; 2195 2196 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0); 2197 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0); 2198 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0); 2199 2200 o->op_private |= OPpASSIGN_CV_TO_GV; 2201 rv2gv->op_private |= OPpDONT_INIT_GV; 2202 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT; 2203 2204 break; 2205 } 2206 2207 case OP_AASSIGN: { 2208 inplace_aassign(o); 2209 break; 2210 } 2211 2212 case OP_OR: 2213 case OP_AND: 2214 kid = cLOGOPo->op_first; 2215 if (kid->op_type == OP_NOT 2216 && (kid->op_flags & OPf_KIDS)) { 2217 if (o->op_type == OP_AND) { 2218 OpTYPE_set(o, OP_OR); 2219 } else { 2220 OpTYPE_set(o, OP_AND); 2221 } 2222 op_null(kid); 2223 } 2224 /* FALLTHROUGH */ 2225 2226 case OP_DOR: 2227 case OP_COND_EXPR: 2228 case OP_ENTERGIVEN: 2229 case OP_ENTERWHEN: 2230 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid)) 2231 if (!(kid->op_flags & OPf_KIDS)) 2232 scalarvoid(kid); 2233 else 2234 DEFER_OP(kid); 2235 break; 2236 2237 case OP_NULL: 2238 if (o->op_flags & OPf_STACKED) 2239 break; 2240 /* FALLTHROUGH */ 2241 case OP_NEXTSTATE: 2242 case OP_DBSTATE: 2243 case OP_ENTERTRY: 2244 case OP_ENTER: 2245 if (!(o->op_flags & OPf_KIDS)) 2246 break; 2247 /* FALLTHROUGH */ 2248 case OP_SCOPE: 2249 case OP_LEAVE: 2250 case OP_LEAVETRY: 2251 case OP_LEAVELOOP: 2252 case OP_LINESEQ: 2253 case OP_LEAVEGIVEN: 2254 case OP_LEAVEWHEN: 2255 kids: 2256 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) 2257 if (!(kid->op_flags & OPf_KIDS)) 2258 scalarvoid(kid); 2259 else 2260 DEFER_OP(kid); 2261 break; 2262 case OP_LIST: 2263 /* If the first kid after pushmark is something that the padrange 2264 optimisation would reject, then null the list and the pushmark. 2265 */ 2266 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK 2267 && ( !(kid = OpSIBLING(kid)) 2268 || ( kid->op_type != OP_PADSV 2269 && kid->op_type != OP_PADAV 2270 && kid->op_type != OP_PADHV) 2271 || kid->op_private & ~OPpLVAL_INTRO 2272 || !(kid = OpSIBLING(kid)) 2273 || ( kid->op_type != OP_PADSV 2274 && kid->op_type != OP_PADAV 2275 && kid->op_type != OP_PADHV) 2276 || kid->op_private & ~OPpLVAL_INTRO) 2277 ) { 2278 op_null(cUNOPo->op_first); /* NULL the pushmark */ 2279 op_null(o); /* NULL the list */ 2280 } 2281 goto kids; 2282 case OP_ENTEREVAL: 2283 scalarkids(o); 2284 break; 2285 case OP_SCALAR: 2286 scalar(o); 2287 break; 2288 } 2289 2290 if (useless_sv) { 2291 /* mortalise it, in case warnings are fatal. */ 2292 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), 2293 "Useless use of %" SVf " in void context", 2294 SVfARG(sv_2mortal(useless_sv))); 2295 } 2296 else if (useless) { 2297 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), 2298 "Useless use of %s in void context", 2299 useless); 2300 } 2301 } while ( (o = POP_DEFERRED_OP()) ); 2302 2303 DEFER_OP_CLEANUP; 2304 2305 return arg; 2306 } 2307 2308 static OP * 2309 S_listkids(pTHX_ OP *o) 2310 { 2311 if (o && o->op_flags & OPf_KIDS) { 2312 OP *kid; 2313 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) 2314 list(kid); 2315 } 2316 return o; 2317 } 2318 2319 OP * 2320 Perl_list(pTHX_ OP *o) 2321 { 2322 OP *kid; 2323 2324 /* assumes no premature commitment */ 2325 if (!o || (o->op_flags & OPf_WANT) 2326 || (PL_parser && PL_parser->error_count) 2327 || o->op_type == OP_RETURN) 2328 { 2329 return o; 2330 } 2331 2332 if ((o->op_private & OPpTARGET_MY) 2333 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */ 2334 { 2335 return o; /* As if inside SASSIGN */ 2336 } 2337 2338 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST; 2339 2340 switch (o->op_type) { 2341 case OP_FLOP: 2342 list(cBINOPo->op_first); 2343 break; 2344 case OP_REPEAT: 2345 if (o->op_private & OPpREPEAT_DOLIST 2346 && !(o->op_flags & OPf_STACKED)) 2347 { 2348 list(cBINOPo->op_first); 2349 kid = cBINOPo->op_last; 2350 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv) 2351 && SvIVX(kSVOP_sv) == 1) 2352 { 2353 op_null(o); /* repeat */ 2354 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */ 2355 /* const (rhs): */ 2356 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL)); 2357 } 2358 } 2359 break; 2360 case OP_OR: 2361 case OP_AND: 2362 case OP_COND_EXPR: 2363 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid)) 2364 list(kid); 2365 break; 2366 default: 2367 case OP_MATCH: 2368 case OP_QR: 2369 case OP_SUBST: 2370 case OP_NULL: 2371 if (!(o->op_flags & OPf_KIDS)) 2372 break; 2373 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) { 2374 list(cBINOPo->op_first); 2375 return gen_constant_list(o); 2376 } 2377 listkids(o); 2378 break; 2379 case OP_LIST: 2380 listkids(o); 2381 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) { 2382 op_null(cUNOPo->op_first); /* NULL the pushmark */ 2383 op_null(o); /* NULL the list */ 2384 } 2385 break; 2386 case OP_LEAVE: 2387 case OP_LEAVETRY: 2388 kid = cLISTOPo->op_first; 2389 list(kid); 2390 kid = OpSIBLING(kid); 2391 do_kids: 2392 while (kid) { 2393 OP *sib = OpSIBLING(kid); 2394 if (sib && kid->op_type != OP_LEAVEWHEN) 2395 scalarvoid(kid); 2396 else 2397 list(kid); 2398 kid = sib; 2399 } 2400 PL_curcop = &PL_compiling; 2401 break; 2402 case OP_SCOPE: 2403 case OP_LINESEQ: 2404 kid = cLISTOPo->op_first; 2405 goto do_kids; 2406 } 2407 return o; 2408 } 2409 2410 static OP * 2411 S_scalarseq(pTHX_ OP *o) 2412 { 2413 if (o) { 2414 const OPCODE type = o->op_type; 2415 2416 if (type == OP_LINESEQ || type == OP_SCOPE || 2417 type == OP_LEAVE || type == OP_LEAVETRY) 2418 { 2419 OP *kid, *sib; 2420 for (kid = cLISTOPo->op_first; kid; kid = sib) { 2421 if ((sib = OpSIBLING(kid)) 2422 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL 2423 || ( sib->op_targ != OP_NEXTSTATE 2424 && sib->op_targ != OP_DBSTATE ))) 2425 { 2426 scalarvoid(kid); 2427 } 2428 } 2429 PL_curcop = &PL_compiling; 2430 } 2431 o->op_flags &= ~OPf_PARENS; 2432 if (PL_hints & HINT_BLOCK_SCOPE) 2433 o->op_flags |= OPf_PARENS; 2434 } 2435 else 2436 o = newOP(OP_STUB, 0); 2437 return o; 2438 } 2439 2440 STATIC OP * 2441 S_modkids(pTHX_ OP *o, I32 type) 2442 { 2443 if (o && o->op_flags & OPf_KIDS) { 2444 OP *kid; 2445 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) 2446 op_lvalue(kid, type); 2447 } 2448 return o; 2449 } 2450 2451 2452 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid 2453 * const fields. Also, convert CONST keys to HEK-in-SVs. 2454 * rop is the op that retrieves the hash; 2455 * key_op is the first key 2456 * real if false, only check (and possibly croak); don't update op 2457 */ 2458 2459 STATIC void 2460 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op, int real) 2461 { 2462 PADNAME *lexname; 2463 GV **fields; 2464 bool check_fields; 2465 2466 /* find the padsv corresponding to $lex->{} or @{$lex}{} */ 2467 if (rop) { 2468 if (rop->op_first->op_type == OP_PADSV) 2469 /* @$hash{qw(keys here)} */ 2470 rop = (UNOP*)rop->op_first; 2471 else { 2472 /* @{$hash}{qw(keys here)} */ 2473 if (rop->op_first->op_type == OP_SCOPE 2474 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV) 2475 { 2476 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last; 2477 } 2478 else 2479 rop = NULL; 2480 } 2481 } 2482 2483 lexname = NULL; /* just to silence compiler warnings */ 2484 fields = NULL; /* just to silence compiler warnings */ 2485 2486 check_fields = 2487 rop 2488 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ), 2489 SvPAD_TYPED(lexname)) 2490 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE)) 2491 && isGV(*fields) && GvHV(*fields); 2492 2493 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) { 2494 SV **svp, *sv; 2495 if (key_op->op_type != OP_CONST) 2496 continue; 2497 svp = cSVOPx_svp(key_op); 2498 2499 /* make sure it's not a bareword under strict subs */ 2500 if (key_op->op_private & OPpCONST_BARE && 2501 key_op->op_private & OPpCONST_STRICT) 2502 { 2503 no_bareword_allowed((OP*)key_op); 2504 } 2505 2506 /* Make the CONST have a shared SV */ 2507 if ( !SvIsCOW_shared_hash(sv = *svp) 2508 && SvTYPE(sv) < SVt_PVMG 2509 && SvOK(sv) 2510 && !SvROK(sv) 2511 && real) 2512 { 2513 SSize_t keylen; 2514 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen); 2515 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0); 2516 SvREFCNT_dec_NN(sv); 2517 *svp = nsv; 2518 } 2519 2520 if ( check_fields 2521 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0)) 2522 { 2523 Perl_croak(aTHX_ "No such class field \"%" SVf "\" " 2524 "in variable %" PNf " of type %" HEKf, 2525 SVfARG(*svp), PNfARG(lexname), 2526 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname)))); 2527 } 2528 } 2529 } 2530 2531 /* info returned by S_sprintf_is_multiconcatable() */ 2532 2533 struct sprintf_ismc_info { 2534 SSize_t nargs; /* num of args to sprintf (not including the format) */ 2535 char *start; /* start of raw format string */ 2536 char *end; /* bytes after end of raw format string */ 2537 STRLEN total_len; /* total length (in bytes) of format string, not 2538 including '%s' and half of '%%' */ 2539 STRLEN variant; /* number of bytes by which total_len_p would grow 2540 if upgraded to utf8 */ 2541 bool utf8; /* whether the format is utf8 */ 2542 }; 2543 2544 2545 /* is the OP_SPRINTF o suitable for converting into a multiconcat op? 2546 * i.e. its format argument is a const string with only '%s' and '%%' 2547 * formats, and the number of args is known, e.g. 2548 * sprintf "a=%s f=%s", $a[0], scalar(f()); 2549 * but not 2550 * sprintf "i=%d a=%s f=%s", $i, @a, f(); 2551 * 2552 * If successful, the sprintf_ismc_info struct pointed to by info will be 2553 * populated. 2554 */ 2555 2556 STATIC bool 2557 S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info) 2558 { 2559 OP *pm, *constop, *kid; 2560 SV *sv; 2561 char *s, *e, *p; 2562 SSize_t nargs, nformats; 2563 STRLEN cur, total_len, variant; 2564 bool utf8; 2565 2566 /* if sprintf's behaviour changes, die here so that someone 2567 * can decide whether to enhance this function or skip optimising 2568 * under those new circumstances */ 2569 assert(!(o->op_flags & OPf_STACKED)); 2570 assert(!(PL_opargs[OP_SPRINTF] & OA_TARGLEX)); 2571 assert(!(o->op_private & ~OPpARG4_MASK)); 2572 2573 pm = cUNOPo->op_first; 2574 if (pm->op_type != OP_PUSHMARK) /* weird coreargs stuff */ 2575 return FALSE; 2576 constop = OpSIBLING(pm); 2577 if (!constop || constop->op_type != OP_CONST) 2578 return FALSE; 2579 sv = cSVOPx_sv(constop); 2580 if (SvMAGICAL(sv) || !SvPOK(sv)) 2581 return FALSE; 2582 2583 s = SvPV(sv, cur); 2584 e = s + cur; 2585 2586 /* Scan format for %% and %s and work out how many %s there are. 2587 * Abandon if other format types are found. 2588 */ 2589 2590 nformats = 0; 2591 total_len = 0; 2592 variant = 0; 2593 2594 for (p = s; p < e; p++) { 2595 if (*p != '%') { 2596 total_len++; 2597 if (!UTF8_IS_INVARIANT(*p)) 2598 variant++; 2599 continue; 2600 } 2601 p++; 2602 if (p >= e) 2603 return FALSE; /* lone % at end gives "Invalid conversion" */ 2604 if (*p == '%') 2605 total_len++; 2606 else if (*p == 's') 2607 nformats++; 2608 else 2609 return FALSE; 2610 } 2611 2612 if (!nformats || nformats > PERL_MULTICONCAT_MAXARG) 2613 return FALSE; 2614 2615 utf8 = cBOOL(SvUTF8(sv)); 2616 if (utf8) 2617 variant = 0; 2618 2619 /* scan args; they must all be in scalar cxt */ 2620 2621 nargs = 0; 2622 kid = OpSIBLING(constop); 2623 2624 while (kid) { 2625 if ((kid->op_flags & OPf_WANT) != OPf_WANT_SCALAR) 2626 return FALSE; 2627 nargs++; 2628 kid = OpSIBLING(kid); 2629 } 2630 2631 if (nargs != nformats) 2632 return FALSE; /* e.g. sprintf("%s%s", $a); */ 2633 2634 2635 info->nargs = nargs; 2636 info->start = s; 2637 info->end = e; 2638 info->total_len = total_len; 2639 info->variant = variant; 2640 info->utf8 = utf8; 2641 2642 return TRUE; 2643 } 2644 2645 2646 2647 /* S_maybe_multiconcat(): 2648 * 2649 * given an OP_STRINGIFY, OP_SASSIGN, OP_CONCAT or OP_SPRINTF op, possibly 2650 * convert it (and its children) into an OP_MULTICONCAT. See the code 2651 * comments just before pp_multiconcat() for the full details of what 2652 * OP_MULTICONCAT supports. 2653 * 2654 * Basically we're looking for an optree with a chain of OP_CONCATS down 2655 * the LHS (or an OP_SPRINTF), with possibly an OP_SASSIGN, and/or 2656 * OP_STRINGIFY, and/or OP_CONCAT acting as '.=' at its head, e.g. 2657 * 2658 * $x = "$a$b-$c" 2659 * 2660 * looks like 2661 * 2662 * SASSIGN 2663 * | 2664 * STRINGIFY -- PADSV[$x] 2665 * | 2666 * | 2667 * ex-PUSHMARK -- CONCAT/S 2668 * | 2669 * CONCAT/S -- PADSV[$d] 2670 * | 2671 * CONCAT -- CONST["-"] 2672 * | 2673 * PADSV[$a] -- PADSV[$b] 2674 * 2675 * Note that at this stage the OP_SASSIGN may have already been optimised 2676 * away with OPpTARGET_MY set on the OP_STRINGIFY or OP_CONCAT. 2677 */ 2678 2679 STATIC void 2680 S_maybe_multiconcat(pTHX_ OP *o) 2681 { 2682 dVAR; 2683 OP *lastkidop; /* the right-most of any kids unshifted onto o */ 2684 OP *topop; /* the top-most op in the concat tree (often equals o, 2685 unless there are assign/stringify ops above it */ 2686 OP *parentop; /* the parent op of topop (or itself if no parent) */ 2687 OP *targmyop; /* the op (if any) with the OPpTARGET_MY flag */ 2688 OP *targetop; /* the op corresponding to target=... or target.=... */ 2689 OP *stringop; /* the OP_STRINGIFY op, if any */ 2690 OP *nextop; /* used for recreating the op_next chain without consts */ 2691 OP *kid; /* general-purpose op pointer */ 2692 UNOP_AUX_item *aux; 2693 UNOP_AUX_item *lenp; 2694 char *const_str, *p; 2695 struct sprintf_ismc_info sprintf_info; 2696 2697 /* store info about each arg in args[]; 2698 * toparg is the highest used slot; argp is a general 2699 * pointer to args[] slots */ 2700 struct { 2701 void *p; /* initially points to const sv (or null for op); 2702 later, set to SvPV(constsv), with ... */ 2703 STRLEN len; /* ... len set to SvPV(..., len) */ 2704 } *argp, *toparg, args[PERL_MULTICONCAT_MAXARG*2 + 1]; 2705 2706 SSize_t nargs = 0; 2707 SSize_t nconst = 0; 2708 SSize_t nadjconst = 0; /* adjacent consts - may be demoted to args */ 2709 STRLEN variant; 2710 bool utf8 = FALSE; 2711 bool kid_is_last = FALSE; /* most args will be the RHS kid of a concat op; 2712 the last-processed arg will the LHS of one, 2713 as args are processed in reverse order */ 2714 U8 stacked_last = 0; /* whether the last seen concat op was STACKED */ 2715 STRLEN total_len = 0; /* sum of the lengths of the const segments */ 2716 U8 flags = 0; /* what will become the op_flags and ... */ 2717 U8 private_flags = 0; /* ... op_private of the multiconcat op */ 2718 bool is_sprintf = FALSE; /* we're optimising an sprintf */ 2719 bool is_targable = FALSE; /* targetop is an OPpTARGET_MY candidate */ 2720 bool prev_was_const = FALSE; /* previous arg was a const */ 2721 2722 /* ----------------------------------------------------------------- 2723 * Phase 1: 2724 * 2725 * Examine the optree non-destructively to determine whether it's 2726 * suitable to be converted into an OP_MULTICONCAT. Accumulate 2727 * information about the optree in args[]. 2728 */ 2729 2730 argp = args; 2731 targmyop = NULL; 2732 targetop = NULL; 2733 stringop = NULL; 2734 topop = o; 2735 parentop = o; 2736 2737 assert( o->op_type == OP_SASSIGN 2738 || o->op_type == OP_CONCAT 2739 || o->op_type == OP_SPRINTF 2740 || o->op_type == OP_STRINGIFY); 2741 2742 Zero(&sprintf_info, 1, struct sprintf_ismc_info); 2743 2744 /* first see if, at the top of the tree, there is an assign, 2745 * append and/or stringify */ 2746 2747 if (topop->op_type == OP_SASSIGN) { 2748 /* expr = ..... */ 2749 if (o->op_ppaddr != PL_ppaddr[OP_SASSIGN]) 2750 return; 2751 if (o->op_private & (OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV)) 2752 return; 2753 assert(!(o->op_private & ~OPpARG2_MASK)); /* barf on unknown flags */ 2754 2755 parentop = topop; 2756 topop = cBINOPo->op_first; 2757 targetop = OpSIBLING(topop); 2758 if (!targetop) /* probably some sort of syntax error */ 2759 return; 2760 } 2761 else if ( topop->op_type == OP_CONCAT 2762 && (topop->op_flags & OPf_STACKED) 2763 && (!(topop->op_private & OPpCONCAT_NESTED)) 2764 ) 2765 { 2766 /* expr .= ..... */ 2767 2768 /* OPpTARGET_MY shouldn't be able to be set here. If it is, 2769 * decide what to do about it */ 2770 assert(!(o->op_private & OPpTARGET_MY)); 2771 2772 /* barf on unknown flags */ 2773 assert(!(o->op_private & ~(OPpARG2_MASK|OPpTARGET_MY))); 2774 private_flags |= OPpMULTICONCAT_APPEND; 2775 targetop = cBINOPo->op_first; 2776 parentop = topop; 2777 topop = OpSIBLING(targetop); 2778 2779 /* $x .= <FOO> gets optimised to rcatline instead */ 2780 if (topop->op_type == OP_READLINE) 2781 return; 2782 } 2783 2784 if (targetop) { 2785 /* Can targetop (the LHS) if it's a padsv, be be optimised 2786 * away and use OPpTARGET_MY instead? 2787 */ 2788 if ( (targetop->op_type == OP_PADSV) 2789 && !(targetop->op_private & OPpDEREF) 2790 && !(targetop->op_private & OPpPAD_STATE) 2791 /* we don't support 'my $x .= ...' */ 2792 && ( o->op_type == OP_SASSIGN 2793 || !(targetop->op_private & OPpLVAL_INTRO)) 2794 ) 2795 is_targable = TRUE; 2796 } 2797 2798 if (topop->op_type == OP_STRINGIFY) { 2799 if (topop->op_ppaddr != PL_ppaddr[OP_STRINGIFY]) 2800 return; 2801 stringop = topop; 2802 2803 /* barf on unknown flags */ 2804 assert(!(o->op_private & ~(OPpARG4_MASK|OPpTARGET_MY))); 2805 2806 if ((topop->op_private & OPpTARGET_MY)) { 2807 if (o->op_type == OP_SASSIGN) 2808 return; /* can't have two assigns */ 2809 targmyop = topop; 2810 } 2811 2812 private_flags |= OPpMULTICONCAT_STRINGIFY; 2813 parentop = topop; 2814 topop = cBINOPx(topop)->op_first; 2815 assert(OP_TYPE_IS_OR_WAS_NN(topop, OP_PUSHMARK)); 2816 topop = OpSIBLING(topop); 2817 } 2818 2819 if (topop->op_type == OP_SPRINTF) { 2820 if (topop->op_ppaddr != PL_ppaddr[OP_SPRINTF]) 2821 return; 2822 if (S_sprintf_is_multiconcatable(aTHX_ topop, &sprintf_info)) { 2823 nargs = sprintf_info.nargs; 2824 total_len = sprintf_info.total_len; 2825 variant = sprintf_info.variant; 2826 utf8 = sprintf_info.utf8; 2827 is_sprintf = TRUE; 2828 private_flags |= OPpMULTICONCAT_FAKE; 2829 toparg = argp; 2830 /* we have an sprintf op rather than a concat optree. 2831 * Skip most of the code below which is associated with 2832 * processing that optree. We also skip phase 2, determining 2833 * whether its cost effective to optimise, since for sprintf, 2834 * multiconcat is *always* faster */ 2835 goto create_aux; 2836 } 2837 /* note that even if the sprintf itself isn't multiconcatable, 2838 * the expression as a whole may be, e.g. in 2839 * $x .= sprintf("%d",...) 2840 * the sprintf op will be left as-is, but the concat/S op may 2841 * be upgraded to multiconcat 2842 */ 2843 } 2844 else if (topop->op_type == OP_CONCAT) { 2845 if (topop->op_ppaddr != PL_ppaddr[OP_CONCAT]) 2846 return; 2847 2848 if ((topop->op_private & OPpTARGET_MY)) { 2849 if (o->op_type == OP_SASSIGN || targmyop) 2850 return; /* can't have two assigns */ 2851 targmyop = topop; 2852 } 2853 } 2854 2855 /* Is it safe to convert a sassign/stringify/concat op into 2856 * a multiconcat? */ 2857 assert((PL_opargs[OP_SASSIGN] & OA_CLASS_MASK) == OA_BINOP); 2858 assert((PL_opargs[OP_CONCAT] & OA_CLASS_MASK) == OA_BINOP); 2859 assert((PL_opargs[OP_STRINGIFY] & OA_CLASS_MASK) == OA_LISTOP); 2860 assert((PL_opargs[OP_SPRINTF] & OA_CLASS_MASK) == OA_LISTOP); 2861 STATIC_ASSERT_STMT( STRUCT_OFFSET(BINOP, op_last) 2862 == STRUCT_OFFSET(UNOP_AUX, op_aux)); 2863 STATIC_ASSERT_STMT( STRUCT_OFFSET(LISTOP, op_last) 2864 == STRUCT_OFFSET(UNOP_AUX, op_aux)); 2865 2866 /* Now scan the down the tree looking for a series of 2867 * CONCAT/OPf_STACKED ops on the LHS (with the last one not 2868 * stacked). For example this tree: 2869 * 2870 * | 2871 * CONCAT/STACKED 2872 * | 2873 * CONCAT/STACKED -- EXPR5 2874 * | 2875 * CONCAT/STACKED -- EXPR4 2876 * | 2877 * CONCAT -- EXPR3 2878 * | 2879 * EXPR1 -- EXPR2 2880 * 2881 * corresponds to an expression like 2882 * 2883 * (EXPR1 . EXPR2 . EXPR3 . EXPR4 . EXPR5) 2884 * 2885 * Record info about each EXPR in args[]: in particular, whether it is 2886 * a stringifiable OP_CONST and if so what the const sv is. 2887 * 2888 * The reason why the last concat can't be STACKED is the difference 2889 * between 2890 * 2891 * ((($a .= $a) .= $a) .= $a) .= $a 2892 * 2893 * and 2894 * $a . $a . $a . $a . $a 2895 * 2896 * The main difference between the optrees for those two constructs 2897 * is the presence of the last STACKED. As well as modifying $a, 2898 * the former sees the changed $a between each concat, so if $s is 2899 * initially 'a', the first returns 'a' x 16, while the latter returns 2900 * 'a' x 5. And pp_multiconcat can't handle that kind of thing. 2901 */ 2902 2903 kid = topop; 2904 2905 for (;;) { 2906 OP *argop; 2907 SV *sv; 2908 bool last = FALSE; 2909 2910 if ( kid->op_type == OP_CONCAT 2911 && !kid_is_last 2912 ) { 2913 OP *k1, *k2; 2914 k1 = cUNOPx(kid)->op_first; 2915 k2 = OpSIBLING(k1); 2916 /* shouldn't happen except maybe after compile err? */ 2917 if (!k2) 2918 return; 2919 2920 /* avoid turning (A . B . ($lex = C) ...) into (A . B . C ...) */ 2921 if (kid->op_private & OPpTARGET_MY) 2922 kid_is_last = TRUE; 2923 2924 stacked_last = (kid->op_flags & OPf_STACKED); 2925 if (!stacked_last) 2926 kid_is_last = TRUE; 2927 2928 kid = k1; 2929 argop = k2; 2930 } 2931 else { 2932 argop = kid; 2933 last = TRUE; 2934 } 2935 2936 if ( nargs + nadjconst > PERL_MULTICONCAT_MAXARG - 2 2937 || (argp - args + 1) > (PERL_MULTICONCAT_MAXARG*2 + 1) - 2) 2938 { 2939 /* At least two spare slots are needed to decompose both 2940 * concat args. If there are no slots left, continue to 2941 * examine the rest of the optree, but don't push new values 2942 * on args[]. If the optree as a whole is legal for conversion 2943 * (in particular that the last concat isn't STACKED), then 2944 * the first PERL_MULTICONCAT_MAXARG elements of the optree 2945 * can be converted into an OP_MULTICONCAT now, with the first 2946 * child of that op being the remainder of the optree - 2947 * which may itself later be converted to a multiconcat op 2948 * too. 2949 */ 2950 if (last) { 2951 /* the last arg is the rest of the optree */ 2952 argp++->p = NULL; 2953 nargs++; 2954 } 2955 } 2956 else if ( argop->op_type == OP_CONST 2957 && ((sv = cSVOPx_sv(argop))) 2958 /* defer stringification until runtime of 'constant' 2959 * things that might stringify variantly, e.g. the radix 2960 * point of NVs, or overloaded RVs */ 2961 && (SvPOK(sv) || SvIOK(sv)) 2962 && (!SvGMAGICAL(sv)) 2963 ) { 2964 argp++->p = sv; 2965 utf8 |= cBOOL(SvUTF8(sv)); 2966 nconst++; 2967 if (prev_was_const) 2968 /* this const may be demoted back to a plain arg later; 2969 * make sure we have enough arg slots left */ 2970 nadjconst++; 2971 prev_was_const = !prev_was_const; 2972 } 2973 else { 2974 argp++->p = NULL; 2975 nargs++; 2976 prev_was_const = FALSE; 2977 } 2978 2979 if (last) 2980 break; 2981 } 2982 2983 toparg = argp - 1; 2984 2985 if (stacked_last) 2986 return; /* we don't support ((A.=B).=C)...) */ 2987 2988 /* look for two adjacent consts and don't fold them together: 2989 * $o . "a" . "b" 2990 * should do 2991 * $o->concat("a")->concat("b") 2992 * rather than 2993 * $o->concat("ab") 2994 * (but $o .= "a" . "b" should still fold) 2995 */ 2996 { 2997 bool seen_nonconst = FALSE; 2998 for (argp = toparg; argp >= args; argp--) { 2999 if (argp->p == NULL) { 3000 seen_nonconst = TRUE; 3001 continue; 3002 } 3003 if (!seen_nonconst) 3004 continue; 3005 if (argp[1].p) { 3006 /* both previous and current arg were constants; 3007 * leave the current OP_CONST as-is */ 3008 argp->p = NULL; 3009 nconst--; 3010 nargs++; 3011 } 3012 } 3013 } 3014 3015 /* ----------------------------------------------------------------- 3016 * Phase 2: 3017 * 3018 * At this point we have determined that the optree *can* be converted 3019 * into a multiconcat. Having gathered all the evidence, we now decide 3020 * whether it *should*. 3021 */ 3022 3023 3024 /* we need at least one concat action, e.g.: 3025 * 3026 * Y . Z 3027 * X = Y . Z 3028 * X .= Y 3029 * 3030 * otherwise we could be doing something like $x = "foo", which 3031 * if treated as as a concat, would fail to COW. 3032 */ 3033 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 2) 3034 return; 3035 3036 /* Benchmarking seems to indicate that we gain if: 3037 * * we optimise at least two actions into a single multiconcat 3038 * (e.g concat+concat, sassign+concat); 3039 * * or if we can eliminate at least 1 OP_CONST; 3040 * * or if we can eliminate a padsv via OPpTARGET_MY 3041 */ 3042 3043 if ( 3044 /* eliminated at least one OP_CONST */ 3045 nconst >= 1 3046 /* eliminated an OP_SASSIGN */ 3047 || o->op_type == OP_SASSIGN 3048 /* eliminated an OP_PADSV */ 3049 || (!targmyop && is_targable) 3050 ) 3051 /* definitely a net gain to optimise */ 3052 goto optimise; 3053 3054 /* ... if not, what else? */ 3055 3056 /* special-case '$lex1 = expr . $lex1' (where expr isn't lex1): 3057 * multiconcat is faster (due to not creating a temporary copy of 3058 * $lex1), whereas for a general $lex1 = $lex2 . $lex3, concat is 3059 * faster. 3060 */ 3061 if ( nconst == 0 3062 && nargs == 2 3063 && targmyop 3064 && topop->op_type == OP_CONCAT 3065 ) { 3066 PADOFFSET t = targmyop->op_targ; 3067 OP *k1 = cBINOPx(topop)->op_first; 3068 OP *k2 = cBINOPx(topop)->op_last; 3069 if ( k2->op_type == OP_PADSV 3070 && k2->op_targ == t 3071 && ( k1->op_type != OP_PADSV 3072 || k1->op_targ != t) 3073 ) 3074 goto optimise; 3075 } 3076 3077 /* need at least two concats */ 3078 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 3) 3079 return; 3080 3081 3082 3083 /* ----------------------------------------------------------------- 3084 * Phase 3: 3085 * 3086 * At this point the optree has been verified as ok to be optimised 3087 * into an OP_MULTICONCAT. Now start changing things. 3088 */ 3089 3090 optimise: 3091 3092 /* stringify all const args and determine utf8ness */ 3093 3094 variant = 0; 3095 for (argp = args; argp <= toparg; argp++) { 3096 SV *sv = (SV*)argp->p; 3097 if (!sv) 3098 continue; /* not a const op */ 3099 if (utf8 && !SvUTF8(sv)) 3100 sv_utf8_upgrade_nomg(sv); 3101 argp->p = SvPV_nomg(sv, argp->len); 3102 total_len += argp->len; 3103 3104 /* see if any strings would grow if converted to utf8 */ 3105 if (!utf8) { 3106 variant += variant_under_utf8_count((U8 *) argp->p, 3107 (U8 *) argp->p + argp->len); 3108 } 3109 } 3110 3111 /* create and populate aux struct */ 3112 3113 create_aux: 3114 3115 aux = (UNOP_AUX_item*)PerlMemShared_malloc( 3116 sizeof(UNOP_AUX_item) 3117 * ( 3118 PERL_MULTICONCAT_HEADER_SIZE 3119 + ((nargs + 1) * (variant ? 2 : 1)) 3120 ) 3121 ); 3122 const_str = (char *)PerlMemShared_malloc(total_len ? total_len : 1); 3123 3124 /* Extract all the non-const expressions from the concat tree then 3125 * dispose of the old tree, e.g. convert the tree from this: 3126 * 3127 * o => SASSIGN 3128 * | 3129 * STRINGIFY -- TARGET 3130 * | 3131 * ex-PUSHMARK -- CONCAT 3132 * | 3133 * CONCAT -- EXPR5 3134 * | 3135 * CONCAT -- EXPR4 3136 * | 3137 * CONCAT -- EXPR3 3138 * | 3139 * EXPR1 -- EXPR2 3140 * 3141 * 3142 * to: 3143 * 3144 * o => MULTICONCAT 3145 * | 3146 * ex-PUSHMARK -- EXPR1 -- EXPR2 -- EXPR3 -- EXPR4 -- EXPR5 -- TARGET 3147 * 3148 * except that if EXPRi is an OP_CONST, it's discarded. 3149 * 3150 * During the conversion process, EXPR ops are stripped from the tree 3151 * and unshifted onto o. Finally, any of o's remaining original 3152 * childen are discarded and o is converted into an OP_MULTICONCAT. 3153 * 3154 * In this middle of this, o may contain both: unshifted args on the 3155 * left, and some remaining original args on the right. lastkidop 3156 * is set to point to the right-most unshifted arg to delineate 3157 * between the two sets. 3158 */ 3159 3160 3161 if (is_sprintf) { 3162 /* create a copy of the format with the %'s removed, and record 3163 * the sizes of the const string segments in the aux struct */ 3164 char *q, *oldq; 3165 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS; 3166 3167 p = sprintf_info.start; 3168 q = const_str; 3169 oldq = q; 3170 for (; p < sprintf_info.end; p++) { 3171 if (*p == '%') { 3172 p++; 3173 if (*p != '%') { 3174 (lenp++)->ssize = q - oldq; 3175 oldq = q; 3176 continue; 3177 } 3178 } 3179 *q++ = *p; 3180 } 3181 lenp->ssize = q - oldq; 3182 assert((STRLEN)(q - const_str) == total_len); 3183 3184 /* Attach all the args (i.e. the kids of the sprintf) to o (which 3185 * may or may not be topop) The pushmark and const ops need to be 3186 * kept in case they're an op_next entry point. 3187 */ 3188 lastkidop = cLISTOPx(topop)->op_last; 3189 kid = cUNOPx(topop)->op_first; /* pushmark */ 3190 op_null(kid); 3191 op_null(OpSIBLING(kid)); /* const */ 3192 if (o != topop) { 3193 kid = op_sibling_splice(topop, NULL, -1, NULL); /* cut all args */ 3194 op_sibling_splice(o, NULL, 0, kid); /* and attach to o */ 3195 lastkidop->op_next = o; 3196 } 3197 } 3198 else { 3199 p = const_str; 3200 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS; 3201 3202 lenp->ssize = -1; 3203 3204 /* Concatenate all const strings into const_str. 3205 * Note that args[] contains the RHS args in reverse order, so 3206 * we scan args[] from top to bottom to get constant strings 3207 * in L-R order 3208 */ 3209 for (argp = toparg; argp >= args; argp--) { 3210 if (!argp->p) 3211 /* not a const op */ 3212 (++lenp)->ssize = -1; 3213 else { 3214 STRLEN l = argp->len; 3215 Copy(argp->p, p, l, char); 3216 p += l; 3217 if (lenp->ssize == -1) 3218 lenp->ssize = l; 3219 else 3220 lenp->ssize += l; 3221 } 3222 } 3223 3224 kid = topop; 3225 nextop = o; 3226 lastkidop = NULL; 3227 3228 for (argp = args; argp <= toparg; argp++) { 3229 /* only keep non-const args, except keep the first-in-next-chain 3230 * arg no matter what it is (but nulled if OP_CONST), because it 3231 * may be the entry point to this subtree from the previous 3232 * op_next. 3233 */ 3234 bool last = (argp == toparg); 3235 OP *prev; 3236 3237 /* set prev to the sibling *before* the arg to be cut out, 3238 * e.g. when cutting EXPR: 3239 * 3240 * | 3241 * kid= CONCAT 3242 * | 3243 * prev= CONCAT -- EXPR 3244 * | 3245 */ 3246 if (argp == args && kid->op_type != OP_CONCAT) { 3247 /* in e.g. '$x .= f(1)' there's no RHS concat tree 3248 * so the expression to be cut isn't kid->op_last but 3249 * kid itself */ 3250 OP *o1, *o2; 3251 /* find the op before kid */ 3252 o1 = NULL; 3253 o2 = cUNOPx(parentop)->op_first; 3254 while (o2 && o2 != kid) { 3255 o1 = o2; 3256 o2 = OpSIBLING(o2); 3257 } 3258 assert(o2 == kid); 3259 prev = o1; 3260 kid = parentop; 3261 } 3262 else if (kid == o && lastkidop) 3263 prev = last ? lastkidop : OpSIBLING(lastkidop); 3264 else 3265 prev = last ? NULL : cUNOPx(kid)->op_first; 3266 3267 if (!argp->p || last) { 3268 /* cut RH op */ 3269 OP *aop = op_sibling_splice(kid, prev, 1, NULL); 3270 /* and unshift to front of o */ 3271 op_sibling_splice(o, NULL, 0, aop); 3272 /* record the right-most op added to o: later we will 3273 * free anything to the right of it */ 3274 if (!lastkidop) 3275 lastkidop = aop; 3276 aop->op_next = nextop; 3277 if (last) { 3278 if (argp->p) 3279 /* null the const at start of op_next chain */ 3280 op_null(aop); 3281 } 3282 else if (prev) 3283 nextop = prev->op_next; 3284 } 3285 3286 /* the last two arguments are both attached to the same concat op */ 3287 if (argp < toparg - 1) 3288 kid = prev; 3289 } 3290 } 3291 3292 /* Populate the aux struct */ 3293 3294 aux[PERL_MULTICONCAT_IX_NARGS].ssize = nargs; 3295 aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv = utf8 ? NULL : const_str; 3296 aux[PERL_MULTICONCAT_IX_PLAIN_LEN].ssize = utf8 ? 0 : total_len; 3297 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = const_str; 3298 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = total_len; 3299 3300 /* if variant > 0, calculate a variant const string and lengths where 3301 * the utf8 version of the string will take 'variant' more bytes than 3302 * the plain one. */ 3303 3304 if (variant) { 3305 char *p = const_str; 3306 STRLEN ulen = total_len + variant; 3307 UNOP_AUX_item *lens = aux + PERL_MULTICONCAT_IX_LENGTHS; 3308 UNOP_AUX_item *ulens = lens + (nargs + 1); 3309 char *up = (char*)PerlMemShared_malloc(ulen); 3310 SSize_t n; 3311 3312 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = up; 3313 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = ulen; 3314 3315 for (n = 0; n < (nargs + 1); n++) { 3316 SSize_t i; 3317 char * orig_up = up; 3318 for (i = (lens++)->ssize; i > 0; i--) { 3319 U8 c = *p++; 3320 append_utf8_from_native_byte(c, (U8**)&up); 3321 } 3322 (ulens++)->ssize = (i < 0) ? i : up - orig_up; 3323 } 3324 } 3325 3326 if (stringop) { 3327 /* if there was a top(ish)-level OP_STRINGIFY, we need to keep 3328 * that op's first child - an ex-PUSHMARK - because the op_next of 3329 * the previous op may point to it (i.e. it's the entry point for 3330 * the o optree) 3331 */ 3332 OP *pmop = 3333 (stringop == o) 3334 ? op_sibling_splice(o, lastkidop, 1, NULL) 3335 : op_sibling_splice(stringop, NULL, 1, NULL); 3336 assert(OP_TYPE_IS_OR_WAS_NN(pmop, OP_PUSHMARK)); 3337 op_sibling_splice(o, NULL, 0, pmop); 3338 if (!lastkidop) 3339 lastkidop = pmop; 3340 } 3341 3342 /* Optimise 3343 * target = A.B.C... 3344 * target .= A.B.C... 3345 */ 3346 3347 if (targetop) { 3348 assert(!targmyop); 3349 3350 if (o->op_type == OP_SASSIGN) { 3351 /* Move the target subtree from being the last of o's children 3352 * to being the last of o's preserved children. 3353 * Note the difference between 'target = ...' and 'target .= ...': 3354 * for the former, target is executed last; for the latter, 3355 * first. 3356 */ 3357 kid = OpSIBLING(lastkidop); 3358 op_sibling_splice(o, kid, 1, NULL); /* cut target op */ 3359 op_sibling_splice(o, lastkidop, 0, targetop); /* and paste */ 3360 lastkidop->op_next = kid->op_next; 3361 lastkidop = targetop; 3362 } 3363 else { 3364 /* Move the target subtree from being the first of o's 3365 * original children to being the first of *all* o's children. 3366 */ 3367 if (lastkidop) { 3368 op_sibling_splice(o, lastkidop, 1, NULL); /* cut target op */ 3369 op_sibling_splice(o, NULL, 0, targetop); /* and paste*/ 3370 } 3371 else { 3372 /* if the RHS of .= doesn't contain a concat (e.g. 3373 * $x .= "foo"), it gets missed by the "strip ops from the 3374 * tree and add to o" loop earlier */ 3375 assert(topop->op_type != OP_CONCAT); 3376 if (stringop) { 3377 /* in e.g. $x .= "$y", move the $y expression 3378 * from being a child of OP_STRINGIFY to being the 3379 * second child of the OP_CONCAT 3380 */ 3381 assert(cUNOPx(stringop)->op_first == topop); 3382 op_sibling_splice(stringop, NULL, 1, NULL); 3383 op_sibling_splice(o, cUNOPo->op_first, 0, topop); 3384 } 3385 assert(topop == OpSIBLING(cBINOPo->op_first)); 3386 if (toparg->p) 3387 op_null(topop); 3388 lastkidop = topop; 3389 } 3390 } 3391 3392 if (is_targable) { 3393 /* optimise 3394 * my $lex = A.B.C... 3395 * $lex = A.B.C... 3396 * $lex .= A.B.C... 3397 * The original padsv op is kept but nulled in case it's the 3398 * entry point for the optree (which it will be for 3399 * '$lex .= ... ' 3400 */ 3401 private_flags |= OPpTARGET_MY; 3402 private_flags |= (targetop->op_private & OPpLVAL_INTRO); 3403 o->op_targ = targetop->op_targ; 3404 targetop->op_targ = 0; 3405 op_null(targetop); 3406 } 3407 else 3408 flags |= OPf_STACKED; 3409 } 3410 else if (targmyop) { 3411 private_flags |= OPpTARGET_MY; 3412 if (o != targmyop) { 3413 o->op_targ = targmyop->op_targ; 3414 targmyop->op_targ = 0; 3415 } 3416 } 3417 3418 /* detach the emaciated husk of the sprintf/concat optree and free it */ 3419 for (;;) { 3420 kid = op_sibling_splice(o, lastkidop, 1, NULL); 3421 if (!kid) 3422 break; 3423 op_free(kid); 3424 } 3425 3426 /* and convert o into a multiconcat */ 3427 3428 o->op_flags = (flags|OPf_KIDS|stacked_last 3429 |(o->op_flags & (OPf_WANT|OPf_PARENS))); 3430 o->op_private = private_flags; 3431 o->op_type = OP_MULTICONCAT; 3432 o->op_ppaddr = PL_ppaddr[OP_MULTICONCAT]; 3433 cUNOP_AUXo->op_aux = aux; 3434 } 3435 3436 3437 /* do all the final processing on an optree (e.g. running the peephole 3438 * optimiser on it), then attach it to cv (if cv is non-null) 3439 */ 3440 3441 static void 3442 S_process_optree(pTHX_ CV *cv, OP *optree, OP* start) 3443 { 3444 OP **startp; 3445 3446 /* XXX for some reason, evals, require and main optrees are 3447 * never attached to their CV; instead they just hang off 3448 * PL_main_root + PL_main_start or PL_eval_root + PL_eval_start 3449 * and get manually freed when appropriate */ 3450 if (cv) 3451 startp = &CvSTART(cv); 3452 else 3453 startp = PL_in_eval? &PL_eval_start : &PL_main_start; 3454 3455 *startp = start; 3456 optree->op_private |= OPpREFCOUNTED; 3457 OpREFCNT_set(optree, 1); 3458 optimize_optree(optree); 3459 CALL_PEEP(*startp); 3460 finalize_optree(optree); 3461 S_prune_chain_head(startp); 3462 3463 if (cv) { 3464 /* now that optimizer has done its work, adjust pad values */ 3465 pad_tidy(optree->op_type == OP_LEAVEWRITE ? padtidy_FORMAT 3466 : CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB); 3467 } 3468 } 3469 3470 3471 /* 3472 =for apidoc optimize_optree 3473 3474 This function applies some optimisations to the optree in top-down order. 3475 It is called before the peephole optimizer, which processes ops in 3476 execution order. Note that finalize_optree() also does a top-down scan, 3477 but is called *after* the peephole optimizer. 3478 3479 =cut 3480 */ 3481 3482 void 3483 Perl_optimize_optree(pTHX_ OP* o) 3484 { 3485 PERL_ARGS_ASSERT_OPTIMIZE_OPTREE; 3486 3487 ENTER; 3488 SAVEVPTR(PL_curcop); 3489 3490 optimize_op(o); 3491 3492 LEAVE; 3493 } 3494 3495 3496 /* helper for optimize_optree() which optimises on op then recurses 3497 * to optimise any children. 3498 */ 3499 3500 STATIC void 3501 S_optimize_op(pTHX_ OP* o) 3502 { 3503 dDEFER_OP; 3504 3505 PERL_ARGS_ASSERT_OPTIMIZE_OP; 3506 do { 3507 assert(o->op_type != OP_FREED); 3508 3509 switch (o->op_type) { 3510 case OP_NEXTSTATE: 3511 case OP_DBSTATE: 3512 PL_curcop = ((COP*)o); /* for warnings */ 3513 break; 3514 3515 3516 case OP_CONCAT: 3517 case OP_SASSIGN: 3518 case OP_STRINGIFY: 3519 case OP_SPRINTF: 3520 S_maybe_multiconcat(aTHX_ o); 3521 break; 3522 3523 case OP_SUBST: 3524 if (cPMOPo->op_pmreplrootu.op_pmreplroot) 3525 DEFER_OP(cPMOPo->op_pmreplrootu.op_pmreplroot); 3526 break; 3527 3528 default: 3529 break; 3530 } 3531 3532 if (o->op_flags & OPf_KIDS) { 3533 OP *kid; 3534 IV child_count = 0; 3535 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) { 3536 DEFER_OP(kid); 3537 ++child_count; 3538 } 3539 DEFER_REVERSE(child_count); 3540 } 3541 } while ( ( o = POP_DEFERRED_OP() ) ); 3542 3543 DEFER_OP_CLEANUP; 3544 } 3545 3546 3547 /* 3548 =for apidoc finalize_optree 3549 3550 This function finalizes the optree. Should be called directly after 3551 the complete optree is built. It does some additional 3552 checking which can't be done in the normal C<ck_>xxx functions and makes 3553 the tree thread-safe. 3554 3555 =cut 3556 */ 3557 void 3558 Perl_finalize_optree(pTHX_ OP* o) 3559 { 3560 PERL_ARGS_ASSERT_FINALIZE_OPTREE; 3561 3562 ENTER; 3563 SAVEVPTR(PL_curcop); 3564 3565 finalize_op(o); 3566 3567 LEAVE; 3568 } 3569 3570 #ifdef USE_ITHREADS 3571 /* Relocate sv to the pad for thread safety. 3572 * Despite being a "constant", the SV is written to, 3573 * for reference counts, sv_upgrade() etc. */ 3574 PERL_STATIC_INLINE void 3575 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp) 3576 { 3577 PADOFFSET ix; 3578 PERL_ARGS_ASSERT_OP_RELOCATE_SV; 3579 if (!*svp) return; 3580 ix = pad_alloc(OP_CONST, SVf_READONLY); 3581 SvREFCNT_dec(PAD_SVl(ix)); 3582 PAD_SETSV(ix, *svp); 3583 /* XXX I don't know how this isn't readonly already. */ 3584 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix)); 3585 *svp = NULL; 3586 *targp = ix; 3587 } 3588 #endif 3589 3590 /* 3591 =for apidoc s|OP*|traverse_op_tree|OP* top|OP* o 3592 3593 Return the next op in a depth-first traversal of the op tree, 3594 returning NULL when the traversal is complete. 3595 3596 The initial call must supply the root of the tree as both top and o. 3597 3598 For now it's static, but it may be exposed to the API in the future. 3599 3600 =cut 3601 */ 3602 3603 STATIC OP* 3604 S_traverse_op_tree(pTHX_ OP *top, OP *o) { 3605 OP *sib; 3606 3607 PERL_ARGS_ASSERT_TRAVERSE_OP_TREE; 3608 3609 if ((o->op_flags & OPf_KIDS) && cUNOPo->op_first) { 3610 return cUNOPo->op_first; 3611 } 3612 else if ((sib = OpSIBLING(o))) { 3613 return sib; 3614 } 3615 else { 3616 OP *parent = o->op_sibparent; 3617 assert(!(o->op_moresib)); 3618 while (parent && parent != top) { 3619 OP *sib = OpSIBLING(parent); 3620 if (sib) 3621 return sib; 3622 parent = parent->op_sibparent; 3623 } 3624 3625 return NULL; 3626 } 3627 } 3628 3629 STATIC void 3630 S_finalize_op(pTHX_ OP* o) 3631 { 3632 OP * const top = o; 3633 PERL_ARGS_ASSERT_FINALIZE_OP; 3634 3635 do { 3636 assert(o->op_type != OP_FREED); 3637 3638 switch (o->op_type) { 3639 case OP_NEXTSTATE: 3640 case OP_DBSTATE: 3641 PL_curcop = ((COP*)o); /* for warnings */ 3642 break; 3643 case OP_EXEC: 3644 if (OpHAS_SIBLING(o)) { 3645 OP *sib = OpSIBLING(o); 3646 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE) 3647 && ckWARN(WARN_EXEC) 3648 && OpHAS_SIBLING(sib)) 3649 { 3650 const OPCODE type = OpSIBLING(sib)->op_type; 3651 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) { 3652 const line_t oldline = CopLINE(PL_curcop); 3653 CopLINE_set(PL_curcop, CopLINE((COP*)sib)); 3654 Perl_warner(aTHX_ packWARN(WARN_EXEC), 3655 "Statement unlikely to be reached"); 3656 Perl_warner(aTHX_ packWARN(WARN_EXEC), 3657 "\t(Maybe you meant system() when you said exec()?)\n"); 3658 CopLINE_set(PL_curcop, oldline); 3659 } 3660 } 3661 } 3662 break; 3663 3664 case OP_GV: 3665 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) { 3666 GV * const gv = cGVOPo_gv; 3667 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) { 3668 /* XXX could check prototype here instead of just carping */ 3669 SV * const sv = sv_newmortal(); 3670 gv_efullname3(sv, gv, NULL); 3671 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), 3672 "%" SVf "() called too early to check prototype", 3673 SVfARG(sv)); 3674 } 3675 } 3676 break; 3677 3678 case OP_CONST: 3679 if (cSVOPo->op_private & OPpCONST_STRICT) 3680 no_bareword_allowed(o); 3681 #ifdef USE_ITHREADS 3682 /* FALLTHROUGH */ 3683 case OP_HINTSEVAL: 3684 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ); 3685 #endif 3686 break; 3687 3688 #ifdef USE_ITHREADS 3689 /* Relocate all the METHOP's SVs to the pad for thread safety. */ 3690 case OP_METHOD_NAMED: 3691 case OP_METHOD_SUPER: 3692 case OP_METHOD_REDIR: 3693 case OP_METHOD_REDIR_SUPER: 3694 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ); 3695 break; 3696 #endif 3697 3698 case OP_HELEM: { 3699 UNOP *rop; 3700 SVOP *key_op; 3701 OP *kid; 3702 3703 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST) 3704 break; 3705 3706 rop = (UNOP*)((BINOP*)o)->op_first; 3707 3708 goto check_keys; 3709 3710 case OP_HSLICE: 3711 S_scalar_slice_warning(aTHX_ o); 3712 /* FALLTHROUGH */ 3713 3714 case OP_KVHSLICE: 3715 kid = OpSIBLING(cLISTOPo->op_first); 3716 if (/* I bet there's always a pushmark... */ 3717 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST) 3718 && OP_TYPE_ISNT_NN(kid, OP_CONST)) 3719 { 3720 break; 3721 } 3722 3723 key_op = (SVOP*)(kid->op_type == OP_CONST 3724 ? kid 3725 : OpSIBLING(kLISTOP->op_first)); 3726 3727 rop = (UNOP*)((LISTOP*)o)->op_last; 3728 3729 check_keys: 3730 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV) 3731 rop = NULL; 3732 S_check_hash_fields_and_hekify(aTHX_ rop, key_op, 1); 3733 break; 3734 } 3735 case OP_NULL: 3736 if (o->op_targ != OP_HSLICE && o->op_targ != OP_ASLICE) 3737 break; 3738 /* FALLTHROUGH */ 3739 case OP_ASLICE: 3740 S_scalar_slice_warning(aTHX_ o); 3741 break; 3742 3743 case OP_SUBST: { 3744 if (cPMOPo->op_pmreplrootu.op_pmreplroot) 3745 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot); 3746 break; 3747 } 3748 default: 3749 break; 3750 } 3751 3752 #ifdef DEBUGGING 3753 if (o->op_flags & OPf_KIDS) { 3754 OP *kid; 3755 3756 /* check that op_last points to the last sibling, and that 3757 * the last op_sibling/op_sibparent field points back to the 3758 * parent, and that the only ops with KIDS are those which are 3759 * entitled to them */ 3760 U32 type = o->op_type; 3761 U32 family; 3762 bool has_last; 3763 3764 if (type == OP_NULL) { 3765 type = o->op_targ; 3766 /* ck_glob creates a null UNOP with ex-type GLOB 3767 * (which is a list op. So pretend it wasn't a listop */ 3768 if (type == OP_GLOB) 3769 type = OP_NULL; 3770 } 3771 family = PL_opargs[type] & OA_CLASS_MASK; 3772 3773 has_last = ( family == OA_BINOP 3774 || family == OA_LISTOP 3775 || family == OA_PMOP 3776 || family == OA_LOOP 3777 ); 3778 assert( has_last /* has op_first and op_last, or ... 3779 ... has (or may have) op_first: */ 3780 || family == OA_UNOP 3781 || family == OA_UNOP_AUX 3782 || family == OA_LOGOP 3783 || family == OA_BASEOP_OR_UNOP 3784 || family == OA_FILESTATOP 3785 || family == OA_LOOPEXOP 3786 || family == OA_METHOP 3787 || type == OP_CUSTOM 3788 || type == OP_NULL /* new_logop does this */ 3789 ); 3790 3791 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) { 3792 if (!OpHAS_SIBLING(kid)) { 3793 if (has_last) 3794 assert(kid == cLISTOPo->op_last); 3795 assert(kid->op_sibparent == o); 3796 } 3797 } 3798 } 3799 #endif 3800 } while (( o = traverse_op_tree(top, o)) != NULL); 3801 } 3802 3803 /* 3804 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type 3805 3806 Propagate lvalue ("modifiable") context to an op and its children. 3807 C<type> represents the context type, roughly based on the type of op that 3808 would do the modifying, although C<local()> is represented by C<OP_NULL>, 3809 because it has no op type of its own (it is signalled by a flag on 3810 the lvalue op). 3811 3812 This function detects things that can't be modified, such as C<$x+1>, and 3813 generates errors for them. For example, C<$x+1 = 2> would cause it to be 3814 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>. 3815 3816 It also flags things that need to behave specially in an lvalue context, 3817 such as C<$$x = 5> which might have to vivify a reference in C<$x>. 3818 3819 =cut 3820 */ 3821 3822 static void 3823 S_mark_padname_lvalue(pTHX_ PADNAME *pn) 3824 { 3825 CV *cv = PL_compcv; 3826 PadnameLVALUE_on(pn); 3827 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) { 3828 cv = CvOUTSIDE(cv); 3829 /* RT #127786: cv can be NULL due to an eval within the DB package 3830 * called from an anon sub - anon subs don't have CvOUTSIDE() set 3831 * unless they contain an eval, but calling eval within DB 3832 * pretends the eval was done in the caller's scope. 3833 */ 3834 if (!cv) 3835 break; 3836 assert(CvPADLIST(cv)); 3837 pn = 3838 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)]; 3839 assert(PadnameLEN(pn)); 3840 PadnameLVALUE_on(pn); 3841 } 3842 } 3843 3844 static bool 3845 S_vivifies(const OPCODE type) 3846 { 3847 switch(type) { 3848 case OP_RV2AV: case OP_ASLICE: 3849 case OP_RV2HV: case OP_KVASLICE: 3850 case OP_RV2SV: case OP_HSLICE: 3851 case OP_AELEMFAST: case OP_KVHSLICE: 3852 case OP_HELEM: 3853 case OP_AELEM: 3854 return 1; 3855 } 3856 return 0; 3857 } 3858 3859 static void 3860 S_lvref(pTHX_ OP *o, I32 type) 3861 { 3862 dVAR; 3863 OP *kid; 3864 switch (o->op_type) { 3865 case OP_COND_EXPR: 3866 for (kid = OpSIBLING(cUNOPo->op_first); kid; 3867 kid = OpSIBLING(kid)) 3868 S_lvref(aTHX_ kid, type); 3869 /* FALLTHROUGH */ 3870 case OP_PUSHMARK: 3871 return; 3872 case OP_RV2AV: 3873 if (cUNOPo->op_first->op_type != OP_GV) goto badref; 3874 o->op_flags |= OPf_STACKED; 3875 if (o->op_flags & OPf_PARENS) { 3876 if (o->op_private & OPpLVAL_INTRO) { 3877 yyerror(Perl_form(aTHX_ "Can't modify reference to " 3878 "localized parenthesized array in list assignment")); 3879 return; 3880 } 3881 slurpy: 3882 OpTYPE_set(o, OP_LVAVREF); 3883 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE; 3884 o->op_flags |= OPf_MOD|OPf_REF; 3885 return; 3886 } 3887 o->op_private |= OPpLVREF_AV; 3888 goto checkgv; 3889 case OP_RV2CV: 3890 kid = cUNOPo->op_first; 3891 if (kid->op_type == OP_NULL) 3892 kid = cUNOPx(OpSIBLING(kUNOP->op_first)) 3893 ->op_first; 3894 o->op_private = OPpLVREF_CV; 3895 if (kid->op_type == OP_GV) 3896 o->op_flags |= OPf_STACKED; 3897 else if (kid->op_type == OP_PADCV) { 3898 o->op_targ = kid->op_targ; 3899 kid->op_targ = 0; 3900 op_free(cUNOPo->op_first); 3901 cUNOPo->op_first = NULL; 3902 o->op_flags &=~ OPf_KIDS; 3903 } 3904 else goto badref; 3905 break; 3906 case OP_RV2HV: 3907 if (o->op_flags & OPf_PARENS) { 3908 parenhash: 3909 yyerror(Perl_form(aTHX_ "Can't modify reference to " 3910 "parenthesized hash in list assignment")); 3911 return; 3912 } 3913 o->op_private |= OPpLVREF_HV; 3914 /* FALLTHROUGH */ 3915 case OP_RV2SV: 3916 checkgv: 3917 if (cUNOPo->op_first->op_type != OP_GV) goto badref; 3918 o->op_flags |= OPf_STACKED; 3919 break; 3920 case OP_PADHV: 3921 if (o->op_flags & OPf_PARENS) goto parenhash; 3922 o->op_private |= OPpLVREF_HV; 3923 /* FALLTHROUGH */ 3924 case OP_PADSV: 3925 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX); 3926 break; 3927 case OP_PADAV: 3928 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX); 3929 if (o->op_flags & OPf_PARENS) goto slurpy; 3930 o->op_private |= OPpLVREF_AV; 3931 break; 3932 case OP_AELEM: 3933 case OP_HELEM: 3934 o->op_private |= OPpLVREF_ELEM; 3935 o->op_flags |= OPf_STACKED; 3936 break; 3937 case OP_ASLICE: 3938 case OP_HSLICE: 3939 OpTYPE_set(o, OP_LVREFSLICE); 3940 o->op_private &= OPpLVAL_INTRO; 3941 return; 3942 case OP_NULL: 3943 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */ 3944 goto badref; 3945 else if (!(o->op_flags & OPf_KIDS)) 3946 return; 3947 if (o->op_targ != OP_LIST) { 3948 S_lvref(aTHX_ cBINOPo->op_first, type); 3949 return; 3950 } 3951 /* FALLTHROUGH */ 3952 case OP_LIST: 3953 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) { 3954 assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID); 3955 S_lvref(aTHX_ kid, type); 3956 } 3957 return; 3958 case OP_STUB: 3959 if (o->op_flags & OPf_PARENS) 3960 return; 3961 /* FALLTHROUGH */ 3962 default: 3963 badref: 3964 /* diag_listed_as: Can't modify reference to %s in %s assignment */ 3965 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s", 3966 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL 3967 ? "do block" 3968 : OP_DESC(o), 3969 PL_op_desc[type])); 3970 return; 3971 } 3972 OpTYPE_set(o, OP_LVREF); 3973 o->op_private &= 3974 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE; 3975 if (type == OP_ENTERLOOP) 3976 o->op_private |= OPpLVREF_ITER; 3977 } 3978 3979 PERL_STATIC_INLINE bool 3980 S_potential_mod_type(I32 type) 3981 { 3982 /* Types that only potentially result in modification. */ 3983 return type == OP_GREPSTART || type == OP_ENTERSUB 3984 || type == OP_REFGEN || type == OP_LEAVESUBLV; 3985 } 3986 3987 OP * 3988 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags) 3989 { 3990 dVAR; 3991 OP *kid; 3992 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */ 3993 int localize = -1; 3994 3995 if (!o || (PL_parser && PL_parser->error_count)) 3996 return o; 3997 3998 if ((o->op_private & OPpTARGET_MY) 3999 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */ 4000 { 4001 return o; 4002 } 4003 4004 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID ); 4005 4006 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB; 4007 4008 switch (o->op_type) { 4009 case OP_UNDEF: 4010 PL_modcount++; 4011 return o; 4012 case OP_STUB: 4013 if ((o->op_flags & OPf_PARENS)) 4014 break; 4015 goto nomod; 4016 case OP_ENTERSUB: 4017 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) && 4018 !(o->op_flags & OPf_STACKED)) { 4019 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */ 4020 assert(cUNOPo->op_first->op_type == OP_NULL); 4021 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */ 4022 break; 4023 } 4024 else { /* lvalue subroutine call */ 4025 o->op_private |= OPpLVAL_INTRO; 4026 PL_modcount = RETURN_UNLIMITED_NUMBER; 4027 if (S_potential_mod_type(type)) { 4028 o->op_private |= OPpENTERSUB_INARGS; 4029 break; 4030 } 4031 else { /* Compile-time error message: */ 4032 OP *kid = cUNOPo->op_first; 4033 CV *cv; 4034 GV *gv; 4035 SV *namesv; 4036 4037 if (kid->op_type != OP_PUSHMARK) { 4038 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST) 4039 Perl_croak(aTHX_ 4040 "panic: unexpected lvalue entersub " 4041 "args: type/targ %ld:%" UVuf, 4042 (long)kid->op_type, (UV)kid->op_targ); 4043 kid = kLISTOP->op_first; 4044 } 4045 while (OpHAS_SIBLING(kid)) 4046 kid = OpSIBLING(kid); 4047 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) { 4048 break; /* Postpone until runtime */ 4049 } 4050 4051 kid = kUNOP->op_first; 4052 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV) 4053 kid = kUNOP->op_first; 4054 if (kid->op_type == OP_NULL) 4055 Perl_croak(aTHX_ 4056 "Unexpected constant lvalue entersub " 4057 "entry via type/targ %ld:%" UVuf, 4058 (long)kid->op_type, (UV)kid->op_targ); 4059 if (kid->op_type != OP_GV) { 4060 break; 4061 } 4062 4063 gv = kGVOP_gv; 4064 cv = isGV(gv) 4065 ? GvCV(gv) 4066 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV 4067 ? MUTABLE_CV(SvRV(gv)) 4068 : NULL; 4069 if (!cv) 4070 break; 4071 if (CvLVALUE(cv)) 4072 break; 4073 if (flags & OP_LVALUE_NO_CROAK) 4074 return NULL; 4075 4076 namesv = cv_name(cv, NULL, 0); 4077 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue " 4078 "subroutine call of &%" SVf " in %s", 4079 SVfARG(namesv), PL_op_desc[type]), 4080 SvUTF8(namesv)); 4081 return o; 4082 } 4083 } 4084 /* FALLTHROUGH */ 4085 default: 4086 nomod: 4087 if (flags & OP_LVALUE_NO_CROAK) return NULL; 4088 /* grep, foreach, subcalls, refgen */ 4089 if (S_potential_mod_type(type)) 4090 break; 4091 yyerror(Perl_form(aTHX_ "Can't modify %s in %s", 4092 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL) 4093 ? "do block" 4094 : OP_DESC(o)), 4095 type ? PL_op_desc[type] : "local")); 4096 return o; 4097 4098 case OP_PREINC: 4099 case OP_PREDEC: 4100 case OP_POW: 4101 case OP_MULTIPLY: 4102 case OP_DIVIDE: 4103 case OP_MODULO: 4104 case OP_ADD: 4105 case OP_SUBTRACT: 4106 case OP_CONCAT: 4107 case OP_LEFT_SHIFT: 4108 case OP_RIGHT_SHIFT: 4109 case OP_BIT_AND: 4110 case OP_BIT_XOR: 4111 case OP_BIT_OR: 4112 case OP_I_MULTIPLY: 4113 case OP_I_DIVIDE: 4114 case OP_I_MODULO: 4115 case OP_I_ADD: 4116 case OP_I_SUBTRACT: 4117 if (!(o->op_flags & OPf_STACKED)) 4118 goto nomod; 4119 PL_modcount++; 4120 break; 4121 4122 case OP_REPEAT: 4123 if (o->op_flags & OPf_STACKED) { 4124 PL_modcount++; 4125 break; 4126 } 4127 if (!(o->op_private & OPpREPEAT_DOLIST)) 4128 goto nomod; 4129 else { 4130 const I32 mods = PL_modcount; 4131 modkids(cBINOPo->op_first, type); 4132 if (type != OP_AASSIGN) 4133 goto nomod; 4134 kid = cBINOPo->op_last; 4135 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) { 4136 const IV iv = SvIV(kSVOP_sv); 4137 if (PL_modcount != RETURN_UNLIMITED_NUMBER) 4138 PL_modcount = 4139 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv); 4140 } 4141 else 4142 PL_modcount = RETURN_UNLIMITED_NUMBER; 4143 } 4144 break; 4145 4146 case OP_COND_EXPR: 4147 localize = 1; 4148 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid)) 4149 op_lvalue(kid, type); 4150 break; 4151 4152 case OP_RV2AV: 4153 case OP_RV2HV: 4154 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) { 4155 PL_modcount = RETURN_UNLIMITED_NUMBER; 4156 /* Treat \(@foo) like ordinary list, but still mark it as modi- 4157 fiable since some contexts need to know. */ 4158 o->op_flags |= OPf_MOD; 4159 return o; 4160 } 4161 /* FALLTHROUGH */ 4162 case OP_RV2GV: 4163 if (scalar_mod_type(o, type)) 4164 goto nomod; 4165 ref(cUNOPo->op_first, o->op_type); 4166 /* FALLTHROUGH */ 4167 case OP_ASLICE: 4168 case OP_HSLICE: 4169 localize = 1; 4170 /* FALLTHROUGH */ 4171 case OP_AASSIGN: 4172 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */ 4173 if (type == OP_LEAVESUBLV && ( 4174 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV) 4175 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR 4176 )) 4177 o->op_private |= OPpMAYBE_LVSUB; 4178 /* FALLTHROUGH */ 4179 case OP_NEXTSTATE: 4180 case OP_DBSTATE: 4181 PL_modcount = RETURN_UNLIMITED_NUMBER; 4182 break; 4183 case OP_KVHSLICE: 4184 case OP_KVASLICE: 4185 case OP_AKEYS: 4186 if (type == OP_LEAVESUBLV) 4187 o->op_private |= OPpMAYBE_LVSUB; 4188 goto nomod; 4189 case OP_AVHVSWITCH: 4190 if (type == OP_LEAVESUBLV 4191 && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS) 4192 o->op_private |= OPpMAYBE_LVSUB; 4193 goto nomod; 4194 case OP_AV2ARYLEN: 4195 PL_hints |= HINT_BLOCK_SCOPE; 4196 if (type == OP_LEAVESUBLV) 4197 o->op_private |= OPpMAYBE_LVSUB; 4198 PL_modcount++; 4199 break; 4200 case OP_RV2SV: 4201 ref(cUNOPo->op_first, o->op_type); 4202 localize = 1; 4203 /* FALLTHROUGH */ 4204 case OP_GV: 4205 PL_hints |= HINT_BLOCK_SCOPE; 4206 /* FALLTHROUGH */ 4207 case OP_SASSIGN: 4208 case OP_ANDASSIGN: 4209 case OP_ORASSIGN: 4210 case OP_DORASSIGN: 4211 PL_modcount++; 4212 break; 4213 4214 case OP_AELEMFAST: 4215 case OP_AELEMFAST_LEX: 4216 localize = -1; 4217 PL_modcount++; 4218 break; 4219 4220 case OP_PADAV: 4221 case OP_PADHV: 4222 PL_modcount = RETURN_UNLIMITED_NUMBER; 4223 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) 4224 { 4225 /* Treat \(@foo) like ordinary list, but still mark it as modi- 4226 fiable since some contexts need to know. */ 4227 o->op_flags |= OPf_MOD; 4228 return o; 4229 } 4230 if (scalar_mod_type(o, type)) 4231 goto nomod; 4232 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR 4233 && type == OP_LEAVESUBLV) 4234 o->op_private |= OPpMAYBE_LVSUB; 4235 /* FALLTHROUGH */ 4236 case OP_PADSV: 4237 PL_modcount++; 4238 if (!type) /* local() */ 4239 Perl_croak(aTHX_ "Can't localize lexical variable %" PNf, 4240 PNfARG(PAD_COMPNAME(o->op_targ))); 4241 if (!(o->op_private & OPpLVAL_INTRO) 4242 || ( type != OP_SASSIGN && type != OP_AASSIGN 4243 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) )) 4244 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ)); 4245 break; 4246 4247 case OP_PUSHMARK: 4248 localize = 0; 4249 break; 4250 4251 case OP_KEYS: 4252 if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type)) 4253 goto nomod; 4254 goto lvalue_func; 4255 case OP_SUBSTR: 4256 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */ 4257 goto nomod; 4258 /* FALLTHROUGH */ 4259 case OP_POS: 4260 case OP_VEC: 4261 lvalue_func: 4262 if (type == OP_LEAVESUBLV) 4263 o->op_private |= OPpMAYBE_LVSUB; 4264 if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) { 4265 /* substr and vec */ 4266 /* If this op is in merely potential (non-fatal) modifiable 4267 context, then apply OP_ENTERSUB context to 4268 the kid op (to avoid croaking). Other- 4269 wise pass this op’s own type so the correct op is mentioned 4270 in error messages. */ 4271 op_lvalue(OpSIBLING(cBINOPo->op_first), 4272 S_potential_mod_type(type) 4273 ? (I32)OP_ENTERSUB 4274 : o->op_type); 4275 } 4276 break; 4277 4278 case OP_AELEM: 4279 case OP_HELEM: 4280 ref(cBINOPo->op_first, o->op_type); 4281 if (type == OP_ENTERSUB && 4282 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF))) 4283 o->op_private |= OPpLVAL_DEFER; 4284 if (type == OP_LEAVESUBLV) 4285 o->op_private |= OPpMAYBE_LVSUB; 4286 localize = 1; 4287 PL_modcount++; 4288 break; 4289 4290 case OP_LEAVE: 4291 case OP_LEAVELOOP: 4292 o->op_private |= OPpLVALUE; 4293 /* FALLTHROUGH */ 4294 case OP_SCOPE: 4295 case OP_ENTER: 4296 case OP_LINESEQ: 4297 localize = 0; 4298 if (o->op_flags & OPf_KIDS) 4299 op_lvalue(cLISTOPo->op_last, type); 4300 break; 4301 4302 case OP_NULL: 4303 localize = 0; 4304 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */ 4305 goto nomod; 4306 else if (!(o->op_flags & OPf_KIDS)) 4307 break; 4308 4309 if (o->op_targ != OP_LIST) { 4310 OP *sib = OpSIBLING(cLISTOPo->op_first); 4311 /* OP_TRANS and OP_TRANSR with argument have a weird optree 4312 * that looks like 4313 * 4314 * null 4315 * arg 4316 * trans 4317 * 4318 * compared with things like OP_MATCH which have the argument 4319 * as a child: 4320 * 4321 * match 4322 * arg 4323 * 4324 * so handle specially to correctly get "Can't modify" croaks etc 4325 */ 4326 4327 if (sib && (sib->op_type == OP_TRANS || sib->op_type == OP_TRANSR)) 4328 { 4329 /* this should trigger a "Can't modify transliteration" err */ 4330 op_lvalue(sib, type); 4331 } 4332 op_lvalue(cBINOPo->op_first, type); 4333 break; 4334 } 4335 /* FALLTHROUGH */ 4336 case OP_LIST: 4337 localize = 0; 4338 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) 4339 /* elements might be in void context because the list is 4340 in scalar context or because they are attribute sub calls */ 4341 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID ) 4342 op_lvalue(kid, type); 4343 break; 4344 4345 case OP_COREARGS: 4346 return o; 4347 4348 case OP_AND: 4349 case OP_OR: 4350 if (type == OP_LEAVESUBLV 4351 || !S_vivifies(cLOGOPo->op_first->op_type)) 4352 op_lvalue(cLOGOPo->op_first, type); 4353 if (type == OP_LEAVESUBLV 4354 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type)) 4355 op_lvalue(OpSIBLING(cLOGOPo->op_first), type); 4356 goto nomod; 4357 4358 case OP_SREFGEN: 4359 if (type == OP_NULL) { /* local */ 4360 local_refgen: 4361 if (!FEATURE_MYREF_IS_ENABLED) 4362 Perl_croak(aTHX_ "The experimental declared_refs " 4363 "feature is not enabled"); 4364 Perl_ck_warner_d(aTHX_ 4365 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS), 4366 "Declaring references is experimental"); 4367 op_lvalue(cUNOPo->op_first, OP_NULL); 4368 return o; 4369 } 4370 if (type != OP_AASSIGN && type != OP_SASSIGN 4371 && type != OP_ENTERLOOP) 4372 goto nomod; 4373 /* Don’t bother applying lvalue context to the ex-list. */ 4374 kid = cUNOPx(cUNOPo->op_first)->op_first; 4375 assert (!OpHAS_SIBLING(kid)); 4376 goto kid_2lvref; 4377 case OP_REFGEN: 4378 if (type == OP_NULL) /* local */ 4379 goto local_refgen; 4380 if (type != OP_AASSIGN) goto nomod; 4381 kid = cUNOPo->op_first; 4382 kid_2lvref: 4383 { 4384 const U8 ec = PL_parser ? PL_parser->error_count : 0; 4385 S_lvref(aTHX_ kid, type); 4386 if (!PL_parser || PL_parser->error_count == ec) { 4387 if (!FEATURE_REFALIASING_IS_ENABLED) 4388 Perl_croak(aTHX_ 4389 "Experimental aliasing via reference not enabled"); 4390 Perl_ck_warner_d(aTHX_ 4391 packWARN(WARN_EXPERIMENTAL__REFALIASING), 4392 "Aliasing via reference is experimental"); 4393 } 4394 } 4395 if (o->op_type == OP_REFGEN) 4396 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */ 4397 op_null(o); 4398 return o; 4399 4400 case OP_SPLIT: 4401 if ((o->op_private & OPpSPLIT_ASSIGN)) { 4402 /* This is actually @array = split. */ 4403 PL_modcount = RETURN_UNLIMITED_NUMBER; 4404 break; 4405 } 4406 goto nomod; 4407 4408 case OP_SCALAR: 4409 op_lvalue(cUNOPo->op_first, OP_ENTERSUB); 4410 goto nomod; 4411 } 4412 4413 /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that 4414 their argument is a filehandle; thus \stat(".") should not set 4415 it. AMS 20011102 */ 4416 if (type == OP_REFGEN && 4417 PL_check[o->op_type] == Perl_ck_ftst) 4418 return o; 4419 4420 if (type != OP_LEAVESUBLV) 4421 o->op_flags |= OPf_MOD; 4422 4423 if (type == OP_AASSIGN || type == OP_SASSIGN) 4424 o->op_flags |= OPf_SPECIAL 4425 |(o->op_type == OP_ENTERSUB ? 0 : OPf_REF); 4426 else if (!type) { /* local() */ 4427 switch (localize) { 4428 case 1: 4429 o->op_private |= OPpLVAL_INTRO; 4430 o->op_flags &= ~OPf_SPECIAL; 4431 PL_hints |= HINT_BLOCK_SCOPE; 4432 break; 4433 case 0: 4434 break; 4435 case -1: 4436 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), 4437 "Useless localization of %s", OP_DESC(o)); 4438 } 4439 } 4440 else if (type != OP_GREPSTART && type != OP_ENTERSUB 4441 && type != OP_LEAVESUBLV && o->op_type != OP_ENTERSUB) 4442 o->op_flags |= OPf_REF; 4443 return o; 4444 } 4445 4446 STATIC bool 4447 S_scalar_mod_type(const OP *o, I32 type) 4448 { 4449 switch (type) { 4450 case OP_POS: 4451 case OP_SASSIGN: 4452 if (o && o->op_type == OP_RV2GV) 4453 return FALSE; 4454 /* FALLTHROUGH */ 4455 case OP_PREINC: 4456 case OP_PREDEC: 4457 case OP_POSTINC: 4458 case OP_POSTDEC: 4459 case OP_I_PREINC: 4460 case OP_I_PREDEC: 4461 case OP_I_POSTINC: 4462 case OP_I_POSTDEC: 4463 case OP_POW: 4464 case OP_MULTIPLY: 4465 case OP_DIVIDE: 4466 case OP_MODULO: 4467 case OP_REPEAT: 4468 case OP_ADD: 4469 case OP_SUBTRACT: 4470 case OP_I_MULTIPLY: 4471 case OP_I_DIVIDE: 4472 case OP_I_MODULO: 4473 case OP_I_ADD: 4474 case OP_I_SUBTRACT: 4475 case OP_LEFT_SHIFT: 4476 case OP_RIGHT_SHIFT: 4477 case OP_BIT_AND: 4478 case OP_BIT_XOR: 4479 case OP_BIT_OR: 4480 case OP_NBIT_AND: 4481 case OP_NBIT_XOR: 4482 case OP_NBIT_OR: 4483 case OP_SBIT_AND: 4484 case OP_SBIT_XOR: 4485 case OP_SBIT_OR: 4486 case OP_CONCAT: 4487 case OP_SUBST: 4488 case OP_TRANS: 4489 case OP_TRANSR: 4490 case OP_READ: 4491 case OP_SYSREAD: 4492 case OP_RECV: 4493 case OP_ANDASSIGN: 4494 case OP_ORASSIGN: 4495 case OP_DORASSIGN: 4496 case OP_VEC: 4497 case OP_SUBSTR: 4498 return TRUE; 4499 default: 4500 return FALSE; 4501 } 4502 } 4503 4504 STATIC bool 4505 S_is_handle_constructor(const OP *o, I32 numargs) 4506 { 4507 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR; 4508 4509 switch (o->op_type) { 4510 case OP_PIPE_OP: 4511 case OP_SOCKPAIR: 4512 if (numargs == 2) 4513 return TRUE; 4514 /* FALLTHROUGH */ 4515 case OP_SYSOPEN: 4516 case OP_OPEN: 4517 case OP_SELECT: /* XXX c.f. SelectSaver.pm */ 4518 case OP_SOCKET: 4519 case OP_OPEN_DIR: 4520 case OP_ACCEPT: 4521 if (numargs == 1) 4522 return TRUE; 4523 /* FALLTHROUGH */ 4524 default: 4525 return FALSE; 4526 } 4527 } 4528 4529 static OP * 4530 S_refkids(pTHX_ OP *o, I32 type) 4531 { 4532 if (o && o->op_flags & OPf_KIDS) { 4533 OP *kid; 4534 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) 4535 ref(kid, type); 4536 } 4537 return o; 4538 } 4539 4540 OP * 4541 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref) 4542 { 4543 dVAR; 4544 OP *kid; 4545 4546 PERL_ARGS_ASSERT_DOREF; 4547 4548 if (PL_parser && PL_parser->error_count) 4549 return o; 4550 4551 switch (o->op_type) { 4552 case OP_ENTERSUB: 4553 if ((type == OP_EXISTS || type == OP_DEFINED) && 4554 !(o->op_flags & OPf_STACKED)) { 4555 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */ 4556 assert(cUNOPo->op_first->op_type == OP_NULL); 4557 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */ 4558 o->op_flags |= OPf_SPECIAL; 4559 } 4560 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){ 4561 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV 4562 : type == OP_RV2HV ? OPpDEREF_HV 4563 : OPpDEREF_SV); 4564 o->op_flags |= OPf_MOD; 4565 } 4566 4567 break; 4568 4569 case OP_COND_EXPR: 4570 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid)) 4571 doref(kid, type, set_op_ref); 4572 break; 4573 case OP_RV2SV: 4574 if (type == OP_DEFINED) 4575 o->op_flags |= OPf_SPECIAL; /* don't create GV */ 4576 doref(cUNOPo->op_first, o->op_type, set_op_ref); 4577 /* FALLTHROUGH */ 4578 case OP_PADSV: 4579 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) { 4580 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV 4581 : type == OP_RV2HV ? OPpDEREF_HV 4582 : OPpDEREF_SV); 4583 o->op_flags |= OPf_MOD; 4584 } 4585 break; 4586 4587 case OP_RV2AV: 4588 case OP_RV2HV: 4589 if (set_op_ref) 4590 o->op_flags |= OPf_REF; 4591 /* FALLTHROUGH */ 4592 case OP_RV2GV: 4593 if (type == OP_DEFINED) 4594 o->op_flags |= OPf_SPECIAL; /* don't create GV */ 4595 doref(cUNOPo->op_first, o->op_type, set_op_ref); 4596 break; 4597 4598 case OP_PADAV: 4599 case OP_PADHV: 4600 if (set_op_ref) 4601 o->op_flags |= OPf_REF; 4602 break; 4603 4604 case OP_SCALAR: 4605 case OP_NULL: 4606 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED) 4607 break; 4608 doref(cBINOPo->op_first, type, set_op_ref); 4609 break; 4610 case OP_AELEM: 4611 case OP_HELEM: 4612 doref(cBINOPo->op_first, o->op_type, set_op_ref); 4613 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) { 4614 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV 4615 : type == OP_RV2HV ? OPpDEREF_HV 4616 : OPpDEREF_SV); 4617 o->op_flags |= OPf_MOD; 4618 } 4619 break; 4620 4621 case OP_SCOPE: 4622 case OP_LEAVE: 4623 set_op_ref = FALSE; 4624 /* FALLTHROUGH */ 4625 case OP_ENTER: 4626 case OP_LIST: 4627 if (!(o->op_flags & OPf_KIDS)) 4628 break; 4629 doref(cLISTOPo->op_last, type, set_op_ref); 4630 break; 4631 default: 4632 break; 4633 } 4634 return scalar(o); 4635 4636 } 4637 4638 STATIC OP * 4639 S_dup_attrlist(pTHX_ OP *o) 4640 { 4641 OP *rop; 4642 4643 PERL_ARGS_ASSERT_DUP_ATTRLIST; 4644 4645 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids, 4646 * where the first kid is OP_PUSHMARK and the remaining ones 4647 * are OP_CONST. We need to push the OP_CONST values. 4648 */ 4649 if (o->op_type == OP_CONST) 4650 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv)); 4651 else { 4652 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS)); 4653 rop = NULL; 4654 for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) { 4655 if (o->op_type == OP_CONST) 4656 rop = op_append_elem(OP_LIST, rop, 4657 newSVOP(OP_CONST, o->op_flags, 4658 SvREFCNT_inc_NN(cSVOPo->op_sv))); 4659 } 4660 } 4661 return rop; 4662 } 4663 4664 STATIC void 4665 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs) 4666 { 4667 PERL_ARGS_ASSERT_APPLY_ATTRS; 4668 { 4669 SV * const stashsv = newSVhek(HvNAME_HEK(stash)); 4670 4671 /* fake up C<use attributes $pkg,$rv,@attrs> */ 4672 4673 #define ATTRSMODULE "attributes" 4674 #define ATTRSMODULE_PM "attributes.pm" 4675 4676 Perl_load_module( 4677 aTHX_ PERL_LOADMOD_IMPORT_OPS, 4678 newSVpvs(ATTRSMODULE), 4679 NULL, 4680 op_prepend_elem(OP_LIST, 4681 newSVOP(OP_CONST, 0, stashsv), 4682 op_prepend_elem(OP_LIST, 4683 newSVOP(OP_CONST, 0, 4684 newRV(target)), 4685 dup_attrlist(attrs)))); 4686 } 4687 } 4688 4689 STATIC void 4690 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp) 4691 { 4692 OP *pack, *imop, *arg; 4693 SV *meth, *stashsv, **svp; 4694 4695 PERL_ARGS_ASSERT_APPLY_ATTRS_MY; 4696 4697 if (!attrs) 4698 return; 4699 4700 assert(target->op_type == OP_PADSV || 4701 target->op_type == OP_PADHV || 4702 target->op_type == OP_PADAV); 4703 4704 /* Ensure that attributes.pm is loaded. */ 4705 /* Don't force the C<use> if we don't need it. */ 4706 svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE); 4707 if (svp && *svp != &PL_sv_undef) 4708 NOOP; /* already in %INC */ 4709 else 4710 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, 4711 newSVpvs(ATTRSMODULE), NULL); 4712 4713 /* Need package name for method call. */ 4714 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE)); 4715 4716 /* Build up the real arg-list. */ 4717 stashsv = newSVhek(HvNAME_HEK(stash)); 4718 4719 arg = newOP(OP_PADSV, 0); 4720 arg->op_targ = target->op_targ; 4721 arg = op_prepend_elem(OP_LIST, 4722 newSVOP(OP_CONST, 0, stashsv), 4723 op_prepend_elem(OP_LIST, 4724 newUNOP(OP_REFGEN, 0, 4725 arg), 4726 dup_attrlist(attrs))); 4727 4728 /* Fake up a method call to import */ 4729 meth = newSVpvs_share("import"); 4730 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID, 4731 op_append_elem(OP_LIST, 4732 op_prepend_elem(OP_LIST, pack, arg), 4733 newMETHOP_named(OP_METHOD_NAMED, 0, meth))); 4734 4735 /* Combine the ops. */ 4736 *imopsp = op_append_elem(OP_LIST, *imopsp, imop); 4737 } 4738 4739 /* 4740 =notfor apidoc apply_attrs_string 4741 4742 Attempts to apply a list of attributes specified by the C<attrstr> and 4743 C<len> arguments to the subroutine identified by the C<cv> argument which 4744 is expected to be associated with the package identified by the C<stashpv> 4745 argument (see L<attributes>). It gets this wrong, though, in that it 4746 does not correctly identify the boundaries of the individual attribute 4747 specifications within C<attrstr>. This is not really intended for the 4748 public API, but has to be listed here for systems such as AIX which 4749 need an explicit export list for symbols. (It's called from XS code 4750 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it 4751 to respect attribute syntax properly would be welcome. 4752 4753 =cut 4754 */ 4755 4756 void 4757 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv, 4758 const char *attrstr, STRLEN len) 4759 { 4760 OP *attrs = NULL; 4761 4762 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING; 4763 4764 if (!len) { 4765 len = strlen(attrstr); 4766 } 4767 4768 while (len) { 4769 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ; 4770 if (len) { 4771 const char * const sstr = attrstr; 4772 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ; 4773 attrs = op_append_elem(OP_LIST, attrs, 4774 newSVOP(OP_CONST, 0, 4775 newSVpvn(sstr, attrstr-sstr))); 4776 } 4777 } 4778 4779 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS, 4780 newSVpvs(ATTRSMODULE), 4781 NULL, op_prepend_elem(OP_LIST, 4782 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)), 4783 op_prepend_elem(OP_LIST, 4784 newSVOP(OP_CONST, 0, 4785 newRV(MUTABLE_SV(cv))), 4786 attrs))); 4787 } 4788 4789 STATIC void 4790 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name, 4791 bool curstash) 4792 { 4793 OP *new_proto = NULL; 4794 STRLEN pvlen; 4795 char *pv; 4796 OP *o; 4797 4798 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR; 4799 4800 if (!*attrs) 4801 return; 4802 4803 o = *attrs; 4804 if (o->op_type == OP_CONST) { 4805 pv = SvPV(cSVOPo_sv, pvlen); 4806 if (memBEGINs(pv, pvlen, "prototype(")) { 4807 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv)); 4808 SV ** const tmpo = cSVOPx_svp(o); 4809 SvREFCNT_dec(cSVOPo_sv); 4810 *tmpo = tmpsv; 4811 new_proto = o; 4812 *attrs = NULL; 4813 } 4814 } else if (o->op_type == OP_LIST) { 4815 OP * lasto; 4816 assert(o->op_flags & OPf_KIDS); 4817 lasto = cLISTOPo->op_first; 4818 assert(lasto->op_type == OP_PUSHMARK); 4819 for (o = OpSIBLING(lasto); o; o = OpSIBLING(o)) { 4820 if (o->op_type == OP_CONST) { 4821 pv = SvPV(cSVOPo_sv, pvlen); 4822 if (memBEGINs(pv, pvlen, "prototype(")) { 4823 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv)); 4824 SV ** const tmpo = cSVOPx_svp(o); 4825 SvREFCNT_dec(cSVOPo_sv); 4826 *tmpo = tmpsv; 4827 if (new_proto && ckWARN(WARN_MISC)) { 4828 STRLEN new_len; 4829 const char * newp = SvPV(cSVOPo_sv, new_len); 4830 Perl_warner(aTHX_ packWARN(WARN_MISC), 4831 "Attribute prototype(%" UTF8f ") discards earlier prototype attribute in same sub", 4832 UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp)); 4833 op_free(new_proto); 4834 } 4835 else if (new_proto) 4836 op_free(new_proto); 4837 new_proto = o; 4838 /* excise new_proto from the list */ 4839 op_sibling_splice(*attrs, lasto, 1, NULL); 4840 o = lasto; 4841 continue; 4842 } 4843 } 4844 lasto = o; 4845 } 4846 /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs 4847 would get pulled in with no real need */ 4848 if (!OpHAS_SIBLING(cLISTOPx(*attrs)->op_first)) { 4849 op_free(*attrs); 4850 *attrs = NULL; 4851 } 4852 } 4853 4854 if (new_proto) { 4855 SV *svname; 4856 if (isGV(name)) { 4857 svname = sv_newmortal(); 4858 gv_efullname3(svname, name, NULL); 4859 } 4860 else if (SvPOK(name) && *SvPVX((SV *)name) == '&') 4861 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP); 4862 else 4863 svname = (SV *)name; 4864 if (ckWARN(WARN_ILLEGALPROTO)) 4865 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE, 4866 curstash); 4867 if (*proto && ckWARN(WARN_PROTOTYPE)) { 4868 STRLEN old_len, new_len; 4869 const char * oldp = SvPV(cSVOPx_sv(*proto), old_len); 4870 const char * newp = SvPV(cSVOPx_sv(new_proto), new_len); 4871 4872 if (curstash && svname == (SV *)name 4873 && !memchr(SvPVX(svname), ':', SvCUR(svname))) { 4874 svname = sv_2mortal(newSVsv(PL_curstname)); 4875 sv_catpvs(svname, "::"); 4876 sv_catsv(svname, (SV *)name); 4877 } 4878 4879 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), 4880 "Prototype '%" UTF8f "' overridden by attribute 'prototype(%" UTF8f ")'" 4881 " in %" SVf, 4882 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp), 4883 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp), 4884 SVfARG(svname)); 4885 } 4886 if (*proto) 4887 op_free(*proto); 4888 *proto = new_proto; 4889 } 4890 } 4891 4892 static void 4893 S_cant_declare(pTHX_ OP *o) 4894 { 4895 if (o->op_type == OP_NULL 4896 && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS) 4897 o = cUNOPo->op_first; 4898 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"", 4899 o->op_type == OP_NULL 4900 && o->op_flags & OPf_SPECIAL 4901 ? "do block" 4902 : OP_DESC(o), 4903 PL_parser->in_my == KEY_our ? "our" : 4904 PL_parser->in_my == KEY_state ? "state" : 4905 "my")); 4906 } 4907 4908 STATIC OP * 4909 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp) 4910 { 4911 I32 type; 4912 const bool stately = PL_parser && PL_parser->in_my == KEY_state; 4913 4914 PERL_ARGS_ASSERT_MY_KID; 4915 4916 if (!o || (PL_parser && PL_parser->error_count)) 4917 return o; 4918 4919 type = o->op_type; 4920 4921 if (OP_TYPE_IS_OR_WAS(o, OP_LIST)) { 4922 OP *kid; 4923 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) 4924 my_kid(kid, attrs, imopsp); 4925 return o; 4926 } else if (type == OP_UNDEF || type == OP_STUB) { 4927 return o; 4928 } else if (type == OP_RV2SV || /* "our" declaration */ 4929 type == OP_RV2AV || 4930 type == OP_RV2HV) { 4931 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */ 4932 S_cant_declare(aTHX_ o); 4933 } else if (attrs) { 4934 GV * const gv = cGVOPx_gv(cUNOPo->op_first); 4935 assert(PL_parser); 4936 PL_parser->in_my = FALSE; 4937 PL_parser->in_my_stash = NULL; 4938 apply_attrs(GvSTASH(gv), 4939 (type == OP_RV2SV ? GvSVn(gv) : 4940 type == OP_RV2AV ? MUTABLE_SV(GvAVn(gv)) : 4941 type == OP_RV2HV ? MUTABLE_SV(GvHVn(gv)) : MUTABLE_SV(gv)), 4942 attrs); 4943 } 4944 o->op_private |= OPpOUR_INTRO; 4945 return o; 4946 } 4947 else if (type == OP_REFGEN || type == OP_SREFGEN) { 4948 if (!FEATURE_MYREF_IS_ENABLED) 4949 Perl_croak(aTHX_ "The experimental declared_refs " 4950 "feature is not enabled"); 4951 Perl_ck_warner_d(aTHX_ 4952 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS), 4953 "Declaring references is experimental"); 4954 /* Kid is a nulled OP_LIST, handled above. */ 4955 my_kid(cUNOPo->op_first, attrs, imopsp); 4956 return o; 4957 } 4958 else if (type != OP_PADSV && 4959 type != OP_PADAV && 4960 type != OP_PADHV && 4961 type != OP_PUSHMARK) 4962 { 4963 S_cant_declare(aTHX_ o); 4964 return o; 4965 } 4966 else if (attrs && type != OP_PUSHMARK) { 4967 HV *stash; 4968 4969 assert(PL_parser); 4970 PL_parser->in_my = FALSE; 4971 PL_parser->in_my_stash = NULL; 4972 4973 /* check for C<my Dog $spot> when deciding package */ 4974 stash = PAD_COMPNAME_TYPE(o->op_targ); 4975 if (!stash) 4976 stash = PL_curstash; 4977 apply_attrs_my(stash, o, attrs, imopsp); 4978 } 4979 o->op_flags |= OPf_MOD; 4980 o->op_private |= OPpLVAL_INTRO; 4981 if (stately) 4982 o->op_private |= OPpPAD_STATE; 4983 return o; 4984 } 4985 4986 OP * 4987 Perl_my_attrs(pTHX_ OP *o, OP *attrs) 4988 { 4989 OP *rops; 4990 int maybe_scalar = 0; 4991 4992 PERL_ARGS_ASSERT_MY_ATTRS; 4993 4994 /* [perl #17376]: this appears to be premature, and results in code such as 4995 C< our(%x); > executing in list mode rather than void mode */ 4996 #if 0 4997 if (o->op_flags & OPf_PARENS) 4998 list(o); 4999 else 5000 maybe_scalar = 1; 5001 #else 5002 maybe_scalar = 1; 5003 #endif 5004 if (attrs) 5005 SAVEFREEOP(attrs); 5006 rops = NULL; 5007 o = my_kid(o, attrs, &rops); 5008 if (rops) { 5009 if (maybe_scalar && o->op_type == OP_PADSV) { 5010 o = scalar(op_append_list(OP_LIST, rops, o)); 5011 o->op_private |= OPpLVAL_INTRO; 5012 } 5013 else { 5014 /* The listop in rops might have a pushmark at the beginning, 5015 which will mess up list assignment. */ 5016 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */ 5017 if (rops->op_type == OP_LIST && 5018 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK) 5019 { 5020 OP * const pushmark = lrops->op_first; 5021 /* excise pushmark */ 5022 op_sibling_splice(rops, NULL, 1, NULL); 5023 op_free(pushmark); 5024 } 5025 o = op_append_list(OP_LIST, o, rops); 5026 } 5027 } 5028 PL_parser->in_my = FALSE; 5029 PL_parser->in_my_stash = NULL; 5030 return o; 5031 } 5032 5033 OP * 5034 Perl_sawparens(pTHX_ OP *o) 5035 { 5036 PERL_UNUSED_CONTEXT; 5037 if (o) 5038 o->op_flags |= OPf_PARENS; 5039 return o; 5040 } 5041 5042 OP * 5043 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right) 5044 { 5045 OP *o; 5046 bool ismatchop = 0; 5047 const OPCODE ltype = left->op_type; 5048 const OPCODE rtype = right->op_type; 5049 5050 PERL_ARGS_ASSERT_BIND_MATCH; 5051 5052 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV 5053 || ltype == OP_PADHV) && ckWARN(WARN_MISC)) 5054 { 5055 const char * const desc 5056 = PL_op_desc[( 5057 rtype == OP_SUBST || rtype == OP_TRANS 5058 || rtype == OP_TRANSR 5059 ) 5060 ? (int)rtype : OP_MATCH]; 5061 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV; 5062 SV * const name = 5063 S_op_varname(aTHX_ left); 5064 if (name) 5065 Perl_warner(aTHX_ packWARN(WARN_MISC), 5066 "Applying %s to %" SVf " will act on scalar(%" SVf ")", 5067 desc, SVfARG(name), SVfARG(name)); 5068 else { 5069 const char * const sample = (isary 5070 ? "@array" : "%hash"); 5071 Perl_warner(aTHX_ packWARN(WARN_MISC), 5072 "Applying %s to %s will act on scalar(%s)", 5073 desc, sample, sample); 5074 } 5075 } 5076 5077 if (rtype == OP_CONST && 5078 cSVOPx(right)->op_private & OPpCONST_BARE && 5079 cSVOPx(right)->op_private & OPpCONST_STRICT) 5080 { 5081 no_bareword_allowed(right); 5082 } 5083 5084 /* !~ doesn't make sense with /r, so error on it for now */ 5085 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) && 5086 type == OP_NOT) 5087 /* diag_listed_as: Using !~ with %s doesn't make sense */ 5088 yyerror("Using !~ with s///r doesn't make sense"); 5089 if (rtype == OP_TRANSR && type == OP_NOT) 5090 /* diag_listed_as: Using !~ with %s doesn't make sense */ 5091 yyerror("Using !~ with tr///r doesn't make sense"); 5092 5093 ismatchop = (rtype == OP_MATCH || 5094 rtype == OP_SUBST || 5095 rtype == OP_TRANS || rtype == OP_TRANSR) 5096 && !(right->op_flags & OPf_SPECIAL); 5097 if (ismatchop && right->op_private & OPpTARGET_MY) { 5098 right->op_targ = 0; 5099 right->op_private &= ~OPpTARGET_MY; 5100 } 5101 if (!(right->op_flags & OPf_STACKED) && !right->op_targ && ismatchop) { 5102 if (left->op_type == OP_PADSV 5103 && !(left->op_private & OPpLVAL_INTRO)) 5104 { 5105 right->op_targ = left->op_targ; 5106 op_free(left); 5107 o = right; 5108 } 5109 else { 5110 right->op_flags |= OPf_STACKED; 5111 if (rtype != OP_MATCH && rtype != OP_TRANSR && 5112 ! (rtype == OP_TRANS && 5113 right->op_private & OPpTRANS_IDENTICAL) && 5114 ! (rtype == OP_SUBST && 5115 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT))) 5116 left = op_lvalue(left, rtype); 5117 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR) 5118 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right); 5119 else 5120 o = op_prepend_elem(rtype, scalar(left), right); 5121 } 5122 if (type == OP_NOT) 5123 return newUNOP(OP_NOT, 0, scalar(o)); 5124 return o; 5125 } 5126 else 5127 return bind_match(type, left, 5128 pmruntime(newPMOP(OP_MATCH, 0), right, NULL, 0, 0)); 5129 } 5130 5131 OP * 5132 Perl_invert(pTHX_ OP *o) 5133 { 5134 if (!o) 5135 return NULL; 5136 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o)); 5137 } 5138 5139 /* 5140 =for apidoc Amx|OP *|op_scope|OP *o 5141 5142 Wraps up an op tree with some additional ops so that at runtime a dynamic 5143 scope will be created. The original ops run in the new dynamic scope, 5144 and then, provided that they exit normally, the scope will be unwound. 5145 The additional ops used to create and unwind the dynamic scope will 5146 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used 5147 instead if the ops are simple enough to not need the full dynamic scope 5148 structure. 5149 5150 =cut 5151 */ 5152 5153 OP * 5154 Perl_op_scope(pTHX_ OP *o) 5155 { 5156 dVAR; 5157 if (o) { 5158 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) { 5159 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o); 5160 OpTYPE_set(o, OP_LEAVE); 5161 } 5162 else if (o->op_type == OP_LINESEQ) { 5163 OP *kid; 5164 OpTYPE_set(o, OP_SCOPE); 5165 kid = ((LISTOP*)o)->op_first; 5166 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) { 5167 op_null(kid); 5168 5169 /* The following deals with things like 'do {1 for 1}' */ 5170 kid = OpSIBLING(kid); 5171 if (kid && 5172 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)) 5173 op_null(kid); 5174 } 5175 } 5176 else 5177 o = newLISTOP(OP_SCOPE, 0, o, NULL); 5178 } 5179 return o; 5180 } 5181 5182 OP * 5183 Perl_op_unscope(pTHX_ OP *o) 5184 { 5185 if (o && o->op_type == OP_LINESEQ) { 5186 OP *kid = cLISTOPo->op_first; 5187 for(; kid; kid = OpSIBLING(kid)) 5188 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) 5189 op_null(kid); 5190 } 5191 return o; 5192 } 5193 5194 /* 5195 =for apidoc Am|int|block_start|int full 5196 5197 Handles compile-time scope entry. 5198 Arranges for hints to be restored on block 5199 exit and also handles pad sequence numbers to make lexical variables scope 5200 right. Returns a savestack index for use with C<block_end>. 5201 5202 =cut 5203 */ 5204 5205 int 5206 Perl_block_start(pTHX_ int full) 5207 { 5208 const int retval = PL_savestack_ix; 5209 5210 PL_compiling.cop_seq = PL_cop_seqmax; 5211 COP_SEQMAX_INC; 5212 pad_block_start(full); 5213 SAVEHINTS(); 5214 PL_hints &= ~HINT_BLOCK_SCOPE; 5215 SAVECOMPILEWARNINGS(); 5216 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings); 5217 SAVEI32(PL_compiling.cop_seq); 5218 PL_compiling.cop_seq = 0; 5219 5220 CALL_BLOCK_HOOKS(bhk_start, full); 5221 5222 return retval; 5223 } 5224 5225 /* 5226 =for apidoc Am|OP *|block_end|I32 floor|OP *seq 5227 5228 Handles compile-time scope exit. C<floor> 5229 is the savestack index returned by 5230 C<block_start>, and C<seq> is the body of the block. Returns the block, 5231 possibly modified. 5232 5233 =cut 5234 */ 5235 5236 OP* 5237 Perl_block_end(pTHX_ I32 floor, OP *seq) 5238 { 5239 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE; 5240 OP* retval = scalarseq(seq); 5241 OP *o; 5242 5243 /* XXX Is the null PL_parser check necessary here? */ 5244 assert(PL_parser); /* Let’s find out under debugging builds. */ 5245 if (PL_parser && PL_parser->parsed_sub) { 5246 o = newSTATEOP(0, NULL, NULL); 5247 op_null(o); 5248 retval = op_append_elem(OP_LINESEQ, retval, o); 5249 } 5250 5251 CALL_BLOCK_HOOKS(bhk_pre_end, &retval); 5252 5253 LEAVE_SCOPE(floor); 5254 if (needblockscope) 5255 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */ 5256 o = pad_leavemy(); 5257 5258 if (o) { 5259 /* pad_leavemy has created a sequence of introcv ops for all my 5260 subs declared in the block. We have to replicate that list with 5261 clonecv ops, to deal with this situation: 5262 5263 sub { 5264 my sub s1; 5265 my sub s2; 5266 sub s1 { state sub foo { \&s2 } } 5267 }->() 5268 5269 Originally, I was going to have introcv clone the CV and turn 5270 off the stale flag. Since &s1 is declared before &s2, the 5271 introcv op for &s1 is executed (on sub entry) before the one for 5272 &s2. But the &foo sub inside &s1 (which is cloned when &s1 is 5273 cloned, since it is a state sub) closes over &s2 and expects 5274 to see it in its outer CV’s pad. If the introcv op clones &s1, 5275 then &s2 is still marked stale. Since &s1 is not active, and 5276 &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia- 5277 ble will not stay shared’ warning. Because it is the same stub 5278 that will be used when the introcv op for &s2 is executed, clos- 5279 ing over it is safe. Hence, we have to turn off the stale flag 5280 on all lexical subs in the block before we clone any of them. 5281 Hence, having introcv clone the sub cannot work. So we create a 5282 list of ops like this: 5283 5284 lineseq 5285 | 5286 +-- introcv 5287 | 5288 +-- introcv 5289 | 5290 +-- introcv 5291 | 5292 . 5293 . 5294 . 5295 | 5296 +-- clonecv 5297 | 5298 +-- clonecv 5299 | 5300 +-- clonecv 5301 | 5302 . 5303 . 5304 . 5305 */ 5306 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o; 5307 OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o; 5308 for (;; kid = OpSIBLING(kid)) { 5309 OP *newkid = newOP(OP_CLONECV, 0); 5310 newkid->op_targ = kid->op_targ; 5311 o = op_append_elem(OP_LINESEQ, o, newkid); 5312 if (kid == last) break; 5313 } 5314 retval = op_prepend_elem(OP_LINESEQ, o, retval); 5315 } 5316 5317 CALL_BLOCK_HOOKS(bhk_post_end, &retval); 5318 5319 return retval; 5320 } 5321 5322 /* 5323 =head1 Compile-time scope hooks 5324 5325 =for apidoc Aox||blockhook_register 5326 5327 Register a set of hooks to be called when the Perl lexical scope changes 5328 at compile time. See L<perlguts/"Compile-time scope hooks">. 5329 5330 =cut 5331 */ 5332 5333 void 5334 Perl_blockhook_register(pTHX_ BHK *hk) 5335 { 5336 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER; 5337 5338 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk))); 5339 } 5340 5341 void 5342 Perl_newPROG(pTHX_ OP *o) 5343 { 5344 OP *start; 5345 5346 PERL_ARGS_ASSERT_NEWPROG; 5347 5348 if (PL_in_eval) { 5349 PERL_CONTEXT *cx; 5350 I32 i; 5351 if (PL_eval_root) 5352 return; 5353 PL_eval_root = newUNOP(OP_LEAVEEVAL, 5354 ((PL_in_eval & EVAL_KEEPERR) 5355 ? OPf_SPECIAL : 0), o); 5356 5357 cx = CX_CUR(); 5358 assert(CxTYPE(cx) == CXt_EVAL); 5359 5360 if ((cx->blk_gimme & G_WANT) == G_VOID) 5361 scalarvoid(PL_eval_root); 5362 else if ((cx->blk_gimme & G_WANT) == G_ARRAY) 5363 list(PL_eval_root); 5364 else 5365 scalar(PL_eval_root); 5366 5367 start = op_linklist(PL_eval_root); 5368 PL_eval_root->op_next = 0; 5369 i = PL_savestack_ix; 5370 SAVEFREEOP(o); 5371 ENTER; 5372 S_process_optree(aTHX_ NULL, PL_eval_root, start); 5373 LEAVE; 5374 PL_savestack_ix = i; 5375 } 5376 else { 5377 if (o->op_type == OP_STUB) { 5378 /* This block is entered if nothing is compiled for the main 5379 program. This will be the case for an genuinely empty main 5380 program, or one which only has BEGIN blocks etc, so already 5381 run and freed. 5382 5383 Historically (5.000) the guard above was !o. However, commit 5384 f8a08f7b8bd67b28 (Jun 2001), integrated to blead as 5385 c71fccf11fde0068, changed perly.y so that newPROG() is now 5386 called with the output of block_end(), which returns a new 5387 OP_STUB for the case of an empty optree. ByteLoader (and 5388 maybe other things) also take this path, because they set up 5389 PL_main_start and PL_main_root directly, without generating an 5390 optree. 5391 5392 If the parsing the main program aborts (due to parse errors, 5393 or due to BEGIN or similar calling exit), then newPROG() 5394 isn't even called, and hence this code path and its cleanups 5395 are skipped. This shouldn't make a make a difference: 5396 * a non-zero return from perl_parse is a failure, and 5397 perl_destruct() should be called immediately. 5398 * however, if exit(0) is called during the parse, then 5399 perl_parse() returns 0, and perl_run() is called. As 5400 PL_main_start will be NULL, perl_run() will return 5401 promptly, and the exit code will remain 0. 5402 */ 5403 5404 PL_comppad_name = 0; 5405 PL_compcv = 0; 5406 S_op_destroy(aTHX_ o); 5407 return; 5408 } 5409 PL_main_root = op_scope(sawparens(scalarvoid(o))); 5410 PL_curcop = &PL_compiling; 5411 start = LINKLIST(PL_main_root); 5412 PL_main_root->op_next = 0; 5413 S_process_optree(aTHX_ NULL, PL_main_root, start); 5414 if (!PL_parser->error_count) 5415 /* on error, leave CV slabbed so that ops left lying around 5416 * will eb cleaned up. Else unslab */ 5417 cv_forget_slab(PL_compcv); 5418 PL_compcv = 0; 5419 5420 /* Register with debugger */ 5421 if (PERLDB_INTER) { 5422 CV * const cv = get_cvs("DB::postponed", 0); 5423 if (cv) { 5424 dSP; 5425 PUSHMARK(SP); 5426 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling))); 5427 PUTBACK; 5428 call_sv(MUTABLE_SV(cv), G_DISCARD); 5429 } 5430 } 5431 } 5432 } 5433 5434 OP * 5435 Perl_localize(pTHX_ OP *o, I32 lex) 5436 { 5437 PERL_ARGS_ASSERT_LOCALIZE; 5438 5439 if (o->op_flags & OPf_PARENS) 5440 /* [perl #17376]: this appears to be premature, and results in code such as 5441 C< our(%x); > executing in list mode rather than void mode */ 5442 #if 0 5443 list(o); 5444 #else 5445 NOOP; 5446 #endif 5447 else { 5448 if ( PL_parser->bufptr > PL_parser->oldbufptr 5449 && PL_parser->bufptr[-1] == ',' 5450 && ckWARN(WARN_PARENTHESIS)) 5451 { 5452 char *s = PL_parser->bufptr; 5453 bool sigil = FALSE; 5454 5455 /* some heuristics to detect a potential error */ 5456 while (*s && (strchr(", \t\n", *s))) 5457 s++; 5458 5459 while (1) { 5460 if (*s && (strchr("@$%", *s) || (!lex && *s == '*')) 5461 && *++s 5462 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) { 5463 s++; 5464 sigil = TRUE; 5465 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) 5466 s++; 5467 while (*s && (strchr(", \t\n", *s))) 5468 s++; 5469 } 5470 else 5471 break; 5472 } 5473 if (sigil && (*s == ';' || *s == '=')) { 5474 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS), 5475 "Parentheses missing around \"%s\" list", 5476 lex 5477 ? (PL_parser->in_my == KEY_our 5478 ? "our" 5479 : PL_parser->in_my == KEY_state 5480 ? "state" 5481 : "my") 5482 : "local"); 5483 } 5484 } 5485 } 5486 if (lex) 5487 o = my(o); 5488 else 5489 o = op_lvalue(o, OP_NULL); /* a bit kludgey */ 5490 PL_parser->in_my = FALSE; 5491 PL_parser->in_my_stash = NULL; 5492 return o; 5493 } 5494 5495 OP * 5496 Perl_jmaybe(pTHX_ OP *o) 5497 { 5498 PERL_ARGS_ASSERT_JMAYBE; 5499 5500 if (o->op_type == OP_LIST) { 5501 OP * const o2 5502 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV))); 5503 o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o)); 5504 } 5505 return o; 5506 } 5507 5508 PERL_STATIC_INLINE OP * 5509 S_op_std_init(pTHX_ OP *o) 5510 { 5511 I32 type = o->op_type; 5512 5513 PERL_ARGS_ASSERT_OP_STD_INIT; 5514 5515 if (PL_opargs[type] & OA_RETSCALAR) 5516 scalar(o); 5517 if (PL_opargs[type] & OA_TARGET && !o->op_targ) 5518 o->op_targ = pad_alloc(type, SVs_PADTMP); 5519 5520 return o; 5521 } 5522 5523 PERL_STATIC_INLINE OP * 5524 S_op_integerize(pTHX_ OP *o) 5525 { 5526 I32 type = o->op_type; 5527 5528 PERL_ARGS_ASSERT_OP_INTEGERIZE; 5529 5530 /* integerize op. */ 5531 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)) 5532 { 5533 dVAR; 5534 o->op_ppaddr = PL_ppaddr[++(o->op_type)]; 5535 } 5536 5537 if (type == OP_NEGATE) 5538 /* XXX might want a ck_negate() for this */ 5539 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT; 5540 5541 return o; 5542 } 5543 5544 /* This function exists solely to provide a scope to limit 5545 setjmp/longjmp() messing with auto variables. 5546 */ 5547 PERL_STATIC_INLINE int 5548 S_fold_constants_eval(pTHX) { 5549 int ret = 0; 5550 dJMPENV; 5551 5552 JMPENV_PUSH(ret); 5553 5554 if (ret == 0) { 5555 CALLRUNOPS(aTHX); 5556 } 5557 5558 JMPENV_POP; 5559 5560 return ret; 5561 } 5562 5563 static OP * 5564 S_fold_constants(pTHX_ OP *const o) 5565 { 5566 dVAR; 5567 OP *curop; 5568 OP *newop; 5569 I32 type = o->op_type; 5570 bool is_stringify; 5571 SV *sv = NULL; 5572 int ret = 0; 5573 OP *old_next; 5574 SV * const oldwarnhook = PL_warnhook; 5575 SV * const olddiehook = PL_diehook; 5576 COP not_compiling; 5577 U8 oldwarn = PL_dowarn; 5578 I32 old_cxix; 5579 5580 PERL_ARGS_ASSERT_FOLD_CONSTANTS; 5581 5582 if (!(PL_opargs[type] & OA_FOLDCONST)) 5583 goto nope; 5584 5585 switch (type) { 5586 case OP_UCFIRST: 5587 case OP_LCFIRST: 5588 case OP_UC: 5589 case OP_LC: 5590 case OP_FC: 5591 #ifdef USE_LOCALE_CTYPE 5592 if (IN_LC_COMPILETIME(LC_CTYPE)) 5593 goto nope; 5594 #endif 5595 break; 5596 case OP_SLT: 5597 case OP_SGT: 5598 case OP_SLE: 5599 case OP_SGE: 5600 case OP_SCMP: 5601 #ifdef USE_LOCALE_COLLATE 5602 if (IN_LC_COMPILETIME(LC_COLLATE)) 5603 goto nope; 5604 #endif 5605 break; 5606 case OP_SPRINTF: 5607 /* XXX what about the numeric ops? */ 5608 #ifdef USE_LOCALE_NUMERIC 5609 if (IN_LC_COMPILETIME(LC_NUMERIC)) 5610 goto nope; 5611 #endif 5612 break; 5613 case OP_PACK: 5614 if (!OpHAS_SIBLING(cLISTOPo->op_first) 5615 || OpSIBLING(cLISTOPo->op_first)->op_type != OP_CONST) 5616 goto nope; 5617 { 5618 SV * const sv = cSVOPx_sv(OpSIBLING(cLISTOPo->op_first)); 5619 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope; 5620 { 5621 const char *s = SvPVX_const(sv); 5622 while (s < SvEND(sv)) { 5623 if (isALPHA_FOLD_EQ(*s, 'p')) goto nope; 5624 s++; 5625 } 5626 } 5627 } 5628 break; 5629 case OP_REPEAT: 5630 if (o->op_private & OPpREPEAT_DOLIST) goto nope; 5631 break; 5632 case OP_SREFGEN: 5633 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST 5634 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first))) 5635 goto nope; 5636 } 5637 5638 if (PL_parser && PL_parser->error_count) 5639 goto nope; /* Don't try to run w/ errors */ 5640 5641 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) { 5642 switch (curop->op_type) { 5643 case OP_CONST: 5644 if ( (curop->op_private & OPpCONST_BARE) 5645 && (curop->op_private & OPpCONST_STRICT)) { 5646 no_bareword_allowed(curop); 5647 goto nope; 5648 } 5649 /* FALLTHROUGH */ 5650 case OP_LIST: 5651 case OP_SCALAR: 5652 case OP_NULL: 5653 case OP_PUSHMARK: 5654 /* Foldable; move to next op in list */ 5655 break; 5656 5657 default: 5658 /* No other op types are considered foldable */ 5659 goto nope; 5660 } 5661 } 5662 5663 curop = LINKLIST(o); 5664 old_next = o->op_next; 5665 o->op_next = 0; 5666 PL_op = curop; 5667 5668 old_cxix = cxstack_ix; 5669 create_eval_scope(NULL, G_FAKINGEVAL); 5670 5671 /* Verify that we don't need to save it: */ 5672 assert(PL_curcop == &PL_compiling); 5673 StructCopy(&PL_compiling, ¬_compiling, COP); 5674 PL_curcop = ¬_compiling; 5675 /* The above ensures that we run with all the correct hints of the 5676 currently compiling COP, but that IN_PERL_RUNTIME is true. */ 5677 assert(IN_PERL_RUNTIME); 5678 PL_warnhook = PERL_WARNHOOK_FATAL; 5679 PL_diehook = NULL; 5680 5681 /* Effective $^W=1. */ 5682 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) 5683 PL_dowarn |= G_WARN_ON; 5684 5685 ret = S_fold_constants_eval(aTHX); 5686 5687 switch (ret) { 5688 case 0: 5689 sv = *(PL_stack_sp--); 5690 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */ 5691 pad_swipe(o->op_targ, FALSE); 5692 } 5693 else if (SvTEMP(sv)) { /* grab mortal temp? */ 5694 SvREFCNT_inc_simple_void(sv); 5695 SvTEMP_off(sv); 5696 } 5697 else { assert(SvIMMORTAL(sv)); } 5698 break; 5699 case 3: 5700 /* Something tried to die. Abandon constant folding. */ 5701 /* Pretend the error never happened. */ 5702 CLEAR_ERRSV(); 5703 o->op_next = old_next; 5704 break; 5705 default: 5706 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */ 5707 PL_warnhook = oldwarnhook; 5708 PL_diehook = olddiehook; 5709 /* XXX note that this croak may fail as we've already blown away 5710 * the stack - eg any nested evals */ 5711 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret); 5712 } 5713 PL_dowarn = oldwarn; 5714 PL_warnhook = oldwarnhook; 5715 PL_diehook = olddiehook; 5716 PL_curcop = &PL_compiling; 5717 5718 /* if we croaked, depending on how we croaked the eval scope 5719 * may or may not have already been popped */ 5720 if (cxstack_ix > old_cxix) { 5721 assert(cxstack_ix == old_cxix + 1); 5722 assert(CxTYPE(CX_CUR()) == CXt_EVAL); 5723 delete_eval_scope(); 5724 } 5725 if (ret) 5726 goto nope; 5727 5728 /* OP_STRINGIFY and constant folding are used to implement qq. 5729 Here the constant folding is an implementation detail that we 5730 want to hide. If the stringify op is itself already marked 5731 folded, however, then it is actually a folded join. */ 5732 is_stringify = type == OP_STRINGIFY && !o->op_folded; 5733 op_free(o); 5734 assert(sv); 5735 if (is_stringify) 5736 SvPADTMP_off(sv); 5737 else if (!SvIMMORTAL(sv)) { 5738 SvPADTMP_on(sv); 5739 SvREADONLY_on(sv); 5740 } 5741 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv)); 5742 if (!is_stringify) newop->op_folded = 1; 5743 return newop; 5744 5745 nope: 5746 return o; 5747 } 5748 5749 static OP * 5750 S_gen_constant_list(pTHX_ OP *o) 5751 { 5752 dVAR; 5753 OP *curop, *old_next; 5754 SV * const oldwarnhook = PL_warnhook; 5755 SV * const olddiehook = PL_diehook; 5756 COP *old_curcop; 5757 U8 oldwarn = PL_dowarn; 5758 SV **svp; 5759 AV *av; 5760 I32 old_cxix; 5761 COP not_compiling; 5762 int ret = 0; 5763 dJMPENV; 5764 bool op_was_null; 5765 5766 list(o); 5767 if (PL_parser && PL_parser->error_count) 5768 return o; /* Don't attempt to run with errors */ 5769 5770 curop = LINKLIST(o); 5771 old_next = o->op_next; 5772 o->op_next = 0; 5773 op_was_null = o->op_type == OP_NULL; 5774 if (op_was_null) /* b3698342565fb462291fba4b432cfcd05b6eb4e1 */ 5775 o->op_type = OP_CUSTOM; 5776 CALL_PEEP(curop); 5777 if (op_was_null) 5778 o->op_type = OP_NULL; 5779 S_prune_chain_head(&curop); 5780 PL_op = curop; 5781 5782 old_cxix = cxstack_ix; 5783 create_eval_scope(NULL, G_FAKINGEVAL); 5784 5785 old_curcop = PL_curcop; 5786 StructCopy(old_curcop, ¬_compiling, COP); 5787 PL_curcop = ¬_compiling; 5788 /* The above ensures that we run with all the correct hints of the 5789 current COP, but that IN_PERL_RUNTIME is true. */ 5790 assert(IN_PERL_RUNTIME); 5791 PL_warnhook = PERL_WARNHOOK_FATAL; 5792 PL_diehook = NULL; 5793 JMPENV_PUSH(ret); 5794 5795 /* Effective $^W=1. */ 5796 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) 5797 PL_dowarn |= G_WARN_ON; 5798 5799 switch (ret) { 5800 case 0: 5801 #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY 5802 PL_curstackinfo->si_stack_hwm = 0; /* stop valgrind complaining */ 5803 #endif 5804 Perl_pp_pushmark(aTHX); 5805 CALLRUNOPS(aTHX); 5806 PL_op = curop; 5807 assert (!(curop->op_flags & OPf_SPECIAL)); 5808 assert(curop->op_type == OP_RANGE); 5809 Perl_pp_anonlist(aTHX); 5810 break; 5811 case 3: 5812 CLEAR_ERRSV(); 5813 o->op_next = old_next; 5814 break; 5815 default: 5816 JMPENV_POP; 5817 PL_warnhook = oldwarnhook; 5818 PL_diehook = olddiehook; 5819 Perl_croak(aTHX_ "panic: gen_constant_list JMPENV_PUSH returned %d", 5820 ret); 5821 } 5822 5823 JMPENV_POP; 5824 PL_dowarn = oldwarn; 5825 PL_warnhook = oldwarnhook; 5826 PL_diehook = olddiehook; 5827 PL_curcop = old_curcop; 5828 5829 if (cxstack_ix > old_cxix) { 5830 assert(cxstack_ix == old_cxix + 1); 5831 assert(CxTYPE(CX_CUR()) == CXt_EVAL); 5832 delete_eval_scope(); 5833 } 5834 if (ret) 5835 return o; 5836 5837 OpTYPE_set(o, OP_RV2AV); 5838 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */ 5839 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */ 5840 o->op_opt = 0; /* needs to be revisited in rpeep() */ 5841 av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--); 5842 5843 /* replace subtree with an OP_CONST */ 5844 curop = ((UNOP*)o)->op_first; 5845 op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av)); 5846 op_free(curop); 5847 5848 if (AvFILLp(av) != -1) 5849 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp) 5850 { 5851 SvPADTMP_on(*svp); 5852 SvREADONLY_on(*svp); 5853 } 5854 LINKLIST(o); 5855 return list(o); 5856 } 5857 5858 /* 5859 =head1 Optree Manipulation Functions 5860 */ 5861 5862 /* List constructors */ 5863 5864 /* 5865 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last 5866 5867 Append an item to the list of ops contained directly within a list-type 5868 op, returning the lengthened list. C<first> is the list-type op, 5869 and C<last> is the op to append to the list. C<optype> specifies the 5870 intended opcode for the list. If C<first> is not already a list of the 5871 right type, it will be upgraded into one. If either C<first> or C<last> 5872 is null, the other is returned unchanged. 5873 5874 =cut 5875 */ 5876 5877 OP * 5878 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last) 5879 { 5880 if (!first) 5881 return last; 5882 5883 if (!last) 5884 return first; 5885 5886 if (first->op_type != (unsigned)type 5887 || (type == OP_LIST && (first->op_flags & OPf_PARENS))) 5888 { 5889 return newLISTOP(type, 0, first, last); 5890 } 5891 5892 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last); 5893 first->op_flags |= OPf_KIDS; 5894 return first; 5895 } 5896 5897 /* 5898 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last 5899 5900 Concatenate the lists of ops contained directly within two list-type ops, 5901 returning the combined list. C<first> and C<last> are the list-type ops 5902 to concatenate. C<optype> specifies the intended opcode for the list. 5903 If either C<first> or C<last> is not already a list of the right type, 5904 it will be upgraded into one. If either C<first> or C<last> is null, 5905 the other is returned unchanged. 5906 5907 =cut 5908 */ 5909 5910 OP * 5911 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last) 5912 { 5913 if (!first) 5914 return last; 5915 5916 if (!last) 5917 return first; 5918 5919 if (first->op_type != (unsigned)type) 5920 return op_prepend_elem(type, first, last); 5921 5922 if (last->op_type != (unsigned)type) 5923 return op_append_elem(type, first, last); 5924 5925 OpMORESIB_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first); 5926 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last; 5927 OpLASTSIB_set(((LISTOP*)first)->op_last, first); 5928 first->op_flags |= (last->op_flags & OPf_KIDS); 5929 5930 S_op_destroy(aTHX_ last); 5931 5932 return first; 5933 } 5934 5935 /* 5936 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last 5937 5938 Prepend an item to the list of ops contained directly within a list-type 5939 op, returning the lengthened list. C<first> is the op to prepend to the 5940 list, and C<last> is the list-type op. C<optype> specifies the intended 5941 opcode for the list. If C<last> is not already a list of the right type, 5942 it will be upgraded into one. If either C<first> or C<last> is null, 5943 the other is returned unchanged. 5944 5945 =cut 5946 */ 5947 5948 OP * 5949 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last) 5950 { 5951 if (!first) 5952 return last; 5953 5954 if (!last) 5955 return first; 5956 5957 if (last->op_type == (unsigned)type) { 5958 if (type == OP_LIST) { /* already a PUSHMARK there */ 5959 /* insert 'first' after pushmark */ 5960 op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first); 5961 if (!(first->op_flags & OPf_PARENS)) 5962 last->op_flags &= ~OPf_PARENS; 5963 } 5964 else 5965 op_sibling_splice(last, NULL, 0, first); 5966 last->op_flags |= OPf_KIDS; 5967 return last; 5968 } 5969 5970 return newLISTOP(type, 0, first, last); 5971 } 5972 5973 /* 5974 =for apidoc Am|OP *|op_convert_list|I32 type|I32 flags|OP *o 5975 5976 Converts C<o> into a list op if it is not one already, and then converts it 5977 into the specified C<type>, calling its check function, allocating a target if 5978 it needs one, and folding constants. 5979 5980 A list-type op is usually constructed one kid at a time via C<newLISTOP>, 5981 C<op_prepend_elem> and C<op_append_elem>. Then finally it is passed to 5982 C<op_convert_list> to make it the right type. 5983 5984 =cut 5985 */ 5986 5987 OP * 5988 Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o) 5989 { 5990 dVAR; 5991 if (type < 0) type = -type, flags |= OPf_SPECIAL; 5992 if (!o || o->op_type != OP_LIST) 5993 o = force_list(o, 0); 5994 else 5995 { 5996 o->op_flags &= ~OPf_WANT; 5997 o->op_private &= ~OPpLVAL_INTRO; 5998 } 5999 6000 if (!(PL_opargs[type] & OA_MARK)) 6001 op_null(cLISTOPo->op_first); 6002 else { 6003 OP * const kid2 = OpSIBLING(cLISTOPo->op_first); 6004 if (kid2 && kid2->op_type == OP_COREARGS) { 6005 op_null(cLISTOPo->op_first); 6006 kid2->op_private |= OPpCOREARGS_PUSHMARK; 6007 } 6008 } 6009 6010 if (type != OP_SPLIT) 6011 /* At this point o is a LISTOP, but OP_SPLIT is a PMOP; let 6012 * ck_split() create a real PMOP and leave the op's type as listop 6013 * for now. Otherwise op_free() etc will crash. 6014 */ 6015 OpTYPE_set(o, type); 6016 6017 o->op_flags |= flags; 6018 if (flags & OPf_FOLDED) 6019 o->op_folded = 1; 6020 6021 o = CHECKOP(type, o); 6022 if (o->op_type != (unsigned)type) 6023 return o; 6024 6025 return fold_constants(op_integerize(op_std_init(o))); 6026 } 6027 6028 /* Constructors */ 6029 6030 6031 /* 6032 =head1 Optree construction 6033 6034 =for apidoc Am|OP *|newNULLLIST 6035 6036 Constructs, checks, and returns a new C<stub> op, which represents an 6037 empty list expression. 6038 6039 =cut 6040 */ 6041 6042 OP * 6043 Perl_newNULLLIST(pTHX) 6044 { 6045 return newOP(OP_STUB, 0); 6046 } 6047 6048 /* promote o and any siblings to be a list if its not already; i.e. 6049 * 6050 * o - A - B 6051 * 6052 * becomes 6053 * 6054 * list 6055 * | 6056 * pushmark - o - A - B 6057 * 6058 * If nullit it true, the list op is nulled. 6059 */ 6060 6061 static OP * 6062 S_force_list(pTHX_ OP *o, bool nullit) 6063 { 6064 if (!o || o->op_type != OP_LIST) { 6065 OP *rest = NULL; 6066 if (o) { 6067 /* manually detach any siblings then add them back later */ 6068 rest = OpSIBLING(o); 6069 OpLASTSIB_set(o, NULL); 6070 } 6071 o = newLISTOP(OP_LIST, 0, o, NULL); 6072 if (rest) 6073 op_sibling_splice(o, cLISTOPo->op_last, 0, rest); 6074 } 6075 if (nullit) 6076 op_null(o); 6077 return o; 6078 } 6079 6080 /* 6081 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last 6082 6083 Constructs, checks, and returns an op of any list type. C<type> is 6084 the opcode. C<flags> gives the eight bits of C<op_flags>, except that 6085 C<OPf_KIDS> will be set automatically if required. C<first> and C<last> 6086 supply up to two ops to be direct children of the list op; they are 6087 consumed by this function and become part of the constructed op tree. 6088 6089 For most list operators, the check function expects all the kid ops to be 6090 present already, so calling C<newLISTOP(OP_JOIN, ...)> (e.g.) is not 6091 appropriate. What you want to do in that case is create an op of type 6092 C<OP_LIST>, append more children to it, and then call L</op_convert_list>. 6093 See L</op_convert_list> for more information. 6094 6095 6096 =cut 6097 */ 6098 6099 OP * 6100 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last) 6101 { 6102 dVAR; 6103 LISTOP *listop; 6104 /* Note that allocating an OP_PUSHMARK can die under Safe.pm if 6105 * pushmark is banned. So do it now while existing ops are in a 6106 * consistent state, in case they suddenly get freed */ 6107 OP* const pushop = type == OP_LIST ? newOP(OP_PUSHMARK, 0) : NULL; 6108 6109 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP 6110 || type == OP_CUSTOM); 6111 6112 NewOp(1101, listop, 1, LISTOP); 6113 OpTYPE_set(listop, type); 6114 if (first || last) 6115 flags |= OPf_KIDS; 6116 listop->op_flags = (U8)flags; 6117 6118 if (!last && first) 6119 last = first; 6120 else if (!first && last) 6121 first = last; 6122 else if (first) 6123 OpMORESIB_set(first, last); 6124 listop->op_first = first; 6125 listop->op_last = last; 6126 6127 if (pushop) { 6128 OpMORESIB_set(pushop, first); 6129 listop->op_first = pushop; 6130 listop->op_flags |= OPf_KIDS; 6131 if (!last) 6132 listop->op_last = pushop; 6133 } 6134 if (listop->op_last) 6135 OpLASTSIB_set(listop->op_last, (OP*)listop); 6136 6137 return CHECKOP(type, listop); 6138 } 6139 6140 /* 6141 =for apidoc Am|OP *|newOP|I32 type|I32 flags 6142 6143 Constructs, checks, and returns an op of any base type (any type that 6144 has no extra fields). C<type> is the opcode. C<flags> gives the 6145 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits 6146 of C<op_private>. 6147 6148 =cut 6149 */ 6150 6151 OP * 6152 Perl_newOP(pTHX_ I32 type, I32 flags) 6153 { 6154 dVAR; 6155 OP *o; 6156 6157 if (type == -OP_ENTEREVAL) { 6158 type = OP_ENTEREVAL; 6159 flags |= OPpEVAL_BYTES<<8; 6160 } 6161 6162 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP 6163 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP 6164 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP 6165 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP); 6166 6167 NewOp(1101, o, 1, OP); 6168 OpTYPE_set(o, type); 6169 o->op_flags = (U8)flags; 6170 6171 o->op_next = o; 6172 o->op_private = (U8)(0 | (flags >> 8)); 6173 if (PL_opargs[type] & OA_RETSCALAR) 6174 scalar(o); 6175 if (PL_opargs[type] & OA_TARGET) 6176 o->op_targ = pad_alloc(type, SVs_PADTMP); 6177 return CHECKOP(type, o); 6178 } 6179 6180 /* 6181 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first 6182 6183 Constructs, checks, and returns an op of any unary type. C<type> is 6184 the opcode. C<flags> gives the eight bits of C<op_flags>, except that 6185 C<OPf_KIDS> will be set automatically if required, and, shifted up eight 6186 bits, the eight bits of C<op_private>, except that the bit with value 1 6187 is automatically set. C<first> supplies an optional op to be the direct 6188 child of the unary op; it is consumed by this function and become part 6189 of the constructed op tree. 6190 6191 =cut 6192 */ 6193 6194 OP * 6195 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first) 6196 { 6197 dVAR; 6198 UNOP *unop; 6199 6200 if (type == -OP_ENTEREVAL) { 6201 type = OP_ENTEREVAL; 6202 flags |= OPpEVAL_BYTES<<8; 6203 } 6204 6205 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP 6206 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP 6207 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP 6208 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP 6209 || type == OP_SASSIGN 6210 || type == OP_ENTERTRY 6211 || type == OP_CUSTOM 6212 || type == OP_NULL ); 6213 6214 if (!first) 6215 first = newOP(OP_STUB, 0); 6216 if (PL_opargs[type] & OA_MARK) 6217 first = force_list(first, 1); 6218 6219 NewOp(1101, unop, 1, UNOP); 6220 OpTYPE_set(unop, type); 6221 unop->op_first = first; 6222 unop->op_flags = (U8)(flags | OPf_KIDS); 6223 unop->op_private = (U8)(1 | (flags >> 8)); 6224 6225 if (!OpHAS_SIBLING(first)) /* true unless weird syntax error */ 6226 OpLASTSIB_set(first, (OP*)unop); 6227 6228 unop = (UNOP*) CHECKOP(type, unop); 6229 if (unop->op_next) 6230 return (OP*)unop; 6231 6232 return fold_constants(op_integerize(op_std_init((OP *) unop))); 6233 } 6234 6235 /* 6236 =for apidoc newUNOP_AUX 6237 6238 Similar to C<newUNOP>, but creates an C<UNOP_AUX> struct instead, with C<op_aux> 6239 initialised to C<aux> 6240 6241 =cut 6242 */ 6243 6244 OP * 6245 Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags, OP *first, UNOP_AUX_item *aux) 6246 { 6247 dVAR; 6248 UNOP_AUX *unop; 6249 6250 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP_AUX 6251 || type == OP_CUSTOM); 6252 6253 NewOp(1101, unop, 1, UNOP_AUX); 6254 unop->op_type = (OPCODE)type; 6255 unop->op_ppaddr = PL_ppaddr[type]; 6256 unop->op_first = first; 6257 unop->op_flags = (U8)(flags | (first ? OPf_KIDS : 0)); 6258 unop->op_private = (U8)((first ? 1 : 0) | (flags >> 8)); 6259 unop->op_aux = aux; 6260 6261 if (first && !OpHAS_SIBLING(first)) /* true unless weird syntax error */ 6262 OpLASTSIB_set(first, (OP*)unop); 6263 6264 unop = (UNOP_AUX*) CHECKOP(type, unop); 6265 6266 return op_std_init((OP *) unop); 6267 } 6268 6269 /* 6270 =for apidoc Am|OP *|newMETHOP|I32 type|I32 flags|OP *first 6271 6272 Constructs, checks, and returns an op of method type with a method name 6273 evaluated at runtime. C<type> is the opcode. C<flags> gives the eight 6274 bits of C<op_flags>, except that C<OPf_KIDS> will be set automatically, 6275 and, shifted up eight bits, the eight bits of C<op_private>, except that 6276 the bit with value 1 is automatically set. C<dynamic_meth> supplies an 6277 op which evaluates method name; it is consumed by this function and 6278 become part of the constructed op tree. 6279 Supported optypes: C<OP_METHOD>. 6280 6281 =cut 6282 */ 6283 6284 static OP* 6285 S_newMETHOP_internal(pTHX_ I32 type, I32 flags, OP* dynamic_meth, SV* const_meth) { 6286 dVAR; 6287 METHOP *methop; 6288 6289 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_METHOP 6290 || type == OP_CUSTOM); 6291 6292 NewOp(1101, methop, 1, METHOP); 6293 if (dynamic_meth) { 6294 if (PL_opargs[type] & OA_MARK) dynamic_meth = force_list(dynamic_meth, 1); 6295 methop->op_flags = (U8)(flags | OPf_KIDS); 6296 methop->op_u.op_first = dynamic_meth; 6297 methop->op_private = (U8)(1 | (flags >> 8)); 6298 6299 if (!OpHAS_SIBLING(dynamic_meth)) 6300 OpLASTSIB_set(dynamic_meth, (OP*)methop); 6301 } 6302 else { 6303 assert(const_meth); 6304 methop->op_flags = (U8)(flags & ~OPf_KIDS); 6305 methop->op_u.op_meth_sv = const_meth; 6306 methop->op_private = (U8)(0 | (flags >> 8)); 6307 methop->op_next = (OP*)methop; 6308 } 6309 6310 #ifdef USE_ITHREADS 6311 methop->op_rclass_targ = 0; 6312 #else 6313 methop->op_rclass_sv = NULL; 6314 #endif 6315 6316 OpTYPE_set(methop, type); 6317 return CHECKOP(type, methop); 6318 } 6319 6320 OP * 6321 Perl_newMETHOP (pTHX_ I32 type, I32 flags, OP* dynamic_meth) { 6322 PERL_ARGS_ASSERT_NEWMETHOP; 6323 return newMETHOP_internal(type, flags, dynamic_meth, NULL); 6324 } 6325 6326 /* 6327 =for apidoc Am|OP *|newMETHOP_named|I32 type|I32 flags|SV *const_meth 6328 6329 Constructs, checks, and returns an op of method type with a constant 6330 method name. C<type> is the opcode. C<flags> gives the eight bits of 6331 C<op_flags>, and, shifted up eight bits, the eight bits of 6332 C<op_private>. C<const_meth> supplies a constant method name; 6333 it must be a shared COW string. 6334 Supported optypes: C<OP_METHOD_NAMED>. 6335 6336 =cut 6337 */ 6338 6339 OP * 6340 Perl_newMETHOP_named (pTHX_ I32 type, I32 flags, SV* const_meth) { 6341 PERL_ARGS_ASSERT_NEWMETHOP_NAMED; 6342 return newMETHOP_internal(type, flags, NULL, const_meth); 6343 } 6344 6345 /* 6346 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last 6347 6348 Constructs, checks, and returns an op of any binary type. C<type> 6349 is the opcode. C<flags> gives the eight bits of C<op_flags>, except 6350 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits, 6351 the eight bits of C<op_private>, except that the bit with value 1 or 6352 2 is automatically set as required. C<first> and C<last> supply up to 6353 two ops to be the direct children of the binary op; they are consumed 6354 by this function and become part of the constructed op tree. 6355 6356 =cut 6357 */ 6358 6359 OP * 6360 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last) 6361 { 6362 dVAR; 6363 BINOP *binop; 6364 6365 ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP 6366 || type == OP_NULL || type == OP_CUSTOM); 6367 6368 NewOp(1101, binop, 1, BINOP); 6369 6370 if (!first) 6371 first = newOP(OP_NULL, 0); 6372 6373 OpTYPE_set(binop, type); 6374 binop->op_first = first; 6375 binop->op_flags = (U8)(flags | OPf_KIDS); 6376 if (!last) { 6377 last = first; 6378 binop->op_private = (U8)(1 | (flags >> 8)); 6379 } 6380 else { 6381 binop->op_private = (U8)(2 | (flags >> 8)); 6382 OpMORESIB_set(first, last); 6383 } 6384 6385 if (!OpHAS_SIBLING(last)) /* true unless weird syntax error */ 6386 OpLASTSIB_set(last, (OP*)binop); 6387 6388 binop->op_last = OpSIBLING(binop->op_first); 6389 if (binop->op_last) 6390 OpLASTSIB_set(binop->op_last, (OP*)binop); 6391 6392 binop = (BINOP*)CHECKOP(type, binop); 6393 if (binop->op_next || binop->op_type != (OPCODE)type) 6394 return (OP*)binop; 6395 6396 return fold_constants(op_integerize(op_std_init((OP *)binop))); 6397 } 6398 6399 /* Helper function for S_pmtrans(): comparison function to sort an array 6400 * of codepoint range pairs. Sorts by start point, or if equal, by end 6401 * point */ 6402 6403 static int uvcompare(const void *a, const void *b) 6404 __attribute__nonnull__(1) 6405 __attribute__nonnull__(2) 6406 __attribute__pure__; 6407 static int uvcompare(const void *a, const void *b) 6408 { 6409 if (*((const UV *)a) < (*(const UV *)b)) 6410 return -1; 6411 if (*((const UV *)a) > (*(const UV *)b)) 6412 return 1; 6413 if (*((const UV *)a+1) < (*(const UV *)b+1)) 6414 return -1; 6415 if (*((const UV *)a+1) > (*(const UV *)b+1)) 6416 return 1; 6417 return 0; 6418 } 6419 6420 /* Given an OP_TRANS / OP_TRANSR op o, plus OP_CONST ops expr and repl 6421 * containing the search and replacement strings, assemble into 6422 * a translation table attached as o->op_pv. 6423 * Free expr and repl. 6424 * It expects the toker to have already set the 6425 * OPpTRANS_COMPLEMENT 6426 * OPpTRANS_SQUASH 6427 * OPpTRANS_DELETE 6428 * flags as appropriate; this function may add 6429 * OPpTRANS_FROM_UTF 6430 * OPpTRANS_TO_UTF 6431 * OPpTRANS_IDENTICAL 6432 * OPpTRANS_GROWS 6433 * flags 6434 */ 6435 6436 static OP * 6437 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl) 6438 { 6439 SV * const tstr = ((SVOP*)expr)->op_sv; 6440 SV * const rstr = ((SVOP*)repl)->op_sv; 6441 STRLEN tlen; 6442 STRLEN rlen; 6443 const U8 *t = (U8*)SvPV_const(tstr, tlen); 6444 const U8 *r = (U8*)SvPV_const(rstr, rlen); 6445 Size_t i, j; 6446 bool grows = FALSE; 6447 OPtrans_map *tbl; 6448 SSize_t struct_size; /* malloced size of table struct */ 6449 6450 const bool complement = cBOOL(o->op_private & OPpTRANS_COMPLEMENT); 6451 const bool squash = cBOOL(o->op_private & OPpTRANS_SQUASH); 6452 const bool del = cBOOL(o->op_private & OPpTRANS_DELETE); 6453 SV* swash; 6454 6455 PERL_ARGS_ASSERT_PMTRANS; 6456 6457 PL_hints |= HINT_BLOCK_SCOPE; 6458 6459 if (SvUTF8(tstr)) 6460 o->op_private |= OPpTRANS_FROM_UTF; 6461 6462 if (SvUTF8(rstr)) 6463 o->op_private |= OPpTRANS_TO_UTF; 6464 6465 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) { 6466 6467 /* for utf8 translations, op_sv will be set to point to a swash 6468 * containing codepoint ranges. This is done by first assembling 6469 * a textual representation of the ranges in listsv then compiling 6470 * it using swash_init(). For more details of the textual format, 6471 * see L<perlunicode.pod/"User-Defined Character Properties"> . 6472 */ 6473 6474 SV* const listsv = newSVpvs("# comment\n"); 6475 SV* transv = NULL; 6476 const U8* tend = t + tlen; 6477 const U8* rend = r + rlen; 6478 STRLEN ulen; 6479 UV tfirst = 1; 6480 UV tlast = 0; 6481 IV tdiff; 6482 STRLEN tcount = 0; 6483 UV rfirst = 1; 6484 UV rlast = 0; 6485 IV rdiff; 6486 STRLEN rcount = 0; 6487 IV diff; 6488 I32 none = 0; 6489 U32 max = 0; 6490 I32 bits; 6491 I32 havefinal = 0; 6492 U32 final = 0; 6493 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF; 6494 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF; 6495 U8* tsave = NULL; 6496 U8* rsave = NULL; 6497 const U32 flags = UTF8_ALLOW_DEFAULT; 6498 6499 if (!from_utf) { 6500 STRLEN len = tlen; 6501 t = tsave = bytes_to_utf8(t, &len); 6502 tend = t + len; 6503 } 6504 if (!to_utf && rlen) { 6505 STRLEN len = rlen; 6506 r = rsave = bytes_to_utf8(r, &len); 6507 rend = r + len; 6508 } 6509 6510 /* There is a snag with this code on EBCDIC: scan_const() in toke.c has 6511 * encoded chars in native encoding which makes ranges in the EBCDIC 0..255 6512 * odd. */ 6513 6514 if (complement) { 6515 /* utf8 and /c: 6516 * replace t/tlen/tend with a version that has the ranges 6517 * complemented 6518 */ 6519 U8 tmpbuf[UTF8_MAXBYTES+1]; 6520 UV *cp; 6521 UV nextmin = 0; 6522 Newx(cp, 2*tlen, UV); 6523 i = 0; 6524 transv = newSVpvs(""); 6525 6526 /* convert search string into array of (start,end) range 6527 * codepoint pairs stored in cp[]. Most "ranges" will start 6528 * and end at the same char */ 6529 while (t < tend) { 6530 cp[2*i] = utf8n_to_uvchr(t, tend-t, &ulen, flags); 6531 t += ulen; 6532 /* the toker converts X-Y into (X, ILLEGAL_UTF8_BYTE, Y) */ 6533 if (t < tend && *t == ILLEGAL_UTF8_BYTE) { 6534 t++; 6535 cp[2*i+1] = utf8n_to_uvchr(t, tend-t, &ulen, flags); 6536 t += ulen; 6537 } 6538 else { 6539 cp[2*i+1] = cp[2*i]; 6540 } 6541 i++; 6542 } 6543 6544 /* sort the ranges */ 6545 qsort(cp, i, 2*sizeof(UV), uvcompare); 6546 6547 /* Create a utf8 string containing the complement of the 6548 * codepoint ranges. For example if cp[] contains [A,B], [C,D], 6549 * then transv will contain the equivalent of: 6550 * join '', map chr, 0, ILLEGAL_UTF8_BYTE, A - 1, 6551 * B + 1, ILLEGAL_UTF8_BYTE, C - 1, 6552 * D + 1, ILLEGAL_UTF8_BYTE, 0x7fffffff; 6553 * A range of a single char skips the ILLEGAL_UTF8_BYTE and 6554 * end cp. 6555 */ 6556 for (j = 0; j < i; j++) { 6557 UV val = cp[2*j]; 6558 diff = val - nextmin; 6559 if (diff > 0) { 6560 t = uvchr_to_utf8(tmpbuf,nextmin); 6561 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf); 6562 if (diff > 1) { 6563 U8 range_mark = ILLEGAL_UTF8_BYTE; 6564 t = uvchr_to_utf8(tmpbuf, val - 1); 6565 sv_catpvn(transv, (char *)&range_mark, 1); 6566 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf); 6567 } 6568 } 6569 val = cp[2*j+1]; 6570 if (val >= nextmin) 6571 nextmin = val + 1; 6572 } 6573 6574 t = uvchr_to_utf8(tmpbuf,nextmin); 6575 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf); 6576 { 6577 U8 range_mark = ILLEGAL_UTF8_BYTE; 6578 sv_catpvn(transv, (char *)&range_mark, 1); 6579 } 6580 t = uvchr_to_utf8(tmpbuf, 0x7fffffff); 6581 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf); 6582 t = (const U8*)SvPVX_const(transv); 6583 tlen = SvCUR(transv); 6584 tend = t + tlen; 6585 Safefree(cp); 6586 } 6587 else if (!rlen && !del) { 6588 r = t; rlen = tlen; rend = tend; 6589 } 6590 6591 if (!squash) { 6592 if ((!rlen && !del) || t == r || 6593 (tlen == rlen && memEQ((char *)t, (char *)r, tlen))) 6594 { 6595 o->op_private |= OPpTRANS_IDENTICAL; 6596 } 6597 } 6598 6599 /* extract char ranges from t and r and append them to listsv */ 6600 6601 while (t < tend || tfirst <= tlast) { 6602 /* see if we need more "t" chars */ 6603 if (tfirst > tlast) { 6604 tfirst = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags); 6605 t += ulen; 6606 if (t < tend && *t == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */ 6607 t++; 6608 tlast = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags); 6609 t += ulen; 6610 } 6611 else 6612 tlast = tfirst; 6613 } 6614 6615 /* now see if we need more "r" chars */ 6616 if (rfirst > rlast) { 6617 if (r < rend) { 6618 rfirst = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags); 6619 r += ulen; 6620 if (r < rend && *r == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */ 6621 r++; 6622 rlast = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags); 6623 r += ulen; 6624 } 6625 else 6626 rlast = rfirst; 6627 } 6628 else { 6629 if (!havefinal++) 6630 final = rlast; 6631 rfirst = rlast = 0xffffffff; 6632 } 6633 } 6634 6635 /* now see which range will peter out first, if either. */ 6636 tdiff = tlast - tfirst; 6637 rdiff = rlast - rfirst; 6638 tcount += tdiff + 1; 6639 rcount += rdiff + 1; 6640 6641 if (tdiff <= rdiff) 6642 diff = tdiff; 6643 else 6644 diff = rdiff; 6645 6646 if (rfirst == 0xffffffff) { 6647 diff = tdiff; /* oops, pretend rdiff is infinite */ 6648 if (diff > 0) 6649 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n", 6650 (long)tfirst, (long)tlast); 6651 else 6652 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst); 6653 } 6654 else { 6655 if (diff > 0) 6656 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n", 6657 (long)tfirst, (long)(tfirst + diff), 6658 (long)rfirst); 6659 else 6660 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n", 6661 (long)tfirst, (long)rfirst); 6662 6663 if (rfirst + diff > max) 6664 max = rfirst + diff; 6665 if (!grows) 6666 grows = (tfirst < rfirst && 6667 UVCHR_SKIP(tfirst) < UVCHR_SKIP(rfirst + diff)); 6668 rfirst += diff + 1; 6669 } 6670 tfirst += diff + 1; 6671 } 6672 6673 /* compile listsv into a swash and attach to o */ 6674 6675 none = ++max; 6676 if (del) 6677 ++max; 6678 6679 if (max > 0xffff) 6680 bits = 32; 6681 else if (max > 0xff) 6682 bits = 16; 6683 else 6684 bits = 8; 6685 6686 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none)); 6687 #ifdef USE_ITHREADS 6688 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVf_READONLY); 6689 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix)); 6690 PAD_SETSV(cPADOPo->op_padix, swash); 6691 SvPADTMP_on(swash); 6692 SvREADONLY_on(swash); 6693 #else 6694 cSVOPo->op_sv = swash; 6695 #endif 6696 SvREFCNT_dec(listsv); 6697 SvREFCNT_dec(transv); 6698 6699 if (!del && havefinal && rlen) 6700 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5, 6701 newSVuv((UV)final), 0); 6702 6703 Safefree(tsave); 6704 Safefree(rsave); 6705 6706 tlen = tcount; 6707 rlen = rcount; 6708 if (r < rend) 6709 rlen++; 6710 else if (rlast == 0xffffffff) 6711 rlen = 0; 6712 6713 goto warnins; 6714 } 6715 6716 /* Non-utf8 case: set o->op_pv to point to a simple 256+ entry lookup 6717 * table. Entries with the value -1 indicate chars not to be 6718 * translated, while -2 indicates a search char without a 6719 * corresponding replacement char under /d. 6720 * 6721 * Normally, the table has 256 slots. However, in the presence of 6722 * /c, the search charlist has an implicit \x{100}-\x{7fffffff} 6723 * added, and if there are enough replacement chars to start pairing 6724 * with the \x{100},... search chars, then a larger (> 256) table 6725 * is allocated. 6726 * 6727 * In addition, regardless of whether under /c, an extra slot at the 6728 * end is used to store the final repeating char, or -3 under an empty 6729 * replacement list, or -2 under /d; which makes the runtime code 6730 * easier. 6731 * 6732 * The toker will have already expanded char ranges in t and r. 6733 */ 6734 6735 /* Initially allocate 257-slot table: 256 for basic (non /c) usage, 6736 * plus final slot for repeat/-2/-3. Later we realloc if excess > * 0. 6737 * The OPtrans_map struct already contains one slot; hence the -1. 6738 */ 6739 struct_size = sizeof(OPtrans_map) + (256 - 1 + 1)*sizeof(short); 6740 tbl = (OPtrans_map*)PerlMemShared_calloc(struct_size, 1); 6741 tbl->size = 256; 6742 cPVOPo->op_pv = (char*)tbl; 6743 6744 if (complement) { 6745 Size_t excess; 6746 6747 /* in this branch, j is a count of 'consumed' (i.e. paired off 6748 * with a search char) replacement chars (so j <= rlen always) 6749 */ 6750 for (i = 0; i < tlen; i++) 6751 tbl->map[t[i]] = -1; 6752 6753 for (i = 0, j = 0; i < 256; i++) { 6754 if (!tbl->map[i]) { 6755 if (j == rlen) { 6756 if (del) 6757 tbl->map[i] = -2; 6758 else if (rlen) 6759 tbl->map[i] = r[j-1]; 6760 else 6761 tbl->map[i] = (short)i; 6762 } 6763 else { 6764 tbl->map[i] = r[j++]; 6765 } 6766 if ( tbl->map[i] >= 0 6767 && UVCHR_IS_INVARIANT((UV)i) 6768 && !UVCHR_IS_INVARIANT((UV)(tbl->map[i])) 6769 ) 6770 grows = TRUE; 6771 } 6772 } 6773 6774 ASSUME(j <= rlen); 6775 excess = rlen - j; 6776 6777 if (excess) { 6778 /* More replacement chars than search chars: 6779 * store excess replacement chars at end of main table. 6780 */ 6781 6782 struct_size += excess; 6783 tbl = (OPtrans_map*)PerlMemShared_realloc(tbl, 6784 struct_size + excess * sizeof(short)); 6785 tbl->size += excess; 6786 cPVOPo->op_pv = (char*)tbl; 6787 6788 for (i = 0; i < excess; i++) 6789 tbl->map[i + 256] = r[j+i]; 6790 } 6791 else { 6792 /* no more replacement chars than search chars */ 6793 if (!rlen && !del && !squash) 6794 o->op_private |= OPpTRANS_IDENTICAL; 6795 } 6796 6797 tbl->map[tbl->size] = del ? -2 : rlen ? r[rlen - 1] : -3; 6798 } 6799 else { 6800 if (!rlen && !del) { 6801 r = t; rlen = tlen; 6802 if (!squash) 6803 o->op_private |= OPpTRANS_IDENTICAL; 6804 } 6805 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) { 6806 o->op_private |= OPpTRANS_IDENTICAL; 6807 } 6808 6809 for (i = 0; i < 256; i++) 6810 tbl->map[i] = -1; 6811 for (i = 0, j = 0; i < tlen; i++,j++) { 6812 if (j >= rlen) { 6813 if (del) { 6814 if (tbl->map[t[i]] == -1) 6815 tbl->map[t[i]] = -2; 6816 continue; 6817 } 6818 --j; 6819 } 6820 if (tbl->map[t[i]] == -1) { 6821 if ( UVCHR_IS_INVARIANT(t[i]) 6822 && ! UVCHR_IS_INVARIANT(r[j])) 6823 grows = TRUE; 6824 tbl->map[t[i]] = r[j]; 6825 } 6826 } 6827 tbl->map[tbl->size] = del ? -1 : rlen ? -1 : -3; 6828 } 6829 6830 /* both non-utf8 and utf8 code paths end up here */ 6831 6832 warnins: 6833 if(del && rlen == tlen) { 6834 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator"); 6835 } else if(rlen > tlen && !complement) { 6836 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list"); 6837 } 6838 6839 if (grows) 6840 o->op_private |= OPpTRANS_GROWS; 6841 op_free(expr); 6842 op_free(repl); 6843 6844 return o; 6845 } 6846 6847 6848 /* 6849 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags 6850 6851 Constructs, checks, and returns an op of any pattern matching type. 6852 C<type> is the opcode. C<flags> gives the eight bits of C<op_flags> 6853 and, shifted up eight bits, the eight bits of C<op_private>. 6854 6855 =cut 6856 */ 6857 6858 OP * 6859 Perl_newPMOP(pTHX_ I32 type, I32 flags) 6860 { 6861 dVAR; 6862 PMOP *pmop; 6863 6864 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP 6865 || type == OP_CUSTOM); 6866 6867 NewOp(1101, pmop, 1, PMOP); 6868 OpTYPE_set(pmop, type); 6869 pmop->op_flags = (U8)flags; 6870 pmop->op_private = (U8)(0 | (flags >> 8)); 6871 if (PL_opargs[type] & OA_RETSCALAR) 6872 scalar((OP *)pmop); 6873 6874 if (PL_hints & HINT_RE_TAINT) 6875 pmop->op_pmflags |= PMf_RETAINT; 6876 #ifdef USE_LOCALE_CTYPE 6877 if (IN_LC_COMPILETIME(LC_CTYPE)) { 6878 set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET); 6879 } 6880 else 6881 #endif 6882 if (IN_UNI_8_BIT) { 6883 set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET); 6884 } 6885 if (PL_hints & HINT_RE_FLAGS) { 6886 SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_ 6887 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0 6888 ); 6889 if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags); 6890 reflags = Perl_refcounted_he_fetch_pvn(aTHX_ 6891 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0 6892 ); 6893 if (reflags && SvOK(reflags)) { 6894 set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags)); 6895 } 6896 } 6897 6898 6899 #ifdef USE_ITHREADS 6900 assert(SvPOK(PL_regex_pad[0])); 6901 if (SvCUR(PL_regex_pad[0])) { 6902 /* Pop off the "packed" IV from the end. */ 6903 SV *const repointer_list = PL_regex_pad[0]; 6904 const char *p = SvEND(repointer_list) - sizeof(IV); 6905 const IV offset = *((IV*)p); 6906 6907 assert(SvCUR(repointer_list) % sizeof(IV) == 0); 6908 6909 SvEND_set(repointer_list, p); 6910 6911 pmop->op_pmoffset = offset; 6912 /* This slot should be free, so assert this: */ 6913 assert(PL_regex_pad[offset] == &PL_sv_undef); 6914 } else { 6915 SV * const repointer = &PL_sv_undef; 6916 av_push(PL_regex_padav, repointer); 6917 pmop->op_pmoffset = av_tindex(PL_regex_padav); 6918 PL_regex_pad = AvARRAY(PL_regex_padav); 6919 } 6920 #endif 6921 6922 return CHECKOP(type, pmop); 6923 } 6924 6925 static void 6926 S_set_haseval(pTHX) 6927 { 6928 PADOFFSET i = 1; 6929 PL_cv_has_eval = 1; 6930 /* Any pad names in scope are potentially lvalues. */ 6931 for (; i < PadnamelistMAXNAMED(PL_comppad_name); i++) { 6932 PADNAME *pn = PAD_COMPNAME_SV(i); 6933 if (!pn || !PadnameLEN(pn)) 6934 continue; 6935 if (PadnameOUTER(pn) || PadnameIN_SCOPE(pn, PL_cop_seqmax)) 6936 S_mark_padname_lvalue(aTHX_ pn); 6937 } 6938 } 6939 6940 /* Given some sort of match op o, and an expression expr containing a 6941 * pattern, either compile expr into a regex and attach it to o (if it's 6942 * constant), or convert expr into a runtime regcomp op sequence (if it's 6943 * not) 6944 * 6945 * Flags currently has 2 bits of meaning: 6946 * 1: isreg indicates that the pattern is part of a regex construct, eg 6947 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or 6948 * split "pattern", which aren't. In the former case, expr will be a list 6949 * if the pattern contains more than one term (eg /a$b/). 6950 * 2: The pattern is for a split. 6951 * 6952 * When the pattern has been compiled within a new anon CV (for 6953 * qr/(?{...})/ ), then floor indicates the savestack level just before 6954 * the new sub was created 6955 */ 6956 6957 OP * 6958 Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, UV flags, I32 floor) 6959 { 6960 PMOP *pm; 6961 LOGOP *rcop; 6962 I32 repl_has_vars = 0; 6963 bool is_trans = (o->op_type == OP_TRANS || o->op_type == OP_TRANSR); 6964 bool is_compiletime; 6965 bool has_code; 6966 bool isreg = cBOOL(flags & 1); 6967 bool is_split = cBOOL(flags & 2); 6968 6969 PERL_ARGS_ASSERT_PMRUNTIME; 6970 6971 if (is_trans) { 6972 return pmtrans(o, expr, repl); 6973 } 6974 6975 /* find whether we have any runtime or code elements; 6976 * at the same time, temporarily set the op_next of each DO block; 6977 * then when we LINKLIST, this will cause the DO blocks to be excluded 6978 * from the op_next chain (and from having LINKLIST recursively 6979 * applied to them). We fix up the DOs specially later */ 6980 6981 is_compiletime = 1; 6982 has_code = 0; 6983 if (expr->op_type == OP_LIST) { 6984 OP *o; 6985 for (o = cLISTOPx(expr)->op_first; o; o = OpSIBLING(o)) { 6986 if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)) { 6987 has_code = 1; 6988 assert(!o->op_next); 6989 if (UNLIKELY(!OpHAS_SIBLING(o))) { 6990 assert(PL_parser && PL_parser->error_count); 6991 /* This can happen with qr/ (?{(^{})/. Just fake up 6992 the op we were expecting to see, to avoid crashing 6993 elsewhere. */ 6994 op_sibling_splice(expr, o, 0, 6995 newSVOP(OP_CONST, 0, &PL_sv_no)); 6996 } 6997 o->op_next = OpSIBLING(o); 6998 } 6999 else if (o->op_type != OP_CONST && o->op_type != OP_PUSHMARK) 7000 is_compiletime = 0; 7001 } 7002 } 7003 else if (expr->op_type != OP_CONST) 7004 is_compiletime = 0; 7005 7006 LINKLIST(expr); 7007 7008 /* fix up DO blocks; treat each one as a separate little sub; 7009 * also, mark any arrays as LIST/REF */ 7010 7011 if (expr->op_type == OP_LIST) { 7012 OP *o; 7013 for (o = cLISTOPx(expr)->op_first; o; o = OpSIBLING(o)) { 7014 7015 if (o->op_type == OP_PADAV || o->op_type == OP_RV2AV) { 7016 assert( !(o->op_flags & OPf_WANT)); 7017 /* push the array rather than its contents. The regex 7018 * engine will retrieve and join the elements later */ 7019 o->op_flags |= (OPf_WANT_LIST | OPf_REF); 7020 continue; 7021 } 7022 7023 if (!(o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL))) 7024 continue; 7025 o->op_next = NULL; /* undo temporary hack from above */ 7026 scalar(o); 7027 LINKLIST(o); 7028 if (cLISTOPo->op_first->op_type == OP_LEAVE) { 7029 LISTOP *leaveop = cLISTOPx(cLISTOPo->op_first); 7030 /* skip ENTER */ 7031 assert(leaveop->op_first->op_type == OP_ENTER); 7032 assert(OpHAS_SIBLING(leaveop->op_first)); 7033 o->op_next = OpSIBLING(leaveop->op_first); 7034 /* skip leave */ 7035 assert(leaveop->op_flags & OPf_KIDS); 7036 assert(leaveop->op_last->op_next == (OP*)leaveop); 7037 leaveop->op_next = NULL; /* stop on last op */ 7038 op_null((OP*)leaveop); 7039 } 7040 else { 7041 /* skip SCOPE */ 7042 OP *scope = cLISTOPo->op_first; 7043 assert(scope->op_type == OP_SCOPE); 7044 assert(scope->op_flags & OPf_KIDS); 7045 scope->op_next = NULL; /* stop on last op */ 7046 op_null(scope); 7047 } 7048 7049 /* XXX optimize_optree() must be called on o before 7050 * CALL_PEEP(), as currently S_maybe_multiconcat() can't 7051 * currently cope with a peephole-optimised optree. 7052 * Calling optimize_optree() here ensures that condition 7053 * is met, but may mean optimize_optree() is applied 7054 * to the same optree later (where hopefully it won't do any 7055 * harm as it can't convert an op to multiconcat if it's 7056 * already been converted */ 7057 optimize_optree(o); 7058 7059 /* have to peep the DOs individually as we've removed it from 7060 * the op_next chain */ 7061 CALL_PEEP(o); 7062 S_prune_chain_head(&(o->op_next)); 7063 if (is_compiletime) 7064 /* runtime finalizes as part of finalizing whole tree */ 7065 finalize_optree(o); 7066 } 7067 } 7068 else if (expr->op_type == OP_PADAV || expr->op_type == OP_RV2AV) { 7069 assert( !(expr->op_flags & OPf_WANT)); 7070 /* push the array rather than its contents. The regex 7071 * engine will retrieve and join the elements later */ 7072 expr->op_flags |= (OPf_WANT_LIST | OPf_REF); 7073 } 7074 7075 PL_hints |= HINT_BLOCK_SCOPE; 7076 pm = (PMOP*)o; 7077 assert(floor==0 || (pm->op_pmflags & PMf_HAS_CV)); 7078 7079 if (is_compiletime) { 7080 U32 rx_flags = pm->op_pmflags & RXf_PMf_COMPILETIME; 7081 regexp_engine const *eng = current_re_engine(); 7082 7083 if (is_split) { 7084 /* make engine handle split ' ' specially */ 7085 pm->op_pmflags |= PMf_SPLIT; 7086 rx_flags |= RXf_SPLIT; 7087 } 7088 7089 if (!has_code || !eng->op_comp) { 7090 /* compile-time simple constant pattern */ 7091 7092 if ((pm->op_pmflags & PMf_HAS_CV) && !has_code) { 7093 /* whoops! we guessed that a qr// had a code block, but we 7094 * were wrong (e.g. /[(?{}]/ ). Throw away the PL_compcv 7095 * that isn't required now. Note that we have to be pretty 7096 * confident that nothing used that CV's pad while the 7097 * regex was parsed, except maybe op targets for \Q etc. 7098 * If there were any op targets, though, they should have 7099 * been stolen by constant folding. 7100 */ 7101 #ifdef DEBUGGING 7102 SSize_t i = 0; 7103 assert(PadnamelistMAXNAMED(PL_comppad_name) == 0); 7104 while (++i <= AvFILLp(PL_comppad)) { 7105 # ifdef USE_PAD_RESET 7106 /* under USE_PAD_RESET, pad swipe replaces a swiped 7107 * folded constant with a fresh padtmp */ 7108 assert(!PL_curpad[i] || SvPADTMP(PL_curpad[i])); 7109 # else 7110 assert(!PL_curpad[i]); 7111 # endif 7112 } 7113 #endif 7114 /* This LEAVE_SCOPE will restore PL_compcv to point to the 7115 * outer CV (the one whose slab holds the pm op). The 7116 * inner CV (which holds expr) will be freed later, once 7117 * all the entries on the parse stack have been popped on 7118 * return from this function. Which is why its safe to 7119 * call op_free(expr) below. 7120 */ 7121 LEAVE_SCOPE(floor); 7122 pm->op_pmflags &= ~PMf_HAS_CV; 7123 } 7124 7125 /* Skip compiling if parser found an error for this pattern */ 7126 if (pm->op_pmflags & PMf_HAS_ERROR) { 7127 return o; 7128 } 7129 7130 PM_SETRE(pm, 7131 eng->op_comp 7132 ? eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL, 7133 rx_flags, pm->op_pmflags) 7134 : Perl_re_op_compile(aTHX_ NULL, 0, expr, eng, NULL, NULL, 7135 rx_flags, pm->op_pmflags) 7136 ); 7137 op_free(expr); 7138 } 7139 else { 7140 /* compile-time pattern that includes literal code blocks */ 7141 7142 REGEXP* re; 7143 7144 /* Skip compiling if parser found an error for this pattern */ 7145 if (pm->op_pmflags & PMf_HAS_ERROR) { 7146 return o; 7147 } 7148 7149 re = eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL, 7150 rx_flags, 7151 (pm->op_pmflags | 7152 ((PL_hints & HINT_RE_EVAL) ? PMf_USE_RE_EVAL : 0)) 7153 ); 7154 PM_SETRE(pm, re); 7155 if (pm->op_pmflags & PMf_HAS_CV) { 7156 CV *cv; 7157 /* this QR op (and the anon sub we embed it in) is never 7158 * actually executed. It's just a placeholder where we can 7159 * squirrel away expr in op_code_list without the peephole 7160 * optimiser etc processing it for a second time */ 7161 OP *qr = newPMOP(OP_QR, 0); 7162 ((PMOP*)qr)->op_code_list = expr; 7163 7164 /* handle the implicit sub{} wrapped round the qr/(?{..})/ */ 7165 SvREFCNT_inc_simple_void(PL_compcv); 7166 cv = newATTRSUB(floor, 0, NULL, NULL, qr); 7167 ReANY(re)->qr_anoncv = cv; 7168 7169 /* attach the anon CV to the pad so that 7170 * pad_fixup_inner_anons() can find it */ 7171 (void)pad_add_anon(cv, o->op_type); 7172 SvREFCNT_inc_simple_void(cv); 7173 } 7174 else { 7175 pm->op_code_list = expr; 7176 } 7177 } 7178 } 7179 else { 7180 /* runtime pattern: build chain of regcomp etc ops */ 7181 bool reglist; 7182 PADOFFSET cv_targ = 0; 7183 7184 reglist = isreg && expr->op_type == OP_LIST; 7185 if (reglist) 7186 op_null(expr); 7187 7188 if (has_code) { 7189 pm->op_code_list = expr; 7190 /* don't free op_code_list; its ops are embedded elsewhere too */ 7191 pm->op_pmflags |= PMf_CODELIST_PRIVATE; 7192 } 7193 7194 if (is_split) 7195 /* make engine handle split ' ' specially */ 7196 pm->op_pmflags |= PMf_SPLIT; 7197 7198 /* the OP_REGCMAYBE is a placeholder in the non-threaded case 7199 * to allow its op_next to be pointed past the regcomp and 7200 * preceding stacking ops; 7201 * OP_REGCRESET is there to reset taint before executing the 7202 * stacking ops */ 7203 if (pm->op_pmflags & PMf_KEEP || TAINTING_get) 7204 expr = newUNOP((TAINTING_get ? OP_REGCRESET : OP_REGCMAYBE),0,expr); 7205 7206 if (pm->op_pmflags & PMf_HAS_CV) { 7207 /* we have a runtime qr with literal code. This means 7208 * that the qr// has been wrapped in a new CV, which 7209 * means that runtime consts, vars etc will have been compiled 7210 * against a new pad. So... we need to execute those ops 7211 * within the environment of the new CV. So wrap them in a call 7212 * to a new anon sub. i.e. for 7213 * 7214 * qr/a$b(?{...})/, 7215 * 7216 * we build an anon sub that looks like 7217 * 7218 * sub { "a", $b, '(?{...})' } 7219 * 7220 * and call it, passing the returned list to regcomp. 7221 * Or to put it another way, the list of ops that get executed 7222 * are: 7223 * 7224 * normal PMf_HAS_CV 7225 * ------ ------------------- 7226 * pushmark (for regcomp) 7227 * pushmark (for entersub) 7228 * anoncode 7229 * srefgen 7230 * entersub 7231 * regcreset regcreset 7232 * pushmark pushmark 7233 * const("a") const("a") 7234 * gvsv(b) gvsv(b) 7235 * const("(?{...})") const("(?{...})") 7236 * leavesub 7237 * regcomp regcomp 7238 */ 7239 7240 SvREFCNT_inc_simple_void(PL_compcv); 7241 CvLVALUE_on(PL_compcv); 7242 /* these lines are just an unrolled newANONATTRSUB */ 7243 expr = newSVOP(OP_ANONCODE, 0, 7244 MUTABLE_SV(newATTRSUB(floor, 0, NULL, NULL, expr))); 7245 cv_targ = expr->op_targ; 7246 expr = newUNOP(OP_REFGEN, 0, expr); 7247 7248 expr = list(force_list(newUNOP(OP_ENTERSUB, 0, scalar(expr)), 1)); 7249 } 7250 7251 rcop = alloc_LOGOP(OP_REGCOMP, scalar(expr), o); 7252 rcop->op_flags |= ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0) 7253 | (reglist ? OPf_STACKED : 0); 7254 rcop->op_targ = cv_targ; 7255 7256 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */ 7257 if (PL_hints & HINT_RE_EVAL) 7258 S_set_haseval(aTHX); 7259 7260 /* establish postfix order */ 7261 if (expr->op_type == OP_REGCRESET || expr->op_type == OP_REGCMAYBE) { 7262 LINKLIST(expr); 7263 rcop->op_next = expr; 7264 ((UNOP*)expr)->op_first->op_next = (OP*)rcop; 7265 } 7266 else { 7267 rcop->op_next = LINKLIST(expr); 7268 expr->op_next = (OP*)rcop; 7269 } 7270 7271 op_prepend_elem(o->op_type, scalar((OP*)rcop), o); 7272 } 7273 7274 if (repl) { 7275 OP *curop = repl; 7276 bool konst; 7277 /* If we are looking at s//.../e with a single statement, get past 7278 the implicit do{}. */ 7279 if (curop->op_type == OP_NULL && curop->op_flags & OPf_KIDS 7280 && cUNOPx(curop)->op_first->op_type == OP_SCOPE 7281 && cUNOPx(curop)->op_first->op_flags & OPf_KIDS) 7282 { 7283 OP *sib; 7284 OP *kid = cUNOPx(cUNOPx(curop)->op_first)->op_first; 7285 if (kid->op_type == OP_NULL && (sib = OpSIBLING(kid)) 7286 && !OpHAS_SIBLING(sib)) 7287 curop = sib; 7288 } 7289 if (curop->op_type == OP_CONST) 7290 konst = TRUE; 7291 else if (( (curop->op_type == OP_RV2SV || 7292 curop->op_type == OP_RV2AV || 7293 curop->op_type == OP_RV2HV || 7294 curop->op_type == OP_RV2GV) 7295 && cUNOPx(curop)->op_first 7296 && cUNOPx(curop)->op_first->op_type == OP_GV ) 7297 || curop->op_type == OP_PADSV 7298 || curop->op_type == OP_PADAV 7299 || curop->op_type == OP_PADHV 7300 || curop->op_type == OP_PADANY) { 7301 repl_has_vars = 1; 7302 konst = TRUE; 7303 } 7304 else konst = FALSE; 7305 if (konst 7306 && !(repl_has_vars 7307 && (!PM_GETRE(pm) 7308 || !RX_PRELEN(PM_GETRE(pm)) 7309 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN))) 7310 { 7311 pm->op_pmflags |= PMf_CONST; /* const for long enough */ 7312 op_prepend_elem(o->op_type, scalar(repl), o); 7313 } 7314 else { 7315 rcop = alloc_LOGOP(OP_SUBSTCONT, scalar(repl), o); 7316 rcop->op_private = 1; 7317 7318 /* establish postfix order */ 7319 rcop->op_next = LINKLIST(repl); 7320 repl->op_next = (OP*)rcop; 7321 7322 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop); 7323 assert(!(pm->op_pmflags & PMf_ONCE)); 7324 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop); 7325 rcop->op_next = 0; 7326 } 7327 } 7328 7329 return (OP*)pm; 7330 } 7331 7332 /* 7333 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv 7334 7335 Constructs, checks, and returns an op of any type that involves an 7336 embedded SV. C<type> is the opcode. C<flags> gives the eight bits 7337 of C<op_flags>. C<sv> gives the SV to embed in the op; this function 7338 takes ownership of one reference to it. 7339 7340 =cut 7341 */ 7342 7343 OP * 7344 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv) 7345 { 7346 dVAR; 7347 SVOP *svop; 7348 7349 PERL_ARGS_ASSERT_NEWSVOP; 7350 7351 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP 7352 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP 7353 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP 7354 || type == OP_CUSTOM); 7355 7356 NewOp(1101, svop, 1, SVOP); 7357 OpTYPE_set(svop, type); 7358 svop->op_sv = sv; 7359 svop->op_next = (OP*)svop; 7360 svop->op_flags = (U8)flags; 7361 svop->op_private = (U8)(0 | (flags >> 8)); 7362 if (PL_opargs[type] & OA_RETSCALAR) 7363 scalar((OP*)svop); 7364 if (PL_opargs[type] & OA_TARGET) 7365 svop->op_targ = pad_alloc(type, SVs_PADTMP); 7366 return CHECKOP(type, svop); 7367 } 7368 7369 /* 7370 =for apidoc Am|OP *|newDEFSVOP| 7371 7372 Constructs and returns an op to access C<$_>. 7373 7374 =cut 7375 */ 7376 7377 OP * 7378 Perl_newDEFSVOP(pTHX) 7379 { 7380 return newSVREF(newGVOP(OP_GV, 0, PL_defgv)); 7381 } 7382 7383 #ifdef USE_ITHREADS 7384 7385 /* 7386 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv 7387 7388 Constructs, checks, and returns an op of any type that involves a 7389 reference to a pad element. C<type> is the opcode. C<flags> gives the 7390 eight bits of C<op_flags>. A pad slot is automatically allocated, and 7391 is populated with C<sv>; this function takes ownership of one reference 7392 to it. 7393 7394 This function only exists if Perl has been compiled to use ithreads. 7395 7396 =cut 7397 */ 7398 7399 OP * 7400 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv) 7401 { 7402 dVAR; 7403 PADOP *padop; 7404 7405 PERL_ARGS_ASSERT_NEWPADOP; 7406 7407 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP 7408 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP 7409 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP 7410 || type == OP_CUSTOM); 7411 7412 NewOp(1101, padop, 1, PADOP); 7413 OpTYPE_set(padop, type); 7414 padop->op_padix = 7415 pad_alloc(type, isGV(sv) ? SVf_READONLY : SVs_PADTMP); 7416 SvREFCNT_dec(PAD_SVl(padop->op_padix)); 7417 PAD_SETSV(padop->op_padix, sv); 7418 assert(sv); 7419 padop->op_next = (OP*)padop; 7420 padop->op_flags = (U8)flags; 7421 if (PL_opargs[type] & OA_RETSCALAR) 7422 scalar((OP*)padop); 7423 if (PL_opargs[type] & OA_TARGET) 7424 padop->op_targ = pad_alloc(type, SVs_PADTMP); 7425 return CHECKOP(type, padop); 7426 } 7427 7428 #endif /* USE_ITHREADS */ 7429 7430 /* 7431 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv 7432 7433 Constructs, checks, and returns an op of any type that involves an 7434 embedded reference to a GV. C<type> is the opcode. C<flags> gives the 7435 eight bits of C<op_flags>. C<gv> identifies the GV that the op should 7436 reference; calling this function does not transfer ownership of any 7437 reference to it. 7438 7439 =cut 7440 */ 7441 7442 OP * 7443 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv) 7444 { 7445 PERL_ARGS_ASSERT_NEWGVOP; 7446 7447 #ifdef USE_ITHREADS 7448 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv)); 7449 #else 7450 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv)); 7451 #endif 7452 } 7453 7454 /* 7455 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv 7456 7457 Constructs, checks, and returns an op of any type that involves an 7458 embedded C-level pointer (PV). C<type> is the opcode. C<flags> gives 7459 the eight bits of C<op_flags>. C<pv> supplies the C-level pointer. 7460 Depending on the op type, the memory referenced by C<pv> may be freed 7461 when the op is destroyed. If the op is of a freeing type, C<pv> must 7462 have been allocated using C<PerlMemShared_malloc>. 7463 7464 =cut 7465 */ 7466 7467 OP * 7468 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv) 7469 { 7470 dVAR; 7471 const bool utf8 = cBOOL(flags & SVf_UTF8); 7472 PVOP *pvop; 7473 7474 flags &= ~SVf_UTF8; 7475 7476 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP 7477 || type == OP_RUNCV || type == OP_CUSTOM 7478 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP); 7479 7480 NewOp(1101, pvop, 1, PVOP); 7481 OpTYPE_set(pvop, type); 7482 pvop->op_pv = pv; 7483 pvop->op_next = (OP*)pvop; 7484 pvop->op_flags = (U8)flags; 7485 pvop->op_private = utf8 ? OPpPV_IS_UTF8 : 0; 7486 if (PL_opargs[type] & OA_RETSCALAR) 7487 scalar((OP*)pvop); 7488 if (PL_opargs[type] & OA_TARGET) 7489 pvop->op_targ = pad_alloc(type, SVs_PADTMP); 7490 return CHECKOP(type, pvop); 7491 } 7492 7493 void 7494 Perl_package(pTHX_ OP *o) 7495 { 7496 SV *const sv = cSVOPo->op_sv; 7497 7498 PERL_ARGS_ASSERT_PACKAGE; 7499 7500 SAVEGENERICSV(PL_curstash); 7501 save_item(PL_curstname); 7502 7503 PL_curstash = (HV *)SvREFCNT_inc(gv_stashsv(sv, GV_ADD)); 7504 7505 sv_setsv(PL_curstname, sv); 7506 7507 PL_hints |= HINT_BLOCK_SCOPE; 7508 PL_parser->copline = NOLINE; 7509 7510 op_free(o); 7511 } 7512 7513 void 7514 Perl_package_version( pTHX_ OP *v ) 7515 { 7516 U32 savehints = PL_hints; 7517 PERL_ARGS_ASSERT_PACKAGE_VERSION; 7518 PL_hints &= ~HINT_STRICT_VARS; 7519 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv ); 7520 PL_hints = savehints; 7521 op_free(v); 7522 } 7523 7524 void 7525 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg) 7526 { 7527 OP *pack; 7528 OP *imop; 7529 OP *veop; 7530 SV *use_version = NULL; 7531 7532 PERL_ARGS_ASSERT_UTILIZE; 7533 7534 if (idop->op_type != OP_CONST) 7535 Perl_croak(aTHX_ "Module name must be constant"); 7536 7537 veop = NULL; 7538 7539 if (version) { 7540 SV * const vesv = ((SVOP*)version)->op_sv; 7541 7542 if (!arg && !SvNIOKp(vesv)) { 7543 arg = version; 7544 } 7545 else { 7546 OP *pack; 7547 SV *meth; 7548 7549 if (version->op_type != OP_CONST || !SvNIOKp(vesv)) 7550 Perl_croak(aTHX_ "Version number must be a constant number"); 7551 7552 /* Make copy of idop so we don't free it twice */ 7553 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv)); 7554 7555 /* Fake up a method call to VERSION */ 7556 meth = newSVpvs_share("VERSION"); 7557 veop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL, 7558 op_append_elem(OP_LIST, 7559 op_prepend_elem(OP_LIST, pack, version), 7560 newMETHOP_named(OP_METHOD_NAMED, 0, meth))); 7561 } 7562 } 7563 7564 /* Fake up an import/unimport */ 7565 if (arg && arg->op_type == OP_STUB) { 7566 imop = arg; /* no import on explicit () */ 7567 } 7568 else if (SvNIOKp(((SVOP*)idop)->op_sv)) { 7569 imop = NULL; /* use 5.0; */ 7570 if (aver) 7571 use_version = ((SVOP*)idop)->op_sv; 7572 else 7573 idop->op_private |= OPpCONST_NOVER; 7574 } 7575 else { 7576 SV *meth; 7577 7578 /* Make copy of idop so we don't free it twice */ 7579 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv)); 7580 7581 /* Fake up a method call to import/unimport */ 7582 meth = aver 7583 ? newSVpvs_share("import") : newSVpvs_share("unimport"); 7584 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL, 7585 op_append_elem(OP_LIST, 7586 op_prepend_elem(OP_LIST, pack, arg), 7587 newMETHOP_named(OP_METHOD_NAMED, 0, meth) 7588 )); 7589 } 7590 7591 /* Fake up the BEGIN {}, which does its thing immediately. */ 7592 newATTRSUB(floor, 7593 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")), 7594 NULL, 7595 NULL, 7596 op_append_elem(OP_LINESEQ, 7597 op_append_elem(OP_LINESEQ, 7598 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)), 7599 newSTATEOP(0, NULL, veop)), 7600 newSTATEOP(0, NULL, imop) )); 7601 7602 if (use_version) { 7603 /* Enable the 7604 * feature bundle that corresponds to the required version. */ 7605 use_version = sv_2mortal(new_version(use_version)); 7606 S_enable_feature_bundle(aTHX_ use_version); 7607 7608 /* If a version >= 5.11.0 is requested, strictures are on by default! */ 7609 if (vcmp(use_version, 7610 sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) { 7611 if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS)) 7612 PL_hints |= HINT_STRICT_REFS; 7613 if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS)) 7614 PL_hints |= HINT_STRICT_SUBS; 7615 if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS)) 7616 PL_hints |= HINT_STRICT_VARS; 7617 } 7618 /* otherwise they are off */ 7619 else { 7620 if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS)) 7621 PL_hints &= ~HINT_STRICT_REFS; 7622 if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS)) 7623 PL_hints &= ~HINT_STRICT_SUBS; 7624 if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS)) 7625 PL_hints &= ~HINT_STRICT_VARS; 7626 } 7627 } 7628 7629 /* The "did you use incorrect case?" warning used to be here. 7630 * The problem is that on case-insensitive filesystems one 7631 * might get false positives for "use" (and "require"): 7632 * "use Strict" or "require CARP" will work. This causes 7633 * portability problems for the script: in case-strict 7634 * filesystems the script will stop working. 7635 * 7636 * The "incorrect case" warning checked whether "use Foo" 7637 * imported "Foo" to your namespace, but that is wrong, too: 7638 * there is no requirement nor promise in the language that 7639 * a Foo.pm should or would contain anything in package "Foo". 7640 * 7641 * There is very little Configure-wise that can be done, either: 7642 * the case-sensitivity of the build filesystem of Perl does not 7643 * help in guessing the case-sensitivity of the runtime environment. 7644 */ 7645 7646 PL_hints |= HINT_BLOCK_SCOPE; 7647 PL_parser->copline = NOLINE; 7648 COP_SEQMAX_INC; /* Purely for B::*'s benefit */ 7649 } 7650 7651 /* 7652 =head1 Embedding Functions 7653 7654 =for apidoc load_module 7655 7656 Loads the module whose name is pointed to by the string part of C<name>. 7657 Note that the actual module name, not its filename, should be given. 7658 Eg, "Foo::Bar" instead of "Foo/Bar.pm". ver, if specified and not NULL, 7659 provides version semantics similar to C<use Foo::Bar VERSION>. The optional 7660 trailing arguments can be used to specify arguments to the module's C<import()> 7661 method, similar to C<use Foo::Bar VERSION LIST>; their precise handling depends 7662 on the flags. The flags argument is a bitwise-ORed collection of any of 7663 C<PERL_LOADMOD_DENY>, C<PERL_LOADMOD_NOIMPORT>, or C<PERL_LOADMOD_IMPORT_OPS> 7664 (or 0 for no flags). 7665 7666 If C<PERL_LOADMOD_NOIMPORT> is set, the module is loaded as if with an empty 7667 import list, as in C<use Foo::Bar ()>; this is the only circumstance in which 7668 the trailing optional arguments may be omitted entirely. Otherwise, if 7669 C<PERL_LOADMOD_IMPORT_OPS> is set, the trailing arguments must consist of 7670 exactly one C<OP*>, containing the op tree that produces the relevant import 7671 arguments. Otherwise, the trailing arguments must all be C<SV*> values that 7672 will be used as import arguments; and the list must be terminated with C<(SV*) 7673 NULL>. If neither C<PERL_LOADMOD_NOIMPORT> nor C<PERL_LOADMOD_IMPORT_OPS> is 7674 set, the trailing C<NULL> pointer is needed even if no import arguments are 7675 desired. The reference count for each specified C<SV*> argument is 7676 decremented. In addition, the C<name> argument is modified. 7677 7678 If C<PERL_LOADMOD_DENY> is set, the module is loaded as if with C<no> rather 7679 than C<use>. 7680 7681 =cut */ 7682 7683 void 7684 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...) 7685 { 7686 va_list args; 7687 7688 PERL_ARGS_ASSERT_LOAD_MODULE; 7689 7690 va_start(args, ver); 7691 vload_module(flags, name, ver, &args); 7692 va_end(args); 7693 } 7694 7695 #ifdef PERL_IMPLICIT_CONTEXT 7696 void 7697 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...) 7698 { 7699 dTHX; 7700 va_list args; 7701 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT; 7702 va_start(args, ver); 7703 vload_module(flags, name, ver, &args); 7704 va_end(args); 7705 } 7706 #endif 7707 7708 void 7709 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args) 7710 { 7711 OP *veop, *imop; 7712 OP * modname; 7713 I32 floor; 7714 7715 PERL_ARGS_ASSERT_VLOAD_MODULE; 7716 7717 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure 7718 * that it has a PL_parser to play with while doing that, and also 7719 * that it doesn't mess with any existing parser, by creating a tmp 7720 * new parser with lex_start(). This won't actually be used for much, 7721 * since pp_require() will create another parser for the real work. 7722 * The ENTER/LEAVE pair protect callers from any side effects of use. 7723 * 7724 * start_subparse() creates a new PL_compcv. This means that any ops 7725 * allocated below will be allocated from that CV's op slab, and so 7726 * will be automatically freed if the utilise() fails 7727 */ 7728 7729 ENTER; 7730 SAVEVPTR(PL_curcop); 7731 lex_start(NULL, NULL, LEX_START_SAME_FILTER); 7732 floor = start_subparse(FALSE, 0); 7733 7734 modname = newSVOP(OP_CONST, 0, name); 7735 modname->op_private |= OPpCONST_BARE; 7736 if (ver) { 7737 veop = newSVOP(OP_CONST, 0, ver); 7738 } 7739 else 7740 veop = NULL; 7741 if (flags & PERL_LOADMOD_NOIMPORT) { 7742 imop = sawparens(newNULLLIST()); 7743 } 7744 else if (flags & PERL_LOADMOD_IMPORT_OPS) { 7745 imop = va_arg(*args, OP*); 7746 } 7747 else { 7748 SV *sv; 7749 imop = NULL; 7750 sv = va_arg(*args, SV*); 7751 while (sv) { 7752 imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); 7753 sv = va_arg(*args, SV*); 7754 } 7755 } 7756 7757 utilize(!(flags & PERL_LOADMOD_DENY), floor, veop, modname, imop); 7758 LEAVE; 7759 } 7760 7761 PERL_STATIC_INLINE OP * 7762 S_new_entersubop(pTHX_ GV *gv, OP *arg) 7763 { 7764 return newUNOP(OP_ENTERSUB, OPf_STACKED, 7765 newLISTOP(OP_LIST, 0, arg, 7766 newUNOP(OP_RV2CV, 0, 7767 newGVOP(OP_GV, 0, gv)))); 7768 } 7769 7770 OP * 7771 Perl_dofile(pTHX_ OP *term, I32 force_builtin) 7772 { 7773 OP *doop; 7774 GV *gv; 7775 7776 PERL_ARGS_ASSERT_DOFILE; 7777 7778 if (!force_builtin && (gv = gv_override("do", 2))) { 7779 doop = S_new_entersubop(aTHX_ gv, term); 7780 } 7781 else { 7782 doop = newUNOP(OP_DOFILE, 0, scalar(term)); 7783 } 7784 return doop; 7785 } 7786 7787 /* 7788 =head1 Optree construction 7789 7790 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval 7791 7792 Constructs, checks, and returns an C<lslice> (list slice) op. C<flags> 7793 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will 7794 be set automatically, and, shifted up eight bits, the eight bits of 7795 C<op_private>, except that the bit with value 1 or 2 is automatically 7796 set as required. C<listval> and C<subscript> supply the parameters of 7797 the slice; they are consumed by this function and become part of the 7798 constructed op tree. 7799 7800 =cut 7801 */ 7802 7803 OP * 7804 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval) 7805 { 7806 return newBINOP(OP_LSLICE, flags, 7807 list(force_list(subscript, 1)), 7808 list(force_list(listval, 1)) ); 7809 } 7810 7811 #define ASSIGN_LIST 1 7812 #define ASSIGN_REF 2 7813 7814 STATIC I32 7815 S_assignment_type(pTHX_ const OP *o) 7816 { 7817 unsigned type; 7818 U8 flags; 7819 U8 ret; 7820 7821 if (!o) 7822 return TRUE; 7823 7824 if (o->op_type == OP_SREFGEN) 7825 { 7826 OP * const kid = cUNOPx(cUNOPo->op_first)->op_first; 7827 type = kid->op_type; 7828 flags = o->op_flags | kid->op_flags; 7829 if (!(flags & OPf_PARENS) 7830 && (kid->op_type == OP_RV2AV || kid->op_type == OP_PADAV || 7831 kid->op_type == OP_RV2HV || kid->op_type == OP_PADHV )) 7832 return ASSIGN_REF; 7833 ret = ASSIGN_REF; 7834 } else { 7835 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS)) 7836 o = cUNOPo->op_first; 7837 flags = o->op_flags; 7838 type = o->op_type; 7839 ret = 0; 7840 } 7841 7842 if (type == OP_COND_EXPR) { 7843 OP * const sib = OpSIBLING(cLOGOPo->op_first); 7844 const I32 t = assignment_type(sib); 7845 const I32 f = assignment_type(OpSIBLING(sib)); 7846 7847 if (t == ASSIGN_LIST && f == ASSIGN_LIST) 7848 return ASSIGN_LIST; 7849 if ((t == ASSIGN_LIST) ^ (f == ASSIGN_LIST)) 7850 yyerror("Assignment to both a list and a scalar"); 7851 return FALSE; 7852 } 7853 7854 if (type == OP_LIST && 7855 (flags & OPf_WANT) == OPf_WANT_SCALAR && 7856 o->op_private & OPpLVAL_INTRO) 7857 return ret; 7858 7859 if (type == OP_LIST || flags & OPf_PARENS || 7860 type == OP_RV2AV || type == OP_RV2HV || 7861 type == OP_ASLICE || type == OP_HSLICE || 7862 type == OP_KVASLICE || type == OP_KVHSLICE || type == OP_REFGEN) 7863 return TRUE; 7864 7865 if (type == OP_PADAV || type == OP_PADHV) 7866 return TRUE; 7867 7868 if (type == OP_RV2SV) 7869 return ret; 7870 7871 return ret; 7872 } 7873 7874 static OP * 7875 S_newONCEOP(pTHX_ OP *initop, OP *padop) 7876 { 7877 dVAR; 7878 const PADOFFSET target = padop->op_targ; 7879 OP *const other = newOP(OP_PADSV, 7880 padop->op_flags 7881 | ((padop->op_private & ~OPpLVAL_INTRO) << 8)); 7882 OP *const first = newOP(OP_NULL, 0); 7883 OP *const nullop = newCONDOP(0, first, initop, other); 7884 /* XXX targlex disabled for now; see ticket #124160 7885 newCONDOP(0, first, S_maybe_targlex(aTHX_ initop), other); 7886 */ 7887 OP *const condop = first->op_next; 7888 7889 OpTYPE_set(condop, OP_ONCE); 7890 other->op_targ = target; 7891 nullop->op_flags |= OPf_WANT_SCALAR; 7892 7893 /* Store the initializedness of state vars in a separate 7894 pad entry. */ 7895 condop->op_targ = 7896 pad_add_name_pvn("$",1,padadd_NO_DUP_CHECK|padadd_STATE,0,0); 7897 /* hijacking PADSTALE for uninitialized state variables */ 7898 SvPADSTALE_on(PAD_SVl(condop->op_targ)); 7899 7900 return nullop; 7901 } 7902 7903 /* 7904 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right 7905 7906 Constructs, checks, and returns an assignment op. C<left> and C<right> 7907 supply the parameters of the assignment; they are consumed by this 7908 function and become part of the constructed op tree. 7909 7910 If C<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then 7911 a suitable conditional optree is constructed. If C<optype> is the opcode 7912 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that 7913 performs the binary operation and assigns the result to the left argument. 7914 Either way, if C<optype> is non-zero then C<flags> has no effect. 7915 7916 If C<optype> is zero, then a plain scalar or list assignment is 7917 constructed. Which type of assignment it is is automatically determined. 7918 C<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS> 7919 will be set automatically, and, shifted up eight bits, the eight bits 7920 of C<op_private>, except that the bit with value 1 or 2 is automatically 7921 set as required. 7922 7923 =cut 7924 */ 7925 7926 OP * 7927 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right) 7928 { 7929 OP *o; 7930 I32 assign_type; 7931 7932 if (optype) { 7933 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) { 7934 right = scalar(right); 7935 return newLOGOP(optype, 0, 7936 op_lvalue(scalar(left), optype), 7937 newBINOP(OP_SASSIGN, OPpASSIGN_BACKWARDS<<8, right, right)); 7938 } 7939 else { 7940 return newBINOP(optype, OPf_STACKED, 7941 op_lvalue(scalar(left), optype), scalar(right)); 7942 } 7943 } 7944 7945 if ((assign_type = assignment_type(left)) == ASSIGN_LIST) { 7946 OP *state_var_op = NULL; 7947 static const char no_list_state[] = "Initialization of state variables" 7948 " in list currently forbidden"; 7949 OP *curop; 7950 7951 if (left->op_type == OP_ASLICE || left->op_type == OP_HSLICE) 7952 left->op_private &= ~ OPpSLICEWARNING; 7953 7954 PL_modcount = 0; 7955 left = op_lvalue(left, OP_AASSIGN); 7956 curop = list(force_list(left, 1)); 7957 o = newBINOP(OP_AASSIGN, flags, list(force_list(right, 1)), curop); 7958 o->op_private = (U8)(0 | (flags >> 8)); 7959 7960 if (OP_TYPE_IS_OR_WAS(left, OP_LIST)) 7961 { 7962 OP *lop = ((LISTOP*)left)->op_first, *vop, *eop; 7963 if (!(left->op_flags & OPf_PARENS) && 7964 lop->op_type == OP_PUSHMARK && 7965 (vop = OpSIBLING(lop)) && 7966 (vop->op_type == OP_PADAV || vop->op_type == OP_PADHV) && 7967 !(vop->op_flags & OPf_PARENS) && 7968 (vop->op_private & (OPpLVAL_INTRO|OPpPAD_STATE)) == 7969 (OPpLVAL_INTRO|OPpPAD_STATE) && 7970 (eop = OpSIBLING(vop)) && 7971 eop->op_type == OP_ENTERSUB && 7972 !OpHAS_SIBLING(eop)) { 7973 state_var_op = vop; 7974 } else { 7975 while (lop) { 7976 if ((lop->op_type == OP_PADSV || 7977 lop->op_type == OP_PADAV || 7978 lop->op_type == OP_PADHV || 7979 lop->op_type == OP_PADANY) 7980 && (lop->op_private & OPpPAD_STATE) 7981 ) 7982 yyerror(no_list_state); 7983 lop = OpSIBLING(lop); 7984 } 7985 } 7986 } 7987 else if ( (left->op_private & OPpLVAL_INTRO) 7988 && (left->op_private & OPpPAD_STATE) 7989 && ( left->op_type == OP_PADSV 7990 || left->op_type == OP_PADAV 7991 || left->op_type == OP_PADHV 7992 || left->op_type == OP_PADANY) 7993 ) { 7994 /* All single variable list context state assignments, hence 7995 state ($a) = ... 7996 (state $a) = ... 7997 state @a = ... 7998 state (@a) = ... 7999 (state @a) = ... 8000 state %a = ... 8001 state (%a) = ... 8002 (state %a) = ... 8003 */ 8004 if (left->op_flags & OPf_PARENS) 8005 yyerror(no_list_state); 8006 else 8007 state_var_op = left; 8008 } 8009 8010 /* optimise @a = split(...) into: 8011 * @{expr}: split(..., @{expr}) (where @a is not flattened) 8012 * @a, my @a, local @a: split(...) (where @a is attached to 8013 * the split op itself) 8014 */ 8015 8016 if ( right 8017 && right->op_type == OP_SPLIT 8018 /* don't do twice, e.g. @b = (@a = split) */ 8019 && !(right->op_private & OPpSPLIT_ASSIGN)) 8020 { 8021 OP *gvop = NULL; 8022 8023 if ( ( left->op_type == OP_RV2AV 8024 && (gvop=((UNOP*)left)->op_first)->op_type==OP_GV) 8025 || left->op_type == OP_PADAV) 8026 { 8027 /* @pkg or @lex or local @pkg' or 'my @lex' */ 8028 OP *tmpop; 8029 if (gvop) { 8030 #ifdef USE_ITHREADS 8031 ((PMOP*)right)->op_pmreplrootu.op_pmtargetoff 8032 = cPADOPx(gvop)->op_padix; 8033 cPADOPx(gvop)->op_padix = 0; /* steal it */ 8034 #else 8035 ((PMOP*)right)->op_pmreplrootu.op_pmtargetgv 8036 = MUTABLE_GV(cSVOPx(gvop)->op_sv); 8037 cSVOPx(gvop)->op_sv = NULL; /* steal it */ 8038 #endif 8039 right->op_private |= 8040 left->op_private & OPpOUR_INTRO; 8041 } 8042 else { 8043 ((PMOP*)right)->op_pmreplrootu.op_pmtargetoff = left->op_targ; 8044 left->op_targ = 0; /* steal it */ 8045 right->op_private |= OPpSPLIT_LEX; 8046 } 8047 right->op_private |= left->op_private & OPpLVAL_INTRO; 8048 8049 detach_split: 8050 tmpop = cUNOPo->op_first; /* to list (nulled) */ 8051 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */ 8052 assert(OpSIBLING(tmpop) == right); 8053 assert(!OpHAS_SIBLING(right)); 8054 /* detach the split subtreee from the o tree, 8055 * then free the residual o tree */ 8056 op_sibling_splice(cUNOPo->op_first, tmpop, 1, NULL); 8057 op_free(o); /* blow off assign */ 8058 right->op_private |= OPpSPLIT_ASSIGN; 8059 right->op_flags &= ~OPf_WANT; 8060 /* "I don't know and I don't care." */ 8061 return right; 8062 } 8063 else if (left->op_type == OP_RV2AV) { 8064 /* @{expr} */ 8065 8066 OP *pushop = cUNOPx(cBINOPo->op_last)->op_first; 8067 assert(OpSIBLING(pushop) == left); 8068 /* Detach the array ... */ 8069 op_sibling_splice(cBINOPo->op_last, pushop, 1, NULL); 8070 /* ... and attach it to the split. */ 8071 op_sibling_splice(right, cLISTOPx(right)->op_last, 8072 0, left); 8073 right->op_flags |= OPf_STACKED; 8074 /* Detach split and expunge aassign as above. */ 8075 goto detach_split; 8076 } 8077 else if (PL_modcount < RETURN_UNLIMITED_NUMBER && 8078 ((LISTOP*)right)->op_last->op_type == OP_CONST) 8079 { 8080 /* convert split(...,0) to split(..., PL_modcount+1) */ 8081 SV ** const svp = 8082 &((SVOP*)((LISTOP*)right)->op_last)->op_sv; 8083 SV * const sv = *svp; 8084 if (SvIOK(sv) && SvIVX(sv) == 0) 8085 { 8086 if (right->op_private & OPpSPLIT_IMPLIM) { 8087 /* our own SV, created in ck_split */ 8088 SvREADONLY_off(sv); 8089 sv_setiv(sv, PL_modcount+1); 8090 } 8091 else { 8092 /* SV may belong to someone else */ 8093 SvREFCNT_dec(sv); 8094 *svp = newSViv(PL_modcount+1); 8095 } 8096 } 8097 } 8098 } 8099 8100 if (state_var_op) 8101 o = S_newONCEOP(aTHX_ o, state_var_op); 8102 return o; 8103 } 8104 if (assign_type == ASSIGN_REF) 8105 return newBINOP(OP_REFASSIGN, flags, scalar(right), left); 8106 if (!right) 8107 right = newOP(OP_UNDEF, 0); 8108 if (right->op_type == OP_READLINE) { 8109 right->op_flags |= OPf_STACKED; 8110 return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN), 8111 scalar(right)); 8112 } 8113 else { 8114 o = newBINOP(OP_SASSIGN, flags, 8115 scalar(right), op_lvalue(scalar(left), OP_SASSIGN) ); 8116 } 8117 return o; 8118 } 8119 8120 /* 8121 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o 8122 8123 Constructs a state op (COP). The state op is normally a C<nextstate> op, 8124 but will be a C<dbstate> op if debugging is enabled for currently-compiled 8125 code. The state op is populated from C<PL_curcop> (or C<PL_compiling>). 8126 If C<label> is non-null, it supplies the name of a label to attach to 8127 the state op; this function takes ownership of the memory pointed at by 8128 C<label>, and will free it. C<flags> gives the eight bits of C<op_flags> 8129 for the state op. 8130 8131 If C<o> is null, the state op is returned. Otherwise the state op is 8132 combined with C<o> into a C<lineseq> list op, which is returned. C<o> 8133 is consumed by this function and becomes part of the returned op tree. 8134 8135 =cut 8136 */ 8137 8138 OP * 8139 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o) 8140 { 8141 dVAR; 8142 const U32 seq = intro_my(); 8143 const U32 utf8 = flags & SVf_UTF8; 8144 COP *cop; 8145 8146 PL_parser->parsed_sub = 0; 8147 8148 flags &= ~SVf_UTF8; 8149 8150 NewOp(1101, cop, 1, COP); 8151 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) { 8152 OpTYPE_set(cop, OP_DBSTATE); 8153 } 8154 else { 8155 OpTYPE_set(cop, OP_NEXTSTATE); 8156 } 8157 cop->op_flags = (U8)flags; 8158 CopHINTS_set(cop, PL_hints); 8159 #ifdef VMS 8160 if (VMSISH_HUSHED) cop->op_private |= OPpHUSH_VMSISH; 8161 #endif 8162 cop->op_next = (OP*)cop; 8163 8164 cop->cop_seq = seq; 8165 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings); 8166 CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop))); 8167 if (label) { 8168 Perl_cop_store_label(aTHX_ cop, label, strlen(label), utf8); 8169 8170 PL_hints |= HINT_BLOCK_SCOPE; 8171 /* It seems that we need to defer freeing this pointer, as other parts 8172 of the grammar end up wanting to copy it after this op has been 8173 created. */ 8174 SAVEFREEPV(label); 8175 } 8176 8177 if (PL_parser->preambling != NOLINE) { 8178 CopLINE_set(cop, PL_parser->preambling); 8179 PL_parser->copline = NOLINE; 8180 } 8181 else if (PL_parser->copline == NOLINE) 8182 CopLINE_set(cop, CopLINE(PL_curcop)); 8183 else { 8184 CopLINE_set(cop, PL_parser->copline); 8185 PL_parser->copline = NOLINE; 8186 } 8187 #ifdef USE_ITHREADS 8188 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */ 8189 #else 8190 CopFILEGV_set(cop, CopFILEGV(PL_curcop)); 8191 #endif 8192 CopSTASH_set(cop, PL_curstash); 8193 8194 if (cop->op_type == OP_DBSTATE) { 8195 /* this line can have a breakpoint - store the cop in IV */ 8196 AV *av = CopFILEAVx(PL_curcop); 8197 if (av) { 8198 SV * const * const svp = av_fetch(av, CopLINE(cop), FALSE); 8199 if (svp && *svp != &PL_sv_undef ) { 8200 (void)SvIOK_on(*svp); 8201 SvIV_set(*svp, PTR2IV(cop)); 8202 } 8203 } 8204 } 8205 8206 if (flags & OPf_SPECIAL) 8207 op_null((OP*)cop); 8208 return op_prepend_elem(OP_LINESEQ, (OP*)cop, o); 8209 } 8210 8211 /* 8212 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other 8213 8214 Constructs, checks, and returns a logical (flow control) op. C<type> 8215 is the opcode. C<flags> gives the eight bits of C<op_flags>, except 8216 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits, 8217 the eight bits of C<op_private>, except that the bit with value 1 is 8218 automatically set. C<first> supplies the expression controlling the 8219 flow, and C<other> supplies the side (alternate) chain of ops; they are 8220 consumed by this function and become part of the constructed op tree. 8221 8222 =cut 8223 */ 8224 8225 OP * 8226 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other) 8227 { 8228 PERL_ARGS_ASSERT_NEWLOGOP; 8229 8230 return new_logop(type, flags, &first, &other); 8231 } 8232 8233 STATIC OP * 8234 S_search_const(pTHX_ OP *o) 8235 { 8236 PERL_ARGS_ASSERT_SEARCH_CONST; 8237 8238 switch (o->op_type) { 8239 case OP_CONST: 8240 return o; 8241 case OP_NULL: 8242 if (o->op_flags & OPf_KIDS) 8243 return search_const(cUNOPo->op_first); 8244 break; 8245 case OP_LEAVE: 8246 case OP_SCOPE: 8247 case OP_LINESEQ: 8248 { 8249 OP *kid; 8250 if (!(o->op_flags & OPf_KIDS)) 8251 return NULL; 8252 kid = cLISTOPo->op_first; 8253 do { 8254 switch (kid->op_type) { 8255 case OP_ENTER: 8256 case OP_NULL: 8257 case OP_NEXTSTATE: 8258 kid = OpSIBLING(kid); 8259 break; 8260 default: 8261 if (kid != cLISTOPo->op_last) 8262 return NULL; 8263 goto last; 8264 } 8265 } while (kid); 8266 if (!kid) 8267 kid = cLISTOPo->op_last; 8268 last: 8269 return search_const(kid); 8270 } 8271 } 8272 8273 return NULL; 8274 } 8275 8276 STATIC OP * 8277 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp) 8278 { 8279 dVAR; 8280 LOGOP *logop; 8281 OP *o; 8282 OP *first; 8283 OP *other; 8284 OP *cstop = NULL; 8285 int prepend_not = 0; 8286 8287 PERL_ARGS_ASSERT_NEW_LOGOP; 8288 8289 first = *firstp; 8290 other = *otherp; 8291 8292 /* [perl #59802]: Warn about things like "return $a or $b", which 8293 is parsed as "(return $a) or $b" rather than "return ($a or 8294 $b)". NB: This also applies to xor, which is why we do it 8295 here. 8296 */ 8297 switch (first->op_type) { 8298 case OP_NEXT: 8299 case OP_LAST: 8300 case OP_REDO: 8301 /* XXX: Perhaps we should emit a stronger warning for these. 8302 Even with the high-precedence operator they don't seem to do 8303 anything sensible. 8304 8305 But until we do, fall through here. 8306 */ 8307 case OP_RETURN: 8308 case OP_EXIT: 8309 case OP_DIE: 8310 case OP_GOTO: 8311 /* XXX: Currently we allow people to "shoot themselves in the 8312 foot" by explicitly writing "(return $a) or $b". 8313 8314 Warn unless we are looking at the result from folding or if 8315 the programmer explicitly grouped the operators like this. 8316 The former can occur with e.g. 8317 8318 use constant FEATURE => ( $] >= ... ); 8319 sub { not FEATURE and return or do_stuff(); } 8320 */ 8321 if (!first->op_folded && !(first->op_flags & OPf_PARENS)) 8322 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), 8323 "Possible precedence issue with control flow operator"); 8324 /* XXX: Should we optimze this to "return $a;" (i.e. remove 8325 the "or $b" part)? 8326 */ 8327 break; 8328 } 8329 8330 if (type == OP_XOR) /* Not short circuit, but here by precedence. */ 8331 return newBINOP(type, flags, scalar(first), scalar(other)); 8332 8333 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP 8334 || type == OP_CUSTOM); 8335 8336 scalarboolean(first); 8337 8338 /* search for a constant op that could let us fold the test */ 8339 if ((cstop = search_const(first))) { 8340 if (cstop->op_private & OPpCONST_STRICT) 8341 no_bareword_allowed(cstop); 8342 else if ((cstop->op_private & OPpCONST_BARE)) 8343 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional"); 8344 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) || 8345 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) || 8346 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) { 8347 /* Elide the (constant) lhs, since it can't affect the outcome */ 8348 *firstp = NULL; 8349 if (other->op_type == OP_CONST) 8350 other->op_private |= OPpCONST_SHORTCIRCUIT; 8351 op_free(first); 8352 if (other->op_type == OP_LEAVE) 8353 other = newUNOP(OP_NULL, OPf_SPECIAL, other); 8354 else if (other->op_type == OP_MATCH 8355 || other->op_type == OP_SUBST 8356 || other->op_type == OP_TRANSR 8357 || other->op_type == OP_TRANS) 8358 /* Mark the op as being unbindable with =~ */ 8359 other->op_flags |= OPf_SPECIAL; 8360 8361 other->op_folded = 1; 8362 return other; 8363 } 8364 else { 8365 /* Elide the rhs, since the outcome is entirely determined by 8366 * the (constant) lhs */ 8367 8368 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */ 8369 const OP *o2 = other; 8370 if ( ! (o2->op_type == OP_LIST 8371 && (( o2 = cUNOPx(o2)->op_first)) 8372 && o2->op_type == OP_PUSHMARK 8373 && (( o2 = OpSIBLING(o2))) ) 8374 ) 8375 o2 = other; 8376 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV 8377 || o2->op_type == OP_PADHV) 8378 && o2->op_private & OPpLVAL_INTRO 8379 && !(o2->op_private & OPpPAD_STATE)) 8380 { 8381 Perl_croak(aTHX_ "This use of my() in false conditional is " 8382 "no longer allowed"); 8383 } 8384 8385 *otherp = NULL; 8386 if (cstop->op_type == OP_CONST) 8387 cstop->op_private |= OPpCONST_SHORTCIRCUIT; 8388 op_free(other); 8389 return first; 8390 } 8391 } 8392 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR 8393 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */ 8394 { 8395 const OP * const k1 = ((UNOP*)first)->op_first; 8396 const OP * const k2 = OpSIBLING(k1); 8397 OPCODE warnop = 0; 8398 switch (first->op_type) 8399 { 8400 case OP_NULL: 8401 if (k2 && k2->op_type == OP_READLINE 8402 && (k2->op_flags & OPf_STACKED) 8403 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR)) 8404 { 8405 warnop = k2->op_type; 8406 } 8407 break; 8408 8409 case OP_SASSIGN: 8410 if (k1->op_type == OP_READDIR 8411 || k1->op_type == OP_GLOB 8412 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB) 8413 || k1->op_type == OP_EACH 8414 || k1->op_type == OP_AEACH) 8415 { 8416 warnop = ((k1->op_type == OP_NULL) 8417 ? (OPCODE)k1->op_targ : k1->op_type); 8418 } 8419 break; 8420 } 8421 if (warnop) { 8422 const line_t oldline = CopLINE(PL_curcop); 8423 /* This ensures that warnings are reported at the first line 8424 of the construction, not the last. */ 8425 CopLINE_set(PL_curcop, PL_parser->copline); 8426 Perl_warner(aTHX_ packWARN(WARN_MISC), 8427 "Value of %s%s can be \"0\"; test with defined()", 8428 PL_op_desc[warnop], 8429 ((warnop == OP_READLINE || warnop == OP_GLOB) 8430 ? " construct" : "() operator")); 8431 CopLINE_set(PL_curcop, oldline); 8432 } 8433 } 8434 8435 /* optimize AND and OR ops that have NOTs as children */ 8436 if (first->op_type == OP_NOT 8437 && (first->op_flags & OPf_KIDS) 8438 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */ 8439 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */ 8440 ) { 8441 if (type == OP_AND || type == OP_OR) { 8442 if (type == OP_AND) 8443 type = OP_OR; 8444 else 8445 type = OP_AND; 8446 op_null(first); 8447 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */ 8448 op_null(other); 8449 prepend_not = 1; /* prepend a NOT op later */ 8450 } 8451 } 8452 } 8453 8454 logop = alloc_LOGOP(type, first, LINKLIST(other)); 8455 logop->op_flags |= (U8)flags; 8456 logop->op_private = (U8)(1 | (flags >> 8)); 8457 8458 /* establish postfix order */ 8459 logop->op_next = LINKLIST(first); 8460 first->op_next = (OP*)logop; 8461 assert(!OpHAS_SIBLING(first)); 8462 op_sibling_splice((OP*)logop, first, 0, other); 8463 8464 CHECKOP(type,logop); 8465 8466 o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 8467 PL_opargs[type] & OA_RETSCALAR ? OPf_WANT_SCALAR : 0, 8468 (OP*)logop); 8469 other->op_next = o; 8470 8471 return o; 8472 } 8473 8474 /* 8475 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop 8476 8477 Constructs, checks, and returns a conditional-expression (C<cond_expr>) 8478 op. C<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS> 8479 will be set automatically, and, shifted up eight bits, the eight bits of 8480 C<op_private>, except that the bit with value 1 is automatically set. 8481 C<first> supplies the expression selecting between the two branches, 8482 and C<trueop> and C<falseop> supply the branches; they are consumed by 8483 this function and become part of the constructed op tree. 8484 8485 =cut 8486 */ 8487 8488 OP * 8489 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop) 8490 { 8491 dVAR; 8492 LOGOP *logop; 8493 OP *start; 8494 OP *o; 8495 OP *cstop; 8496 8497 PERL_ARGS_ASSERT_NEWCONDOP; 8498 8499 if (!falseop) 8500 return newLOGOP(OP_AND, 0, first, trueop); 8501 if (!trueop) 8502 return newLOGOP(OP_OR, 0, first, falseop); 8503 8504 scalarboolean(first); 8505 if ((cstop = search_const(first))) { 8506 /* Left or right arm of the conditional? */ 8507 const bool left = SvTRUE(((SVOP*)cstop)->op_sv); 8508 OP *live = left ? trueop : falseop; 8509 OP *const dead = left ? falseop : trueop; 8510 if (cstop->op_private & OPpCONST_BARE && 8511 cstop->op_private & OPpCONST_STRICT) { 8512 no_bareword_allowed(cstop); 8513 } 8514 op_free(first); 8515 op_free(dead); 8516 if (live->op_type == OP_LEAVE) 8517 live = newUNOP(OP_NULL, OPf_SPECIAL, live); 8518 else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST 8519 || live->op_type == OP_TRANS || live->op_type == OP_TRANSR) 8520 /* Mark the op as being unbindable with =~ */ 8521 live->op_flags |= OPf_SPECIAL; 8522 live->op_folded = 1; 8523 return live; 8524 } 8525 logop = alloc_LOGOP(OP_COND_EXPR, first, LINKLIST(trueop)); 8526 logop->op_flags |= (U8)flags; 8527 logop->op_private = (U8)(1 | (flags >> 8)); 8528 logop->op_next = LINKLIST(falseop); 8529 8530 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */ 8531 logop); 8532 8533 /* establish postfix order */ 8534 start = LINKLIST(first); 8535 first->op_next = (OP*)logop; 8536 8537 /* make first, trueop, falseop siblings */ 8538 op_sibling_splice((OP*)logop, first, 0, trueop); 8539 op_sibling_splice((OP*)logop, trueop, 0, falseop); 8540 8541 o = newUNOP(OP_NULL, 0, (OP*)logop); 8542 8543 trueop->op_next = falseop->op_next = o; 8544 8545 o->op_next = start; 8546 return o; 8547 } 8548 8549 /* 8550 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right 8551 8552 Constructs and returns a C<range> op, with subordinate C<flip> and 8553 C<flop> ops. C<flags> gives the eight bits of C<op_flags> for the 8554 C<flip> op and, shifted up eight bits, the eight bits of C<op_private> 8555 for both the C<flip> and C<range> ops, except that the bit with value 8556 1 is automatically set. C<left> and C<right> supply the expressions 8557 controlling the endpoints of the range; they are consumed by this function 8558 and become part of the constructed op tree. 8559 8560 =cut 8561 */ 8562 8563 OP * 8564 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right) 8565 { 8566 LOGOP *range; 8567 OP *flip; 8568 OP *flop; 8569 OP *leftstart; 8570 OP *o; 8571 8572 PERL_ARGS_ASSERT_NEWRANGE; 8573 8574 range = alloc_LOGOP(OP_RANGE, left, LINKLIST(right)); 8575 range->op_flags = OPf_KIDS; 8576 leftstart = LINKLIST(left); 8577 range->op_private = (U8)(1 | (flags >> 8)); 8578 8579 /* make left and right siblings */ 8580 op_sibling_splice((OP*)range, left, 0, right); 8581 8582 range->op_next = (OP*)range; 8583 flip = newUNOP(OP_FLIP, flags, (OP*)range); 8584 flop = newUNOP(OP_FLOP, 0, flip); 8585 o = newUNOP(OP_NULL, 0, flop); 8586 LINKLIST(flop); 8587 range->op_next = leftstart; 8588 8589 left->op_next = flip; 8590 right->op_next = flop; 8591 8592 range->op_targ = 8593 pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0); 8594 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV); 8595 flip->op_targ = 8596 pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0);; 8597 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV); 8598 SvPADTMP_on(PAD_SV(flip->op_targ)); 8599 8600 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0; 8601 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0; 8602 8603 /* check barewords before they might be optimized aways */ 8604 if (flip->op_private && cSVOPx(left)->op_private & OPpCONST_STRICT) 8605 no_bareword_allowed(left); 8606 if (flop->op_private && cSVOPx(right)->op_private & OPpCONST_STRICT) 8607 no_bareword_allowed(right); 8608 8609 flip->op_next = o; 8610 if (!flip->op_private || !flop->op_private) 8611 LINKLIST(o); /* blow off optimizer unless constant */ 8612 8613 return o; 8614 } 8615 8616 /* 8617 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block 8618 8619 Constructs, checks, and returns an op tree expressing a loop. This is 8620 only a loop in the control flow through the op tree; it does not have 8621 the heavyweight loop structure that allows exiting the loop by C<last> 8622 and suchlike. C<flags> gives the eight bits of C<op_flags> for the 8623 top-level op, except that some bits will be set automatically as required. 8624 C<expr> supplies the expression controlling loop iteration, and C<block> 8625 supplies the body of the loop; they are consumed by this function and 8626 become part of the constructed op tree. C<debuggable> is currently 8627 unused and should always be 1. 8628 8629 =cut 8630 */ 8631 8632 OP * 8633 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block) 8634 { 8635 OP* listop; 8636 OP* o; 8637 const bool once = block && block->op_flags & OPf_SPECIAL && 8638 block->op_type == OP_NULL; 8639 8640 PERL_UNUSED_ARG(debuggable); 8641 8642 if (expr) { 8643 if (once && ( 8644 (expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv)) 8645 || ( expr->op_type == OP_NOT 8646 && cUNOPx(expr)->op_first->op_type == OP_CONST 8647 && SvTRUE(cSVOPx_sv(cUNOPx(expr)->op_first)) 8648 ) 8649 )) 8650 /* Return the block now, so that S_new_logop does not try to 8651 fold it away. */ 8652 { 8653 op_free(expr); 8654 return block; /* do {} while 0 does once */ 8655 } 8656 8657 if (expr->op_type == OP_READLINE 8658 || expr->op_type == OP_READDIR 8659 || expr->op_type == OP_GLOB 8660 || expr->op_type == OP_EACH || expr->op_type == OP_AEACH 8661 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) { 8662 expr = newUNOP(OP_DEFINED, 0, 8663 newASSIGNOP(0, newDEFSVOP(), 0, expr) ); 8664 } else if (expr->op_flags & OPf_KIDS) { 8665 const OP * const k1 = ((UNOP*)expr)->op_first; 8666 const OP * const k2 = k1 ? OpSIBLING(k1) : NULL; 8667 switch (expr->op_type) { 8668 case OP_NULL: 8669 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR) 8670 && (k2->op_flags & OPf_STACKED) 8671 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR)) 8672 expr = newUNOP(OP_DEFINED, 0, expr); 8673 break; 8674 8675 case OP_SASSIGN: 8676 if (k1 && (k1->op_type == OP_READDIR 8677 || k1->op_type == OP_GLOB 8678 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB) 8679 || k1->op_type == OP_EACH 8680 || k1->op_type == OP_AEACH)) 8681 expr = newUNOP(OP_DEFINED, 0, expr); 8682 break; 8683 } 8684 } 8685 } 8686 8687 /* if block is null, the next op_append_elem() would put UNSTACK, a scalar 8688 * op, in listop. This is wrong. [perl #27024] */ 8689 if (!block) 8690 block = newOP(OP_NULL, 0); 8691 listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0)); 8692 o = new_logop(OP_AND, 0, &expr, &listop); 8693 8694 if (once) { 8695 ASSUME(listop); 8696 } 8697 8698 if (listop) 8699 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o); 8700 8701 if (once && o != listop) 8702 { 8703 assert(cUNOPo->op_first->op_type == OP_AND 8704 || cUNOPo->op_first->op_type == OP_OR); 8705 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other; 8706 } 8707 8708 if (o == listop) 8709 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */ 8710 8711 o->op_flags |= flags; 8712 o = op_scope(o); 8713 o->op_flags |= OPf_SPECIAL; /* suppress cx_popblock() curpm restoration*/ 8714 return o; 8715 } 8716 8717 /* 8718 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my 8719 8720 Constructs, checks, and returns an op tree expressing a C<while> loop. 8721 This is a heavyweight loop, with structure that allows exiting the loop 8722 by C<last> and suchlike. 8723 8724 C<loop> is an optional preconstructed C<enterloop> op to use in the 8725 loop; if it is null then a suitable op will be constructed automatically. 8726 C<expr> supplies the loop's controlling expression. C<block> supplies the 8727 main body of the loop, and C<cont> optionally supplies a C<continue> block 8728 that operates as a second half of the body. All of these optree inputs 8729 are consumed by this function and become part of the constructed op tree. 8730 8731 C<flags> gives the eight bits of C<op_flags> for the C<leaveloop> 8732 op and, shifted up eight bits, the eight bits of C<op_private> for 8733 the C<leaveloop> op, except that (in both cases) some bits will be set 8734 automatically. C<debuggable> is currently unused and should always be 1. 8735 C<has_my> can be supplied as true to force the 8736 loop body to be enclosed in its own scope. 8737 8738 =cut 8739 */ 8740 8741 OP * 8742 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, 8743 OP *expr, OP *block, OP *cont, I32 has_my) 8744 { 8745 dVAR; 8746 OP *redo; 8747 OP *next = NULL; 8748 OP *listop; 8749 OP *o; 8750 U8 loopflags = 0; 8751 8752 PERL_UNUSED_ARG(debuggable); 8753 8754 if (expr) { 8755 if (expr->op_type == OP_READLINE 8756 || expr->op_type == OP_READDIR 8757 || expr->op_type == OP_GLOB 8758 || expr->op_type == OP_EACH || expr->op_type == OP_AEACH 8759 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) { 8760 expr = newUNOP(OP_DEFINED, 0, 8761 newASSIGNOP(0, newDEFSVOP(), 0, expr) ); 8762 } else if (expr->op_flags & OPf_KIDS) { 8763 const OP * const k1 = ((UNOP*)expr)->op_first; 8764 const OP * const k2 = (k1) ? OpSIBLING(k1) : NULL; 8765 switch (expr->op_type) { 8766 case OP_NULL: 8767 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR) 8768 && (k2->op_flags & OPf_STACKED) 8769 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR)) 8770 expr = newUNOP(OP_DEFINED, 0, expr); 8771 break; 8772 8773 case OP_SASSIGN: 8774 if (k1 && (k1->op_type == OP_READDIR 8775 || k1->op_type == OP_GLOB 8776 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB) 8777 || k1->op_type == OP_EACH 8778 || k1->op_type == OP_AEACH)) 8779 expr = newUNOP(OP_DEFINED, 0, expr); 8780 break; 8781 } 8782 } 8783 } 8784 8785 if (!block) 8786 block = newOP(OP_NULL, 0); 8787 else if (cont || has_my) { 8788 block = op_scope(block); 8789 } 8790 8791 if (cont) { 8792 next = LINKLIST(cont); 8793 } 8794 if (expr) { 8795 OP * const unstack = newOP(OP_UNSTACK, 0); 8796 if (!next) 8797 next = unstack; 8798 cont = op_append_elem(OP_LINESEQ, cont, unstack); 8799 } 8800 8801 assert(block); 8802 listop = op_append_list(OP_LINESEQ, block, cont); 8803 assert(listop); 8804 redo = LINKLIST(listop); 8805 8806 if (expr) { 8807 scalar(listop); 8808 o = new_logop(OP_AND, 0, &expr, &listop); 8809 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) { 8810 op_free((OP*)loop); 8811 return expr; /* listop already freed by new_logop */ 8812 } 8813 if (listop) 8814 ((LISTOP*)listop)->op_last->op_next = 8815 (o == listop ? redo : LINKLIST(o)); 8816 } 8817 else 8818 o = listop; 8819 8820 if (!loop) { 8821 NewOp(1101,loop,1,LOOP); 8822 OpTYPE_set(loop, OP_ENTERLOOP); 8823 loop->op_private = 0; 8824 loop->op_next = (OP*)loop; 8825 } 8826 8827 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o); 8828 8829 loop->op_redoop = redo; 8830 loop->op_lastop = o; 8831 o->op_private |= loopflags; 8832 8833 if (next) 8834 loop->op_nextop = next; 8835 else 8836 loop->op_nextop = o; 8837 8838 o->op_flags |= flags; 8839 o->op_private |= (flags >> 8); 8840 return o; 8841 } 8842 8843 /* 8844 =for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont 8845 8846 Constructs, checks, and returns an op tree expressing a C<foreach> 8847 loop (iteration through a list of values). This is a heavyweight loop, 8848 with structure that allows exiting the loop by C<last> and suchlike. 8849 8850 C<sv> optionally supplies the variable that will be aliased to each 8851 item in turn; if null, it defaults to C<$_>. 8852 C<expr> supplies the list of values to iterate over. C<block> supplies 8853 the main body of the loop, and C<cont> optionally supplies a C<continue> 8854 block that operates as a second half of the body. All of these optree 8855 inputs are consumed by this function and become part of the constructed 8856 op tree. 8857 8858 C<flags> gives the eight bits of C<op_flags> for the C<leaveloop> 8859 op and, shifted up eight bits, the eight bits of C<op_private> for 8860 the C<leaveloop> op, except that (in both cases) some bits will be set 8861 automatically. 8862 8863 =cut 8864 */ 8865 8866 OP * 8867 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont) 8868 { 8869 dVAR; 8870 LOOP *loop; 8871 OP *wop; 8872 PADOFFSET padoff = 0; 8873 I32 iterflags = 0; 8874 I32 iterpflags = 0; 8875 8876 PERL_ARGS_ASSERT_NEWFOROP; 8877 8878 if (sv) { 8879 if (sv->op_type == OP_RV2SV) { /* symbol table variable */ 8880 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */ 8881 OpTYPE_set(sv, OP_RV2GV); 8882 8883 /* The op_type check is needed to prevent a possible segfault 8884 * if the loop variable is undeclared and 'strict vars' is in 8885 * effect. This is illegal but is nonetheless parsed, so we 8886 * may reach this point with an OP_CONST where we're expecting 8887 * an OP_GV. 8888 */ 8889 if (cUNOPx(sv)->op_first->op_type == OP_GV 8890 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv) 8891 iterpflags |= OPpITER_DEF; 8892 } 8893 else if (sv->op_type == OP_PADSV) { /* private variable */ 8894 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */ 8895 padoff = sv->op_targ; 8896 sv->op_targ = 0; 8897 op_free(sv); 8898 sv = NULL; 8899 PAD_COMPNAME_GEN_set(padoff, PERL_INT_MAX); 8900 } 8901 else if (sv->op_type == OP_NULL && sv->op_targ == OP_SREFGEN) 8902 NOOP; 8903 else 8904 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]); 8905 if (padoff) { 8906 PADNAME * const pn = PAD_COMPNAME(padoff); 8907 const char * const name = PadnamePV(pn); 8908 8909 if (PadnameLEN(pn) == 2 && name[0] == '$' && name[1] == '_') 8910 iterpflags |= OPpITER_DEF; 8911 } 8912 } 8913 else { 8914 sv = newGVOP(OP_GV, 0, PL_defgv); 8915 iterpflags |= OPpITER_DEF; 8916 } 8917 8918 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) { 8919 expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER)), 1), OP_GREPSTART); 8920 iterflags |= OPf_STACKED; 8921 } 8922 else if (expr->op_type == OP_NULL && 8923 (expr->op_flags & OPf_KIDS) && 8924 ((BINOP*)expr)->op_first->op_type == OP_FLOP) 8925 { 8926 /* Basically turn for($x..$y) into the same as for($x,$y), but we 8927 * set the STACKED flag to indicate that these values are to be 8928 * treated as min/max values by 'pp_enteriter'. 8929 */ 8930 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first; 8931 LOGOP* const range = (LOGOP*) flip->op_first; 8932 OP* const left = range->op_first; 8933 OP* const right = OpSIBLING(left); 8934 LISTOP* listop; 8935 8936 range->op_flags &= ~OPf_KIDS; 8937 /* detach range's children */ 8938 op_sibling_splice((OP*)range, NULL, -1, NULL); 8939 8940 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right); 8941 listop->op_first->op_next = range->op_next; 8942 left->op_next = range->op_other; 8943 right->op_next = (OP*)listop; 8944 listop->op_next = listop->op_first; 8945 8946 op_free(expr); 8947 expr = (OP*)(listop); 8948 op_null(expr); 8949 iterflags |= OPf_STACKED; 8950 } 8951 else { 8952 expr = op_lvalue(force_list(expr, 1), OP_GREPSTART); 8953 } 8954 8955 loop = (LOOP*)op_convert_list(OP_ENTERITER, iterflags, 8956 op_append_elem(OP_LIST, list(expr), 8957 scalar(sv))); 8958 assert(!loop->op_next); 8959 /* for my $x () sets OPpLVAL_INTRO; 8960 * for our $x () sets OPpOUR_INTRO */ 8961 loop->op_private = (U8)iterpflags; 8962 if (loop->op_slabbed 8963 && DIFF(loop, OpSLOT(loop)->opslot_next) 8964 < SIZE_TO_PSIZE(sizeof(LOOP))) 8965 { 8966 LOOP *tmp; 8967 NewOp(1234,tmp,1,LOOP); 8968 Copy(loop,tmp,1,LISTOP); 8969 assert(loop->op_last->op_sibparent == (OP*)loop); 8970 OpLASTSIB_set(loop->op_last, (OP*)tmp); /*point back to new parent */ 8971 S_op_destroy(aTHX_ (OP*)loop); 8972 loop = tmp; 8973 } 8974 else if (!loop->op_slabbed) 8975 { 8976 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP)); 8977 OpLASTSIB_set(loop->op_last, (OP*)loop); 8978 } 8979 loop->op_targ = padoff; 8980 wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0); 8981 return wop; 8982 } 8983 8984 /* 8985 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label 8986 8987 Constructs, checks, and returns a loop-exiting op (such as C<goto> 8988 or C<last>). C<type> is the opcode. C<label> supplies the parameter 8989 determining the target of the op; it is consumed by this function and 8990 becomes part of the constructed op tree. 8991 8992 =cut 8993 */ 8994 8995 OP* 8996 Perl_newLOOPEX(pTHX_ I32 type, OP *label) 8997 { 8998 OP *o = NULL; 8999 9000 PERL_ARGS_ASSERT_NEWLOOPEX; 9001 9002 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP 9003 || type == OP_CUSTOM); 9004 9005 if (type != OP_GOTO) { 9006 /* "last()" means "last" */ 9007 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS)) { 9008 o = newOP(type, OPf_SPECIAL); 9009 } 9010 } 9011 else { 9012 /* Check whether it's going to be a goto &function */ 9013 if (label->op_type == OP_ENTERSUB 9014 && !(label->op_flags & OPf_STACKED)) 9015 label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN)); 9016 } 9017 9018 /* Check for a constant argument */ 9019 if (label->op_type == OP_CONST) { 9020 SV * const sv = ((SVOP *)label)->op_sv; 9021 STRLEN l; 9022 const char *s = SvPV_const(sv,l); 9023 if (l == strlen(s)) { 9024 o = newPVOP(type, 9025 SvUTF8(((SVOP*)label)->op_sv), 9026 savesharedpv( 9027 SvPV_nolen_const(((SVOP*)label)->op_sv))); 9028 } 9029 } 9030 9031 /* If we have already created an op, we do not need the label. */ 9032 if (o) 9033 op_free(label); 9034 else o = newUNOP(type, OPf_STACKED, label); 9035 9036 PL_hints |= HINT_BLOCK_SCOPE; 9037 return o; 9038 } 9039 9040 /* if the condition is a literal array or hash 9041 (or @{ ... } etc), make a reference to it. 9042 */ 9043 STATIC OP * 9044 S_ref_array_or_hash(pTHX_ OP *cond) 9045 { 9046 if (cond 9047 && (cond->op_type == OP_RV2AV 9048 || cond->op_type == OP_PADAV 9049 || cond->op_type == OP_RV2HV 9050 || cond->op_type == OP_PADHV)) 9051 9052 return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN)); 9053 9054 else if(cond 9055 && (cond->op_type == OP_ASLICE 9056 || cond->op_type == OP_KVASLICE 9057 || cond->op_type == OP_HSLICE 9058 || cond->op_type == OP_KVHSLICE)) { 9059 9060 /* anonlist now needs a list from this op, was previously used in 9061 * scalar context */ 9062 cond->op_flags &= ~(OPf_WANT_SCALAR | OPf_REF); 9063 cond->op_flags |= OPf_WANT_LIST; 9064 9065 return newANONLIST(op_lvalue(cond, OP_ANONLIST)); 9066 } 9067 9068 else 9069 return cond; 9070 } 9071 9072 /* These construct the optree fragments representing given() 9073 and when() blocks. 9074 9075 entergiven and enterwhen are LOGOPs; the op_other pointer 9076 points up to the associated leave op. We need this so we 9077 can put it in the context and make break/continue work. 9078 (Also, of course, pp_enterwhen will jump straight to 9079 op_other if the match fails.) 9080 */ 9081 9082 STATIC OP * 9083 S_newGIVWHENOP(pTHX_ OP *cond, OP *block, 9084 I32 enter_opcode, I32 leave_opcode, 9085 PADOFFSET entertarg) 9086 { 9087 dVAR; 9088 LOGOP *enterop; 9089 OP *o; 9090 9091 PERL_ARGS_ASSERT_NEWGIVWHENOP; 9092 PERL_UNUSED_ARG(entertarg); /* used to indicate targ of lexical $_ */ 9093 9094 enterop = alloc_LOGOP(enter_opcode, block, NULL); 9095 enterop->op_targ = 0; 9096 enterop->op_private = 0; 9097 9098 o = newUNOP(leave_opcode, 0, (OP *) enterop); 9099 9100 if (cond) { 9101 /* prepend cond if we have one */ 9102 op_sibling_splice((OP*)enterop, NULL, 0, scalar(cond)); 9103 9104 o->op_next = LINKLIST(cond); 9105 cond->op_next = (OP *) enterop; 9106 } 9107 else { 9108 /* This is a default {} block */ 9109 enterop->op_flags |= OPf_SPECIAL; 9110 o ->op_flags |= OPf_SPECIAL; 9111 9112 o->op_next = (OP *) enterop; 9113 } 9114 9115 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since 9116 entergiven and enterwhen both 9117 use ck_null() */ 9118 9119 enterop->op_next = LINKLIST(block); 9120 block->op_next = enterop->op_other = o; 9121 9122 return o; 9123 } 9124 9125 /* Does this look like a boolean operation? For these purposes 9126 a boolean operation is: 9127 - a subroutine call [*] 9128 - a logical connective 9129 - a comparison operator 9130 - a filetest operator, with the exception of -s -M -A -C 9131 - defined(), exists() or eof() 9132 - /$re/ or $foo =~ /$re/ 9133 9134 [*] possibly surprising 9135 */ 9136 STATIC bool 9137 S_looks_like_bool(pTHX_ const OP *o) 9138 { 9139 PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL; 9140 9141 switch(o->op_type) { 9142 case OP_OR: 9143 case OP_DOR: 9144 return looks_like_bool(cLOGOPo->op_first); 9145 9146 case OP_AND: 9147 { 9148 OP* sibl = OpSIBLING(cLOGOPo->op_first); 9149 ASSUME(sibl); 9150 return ( 9151 looks_like_bool(cLOGOPo->op_first) 9152 && looks_like_bool(sibl)); 9153 } 9154 9155 case OP_NULL: 9156 case OP_SCALAR: 9157 return ( 9158 o->op_flags & OPf_KIDS 9159 && looks_like_bool(cUNOPo->op_first)); 9160 9161 case OP_ENTERSUB: 9162 9163 case OP_NOT: case OP_XOR: 9164 9165 case OP_EQ: case OP_NE: case OP_LT: 9166 case OP_GT: case OP_LE: case OP_GE: 9167 9168 case OP_I_EQ: case OP_I_NE: case OP_I_LT: 9169 case OP_I_GT: case OP_I_LE: case OP_I_GE: 9170 9171 case OP_SEQ: case OP_SNE: case OP_SLT: 9172 case OP_SGT: case OP_SLE: case OP_SGE: 9173 9174 case OP_SMARTMATCH: 9175 9176 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC: 9177 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC: 9178 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED: 9179 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR: 9180 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR: 9181 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID: 9182 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY: 9183 case OP_FTTEXT: case OP_FTBINARY: 9184 9185 case OP_DEFINED: case OP_EXISTS: 9186 case OP_MATCH: case OP_EOF: 9187 9188 case OP_FLOP: 9189 9190 return TRUE; 9191 9192 case OP_INDEX: 9193 case OP_RINDEX: 9194 /* optimised-away (index() != -1) or similar comparison */ 9195 if (o->op_private & OPpTRUEBOOL) 9196 return TRUE; 9197 return FALSE; 9198 9199 case OP_CONST: 9200 /* Detect comparisons that have been optimized away */ 9201 if (cSVOPo->op_sv == &PL_sv_yes 9202 || cSVOPo->op_sv == &PL_sv_no) 9203 9204 return TRUE; 9205 else 9206 return FALSE; 9207 /* FALLTHROUGH */ 9208 default: 9209 return FALSE; 9210 } 9211 } 9212 9213 /* 9214 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off 9215 9216 Constructs, checks, and returns an op tree expressing a C<given> block. 9217 C<cond> supplies the expression to whose value C<$_> will be locally 9218 aliased, and C<block> supplies the body of the C<given> construct; they 9219 are consumed by this function and become part of the constructed op tree. 9220 C<defsv_off> must be zero (it used to identity the pad slot of lexical $_). 9221 9222 =cut 9223 */ 9224 9225 OP * 9226 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off) 9227 { 9228 PERL_ARGS_ASSERT_NEWGIVENOP; 9229 PERL_UNUSED_ARG(defsv_off); 9230 9231 assert(!defsv_off); 9232 return newGIVWHENOP( 9233 ref_array_or_hash(cond), 9234 block, 9235 OP_ENTERGIVEN, OP_LEAVEGIVEN, 9236 0); 9237 } 9238 9239 /* 9240 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block 9241 9242 Constructs, checks, and returns an op tree expressing a C<when> block. 9243 C<cond> supplies the test expression, and C<block> supplies the block 9244 that will be executed if the test evaluates to true; they are consumed 9245 by this function and become part of the constructed op tree. C<cond> 9246 will be interpreted DWIMically, often as a comparison against C<$_>, 9247 and may be null to generate a C<default> block. 9248 9249 =cut 9250 */ 9251 9252 OP * 9253 Perl_newWHENOP(pTHX_ OP *cond, OP *block) 9254 { 9255 const bool cond_llb = (!cond || looks_like_bool(cond)); 9256 OP *cond_op; 9257 9258 PERL_ARGS_ASSERT_NEWWHENOP; 9259 9260 if (cond_llb) 9261 cond_op = cond; 9262 else { 9263 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL, 9264 newDEFSVOP(), 9265 scalar(ref_array_or_hash(cond))); 9266 } 9267 9268 return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0); 9269 } 9270 9271 /* must not conflict with SVf_UTF8 */ 9272 #define CV_CKPROTO_CURSTASH 0x1 9273 9274 void 9275 Perl_cv_ckproto_len_flags(pTHX_ const CV *cv, const GV *gv, const char *p, 9276 const STRLEN len, const U32 flags) 9277 { 9278 SV *name = NULL, *msg; 9279 const char * cvp = SvROK(cv) 9280 ? SvTYPE(SvRV_const(cv)) == SVt_PVCV 9281 ? (cv = (const CV *)SvRV_const(cv), CvPROTO(cv)) 9282 : "" 9283 : CvPROTO(cv); 9284 STRLEN clen = CvPROTOLEN(cv), plen = len; 9285 9286 PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS; 9287 9288 if (p == NULL && cvp == NULL) 9289 return; 9290 9291 if (!ckWARN_d(WARN_PROTOTYPE)) 9292 return; 9293 9294 if (p && cvp) { 9295 p = S_strip_spaces(aTHX_ p, &plen); 9296 cvp = S_strip_spaces(aTHX_ cvp, &clen); 9297 if ((flags & SVf_UTF8) == SvUTF8(cv)) { 9298 if (plen == clen && memEQ(cvp, p, plen)) 9299 return; 9300 } else { 9301 if (flags & SVf_UTF8) { 9302 if (bytes_cmp_utf8((const U8 *)cvp, clen, (const U8 *)p, plen) == 0) 9303 return; 9304 } 9305 else { 9306 if (bytes_cmp_utf8((const U8 *)p, plen, (const U8 *)cvp, clen) == 0) 9307 return; 9308 } 9309 } 9310 } 9311 9312 msg = sv_newmortal(); 9313 9314 if (gv) 9315 { 9316 if (isGV(gv)) 9317 gv_efullname3(name = sv_newmortal(), gv, NULL); 9318 else if (SvPOK(gv) && *SvPVX((SV *)gv) == '&') 9319 name = newSVpvn_flags(SvPVX((SV *)gv)+1, SvCUR(gv)-1, SvUTF8(gv)|SVs_TEMP); 9320 else if (flags & CV_CKPROTO_CURSTASH || SvROK(gv)) { 9321 name = sv_2mortal(newSVhek(HvNAME_HEK(PL_curstash))); 9322 sv_catpvs(name, "::"); 9323 if (SvROK(gv)) { 9324 assert (SvTYPE(SvRV_const(gv)) == SVt_PVCV); 9325 assert (CvNAMED(SvRV_const(gv))); 9326 sv_cathek(name, CvNAME_HEK(MUTABLE_CV(SvRV_const(gv)))); 9327 } 9328 else sv_catsv(name, (SV *)gv); 9329 } 9330 else name = (SV *)gv; 9331 } 9332 sv_setpvs(msg, "Prototype mismatch:"); 9333 if (name) 9334 Perl_sv_catpvf(aTHX_ msg, " sub %" SVf, SVfARG(name)); 9335 if (cvp) 9336 Perl_sv_catpvf(aTHX_ msg, " (%" UTF8f ")", 9337 UTF8fARG(SvUTF8(cv),clen,cvp) 9338 ); 9339 else 9340 sv_catpvs(msg, ": none"); 9341 sv_catpvs(msg, " vs "); 9342 if (p) 9343 Perl_sv_catpvf(aTHX_ msg, "(%" UTF8f ")", UTF8fARG(flags & SVf_UTF8,len,p)); 9344 else 9345 sv_catpvs(msg, "none"); 9346 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%" SVf, SVfARG(msg)); 9347 } 9348 9349 static void const_sv_xsub(pTHX_ CV* cv); 9350 static void const_av_xsub(pTHX_ CV* cv); 9351 9352 /* 9353 9354 =head1 Optree Manipulation Functions 9355 9356 =for apidoc cv_const_sv 9357 9358 If C<cv> is a constant sub eligible for inlining, returns the constant 9359 value returned by the sub. Otherwise, returns C<NULL>. 9360 9361 Constant subs can be created with C<newCONSTSUB> or as described in 9362 L<perlsub/"Constant Functions">. 9363 9364 =cut 9365 */ 9366 SV * 9367 Perl_cv_const_sv(const CV *const cv) 9368 { 9369 SV *sv; 9370 if (!cv) 9371 return NULL; 9372 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM)) 9373 return NULL; 9374 sv = CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL; 9375 if (sv && SvTYPE(sv) == SVt_PVAV) return NULL; 9376 return sv; 9377 } 9378 9379 SV * 9380 Perl_cv_const_sv_or_av(const CV * const cv) 9381 { 9382 if (!cv) 9383 return NULL; 9384 if (SvROK(cv)) return SvRV((SV *)cv); 9385 assert (SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM); 9386 return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL; 9387 } 9388 9389 /* op_const_sv: examine an optree to determine whether it's in-lineable. 9390 * Can be called in 2 ways: 9391 * 9392 * !allow_lex 9393 * look for a single OP_CONST with attached value: return the value 9394 * 9395 * allow_lex && !CvCONST(cv); 9396 * 9397 * examine the clone prototype, and if contains only a single 9398 * OP_CONST, return the value; or if it contains a single PADSV ref- 9399 * erencing an outer lexical, turn on CvCONST to indicate the CV is 9400 * a candidate for "constizing" at clone time, and return NULL. 9401 */ 9402 9403 static SV * 9404 S_op_const_sv(pTHX_ const OP *o, CV *cv, bool allow_lex) 9405 { 9406 SV *sv = NULL; 9407 bool padsv = FALSE; 9408 9409 assert(o); 9410 assert(cv); 9411 9412 for (; o; o = o->op_next) { 9413 const OPCODE type = o->op_type; 9414 9415 if (type == OP_NEXTSTATE || type == OP_LINESEQ 9416 || type == OP_NULL 9417 || type == OP_PUSHMARK) 9418 continue; 9419 if (type == OP_DBSTATE) 9420 continue; 9421 if (type == OP_LEAVESUB) 9422 break; 9423 if (sv) 9424 return NULL; 9425 if (type == OP_CONST && cSVOPo->op_sv) 9426 sv = cSVOPo->op_sv; 9427 else if (type == OP_UNDEF && !o->op_private) { 9428 sv = newSV(0); 9429 SAVEFREESV(sv); 9430 } 9431 else if (allow_lex && type == OP_PADSV) { 9432 if (PAD_COMPNAME_FLAGS(o->op_targ) & PADNAMEt_OUTER) 9433 { 9434 sv = &PL_sv_undef; /* an arbitrary non-null value */ 9435 padsv = TRUE; 9436 } 9437 else 9438 return NULL; 9439 } 9440 else { 9441 return NULL; 9442 } 9443 } 9444 if (padsv) { 9445 CvCONST_on(cv); 9446 return NULL; 9447 } 9448 return sv; 9449 } 9450 9451 static void 9452 S_already_defined(pTHX_ CV *const cv, OP * const block, OP * const o, 9453 PADNAME * const name, SV ** const const_svp) 9454 { 9455 assert (cv); 9456 assert (o || name); 9457 assert (const_svp); 9458 if (!block) { 9459 if (CvFLAGS(PL_compcv)) { 9460 /* might have had built-in attrs applied */ 9461 const bool pureperl = !CvISXSUB(cv) && CvROOT(cv); 9462 if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && pureperl 9463 && ckWARN(WARN_MISC)) 9464 { 9465 /* protect against fatal warnings leaking compcv */ 9466 SAVEFREESV(PL_compcv); 9467 Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined"); 9468 SvREFCNT_inc_simple_void_NN(PL_compcv); 9469 } 9470 CvFLAGS(cv) |= 9471 (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS 9472 & ~(CVf_LVALUE * pureperl)); 9473 } 9474 return; 9475 } 9476 9477 /* redundant check for speed: */ 9478 if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) { 9479 const line_t oldline = CopLINE(PL_curcop); 9480 SV *namesv = o 9481 ? cSVOPo->op_sv 9482 : sv_2mortal(newSVpvn_utf8( 9483 PadnamePV(name)+1,PadnameLEN(name)-1, PadnameUTF8(name) 9484 )); 9485 if (PL_parser && PL_parser->copline != NOLINE) 9486 /* This ensures that warnings are reported at the first 9487 line of a redefinition, not the last. */ 9488 CopLINE_set(PL_curcop, PL_parser->copline); 9489 /* protect against fatal warnings leaking compcv */ 9490 SAVEFREESV(PL_compcv); 9491 report_redefined_cv(namesv, cv, const_svp); 9492 SvREFCNT_inc_simple_void_NN(PL_compcv); 9493 CopLINE_set(PL_curcop, oldline); 9494 } 9495 SAVEFREESV(cv); 9496 return; 9497 } 9498 9499 CV * 9500 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) 9501 { 9502 CV **spot; 9503 SV **svspot; 9504 const char *ps; 9505 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */ 9506 U32 ps_utf8 = 0; 9507 CV *cv = NULL; 9508 CV *compcv = PL_compcv; 9509 SV *const_sv; 9510 PADNAME *name; 9511 PADOFFSET pax = o->op_targ; 9512 CV *outcv = CvOUTSIDE(PL_compcv); 9513 CV *clonee = NULL; 9514 HEK *hek = NULL; 9515 bool reusable = FALSE; 9516 OP *start = NULL; 9517 #ifdef PERL_DEBUG_READONLY_OPS 9518 OPSLAB *slab = NULL; 9519 #endif 9520 9521 PERL_ARGS_ASSERT_NEWMYSUB; 9522 9523 PL_hints |= HINT_BLOCK_SCOPE; 9524 9525 /* Find the pad slot for storing the new sub. 9526 We cannot use PL_comppad, as it is the pad owned by the new sub. We 9527 need to look in CvOUTSIDE and find the pad belonging to the enclos- 9528 ing sub. And then we need to dig deeper if this is a lexical from 9529 outside, as in: 9530 my sub foo; sub { sub foo { } } 9531 */ 9532 redo: 9533 name = PadlistNAMESARRAY(CvPADLIST(outcv))[pax]; 9534 if (PadnameOUTER(name) && PARENT_PAD_INDEX(name)) { 9535 pax = PARENT_PAD_INDEX(name); 9536 outcv = CvOUTSIDE(outcv); 9537 assert(outcv); 9538 goto redo; 9539 } 9540 svspot = 9541 &PadARRAY(PadlistARRAY(CvPADLIST(outcv)) 9542 [CvDEPTH(outcv) ? CvDEPTH(outcv) : 1])[pax]; 9543 spot = (CV **)svspot; 9544 9545 if (!(PL_parser && PL_parser->error_count)) 9546 move_proto_attr(&proto, &attrs, (GV *)PadnameSV(name), 0); 9547 9548 if (proto) { 9549 assert(proto->op_type == OP_CONST); 9550 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len); 9551 ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv); 9552 } 9553 else 9554 ps = NULL; 9555 9556 if (proto) 9557 SAVEFREEOP(proto); 9558 if (attrs) 9559 SAVEFREEOP(attrs); 9560 9561 if (PL_parser && PL_parser->error_count) { 9562 op_free(block); 9563 SvREFCNT_dec(PL_compcv); 9564 PL_compcv = 0; 9565 goto done; 9566 } 9567 9568 if (CvDEPTH(outcv) && CvCLONE(compcv)) { 9569 cv = *spot; 9570 svspot = (SV **)(spot = &clonee); 9571 } 9572 else if (PadnameIsSTATE(name) || CvDEPTH(outcv)) 9573 cv = *spot; 9574 else { 9575 assert (SvTYPE(*spot) == SVt_PVCV); 9576 if (CvNAMED(*spot)) 9577 hek = CvNAME_HEK(*spot); 9578 else { 9579 dVAR; 9580 U32 hash; 9581 PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1); 9582 CvNAME_HEK_set(*spot, hek = 9583 share_hek( 9584 PadnamePV(name)+1, 9585 (PadnameLEN(name)-1) * (PadnameUTF8(name) ? -1 : 1), 9586 hash 9587 ) 9588 ); 9589 CvLEXICAL_on(*spot); 9590 } 9591 cv = PadnamePROTOCV(name); 9592 svspot = (SV **)(spot = &PadnamePROTOCV(name)); 9593 } 9594 9595 if (block) { 9596 /* This makes sub {}; work as expected. */ 9597 if (block->op_type == OP_STUB) { 9598 const line_t l = PL_parser->copline; 9599 op_free(block); 9600 block = newSTATEOP(0, NULL, 0); 9601 PL_parser->copline = l; 9602 } 9603 block = CvLVALUE(compcv) 9604 || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv)) 9605 ? newUNOP(OP_LEAVESUBLV, 0, 9606 op_lvalue(scalarseq(block), OP_LEAVESUBLV)) 9607 : newUNOP(OP_LEAVESUB, 0, scalarseq(block)); 9608 start = LINKLIST(block); 9609 block->op_next = 0; 9610 if (ps && !*ps && !attrs && !CvLVALUE(compcv)) 9611 const_sv = S_op_const_sv(aTHX_ start, compcv, FALSE); 9612 else 9613 const_sv = NULL; 9614 } 9615 else 9616 const_sv = NULL; 9617 9618 if (cv) { 9619 const bool exists = CvROOT(cv) || CvXSUB(cv); 9620 9621 /* if the subroutine doesn't exist and wasn't pre-declared 9622 * with a prototype, assume it will be AUTOLOADed, 9623 * skipping the prototype check 9624 */ 9625 if (exists || SvPOK(cv)) 9626 cv_ckproto_len_flags(cv, (GV *)PadnameSV(name), ps, ps_len, 9627 ps_utf8); 9628 /* already defined? */ 9629 if (exists) { 9630 S_already_defined(aTHX_ cv, block, NULL, name, &const_sv); 9631 if (block) 9632 cv = NULL; 9633 else { 9634 if (attrs) 9635 goto attrs; 9636 /* just a "sub foo;" when &foo is already defined */ 9637 SAVEFREESV(compcv); 9638 goto done; 9639 } 9640 } 9641 else if (CvDEPTH(outcv) && CvCLONE(compcv)) { 9642 cv = NULL; 9643 reusable = TRUE; 9644 } 9645 } 9646 9647 if (const_sv) { 9648 SvREFCNT_inc_simple_void_NN(const_sv); 9649 SvFLAGS(const_sv) |= SVs_PADTMP; 9650 if (cv) { 9651 assert(!CvROOT(cv) && !CvCONST(cv)); 9652 cv_forget_slab(cv); 9653 } 9654 else { 9655 cv = MUTABLE_CV(newSV_type(SVt_PVCV)); 9656 CvFILE_set_from_cop(cv, PL_curcop); 9657 CvSTASH_set(cv, PL_curstash); 9658 *spot = cv; 9659 } 9660 SvPVCLEAR(MUTABLE_SV(cv)); /* prototype is "" */ 9661 CvXSUBANY(cv).any_ptr = const_sv; 9662 CvXSUB(cv) = const_sv_xsub; 9663 CvCONST_on(cv); 9664 CvISXSUB_on(cv); 9665 PoisonPADLIST(cv); 9666 CvFLAGS(cv) |= CvMETHOD(compcv); 9667 op_free(block); 9668 SvREFCNT_dec(compcv); 9669 PL_compcv = NULL; 9670 goto setname; 9671 } 9672 9673 /* Checking whether outcv is CvOUTSIDE(compcv) is not sufficient to 9674 determine whether this sub definition is in the same scope as its 9675 declaration. If this sub definition is inside an inner named pack- 9676 age sub (my sub foo; sub bar { sub foo { ... } }), outcv points to 9677 the package sub. So check PadnameOUTER(name) too. 9678 */ 9679 if (outcv == CvOUTSIDE(compcv) && !PadnameOUTER(name)) { 9680 assert(!CvWEAKOUTSIDE(compcv)); 9681 SvREFCNT_dec(CvOUTSIDE(compcv)); 9682 CvWEAKOUTSIDE_on(compcv); 9683 } 9684 /* XXX else do we have a circular reference? */ 9685 9686 if (cv) { /* must reuse cv in case stub is referenced elsewhere */ 9687 /* transfer PL_compcv to cv */ 9688 if (block) { 9689 bool free_file = CvFILE(cv) && CvDYNFILE(cv); 9690 cv_flags_t preserved_flags = 9691 CvFLAGS(cv) & (CVf_BUILTIN_ATTRS|CVf_NAMED); 9692 PADLIST *const temp_padl = CvPADLIST(cv); 9693 CV *const temp_cv = CvOUTSIDE(cv); 9694 const cv_flags_t other_flags = 9695 CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE); 9696 OP * const cvstart = CvSTART(cv); 9697 9698 SvPOK_off(cv); 9699 CvFLAGS(cv) = 9700 CvFLAGS(compcv) | preserved_flags; 9701 CvOUTSIDE(cv) = CvOUTSIDE(compcv); 9702 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(compcv); 9703 CvPADLIST_set(cv, CvPADLIST(compcv)); 9704 CvOUTSIDE(compcv) = temp_cv; 9705 CvPADLIST_set(compcv, temp_padl); 9706 CvSTART(cv) = CvSTART(compcv); 9707 CvSTART(compcv) = cvstart; 9708 CvFLAGS(compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE); 9709 CvFLAGS(compcv) |= other_flags; 9710 9711 if (free_file) { 9712 Safefree(CvFILE(cv)); 9713 CvFILE(cv) = NULL; 9714 } 9715 9716 /* inner references to compcv must be fixed up ... */ 9717 pad_fixup_inner_anons(CvPADLIST(cv), compcv, cv); 9718 if (PERLDB_INTER)/* Advice debugger on the new sub. */ 9719 ++PL_sub_generation; 9720 } 9721 else { 9722 /* Might have had built-in attributes applied -- propagate them. */ 9723 CvFLAGS(cv) |= (CvFLAGS(compcv) & CVf_BUILTIN_ATTRS); 9724 } 9725 /* ... before we throw it away */ 9726 SvREFCNT_dec(compcv); 9727 PL_compcv = compcv = cv; 9728 } 9729 else { 9730 cv = compcv; 9731 *spot = cv; 9732 } 9733 9734 setname: 9735 CvLEXICAL_on(cv); 9736 if (!CvNAME_HEK(cv)) { 9737 if (hek) (void)share_hek_hek(hek); 9738 else { 9739 dVAR; 9740 U32 hash; 9741 PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1); 9742 hek = share_hek(PadnamePV(name)+1, 9743 (PadnameLEN(name)-1) * (PadnameUTF8(name) ? -1 : 1), 9744 hash); 9745 } 9746 CvNAME_HEK_set(cv, hek); 9747 } 9748 9749 if (const_sv) 9750 goto clone; 9751 9752 if (CvFILE(cv) && CvDYNFILE(cv)) 9753 Safefree(CvFILE(cv)); 9754 CvFILE_set_from_cop(cv, PL_curcop); 9755 CvSTASH_set(cv, PL_curstash); 9756 9757 if (ps) { 9758 sv_setpvn(MUTABLE_SV(cv), ps, ps_len); 9759 if (ps_utf8) 9760 SvUTF8_on(MUTABLE_SV(cv)); 9761 } 9762 9763 if (block) { 9764 /* If we assign an optree to a PVCV, then we've defined a 9765 * subroutine that the debugger could be able to set a breakpoint 9766 * in, so signal to pp_entereval that it should not throw away any 9767 * saved lines at scope exit. */ 9768 9769 PL_breakable_sub_gen++; 9770 CvROOT(cv) = block; 9771 /* The cv no longer needs to hold a refcount on the slab, as CvROOT 9772 itself has a refcount. */ 9773 CvSLABBED_off(cv); 9774 OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv)); 9775 #ifdef PERL_DEBUG_READONLY_OPS 9776 slab = (OPSLAB *)CvSTART(cv); 9777 #endif 9778 S_process_optree(aTHX_ cv, block, start); 9779 } 9780 9781 attrs: 9782 if (attrs) { 9783 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */ 9784 apply_attrs(PL_curstash, MUTABLE_SV(cv), attrs); 9785 } 9786 9787 if (block) { 9788 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) { 9789 SV * const tmpstr = sv_newmortal(); 9790 GV * const db_postponed = gv_fetchpvs("DB::postponed", 9791 GV_ADDMULTI, SVt_PVHV); 9792 HV *hv; 9793 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld", 9794 CopFILE(PL_curcop), 9795 (long)PL_subline, 9796 (long)CopLINE(PL_curcop)); 9797 if (HvNAME_HEK(PL_curstash)) { 9798 sv_sethek(tmpstr, HvNAME_HEK(PL_curstash)); 9799 sv_catpvs(tmpstr, "::"); 9800 } 9801 else 9802 sv_setpvs(tmpstr, "__ANON__::"); 9803 9804 sv_catpvn_flags(tmpstr, PadnamePV(name)+1, PadnameLEN(name)-1, 9805 PadnameUTF8(name) ? SV_CATUTF8 : SV_CATBYTES); 9806 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), 9807 SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0); 9808 hv = GvHVn(db_postponed); 9809 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) { 9810 CV * const pcv = GvCV(db_postponed); 9811 if (pcv) { 9812 dSP; 9813 PUSHMARK(SP); 9814 XPUSHs(tmpstr); 9815 PUTBACK; 9816 call_sv(MUTABLE_SV(pcv), G_DISCARD); 9817 } 9818 } 9819 } 9820 } 9821 9822 clone: 9823 if (clonee) { 9824 assert(CvDEPTH(outcv)); 9825 spot = (CV **) 9826 &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[CvDEPTH(outcv)])[pax]; 9827 if (reusable) 9828 cv_clone_into(clonee, *spot); 9829 else *spot = cv_clone(clonee); 9830 SvREFCNT_dec_NN(clonee); 9831 cv = *spot; 9832 } 9833 9834 if (CvDEPTH(outcv) && !reusable && PadnameIsSTATE(name)) { 9835 PADOFFSET depth = CvDEPTH(outcv); 9836 while (--depth) { 9837 SV *oldcv; 9838 svspot = &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[depth])[pax]; 9839 oldcv = *svspot; 9840 *svspot = SvREFCNT_inc_simple_NN(cv); 9841 SvREFCNT_dec(oldcv); 9842 } 9843 } 9844 9845 done: 9846 if (PL_parser) 9847 PL_parser->copline = NOLINE; 9848 LEAVE_SCOPE(floor); 9849 #ifdef PERL_DEBUG_READONLY_OPS 9850 if (slab) 9851 Slab_to_ro(slab); 9852 #endif 9853 op_free(o); 9854 return cv; 9855 } 9856 9857 /* 9858 =for apidoc m|CV *|newATTRSUB_x|I32 floor|OP *o|OP *proto|OP *attrs|OP *block|bool o_is_gv 9859 9860 Construct a Perl subroutine, also performing some surrounding jobs. 9861 9862 This function is expected to be called in a Perl compilation context, 9863 and some aspects of the subroutine are taken from global variables 9864 associated with compilation. In particular, C<PL_compcv> represents 9865 the subroutine that is currently being compiled. It must be non-null 9866 when this function is called, and some aspects of the subroutine being 9867 constructed are taken from it. The constructed subroutine may actually 9868 be a reuse of the C<PL_compcv> object, but will not necessarily be so. 9869 9870 If C<block> is null then the subroutine will have no body, and for the 9871 time being it will be an error to call it. This represents a forward 9872 subroutine declaration such as S<C<sub foo ($$);>>. If C<block> is 9873 non-null then it provides the Perl code of the subroutine body, which 9874 will be executed when the subroutine is called. This body includes 9875 any argument unwrapping code resulting from a subroutine signature or 9876 similar. The pad use of the code must correspond to the pad attached 9877 to C<PL_compcv>. The code is not expected to include a C<leavesub> or 9878 C<leavesublv> op; this function will add such an op. C<block> is consumed 9879 by this function and will become part of the constructed subroutine. 9880 9881 C<proto> specifies the subroutine's prototype, unless one is supplied 9882 as an attribute (see below). If C<proto> is null, then the subroutine 9883 will not have a prototype. If C<proto> is non-null, it must point to a 9884 C<const> op whose value is a string, and the subroutine will have that 9885 string as its prototype. If a prototype is supplied as an attribute, the 9886 attribute takes precedence over C<proto>, but in that case C<proto> should 9887 preferably be null. In any case, C<proto> is consumed by this function. 9888 9889 C<attrs> supplies attributes to be applied the subroutine. A handful of 9890 attributes take effect by built-in means, being applied to C<PL_compcv> 9891 immediately when seen. Other attributes are collected up and attached 9892 to the subroutine by this route. C<attrs> may be null to supply no 9893 attributes, or point to a C<const> op for a single attribute, or point 9894 to a C<list> op whose children apart from the C<pushmark> are C<const> 9895 ops for one or more attributes. Each C<const> op must be a string, 9896 giving the attribute name optionally followed by parenthesised arguments, 9897 in the manner in which attributes appear in Perl source. The attributes 9898 will be applied to the sub by this function. C<attrs> is consumed by 9899 this function. 9900 9901 If C<o_is_gv> is false and C<o> is null, then the subroutine will 9902 be anonymous. If C<o_is_gv> is false and C<o> is non-null, then C<o> 9903 must point to a C<const> op, which will be consumed by this function, 9904 and its string value supplies a name for the subroutine. The name may 9905 be qualified or unqualified, and if it is unqualified then a default 9906 stash will be selected in some manner. If C<o_is_gv> is true, then C<o> 9907 doesn't point to an C<OP> at all, but is instead a cast pointer to a C<GV> 9908 by which the subroutine will be named. 9909 9910 If there is already a subroutine of the specified name, then the new 9911 sub will either replace the existing one in the glob or be merged with 9912 the existing one. A warning may be generated about redefinition. 9913 9914 If the subroutine has one of a few special names, such as C<BEGIN> or 9915 C<END>, then it will be claimed by the appropriate queue for automatic 9916 running of phase-related subroutines. In this case the relevant glob will 9917 be left not containing any subroutine, even if it did contain one before. 9918 In the case of C<BEGIN>, the subroutine will be executed and the reference 9919 to it disposed of before this function returns. 9920 9921 The function returns a pointer to the constructed subroutine. If the sub 9922 is anonymous then ownership of one counted reference to the subroutine 9923 is transferred to the caller. If the sub is named then the caller does 9924 not get ownership of a reference. In most such cases, where the sub 9925 has a non-phase name, the sub will be alive at the point it is returned 9926 by virtue of being contained in the glob that names it. A phase-named 9927 subroutine will usually be alive by virtue of the reference owned by the 9928 phase's automatic run queue. But a C<BEGIN> subroutine, having already 9929 been executed, will quite likely have been destroyed already by the 9930 time this function returns, making it erroneous for the caller to make 9931 any use of the returned pointer. It is the caller's responsibility to 9932 ensure that it knows which of these situations applies. 9933 9934 =cut 9935 */ 9936 9937 /* _x = extended */ 9938 CV * 9939 Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, 9940 OP *block, bool o_is_gv) 9941 { 9942 GV *gv; 9943 const char *ps; 9944 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */ 9945 U32 ps_utf8 = 0; 9946 CV *cv = NULL; /* the previous CV with this name, if any */ 9947 SV *const_sv; 9948 const bool ec = PL_parser && PL_parser->error_count; 9949 /* If the subroutine has no body, no attributes, and no builtin attributes 9950 then it's just a sub declaration, and we may be able to get away with 9951 storing with a placeholder scalar in the symbol table, rather than a 9952 full CV. If anything is present then it will take a full CV to 9953 store it. */ 9954 const I32 gv_fetch_flags 9955 = ec ? GV_NOADD_NOINIT : 9956 (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)) 9957 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT; 9958 STRLEN namlen = 0; 9959 const char * const name = 9960 o ? SvPV_const(o_is_gv ? (SV *)o : cSVOPo->op_sv, namlen) : NULL; 9961 bool has_name; 9962 bool name_is_utf8 = o && !o_is_gv && SvUTF8(cSVOPo->op_sv); 9963 bool evanescent = FALSE; 9964 OP *start = NULL; 9965 #ifdef PERL_DEBUG_READONLY_OPS 9966 OPSLAB *slab = NULL; 9967 #endif 9968 9969 if (o_is_gv) { 9970 gv = (GV*)o; 9971 o = NULL; 9972 has_name = TRUE; 9973 } else if (name) { 9974 /* Try to optimise and avoid creating a GV. Instead, the CV’s name 9975 hek and CvSTASH pointer together can imply the GV. If the name 9976 contains a package name, then GvSTASH(CvGV(cv)) may differ from 9977 CvSTASH, so forego the optimisation if we find any. 9978 Also, we may be called from load_module at run time, so 9979 PL_curstash (which sets CvSTASH) may not point to the stash the 9980 sub is stored in. */ 9981 /* XXX This optimization is currently disabled for packages other 9982 than main, since there was too much CPAN breakage. */ 9983 const I32 flags = 9984 ec ? GV_NOADD_NOINIT 9985 : (IN_PERL_RUNTIME && PL_curstash != CopSTASH(PL_curcop)) 9986 || PL_curstash != PL_defstash 9987 || memchr(name, ':', namlen) || memchr(name, '\'', namlen) 9988 ? gv_fetch_flags 9989 : GV_ADDMULTI | GV_NOINIT | GV_NOTQUAL; 9990 gv = gv_fetchsv(cSVOPo->op_sv, flags, SVt_PVCV); 9991 has_name = TRUE; 9992 } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) { 9993 SV * const sv = sv_newmortal(); 9994 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%" IVdf "]", 9995 PL_curstash ? "__ANON__" : "__ANON__::__ANON__", 9996 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop)); 9997 gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV); 9998 has_name = TRUE; 9999 } else if (PL_curstash) { 10000 gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV); 10001 has_name = FALSE; 10002 } else { 10003 gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV); 10004 has_name = FALSE; 10005 } 10006 10007 if (!ec) { 10008 if (isGV(gv)) { 10009 move_proto_attr(&proto, &attrs, gv, 0); 10010 } else { 10011 assert(cSVOPo); 10012 move_proto_attr(&proto, &attrs, (GV *)cSVOPo->op_sv, 1); 10013 } 10014 } 10015 10016 if (proto) { 10017 assert(proto->op_type == OP_CONST); 10018 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len); 10019 ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv); 10020 } 10021 else 10022 ps = NULL; 10023 10024 if (o) 10025 SAVEFREEOP(o); 10026 if (proto) 10027 SAVEFREEOP(proto); 10028 if (attrs) 10029 SAVEFREEOP(attrs); 10030 10031 if (ec) { 10032 op_free(block); 10033 10034 if (name) 10035 SvREFCNT_dec(PL_compcv); 10036 else 10037 cv = PL_compcv; 10038 10039 PL_compcv = 0; 10040 if (name && block) { 10041 const char *s = (char *) my_memrchr(name, ':', namlen); 10042 s = s ? s+1 : name; 10043 if (strEQ(s, "BEGIN")) { 10044 if (PL_in_eval & EVAL_KEEPERR) 10045 Perl_croak_nocontext("BEGIN not safe after errors--compilation aborted"); 10046 else { 10047 SV * const errsv = ERRSV; 10048 /* force display of errors found but not reported */ 10049 sv_catpvs(errsv, "BEGIN not safe after errors--compilation aborted"); 10050 Perl_croak_nocontext("%" SVf, SVfARG(errsv)); 10051 } 10052 } 10053 } 10054 goto done; 10055 } 10056 10057 if (!block && SvTYPE(gv) != SVt_PVGV) { 10058 /* If we are not defining a new sub and the existing one is not a 10059 full GV + CV... */ 10060 if (attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)) { 10061 /* We are applying attributes to an existing sub, so we need it 10062 upgraded if it is a constant. */ 10063 if (SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVCV) 10064 gv_init_pvn(gv, PL_curstash, name, namlen, 10065 SVf_UTF8 * name_is_utf8); 10066 } 10067 else { /* Maybe prototype now, and had at maximum 10068 a prototype or const/sub ref before. */ 10069 if (SvTYPE(gv) > SVt_NULL) { 10070 cv_ckproto_len_flags((const CV *)gv, 10071 o ? (const GV *)cSVOPo->op_sv : NULL, ps, 10072 ps_len, ps_utf8); 10073 } 10074 10075 if (!SvROK(gv)) { 10076 if (ps) { 10077 sv_setpvn(MUTABLE_SV(gv), ps, ps_len); 10078 if (ps_utf8) 10079 SvUTF8_on(MUTABLE_SV(gv)); 10080 } 10081 else 10082 sv_setiv(MUTABLE_SV(gv), -1); 10083 } 10084 10085 SvREFCNT_dec(PL_compcv); 10086 cv = PL_compcv = NULL; 10087 goto done; 10088 } 10089 } 10090 10091 cv = (!name || (isGV(gv) && GvCVGEN(gv))) 10092 ? NULL 10093 : isGV(gv) 10094 ? GvCV(gv) 10095 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV 10096 ? (CV *)SvRV(gv) 10097 : NULL; 10098 10099 if (block) { 10100 assert(PL_parser); 10101 /* This makes sub {}; work as expected. */ 10102 if (block->op_type == OP_STUB) { 10103 const line_t l = PL_parser->copline; 10104 op_free(block); 10105 block = newSTATEOP(0, NULL, 0); 10106 PL_parser->copline = l; 10107 } 10108 block = CvLVALUE(PL_compcv) 10109 || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv) 10110 && (!isGV(gv) || !GvASSUMECV(gv))) 10111 ? newUNOP(OP_LEAVESUBLV, 0, 10112 op_lvalue(scalarseq(block), OP_LEAVESUBLV)) 10113 : newUNOP(OP_LEAVESUB, 0, scalarseq(block)); 10114 start = LINKLIST(block); 10115 block->op_next = 0; 10116 if (ps && !*ps && !attrs && !CvLVALUE(PL_compcv)) 10117 const_sv = 10118 S_op_const_sv(aTHX_ start, PL_compcv, 10119 cBOOL(CvCLONE(PL_compcv))); 10120 else 10121 const_sv = NULL; 10122 } 10123 else 10124 const_sv = NULL; 10125 10126 if (SvPOK(gv) || (SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVCV)) { 10127 cv_ckproto_len_flags((const CV *)gv, 10128 o ? (const GV *)cSVOPo->op_sv : NULL, ps, 10129 ps_len, ps_utf8|CV_CKPROTO_CURSTASH); 10130 if (SvROK(gv)) { 10131 /* All the other code for sub redefinition warnings expects the 10132 clobbered sub to be a CV. Instead of making all those code 10133 paths more complex, just inline the RV version here. */ 10134 const line_t oldline = CopLINE(PL_curcop); 10135 assert(IN_PERL_COMPILETIME); 10136 if (PL_parser && PL_parser->copline != NOLINE) 10137 /* This ensures that warnings are reported at the first 10138 line of a redefinition, not the last. */ 10139 CopLINE_set(PL_curcop, PL_parser->copline); 10140 /* protect against fatal warnings leaking compcv */ 10141 SAVEFREESV(PL_compcv); 10142 10143 if (ckWARN(WARN_REDEFINE) 10144 || ( ckWARN_d(WARN_REDEFINE) 10145 && ( !const_sv || SvRV(gv) == const_sv 10146 || sv_cmp(SvRV(gv), const_sv) ))) { 10147 assert(cSVOPo); 10148 Perl_warner(aTHX_ packWARN(WARN_REDEFINE), 10149 "Constant subroutine %" SVf " redefined", 10150 SVfARG(cSVOPo->op_sv)); 10151 } 10152 10153 SvREFCNT_inc_simple_void_NN(PL_compcv); 10154 CopLINE_set(PL_curcop, oldline); 10155 SvREFCNT_dec(SvRV(gv)); 10156 } 10157 } 10158 10159 if (cv) { 10160 const bool exists = CvROOT(cv) || CvXSUB(cv); 10161 10162 /* if the subroutine doesn't exist and wasn't pre-declared 10163 * with a prototype, assume it will be AUTOLOADed, 10164 * skipping the prototype check 10165 */ 10166 if (exists || SvPOK(cv)) 10167 cv_ckproto_len_flags(cv, gv, ps, ps_len, ps_utf8); 10168 /* already defined (or promised)? */ 10169 if (exists || (isGV(gv) && GvASSUMECV(gv))) { 10170 S_already_defined(aTHX_ cv, block, o, NULL, &const_sv); 10171 if (block) 10172 cv = NULL; 10173 else { 10174 if (attrs) 10175 goto attrs; 10176 /* just a "sub foo;" when &foo is already defined */ 10177 SAVEFREESV(PL_compcv); 10178 goto done; 10179 } 10180 } 10181 } 10182 10183 if (const_sv) { 10184 SvREFCNT_inc_simple_void_NN(const_sv); 10185 SvFLAGS(const_sv) |= SVs_PADTMP; 10186 if (cv) { 10187 assert(!CvROOT(cv) && !CvCONST(cv)); 10188 cv_forget_slab(cv); 10189 SvPVCLEAR(MUTABLE_SV(cv)); /* prototype is "" */ 10190 CvXSUBANY(cv).any_ptr = const_sv; 10191 CvXSUB(cv) = const_sv_xsub; 10192 CvCONST_on(cv); 10193 CvISXSUB_on(cv); 10194 PoisonPADLIST(cv); 10195 CvFLAGS(cv) |= CvMETHOD(PL_compcv); 10196 } 10197 else { 10198 if (isGV(gv) || CvMETHOD(PL_compcv)) { 10199 if (name && isGV(gv)) 10200 GvCV_set(gv, NULL); 10201 cv = newCONSTSUB_flags( 10202 NULL, name, namlen, name_is_utf8 ? SVf_UTF8 : 0, 10203 const_sv 10204 ); 10205 assert(cv); 10206 assert(SvREFCNT((SV*)cv) != 0); 10207 CvFLAGS(cv) |= CvMETHOD(PL_compcv); 10208 } 10209 else { 10210 if (!SvROK(gv)) { 10211 SV_CHECK_THINKFIRST_COW_DROP((SV *)gv); 10212 prepare_SV_for_RV((SV *)gv); 10213 SvOK_off((SV *)gv); 10214 SvROK_on(gv); 10215 } 10216 SvRV_set(gv, const_sv); 10217 } 10218 } 10219 op_free(block); 10220 SvREFCNT_dec(PL_compcv); 10221 PL_compcv = NULL; 10222 goto done; 10223 } 10224 10225 /* don't copy new BEGIN CV to old BEGIN CV - RT #129099 */ 10226 if (name && cv && *name == 'B' && strEQ(name, "BEGIN")) 10227 cv = NULL; 10228 10229 if (cv) { /* must reuse cv if autoloaded */ 10230 /* transfer PL_compcv to cv */ 10231 if (block) { 10232 bool free_file = CvFILE(cv) && CvDYNFILE(cv); 10233 cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS; 10234 PADLIST *const temp_av = CvPADLIST(cv); 10235 CV *const temp_cv = CvOUTSIDE(cv); 10236 const cv_flags_t other_flags = 10237 CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE); 10238 OP * const cvstart = CvSTART(cv); 10239 10240 if (isGV(gv)) { 10241 CvGV_set(cv,gv); 10242 assert(!CvCVGV_RC(cv)); 10243 assert(CvGV(cv) == gv); 10244 } 10245 else { 10246 dVAR; 10247 U32 hash; 10248 PERL_HASH(hash, name, namlen); 10249 CvNAME_HEK_set(cv, 10250 share_hek(name, 10251 name_is_utf8 10252 ? -(SSize_t)namlen 10253 : (SSize_t)namlen, 10254 hash)); 10255 } 10256 10257 SvPOK_off(cv); 10258 CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs 10259 | CvNAMED(cv); 10260 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv); 10261 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv); 10262 CvPADLIST_set(cv,CvPADLIST(PL_compcv)); 10263 CvOUTSIDE(PL_compcv) = temp_cv; 10264 CvPADLIST_set(PL_compcv, temp_av); 10265 CvSTART(cv) = CvSTART(PL_compcv); 10266 CvSTART(PL_compcv) = cvstart; 10267 CvFLAGS(PL_compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE); 10268 CvFLAGS(PL_compcv) |= other_flags; 10269 10270 if (free_file) { 10271 Safefree(CvFILE(cv)); 10272 } 10273 CvFILE_set_from_cop(cv, PL_curcop); 10274 CvSTASH_set(cv, PL_curstash); 10275 10276 /* inner references to PL_compcv must be fixed up ... */ 10277 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv); 10278 if (PERLDB_INTER)/* Advice debugger on the new sub. */ 10279 ++PL_sub_generation; 10280 } 10281 else { 10282 /* Might have had built-in attributes applied -- propagate them. */ 10283 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS); 10284 } 10285 /* ... before we throw it away */ 10286 SvREFCNT_dec(PL_compcv); 10287 PL_compcv = cv; 10288 } 10289 else { 10290 cv = PL_compcv; 10291 if (name && isGV(gv)) { 10292 GvCV_set(gv, cv); 10293 GvCVGEN(gv) = 0; 10294 if (HvENAME_HEK(GvSTASH(gv))) 10295 /* sub Foo::bar { (shift)+1 } */ 10296 gv_method_changed(gv); 10297 } 10298 else if (name) { 10299 if (!SvROK(gv)) { 10300 SV_CHECK_THINKFIRST_COW_DROP((SV *)gv); 10301 prepare_SV_for_RV((SV *)gv); 10302 SvOK_off((SV *)gv); 10303 SvROK_on(gv); 10304 } 10305 SvRV_set(gv, (SV *)cv); 10306 if (HvENAME_HEK(PL_curstash)) 10307 mro_method_changed_in(PL_curstash); 10308 } 10309 } 10310 assert(cv); 10311 assert(SvREFCNT((SV*)cv) != 0); 10312 10313 if (!CvHASGV(cv)) { 10314 if (isGV(gv)) 10315 CvGV_set(cv, gv); 10316 else { 10317 dVAR; 10318 U32 hash; 10319 PERL_HASH(hash, name, namlen); 10320 CvNAME_HEK_set(cv, share_hek(name, 10321 name_is_utf8 10322 ? -(SSize_t)namlen 10323 : (SSize_t)namlen, 10324 hash)); 10325 } 10326 CvFILE_set_from_cop(cv, PL_curcop); 10327 CvSTASH_set(cv, PL_curstash); 10328 } 10329 10330 if (ps) { 10331 sv_setpvn(MUTABLE_SV(cv), ps, ps_len); 10332 if ( ps_utf8 ) 10333 SvUTF8_on(MUTABLE_SV(cv)); 10334 } 10335 10336 if (block) { 10337 /* If we assign an optree to a PVCV, then we've defined a 10338 * subroutine that the debugger could be able to set a breakpoint 10339 * in, so signal to pp_entereval that it should not throw away any 10340 * saved lines at scope exit. */ 10341 10342 PL_breakable_sub_gen++; 10343 CvROOT(cv) = block; 10344 /* The cv no longer needs to hold a refcount on the slab, as CvROOT 10345 itself has a refcount. */ 10346 CvSLABBED_off(cv); 10347 OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv)); 10348 #ifdef PERL_DEBUG_READONLY_OPS 10349 slab = (OPSLAB *)CvSTART(cv); 10350 #endif 10351 S_process_optree(aTHX_ cv, block, start); 10352 } 10353 10354 attrs: 10355 if (attrs) { 10356 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */ 10357 HV *stash = name && !CvNAMED(cv) && GvSTASH(CvGV(cv)) 10358 ? GvSTASH(CvGV(cv)) 10359 : PL_curstash; 10360 if (!name) 10361 SAVEFREESV(cv); 10362 apply_attrs(stash, MUTABLE_SV(cv), attrs); 10363 if (!name) 10364 SvREFCNT_inc_simple_void_NN(cv); 10365 } 10366 10367 if (block && has_name) { 10368 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) { 10369 SV * const tmpstr = cv_name(cv,NULL,0); 10370 GV * const db_postponed = gv_fetchpvs("DB::postponed", 10371 GV_ADDMULTI, SVt_PVHV); 10372 HV *hv; 10373 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld", 10374 CopFILE(PL_curcop), 10375 (long)PL_subline, 10376 (long)CopLINE(PL_curcop)); 10377 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), 10378 SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0); 10379 hv = GvHVn(db_postponed); 10380 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) { 10381 CV * const pcv = GvCV(db_postponed); 10382 if (pcv) { 10383 dSP; 10384 PUSHMARK(SP); 10385 XPUSHs(tmpstr); 10386 PUTBACK; 10387 call_sv(MUTABLE_SV(pcv), G_DISCARD); 10388 } 10389 } 10390 } 10391 10392 if (name) { 10393 if (PL_parser && PL_parser->error_count) 10394 clear_special_blocks(name, gv, cv); 10395 else 10396 evanescent = 10397 process_special_blocks(floor, name, gv, cv); 10398 } 10399 } 10400 assert(cv); 10401 10402 done: 10403 assert(!cv || evanescent || SvREFCNT((SV*)cv) != 0); 10404 if (PL_parser) 10405 PL_parser->copline = NOLINE; 10406 LEAVE_SCOPE(floor); 10407 10408 assert(!cv || evanescent || SvREFCNT((SV*)cv) != 0); 10409 if (!evanescent) { 10410 #ifdef PERL_DEBUG_READONLY_OPS 10411 if (slab) 10412 Slab_to_ro(slab); 10413 #endif 10414 if (cv && name && block && CvOUTSIDE(cv) && !CvEVAL(CvOUTSIDE(cv))) 10415 pad_add_weakref(cv); 10416 } 10417 return cv; 10418 } 10419 10420 STATIC void 10421 S_clear_special_blocks(pTHX_ const char *const fullname, 10422 GV *const gv, CV *const cv) { 10423 const char *colon; 10424 const char *name; 10425 10426 PERL_ARGS_ASSERT_CLEAR_SPECIAL_BLOCKS; 10427 10428 colon = strrchr(fullname,':'); 10429 name = colon ? colon + 1 : fullname; 10430 10431 if ((*name == 'B' && strEQ(name, "BEGIN")) 10432 || (*name == 'E' && strEQ(name, "END")) 10433 || (*name == 'U' && strEQ(name, "UNITCHECK")) 10434 || (*name == 'C' && strEQ(name, "CHECK")) 10435 || (*name == 'I' && strEQ(name, "INIT"))) { 10436 if (!isGV(gv)) { 10437 (void)CvGV(cv); 10438 assert(isGV(gv)); 10439 } 10440 GvCV_set(gv, NULL); 10441 SvREFCNT_dec_NN(MUTABLE_SV(cv)); 10442 } 10443 } 10444 10445 /* Returns true if the sub has been freed. */ 10446 STATIC bool 10447 S_process_special_blocks(pTHX_ I32 floor, const char *const fullname, 10448 GV *const gv, 10449 CV *const cv) 10450 { 10451 const char *const colon = strrchr(fullname,':'); 10452 const char *const name = colon ? colon + 1 : fullname; 10453 10454 PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS; 10455 10456 if (*name == 'B') { 10457 if (strEQ(name, "BEGIN")) { 10458 const I32 oldscope = PL_scopestack_ix; 10459 dSP; 10460 (void)CvGV(cv); 10461 if (floor) LEAVE_SCOPE(floor); 10462 ENTER; 10463 PUSHSTACKi(PERLSI_REQUIRE); 10464 SAVECOPFILE(&PL_compiling); 10465 SAVECOPLINE(&PL_compiling); 10466 SAVEVPTR(PL_curcop); 10467 10468 DEBUG_x( dump_sub(gv) ); 10469 Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv)); 10470 GvCV_set(gv,0); /* cv has been hijacked */ 10471 call_list(oldscope, PL_beginav); 10472 10473 POPSTACK; 10474 LEAVE; 10475 return !PL_savebegin; 10476 } 10477 else 10478 return FALSE; 10479 } else { 10480 if (*name == 'E') { 10481 if strEQ(name, "END") { 10482 DEBUG_x( dump_sub(gv) ); 10483 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv)); 10484 } else 10485 return FALSE; 10486 } else if (*name == 'U') { 10487 if (strEQ(name, "UNITCHECK")) { 10488 /* It's never too late to run a unitcheck block */ 10489 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv)); 10490 } 10491 else 10492 return FALSE; 10493 } else if (*name == 'C') { 10494 if (strEQ(name, "CHECK")) { 10495 if (PL_main_start) 10496 /* diag_listed_as: Too late to run %s block */ 10497 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), 10498 "Too late to run CHECK block"); 10499 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv)); 10500 } 10501 else 10502 return FALSE; 10503 } else if (*name == 'I') { 10504 if (strEQ(name, "INIT")) { 10505 if (PL_main_start) 10506 /* diag_listed_as: Too late to run %s block */ 10507 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), 10508 "Too late to run INIT block"); 10509 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv)); 10510 } 10511 else 10512 return FALSE; 10513 } else 10514 return FALSE; 10515 DEBUG_x( dump_sub(gv) ); 10516 (void)CvGV(cv); 10517 GvCV_set(gv,0); /* cv has been hijacked */ 10518 return FALSE; 10519 } 10520 } 10521 10522 /* 10523 =for apidoc Am|CV *|newCONSTSUB|HV *stash|const char *name|SV *sv 10524 10525 Behaves like L</newCONSTSUB_flags>, except that C<name> is nul-terminated 10526 rather than of counted length, and no flags are set. (This means that 10527 C<name> is always interpreted as Latin-1.) 10528 10529 =cut 10530 */ 10531 10532 CV * 10533 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv) 10534 { 10535 return newCONSTSUB_flags(stash, name, name ? strlen(name) : 0, 0, sv); 10536 } 10537 10538 /* 10539 =for apidoc Am|CV *|newCONSTSUB_flags|HV *stash|const char *name|STRLEN len|U32 flags|SV *sv 10540 10541 Construct a constant subroutine, also performing some surrounding 10542 jobs. A scalar constant-valued subroutine is eligible for inlining 10543 at compile-time, and in Perl code can be created by S<C<sub FOO () { 10544 123 }>>. Other kinds of constant subroutine have other treatment. 10545 10546 The subroutine will have an empty prototype and will ignore any arguments 10547 when called. Its constant behaviour is determined by C<sv>. If C<sv> 10548 is null, the subroutine will yield an empty list. If C<sv> points to a 10549 scalar, the subroutine will always yield that scalar. If C<sv> points 10550 to an array, the subroutine will always yield a list of the elements of 10551 that array in list context, or the number of elements in the array in 10552 scalar context. This function takes ownership of one counted reference 10553 to the scalar or array, and will arrange for the object to live as long 10554 as the subroutine does. If C<sv> points to a scalar then the inlining 10555 assumes that the value of the scalar will never change, so the caller 10556 must ensure that the scalar is not subsequently written to. If C<sv> 10557 points to an array then no such assumption is made, so it is ostensibly 10558 safe to mutate the array or its elements, but whether this is really 10559 supported has not been determined. 10560 10561 The subroutine will have C<CvFILE> set according to C<PL_curcop>. 10562 Other aspects of the subroutine will be left in their default state. 10563 The caller is free to mutate the subroutine beyond its initial state 10564 after this function has returned. 10565 10566 If C<name> is null then the subroutine will be anonymous, with its 10567 C<CvGV> referring to an C<__ANON__> glob. If C<name> is non-null then the 10568 subroutine will be named accordingly, referenced by the appropriate glob. 10569 C<name> is a string of length C<len> bytes giving a sigilless symbol 10570 name, in UTF-8 if C<flags> has the C<SVf_UTF8> bit set and in Latin-1 10571 otherwise. The name may be either qualified or unqualified. If the 10572 name is unqualified then it defaults to being in the stash specified by 10573 C<stash> if that is non-null, or to C<PL_curstash> if C<stash> is null. 10574 The symbol is always added to the stash if necessary, with C<GV_ADDMULTI> 10575 semantics. 10576 10577 C<flags> should not have bits set other than C<SVf_UTF8>. 10578 10579 If there is already a subroutine of the specified name, then the new sub 10580 will replace the existing one in the glob. A warning may be generated 10581 about the redefinition. 10582 10583 If the subroutine has one of a few special names, such as C<BEGIN> or 10584 C<END>, then it will be claimed by the appropriate queue for automatic 10585 running of phase-related subroutines. In this case the relevant glob will 10586 be left not containing any subroutine, even if it did contain one before. 10587 Execution of the subroutine will likely be a no-op, unless C<sv> was 10588 a tied array or the caller modified the subroutine in some interesting 10589 way before it was executed. In the case of C<BEGIN>, the treatment is 10590 buggy: the sub will be executed when only half built, and may be deleted 10591 prematurely, possibly causing a crash. 10592 10593 The function returns a pointer to the constructed subroutine. If the sub 10594 is anonymous then ownership of one counted reference to the subroutine 10595 is transferred to the caller. If the sub is named then the caller does 10596 not get ownership of a reference. In most such cases, where the sub 10597 has a non-phase name, the sub will be alive at the point it is returned 10598 by virtue of being contained in the glob that names it. A phase-named 10599 subroutine will usually be alive by virtue of the reference owned by 10600 the phase's automatic run queue. A C<BEGIN> subroutine may have been 10601 destroyed already by the time this function returns, but currently bugs 10602 occur in that case before the caller gets control. It is the caller's 10603 responsibility to ensure that it knows which of these situations applies. 10604 10605 =cut 10606 */ 10607 10608 CV * 10609 Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len, 10610 U32 flags, SV *sv) 10611 { 10612 CV* cv; 10613 const char *const file = CopFILE(PL_curcop); 10614 10615 ENTER; 10616 10617 if (IN_PERL_RUNTIME) { 10618 /* at runtime, it's not safe to manipulate PL_curcop: it may be 10619 * an op shared between threads. Use a non-shared COP for our 10620 * dirty work */ 10621 SAVEVPTR(PL_curcop); 10622 SAVECOMPILEWARNINGS(); 10623 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings); 10624 PL_curcop = &PL_compiling; 10625 } 10626 SAVECOPLINE(PL_curcop); 10627 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE); 10628 10629 SAVEHINTS(); 10630 PL_hints &= ~HINT_BLOCK_SCOPE; 10631 10632 if (stash) { 10633 SAVEGENERICSV(PL_curstash); 10634 PL_curstash = (HV *)SvREFCNT_inc_simple_NN(stash); 10635 } 10636 10637 /* Protect sv against leakage caused by fatal warnings. */ 10638 if (sv) SAVEFREESV(sv); 10639 10640 /* file becomes the CvFILE. For an XS, it's usually static storage, 10641 and so doesn't get free()d. (It's expected to be from the C pre- 10642 processor __FILE__ directive). But we need a dynamically allocated one, 10643 and we need it to get freed. */ 10644 cv = newXS_len_flags(name, len, 10645 sv && SvTYPE(sv) == SVt_PVAV 10646 ? const_av_xsub 10647 : const_sv_xsub, 10648 file ? file : "", "", 10649 &sv, XS_DYNAMIC_FILENAME | flags); 10650 assert(cv); 10651 assert(SvREFCNT((SV*)cv) != 0); 10652 CvXSUBANY(cv).any_ptr = SvREFCNT_inc_simple(sv); 10653 CvCONST_on(cv); 10654 10655 LEAVE; 10656 10657 return cv; 10658 } 10659 10660 /* 10661 =for apidoc U||newXS 10662 10663 Used by C<xsubpp> to hook up XSUBs as Perl subs. C<filename> needs to be 10664 static storage, as it is used directly as CvFILE(), without a copy being made. 10665 10666 =cut 10667 */ 10668 10669 CV * 10670 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename) 10671 { 10672 PERL_ARGS_ASSERT_NEWXS; 10673 return newXS_len_flags( 10674 name, name ? strlen(name) : 0, subaddr, filename, NULL, NULL, 0 10675 ); 10676 } 10677 10678 CV * 10679 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr, 10680 const char *const filename, const char *const proto, 10681 U32 flags) 10682 { 10683 PERL_ARGS_ASSERT_NEWXS_FLAGS; 10684 return newXS_len_flags( 10685 name, name ? strlen(name) : 0, subaddr, filename, proto, NULL, flags 10686 ); 10687 } 10688 10689 CV * 10690 Perl_newXS_deffile(pTHX_ const char *name, XSUBADDR_t subaddr) 10691 { 10692 PERL_ARGS_ASSERT_NEWXS_DEFFILE; 10693 return newXS_len_flags( 10694 name, strlen(name), subaddr, NULL, NULL, NULL, 0 10695 ); 10696 } 10697 10698 /* 10699 =for apidoc m|CV *|newXS_len_flags|const char *name|STRLEN len|XSUBADDR_t subaddr|const char *const filename|const char *const proto|SV **const_svp|U32 flags 10700 10701 Construct an XS subroutine, also performing some surrounding jobs. 10702 10703 The subroutine will have the entry point C<subaddr>. It will have 10704 the prototype specified by the nul-terminated string C<proto>, or 10705 no prototype if C<proto> is null. The prototype string is copied; 10706 the caller can mutate the supplied string afterwards. If C<filename> 10707 is non-null, it must be a nul-terminated filename, and the subroutine 10708 will have its C<CvFILE> set accordingly. By default C<CvFILE> is set to 10709 point directly to the supplied string, which must be static. If C<flags> 10710 has the C<XS_DYNAMIC_FILENAME> bit set, then a copy of the string will 10711 be taken instead. 10712 10713 Other aspects of the subroutine will be left in their default state. 10714 If anything else needs to be done to the subroutine for it to function 10715 correctly, it is the caller's responsibility to do that after this 10716 function has constructed it. However, beware of the subroutine 10717 potentially being destroyed before this function returns, as described 10718 below. 10719 10720 If C<name> is null then the subroutine will be anonymous, with its 10721 C<CvGV> referring to an C<__ANON__> glob. If C<name> is non-null then the 10722 subroutine will be named accordingly, referenced by the appropriate glob. 10723 C<name> is a string of length C<len> bytes giving a sigilless symbol name, 10724 in UTF-8 if C<flags> has the C<SVf_UTF8> bit set and in Latin-1 otherwise. 10725 The name may be either qualified or unqualified, with the stash defaulting 10726 in the same manner as for C<gv_fetchpvn_flags>. C<flags> may contain 10727 flag bits understood by C<gv_fetchpvn_flags> with the same meaning as 10728 they have there, such as C<GV_ADDWARN>. The symbol is always added to 10729 the stash if necessary, with C<GV_ADDMULTI> semantics. 10730 10731 If there is already a subroutine of the specified name, then the new sub 10732 will replace the existing one in the glob. A warning may be generated 10733 about the redefinition. If the old subroutine was C<CvCONST> then the 10734 decision about whether to warn is influenced by an expectation about 10735 whether the new subroutine will become a constant of similar value. 10736 That expectation is determined by C<const_svp>. (Note that the call to 10737 this function doesn't make the new subroutine C<CvCONST> in any case; 10738 that is left to the caller.) If C<const_svp> is null then it indicates 10739 that the new subroutine will not become a constant. If C<const_svp> 10740 is non-null then it indicates that the new subroutine will become a 10741 constant, and it points to an C<SV*> that provides the constant value 10742 that the subroutine will have. 10743 10744 If the subroutine has one of a few special names, such as C<BEGIN> or 10745 C<END>, then it will be claimed by the appropriate queue for automatic 10746 running of phase-related subroutines. In this case the relevant glob will 10747 be left not containing any subroutine, even if it did contain one before. 10748 In the case of C<BEGIN>, the subroutine will be executed and the reference 10749 to it disposed of before this function returns, and also before its 10750 prototype is set. If a C<BEGIN> subroutine would not be sufficiently 10751 constructed by this function to be ready for execution then the caller 10752 must prevent this happening by giving the subroutine a different name. 10753 10754 The function returns a pointer to the constructed subroutine. If the sub 10755 is anonymous then ownership of one counted reference to the subroutine 10756 is transferred to the caller. If the sub is named then the caller does 10757 not get ownership of a reference. In most such cases, where the sub 10758 has a non-phase name, the sub will be alive at the point it is returned 10759 by virtue of being contained in the glob that names it. A phase-named 10760 subroutine will usually be alive by virtue of the reference owned by the 10761 phase's automatic run queue. But a C<BEGIN> subroutine, having already 10762 been executed, will quite likely have been destroyed already by the 10763 time this function returns, making it erroneous for the caller to make 10764 any use of the returned pointer. It is the caller's responsibility to 10765 ensure that it knows which of these situations applies. 10766 10767 =cut 10768 */ 10769 10770 CV * 10771 Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len, 10772 XSUBADDR_t subaddr, const char *const filename, 10773 const char *const proto, SV **const_svp, 10774 U32 flags) 10775 { 10776 CV *cv; 10777 bool interleave = FALSE; 10778 bool evanescent = FALSE; 10779 10780 PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS; 10781 10782 { 10783 GV * const gv = gv_fetchpvn( 10784 name ? name : PL_curstash ? "__ANON__" : "__ANON__::__ANON__", 10785 name ? len : PL_curstash ? sizeof("__ANON__") - 1: 10786 sizeof("__ANON__::__ANON__") - 1, 10787 GV_ADDMULTI | flags, SVt_PVCV); 10788 10789 if ((cv = (name ? GvCV(gv) : NULL))) { 10790 if (GvCVGEN(gv)) { 10791 /* just a cached method */ 10792 SvREFCNT_dec(cv); 10793 cv = NULL; 10794 } 10795 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) { 10796 /* already defined (or promised) */ 10797 /* Redundant check that allows us to avoid creating an SV 10798 most of the time: */ 10799 if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) { 10800 report_redefined_cv(newSVpvn_flags( 10801 name,len,(flags&SVf_UTF8)|SVs_TEMP 10802 ), 10803 cv, const_svp); 10804 } 10805 interleave = TRUE; 10806 ENTER; 10807 SAVEFREESV(cv); 10808 cv = NULL; 10809 } 10810 } 10811 10812 if (cv) /* must reuse cv if autoloaded */ 10813 cv_undef(cv); 10814 else { 10815 cv = MUTABLE_CV(newSV_type(SVt_PVCV)); 10816 if (name) { 10817 GvCV_set(gv,cv); 10818 GvCVGEN(gv) = 0; 10819 if (HvENAME_HEK(GvSTASH(gv))) 10820 gv_method_changed(gv); /* newXS */ 10821 } 10822 } 10823 assert(cv); 10824 assert(SvREFCNT((SV*)cv) != 0); 10825 10826 CvGV_set(cv, gv); 10827 if(filename) { 10828 /* XSUBs can't be perl lang/perl5db.pl debugged 10829 if (PERLDB_LINE_OR_SAVESRC) 10830 (void)gv_fetchfile(filename); */ 10831 assert(!CvDYNFILE(cv)); /* cv_undef should have turned it off */ 10832 if (flags & XS_DYNAMIC_FILENAME) { 10833 CvDYNFILE_on(cv); 10834 CvFILE(cv) = savepv(filename); 10835 } else { 10836 /* NOTE: not copied, as it is expected to be an external constant string */ 10837 CvFILE(cv) = (char *)filename; 10838 } 10839 } else { 10840 assert((flags & XS_DYNAMIC_FILENAME) == 0 && PL_xsubfilename); 10841 CvFILE(cv) = (char*)PL_xsubfilename; 10842 } 10843 CvISXSUB_on(cv); 10844 CvXSUB(cv) = subaddr; 10845 #ifndef PERL_IMPLICIT_CONTEXT 10846 CvHSCXT(cv) = &PL_stack_sp; 10847 #else 10848 PoisonPADLIST(cv); 10849 #endif 10850 10851 if (name) 10852 evanescent = process_special_blocks(0, name, gv, cv); 10853 else 10854 CvANON_on(cv); 10855 } /* <- not a conditional branch */ 10856 10857 assert(cv); 10858 assert(evanescent || SvREFCNT((SV*)cv) != 0); 10859 10860 if (!evanescent) sv_setpv(MUTABLE_SV(cv), proto); 10861 if (interleave) LEAVE; 10862 assert(evanescent || SvREFCNT((SV*)cv) != 0); 10863 return cv; 10864 } 10865 10866 /* Add a stub CV to a typeglob. 10867 * This is the implementation of a forward declaration, 'sub foo';' 10868 */ 10869 10870 CV * 10871 Perl_newSTUB(pTHX_ GV *gv, bool fake) 10872 { 10873 CV *cv = MUTABLE_CV(newSV_type(SVt_PVCV)); 10874 GV *cvgv; 10875 PERL_ARGS_ASSERT_NEWSTUB; 10876 assert(!GvCVu(gv)); 10877 GvCV_set(gv, cv); 10878 GvCVGEN(gv) = 0; 10879 if (!fake && GvSTASH(gv) && HvENAME_HEK(GvSTASH(gv))) 10880 gv_method_changed(gv); 10881 if (SvFAKE(gv)) { 10882 cvgv = gv_fetchsv((SV *)gv, GV_ADDMULTI, SVt_PVCV); 10883 SvFAKE_off(cvgv); 10884 } 10885 else cvgv = gv; 10886 CvGV_set(cv, cvgv); 10887 CvFILE_set_from_cop(cv, PL_curcop); 10888 CvSTASH_set(cv, PL_curstash); 10889 GvMULTI_on(gv); 10890 return cv; 10891 } 10892 10893 void 10894 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block) 10895 { 10896 CV *cv; 10897 GV *gv; 10898 OP *root; 10899 OP *start; 10900 10901 if (PL_parser && PL_parser->error_count) { 10902 op_free(block); 10903 goto finish; 10904 } 10905 10906 gv = o 10907 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM) 10908 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM); 10909 10910 GvMULTI_on(gv); 10911 if ((cv = GvFORM(gv))) { 10912 if (ckWARN(WARN_REDEFINE)) { 10913 const line_t oldline = CopLINE(PL_curcop); 10914 if (PL_parser && PL_parser->copline != NOLINE) 10915 CopLINE_set(PL_curcop, PL_parser->copline); 10916 if (o) { 10917 Perl_warner(aTHX_ packWARN(WARN_REDEFINE), 10918 "Format %" SVf " redefined", SVfARG(cSVOPo->op_sv)); 10919 } else { 10920 /* diag_listed_as: Format %s redefined */ 10921 Perl_warner(aTHX_ packWARN(WARN_REDEFINE), 10922 "Format STDOUT redefined"); 10923 } 10924 CopLINE_set(PL_curcop, oldline); 10925 } 10926 SvREFCNT_dec(cv); 10927 } 10928 cv = PL_compcv; 10929 GvFORM(gv) = (CV *)SvREFCNT_inc_simple_NN(cv); 10930 CvGV_set(cv, gv); 10931 CvFILE_set_from_cop(cv, PL_curcop); 10932 10933 10934 root = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block)); 10935 CvROOT(cv) = root; 10936 start = LINKLIST(root); 10937 root->op_next = 0; 10938 S_process_optree(aTHX_ cv, root, start); 10939 cv_forget_slab(cv); 10940 10941 finish: 10942 op_free(o); 10943 if (PL_parser) 10944 PL_parser->copline = NOLINE; 10945 LEAVE_SCOPE(floor); 10946 PL_compiling.cop_seq = 0; 10947 } 10948 10949 OP * 10950 Perl_newANONLIST(pTHX_ OP *o) 10951 { 10952 return op_convert_list(OP_ANONLIST, OPf_SPECIAL, o); 10953 } 10954 10955 OP * 10956 Perl_newANONHASH(pTHX_ OP *o) 10957 { 10958 return op_convert_list(OP_ANONHASH, OPf_SPECIAL, o); 10959 } 10960 10961 OP * 10962 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block) 10963 { 10964 return newANONATTRSUB(floor, proto, NULL, block); 10965 } 10966 10967 OP * 10968 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block) 10969 { 10970 SV * const cv = MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block)); 10971 OP * anoncode = 10972 newSVOP(OP_ANONCODE, 0, 10973 cv); 10974 if (CvANONCONST(cv)) 10975 anoncode = newUNOP(OP_ANONCONST, 0, 10976 op_convert_list(OP_ENTERSUB, 10977 OPf_STACKED|OPf_WANT_SCALAR, 10978 anoncode)); 10979 return newUNOP(OP_REFGEN, 0, anoncode); 10980 } 10981 10982 OP * 10983 Perl_oopsAV(pTHX_ OP *o) 10984 { 10985 dVAR; 10986 10987 PERL_ARGS_ASSERT_OOPSAV; 10988 10989 switch (o->op_type) { 10990 case OP_PADSV: 10991 case OP_PADHV: 10992 OpTYPE_set(o, OP_PADAV); 10993 return ref(o, OP_RV2AV); 10994 10995 case OP_RV2SV: 10996 case OP_RV2HV: 10997 OpTYPE_set(o, OP_RV2AV); 10998 ref(o, OP_RV2AV); 10999 break; 11000 11001 default: 11002 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV"); 11003 break; 11004 } 11005 return o; 11006 } 11007 11008 OP * 11009 Perl_oopsHV(pTHX_ OP *o) 11010 { 11011 dVAR; 11012 11013 PERL_ARGS_ASSERT_OOPSHV; 11014 11015 switch (o->op_type) { 11016 case OP_PADSV: 11017 case OP_PADAV: 11018 OpTYPE_set(o, OP_PADHV); 11019 return ref(o, OP_RV2HV); 11020 11021 case OP_RV2SV: 11022 case OP_RV2AV: 11023 OpTYPE_set(o, OP_RV2HV); 11024 /* rv2hv steals the bottom bit for its own uses */ 11025 o->op_private &= ~OPpARG1_MASK; 11026 ref(o, OP_RV2HV); 11027 break; 11028 11029 default: 11030 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV"); 11031 break; 11032 } 11033 return o; 11034 } 11035 11036 OP * 11037 Perl_newAVREF(pTHX_ OP *o) 11038 { 11039 dVAR; 11040 11041 PERL_ARGS_ASSERT_NEWAVREF; 11042 11043 if (o->op_type == OP_PADANY) { 11044 OpTYPE_set(o, OP_PADAV); 11045 return o; 11046 } 11047 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) { 11048 Perl_croak(aTHX_ "Can't use an array as a reference"); 11049 } 11050 return newUNOP(OP_RV2AV, 0, scalar(o)); 11051 } 11052 11053 OP * 11054 Perl_newGVREF(pTHX_ I32 type, OP *o) 11055 { 11056 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT) 11057 return newUNOP(OP_NULL, 0, o); 11058 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type); 11059 } 11060 11061 OP * 11062 Perl_newHVREF(pTHX_ OP *o) 11063 { 11064 dVAR; 11065 11066 PERL_ARGS_ASSERT_NEWHVREF; 11067 11068 if (o->op_type == OP_PADANY) { 11069 OpTYPE_set(o, OP_PADHV); 11070 return o; 11071 } 11072 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) { 11073 Perl_croak(aTHX_ "Can't use a hash as a reference"); 11074 } 11075 return newUNOP(OP_RV2HV, 0, scalar(o)); 11076 } 11077 11078 OP * 11079 Perl_newCVREF(pTHX_ I32 flags, OP *o) 11080 { 11081 if (o->op_type == OP_PADANY) { 11082 dVAR; 11083 OpTYPE_set(o, OP_PADCV); 11084 } 11085 return newUNOP(OP_RV2CV, flags, scalar(o)); 11086 } 11087 11088 OP * 11089 Perl_newSVREF(pTHX_ OP *o) 11090 { 11091 dVAR; 11092 11093 PERL_ARGS_ASSERT_NEWSVREF; 11094 11095 if (o->op_type == OP_PADANY) { 11096 OpTYPE_set(o, OP_PADSV); 11097 scalar(o); 11098 return o; 11099 } 11100 return newUNOP(OP_RV2SV, 0, scalar(o)); 11101 } 11102 11103 /* Check routines. See the comments at the top of this file for details 11104 * on when these are called */ 11105 11106 OP * 11107 Perl_ck_anoncode(pTHX_ OP *o) 11108 { 11109 PERL_ARGS_ASSERT_CK_ANONCODE; 11110 11111 cSVOPo->op_targ = pad_add_anon((CV*)cSVOPo->op_sv, o->op_type); 11112 cSVOPo->op_sv = NULL; 11113 return o; 11114 } 11115 11116 static void 11117 S_io_hints(pTHX_ OP *o) 11118 { 11119 #if O_BINARY != 0 || O_TEXT != 0 11120 HV * const table = 11121 PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;; 11122 if (table) { 11123 SV **svp = hv_fetchs(table, "open_IN", FALSE); 11124 if (svp && *svp) { 11125 STRLEN len = 0; 11126 const char *d = SvPV_const(*svp, len); 11127 const I32 mode = mode_from_discipline(d, len); 11128 /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */ 11129 # if O_BINARY != 0 11130 if (mode & O_BINARY) 11131 o->op_private |= OPpOPEN_IN_RAW; 11132 # endif 11133 # if O_TEXT != 0 11134 if (mode & O_TEXT) 11135 o->op_private |= OPpOPEN_IN_CRLF; 11136 # endif 11137 } 11138 11139 svp = hv_fetchs(table, "open_OUT", FALSE); 11140 if (svp && *svp) { 11141 STRLEN len = 0; 11142 const char *d = SvPV_const(*svp, len); 11143 const I32 mode = mode_from_discipline(d, len); 11144 /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */ 11145 # if O_BINARY != 0 11146 if (mode & O_BINARY) 11147 o->op_private |= OPpOPEN_OUT_RAW; 11148 # endif 11149 # if O_TEXT != 0 11150 if (mode & O_TEXT) 11151 o->op_private |= OPpOPEN_OUT_CRLF; 11152 # endif 11153 } 11154 } 11155 #else 11156 PERL_UNUSED_CONTEXT; 11157 PERL_UNUSED_ARG(o); 11158 #endif 11159 } 11160 11161 OP * 11162 Perl_ck_backtick(pTHX_ OP *o) 11163 { 11164 GV *gv; 11165 OP *newop = NULL; 11166 OP *sibl; 11167 PERL_ARGS_ASSERT_CK_BACKTICK; 11168 o = ck_fun(o); 11169 /* qx and `` have a null pushmark; CORE::readpipe has only one kid. */ 11170 if (o->op_flags & OPf_KIDS && (sibl = OpSIBLING(cUNOPo->op_first)) 11171 && (gv = gv_override("readpipe",8))) 11172 { 11173 /* detach rest of siblings from o and its first child */ 11174 op_sibling_splice(o, cUNOPo->op_first, -1, NULL); 11175 newop = S_new_entersubop(aTHX_ gv, sibl); 11176 } 11177 else if (!(o->op_flags & OPf_KIDS)) 11178 newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP()); 11179 if (newop) { 11180 op_free(o); 11181 return newop; 11182 } 11183 S_io_hints(aTHX_ o); 11184 return o; 11185 } 11186 11187 OP * 11188 Perl_ck_bitop(pTHX_ OP *o) 11189 { 11190 PERL_ARGS_ASSERT_CK_BITOP; 11191 11192 o->op_private = (U8)(PL_hints & HINT_INTEGER); 11193 11194 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */ 11195 && OP_IS_INFIX_BIT(o->op_type)) 11196 { 11197 const OP * const left = cBINOPo->op_first; 11198 const OP * const right = OpSIBLING(left); 11199 if ((OP_IS_NUMCOMPARE(left->op_type) && 11200 (left->op_flags & OPf_PARENS) == 0) || 11201 (OP_IS_NUMCOMPARE(right->op_type) && 11202 (right->op_flags & OPf_PARENS) == 0)) 11203 Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE), 11204 "Possible precedence problem on bitwise %s operator", 11205 o->op_type == OP_BIT_OR 11206 ||o->op_type == OP_NBIT_OR ? "|" 11207 : o->op_type == OP_BIT_AND 11208 ||o->op_type == OP_NBIT_AND ? "&" 11209 : o->op_type == OP_BIT_XOR 11210 ||o->op_type == OP_NBIT_XOR ? "^" 11211 : o->op_type == OP_SBIT_OR ? "|." 11212 : o->op_type == OP_SBIT_AND ? "&." : "^." 11213 ); 11214 } 11215 return o; 11216 } 11217 11218 PERL_STATIC_INLINE bool 11219 is_dollar_bracket(pTHX_ const OP * const o) 11220 { 11221 const OP *kid; 11222 PERL_UNUSED_CONTEXT; 11223 return o->op_type == OP_RV2SV && o->op_flags & OPf_KIDS 11224 && (kid = cUNOPx(o)->op_first) 11225 && kid->op_type == OP_GV 11226 && strEQ(GvNAME(cGVOPx_gv(kid)), "["); 11227 } 11228 11229 /* for lt, gt, le, ge, eq, ne and their i_ variants */ 11230 11231 OP * 11232 Perl_ck_cmp(pTHX_ OP *o) 11233 { 11234 bool is_eq; 11235 bool neg; 11236 bool reverse; 11237 bool iv0; 11238 OP *indexop, *constop, *start; 11239 SV *sv; 11240 IV iv; 11241 11242 PERL_ARGS_ASSERT_CK_CMP; 11243 11244 is_eq = ( o->op_type == OP_EQ 11245 || o->op_type == OP_NE 11246 || o->op_type == OP_I_EQ 11247 || o->op_type == OP_I_NE); 11248 11249 if (!is_eq && ckWARN(WARN_SYNTAX)) { 11250 const OP *kid = cUNOPo->op_first; 11251 if (kid && 11252 ( 11253 ( is_dollar_bracket(aTHX_ kid) 11254 && OpSIBLING(kid) && OpSIBLING(kid)->op_type == OP_CONST 11255 ) 11256 || ( kid->op_type == OP_CONST 11257 && (kid = OpSIBLING(kid)) && is_dollar_bracket(aTHX_ kid) 11258 ) 11259 ) 11260 ) 11261 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), 11262 "$[ used in %s (did you mean $] ?)", OP_DESC(o)); 11263 } 11264 11265 /* convert (index(...) == -1) and variations into 11266 * (r)index/BOOL(,NEG) 11267 */ 11268 11269 reverse = FALSE; 11270 11271 indexop = cUNOPo->op_first; 11272 constop = OpSIBLING(indexop); 11273 start = NULL; 11274 if (indexop->op_type == OP_CONST) { 11275 constop = indexop; 11276 indexop = OpSIBLING(constop); 11277 start = constop; 11278 reverse = TRUE; 11279 } 11280 11281 if (indexop->op_type != OP_INDEX && indexop->op_type != OP_RINDEX) 11282 return o; 11283 11284 /* ($lex = index(....)) == -1 */ 11285 if (indexop->op_private & OPpTARGET_MY) 11286 return o; 11287 11288 if (constop->op_type != OP_CONST) 11289 return o; 11290 11291 sv = cSVOPx_sv(constop); 11292 if (!(sv && SvIOK_notUV(sv))) 11293 return o; 11294 11295 iv = SvIVX(sv); 11296 if (iv != -1 && iv != 0) 11297 return o; 11298 iv0 = (iv == 0); 11299 11300 if (o->op_type == OP_LT || o->op_type == OP_I_LT) { 11301 if (!(iv0 ^ reverse)) 11302 return o; 11303 neg = iv0; 11304 } 11305 else if (o->op_type == OP_LE || o->op_type == OP_I_LE) { 11306 if (iv0 ^ reverse) 11307 return o; 11308 neg = !iv0; 11309 } 11310 else if (o->op_type == OP_GE || o->op_type == OP_I_GE) { 11311 if (!(iv0 ^ reverse)) 11312 return o; 11313 neg = !iv0; 11314 } 11315 else if (o->op_type == OP_GT || o->op_type == OP_I_GT) { 11316 if (iv0 ^ reverse) 11317 return o; 11318 neg = iv0; 11319 } 11320 else if (o->op_type == OP_EQ || o->op_type == OP_I_EQ) { 11321 if (iv0) 11322 return o; 11323 neg = TRUE; 11324 } 11325 else { 11326 assert(o->op_type == OP_NE || o->op_type == OP_I_NE); 11327 if (iv0) 11328 return o; 11329 neg = FALSE; 11330 } 11331 11332 indexop->op_flags &= ~OPf_PARENS; 11333 indexop->op_flags |= (o->op_flags & OPf_PARENS); 11334 indexop->op_private |= OPpTRUEBOOL; 11335 if (neg) 11336 indexop->op_private |= OPpINDEX_BOOLNEG; 11337 /* cut out the index op and free the eq,const ops */ 11338 (void)op_sibling_splice(o, start, 1, NULL); 11339 op_free(o); 11340 11341 return indexop; 11342 } 11343 11344 11345 OP * 11346 Perl_ck_concat(pTHX_ OP *o) 11347 { 11348 const OP * const kid = cUNOPo->op_first; 11349 11350 PERL_ARGS_ASSERT_CK_CONCAT; 11351 PERL_UNUSED_CONTEXT; 11352 11353 /* reuse the padtmp returned by the concat child */ 11354 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) && 11355 !(kUNOP->op_first->op_flags & OPf_MOD)) 11356 { 11357 o->op_flags |= OPf_STACKED; 11358 o->op_private |= OPpCONCAT_NESTED; 11359 } 11360 return o; 11361 } 11362 11363 OP * 11364 Perl_ck_spair(pTHX_ OP *o) 11365 { 11366 dVAR; 11367 11368 PERL_ARGS_ASSERT_CK_SPAIR; 11369 11370 if (o->op_flags & OPf_KIDS) { 11371 OP* newop; 11372 OP* kid; 11373 OP* kidkid; 11374 const OPCODE type = o->op_type; 11375 o = modkids(ck_fun(o), type); 11376 kid = cUNOPo->op_first; 11377 kidkid = kUNOP->op_first; 11378 newop = OpSIBLING(kidkid); 11379 if (newop) { 11380 const OPCODE type = newop->op_type; 11381 if (OpHAS_SIBLING(newop)) 11382 return o; 11383 if (o->op_type == OP_REFGEN 11384 && ( type == OP_RV2CV 11385 || ( !(newop->op_flags & OPf_PARENS) 11386 && ( type == OP_RV2AV || type == OP_PADAV 11387 || type == OP_RV2HV || type == OP_PADHV)))) 11388 NOOP; /* OK (allow srefgen for \@a and \%h) */ 11389 else if (OP_GIMME(newop,0) != G_SCALAR) 11390 return o; 11391 } 11392 /* excise first sibling */ 11393 op_sibling_splice(kid, NULL, 1, NULL); 11394 op_free(kidkid); 11395 } 11396 /* transforms OP_REFGEN into OP_SREFGEN, OP_CHOP into OP_SCHOP, 11397 * and OP_CHOMP into OP_SCHOMP */ 11398 o->op_ppaddr = PL_ppaddr[++o->op_type]; 11399 return ck_fun(o); 11400 } 11401 11402 OP * 11403 Perl_ck_delete(pTHX_ OP *o) 11404 { 11405 PERL_ARGS_ASSERT_CK_DELETE; 11406 11407 o = ck_fun(o); 11408 o->op_private = 0; 11409 if (o->op_flags & OPf_KIDS) { 11410 OP * const kid = cUNOPo->op_first; 11411 switch (kid->op_type) { 11412 case OP_ASLICE: 11413 o->op_flags |= OPf_SPECIAL; 11414 /* FALLTHROUGH */ 11415 case OP_HSLICE: 11416 o->op_private |= OPpSLICE; 11417 break; 11418 case OP_AELEM: 11419 o->op_flags |= OPf_SPECIAL; 11420 /* FALLTHROUGH */ 11421 case OP_HELEM: 11422 break; 11423 case OP_KVASLICE: 11424 o->op_flags |= OPf_SPECIAL; 11425 /* FALLTHROUGH */ 11426 case OP_KVHSLICE: 11427 o->op_private |= OPpKVSLICE; 11428 break; 11429 default: 11430 Perl_croak(aTHX_ "delete argument is not a HASH or ARRAY " 11431 "element or slice"); 11432 } 11433 if (kid->op_private & OPpLVAL_INTRO) 11434 o->op_private |= OPpLVAL_INTRO; 11435 op_null(kid); 11436 } 11437 return o; 11438 } 11439 11440 OP * 11441 Perl_ck_eof(pTHX_ OP *o) 11442 { 11443 PERL_ARGS_ASSERT_CK_EOF; 11444 11445 if (o->op_flags & OPf_KIDS) { 11446 OP *kid; 11447 if (cLISTOPo->op_first->op_type == OP_STUB) { 11448 OP * const newop 11449 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv)); 11450 op_free(o); 11451 o = newop; 11452 } 11453 o = ck_fun(o); 11454 kid = cLISTOPo->op_first; 11455 if (kid->op_type == OP_RV2GV) 11456 kid->op_private |= OPpALLOW_FAKE; 11457 } 11458 return o; 11459 } 11460 11461 11462 OP * 11463 Perl_ck_eval(pTHX_ OP *o) 11464 { 11465 dVAR; 11466 11467 PERL_ARGS_ASSERT_CK_EVAL; 11468 11469 PL_hints |= HINT_BLOCK_SCOPE; 11470 if (o->op_flags & OPf_KIDS) { 11471 SVOP * const kid = (SVOP*)cUNOPo->op_first; 11472 assert(kid); 11473 11474 if (o->op_type == OP_ENTERTRY) { 11475 LOGOP *enter; 11476 11477 /* cut whole sibling chain free from o */ 11478 op_sibling_splice(o, NULL, -1, NULL); 11479 op_free(o); 11480 11481 enter = alloc_LOGOP(OP_ENTERTRY, NULL, NULL); 11482 11483 /* establish postfix order */ 11484 enter->op_next = (OP*)enter; 11485 11486 o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid); 11487 OpTYPE_set(o, OP_LEAVETRY); 11488 enter->op_other = o; 11489 return o; 11490 } 11491 else { 11492 scalar((OP*)kid); 11493 S_set_haseval(aTHX); 11494 } 11495 } 11496 else { 11497 const U8 priv = o->op_private; 11498 op_free(o); 11499 /* the newUNOP will recursively call ck_eval(), which will handle 11500 * all the stuff at the end of this function, like adding 11501 * OP_HINTSEVAL 11502 */ 11503 return newUNOP(OP_ENTEREVAL, priv <<8, newDEFSVOP()); 11504 } 11505 o->op_targ = (PADOFFSET)PL_hints; 11506 if (o->op_private & OPpEVAL_BYTES) o->op_targ &= ~HINT_UTF8; 11507 if ((PL_hints & HINT_LOCALIZE_HH) != 0 11508 && !(o->op_private & OPpEVAL_COPHH) && GvHV(PL_hintgv)) { 11509 /* Store a copy of %^H that pp_entereval can pick up. */ 11510 OP *hhop = newSVOP(OP_HINTSEVAL, 0, 11511 MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv)))); 11512 /* append hhop to only child */ 11513 op_sibling_splice(o, cUNOPo->op_first, 0, hhop); 11514 11515 o->op_private |= OPpEVAL_HAS_HH; 11516 } 11517 if (!(o->op_private & OPpEVAL_BYTES) 11518 && FEATURE_UNIEVAL_IS_ENABLED) 11519 o->op_private |= OPpEVAL_UNICODE; 11520 return o; 11521 } 11522 11523 OP * 11524 Perl_ck_exec(pTHX_ OP *o) 11525 { 11526 PERL_ARGS_ASSERT_CK_EXEC; 11527 11528 if (o->op_flags & OPf_STACKED) { 11529 OP *kid; 11530 o = ck_fun(o); 11531 kid = OpSIBLING(cUNOPo->op_first); 11532 if (kid->op_type == OP_RV2GV) 11533 op_null(kid); 11534 } 11535 else 11536 o = listkids(o); 11537 return o; 11538 } 11539 11540 OP * 11541 Perl_ck_exists(pTHX_ OP *o) 11542 { 11543 PERL_ARGS_ASSERT_CK_EXISTS; 11544 11545 o = ck_fun(o); 11546 if (o->op_flags & OPf_KIDS) { 11547 OP * const kid = cUNOPo->op_first; 11548 if (kid->op_type == OP_ENTERSUB) { 11549 (void) ref(kid, o->op_type); 11550 if (kid->op_type != OP_RV2CV 11551 && !(PL_parser && PL_parser->error_count)) 11552 Perl_croak(aTHX_ 11553 "exists argument is not a subroutine name"); 11554 o->op_private |= OPpEXISTS_SUB; 11555 } 11556 else if (kid->op_type == OP_AELEM) 11557 o->op_flags |= OPf_SPECIAL; 11558 else if (kid->op_type != OP_HELEM) 11559 Perl_croak(aTHX_ "exists argument is not a HASH or ARRAY " 11560 "element or a subroutine"); 11561 op_null(kid); 11562 } 11563 return o; 11564 } 11565 11566 OP * 11567 Perl_ck_rvconst(pTHX_ OP *o) 11568 { 11569 dVAR; 11570 SVOP * const kid = (SVOP*)cUNOPo->op_first; 11571 11572 PERL_ARGS_ASSERT_CK_RVCONST; 11573 11574 if (o->op_type == OP_RV2HV) 11575 /* rv2hv steals the bottom bit for its own uses */ 11576 o->op_private &= ~OPpARG1_MASK; 11577 11578 o->op_private |= (PL_hints & HINT_STRICT_REFS); 11579 11580 if (kid->op_type == OP_CONST) { 11581 int iscv; 11582 GV *gv; 11583 SV * const kidsv = kid->op_sv; 11584 11585 /* Is it a constant from cv_const_sv()? */ 11586 if ((SvROK(kidsv) || isGV_with_GP(kidsv)) && SvREADONLY(kidsv)) { 11587 return o; 11588 } 11589 if (SvTYPE(kidsv) == SVt_PVAV) return o; 11590 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) { 11591 const char *badthing; 11592 switch (o->op_type) { 11593 case OP_RV2SV: 11594 badthing = "a SCALAR"; 11595 break; 11596 case OP_RV2AV: 11597 badthing = "an ARRAY"; 11598 break; 11599 case OP_RV2HV: 11600 badthing = "a HASH"; 11601 break; 11602 default: 11603 badthing = NULL; 11604 break; 11605 } 11606 if (badthing) 11607 Perl_croak(aTHX_ 11608 "Can't use bareword (\"%" SVf "\") as %s ref while \"strict refs\" in use", 11609 SVfARG(kidsv), badthing); 11610 } 11611 /* 11612 * This is a little tricky. We only want to add the symbol if we 11613 * didn't add it in the lexer. Otherwise we get duplicate strict 11614 * warnings. But if we didn't add it in the lexer, we must at 11615 * least pretend like we wanted to add it even if it existed before, 11616 * or we get possible typo warnings. OPpCONST_ENTERED says 11617 * whether the lexer already added THIS instance of this symbol. 11618 */ 11619 iscv = o->op_type == OP_RV2CV ? GV_NOEXPAND|GV_ADDMULTI : 0; 11620 gv = gv_fetchsv(kidsv, 11621 o->op_type == OP_RV2CV 11622 && o->op_private & OPpMAY_RETURN_CONSTANT 11623 ? GV_NOEXPAND 11624 : iscv | !(kid->op_private & OPpCONST_ENTERED), 11625 iscv 11626 ? SVt_PVCV 11627 : o->op_type == OP_RV2SV 11628 ? SVt_PV 11629 : o->op_type == OP_RV2AV 11630 ? SVt_PVAV 11631 : o->op_type == OP_RV2HV 11632 ? SVt_PVHV 11633 : SVt_PVGV); 11634 if (gv) { 11635 if (!isGV(gv)) { 11636 assert(iscv); 11637 assert(SvROK(gv)); 11638 if (!(o->op_private & OPpMAY_RETURN_CONSTANT) 11639 && SvTYPE(SvRV(gv)) != SVt_PVCV) 11640 gv_fetchsv(kidsv, GV_ADDMULTI, SVt_PVCV); 11641 } 11642 OpTYPE_set(kid, OP_GV); 11643 SvREFCNT_dec(kid->op_sv); 11644 #ifdef USE_ITHREADS 11645 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */ 11646 STATIC_ASSERT_STMT(sizeof(PADOP) <= sizeof(SVOP)); 11647 kPADOP->op_padix = pad_alloc(OP_GV, SVf_READONLY); 11648 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix)); 11649 PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv))); 11650 #else 11651 kid->op_sv = SvREFCNT_inc_simple_NN(gv); 11652 #endif 11653 kid->op_private = 0; 11654 /* FAKE globs in the symbol table cause weird bugs (#77810) */ 11655 SvFAKE_off(gv); 11656 } 11657 } 11658 return o; 11659 } 11660 11661 OP * 11662 Perl_ck_ftst(pTHX_ OP *o) 11663 { 11664 dVAR; 11665 const I32 type = o->op_type; 11666 11667 PERL_ARGS_ASSERT_CK_FTST; 11668 11669 if (o->op_flags & OPf_REF) { 11670 NOOP; 11671 } 11672 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) { 11673 SVOP * const kid = (SVOP*)cUNOPo->op_first; 11674 const OPCODE kidtype = kid->op_type; 11675 11676 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE) 11677 && !kid->op_folded) { 11678 OP * const newop = newGVOP(type, OPf_REF, 11679 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO)); 11680 op_free(o); 11681 return newop; 11682 } 11683 11684 if ((kidtype == OP_RV2AV || kidtype == OP_PADAV) && ckWARN(WARN_SYNTAX)) { 11685 SV *name = S_op_varname_subscript(aTHX_ (OP*)kid, 2); 11686 if (name) { 11687 /* diag_listed_as: Array passed to stat will be coerced to a scalar%s */ 11688 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "%s (did you want stat %" SVf "?)", 11689 array_passed_to_stat, name); 11690 } 11691 else { 11692 /* diag_listed_as: Array passed to stat will be coerced to a scalar%s */ 11693 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "%s", array_passed_to_stat); 11694 } 11695 } 11696 scalar((OP *) kid); 11697 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type)) 11698 o->op_private |= OPpFT_ACCESS; 11699 if (type != OP_STAT && type != OP_LSTAT 11700 && PL_check[kidtype] == Perl_ck_ftst 11701 && kidtype != OP_STAT && kidtype != OP_LSTAT 11702 ) { 11703 o->op_private |= OPpFT_STACKED; 11704 kid->op_private |= OPpFT_STACKING; 11705 if (kidtype == OP_FTTTY && ( 11706 !(kid->op_private & OPpFT_STACKED) 11707 || kid->op_private & OPpFT_AFTER_t 11708 )) 11709 o->op_private |= OPpFT_AFTER_t; 11710 } 11711 } 11712 else { 11713 op_free(o); 11714 if (type == OP_FTTTY) 11715 o = newGVOP(type, OPf_REF, PL_stdingv); 11716 else 11717 o = newUNOP(type, 0, newDEFSVOP()); 11718 } 11719 return o; 11720 } 11721 11722 OP * 11723 Perl_ck_fun(pTHX_ OP *o) 11724 { 11725 const int type = o->op_type; 11726 I32 oa = PL_opargs[type] >> OASHIFT; 11727 11728 PERL_ARGS_ASSERT_CK_FUN; 11729 11730 if (o->op_flags & OPf_STACKED) { 11731 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL)) 11732 oa &= ~OA_OPTIONAL; 11733 else 11734 return no_fh_allowed(o); 11735 } 11736 11737 if (o->op_flags & OPf_KIDS) { 11738 OP *prev_kid = NULL; 11739 OP *kid = cLISTOPo->op_first; 11740 I32 numargs = 0; 11741 bool seen_optional = FALSE; 11742 11743 if (kid->op_type == OP_PUSHMARK || 11744 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK)) 11745 { 11746 prev_kid = kid; 11747 kid = OpSIBLING(kid); 11748 } 11749 if (kid && kid->op_type == OP_COREARGS) { 11750 bool optional = FALSE; 11751 while (oa) { 11752 numargs++; 11753 if (oa & OA_OPTIONAL) optional = TRUE; 11754 oa = oa >> 4; 11755 } 11756 if (optional) o->op_private |= numargs; 11757 return o; 11758 } 11759 11760 while (oa) { 11761 if (oa & OA_OPTIONAL || (oa & 7) == OA_LIST) { 11762 if (!kid && !seen_optional && PL_opargs[type] & OA_DEFGV) { 11763 kid = newDEFSVOP(); 11764 /* append kid to chain */ 11765 op_sibling_splice(o, prev_kid, 0, kid); 11766 } 11767 seen_optional = TRUE; 11768 } 11769 if (!kid) break; 11770 11771 numargs++; 11772 switch (oa & 7) { 11773 case OA_SCALAR: 11774 /* list seen where single (scalar) arg expected? */ 11775 if (numargs == 1 && !(oa >> 4) 11776 && kid->op_type == OP_LIST && type != OP_SCALAR) 11777 { 11778 return too_many_arguments_pv(o,PL_op_desc[type], 0); 11779 } 11780 if (type != OP_DELETE) scalar(kid); 11781 break; 11782 case OA_LIST: 11783 if (oa < 16) { 11784 kid = 0; 11785 continue; 11786 } 11787 else 11788 list(kid); 11789 break; 11790 case OA_AVREF: 11791 if ((type == OP_PUSH || type == OP_UNSHIFT) 11792 && !OpHAS_SIBLING(kid)) 11793 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), 11794 "Useless use of %s with no values", 11795 PL_op_desc[type]); 11796 11797 if (kid->op_type == OP_CONST 11798 && ( !SvROK(cSVOPx_sv(kid)) 11799 || SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV ) 11800 ) 11801 bad_type_pv(numargs, "array", o, kid); 11802 else if (kid->op_type == OP_RV2HV || kid->op_type == OP_PADHV 11803 || kid->op_type == OP_RV2GV) { 11804 bad_type_pv(1, "array", o, kid); 11805 } 11806 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV) { 11807 yyerror_pv(Perl_form(aTHX_ "Experimental %s on scalar is now forbidden", 11808 PL_op_desc[type]), 0); 11809 } 11810 else { 11811 op_lvalue(kid, type); 11812 } 11813 break; 11814 case OA_HVREF: 11815 if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV) 11816 bad_type_pv(numargs, "hash", o, kid); 11817 op_lvalue(kid, type); 11818 break; 11819 case OA_CVREF: 11820 { 11821 /* replace kid with newop in chain */ 11822 OP * const newop = 11823 S_op_sibling_newUNOP(aTHX_ o, prev_kid, OP_NULL, 0); 11824 newop->op_next = newop; 11825 kid = newop; 11826 } 11827 break; 11828 case OA_FILEREF: 11829 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) { 11830 if (kid->op_type == OP_CONST && 11831 (kid->op_private & OPpCONST_BARE)) 11832 { 11833 OP * const newop = newGVOP(OP_GV, 0, 11834 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO)); 11835 /* replace kid with newop in chain */ 11836 op_sibling_splice(o, prev_kid, 1, newop); 11837 op_free(kid); 11838 kid = newop; 11839 } 11840 else if (kid->op_type == OP_READLINE) { 11841 /* neophyte patrol: open(<FH>), close(<FH>) etc. */ 11842 bad_type_pv(numargs, "HANDLE", o, kid); 11843 } 11844 else { 11845 I32 flags = OPf_SPECIAL; 11846 I32 priv = 0; 11847 PADOFFSET targ = 0; 11848 11849 /* is this op a FH constructor? */ 11850 if (is_handle_constructor(o,numargs)) { 11851 const char *name = NULL; 11852 STRLEN len = 0; 11853 U32 name_utf8 = 0; 11854 bool want_dollar = TRUE; 11855 11856 flags = 0; 11857 /* Set a flag to tell rv2gv to vivify 11858 * need to "prove" flag does not mean something 11859 * else already - NI-S 1999/05/07 11860 */ 11861 priv = OPpDEREF; 11862 if (kid->op_type == OP_PADSV) { 11863 PADNAME * const pn 11864 = PAD_COMPNAME_SV(kid->op_targ); 11865 name = PadnamePV (pn); 11866 len = PadnameLEN(pn); 11867 name_utf8 = PadnameUTF8(pn); 11868 } 11869 else if (kid->op_type == OP_RV2SV 11870 && kUNOP->op_first->op_type == OP_GV) 11871 { 11872 GV * const gv = cGVOPx_gv(kUNOP->op_first); 11873 name = GvNAME(gv); 11874 len = GvNAMELEN(gv); 11875 name_utf8 = GvNAMEUTF8(gv) ? SVf_UTF8 : 0; 11876 } 11877 else if (kid->op_type == OP_AELEM 11878 || kid->op_type == OP_HELEM) 11879 { 11880 OP *firstop; 11881 OP *op = ((BINOP*)kid)->op_first; 11882 name = NULL; 11883 if (op) { 11884 SV *tmpstr = NULL; 11885 const char * const a = 11886 kid->op_type == OP_AELEM ? 11887 "[]" : "{}"; 11888 if (((op->op_type == OP_RV2AV) || 11889 (op->op_type == OP_RV2HV)) && 11890 (firstop = ((UNOP*)op)->op_first) && 11891 (firstop->op_type == OP_GV)) { 11892 /* packagevar $a[] or $h{} */ 11893 GV * const gv = cGVOPx_gv(firstop); 11894 if (gv) 11895 tmpstr = 11896 Perl_newSVpvf(aTHX_ 11897 "%s%c...%c", 11898 GvNAME(gv), 11899 a[0], a[1]); 11900 } 11901 else if (op->op_type == OP_PADAV 11902 || op->op_type == OP_PADHV) { 11903 /* lexicalvar $a[] or $h{} */ 11904 const char * const padname = 11905 PAD_COMPNAME_PV(op->op_targ); 11906 if (padname) 11907 tmpstr = 11908 Perl_newSVpvf(aTHX_ 11909 "%s%c...%c", 11910 padname + 1, 11911 a[0], a[1]); 11912 } 11913 if (tmpstr) { 11914 name = SvPV_const(tmpstr, len); 11915 name_utf8 = SvUTF8(tmpstr); 11916 sv_2mortal(tmpstr); 11917 } 11918 } 11919 if (!name) { 11920 name = "__ANONIO__"; 11921 len = 10; 11922 want_dollar = FALSE; 11923 } 11924 op_lvalue(kid, type); 11925 } 11926 if (name) { 11927 SV *namesv; 11928 targ = pad_alloc(OP_RV2GV, SVf_READONLY); 11929 namesv = PAD_SVl(targ); 11930 if (want_dollar && *name != '$') 11931 sv_setpvs(namesv, "$"); 11932 else 11933 SvPVCLEAR(namesv); 11934 sv_catpvn(namesv, name, len); 11935 if ( name_utf8 ) SvUTF8_on(namesv); 11936 } 11937 } 11938 scalar(kid); 11939 kid = S_op_sibling_newUNOP(aTHX_ o, prev_kid, 11940 OP_RV2GV, flags); 11941 kid->op_targ = targ; 11942 kid->op_private |= priv; 11943 } 11944 } 11945 scalar(kid); 11946 break; 11947 case OA_SCALARREF: 11948 if ((type == OP_UNDEF || type == OP_POS) 11949 && numargs == 1 && !(oa >> 4) 11950 && kid->op_type == OP_LIST) 11951 return too_many_arguments_pv(o,PL_op_desc[type], 0); 11952 op_lvalue(scalar(kid), type); 11953 break; 11954 } 11955 oa >>= 4; 11956 prev_kid = kid; 11957 kid = OpSIBLING(kid); 11958 } 11959 /* FIXME - should the numargs or-ing move after the too many 11960 * arguments check? */ 11961 o->op_private |= numargs; 11962 if (kid) 11963 return too_many_arguments_pv(o,OP_DESC(o), 0); 11964 listkids(o); 11965 } 11966 else if (PL_opargs[type] & OA_DEFGV) { 11967 /* Ordering of these two is important to keep f_map.t passing. */ 11968 op_free(o); 11969 return newUNOP(type, 0, newDEFSVOP()); 11970 } 11971 11972 if (oa) { 11973 while (oa & OA_OPTIONAL) 11974 oa >>= 4; 11975 if (oa && oa != OA_LIST) 11976 return too_few_arguments_pv(o,OP_DESC(o), 0); 11977 } 11978 return o; 11979 } 11980 11981 OP * 11982 Perl_ck_glob(pTHX_ OP *o) 11983 { 11984 GV *gv; 11985 11986 PERL_ARGS_ASSERT_CK_GLOB; 11987 11988 o = ck_fun(o); 11989 if ((o->op_flags & OPf_KIDS) && !OpHAS_SIBLING(cLISTOPo->op_first)) 11990 op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */ 11991 11992 if (!(o->op_flags & OPf_SPECIAL) && (gv = gv_override("glob", 4))) 11993 { 11994 /* convert 11995 * glob 11996 * \ null - const(wildcard) 11997 * into 11998 * null 11999 * \ enter 12000 * \ list 12001 * \ mark - glob - rv2cv 12002 * | \ gv(CORE::GLOBAL::glob) 12003 * | 12004 * \ null - const(wildcard) 12005 */ 12006 o->op_flags |= OPf_SPECIAL; 12007 o->op_targ = pad_alloc(OP_GLOB, SVs_PADTMP); 12008 o = S_new_entersubop(aTHX_ gv, o); 12009 o = newUNOP(OP_NULL, 0, o); 12010 o->op_targ = OP_GLOB; /* hint at what it used to be: eg in newWHILEOP */ 12011 return o; 12012 } 12013 else o->op_flags &= ~OPf_SPECIAL; 12014 #if !defined(PERL_EXTERNAL_GLOB) 12015 if (!PL_globhook) { 12016 ENTER; 12017 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, 12018 newSVpvs("File::Glob"), NULL, NULL, NULL); 12019 LEAVE; 12020 } 12021 #endif /* !PERL_EXTERNAL_GLOB */ 12022 gv = (GV *)newSV(0); 12023 gv_init(gv, 0, "", 0, 0); 12024 gv_IOadd(gv); 12025 op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv)); 12026 SvREFCNT_dec_NN(gv); /* newGVOP increased it */ 12027 scalarkids(o); 12028 return o; 12029 } 12030 12031 OP * 12032 Perl_ck_grep(pTHX_ OP *o) 12033 { 12034 LOGOP *gwop; 12035 OP *kid; 12036 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE; 12037 12038 PERL_ARGS_ASSERT_CK_GREP; 12039 12040 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */ 12041 12042 if (o->op_flags & OPf_STACKED) { 12043 kid = cUNOPx(OpSIBLING(cLISTOPo->op_first))->op_first; 12044 if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE) 12045 return no_fh_allowed(o); 12046 o->op_flags &= ~OPf_STACKED; 12047 } 12048 kid = OpSIBLING(cLISTOPo->op_first); 12049 if (type == OP_MAPWHILE) 12050 list(kid); 12051 else 12052 scalar(kid); 12053 o = ck_fun(o); 12054 if (PL_parser && PL_parser->error_count) 12055 return o; 12056 kid = OpSIBLING(cLISTOPo->op_first); 12057 if (kid->op_type != OP_NULL) 12058 Perl_croak(aTHX_ "panic: ck_grep, type=%u", (unsigned) kid->op_type); 12059 kid = kUNOP->op_first; 12060 12061 gwop = alloc_LOGOP(type, o, LINKLIST(kid)); 12062 kid->op_next = (OP*)gwop; 12063 o->op_private = gwop->op_private = 0; 12064 gwop->op_targ = pad_alloc(type, SVs_PADTMP); 12065 12066 kid = OpSIBLING(cLISTOPo->op_first); 12067 for (kid = OpSIBLING(kid); kid; kid = OpSIBLING(kid)) 12068 op_lvalue(kid, OP_GREPSTART); 12069 12070 return (OP*)gwop; 12071 } 12072 12073 OP * 12074 Perl_ck_index(pTHX_ OP *o) 12075 { 12076 PERL_ARGS_ASSERT_CK_INDEX; 12077 12078 if (o->op_flags & OPf_KIDS) { 12079 OP *kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */ 12080 if (kid) 12081 kid = OpSIBLING(kid); /* get past "big" */ 12082 if (kid && kid->op_type == OP_CONST) { 12083 const bool save_taint = TAINT_get; 12084 SV *sv = kSVOP->op_sv; 12085 if ( (!SvPOK(sv) || SvNIOKp(sv) || isREGEXP(sv)) 12086 && SvOK(sv) && !SvROK(sv)) 12087 { 12088 sv = newSV(0); 12089 sv_copypv(sv, kSVOP->op_sv); 12090 SvREFCNT_dec_NN(kSVOP->op_sv); 12091 kSVOP->op_sv = sv; 12092 } 12093 if (SvOK(sv)) fbm_compile(sv, 0); 12094 TAINT_set(save_taint); 12095 #ifdef NO_TAINT_SUPPORT 12096 PERL_UNUSED_VAR(save_taint); 12097 #endif 12098 } 12099 } 12100 return ck_fun(o); 12101 } 12102 12103 OP * 12104 Perl_ck_lfun(pTHX_ OP *o) 12105 { 12106 const OPCODE type = o->op_type; 12107 12108 PERL_ARGS_ASSERT_CK_LFUN; 12109 12110 return modkids(ck_fun(o), type); 12111 } 12112 12113 OP * 12114 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */ 12115 { 12116 PERL_ARGS_ASSERT_CK_DEFINED; 12117 12118 if ((o->op_flags & OPf_KIDS)) { 12119 switch (cUNOPo->op_first->op_type) { 12120 case OP_RV2AV: 12121 case OP_PADAV: 12122 Perl_croak(aTHX_ "Can't use 'defined(@array)'" 12123 " (Maybe you should just omit the defined()?)"); 12124 NOT_REACHED; /* NOTREACHED */ 12125 break; 12126 case OP_RV2HV: 12127 case OP_PADHV: 12128 Perl_croak(aTHX_ "Can't use 'defined(%%hash)'" 12129 " (Maybe you should just omit the defined()?)"); 12130 NOT_REACHED; /* NOTREACHED */ 12131 break; 12132 default: 12133 /* no warning */ 12134 break; 12135 } 12136 } 12137 return ck_rfun(o); 12138 } 12139 12140 OP * 12141 Perl_ck_readline(pTHX_ OP *o) 12142 { 12143 PERL_ARGS_ASSERT_CK_READLINE; 12144 12145 if (o->op_flags & OPf_KIDS) { 12146 OP *kid = cLISTOPo->op_first; 12147 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE; 12148 scalar(kid); 12149 } 12150 else { 12151 OP * const newop 12152 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv)); 12153 op_free(o); 12154 return newop; 12155 } 12156 return o; 12157 } 12158 12159 OP * 12160 Perl_ck_rfun(pTHX_ OP *o) 12161 { 12162 const OPCODE type = o->op_type; 12163 12164 PERL_ARGS_ASSERT_CK_RFUN; 12165 12166 return refkids(ck_fun(o), type); 12167 } 12168 12169 OP * 12170 Perl_ck_listiob(pTHX_ OP *o) 12171 { 12172 OP *kid; 12173 12174 PERL_ARGS_ASSERT_CK_LISTIOB; 12175 12176 kid = cLISTOPo->op_first; 12177 if (!kid) { 12178 o = force_list(o, 1); 12179 kid = cLISTOPo->op_first; 12180 } 12181 if (kid->op_type == OP_PUSHMARK) 12182 kid = OpSIBLING(kid); 12183 if (kid && o->op_flags & OPf_STACKED) 12184 kid = OpSIBLING(kid); 12185 else if (kid && !OpHAS_SIBLING(kid)) { /* print HANDLE; */ 12186 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE 12187 && !kid->op_folded) { 12188 o->op_flags |= OPf_STACKED; /* make it a filehandle */ 12189 scalar(kid); 12190 /* replace old const op with new OP_RV2GV parent */ 12191 kid = S_op_sibling_newUNOP(aTHX_ o, cLISTOPo->op_first, 12192 OP_RV2GV, OPf_REF); 12193 kid = OpSIBLING(kid); 12194 } 12195 } 12196 12197 if (!kid) 12198 op_append_elem(o->op_type, o, newDEFSVOP()); 12199 12200 if (o->op_type == OP_PRTF) return modkids(listkids(o), OP_PRTF); 12201 return listkids(o); 12202 } 12203 12204 OP * 12205 Perl_ck_smartmatch(pTHX_ OP *o) 12206 { 12207 dVAR; 12208 PERL_ARGS_ASSERT_CK_SMARTMATCH; 12209 if (0 == (o->op_flags & OPf_SPECIAL)) { 12210 OP *first = cBINOPo->op_first; 12211 OP *second = OpSIBLING(first); 12212 12213 /* Implicitly take a reference to an array or hash */ 12214 12215 /* remove the original two siblings, then add back the 12216 * (possibly different) first and second sibs. 12217 */ 12218 op_sibling_splice(o, NULL, 1, NULL); 12219 op_sibling_splice(o, NULL, 1, NULL); 12220 first = ref_array_or_hash(first); 12221 second = ref_array_or_hash(second); 12222 op_sibling_splice(o, NULL, 0, second); 12223 op_sibling_splice(o, NULL, 0, first); 12224 12225 /* Implicitly take a reference to a regular expression */ 12226 if (first->op_type == OP_MATCH && !(first->op_flags & OPf_STACKED)) { 12227 OpTYPE_set(first, OP_QR); 12228 } 12229 if (second->op_type == OP_MATCH && !(second->op_flags & OPf_STACKED)) { 12230 OpTYPE_set(second, OP_QR); 12231 } 12232 } 12233 12234 return o; 12235 } 12236 12237 12238 static OP * 12239 S_maybe_targlex(pTHX_ OP *o) 12240 { 12241 OP * const kid = cLISTOPo->op_first; 12242 /* has a disposable target? */ 12243 if ((PL_opargs[kid->op_type] & OA_TARGLEX) 12244 && !(kid->op_flags & OPf_STACKED) 12245 /* Cannot steal the second time! */ 12246 && !(kid->op_private & OPpTARGET_MY) 12247 ) 12248 { 12249 OP * const kkid = OpSIBLING(kid); 12250 12251 /* Can just relocate the target. */ 12252 if (kkid && kkid->op_type == OP_PADSV 12253 && (!(kkid->op_private & OPpLVAL_INTRO) 12254 || kkid->op_private & OPpPAD_STATE)) 12255 { 12256 kid->op_targ = kkid->op_targ; 12257 kkid->op_targ = 0; 12258 /* Now we do not need PADSV and SASSIGN. 12259 * Detach kid and free the rest. */ 12260 op_sibling_splice(o, NULL, 1, NULL); 12261 op_free(o); 12262 kid->op_private |= OPpTARGET_MY; /* Used for context settings */ 12263 return kid; 12264 } 12265 } 12266 return o; 12267 } 12268 12269 OP * 12270 Perl_ck_sassign(pTHX_ OP *o) 12271 { 12272 dVAR; 12273 OP * const kid = cBINOPo->op_first; 12274 12275 PERL_ARGS_ASSERT_CK_SASSIGN; 12276 12277 if (OpHAS_SIBLING(kid)) { 12278 OP *kkid = OpSIBLING(kid); 12279 /* For state variable assignment with attributes, kkid is a list op 12280 whose op_last is a padsv. */ 12281 if ((kkid->op_type == OP_PADSV || 12282 (OP_TYPE_IS_OR_WAS(kkid, OP_LIST) && 12283 (kkid = cLISTOPx(kkid)->op_last)->op_type == OP_PADSV 12284 ) 12285 ) 12286 && (kkid->op_private & (OPpLVAL_INTRO|OPpPAD_STATE)) 12287 == (OPpLVAL_INTRO|OPpPAD_STATE)) { 12288 return S_newONCEOP(aTHX_ o, kkid); 12289 } 12290 } 12291 return S_maybe_targlex(aTHX_ o); 12292 } 12293 12294 12295 OP * 12296 Perl_ck_match(pTHX_ OP *o) 12297 { 12298 PERL_UNUSED_CONTEXT; 12299 PERL_ARGS_ASSERT_CK_MATCH; 12300 12301 return o; 12302 } 12303 12304 OP * 12305 Perl_ck_method(pTHX_ OP *o) 12306 { 12307 SV *sv, *methsv, *rclass; 12308 const char* method; 12309 char* compatptr; 12310 int utf8; 12311 STRLEN len, nsplit = 0, i; 12312 OP* new_op; 12313 OP * const kid = cUNOPo->op_first; 12314 12315 PERL_ARGS_ASSERT_CK_METHOD; 12316 if (kid->op_type != OP_CONST) return o; 12317 12318 sv = kSVOP->op_sv; 12319 12320 /* replace ' with :: */ 12321 while ((compatptr = (char *) memchr(SvPVX(sv), '\'', 12322 SvEND(sv) - SvPVX(sv) ))) 12323 { 12324 *compatptr = ':'; 12325 sv_insert(sv, compatptr - SvPVX_const(sv), 0, ":", 1); 12326 } 12327 12328 method = SvPVX_const(sv); 12329 len = SvCUR(sv); 12330 utf8 = SvUTF8(sv) ? -1 : 1; 12331 12332 for (i = len - 1; i > 0; --i) if (method[i] == ':') { 12333 nsplit = i+1; 12334 break; 12335 } 12336 12337 methsv = newSVpvn_share(method+nsplit, utf8*(len - nsplit), 0); 12338 12339 if (!nsplit) { /* $proto->method() */ 12340 op_free(o); 12341 return newMETHOP_named(OP_METHOD_NAMED, 0, methsv); 12342 } 12343 12344 if (memEQs(method, nsplit, "SUPER::")) { /* $proto->SUPER::method() */ 12345 op_free(o); 12346 return newMETHOP_named(OP_METHOD_SUPER, 0, methsv); 12347 } 12348 12349 /* $proto->MyClass::method() and $proto->MyClass::SUPER::method() */ 12350 if (nsplit >= 9 && strBEGINs(method+nsplit-9, "::SUPER::")) { 12351 rclass = newSVpvn_share(method, utf8*(nsplit-9), 0); 12352 new_op = newMETHOP_named(OP_METHOD_REDIR_SUPER, 0, methsv); 12353 } else { 12354 rclass = newSVpvn_share(method, utf8*(nsplit-2), 0); 12355 new_op = newMETHOP_named(OP_METHOD_REDIR, 0, methsv); 12356 } 12357 #ifdef USE_ITHREADS 12358 op_relocate_sv(&rclass, &cMETHOPx(new_op)->op_rclass_targ); 12359 #else 12360 cMETHOPx(new_op)->op_rclass_sv = rclass; 12361 #endif 12362 op_free(o); 12363 return new_op; 12364 } 12365 12366 OP * 12367 Perl_ck_null(pTHX_ OP *o) 12368 { 12369 PERL_ARGS_ASSERT_CK_NULL; 12370 PERL_UNUSED_CONTEXT; 12371 return o; 12372 } 12373 12374 OP * 12375 Perl_ck_open(pTHX_ OP *o) 12376 { 12377 PERL_ARGS_ASSERT_CK_OPEN; 12378 12379 S_io_hints(aTHX_ o); 12380 { 12381 /* In case of three-arg dup open remove strictness 12382 * from the last arg if it is a bareword. */ 12383 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */ 12384 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */ 12385 OP *oa; 12386 const char *mode; 12387 12388 if ((last->op_type == OP_CONST) && /* The bareword. */ 12389 (last->op_private & OPpCONST_BARE) && 12390 (last->op_private & OPpCONST_STRICT) && 12391 (oa = OpSIBLING(first)) && /* The fh. */ 12392 (oa = OpSIBLING(oa)) && /* The mode. */ 12393 (oa->op_type == OP_CONST) && 12394 SvPOK(((SVOP*)oa)->op_sv) && 12395 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) && 12396 mode[0] == '>' && mode[1] == '&' && /* A dup open. */ 12397 (last == OpSIBLING(oa))) /* The bareword. */ 12398 last->op_private &= ~OPpCONST_STRICT; 12399 } 12400 return ck_fun(o); 12401 } 12402 12403 OP * 12404 Perl_ck_prototype(pTHX_ OP *o) 12405 { 12406 PERL_ARGS_ASSERT_CK_PROTOTYPE; 12407 if (!(o->op_flags & OPf_KIDS)) { 12408 op_free(o); 12409 return newUNOP(OP_PROTOTYPE, 0, newDEFSVOP()); 12410 } 12411 return o; 12412 } 12413 12414 OP * 12415 Perl_ck_refassign(pTHX_ OP *o) 12416 { 12417 OP * const right = cLISTOPo->op_first; 12418 OP * const left = OpSIBLING(right); 12419 OP *varop = cUNOPx(cUNOPx(left)->op_first)->op_first; 12420 bool stacked = 0; 12421 12422 PERL_ARGS_ASSERT_CK_REFASSIGN; 12423 assert (left); 12424 assert (left->op_type == OP_SREFGEN); 12425 12426 o->op_private = 0; 12427 /* we use OPpPAD_STATE in refassign to mean either of those things, 12428 * and the code assumes the two flags occupy the same bit position 12429 * in the various ops below */ 12430 assert(OPpPAD_STATE == OPpOUR_INTRO); 12431 12432 switch (varop->op_type) { 12433 case OP_PADAV: 12434 o->op_private |= OPpLVREF_AV; 12435 goto settarg; 12436 case OP_PADHV: 12437 o->op_private |= OPpLVREF_HV; 12438 /* FALLTHROUGH */ 12439 case OP_PADSV: 12440 settarg: 12441 o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpPAD_STATE)); 12442 o->op_targ = varop->op_targ; 12443 varop->op_targ = 0; 12444 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX); 12445 break; 12446 12447 case OP_RV2AV: 12448 o->op_private |= OPpLVREF_AV; 12449 goto checkgv; 12450 NOT_REACHED; /* NOTREACHED */ 12451 case OP_RV2HV: 12452 o->op_private |= OPpLVREF_HV; 12453 /* FALLTHROUGH */ 12454 case OP_RV2SV: 12455 checkgv: 12456 o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)); 12457 if (cUNOPx(varop)->op_first->op_type != OP_GV) goto bad; 12458 detach_and_stack: 12459 /* Point varop to its GV kid, detached. */ 12460 varop = op_sibling_splice(varop, NULL, -1, NULL); 12461 stacked = TRUE; 12462 break; 12463 case OP_RV2CV: { 12464 OP * const kidparent = 12465 OpSIBLING(cUNOPx(cUNOPx(varop)->op_first)->op_first); 12466 OP * const kid = cUNOPx(kidparent)->op_first; 12467 o->op_private |= OPpLVREF_CV; 12468 if (kid->op_type == OP_GV) { 12469 varop = kidparent; 12470 goto detach_and_stack; 12471 } 12472 if (kid->op_type != OP_PADCV) goto bad; 12473 o->op_targ = kid->op_targ; 12474 kid->op_targ = 0; 12475 break; 12476 } 12477 case OP_AELEM: 12478 case OP_HELEM: 12479 o->op_private |= (varop->op_private & OPpLVAL_INTRO); 12480 o->op_private |= OPpLVREF_ELEM; 12481 op_null(varop); 12482 stacked = TRUE; 12483 /* Detach varop. */ 12484 op_sibling_splice(cUNOPx(left)->op_first, NULL, -1, NULL); 12485 break; 12486 default: 12487 bad: 12488 /* diag_listed_as: Can't modify reference to %s in %s assignment */ 12489 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in scalar " 12490 "assignment", 12491 OP_DESC(varop))); 12492 return o; 12493 } 12494 if (!FEATURE_REFALIASING_IS_ENABLED) 12495 Perl_croak(aTHX_ 12496 "Experimental aliasing via reference not enabled"); 12497 Perl_ck_warner_d(aTHX_ 12498 packWARN(WARN_EXPERIMENTAL__REFALIASING), 12499 "Aliasing via reference is experimental"); 12500 if (stacked) { 12501 o->op_flags |= OPf_STACKED; 12502 op_sibling_splice(o, right, 1, varop); 12503 } 12504 else { 12505 o->op_flags &=~ OPf_STACKED; 12506 op_sibling_splice(o, right, 1, NULL); 12507 } 12508 op_free(left); 12509 return o; 12510 } 12511 12512 OP * 12513 Perl_ck_repeat(pTHX_ OP *o) 12514 { 12515 PERL_ARGS_ASSERT_CK_REPEAT; 12516 12517 if (cBINOPo->op_first->op_flags & OPf_PARENS) { 12518 OP* kids; 12519 o->op_private |= OPpREPEAT_DOLIST; 12520 kids = op_sibling_splice(o, NULL, 1, NULL); /* detach first kid */ 12521 kids = force_list(kids, 1); /* promote it to a list */ 12522 op_sibling_splice(o, NULL, 0, kids); /* and add back */ 12523 } 12524 else 12525 scalar(o); 12526 return o; 12527 } 12528 12529 OP * 12530 Perl_ck_require(pTHX_ OP *o) 12531 { 12532 GV* gv; 12533 12534 PERL_ARGS_ASSERT_CK_REQUIRE; 12535 12536 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */ 12537 SVOP * const kid = (SVOP*)cUNOPo->op_first; 12538 U32 hash; 12539 char *s; 12540 STRLEN len; 12541 if (kid->op_type == OP_CONST) { 12542 SV * const sv = kid->op_sv; 12543 U32 const was_readonly = SvREADONLY(sv); 12544 if (kid->op_private & OPpCONST_BARE) { 12545 dVAR; 12546 const char *end; 12547 HEK *hek; 12548 12549 if (was_readonly) { 12550 SvREADONLY_off(sv); 12551 } 12552 if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0); 12553 12554 s = SvPVX(sv); 12555 len = SvCUR(sv); 12556 end = s + len; 12557 /* treat ::foo::bar as foo::bar */ 12558 if (len >= 2 && s[0] == ':' && s[1] == ':') 12559 DIE(aTHX_ "Bareword in require must not start with a double-colon: \"%s\"\n", s); 12560 if (s == end) 12561 DIE(aTHX_ "Bareword in require maps to empty filename"); 12562 12563 for (; s < end; s++) { 12564 if (*s == ':' && s[1] == ':') { 12565 *s = '/'; 12566 Move(s+2, s+1, end - s - 1, char); 12567 --end; 12568 } 12569 } 12570 SvEND_set(sv, end); 12571 sv_catpvs(sv, ".pm"); 12572 PERL_HASH(hash, SvPVX(sv), SvCUR(sv)); 12573 hek = share_hek(SvPVX(sv), 12574 (SSize_t)SvCUR(sv) * (SvUTF8(sv) ? -1 : 1), 12575 hash); 12576 sv_sethek(sv, hek); 12577 unshare_hek(hek); 12578 SvFLAGS(sv) |= was_readonly; 12579 } 12580 else if (SvPOK(sv) && !SvNIOK(sv) && !SvGMAGICAL(sv) 12581 && !SvVOK(sv)) { 12582 s = SvPV(sv, len); 12583 if (SvREFCNT(sv) > 1) { 12584 kid->op_sv = newSVpvn_share( 12585 s, SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len, 0); 12586 SvREFCNT_dec_NN(sv); 12587 } 12588 else { 12589 dVAR; 12590 HEK *hek; 12591 if (was_readonly) SvREADONLY_off(sv); 12592 PERL_HASH(hash, s, len); 12593 hek = share_hek(s, 12594 SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len, 12595 hash); 12596 sv_sethek(sv, hek); 12597 unshare_hek(hek); 12598 SvFLAGS(sv) |= was_readonly; 12599 } 12600 } 12601 } 12602 } 12603 12604 if (!(o->op_flags & OPf_SPECIAL) /* Wasn't written as CORE::require */ 12605 /* handle override, if any */ 12606 && (gv = gv_override("require", 7))) { 12607 OP *kid, *newop; 12608 if (o->op_flags & OPf_KIDS) { 12609 kid = cUNOPo->op_first; 12610 op_sibling_splice(o, NULL, -1, NULL); 12611 } 12612 else { 12613 kid = newDEFSVOP(); 12614 } 12615 op_free(o); 12616 newop = S_new_entersubop(aTHX_ gv, kid); 12617 return newop; 12618 } 12619 12620 return ck_fun(o); 12621 } 12622 12623 OP * 12624 Perl_ck_return(pTHX_ OP *o) 12625 { 12626 OP *kid; 12627 12628 PERL_ARGS_ASSERT_CK_RETURN; 12629 12630 kid = OpSIBLING(cLISTOPo->op_first); 12631 if (PL_compcv && CvLVALUE(PL_compcv)) { 12632 for (; kid; kid = OpSIBLING(kid)) 12633 op_lvalue(kid, OP_LEAVESUBLV); 12634 } 12635 12636 return o; 12637 } 12638 12639 OP * 12640 Perl_ck_select(pTHX_ OP *o) 12641 { 12642 dVAR; 12643 OP* kid; 12644 12645 PERL_ARGS_ASSERT_CK_SELECT; 12646 12647 if (o->op_flags & OPf_KIDS) { 12648 kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */ 12649 if (kid && OpHAS_SIBLING(kid)) { 12650 OpTYPE_set(o, OP_SSELECT); 12651 o = ck_fun(o); 12652 return fold_constants(op_integerize(op_std_init(o))); 12653 } 12654 } 12655 o = ck_fun(o); 12656 kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */ 12657 if (kid && kid->op_type == OP_RV2GV) 12658 kid->op_private &= ~HINT_STRICT_REFS; 12659 return o; 12660 } 12661 12662 OP * 12663 Perl_ck_shift(pTHX_ OP *o) 12664 { 12665 const I32 type = o->op_type; 12666 12667 PERL_ARGS_ASSERT_CK_SHIFT; 12668 12669 if (!(o->op_flags & OPf_KIDS)) { 12670 OP *argop; 12671 12672 if (!CvUNIQUE(PL_compcv)) { 12673 o->op_flags |= OPf_SPECIAL; 12674 return o; 12675 } 12676 12677 argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv))); 12678 op_free(o); 12679 return newUNOP(type, 0, scalar(argop)); 12680 } 12681 return scalar(ck_fun(o)); 12682 } 12683 12684 OP * 12685 Perl_ck_sort(pTHX_ OP *o) 12686 { 12687 OP *firstkid; 12688 OP *kid; 12689 HV * const hinthv = 12690 PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL; 12691 U8 stacked; 12692 12693 PERL_ARGS_ASSERT_CK_SORT; 12694 12695 if (hinthv) { 12696 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE); 12697 if (svp) { 12698 const I32 sorthints = (I32)SvIV(*svp); 12699 if ((sorthints & HINT_SORT_STABLE) != 0) 12700 o->op_private |= OPpSORT_STABLE; 12701 if ((sorthints & HINT_SORT_UNSTABLE) != 0) 12702 o->op_private |= OPpSORT_UNSTABLE; 12703 } 12704 } 12705 12706 if (o->op_flags & OPf_STACKED) 12707 simplify_sort(o); 12708 firstkid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */ 12709 12710 if ((stacked = o->op_flags & OPf_STACKED)) { /* may have been cleared */ 12711 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */ 12712 12713 /* if the first arg is a code block, process it and mark sort as 12714 * OPf_SPECIAL */ 12715 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) { 12716 LINKLIST(kid); 12717 if (kid->op_type == OP_LEAVE) 12718 op_null(kid); /* wipe out leave */ 12719 /* Prevent execution from escaping out of the sort block. */ 12720 kid->op_next = 0; 12721 12722 /* provide scalar context for comparison function/block */ 12723 kid = scalar(firstkid); 12724 kid->op_next = kid; 12725 o->op_flags |= OPf_SPECIAL; 12726 } 12727 else if (kid->op_type == OP_CONST 12728 && kid->op_private & OPpCONST_BARE) { 12729 char tmpbuf[256]; 12730 STRLEN len; 12731 PADOFFSET off; 12732 const char * const name = SvPV(kSVOP_sv, len); 12733 *tmpbuf = '&'; 12734 assert (len < 256); 12735 Copy(name, tmpbuf+1, len, char); 12736 off = pad_findmy_pvn(tmpbuf, len+1, 0); 12737 if (off != NOT_IN_PAD) { 12738 if (PAD_COMPNAME_FLAGS_isOUR(off)) { 12739 SV * const fq = 12740 newSVhek(HvNAME_HEK(PAD_COMPNAME_OURSTASH(off))); 12741 sv_catpvs(fq, "::"); 12742 sv_catsv(fq, kSVOP_sv); 12743 SvREFCNT_dec_NN(kSVOP_sv); 12744 kSVOP->op_sv = fq; 12745 } 12746 else { 12747 OP * const padop = newOP(OP_PADCV, 0); 12748 padop->op_targ = off; 12749 /* replace the const op with the pad op */ 12750 op_sibling_splice(firstkid, NULL, 1, padop); 12751 op_free(kid); 12752 } 12753 } 12754 } 12755 12756 firstkid = OpSIBLING(firstkid); 12757 } 12758 12759 for (kid = firstkid; kid; kid = OpSIBLING(kid)) { 12760 /* provide list context for arguments */ 12761 list(kid); 12762 if (stacked) 12763 op_lvalue(kid, OP_GREPSTART); 12764 } 12765 12766 return o; 12767 } 12768 12769 /* for sort { X } ..., where X is one of 12770 * $a <=> $b, $b <=> $a, $a cmp $b, $b cmp $a 12771 * elide the second child of the sort (the one containing X), 12772 * and set these flags as appropriate 12773 OPpSORT_NUMERIC; 12774 OPpSORT_INTEGER; 12775 OPpSORT_DESCEND; 12776 * Also, check and warn on lexical $a, $b. 12777 */ 12778 12779 STATIC void 12780 S_simplify_sort(pTHX_ OP *o) 12781 { 12782 OP *kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */ 12783 OP *k; 12784 int descending; 12785 GV *gv; 12786 const char *gvname; 12787 bool have_scopeop; 12788 12789 PERL_ARGS_ASSERT_SIMPLIFY_SORT; 12790 12791 kid = kUNOP->op_first; /* get past null */ 12792 if (!(have_scopeop = kid->op_type == OP_SCOPE) 12793 && kid->op_type != OP_LEAVE) 12794 return; 12795 kid = kLISTOP->op_last; /* get past scope */ 12796 switch(kid->op_type) { 12797 case OP_NCMP: 12798 case OP_I_NCMP: 12799 case OP_SCMP: 12800 if (!have_scopeop) goto padkids; 12801 break; 12802 default: 12803 return; 12804 } 12805 k = kid; /* remember this node*/ 12806 if (kBINOP->op_first->op_type != OP_RV2SV 12807 || kBINOP->op_last ->op_type != OP_RV2SV) 12808 { 12809 /* 12810 Warn about my($a) or my($b) in a sort block, *if* $a or $b is 12811 then used in a comparison. This catches most, but not 12812 all cases. For instance, it catches 12813 sort { my($a); $a <=> $b } 12814 but not 12815 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; } 12816 (although why you'd do that is anyone's guess). 12817 */ 12818 12819 padkids: 12820 if (!ckWARN(WARN_SYNTAX)) return; 12821 kid = kBINOP->op_first; 12822 do { 12823 if (kid->op_type == OP_PADSV) { 12824 PADNAME * const name = PAD_COMPNAME(kid->op_targ); 12825 if (PadnameLEN(name) == 2 && *PadnamePV(name) == '$' 12826 && ( PadnamePV(name)[1] == 'a' 12827 || PadnamePV(name)[1] == 'b' )) 12828 /* diag_listed_as: "my %s" used in sort comparison */ 12829 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), 12830 "\"%s %s\" used in sort comparison", 12831 PadnameIsSTATE(name) 12832 ? "state" 12833 : "my", 12834 PadnamePV(name)); 12835 } 12836 } while ((kid = OpSIBLING(kid))); 12837 return; 12838 } 12839 kid = kBINOP->op_first; /* get past cmp */ 12840 if (kUNOP->op_first->op_type != OP_GV) 12841 return; 12842 kid = kUNOP->op_first; /* get past rv2sv */ 12843 gv = kGVOP_gv; 12844 if (GvSTASH(gv) != PL_curstash) 12845 return; 12846 gvname = GvNAME(gv); 12847 if (*gvname == 'a' && gvname[1] == '\0') 12848 descending = 0; 12849 else if (*gvname == 'b' && gvname[1] == '\0') 12850 descending = 1; 12851 else 12852 return; 12853 12854 kid = k; /* back to cmp */ 12855 /* already checked above that it is rv2sv */ 12856 kid = kBINOP->op_last; /* down to 2nd arg */ 12857 if (kUNOP->op_first->op_type != OP_GV) 12858 return; 12859 kid = kUNOP->op_first; /* get past rv2sv */ 12860 gv = kGVOP_gv; 12861 if (GvSTASH(gv) != PL_curstash) 12862 return; 12863 gvname = GvNAME(gv); 12864 if ( descending 12865 ? !(*gvname == 'a' && gvname[1] == '\0') 12866 : !(*gvname == 'b' && gvname[1] == '\0')) 12867 return; 12868 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL); 12869 if (descending) 12870 o->op_private |= OPpSORT_DESCEND; 12871 if (k->op_type == OP_NCMP) 12872 o->op_private |= OPpSORT_NUMERIC; 12873 if (k->op_type == OP_I_NCMP) 12874 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER; 12875 kid = OpSIBLING(cLISTOPo->op_first); 12876 /* cut out and delete old block (second sibling) */ 12877 op_sibling_splice(o, cLISTOPo->op_first, 1, NULL); 12878 op_free(kid); 12879 } 12880 12881 OP * 12882 Perl_ck_split(pTHX_ OP *o) 12883 { 12884 dVAR; 12885 OP *kid; 12886 OP *sibs; 12887 12888 PERL_ARGS_ASSERT_CK_SPLIT; 12889 12890 assert(o->op_type == OP_LIST); 12891 12892 if (o->op_flags & OPf_STACKED) 12893 return no_fh_allowed(o); 12894 12895 kid = cLISTOPo->op_first; 12896 /* delete leading NULL node, then add a CONST if no other nodes */ 12897 assert(kid->op_type == OP_NULL); 12898 op_sibling_splice(o, NULL, 1, 12899 OpHAS_SIBLING(kid) ? NULL : newSVOP(OP_CONST, 0, newSVpvs(" "))); 12900 op_free(kid); 12901 kid = cLISTOPo->op_first; 12902 12903 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) { 12904 /* remove match expression, and replace with new optree with 12905 * a match op at its head */ 12906 op_sibling_splice(o, NULL, 1, NULL); 12907 /* pmruntime will handle split " " behavior with flag==2 */ 12908 kid = pmruntime(newPMOP(OP_MATCH, 0), kid, NULL, 2, 0); 12909 op_sibling_splice(o, NULL, 0, kid); 12910 } 12911 12912 assert(kid->op_type == OP_MATCH || kid->op_type == OP_SPLIT); 12913 12914 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) { 12915 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), 12916 "Use of /g modifier is meaningless in split"); 12917 } 12918 12919 /* eliminate the split op, and move the match op (plus any children) 12920 * into its place, then convert the match op into a split op. i.e. 12921 * 12922 * SPLIT MATCH SPLIT(ex-MATCH) 12923 * | | | 12924 * MATCH - A - B - C => R - A - B - C => R - A - B - C 12925 * | | | 12926 * R X - Y X - Y 12927 * | 12928 * X - Y 12929 * 12930 * (R, if it exists, will be a regcomp op) 12931 */ 12932 12933 op_sibling_splice(o, NULL, 1, NULL); /* detach match op from o */ 12934 sibs = op_sibling_splice(o, NULL, -1, NULL); /* detach any other sibs */ 12935 op_sibling_splice(kid, cLISTOPx(kid)->op_last, 0, sibs); /* and reattach */ 12936 OpTYPE_set(kid, OP_SPLIT); 12937 kid->op_flags = (o->op_flags | (kid->op_flags & OPf_KIDS)); 12938 kid->op_private = o->op_private; 12939 op_free(o); 12940 o = kid; 12941 kid = sibs; /* kid is now the string arg of the split */ 12942 12943 if (!kid) { 12944 kid = newDEFSVOP(); 12945 op_append_elem(OP_SPLIT, o, kid); 12946 } 12947 scalar(kid); 12948 12949 kid = OpSIBLING(kid); 12950 if (!kid) { 12951 kid = newSVOP(OP_CONST, 0, newSViv(0)); 12952 op_append_elem(OP_SPLIT, o, kid); 12953 o->op_private |= OPpSPLIT_IMPLIM; 12954 } 12955 scalar(kid); 12956 12957 if (OpHAS_SIBLING(kid)) 12958 return too_many_arguments_pv(o,OP_DESC(o), 0); 12959 12960 return o; 12961 } 12962 12963 OP * 12964 Perl_ck_stringify(pTHX_ OP *o) 12965 { 12966 OP * const kid = OpSIBLING(cUNOPo->op_first); 12967 PERL_ARGS_ASSERT_CK_STRINGIFY; 12968 if (( kid->op_type == OP_JOIN || kid->op_type == OP_QUOTEMETA 12969 || kid->op_type == OP_LC || kid->op_type == OP_LCFIRST 12970 || kid->op_type == OP_UC || kid->op_type == OP_UCFIRST) 12971 && !OpHAS_SIBLING(kid)) /* syntax errs can leave extra children */ 12972 { 12973 op_sibling_splice(o, cUNOPo->op_first, -1, NULL); 12974 op_free(o); 12975 return kid; 12976 } 12977 return ck_fun(o); 12978 } 12979 12980 OP * 12981 Perl_ck_join(pTHX_ OP *o) 12982 { 12983 OP * const kid = OpSIBLING(cLISTOPo->op_first); 12984 12985 PERL_ARGS_ASSERT_CK_JOIN; 12986 12987 if (kid && kid->op_type == OP_MATCH) { 12988 if (ckWARN(WARN_SYNTAX)) { 12989 const REGEXP *re = PM_GETRE(kPMOP); 12990 const SV *msg = re 12991 ? newSVpvn_flags( RX_PRECOMP_const(re), RX_PRELEN(re), 12992 SVs_TEMP | ( RX_UTF8(re) ? SVf_UTF8 : 0 ) ) 12993 : newSVpvs_flags( "STRING", SVs_TEMP ); 12994 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), 12995 "/%" SVf "/ should probably be written as \"%" SVf "\"", 12996 SVfARG(msg), SVfARG(msg)); 12997 } 12998 } 12999 if (kid 13000 && (kid->op_type == OP_CONST /* an innocent, unsuspicious separator */ 13001 || (kid->op_type == OP_PADSV && !(kid->op_private & OPpLVAL_INTRO)) 13002 || ( kid->op_type==OP_RV2SV && kUNOP->op_first->op_type == OP_GV 13003 && !(kid->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO))))) 13004 { 13005 const OP * const bairn = OpSIBLING(kid); /* the list */ 13006 if (bairn && !OpHAS_SIBLING(bairn) /* single-item list */ 13007 && OP_GIMME(bairn,0) == G_SCALAR) 13008 { 13009 OP * const ret = op_convert_list(OP_STRINGIFY, OPf_FOLDED, 13010 op_sibling_splice(o, kid, 1, NULL)); 13011 op_free(o); 13012 return ret; 13013 } 13014 } 13015 13016 return ck_fun(o); 13017 } 13018 13019 /* 13020 =for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags 13021 13022 Examines an op, which is expected to identify a subroutine at runtime, 13023 and attempts to determine at compile time which subroutine it identifies. 13024 This is normally used during Perl compilation to determine whether 13025 a prototype can be applied to a function call. C<cvop> is the op 13026 being considered, normally an C<rv2cv> op. A pointer to the identified 13027 subroutine is returned, if it could be determined statically, and a null 13028 pointer is returned if it was not possible to determine statically. 13029 13030 Currently, the subroutine can be identified statically if the RV that the 13031 C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op. 13032 A C<gv> op is suitable if the GV's CV slot is populated. A C<const> op is 13033 suitable if the constant value must be an RV pointing to a CV. Details of 13034 this process may change in future versions of Perl. If the C<rv2cv> op 13035 has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify 13036 the subroutine statically: this flag is used to suppress compile-time 13037 magic on a subroutine call, forcing it to use default runtime behaviour. 13038 13039 If C<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling 13040 of a GV reference is modified. If a GV was examined and its CV slot was 13041 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set. 13042 If the op is not optimised away, and the CV slot is later populated with 13043 a subroutine having a prototype, that flag eventually triggers the warning 13044 "called too early to check prototype". 13045 13046 If C<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead 13047 of returning a pointer to the subroutine it returns a pointer to the 13048 GV giving the most appropriate name for the subroutine in this context. 13049 Normally this is just the C<CvGV> of the subroutine, but for an anonymous 13050 (C<CvANON>) subroutine that is referenced through a GV it will be the 13051 referencing GV. The resulting C<GV*> is cast to C<CV*> to be returned. 13052 A null pointer is returned as usual if there is no statically-determinable 13053 subroutine. 13054 13055 =cut 13056 */ 13057 13058 /* shared by toke.c:yylex */ 13059 CV * 13060 Perl_find_lexical_cv(pTHX_ PADOFFSET off) 13061 { 13062 PADNAME *name = PAD_COMPNAME(off); 13063 CV *compcv = PL_compcv; 13064 while (PadnameOUTER(name)) { 13065 assert(PARENT_PAD_INDEX(name)); 13066 compcv = CvOUTSIDE(compcv); 13067 name = PadlistNAMESARRAY(CvPADLIST(compcv)) 13068 [off = PARENT_PAD_INDEX(name)]; 13069 } 13070 assert(!PadnameIsOUR(name)); 13071 if (!PadnameIsSTATE(name) && PadnamePROTOCV(name)) { 13072 return PadnamePROTOCV(name); 13073 } 13074 return (CV *)AvARRAY(PadlistARRAY(CvPADLIST(compcv))[1])[off]; 13075 } 13076 13077 CV * 13078 Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags) 13079 { 13080 OP *rvop; 13081 CV *cv; 13082 GV *gv; 13083 PERL_ARGS_ASSERT_RV2CV_OP_CV; 13084 if (flags & ~RV2CVOPCV_FLAG_MASK) 13085 Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags); 13086 if (cvop->op_type != OP_RV2CV) 13087 return NULL; 13088 if (cvop->op_private & OPpENTERSUB_AMPER) 13089 return NULL; 13090 if (!(cvop->op_flags & OPf_KIDS)) 13091 return NULL; 13092 rvop = cUNOPx(cvop)->op_first; 13093 switch (rvop->op_type) { 13094 case OP_GV: { 13095 gv = cGVOPx_gv(rvop); 13096 if (!isGV(gv)) { 13097 if (SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV) { 13098 cv = MUTABLE_CV(SvRV(gv)); 13099 gv = NULL; 13100 break; 13101 } 13102 if (flags & RV2CVOPCV_RETURN_STUB) 13103 return (CV *)gv; 13104 else return NULL; 13105 } 13106 cv = GvCVu(gv); 13107 if (!cv) { 13108 if (flags & RV2CVOPCV_MARK_EARLY) 13109 rvop->op_private |= OPpEARLY_CV; 13110 return NULL; 13111 } 13112 } break; 13113 case OP_CONST: { 13114 SV *rv = cSVOPx_sv(rvop); 13115 if (!SvROK(rv)) 13116 return NULL; 13117 cv = (CV*)SvRV(rv); 13118 gv = NULL; 13119 } break; 13120 case OP_PADCV: { 13121 cv = find_lexical_cv(rvop->op_targ); 13122 gv = NULL; 13123 } break; 13124 default: { 13125 return NULL; 13126 } NOT_REACHED; /* NOTREACHED */ 13127 } 13128 if (SvTYPE((SV*)cv) != SVt_PVCV) 13129 return NULL; 13130 if (flags & RV2CVOPCV_RETURN_NAME_GV) { 13131 if ((!CvANON(cv) && !CvLEXICAL(cv)) || !gv) 13132 gv = CvGV(cv); 13133 return (CV*)gv; 13134 } 13135 else if (flags & RV2CVOPCV_MAYBE_NAME_GV) { 13136 if (CvLEXICAL(cv) || CvNAMED(cv)) 13137 return NULL; 13138 if (!CvANON(cv) || !gv) 13139 gv = CvGV(cv); 13140 return (CV*)gv; 13141 13142 } else { 13143 return cv; 13144 } 13145 } 13146 13147 /* 13148 =for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop 13149 13150 Performs the default fixup of the arguments part of an C<entersub> 13151 op tree. This consists of applying list context to each of the 13152 argument ops. This is the standard treatment used on a call marked 13153 with C<&>, or a method call, or a call through a subroutine reference, 13154 or any other call where the callee can't be identified at compile time, 13155 or a call where the callee has no prototype. 13156 13157 =cut 13158 */ 13159 13160 OP * 13161 Perl_ck_entersub_args_list(pTHX_ OP *entersubop) 13162 { 13163 OP *aop; 13164 13165 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST; 13166 13167 aop = cUNOPx(entersubop)->op_first; 13168 if (!OpHAS_SIBLING(aop)) 13169 aop = cUNOPx(aop)->op_first; 13170 for (aop = OpSIBLING(aop); OpHAS_SIBLING(aop); aop = OpSIBLING(aop)) { 13171 /* skip the extra attributes->import() call implicitly added in 13172 * something like foo(my $x : bar) 13173 */ 13174 if ( aop->op_type == OP_ENTERSUB 13175 && (aop->op_flags & OPf_WANT) == OPf_WANT_VOID 13176 ) 13177 continue; 13178 list(aop); 13179 op_lvalue(aop, OP_ENTERSUB); 13180 } 13181 return entersubop; 13182 } 13183 13184 /* 13185 =for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv 13186 13187 Performs the fixup of the arguments part of an C<entersub> op tree 13188 based on a subroutine prototype. This makes various modifications to 13189 the argument ops, from applying context up to inserting C<refgen> ops, 13190 and checking the number and syntactic types of arguments, as directed by 13191 the prototype. This is the standard treatment used on a subroutine call, 13192 not marked with C<&>, where the callee can be identified at compile time 13193 and has a prototype. 13194 13195 C<protosv> supplies the subroutine prototype to be applied to the call. 13196 It may be a normal defined scalar, of which the string value will be used. 13197 Alternatively, for convenience, it may be a subroutine object (a C<CV*> 13198 that has been cast to C<SV*>) which has a prototype. The prototype 13199 supplied, in whichever form, does not need to match the actual callee 13200 referenced by the op tree. 13201 13202 If the argument ops disagree with the prototype, for example by having 13203 an unacceptable number of arguments, a valid op tree is returned anyway. 13204 The error is reflected in the parser state, normally resulting in a single 13205 exception at the top level of parsing which covers all the compilation 13206 errors that occurred. In the error message, the callee is referred to 13207 by the name defined by the C<namegv> parameter. 13208 13209 =cut 13210 */ 13211 13212 OP * 13213 Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv) 13214 { 13215 STRLEN proto_len; 13216 const char *proto, *proto_end; 13217 OP *aop, *prev, *cvop, *parent; 13218 int optional = 0; 13219 I32 arg = 0; 13220 I32 contextclass = 0; 13221 const char *e = NULL; 13222 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO; 13223 if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv)) 13224 Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto, " 13225 "flags=%lx", (unsigned long) SvFLAGS(protosv)); 13226 if (SvTYPE(protosv) == SVt_PVCV) 13227 proto = CvPROTO(protosv), proto_len = CvPROTOLEN(protosv); 13228 else proto = SvPV(protosv, proto_len); 13229 proto = S_strip_spaces(aTHX_ proto, &proto_len); 13230 proto_end = proto + proto_len; 13231 parent = entersubop; 13232 aop = cUNOPx(entersubop)->op_first; 13233 if (!OpHAS_SIBLING(aop)) { 13234 parent = aop; 13235 aop = cUNOPx(aop)->op_first; 13236 } 13237 prev = aop; 13238 aop = OpSIBLING(aop); 13239 for (cvop = aop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ; 13240 while (aop != cvop) { 13241 OP* o3 = aop; 13242 13243 if (proto >= proto_end) 13244 { 13245 SV * const namesv = cv_name((CV *)namegv, NULL, 0); 13246 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf, 13247 SVfARG(namesv)), SvUTF8(namesv)); 13248 return entersubop; 13249 } 13250 13251 switch (*proto) { 13252 case ';': 13253 optional = 1; 13254 proto++; 13255 continue; 13256 case '_': 13257 /* _ must be at the end */ 13258 if (proto[1] && !strchr(";@%", proto[1])) 13259 goto oops; 13260 /* FALLTHROUGH */ 13261 case '$': 13262 proto++; 13263 arg++; 13264 scalar(aop); 13265 break; 13266 case '%': 13267 case '@': 13268 list(aop); 13269 arg++; 13270 break; 13271 case '&': 13272 proto++; 13273 arg++; 13274 if ( o3->op_type != OP_UNDEF 13275 && (o3->op_type != OP_SREFGEN 13276 || ( cUNOPx(cUNOPx(o3)->op_first)->op_first->op_type 13277 != OP_ANONCODE 13278 && cUNOPx(cUNOPx(o3)->op_first)->op_first->op_type 13279 != OP_RV2CV))) 13280 bad_type_gv(arg, namegv, o3, 13281 arg == 1 ? "block or sub {}" : "sub {}"); 13282 break; 13283 case '*': 13284 /* '*' allows any scalar type, including bareword */ 13285 proto++; 13286 arg++; 13287 if (o3->op_type == OP_RV2GV) 13288 goto wrapref; /* autoconvert GLOB -> GLOBref */ 13289 else if (o3->op_type == OP_CONST) 13290 o3->op_private &= ~OPpCONST_STRICT; 13291 scalar(aop); 13292 break; 13293 case '+': 13294 proto++; 13295 arg++; 13296 if (o3->op_type == OP_RV2AV || 13297 o3->op_type == OP_PADAV || 13298 o3->op_type == OP_RV2HV || 13299 o3->op_type == OP_PADHV 13300 ) { 13301 goto wrapref; 13302 } 13303 scalar(aop); 13304 break; 13305 case '[': case ']': 13306 goto oops; 13307 13308 case '\\': 13309 proto++; 13310 arg++; 13311 again: 13312 switch (*proto++) { 13313 case '[': 13314 if (contextclass++ == 0) { 13315 e = (char *) memchr(proto, ']', proto_end - proto); 13316 if (!e || e == proto) 13317 goto oops; 13318 } 13319 else 13320 goto oops; 13321 goto again; 13322 13323 case ']': 13324 if (contextclass) { 13325 const char *p = proto; 13326 const char *const end = proto; 13327 contextclass = 0; 13328 while (*--p != '[') 13329 /* \[$] accepts any scalar lvalue */ 13330 if (*p == '$' 13331 && Perl_op_lvalue_flags(aTHX_ 13332 scalar(o3), 13333 OP_READ, /* not entersub */ 13334 OP_LVALUE_NO_CROAK 13335 )) goto wrapref; 13336 bad_type_gv(arg, namegv, o3, 13337 Perl_form(aTHX_ "one of %.*s",(int)(end - p), p)); 13338 } else 13339 goto oops; 13340 break; 13341 case '*': 13342 if (o3->op_type == OP_RV2GV) 13343 goto wrapref; 13344 if (!contextclass) 13345 bad_type_gv(arg, namegv, o3, "symbol"); 13346 break; 13347 case '&': 13348 if (o3->op_type == OP_ENTERSUB 13349 && !(o3->op_flags & OPf_STACKED)) 13350 goto wrapref; 13351 if (!contextclass) 13352 bad_type_gv(arg, namegv, o3, "subroutine"); 13353 break; 13354 case '$': 13355 if (o3->op_type == OP_RV2SV || 13356 o3->op_type == OP_PADSV || 13357 o3->op_type == OP_HELEM || 13358 o3->op_type == OP_AELEM) 13359 goto wrapref; 13360 if (!contextclass) { 13361 /* \$ accepts any scalar lvalue */ 13362 if (Perl_op_lvalue_flags(aTHX_ 13363 scalar(o3), 13364 OP_READ, /* not entersub */ 13365 OP_LVALUE_NO_CROAK 13366 )) goto wrapref; 13367 bad_type_gv(arg, namegv, o3, "scalar"); 13368 } 13369 break; 13370 case '@': 13371 if (o3->op_type == OP_RV2AV || 13372 o3->op_type == OP_PADAV) 13373 { 13374 o3->op_flags &=~ OPf_PARENS; 13375 goto wrapref; 13376 } 13377 if (!contextclass) 13378 bad_type_gv(arg, namegv, o3, "array"); 13379 break; 13380 case '%': 13381 if (o3->op_type == OP_RV2HV || 13382 o3->op_type == OP_PADHV) 13383 { 13384 o3->op_flags &=~ OPf_PARENS; 13385 goto wrapref; 13386 } 13387 if (!contextclass) 13388 bad_type_gv(arg, namegv, o3, "hash"); 13389 break; 13390 wrapref: 13391 aop = S_op_sibling_newUNOP(aTHX_ parent, prev, 13392 OP_REFGEN, 0); 13393 if (contextclass && e) { 13394 proto = e + 1; 13395 contextclass = 0; 13396 } 13397 break; 13398 default: goto oops; 13399 } 13400 if (contextclass) 13401 goto again; 13402 break; 13403 case ' ': 13404 proto++; 13405 continue; 13406 default: 13407 oops: { 13408 Perl_croak(aTHX_ "Malformed prototype for %" SVf ": %" SVf, 13409 SVfARG(cv_name((CV *)namegv, NULL, 0)), 13410 SVfARG(protosv)); 13411 } 13412 } 13413 13414 op_lvalue(aop, OP_ENTERSUB); 13415 prev = aop; 13416 aop = OpSIBLING(aop); 13417 } 13418 if (aop == cvop && *proto == '_') { 13419 /* generate an access to $_ */ 13420 op_sibling_splice(parent, prev, 0, newDEFSVOP()); 13421 } 13422 if (!optional && proto_end > proto && 13423 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_')) 13424 { 13425 SV * const namesv = cv_name((CV *)namegv, NULL, 0); 13426 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %" SVf, 13427 SVfARG(namesv)), SvUTF8(namesv)); 13428 } 13429 return entersubop; 13430 } 13431 13432 /* 13433 =for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv 13434 13435 Performs the fixup of the arguments part of an C<entersub> op tree either 13436 based on a subroutine prototype or using default list-context processing. 13437 This is the standard treatment used on a subroutine call, not marked 13438 with C<&>, where the callee can be identified at compile time. 13439 13440 C<protosv> supplies the subroutine prototype to be applied to the call, 13441 or indicates that there is no prototype. It may be a normal scalar, 13442 in which case if it is defined then the string value will be used 13443 as a prototype, and if it is undefined then there is no prototype. 13444 Alternatively, for convenience, it may be a subroutine object (a C<CV*> 13445 that has been cast to C<SV*>), of which the prototype will be used if it 13446 has one. The prototype (or lack thereof) supplied, in whichever form, 13447 does not need to match the actual callee referenced by the op tree. 13448 13449 If the argument ops disagree with the prototype, for example by having 13450 an unacceptable number of arguments, a valid op tree is returned anyway. 13451 The error is reflected in the parser state, normally resulting in a single 13452 exception at the top level of parsing which covers all the compilation 13453 errors that occurred. In the error message, the callee is referred to 13454 by the name defined by the C<namegv> parameter. 13455 13456 =cut 13457 */ 13458 13459 OP * 13460 Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop, 13461 GV *namegv, SV *protosv) 13462 { 13463 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST; 13464 if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv)) 13465 return ck_entersub_args_proto(entersubop, namegv, protosv); 13466 else 13467 return ck_entersub_args_list(entersubop); 13468 } 13469 13470 OP * 13471 Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv) 13472 { 13473 IV cvflags = SvIVX(protosv); 13474 int opnum = cvflags & 0xffff; 13475 OP *aop = cUNOPx(entersubop)->op_first; 13476 13477 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE; 13478 13479 if (!opnum) { 13480 OP *cvop; 13481 if (!OpHAS_SIBLING(aop)) 13482 aop = cUNOPx(aop)->op_first; 13483 aop = OpSIBLING(aop); 13484 for (cvop = aop; OpSIBLING(cvop); cvop = OpSIBLING(cvop)) ; 13485 if (aop != cvop) { 13486 SV *namesv = cv_name((CV *)namegv, NULL, CV_NAME_NOTQUAL); 13487 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf, 13488 SVfARG(namesv)), SvUTF8(namesv)); 13489 } 13490 13491 op_free(entersubop); 13492 switch(cvflags >> 16) { 13493 case 'F': return newSVOP(OP_CONST, 0, 13494 newSVpv(CopFILE(PL_curcop),0)); 13495 case 'L': return newSVOP( 13496 OP_CONST, 0, 13497 Perl_newSVpvf(aTHX_ 13498 "%" IVdf, (IV)CopLINE(PL_curcop) 13499 ) 13500 ); 13501 case 'P': return newSVOP(OP_CONST, 0, 13502 (PL_curstash 13503 ? newSVhek(HvNAME_HEK(PL_curstash)) 13504 : &PL_sv_undef 13505 ) 13506 ); 13507 } 13508 NOT_REACHED; /* NOTREACHED */ 13509 } 13510 else { 13511 OP *prev, *cvop, *first, *parent; 13512 U32 flags = 0; 13513 13514 parent = entersubop; 13515 if (!OpHAS_SIBLING(aop)) { 13516 parent = aop; 13517 aop = cUNOPx(aop)->op_first; 13518 } 13519 13520 first = prev = aop; 13521 aop = OpSIBLING(aop); 13522 /* find last sibling */ 13523 for (cvop = aop; 13524 OpHAS_SIBLING(cvop); 13525 prev = cvop, cvop = OpSIBLING(cvop)) 13526 ; 13527 if (!(cvop->op_private & OPpENTERSUB_NOPAREN) 13528 /* Usually, OPf_SPECIAL on an op with no args means that it had 13529 * parens, but these have their own meaning for that flag: */ 13530 && opnum != OP_VALUES && opnum != OP_KEYS && opnum != OP_EACH 13531 && opnum != OP_DELETE && opnum != OP_EXISTS) 13532 flags |= OPf_SPECIAL; 13533 /* excise cvop from end of sibling chain */ 13534 op_sibling_splice(parent, prev, 1, NULL); 13535 op_free(cvop); 13536 if (aop == cvop) aop = NULL; 13537 13538 /* detach remaining siblings from the first sibling, then 13539 * dispose of original optree */ 13540 13541 if (aop) 13542 op_sibling_splice(parent, first, -1, NULL); 13543 op_free(entersubop); 13544 13545 if (cvflags == (OP_ENTEREVAL | (1<<16))) 13546 flags |= OPpEVAL_BYTES <<8; 13547 13548 switch (PL_opargs[opnum] & OA_CLASS_MASK) { 13549 case OA_UNOP: 13550 case OA_BASEOP_OR_UNOP: 13551 case OA_FILESTATOP: 13552 if (!aop) 13553 return newOP(opnum,flags); /* zero args */ 13554 if (aop == prev) 13555 return newUNOP(opnum,flags,aop); /* one arg */ 13556 /* too many args */ 13557 /* FALLTHROUGH */ 13558 case OA_BASEOP: 13559 if (aop) { 13560 SV *namesv; 13561 OP *nextop; 13562 13563 namesv = cv_name((CV *)namegv, NULL, CV_NAME_NOTQUAL); 13564 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf, 13565 SVfARG(namesv)), SvUTF8(namesv)); 13566 while (aop) { 13567 nextop = OpSIBLING(aop); 13568 op_free(aop); 13569 aop = nextop; 13570 } 13571 13572 } 13573 return opnum == OP_RUNCV 13574 ? newPVOP(OP_RUNCV,0,NULL) 13575 : newOP(opnum,0); 13576 default: 13577 return op_convert_list(opnum,0,aop); 13578 } 13579 } 13580 NOT_REACHED; /* NOTREACHED */ 13581 return entersubop; 13582 } 13583 13584 /* 13585 =for apidoc Am|void|cv_get_call_checker_flags|CV *cv|U32 gflags|Perl_call_checker *ckfun_p|SV **ckobj_p|U32 *ckflags_p 13586 13587 Retrieves the function that will be used to fix up a call to C<cv>. 13588 Specifically, the function is applied to an C<entersub> op tree for a 13589 subroutine call, not marked with C<&>, where the callee can be identified 13590 at compile time as C<cv>. 13591 13592 The C-level function pointer is returned in C<*ckfun_p>, an SV argument 13593 for it is returned in C<*ckobj_p>, and control flags are returned in 13594 C<*ckflags_p>. The function is intended to be called in this manner: 13595 13596 entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p)); 13597 13598 In this call, C<entersubop> is a pointer to the C<entersub> op, 13599 which may be replaced by the check function, and C<namegv> supplies 13600 the name that should be used by the check function to refer 13601 to the callee of the C<entersub> op if it needs to emit any diagnostics. 13602 It is permitted to apply the check function in non-standard situations, 13603 such as to a call to a different subroutine or to a method call. 13604 13605 C<namegv> may not actually be a GV. If the C<CALL_CHECKER_REQUIRE_GV> 13606 bit is clear in C<*ckflags_p>, it is permitted to pass a CV or other SV 13607 instead, anything that can be used as the first argument to L</cv_name>. 13608 If the C<CALL_CHECKER_REQUIRE_GV> bit is set in C<*ckflags_p> then the 13609 check function requires C<namegv> to be a genuine GV. 13610 13611 By default, the check function is 13612 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>, 13613 the SV parameter is C<cv> itself, and the C<CALL_CHECKER_REQUIRE_GV> 13614 flag is clear. This implements standard prototype processing. It can 13615 be changed, for a particular subroutine, by L</cv_set_call_checker_flags>. 13616 13617 If the C<CALL_CHECKER_REQUIRE_GV> bit is set in C<gflags> then it 13618 indicates that the caller only knows about the genuine GV version of 13619 C<namegv>, and accordingly the corresponding bit will always be set in 13620 C<*ckflags_p>, regardless of the check function's recorded requirements. 13621 If the C<CALL_CHECKER_REQUIRE_GV> bit is clear in C<gflags> then it 13622 indicates the caller knows about the possibility of passing something 13623 other than a GV as C<namegv>, and accordingly the corresponding bit may 13624 be either set or clear in C<*ckflags_p>, indicating the check function's 13625 recorded requirements. 13626 13627 C<gflags> is a bitset passed into C<cv_get_call_checker_flags>, in which 13628 only the C<CALL_CHECKER_REQUIRE_GV> bit currently has a defined meaning 13629 (for which see above). All other bits should be clear. 13630 13631 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p 13632 13633 The original form of L</cv_get_call_checker_flags>, which does not return 13634 checker flags. When using a checker function returned by this function, 13635 it is only safe to call it with a genuine GV as its C<namegv> argument. 13636 13637 =cut 13638 */ 13639 13640 void 13641 Perl_cv_get_call_checker_flags(pTHX_ CV *cv, U32 gflags, 13642 Perl_call_checker *ckfun_p, SV **ckobj_p, U32 *ckflags_p) 13643 { 13644 MAGIC *callmg; 13645 PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER_FLAGS; 13646 PERL_UNUSED_CONTEXT; 13647 callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL; 13648 if (callmg) { 13649 *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr); 13650 *ckobj_p = callmg->mg_obj; 13651 *ckflags_p = (callmg->mg_flags | gflags) & MGf_REQUIRE_GV; 13652 } else { 13653 *ckfun_p = Perl_ck_entersub_args_proto_or_list; 13654 *ckobj_p = (SV*)cv; 13655 *ckflags_p = gflags & MGf_REQUIRE_GV; 13656 } 13657 } 13658 13659 void 13660 Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p) 13661 { 13662 U32 ckflags; 13663 PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER; 13664 PERL_UNUSED_CONTEXT; 13665 cv_get_call_checker_flags(cv, CALL_CHECKER_REQUIRE_GV, ckfun_p, ckobj_p, 13666 &ckflags); 13667 } 13668 13669 /* 13670 =for apidoc Am|void|cv_set_call_checker_flags|CV *cv|Perl_call_checker ckfun|SV *ckobj|U32 ckflags 13671 13672 Sets the function that will be used to fix up a call to C<cv>. 13673 Specifically, the function is applied to an C<entersub> op tree for a 13674 subroutine call, not marked with C<&>, where the callee can be identified 13675 at compile time as C<cv>. 13676 13677 The C-level function pointer is supplied in C<ckfun>, an SV argument for 13678 it is supplied in C<ckobj>, and control flags are supplied in C<ckflags>. 13679 The function should be defined like this: 13680 13681 STATIC OP * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj) 13682 13683 It is intended to be called in this manner: 13684 13685 entersubop = ckfun(aTHX_ entersubop, namegv, ckobj); 13686 13687 In this call, C<entersubop> is a pointer to the C<entersub> op, 13688 which may be replaced by the check function, and C<namegv> supplies 13689 the name that should be used by the check function to refer 13690 to the callee of the C<entersub> op if it needs to emit any diagnostics. 13691 It is permitted to apply the check function in non-standard situations, 13692 such as to a call to a different subroutine or to a method call. 13693 13694 C<namegv> may not actually be a GV. For efficiency, perl may pass a 13695 CV or other SV instead. Whatever is passed can be used as the first 13696 argument to L</cv_name>. You can force perl to pass a GV by including 13697 C<CALL_CHECKER_REQUIRE_GV> in the C<ckflags>. 13698 13699 C<ckflags> is a bitset, in which only the C<CALL_CHECKER_REQUIRE_GV> 13700 bit currently has a defined meaning (for which see above). All other 13701 bits should be clear. 13702 13703 The current setting for a particular CV can be retrieved by 13704 L</cv_get_call_checker_flags>. 13705 13706 =for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj 13707 13708 The original form of L</cv_set_call_checker_flags>, which passes it the 13709 C<CALL_CHECKER_REQUIRE_GV> flag for backward-compatibility. The effect 13710 of that flag setting is that the check function is guaranteed to get a 13711 genuine GV as its C<namegv> argument. 13712 13713 =cut 13714 */ 13715 13716 void 13717 Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj) 13718 { 13719 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER; 13720 cv_set_call_checker_flags(cv, ckfun, ckobj, CALL_CHECKER_REQUIRE_GV); 13721 } 13722 13723 void 13724 Perl_cv_set_call_checker_flags(pTHX_ CV *cv, Perl_call_checker ckfun, 13725 SV *ckobj, U32 ckflags) 13726 { 13727 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER_FLAGS; 13728 if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) { 13729 if (SvMAGICAL((SV*)cv)) 13730 mg_free_type((SV*)cv, PERL_MAGIC_checkcall); 13731 } else { 13732 MAGIC *callmg; 13733 sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0); 13734 callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall); 13735 assert(callmg); 13736 if (callmg->mg_flags & MGf_REFCOUNTED) { 13737 SvREFCNT_dec(callmg->mg_obj); 13738 callmg->mg_flags &= ~MGf_REFCOUNTED; 13739 } 13740 callmg->mg_ptr = FPTR2DPTR(char *, ckfun); 13741 callmg->mg_obj = ckobj; 13742 if (ckobj != (SV*)cv) { 13743 SvREFCNT_inc_simple_void_NN(ckobj); 13744 callmg->mg_flags |= MGf_REFCOUNTED; 13745 } 13746 callmg->mg_flags = (callmg->mg_flags &~ MGf_REQUIRE_GV) 13747 | (U8)(ckflags & MGf_REQUIRE_GV) | MGf_COPY; 13748 } 13749 } 13750 13751 static void 13752 S_entersub_alloc_targ(pTHX_ OP * const o) 13753 { 13754 o->op_targ = pad_alloc(OP_ENTERSUB, SVs_PADTMP); 13755 o->op_private |= OPpENTERSUB_HASTARG; 13756 } 13757 13758 OP * 13759 Perl_ck_subr(pTHX_ OP *o) 13760 { 13761 OP *aop, *cvop; 13762 CV *cv; 13763 GV *namegv; 13764 SV **const_class = NULL; 13765 13766 PERL_ARGS_ASSERT_CK_SUBR; 13767 13768 aop = cUNOPx(o)->op_first; 13769 if (!OpHAS_SIBLING(aop)) 13770 aop = cUNOPx(aop)->op_first; 13771 aop = OpSIBLING(aop); 13772 for (cvop = aop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ; 13773 cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY); 13774 namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_MAYBE_NAME_GV) : NULL; 13775 13776 o->op_private &= ~1; 13777 o->op_private |= (PL_hints & HINT_STRICT_REFS); 13778 if (PERLDB_SUB && PL_curstash != PL_debstash) 13779 o->op_private |= OPpENTERSUB_DB; 13780 switch (cvop->op_type) { 13781 case OP_RV2CV: 13782 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER); 13783 op_null(cvop); 13784 break; 13785 case OP_METHOD: 13786 case OP_METHOD_NAMED: 13787 case OP_METHOD_SUPER: 13788 case OP_METHOD_REDIR: 13789 case OP_METHOD_REDIR_SUPER: 13790 o->op_flags |= OPf_REF; 13791 if (aop->op_type == OP_CONST) { 13792 aop->op_private &= ~OPpCONST_STRICT; 13793 const_class = &cSVOPx(aop)->op_sv; 13794 } 13795 else if (aop->op_type == OP_LIST) { 13796 OP * const sib = OpSIBLING(((UNOP*)aop)->op_first); 13797 if (sib && sib->op_type == OP_CONST) { 13798 sib->op_private &= ~OPpCONST_STRICT; 13799 const_class = &cSVOPx(sib)->op_sv; 13800 } 13801 } 13802 /* make class name a shared cow string to speedup method calls */ 13803 /* constant string might be replaced with object, f.e. bigint */ 13804 if (const_class && SvPOK(*const_class)) { 13805 STRLEN len; 13806 const char* str = SvPV(*const_class, len); 13807 if (len) { 13808 SV* const shared = newSVpvn_share( 13809 str, SvUTF8(*const_class) 13810 ? -(SSize_t)len : (SSize_t)len, 13811 0 13812 ); 13813 if (SvREADONLY(*const_class)) 13814 SvREADONLY_on(shared); 13815 SvREFCNT_dec(*const_class); 13816 *const_class = shared; 13817 } 13818 } 13819 break; 13820 } 13821 13822 if (!cv) { 13823 S_entersub_alloc_targ(aTHX_ o); 13824 return ck_entersub_args_list(o); 13825 } else { 13826 Perl_call_checker ckfun; 13827 SV *ckobj; 13828 U32 ckflags; 13829 cv_get_call_checker_flags(cv, 0, &ckfun, &ckobj, &ckflags); 13830 if (CvISXSUB(cv) || !CvROOT(cv)) 13831 S_entersub_alloc_targ(aTHX_ o); 13832 if (!namegv) { 13833 /* The original call checker API guarantees that a GV will be 13834 be provided with the right name. So, if the old API was 13835 used (or the REQUIRE_GV flag was passed), we have to reify 13836 the CV’s GV, unless this is an anonymous sub. This is not 13837 ideal for lexical subs, as its stringification will include 13838 the package. But it is the best we can do. */ 13839 if (ckflags & CALL_CHECKER_REQUIRE_GV) { 13840 if (!CvANON(cv) && (!CvNAMED(cv) || CvNAME_HEK(cv))) 13841 namegv = CvGV(cv); 13842 } 13843 else namegv = MUTABLE_GV(cv); 13844 /* After a syntax error in a lexical sub, the cv that 13845 rv2cv_op_cv returns may be a nameless stub. */ 13846 if (!namegv) return ck_entersub_args_list(o); 13847 13848 } 13849 return ckfun(aTHX_ o, namegv, ckobj); 13850 } 13851 } 13852 13853 OP * 13854 Perl_ck_svconst(pTHX_ OP *o) 13855 { 13856 SV * const sv = cSVOPo->op_sv; 13857 PERL_ARGS_ASSERT_CK_SVCONST; 13858 PERL_UNUSED_CONTEXT; 13859 #ifdef PERL_COPY_ON_WRITE 13860 /* Since the read-only flag may be used to protect a string buffer, we 13861 cannot do copy-on-write with existing read-only scalars that are not 13862 already copy-on-write scalars. To allow $_ = "hello" to do COW with 13863 that constant, mark the constant as COWable here, if it is not 13864 already read-only. */ 13865 if (!SvREADONLY(sv) && !SvIsCOW(sv) && SvCANCOW(sv)) { 13866 SvIsCOW_on(sv); 13867 CowREFCNT(sv) = 0; 13868 # ifdef PERL_DEBUG_READONLY_COW 13869 sv_buf_to_ro(sv); 13870 # endif 13871 } 13872 #endif 13873 SvREADONLY_on(sv); 13874 return o; 13875 } 13876 13877 OP * 13878 Perl_ck_trunc(pTHX_ OP *o) 13879 { 13880 PERL_ARGS_ASSERT_CK_TRUNC; 13881 13882 if (o->op_flags & OPf_KIDS) { 13883 SVOP *kid = (SVOP*)cUNOPo->op_first; 13884 13885 if (kid->op_type == OP_NULL) 13886 kid = (SVOP*)OpSIBLING(kid); 13887 if (kid && kid->op_type == OP_CONST && 13888 (kid->op_private & OPpCONST_BARE) && 13889 !kid->op_folded) 13890 { 13891 o->op_flags |= OPf_SPECIAL; 13892 kid->op_private &= ~OPpCONST_STRICT; 13893 } 13894 } 13895 return ck_fun(o); 13896 } 13897 13898 OP * 13899 Perl_ck_substr(pTHX_ OP *o) 13900 { 13901 PERL_ARGS_ASSERT_CK_SUBSTR; 13902 13903 o = ck_fun(o); 13904 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) { 13905 OP *kid = cLISTOPo->op_first; 13906 13907 if (kid->op_type == OP_NULL) 13908 kid = OpSIBLING(kid); 13909 if (kid) 13910 /* Historically, substr(delete $foo{bar},...) has been allowed 13911 with 4-arg substr. Keep it working by applying entersub 13912 lvalue context. */ 13913 op_lvalue(kid, OP_ENTERSUB); 13914 13915 } 13916 return o; 13917 } 13918 13919 OP * 13920 Perl_ck_tell(pTHX_ OP *o) 13921 { 13922 PERL_ARGS_ASSERT_CK_TELL; 13923 o = ck_fun(o); 13924 if (o->op_flags & OPf_KIDS) { 13925 OP *kid = cLISTOPo->op_first; 13926 if (kid->op_type == OP_NULL && OpHAS_SIBLING(kid)) kid = OpSIBLING(kid); 13927 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE; 13928 } 13929 return o; 13930 } 13931 13932 OP * 13933 Perl_ck_each(pTHX_ OP *o) 13934 { 13935 dVAR; 13936 OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL; 13937 const unsigned orig_type = o->op_type; 13938 13939 PERL_ARGS_ASSERT_CK_EACH; 13940 13941 if (kid) { 13942 switch (kid->op_type) { 13943 case OP_PADHV: 13944 case OP_RV2HV: 13945 break; 13946 case OP_PADAV: 13947 case OP_RV2AV: 13948 OpTYPE_set(o, orig_type == OP_EACH ? OP_AEACH 13949 : orig_type == OP_KEYS ? OP_AKEYS 13950 : OP_AVALUES); 13951 break; 13952 case OP_CONST: 13953 if (kid->op_private == OPpCONST_BARE 13954 || !SvROK(cSVOPx_sv(kid)) 13955 || ( SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV 13956 && SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVHV ) 13957 ) 13958 goto bad; 13959 /* FALLTHROUGH */ 13960 default: 13961 qerror(Perl_mess(aTHX_ 13962 "Experimental %s on scalar is now forbidden", 13963 PL_op_desc[orig_type])); 13964 bad: 13965 bad_type_pv(1, "hash or array", o, kid); 13966 return o; 13967 } 13968 } 13969 return ck_fun(o); 13970 } 13971 13972 OP * 13973 Perl_ck_length(pTHX_ OP *o) 13974 { 13975 PERL_ARGS_ASSERT_CK_LENGTH; 13976 13977 o = ck_fun(o); 13978 13979 if (ckWARN(WARN_SYNTAX)) { 13980 const OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL; 13981 13982 if (kid) { 13983 SV *name = NULL; 13984 const bool hash = kid->op_type == OP_PADHV 13985 || kid->op_type == OP_RV2HV; 13986 switch (kid->op_type) { 13987 case OP_PADHV: 13988 case OP_PADAV: 13989 case OP_RV2HV: 13990 case OP_RV2AV: 13991 name = S_op_varname(aTHX_ kid); 13992 break; 13993 default: 13994 return o; 13995 } 13996 if (name) 13997 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), 13998 "length() used on %" SVf " (did you mean \"scalar(%s%" SVf 13999 ")\"?)", 14000 SVfARG(name), hash ? "keys " : "", SVfARG(name) 14001 ); 14002 else if (hash) 14003 /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */ 14004 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), 14005 "length() used on %%hash (did you mean \"scalar(keys %%hash)\"?)"); 14006 else 14007 /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */ 14008 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), 14009 "length() used on @array (did you mean \"scalar(@array)\"?)"); 14010 } 14011 } 14012 14013 return o; 14014 } 14015 14016 14017 14018 /* 14019 --------------------------------------------------------- 14020 14021 Common vars in list assignment 14022 14023 There now follows some enums and static functions for detecting 14024 common variables in list assignments. Here is a little essay I wrote 14025 for myself when trying to get my head around this. DAPM. 14026 14027 ---- 14028 14029 First some random observations: 14030 14031 * If a lexical var is an alias of something else, e.g. 14032 for my $x ($lex, $pkg, $a[0]) {...} 14033 then the act of aliasing will increase the reference count of the SV 14034 14035 * If a package var is an alias of something else, it may still have a 14036 reference count of 1, depending on how the alias was created, e.g. 14037 in *a = *b, $a may have a refcount of 1 since the GP is shared 14038 with a single GvSV pointer to the SV. So If it's an alias of another 14039 package var, then RC may be 1; if it's an alias of another scalar, e.g. 14040 a lexical var or an array element, then it will have RC > 1. 14041 14042 * There are many ways to create a package alias; ultimately, XS code 14043 may quite legally do GvSV(gv) = SvREFCNT_inc(sv) for example, so 14044 run-time tracing mechanisms are unlikely to be able to catch all cases. 14045 14046 * When the LHS is all my declarations, the same vars can't appear directly 14047 on the RHS, but they can indirectly via closures, aliasing and lvalue 14048 subs. But those techniques all involve an increase in the lexical 14049 scalar's ref count. 14050 14051 * When the LHS is all lexical vars (but not necessarily my declarations), 14052 it is possible for the same lexicals to appear directly on the RHS, and 14053 without an increased ref count, since the stack isn't refcounted. 14054 This case can be detected at compile time by scanning for common lex 14055 vars with PL_generation. 14056 14057 * lvalue subs defeat common var detection, but they do at least 14058 return vars with a temporary ref count increment. Also, you can't 14059 tell at compile time whether a sub call is lvalue. 14060 14061 14062 So... 14063 14064 A: There are a few circumstances where there definitely can't be any 14065 commonality: 14066 14067 LHS empty: () = (...); 14068 RHS empty: (....) = (); 14069 RHS contains only constants or other 'can't possibly be shared' 14070 elements (e.g. ops that return PADTMPs): (...) = (1,2, length) 14071 i.e. they only contain ops not marked as dangerous, whose children 14072 are also not dangerous; 14073 LHS ditto; 14074 LHS contains a single scalar element: e.g. ($x) = (....); because 14075 after $x has been modified, it won't be used again on the RHS; 14076 RHS contains a single element with no aggregate on LHS: e.g. 14077 ($a,$b,$c) = ($x); again, once $a has been modified, its value 14078 won't be used again. 14079 14080 B: If LHS are all 'my' lexical var declarations (or safe ops, which 14081 we can ignore): 14082 14083 my ($a, $b, @c) = ...; 14084 14085 Due to closure and goto tricks, these vars may already have content. 14086 For the same reason, an element on the RHS may be a lexical or package 14087 alias of one of the vars on the left, or share common elements, for 14088 example: 14089 14090 my ($x,$y) = f(); # $x and $y on both sides 14091 sub f : lvalue { ($x,$y) = (1,2); $y, $x } 14092 14093 and 14094 14095 my $ra = f(); 14096 my @a = @$ra; # elements of @a on both sides 14097 sub f { @a = 1..4; \@a } 14098 14099 14100 First, just consider scalar vars on LHS: 14101 14102 RHS is safe only if (A), or in addition, 14103 * contains only lexical *scalar* vars, where neither side's 14104 lexicals have been flagged as aliases 14105 14106 If RHS is not safe, then it's always legal to check LHS vars for 14107 RC==1, since the only RHS aliases will always be associated 14108 with an RC bump. 14109 14110 Note that in particular, RHS is not safe if: 14111 14112 * it contains package scalar vars; e.g.: 14113 14114 f(); 14115 my ($x, $y) = (2, $x_alias); 14116 sub f { $x = 1; *x_alias = \$x; } 14117 14118 * It contains other general elements, such as flattened or 14119 * spliced or single array or hash elements, e.g. 14120 14121 f(); 14122 my ($x,$y) = @a; # or $a[0] or @a{@b} etc 14123 14124 sub f { 14125 ($x, $y) = (1,2); 14126 use feature 'refaliasing'; 14127 \($a[0], $a[1]) = \($y,$x); 14128 } 14129 14130 It doesn't matter if the array/hash is lexical or package. 14131 14132 * it contains a function call that happens to be an lvalue 14133 sub which returns one or more of the above, e.g. 14134 14135 f(); 14136 my ($x,$y) = f(); 14137 14138 sub f : lvalue { 14139 ($x, $y) = (1,2); 14140 *x1 = \$x; 14141 $y, $x1; 14142 } 14143 14144 (so a sub call on the RHS should be treated the same 14145 as having a package var on the RHS). 14146 14147 * any other "dangerous" thing, such an op or built-in that 14148 returns one of the above, e.g. pp_preinc 14149 14150 14151 If RHS is not safe, what we can do however is at compile time flag 14152 that the LHS are all my declarations, and at run time check whether 14153 all the LHS have RC == 1, and if so skip the full scan. 14154 14155 Now consider array and hash vars on LHS: e.g. my (...,@a) = ...; 14156 14157 Here the issue is whether there can be elements of @a on the RHS 14158 which will get prematurely freed when @a is cleared prior to 14159 assignment. This is only a problem if the aliasing mechanism 14160 is one which doesn't increase the refcount - only if RC == 1 14161 will the RHS element be prematurely freed. 14162 14163 Because the array/hash is being INTROed, it or its elements 14164 can't directly appear on the RHS: 14165 14166 my (@a) = ($a[0], @a, etc) # NOT POSSIBLE 14167 14168 but can indirectly, e.g.: 14169 14170 my $r = f(); 14171 my (@a) = @$r; 14172 sub f { @a = 1..3; \@a } 14173 14174 So if the RHS isn't safe as defined by (A), we must always 14175 mortalise and bump the ref count of any remaining RHS elements 14176 when assigning to a non-empty LHS aggregate. 14177 14178 Lexical scalars on the RHS aren't safe if they've been involved in 14179 aliasing, e.g. 14180 14181 use feature 'refaliasing'; 14182 14183 f(); 14184 \(my $lex) = \$pkg; 14185 my @a = ($lex,3); # equivalent to ($a[0],3) 14186 14187 sub f { 14188 @a = (1,2); 14189 \$pkg = \$a[0]; 14190 } 14191 14192 Similarly with lexical arrays and hashes on the RHS: 14193 14194 f(); 14195 my @b; 14196 my @a = (@b); 14197 14198 sub f { 14199 @a = (1,2); 14200 \$b[0] = \$a[1]; 14201 \$b[1] = \$a[0]; 14202 } 14203 14204 14205 14206 C: As (B), but in addition the LHS may contain non-intro lexicals, e.g. 14207 my $a; ($a, my $b) = (....); 14208 14209 The difference between (B) and (C) is that it is now physically 14210 possible for the LHS vars to appear on the RHS too, where they 14211 are not reference counted; but in this case, the compile-time 14212 PL_generation sweep will detect such common vars. 14213 14214 So the rules for (C) differ from (B) in that if common vars are 14215 detected, the runtime "test RC==1" optimisation can no longer be used, 14216 and a full mark and sweep is required 14217 14218 D: As (C), but in addition the LHS may contain package vars. 14219 14220 Since package vars can be aliased without a corresponding refcount 14221 increase, all bets are off. It's only safe if (A). E.g. 14222 14223 my ($x, $y) = (1,2); 14224 14225 for $x_alias ($x) { 14226 ($x_alias, $y) = (3, $x); # whoops 14227 } 14228 14229 Ditto for LHS aggregate package vars. 14230 14231 E: Any other dangerous ops on LHS, e.g. 14232 (f(), $a[0], @$r) = (...); 14233 14234 this is similar to (E) in that all bets are off. In addition, it's 14235 impossible to determine at compile time whether the LHS 14236 contains a scalar or an aggregate, e.g. 14237 14238 sub f : lvalue { @a } 14239 (f()) = 1..3; 14240 14241 * --------------------------------------------------------- 14242 */ 14243 14244 14245 /* A set of bit flags returned by S_aassign_scan(). Each flag indicates 14246 * that at least one of the things flagged was seen. 14247 */ 14248 14249 enum { 14250 AAS_MY_SCALAR = 0x001, /* my $scalar */ 14251 AAS_MY_AGG = 0x002, /* aggregate: my @array or my %hash */ 14252 AAS_LEX_SCALAR = 0x004, /* $lexical */ 14253 AAS_LEX_AGG = 0x008, /* @lexical or %lexical aggregate */ 14254 AAS_LEX_SCALAR_COMM = 0x010, /* $lexical seen on both sides */ 14255 AAS_PKG_SCALAR = 0x020, /* $scalar (where $scalar is pkg var) */ 14256 AAS_PKG_AGG = 0x040, /* package @array or %hash aggregate */ 14257 AAS_DANGEROUS = 0x080, /* an op (other than the above) 14258 that's flagged OA_DANGEROUS */ 14259 AAS_SAFE_SCALAR = 0x100, /* produces at least one scalar SV that's 14260 not in any of the categories above */ 14261 AAS_DEFAV = 0x200 /* contains just a single '@_' on RHS */ 14262 }; 14263 14264 14265 14266 /* helper function for S_aassign_scan(). 14267 * check a PAD-related op for commonality and/or set its generation number. 14268 * Returns a boolean indicating whether its shared */ 14269 14270 static bool 14271 S_aassign_padcheck(pTHX_ OP* o, bool rhs) 14272 { 14273 if (PAD_COMPNAME_GEN(o->op_targ) == PERL_INT_MAX) 14274 /* lexical used in aliasing */ 14275 return TRUE; 14276 14277 if (rhs) 14278 return cBOOL(PAD_COMPNAME_GEN(o->op_targ) == (STRLEN)PL_generation); 14279 else 14280 PAD_COMPNAME_GEN_set(o->op_targ, PL_generation); 14281 14282 return FALSE; 14283 } 14284 14285 14286 /* 14287 Helper function for OPpASSIGN_COMMON* detection in rpeep(). 14288 It scans the left or right hand subtree of the aassign op, and returns a 14289 set of flags indicating what sorts of things it found there. 14290 'rhs' indicates whether we're scanning the LHS or RHS. If the former, we 14291 set PL_generation on lexical vars; if the latter, we see if 14292 PL_generation matches. 14293 'top' indicates whether we're recursing or at the top level. 14294 'scalars_p' is a pointer to a counter of the number of scalar SVs seen. 14295 This fn will increment it by the number seen. It's not intended to 14296 be an accurate count (especially as many ops can push a variable 14297 number of SVs onto the stack); rather it's used as to test whether there 14298 can be at most 1 SV pushed; so it's only meanings are "0, 1, many". 14299 */ 14300 14301 static int 14302 S_aassign_scan(pTHX_ OP* o, bool rhs, bool top, int *scalars_p) 14303 { 14304 int flags = 0; 14305 bool kid_top = FALSE; 14306 14307 /* first, look for a solitary @_ on the RHS */ 14308 if ( rhs 14309 && top 14310 && (o->op_flags & OPf_KIDS) 14311 && OP_TYPE_IS_OR_WAS(o, OP_LIST) 14312 ) { 14313 OP *kid = cUNOPo->op_first; 14314 if ( ( kid->op_type == OP_PUSHMARK 14315 || kid->op_type == OP_PADRANGE) /* ex-pushmark */ 14316 && ((kid = OpSIBLING(kid))) 14317 && !OpHAS_SIBLING(kid) 14318 && kid->op_type == OP_RV2AV 14319 && !(kid->op_flags & OPf_REF) 14320 && !(kid->op_private & (OPpLVAL_INTRO|OPpMAYBE_LVSUB)) 14321 && ((kid->op_flags & OPf_WANT) == OPf_WANT_LIST) 14322 && ((kid = cUNOPx(kid)->op_first)) 14323 && kid->op_type == OP_GV 14324 && cGVOPx_gv(kid) == PL_defgv 14325 ) 14326 flags |= AAS_DEFAV; 14327 } 14328 14329 switch (o->op_type) { 14330 case OP_GVSV: 14331 (*scalars_p)++; 14332 return AAS_PKG_SCALAR; 14333 14334 case OP_PADAV: 14335 case OP_PADHV: 14336 (*scalars_p) += 2; 14337 /* if !top, could be e.g. @a[0,1] */ 14338 if (top && (o->op_flags & OPf_REF)) 14339 return (o->op_private & OPpLVAL_INTRO) 14340 ? AAS_MY_AGG : AAS_LEX_AGG; 14341 return AAS_DANGEROUS; 14342 14343 case OP_PADSV: 14344 { 14345 int comm = S_aassign_padcheck(aTHX_ o, rhs) 14346 ? AAS_LEX_SCALAR_COMM : 0; 14347 (*scalars_p)++; 14348 return (o->op_private & OPpLVAL_INTRO) 14349 ? (AAS_MY_SCALAR|comm) : (AAS_LEX_SCALAR|comm); 14350 } 14351 14352 case OP_RV2AV: 14353 case OP_RV2HV: 14354 (*scalars_p) += 2; 14355 if (cUNOPx(o)->op_first->op_type != OP_GV) 14356 return AAS_DANGEROUS; /* @{expr}, %{expr} */ 14357 /* @pkg, %pkg */ 14358 /* if !top, could be e.g. @a[0,1] */ 14359 if (top && (o->op_flags & OPf_REF)) 14360 return AAS_PKG_AGG; 14361 return AAS_DANGEROUS; 14362 14363 case OP_RV2SV: 14364 (*scalars_p)++; 14365 if (cUNOPx(o)->op_first->op_type != OP_GV) { 14366 (*scalars_p) += 2; 14367 return AAS_DANGEROUS; /* ${expr} */ 14368 } 14369 return AAS_PKG_SCALAR; /* $pkg */ 14370 14371 case OP_SPLIT: 14372 if (o->op_private & OPpSPLIT_ASSIGN) { 14373 /* the assign in @a = split() has been optimised away 14374 * and the @a attached directly to the split op 14375 * Treat the array as appearing on the RHS, i.e. 14376 * ... = (@a = split) 14377 * is treated like 14378 * ... = @a; 14379 */ 14380 14381 if (o->op_flags & OPf_STACKED) 14382 /* @{expr} = split() - the array expression is tacked 14383 * on as an extra child to split - process kid */ 14384 return S_aassign_scan(aTHX_ cLISTOPo->op_last, rhs, 14385 top, scalars_p); 14386 14387 /* ... else array is directly attached to split op */ 14388 (*scalars_p) += 2; 14389 if (PL_op->op_private & OPpSPLIT_LEX) 14390 return (o->op_private & OPpLVAL_INTRO) 14391 ? AAS_MY_AGG : AAS_LEX_AGG; 14392 else 14393 return AAS_PKG_AGG; 14394 } 14395 (*scalars_p)++; 14396 /* other args of split can't be returned */ 14397 return AAS_SAFE_SCALAR; 14398 14399 case OP_UNDEF: 14400 /* undef counts as a scalar on the RHS: 14401 * (undef, $x) = ...; # only 1 scalar on LHS: always safe 14402 * ($x, $y) = (undef, $x); # 2 scalars on RHS: unsafe 14403 */ 14404 if (rhs) 14405 (*scalars_p)++; 14406 flags = AAS_SAFE_SCALAR; 14407 break; 14408 14409 case OP_PUSHMARK: 14410 case OP_STUB: 14411 /* these are all no-ops; they don't push a potentially common SV 14412 * onto the stack, so they are neither AAS_DANGEROUS nor 14413 * AAS_SAFE_SCALAR */ 14414 return 0; 14415 14416 case OP_PADRANGE: /* Ignore padrange; checking its siblings is enough */ 14417 break; 14418 14419 case OP_NULL: 14420 case OP_LIST: 14421 /* these do nothing but may have children; but their children 14422 * should also be treated as top-level */ 14423 kid_top = top; 14424 break; 14425 14426 default: 14427 if (PL_opargs[o->op_type] & OA_DANGEROUS) { 14428 (*scalars_p) += 2; 14429 flags = AAS_DANGEROUS; 14430 break; 14431 } 14432 14433 if ( (PL_opargs[o->op_type] & OA_TARGLEX) 14434 && (o->op_private & OPpTARGET_MY)) 14435 { 14436 (*scalars_p)++; 14437 return S_aassign_padcheck(aTHX_ o, rhs) 14438 ? AAS_LEX_SCALAR_COMM : AAS_LEX_SCALAR; 14439 } 14440 14441 /* if its an unrecognised, non-dangerous op, assume that it 14442 * it the cause of at least one safe scalar */ 14443 (*scalars_p)++; 14444 flags = AAS_SAFE_SCALAR; 14445 break; 14446 } 14447 14448 /* XXX this assumes that all other ops are "transparent" - i.e. that 14449 * they can return some of their children. While this true for e.g. 14450 * sort and grep, it's not true for e.g. map. We really need a 14451 * 'transparent' flag added to regen/opcodes 14452 */ 14453 if (o->op_flags & OPf_KIDS) { 14454 OP *kid; 14455 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) 14456 flags |= S_aassign_scan(aTHX_ kid, rhs, kid_top, scalars_p); 14457 } 14458 return flags; 14459 } 14460 14461 14462 /* Check for in place reverse and sort assignments like "@a = reverse @a" 14463 and modify the optree to make them work inplace */ 14464 14465 STATIC void 14466 S_inplace_aassign(pTHX_ OP *o) { 14467 14468 OP *modop, *modop_pushmark; 14469 OP *oright; 14470 OP *oleft, *oleft_pushmark; 14471 14472 PERL_ARGS_ASSERT_INPLACE_AASSIGN; 14473 14474 assert((o->op_flags & OPf_WANT) == OPf_WANT_VOID); 14475 14476 assert(cUNOPo->op_first->op_type == OP_NULL); 14477 modop_pushmark = cUNOPx(cUNOPo->op_first)->op_first; 14478 assert(modop_pushmark->op_type == OP_PUSHMARK); 14479 modop = OpSIBLING(modop_pushmark); 14480 14481 if (modop->op_type != OP_SORT && modop->op_type != OP_REVERSE) 14482 return; 14483 14484 /* no other operation except sort/reverse */ 14485 if (OpHAS_SIBLING(modop)) 14486 return; 14487 14488 assert(cUNOPx(modop)->op_first->op_type == OP_PUSHMARK); 14489 if (!(oright = OpSIBLING(cUNOPx(modop)->op_first))) return; 14490 14491 if (modop->op_flags & OPf_STACKED) { 14492 /* skip sort subroutine/block */ 14493 assert(oright->op_type == OP_NULL); 14494 oright = OpSIBLING(oright); 14495 } 14496 14497 assert(OpSIBLING(cUNOPo->op_first)->op_type == OP_NULL); 14498 oleft_pushmark = cUNOPx(OpSIBLING(cUNOPo->op_first))->op_first; 14499 assert(oleft_pushmark->op_type == OP_PUSHMARK); 14500 oleft = OpSIBLING(oleft_pushmark); 14501 14502 /* Check the lhs is an array */ 14503 if (!oleft || 14504 (oleft->op_type != OP_RV2AV && oleft->op_type != OP_PADAV) 14505 || OpHAS_SIBLING(oleft) 14506 || (oleft->op_private & OPpLVAL_INTRO) 14507 ) 14508 return; 14509 14510 /* Only one thing on the rhs */ 14511 if (OpHAS_SIBLING(oright)) 14512 return; 14513 14514 /* check the array is the same on both sides */ 14515 if (oleft->op_type == OP_RV2AV) { 14516 if (oright->op_type != OP_RV2AV 14517 || !cUNOPx(oright)->op_first 14518 || cUNOPx(oright)->op_first->op_type != OP_GV 14519 || cUNOPx(oleft )->op_first->op_type != OP_GV 14520 || cGVOPx_gv(cUNOPx(oleft)->op_first) != 14521 cGVOPx_gv(cUNOPx(oright)->op_first) 14522 ) 14523 return; 14524 } 14525 else if (oright->op_type != OP_PADAV 14526 || oright->op_targ != oleft->op_targ 14527 ) 14528 return; 14529 14530 /* This actually is an inplace assignment */ 14531 14532 modop->op_private |= OPpSORT_INPLACE; 14533 14534 /* transfer MODishness etc from LHS arg to RHS arg */ 14535 oright->op_flags = oleft->op_flags; 14536 14537 /* remove the aassign op and the lhs */ 14538 op_null(o); 14539 op_null(oleft_pushmark); 14540 if (oleft->op_type == OP_RV2AV && cUNOPx(oleft)->op_first) 14541 op_null(cUNOPx(oleft)->op_first); 14542 op_null(oleft); 14543 } 14544 14545 14546 14547 /* S_maybe_multideref(): given an op_next chain of ops beginning at 'start' 14548 * that potentially represent a series of one or more aggregate derefs 14549 * (such as $a->[1]{$key}), examine the chain, and if appropriate, convert 14550 * the whole chain to a single OP_MULTIDEREF op (maybe with a few 14551 * additional ops left in too). 14552 * 14553 * The caller will have already verified that the first few ops in the 14554 * chain following 'start' indicate a multideref candidate, and will have 14555 * set 'orig_o' to the point further on in the chain where the first index 14556 * expression (if any) begins. 'orig_action' specifies what type of 14557 * beginning has already been determined by the ops between start..orig_o 14558 * (e.g. $lex_ary[], $pkg_ary->{}, expr->[], etc). 14559 * 14560 * 'hints' contains any hints flags that need adding (currently just 14561 * OPpHINT_STRICT_REFS) as found in any rv2av/hv skipped by the caller. 14562 */ 14563 14564 STATIC void 14565 S_maybe_multideref(pTHX_ OP *start, OP *orig_o, UV orig_action, U8 hints) 14566 { 14567 dVAR; 14568 int pass; 14569 UNOP_AUX_item *arg_buf = NULL; 14570 bool reset_start_targ = FALSE; /* start->op_targ needs zeroing */ 14571 int index_skip = -1; /* don't output index arg on this action */ 14572 14573 /* similar to regex compiling, do two passes; the first pass 14574 * determines whether the op chain is convertible and calculates the 14575 * buffer size; the second pass populates the buffer and makes any 14576 * changes necessary to ops (such as moving consts to the pad on 14577 * threaded builds). 14578 * 14579 * NB: for things like Coverity, note that both passes take the same 14580 * path through the logic tree (except for 'if (pass)' bits), since 14581 * both passes are following the same op_next chain; and in 14582 * particular, if it would return early on the second pass, it would 14583 * already have returned early on the first pass. 14584 */ 14585 for (pass = 0; pass < 2; pass++) { 14586 OP *o = orig_o; 14587 UV action = orig_action; 14588 OP *first_elem_op = NULL; /* first seen aelem/helem */ 14589 OP *top_op = NULL; /* highest [ah]elem/exists/del/rv2[ah]v */ 14590 int action_count = 0; /* number of actions seen so far */ 14591 int action_ix = 0; /* action_count % (actions per IV) */ 14592 bool next_is_hash = FALSE; /* is the next lookup to be a hash? */ 14593 bool is_last = FALSE; /* no more derefs to follow */ 14594 bool maybe_aelemfast = FALSE; /* we can replace with aelemfast? */ 14595 UNOP_AUX_item *arg = arg_buf; 14596 UNOP_AUX_item *action_ptr = arg_buf; 14597 14598 if (pass) 14599 action_ptr->uv = 0; 14600 arg++; 14601 14602 switch (action) { 14603 case MDEREF_HV_gvsv_vivify_rv2hv_helem: 14604 case MDEREF_HV_gvhv_helem: 14605 next_is_hash = TRUE; 14606 /* FALLTHROUGH */ 14607 case MDEREF_AV_gvsv_vivify_rv2av_aelem: 14608 case MDEREF_AV_gvav_aelem: 14609 if (pass) { 14610 #ifdef USE_ITHREADS 14611 arg->pad_offset = cPADOPx(start)->op_padix; 14612 /* stop it being swiped when nulled */ 14613 cPADOPx(start)->op_padix = 0; 14614 #else 14615 arg->sv = cSVOPx(start)->op_sv; 14616 cSVOPx(start)->op_sv = NULL; 14617 #endif 14618 } 14619 arg++; 14620 break; 14621 14622 case MDEREF_HV_padhv_helem: 14623 case MDEREF_HV_padsv_vivify_rv2hv_helem: 14624 next_is_hash = TRUE; 14625 /* FALLTHROUGH */ 14626 case MDEREF_AV_padav_aelem: 14627 case MDEREF_AV_padsv_vivify_rv2av_aelem: 14628 if (pass) { 14629 arg->pad_offset = start->op_targ; 14630 /* we skip setting op_targ = 0 for now, since the intact 14631 * OP_PADXV is needed by S_check_hash_fields_and_hekify */ 14632 reset_start_targ = TRUE; 14633 } 14634 arg++; 14635 break; 14636 14637 case MDEREF_HV_pop_rv2hv_helem: 14638 next_is_hash = TRUE; 14639 /* FALLTHROUGH */ 14640 case MDEREF_AV_pop_rv2av_aelem: 14641 break; 14642 14643 default: 14644 NOT_REACHED; /* NOTREACHED */ 14645 return; 14646 } 14647 14648 while (!is_last) { 14649 /* look for another (rv2av/hv; get index; 14650 * aelem/helem/exists/delele) sequence */ 14651 14652 OP *kid; 14653 bool is_deref; 14654 bool ok; 14655 UV index_type = MDEREF_INDEX_none; 14656 14657 if (action_count) { 14658 /* if this is not the first lookup, consume the rv2av/hv */ 14659 14660 /* for N levels of aggregate lookup, we normally expect 14661 * that the first N-1 [ah]elem ops will be flagged as 14662 * /DEREF (so they autovivifiy if necessary), and the last 14663 * lookup op not to be. 14664 * For other things (like @{$h{k1}{k2}}) extra scope or 14665 * leave ops can appear, so abandon the effort in that 14666 * case */ 14667 if (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV) 14668 return; 14669 14670 /* rv2av or rv2hv sKR/1 */ 14671 14672 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS 14673 |OPf_REF|OPf_MOD|OPf_SPECIAL))); 14674 if (o->op_flags != (OPf_WANT_SCALAR|OPf_KIDS|OPf_REF)) 14675 return; 14676 14677 /* at this point, we wouldn't expect any of these 14678 * possible private flags: 14679 * OPpMAYBE_LVSUB, OPpOUR_INTRO, OPpLVAL_INTRO 14680 * OPpTRUEBOOL, OPpMAYBE_TRUEBOOL (rv2hv only) 14681 */ 14682 ASSUME(!(o->op_private & 14683 ~(OPpHINT_STRICT_REFS|OPpARG1_MASK|OPpSLICEWARNING))); 14684 14685 hints = (o->op_private & OPpHINT_STRICT_REFS); 14686 14687 /* make sure the type of the previous /DEREF matches the 14688 * type of the next lookup */ 14689 ASSUME(o->op_type == (next_is_hash ? OP_RV2HV : OP_RV2AV)); 14690 top_op = o; 14691 14692 action = next_is_hash 14693 ? MDEREF_HV_vivify_rv2hv_helem 14694 : MDEREF_AV_vivify_rv2av_aelem; 14695 o = o->op_next; 14696 } 14697 14698 /* if this is the second pass, and we're at the depth where 14699 * previously we encountered a non-simple index expression, 14700 * stop processing the index at this point */ 14701 if (action_count != index_skip) { 14702 14703 /* look for one or more simple ops that return an array 14704 * index or hash key */ 14705 14706 switch (o->op_type) { 14707 case OP_PADSV: 14708 /* it may be a lexical var index */ 14709 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_PARENS 14710 |OPf_REF|OPf_MOD|OPf_SPECIAL))); 14711 ASSUME(!(o->op_private & 14712 ~(OPpPAD_STATE|OPpDEREF|OPpLVAL_INTRO))); 14713 14714 if ( OP_GIMME(o,0) == G_SCALAR 14715 && !(o->op_flags & (OPf_REF|OPf_MOD)) 14716 && o->op_private == 0) 14717 { 14718 if (pass) 14719 arg->pad_offset = o->op_targ; 14720 arg++; 14721 index_type = MDEREF_INDEX_padsv; 14722 o = o->op_next; 14723 } 14724 break; 14725 14726 case OP_CONST: 14727 if (next_is_hash) { 14728 /* it's a constant hash index */ 14729 if (!(SvFLAGS(cSVOPo_sv) & (SVf_IOK|SVf_NOK|SVf_POK))) 14730 /* "use constant foo => FOO; $h{+foo}" for 14731 * some weird FOO, can leave you with constants 14732 * that aren't simple strings. It's not worth 14733 * the extra hassle for those edge cases */ 14734 break; 14735 14736 { 14737 UNOP *rop = NULL; 14738 OP * helem_op = o->op_next; 14739 14740 ASSUME( helem_op->op_type == OP_HELEM 14741 || helem_op->op_type == OP_NULL 14742 || pass == 0); 14743 if (helem_op->op_type == OP_HELEM) { 14744 rop = (UNOP*)(((BINOP*)helem_op)->op_first); 14745 if ( helem_op->op_private & OPpLVAL_INTRO 14746 || rop->op_type != OP_RV2HV 14747 ) 14748 rop = NULL; 14749 } 14750 /* on first pass just check; on second pass 14751 * hekify */ 14752 S_check_hash_fields_and_hekify(aTHX_ rop, cSVOPo, 14753 pass); 14754 } 14755 14756 if (pass) { 14757 #ifdef USE_ITHREADS 14758 /* Relocate sv to the pad for thread safety */ 14759 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ); 14760 arg->pad_offset = o->op_targ; 14761 o->op_targ = 0; 14762 #else 14763 arg->sv = cSVOPx_sv(o); 14764 #endif 14765 } 14766 } 14767 else { 14768 /* it's a constant array index */ 14769 IV iv; 14770 SV *ix_sv = cSVOPo->op_sv; 14771 if (!SvIOK(ix_sv)) 14772 break; 14773 iv = SvIV(ix_sv); 14774 14775 if ( action_count == 0 14776 && iv >= -128 14777 && iv <= 127 14778 && ( action == MDEREF_AV_padav_aelem 14779 || action == MDEREF_AV_gvav_aelem) 14780 ) 14781 maybe_aelemfast = TRUE; 14782 14783 if (pass) { 14784 arg->iv = iv; 14785 SvREFCNT_dec_NN(cSVOPo->op_sv); 14786 } 14787 } 14788 if (pass) 14789 /* we've taken ownership of the SV */ 14790 cSVOPo->op_sv = NULL; 14791 arg++; 14792 index_type = MDEREF_INDEX_const; 14793 o = o->op_next; 14794 break; 14795 14796 case OP_GV: 14797 /* it may be a package var index */ 14798 14799 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_PARENS|OPf_SPECIAL))); 14800 ASSUME(!(o->op_private & ~(OPpEARLY_CV))); 14801 if ( (o->op_flags & ~(OPf_PARENS|OPf_SPECIAL)) != OPf_WANT_SCALAR 14802 || o->op_private != 0 14803 ) 14804 break; 14805 14806 kid = o->op_next; 14807 if (kid->op_type != OP_RV2SV) 14808 break; 14809 14810 ASSUME(!(kid->op_flags & 14811 ~(OPf_WANT|OPf_KIDS|OPf_MOD|OPf_REF 14812 |OPf_SPECIAL|OPf_PARENS))); 14813 ASSUME(!(kid->op_private & 14814 ~(OPpARG1_MASK 14815 |OPpHINT_STRICT_REFS|OPpOUR_INTRO 14816 |OPpDEREF|OPpLVAL_INTRO))); 14817 if( (kid->op_flags &~ OPf_PARENS) 14818 != (OPf_WANT_SCALAR|OPf_KIDS) 14819 || (kid->op_private & ~(OPpARG1_MASK|HINT_STRICT_REFS)) 14820 ) 14821 break; 14822 14823 if (pass) { 14824 #ifdef USE_ITHREADS 14825 arg->pad_offset = cPADOPx(o)->op_padix; 14826 /* stop it being swiped when nulled */ 14827 cPADOPx(o)->op_padix = 0; 14828 #else 14829 arg->sv = cSVOPx(o)->op_sv; 14830 cSVOPo->op_sv = NULL; 14831 #endif 14832 } 14833 arg++; 14834 index_type = MDEREF_INDEX_gvsv; 14835 o = kid->op_next; 14836 break; 14837 14838 } /* switch */ 14839 } /* action_count != index_skip */ 14840 14841 action |= index_type; 14842 14843 14844 /* at this point we have either: 14845 * * detected what looks like a simple index expression, 14846 * and expect the next op to be an [ah]elem, or 14847 * an nulled [ah]elem followed by a delete or exists; 14848 * * found a more complex expression, so something other 14849 * than the above follows. 14850 */ 14851 14852 /* possibly an optimised away [ah]elem (where op_next is 14853 * exists or delete) */ 14854 if (o->op_type == OP_NULL) 14855 o = o->op_next; 14856 14857 /* at this point we're looking for an OP_AELEM, OP_HELEM, 14858 * OP_EXISTS or OP_DELETE */ 14859 14860 /* if a custom array/hash access checker is in scope, 14861 * abandon optimisation attempt */ 14862 if ( (o->op_type == OP_AELEM || o->op_type == OP_HELEM) 14863 && PL_check[o->op_type] != Perl_ck_null) 14864 return; 14865 /* similarly for customised exists and delete */ 14866 if ( (o->op_type == OP_EXISTS) 14867 && PL_check[o->op_type] != Perl_ck_exists) 14868 return; 14869 if ( (o->op_type == OP_DELETE) 14870 && PL_check[o->op_type] != Perl_ck_delete) 14871 return; 14872 14873 if ( o->op_type != OP_AELEM 14874 || (o->op_private & 14875 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) 14876 ) 14877 maybe_aelemfast = FALSE; 14878 14879 /* look for aelem/helem/exists/delete. If it's not the last elem 14880 * lookup, it *must* have OPpDEREF_AV/HV, but not many other 14881 * flags; if it's the last, then it mustn't have 14882 * OPpDEREF_AV/HV, but may have lots of other flags, like 14883 * OPpLVAL_INTRO etc 14884 */ 14885 14886 if ( index_type == MDEREF_INDEX_none 14887 || ( o->op_type != OP_AELEM && o->op_type != OP_HELEM 14888 && o->op_type != OP_EXISTS && o->op_type != OP_DELETE) 14889 ) 14890 ok = FALSE; 14891 else { 14892 /* we have aelem/helem/exists/delete with valid simple index */ 14893 14894 is_deref = (o->op_type == OP_AELEM || o->op_type == OP_HELEM) 14895 && ( (o->op_private & OPpDEREF) == OPpDEREF_AV 14896 || (o->op_private & OPpDEREF) == OPpDEREF_HV); 14897 14898 /* This doesn't make much sense but is legal: 14899 * @{ local $x[0][0] } = 1 14900 * Since scope exit will undo the autovivification, 14901 * don't bother in the first place. The OP_LEAVE 14902 * assertion is in case there are other cases of both 14903 * OPpLVAL_INTRO and OPpDEREF which don't include a scope 14904 * exit that would undo the local - in which case this 14905 * block of code would need rethinking. 14906 */ 14907 if (is_deref && (o->op_private & OPpLVAL_INTRO)) { 14908 #ifdef DEBUGGING 14909 OP *n = o->op_next; 14910 while (n && ( n->op_type == OP_NULL 14911 || n->op_type == OP_LIST 14912 || n->op_type == OP_SCALAR)) 14913 n = n->op_next; 14914 assert(n && n->op_type == OP_LEAVE); 14915 #endif 14916 o->op_private &= ~OPpDEREF; 14917 is_deref = FALSE; 14918 } 14919 14920 if (is_deref) { 14921 ASSUME(!(o->op_flags & 14922 ~(OPf_WANT|OPf_KIDS|OPf_MOD|OPf_PARENS))); 14923 ASSUME(!(o->op_private & ~(OPpARG2_MASK|OPpDEREF))); 14924 14925 ok = (o->op_flags &~ OPf_PARENS) 14926 == (OPf_WANT_SCALAR|OPf_KIDS|OPf_MOD) 14927 && !(o->op_private & ~(OPpDEREF|OPpARG2_MASK)); 14928 } 14929 else if (o->op_type == OP_EXISTS) { 14930 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS 14931 |OPf_REF|OPf_MOD|OPf_SPECIAL))); 14932 ASSUME(!(o->op_private & ~(OPpARG1_MASK|OPpEXISTS_SUB))); 14933 ok = !(o->op_private & ~OPpARG1_MASK); 14934 } 14935 else if (o->op_type == OP_DELETE) { 14936 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS 14937 |OPf_REF|OPf_MOD|OPf_SPECIAL))); 14938 ASSUME(!(o->op_private & 14939 ~(OPpARG1_MASK|OPpSLICE|OPpLVAL_INTRO))); 14940 /* don't handle slices or 'local delete'; the latter 14941 * is fairly rare, and has a complex runtime */ 14942 ok = !(o->op_private & ~OPpARG1_MASK); 14943 if (OP_TYPE_IS_OR_WAS(cUNOPo->op_first, OP_AELEM)) 14944 /* skip handling run-tome error */ 14945 ok = (ok && cBOOL(o->op_flags & OPf_SPECIAL)); 14946 } 14947 else { 14948 ASSUME(o->op_type == OP_AELEM || o->op_type == OP_HELEM); 14949 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_MOD 14950 |OPf_PARENS|OPf_REF|OPf_SPECIAL))); 14951 ASSUME(!(o->op_private & ~(OPpARG2_MASK|OPpMAYBE_LVSUB 14952 |OPpLVAL_DEFER|OPpDEREF|OPpLVAL_INTRO))); 14953 ok = (o->op_private & OPpDEREF) != OPpDEREF_SV; 14954 } 14955 } 14956 14957 if (ok) { 14958 if (!first_elem_op) 14959 first_elem_op = o; 14960 top_op = o; 14961 if (is_deref) { 14962 next_is_hash = cBOOL((o->op_private & OPpDEREF) == OPpDEREF_HV); 14963 o = o->op_next; 14964 } 14965 else { 14966 is_last = TRUE; 14967 action |= MDEREF_FLAG_last; 14968 } 14969 } 14970 else { 14971 /* at this point we have something that started 14972 * promisingly enough (with rv2av or whatever), but failed 14973 * to find a simple index followed by an 14974 * aelem/helem/exists/delete. If this is the first action, 14975 * give up; but if we've already seen at least one 14976 * aelem/helem, then keep them and add a new action with 14977 * MDEREF_INDEX_none, which causes it to do the vivify 14978 * from the end of the previous lookup, and do the deref, 14979 * but stop at that point. So $a[0][expr] will do one 14980 * av_fetch, vivify and deref, then continue executing at 14981 * expr */ 14982 if (!action_count) 14983 return; 14984 is_last = TRUE; 14985 index_skip = action_count; 14986 action |= MDEREF_FLAG_last; 14987 if (index_type != MDEREF_INDEX_none) 14988 arg--; 14989 } 14990 14991 if (pass) 14992 action_ptr->uv |= (action << (action_ix * MDEREF_SHIFT)); 14993 action_ix++; 14994 action_count++; 14995 /* if there's no space for the next action, create a new slot 14996 * for it *before* we start adding args for that action */ 14997 if ((action_ix + 1) * MDEREF_SHIFT > UVSIZE*8) { 14998 action_ptr = arg; 14999 if (pass) 15000 arg->uv = 0; 15001 arg++; 15002 action_ix = 0; 15003 } 15004 } /* while !is_last */ 15005 15006 /* success! */ 15007 15008 if (pass) { 15009 OP *mderef; 15010 OP *p, *q; 15011 15012 mderef = newUNOP_AUX(OP_MULTIDEREF, 0, NULL, arg_buf); 15013 if (index_skip == -1) { 15014 mderef->op_flags = o->op_flags 15015 & (OPf_WANT|OPf_MOD|(next_is_hash ? OPf_SPECIAL : 0)); 15016 if (o->op_type == OP_EXISTS) 15017 mderef->op_private = OPpMULTIDEREF_EXISTS; 15018 else if (o->op_type == OP_DELETE) 15019 mderef->op_private = OPpMULTIDEREF_DELETE; 15020 else 15021 mderef->op_private = o->op_private 15022 & (OPpMAYBE_LVSUB|OPpLVAL_DEFER|OPpLVAL_INTRO); 15023 } 15024 /* accumulate strictness from every level (although I don't think 15025 * they can actually vary) */ 15026 mderef->op_private |= hints; 15027 15028 /* integrate the new multideref op into the optree and the 15029 * op_next chain. 15030 * 15031 * In general an op like aelem or helem has two child 15032 * sub-trees: the aggregate expression (a_expr) and the 15033 * index expression (i_expr): 15034 * 15035 * aelem 15036 * | 15037 * a_expr - i_expr 15038 * 15039 * The a_expr returns an AV or HV, while the i-expr returns an 15040 * index. In general a multideref replaces most or all of a 15041 * multi-level tree, e.g. 15042 * 15043 * exists 15044 * | 15045 * ex-aelem 15046 * | 15047 * rv2av - i_expr1 15048 * | 15049 * helem 15050 * | 15051 * rv2hv - i_expr2 15052 * | 15053 * aelem 15054 * | 15055 * a_expr - i_expr3 15056 * 15057 * With multideref, all the i_exprs will be simple vars or 15058 * constants, except that i_expr1 may be arbitrary in the case 15059 * of MDEREF_INDEX_none. 15060 * 15061 * The bottom-most a_expr will be either: 15062 * 1) a simple var (so padXv or gv+rv2Xv); 15063 * 2) a simple scalar var dereferenced (e.g. $r->[0]): 15064 * so a simple var with an extra rv2Xv; 15065 * 3) or an arbitrary expression. 15066 * 15067 * 'start', the first op in the execution chain, will point to 15068 * 1),2): the padXv or gv op; 15069 * 3): the rv2Xv which forms the last op in the a_expr 15070 * execution chain, and the top-most op in the a_expr 15071 * subtree. 15072 * 15073 * For all cases, the 'start' node is no longer required, 15074 * but we can't free it since one or more external nodes 15075 * may point to it. E.g. consider 15076 * $h{foo} = $a ? $b : $c 15077 * Here, both the op_next and op_other branches of the 15078 * cond_expr point to the gv[*h] of the hash expression, so 15079 * we can't free the 'start' op. 15080 * 15081 * For expr->[...], we need to save the subtree containing the 15082 * expression; for the other cases, we just need to save the 15083 * start node. 15084 * So in all cases, we null the start op and keep it around by 15085 * making it the child of the multideref op; for the expr-> 15086 * case, the expr will be a subtree of the start node. 15087 * 15088 * So in the simple 1,2 case the optree above changes to 15089 * 15090 * ex-exists 15091 * | 15092 * multideref 15093 * | 15094 * ex-gv (or ex-padxv) 15095 * 15096 * with the op_next chain being 15097 * 15098 * -> ex-gv -> multideref -> op-following-ex-exists -> 15099 * 15100 * In the 3 case, we have 15101 * 15102 * ex-exists 15103 * | 15104 * multideref 15105 * | 15106 * ex-rv2xv 15107 * | 15108 * rest-of-a_expr 15109 * subtree 15110 * 15111 * and 15112 * 15113 * -> rest-of-a_expr subtree -> 15114 * ex-rv2xv -> multideref -> op-following-ex-exists -> 15115 * 15116 * 15117 * Where the last i_expr is non-simple (i.e. MDEREF_INDEX_none, 15118 * e.g. $a[0]{foo}[$x+1], the next rv2xv is nulled and the 15119 * multideref attached as the child, e.g. 15120 * 15121 * exists 15122 * | 15123 * ex-aelem 15124 * | 15125 * ex-rv2av - i_expr1 15126 * | 15127 * multideref 15128 * | 15129 * ex-whatever 15130 * 15131 */ 15132 15133 /* if we free this op, don't free the pad entry */ 15134 if (reset_start_targ) 15135 start->op_targ = 0; 15136 15137 15138 /* Cut the bit we need to save out of the tree and attach to 15139 * the multideref op, then free the rest of the tree */ 15140 15141 /* find parent of node to be detached (for use by splice) */ 15142 p = first_elem_op; 15143 if ( orig_action == MDEREF_AV_pop_rv2av_aelem 15144 || orig_action == MDEREF_HV_pop_rv2hv_helem) 15145 { 15146 /* there is an arbitrary expression preceding us, e.g. 15147 * expr->[..]? so we need to save the 'expr' subtree */ 15148 if (p->op_type == OP_EXISTS || p->op_type == OP_DELETE) 15149 p = cUNOPx(p)->op_first; 15150 ASSUME( start->op_type == OP_RV2AV 15151 || start->op_type == OP_RV2HV); 15152 } 15153 else { 15154 /* either a padXv or rv2Xv+gv, maybe with an ex-Xelem 15155 * above for exists/delete. */ 15156 while ( (p->op_flags & OPf_KIDS) 15157 && cUNOPx(p)->op_first != start 15158 ) 15159 p = cUNOPx(p)->op_first; 15160 } 15161 ASSUME(cUNOPx(p)->op_first == start); 15162 15163 /* detach from main tree, and re-attach under the multideref */ 15164 op_sibling_splice(mderef, NULL, 0, 15165 op_sibling_splice(p, NULL, 1, NULL)); 15166 op_null(start); 15167 15168 start->op_next = mderef; 15169 15170 mderef->op_next = index_skip == -1 ? o->op_next : o; 15171 15172 /* excise and free the original tree, and replace with 15173 * the multideref op */ 15174 p = op_sibling_splice(top_op, NULL, -1, mderef); 15175 while (p) { 15176 q = OpSIBLING(p); 15177 op_free(p); 15178 p = q; 15179 } 15180 op_null(top_op); 15181 } 15182 else { 15183 Size_t size = arg - arg_buf; 15184 15185 if (maybe_aelemfast && action_count == 1) 15186 return; 15187 15188 arg_buf = (UNOP_AUX_item*)PerlMemShared_malloc( 15189 sizeof(UNOP_AUX_item) * (size + 1)); 15190 /* for dumping etc: store the length in a hidden first slot; 15191 * we set the op_aux pointer to the second slot */ 15192 arg_buf->uv = size; 15193 arg_buf++; 15194 } 15195 } /* for (pass = ...) */ 15196 } 15197 15198 /* See if the ops following o are such that o will always be executed in 15199 * boolean context: that is, the SV which o pushes onto the stack will 15200 * only ever be consumed by later ops via SvTRUE(sv) or similar. 15201 * If so, set a suitable private flag on o. Normally this will be 15202 * bool_flag; but see below why maybe_flag is needed too. 15203 * 15204 * Typically the two flags you pass will be the generic OPpTRUEBOOL and 15205 * OPpMAYBE_TRUEBOOL, buts it's possible that for some ops those bits may 15206 * already be taken, so you'll have to give that op two different flags. 15207 * 15208 * More explanation of 'maybe_flag' and 'safe_and' parameters. 15209 * The binary logical ops &&, ||, // (plus 'if' and 'unless' which use 15210 * those underlying ops) short-circuit, which means that rather than 15211 * necessarily returning a truth value, they may return the LH argument, 15212 * which may not be boolean. For example in $x = (keys %h || -1), keys 15213 * should return a key count rather than a boolean, even though its 15214 * sort-of being used in boolean context. 15215 * 15216 * So we only consider such logical ops to provide boolean context to 15217 * their LH argument if they themselves are in void or boolean context. 15218 * However, sometimes the context isn't known until run-time. In this 15219 * case the op is marked with the maybe_flag flag it. 15220 * 15221 * Consider the following. 15222 * 15223 * sub f { ....; if (%h) { .... } } 15224 * 15225 * This is actually compiled as 15226 * 15227 * sub f { ....; %h && do { .... } } 15228 * 15229 * Here we won't know until runtime whether the final statement (and hence 15230 * the &&) is in void context and so is safe to return a boolean value. 15231 * So mark o with maybe_flag rather than the bool_flag. 15232 * Note that there is cost associated with determining context at runtime 15233 * (e.g. a call to block_gimme()), so it may not be worth setting (at 15234 * compile time) and testing (at runtime) maybe_flag if the scalar verses 15235 * boolean costs savings are marginal. 15236 * 15237 * However, we can do slightly better with && (compared to || and //): 15238 * this op only returns its LH argument when that argument is false. In 15239 * this case, as long as the op promises to return a false value which is 15240 * valid in both boolean and scalar contexts, we can mark an op consumed 15241 * by && with bool_flag rather than maybe_flag. 15242 * For example as long as pp_padhv and pp_rv2hv return &PL_sv_zero rather 15243 * than &PL_sv_no for a false result in boolean context, then it's safe. An 15244 * op which promises to handle this case is indicated by setting safe_and 15245 * to true. 15246 */ 15247 15248 static void 15249 S_check_for_bool_cxt(OP*o, bool safe_and, U8 bool_flag, U8 maybe_flag) 15250 { 15251 OP *lop; 15252 U8 flag = 0; 15253 15254 assert((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR); 15255 15256 /* OPpTARGET_MY and boolean context probably don't mix well. 15257 * If someone finds a valid use case, maybe add an extra flag to this 15258 * function which indicates its safe to do so for this op? */ 15259 assert(!( (PL_opargs[o->op_type] & OA_TARGLEX) 15260 && (o->op_private & OPpTARGET_MY))); 15261 15262 lop = o->op_next; 15263 15264 while (lop) { 15265 switch (lop->op_type) { 15266 case OP_NULL: 15267 case OP_SCALAR: 15268 break; 15269 15270 /* these two consume the stack argument in the scalar case, 15271 * and treat it as a boolean in the non linenumber case */ 15272 case OP_FLIP: 15273 case OP_FLOP: 15274 if ( ((lop->op_flags & OPf_WANT) == OPf_WANT_LIST) 15275 || (lop->op_private & OPpFLIP_LINENUM)) 15276 { 15277 lop = NULL; 15278 break; 15279 } 15280 /* FALLTHROUGH */ 15281 /* these never leave the original value on the stack */ 15282 case OP_NOT: 15283 case OP_XOR: 15284 case OP_COND_EXPR: 15285 case OP_GREPWHILE: 15286 flag = bool_flag; 15287 lop = NULL; 15288 break; 15289 15290 /* OR DOR and AND evaluate their arg as a boolean, but then may 15291 * leave the original scalar value on the stack when following the 15292 * op_next route. If not in void context, we need to ensure 15293 * that whatever follows consumes the arg only in boolean context 15294 * too. 15295 */ 15296 case OP_AND: 15297 if (safe_and) { 15298 flag = bool_flag; 15299 lop = NULL; 15300 break; 15301 } 15302 /* FALLTHROUGH */ 15303 case OP_OR: 15304 case OP_DOR: 15305 if ((lop->op_flags & OPf_WANT) == OPf_WANT_VOID) { 15306 flag = bool_flag; 15307 lop = NULL; 15308 } 15309 else if (!(lop->op_flags & OPf_WANT)) { 15310 /* unknown context - decide at runtime */ 15311 flag = maybe_flag; 15312 lop = NULL; 15313 } 15314 break; 15315 15316 default: 15317 lop = NULL; 15318 break; 15319 } 15320 15321 if (lop) 15322 lop = lop->op_next; 15323 } 15324 15325 o->op_private |= flag; 15326 } 15327 15328 15329 15330 /* mechanism for deferring recursion in rpeep() */ 15331 15332 #define MAX_DEFERRED 4 15333 15334 #define DEFER(o) \ 15335 STMT_START { \ 15336 if (defer_ix == (MAX_DEFERRED-1)) { \ 15337 OP **defer = defer_queue[defer_base]; \ 15338 CALL_RPEEP(*defer); \ 15339 S_prune_chain_head(defer); \ 15340 defer_base = (defer_base + 1) % MAX_DEFERRED; \ 15341 defer_ix--; \ 15342 } \ 15343 defer_queue[(defer_base + ++defer_ix) % MAX_DEFERRED] = &(o); \ 15344 } STMT_END 15345 15346 #define IS_AND_OP(o) (o->op_type == OP_AND) 15347 #define IS_OR_OP(o) (o->op_type == OP_OR) 15348 15349 15350 /* A peephole optimizer. We visit the ops in the order they're to execute. 15351 * See the comments at the top of this file for more details about when 15352 * peep() is called */ 15353 15354 void 15355 Perl_rpeep(pTHX_ OP *o) 15356 { 15357 dVAR; 15358 OP* oldop = NULL; 15359 OP* oldoldop = NULL; 15360 OP** defer_queue[MAX_DEFERRED]; /* small queue of deferred branches */ 15361 int defer_base = 0; 15362 int defer_ix = -1; 15363 15364 if (!o || o->op_opt) 15365 return; 15366 15367 assert(o->op_type != OP_FREED); 15368 15369 ENTER; 15370 SAVEOP(); 15371 SAVEVPTR(PL_curcop); 15372 for (;; o = o->op_next) { 15373 if (o && o->op_opt) 15374 o = NULL; 15375 if (!o) { 15376 while (defer_ix >= 0) { 15377 OP **defer = 15378 defer_queue[(defer_base + defer_ix--) % MAX_DEFERRED]; 15379 CALL_RPEEP(*defer); 15380 S_prune_chain_head(defer); 15381 } 15382 break; 15383 } 15384 15385 redo: 15386 15387 /* oldoldop -> oldop -> o should be a chain of 3 adjacent ops */ 15388 assert(!oldoldop || oldoldop->op_next == oldop); 15389 assert(!oldop || oldop->op_next == o); 15390 15391 /* By default, this op has now been optimised. A couple of cases below 15392 clear this again. */ 15393 o->op_opt = 1; 15394 PL_op = o; 15395 15396 /* look for a series of 1 or more aggregate derefs, e.g. 15397 * $a[1]{foo}[$i]{$k} 15398 * and replace with a single OP_MULTIDEREF op. 15399 * Each index must be either a const, or a simple variable, 15400 * 15401 * First, look for likely combinations of starting ops, 15402 * corresponding to (global and lexical variants of) 15403 * $a[...] $h{...} 15404 * $r->[...] $r->{...} 15405 * (preceding expression)->[...] 15406 * (preceding expression)->{...} 15407 * and if so, call maybe_multideref() to do a full inspection 15408 * of the op chain and if appropriate, replace with an 15409 * OP_MULTIDEREF 15410 */ 15411 { 15412 UV action; 15413 OP *o2 = o; 15414 U8 hints = 0; 15415 15416 switch (o2->op_type) { 15417 case OP_GV: 15418 /* $pkg[..] : gv[*pkg] 15419 * $pkg->[...]: gv[*pkg]; rv2sv sKM/DREFAV */ 15420 15421 /* Fail if there are new op flag combinations that we're 15422 * not aware of, rather than: 15423 * * silently failing to optimise, or 15424 * * silently optimising the flag away. 15425 * If this ASSUME starts failing, examine what new flag 15426 * has been added to the op, and decide whether the 15427 * optimisation should still occur with that flag, then 15428 * update the code accordingly. This applies to all the 15429 * other ASSUMEs in the block of code too. 15430 */ 15431 ASSUME(!(o2->op_flags & 15432 ~(OPf_WANT|OPf_MOD|OPf_PARENS|OPf_SPECIAL))); 15433 ASSUME(!(o2->op_private & ~OPpEARLY_CV)); 15434 15435 o2 = o2->op_next; 15436 15437 if (o2->op_type == OP_RV2AV) { 15438 action = MDEREF_AV_gvav_aelem; 15439 goto do_deref; 15440 } 15441 15442 if (o2->op_type == OP_RV2HV) { 15443 action = MDEREF_HV_gvhv_helem; 15444 goto do_deref; 15445 } 15446 15447 if (o2->op_type != OP_RV2SV) 15448 break; 15449 15450 /* at this point we've seen gv,rv2sv, so the only valid 15451 * construct left is $pkg->[] or $pkg->{} */ 15452 15453 ASSUME(!(o2->op_flags & OPf_STACKED)); 15454 if ((o2->op_flags & (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL)) 15455 != (OPf_WANT_SCALAR|OPf_MOD)) 15456 break; 15457 15458 ASSUME(!(o2->op_private & ~(OPpARG1_MASK|HINT_STRICT_REFS 15459 |OPpOUR_INTRO|OPpDEREF|OPpLVAL_INTRO))); 15460 if (o2->op_private & (OPpOUR_INTRO|OPpLVAL_INTRO)) 15461 break; 15462 if ( (o2->op_private & OPpDEREF) != OPpDEREF_AV 15463 && (o2->op_private & OPpDEREF) != OPpDEREF_HV) 15464 break; 15465 15466 o2 = o2->op_next; 15467 if (o2->op_type == OP_RV2AV) { 15468 action = MDEREF_AV_gvsv_vivify_rv2av_aelem; 15469 goto do_deref; 15470 } 15471 if (o2->op_type == OP_RV2HV) { 15472 action = MDEREF_HV_gvsv_vivify_rv2hv_helem; 15473 goto do_deref; 15474 } 15475 break; 15476 15477 case OP_PADSV: 15478 /* $lex->[...]: padsv[$lex] sM/DREFAV */ 15479 15480 ASSUME(!(o2->op_flags & 15481 ~(OPf_WANT|OPf_PARENS|OPf_REF|OPf_MOD|OPf_SPECIAL))); 15482 if ((o2->op_flags & 15483 (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL)) 15484 != (OPf_WANT_SCALAR|OPf_MOD)) 15485 break; 15486 15487 ASSUME(!(o2->op_private & 15488 ~(OPpPAD_STATE|OPpDEREF|OPpLVAL_INTRO))); 15489 /* skip if state or intro, or not a deref */ 15490 if ( o2->op_private != OPpDEREF_AV 15491 && o2->op_private != OPpDEREF_HV) 15492 break; 15493 15494 o2 = o2->op_next; 15495 if (o2->op_type == OP_RV2AV) { 15496 action = MDEREF_AV_padsv_vivify_rv2av_aelem; 15497 goto do_deref; 15498 } 15499 if (o2->op_type == OP_RV2HV) { 15500 action = MDEREF_HV_padsv_vivify_rv2hv_helem; 15501 goto do_deref; 15502 } 15503 break; 15504 15505 case OP_PADAV: 15506 case OP_PADHV: 15507 /* $lex[..]: padav[@lex:1,2] sR * 15508 * or $lex{..}: padhv[%lex:1,2] sR */ 15509 ASSUME(!(o2->op_flags & ~(OPf_WANT|OPf_MOD|OPf_PARENS| 15510 OPf_REF|OPf_SPECIAL))); 15511 if ((o2->op_flags & 15512 (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL)) 15513 != (OPf_WANT_SCALAR|OPf_REF)) 15514 break; 15515 if (o2->op_flags != (OPf_WANT_SCALAR|OPf_REF)) 15516 break; 15517 /* OPf_PARENS isn't currently used in this case; 15518 * if that changes, let us know! */ 15519 ASSUME(!(o2->op_flags & OPf_PARENS)); 15520 15521 /* at this point, we wouldn't expect any of the remaining 15522 * possible private flags: 15523 * OPpPAD_STATE, OPpLVAL_INTRO, OPpTRUEBOOL, 15524 * OPpMAYBE_TRUEBOOL, OPpMAYBE_LVSUB 15525 * 15526 * OPpSLICEWARNING shouldn't affect runtime 15527 */ 15528 ASSUME(!(o2->op_private & ~(OPpSLICEWARNING))); 15529 15530 action = o2->op_type == OP_PADAV 15531 ? MDEREF_AV_padav_aelem 15532 : MDEREF_HV_padhv_helem; 15533 o2 = o2->op_next; 15534 S_maybe_multideref(aTHX_ o, o2, action, 0); 15535 break; 15536 15537 15538 case OP_RV2AV: 15539 case OP_RV2HV: 15540 action = o2->op_type == OP_RV2AV 15541 ? MDEREF_AV_pop_rv2av_aelem 15542 : MDEREF_HV_pop_rv2hv_helem; 15543 /* FALLTHROUGH */ 15544 do_deref: 15545 /* (expr)->[...]: rv2av sKR/1; 15546 * (expr)->{...}: rv2hv sKR/1; */ 15547 15548 ASSUME(o2->op_type == OP_RV2AV || o2->op_type == OP_RV2HV); 15549 15550 ASSUME(!(o2->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS 15551 |OPf_REF|OPf_MOD|OPf_STACKED|OPf_SPECIAL))); 15552 if (o2->op_flags != (OPf_WANT_SCALAR|OPf_KIDS|OPf_REF)) 15553 break; 15554 15555 /* at this point, we wouldn't expect any of these 15556 * possible private flags: 15557 * OPpMAYBE_LVSUB, OPpLVAL_INTRO 15558 * OPpTRUEBOOL, OPpMAYBE_TRUEBOOL, (rv2hv only) 15559 */ 15560 ASSUME(!(o2->op_private & 15561 ~(OPpHINT_STRICT_REFS|OPpARG1_MASK|OPpSLICEWARNING 15562 |OPpOUR_INTRO))); 15563 hints |= (o2->op_private & OPpHINT_STRICT_REFS); 15564 15565 o2 = o2->op_next; 15566 15567 S_maybe_multideref(aTHX_ o, o2, action, hints); 15568 break; 15569 15570 default: 15571 break; 15572 } 15573 } 15574 15575 15576 switch (o->op_type) { 15577 case OP_DBSTATE: 15578 PL_curcop = ((COP*)o); /* for warnings */ 15579 break; 15580 case OP_NEXTSTATE: 15581 PL_curcop = ((COP*)o); /* for warnings */ 15582 15583 /* Optimise a "return ..." at the end of a sub to just be "...". 15584 * This saves 2 ops. Before: 15585 * 1 <;> nextstate(main 1 -e:1) v ->2 15586 * 4 <@> return K ->5 15587 * 2 <0> pushmark s ->3 15588 * - <1> ex-rv2sv sK/1 ->4 15589 * 3 <#> gvsv[*cat] s ->4 15590 * 15591 * After: 15592 * - <@> return K ->- 15593 * - <0> pushmark s ->2 15594 * - <1> ex-rv2sv sK/1 ->- 15595 * 2 <$> gvsv(*cat) s ->3 15596 */ 15597 { 15598 OP *next = o->op_next; 15599 OP *sibling = OpSIBLING(o); 15600 if ( OP_TYPE_IS(next, OP_PUSHMARK) 15601 && OP_TYPE_IS(sibling, OP_RETURN) 15602 && OP_TYPE_IS(sibling->op_next, OP_LINESEQ) 15603 && ( OP_TYPE_IS(sibling->op_next->op_next, OP_LEAVESUB) 15604 ||OP_TYPE_IS(sibling->op_next->op_next, 15605 OP_LEAVESUBLV)) 15606 && cUNOPx(sibling)->op_first == next 15607 && OpHAS_SIBLING(next) && OpSIBLING(next)->op_next 15608 && next->op_next 15609 ) { 15610 /* Look through the PUSHMARK's siblings for one that 15611 * points to the RETURN */ 15612 OP *top = OpSIBLING(next); 15613 while (top && top->op_next) { 15614 if (top->op_next == sibling) { 15615 top->op_next = sibling->op_next; 15616 o->op_next = next->op_next; 15617 break; 15618 } 15619 top = OpSIBLING(top); 15620 } 15621 } 15622 } 15623 15624 /* Optimise 'my $x; my $y;' into 'my ($x, $y);' 15625 * 15626 * This latter form is then suitable for conversion into padrange 15627 * later on. Convert: 15628 * 15629 * nextstate1 -> padop1 -> nextstate2 -> padop2 -> nextstate3 15630 * 15631 * into: 15632 * 15633 * nextstate1 -> listop -> nextstate3 15634 * / \ 15635 * pushmark -> padop1 -> padop2 15636 */ 15637 if (o->op_next && ( 15638 o->op_next->op_type == OP_PADSV 15639 || o->op_next->op_type == OP_PADAV 15640 || o->op_next->op_type == OP_PADHV 15641 ) 15642 && !(o->op_next->op_private & ~OPpLVAL_INTRO) 15643 && o->op_next->op_next && o->op_next->op_next->op_type == OP_NEXTSTATE 15644 && o->op_next->op_next->op_next && ( 15645 o->op_next->op_next->op_next->op_type == OP_PADSV 15646 || o->op_next->op_next->op_next->op_type == OP_PADAV 15647 || o->op_next->op_next->op_next->op_type == OP_PADHV 15648 ) 15649 && !(o->op_next->op_next->op_next->op_private & ~OPpLVAL_INTRO) 15650 && o->op_next->op_next->op_next->op_next && o->op_next->op_next->op_next->op_next->op_type == OP_NEXTSTATE 15651 && (!CopLABEL((COP*)o)) /* Don't mess with labels */ 15652 && (!CopLABEL((COP*)o->op_next->op_next)) /* ... */ 15653 ) { 15654 OP *pad1, *ns2, *pad2, *ns3, *newop, *newpm; 15655 15656 pad1 = o->op_next; 15657 ns2 = pad1->op_next; 15658 pad2 = ns2->op_next; 15659 ns3 = pad2->op_next; 15660 15661 /* we assume here that the op_next chain is the same as 15662 * the op_sibling chain */ 15663 assert(OpSIBLING(o) == pad1); 15664 assert(OpSIBLING(pad1) == ns2); 15665 assert(OpSIBLING(ns2) == pad2); 15666 assert(OpSIBLING(pad2) == ns3); 15667 15668 /* excise and delete ns2 */ 15669 op_sibling_splice(NULL, pad1, 1, NULL); 15670 op_free(ns2); 15671 15672 /* excise pad1 and pad2 */ 15673 op_sibling_splice(NULL, o, 2, NULL); 15674 15675 /* create new listop, with children consisting of: 15676 * a new pushmark, pad1, pad2. */ 15677 newop = newLISTOP(OP_LIST, 0, pad1, pad2); 15678 newop->op_flags |= OPf_PARENS; 15679 newop->op_flags = (newop->op_flags & ~OPf_WANT) | OPf_WANT_VOID; 15680 15681 /* insert newop between o and ns3 */ 15682 op_sibling_splice(NULL, o, 0, newop); 15683 15684 /*fixup op_next chain */ 15685 newpm = cUNOPx(newop)->op_first; /* pushmark */ 15686 o ->op_next = newpm; 15687 newpm->op_next = pad1; 15688 pad1 ->op_next = pad2; 15689 pad2 ->op_next = newop; /* listop */ 15690 newop->op_next = ns3; 15691 15692 /* Ensure pushmark has this flag if padops do */ 15693 if (pad1->op_flags & OPf_MOD && pad2->op_flags & OPf_MOD) { 15694 newpm->op_flags |= OPf_MOD; 15695 } 15696 15697 break; 15698 } 15699 15700 /* Two NEXTSTATEs in a row serve no purpose. Except if they happen 15701 to carry two labels. For now, take the easier option, and skip 15702 this optimisation if the first NEXTSTATE has a label. */ 15703 if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) { 15704 OP *nextop = o->op_next; 15705 while (nextop && nextop->op_type == OP_NULL) 15706 nextop = nextop->op_next; 15707 15708 if (nextop && (nextop->op_type == OP_NEXTSTATE)) { 15709 op_null(o); 15710 if (oldop) 15711 oldop->op_next = nextop; 15712 o = nextop; 15713 /* Skip (old)oldop assignment since the current oldop's 15714 op_next already points to the next op. */ 15715 goto redo; 15716 } 15717 } 15718 break; 15719 15720 case OP_CONCAT: 15721 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) { 15722 if (o->op_next->op_private & OPpTARGET_MY) { 15723 if (o->op_flags & OPf_STACKED) /* chained concats */ 15724 break; /* ignore_optimization */ 15725 else { 15726 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */ 15727 o->op_targ = o->op_next->op_targ; 15728 o->op_next->op_targ = 0; 15729 o->op_private |= OPpTARGET_MY; 15730 } 15731 } 15732 op_null(o->op_next); 15733 } 15734 break; 15735 case OP_STUB: 15736 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) { 15737 break; /* Scalar stub must produce undef. List stub is noop */ 15738 } 15739 goto nothin; 15740 case OP_NULL: 15741 if (o->op_targ == OP_NEXTSTATE 15742 || o->op_targ == OP_DBSTATE) 15743 { 15744 PL_curcop = ((COP*)o); 15745 } 15746 /* XXX: We avoid setting op_seq here to prevent later calls 15747 to rpeep() from mistakenly concluding that optimisation 15748 has already occurred. This doesn't fix the real problem, 15749 though (See 20010220.007 (#5874)). AMS 20010719 */ 15750 /* op_seq functionality is now replaced by op_opt */ 15751 o->op_opt = 0; 15752 /* FALLTHROUGH */ 15753 case OP_SCALAR: 15754 case OP_LINESEQ: 15755 case OP_SCOPE: 15756 nothin: 15757 if (oldop) { 15758 oldop->op_next = o->op_next; 15759 o->op_opt = 0; 15760 continue; 15761 } 15762 break; 15763 15764 case OP_PUSHMARK: 15765 15766 /* Given 15767 5 repeat/DOLIST 15768 3 ex-list 15769 1 pushmark 15770 2 scalar or const 15771 4 const[0] 15772 convert repeat into a stub with no kids. 15773 */ 15774 if (o->op_next->op_type == OP_CONST 15775 || ( o->op_next->op_type == OP_PADSV 15776 && !(o->op_next->op_private & OPpLVAL_INTRO)) 15777 || ( o->op_next->op_type == OP_GV 15778 && o->op_next->op_next->op_type == OP_RV2SV 15779 && !(o->op_next->op_next->op_private 15780 & (OPpLVAL_INTRO|OPpOUR_INTRO)))) 15781 { 15782 const OP *kid = o->op_next->op_next; 15783 if (o->op_next->op_type == OP_GV) 15784 kid = kid->op_next; 15785 /* kid is now the ex-list. */ 15786 if (kid->op_type == OP_NULL 15787 && (kid = kid->op_next)->op_type == OP_CONST 15788 /* kid is now the repeat count. */ 15789 && kid->op_next->op_type == OP_REPEAT 15790 && kid->op_next->op_private & OPpREPEAT_DOLIST 15791 && (kid->op_next->op_flags & OPf_WANT) == OPf_WANT_LIST 15792 && SvIOK(kSVOP_sv) && SvIVX(kSVOP_sv) == 0 15793 && oldop) 15794 { 15795 o = kid->op_next; /* repeat */ 15796 oldop->op_next = o; 15797 op_free(cBINOPo->op_first); 15798 op_free(cBINOPo->op_last ); 15799 o->op_flags &=~ OPf_KIDS; 15800 /* stub is a baseop; repeat is a binop */ 15801 STATIC_ASSERT_STMT(sizeof(OP) <= sizeof(BINOP)); 15802 OpTYPE_set(o, OP_STUB); 15803 o->op_private = 0; 15804 break; 15805 } 15806 } 15807 15808 /* Convert a series of PAD ops for my vars plus support into a 15809 * single padrange op. Basically 15810 * 15811 * pushmark -> pad[ahs]v -> pad[ahs]?v -> ... -> (list) -> rest 15812 * 15813 * becomes, depending on circumstances, one of 15814 * 15815 * padrange ----------------------------------> (list) -> rest 15816 * padrange --------------------------------------------> rest 15817 * 15818 * where all the pad indexes are sequential and of the same type 15819 * (INTRO or not). 15820 * We convert the pushmark into a padrange op, then skip 15821 * any other pad ops, and possibly some trailing ops. 15822 * Note that we don't null() the skipped ops, to make it 15823 * easier for Deparse to undo this optimisation (and none of 15824 * the skipped ops are holding any resourses). It also makes 15825 * it easier for find_uninit_var(), as it can just ignore 15826 * padrange, and examine the original pad ops. 15827 */ 15828 { 15829 OP *p; 15830 OP *followop = NULL; /* the op that will follow the padrange op */ 15831 U8 count = 0; 15832 U8 intro = 0; 15833 PADOFFSET base = 0; /* init only to stop compiler whining */ 15834 bool gvoid = 0; /* init only to stop compiler whining */ 15835 bool defav = 0; /* seen (...) = @_ */ 15836 bool reuse = 0; /* reuse an existing padrange op */ 15837 15838 /* look for a pushmark -> gv[_] -> rv2av */ 15839 15840 { 15841 OP *rv2av, *q; 15842 p = o->op_next; 15843 if ( p->op_type == OP_GV 15844 && cGVOPx_gv(p) == PL_defgv 15845 && (rv2av = p->op_next) 15846 && rv2av->op_type == OP_RV2AV 15847 && !(rv2av->op_flags & OPf_REF) 15848 && !(rv2av->op_private & (OPpLVAL_INTRO|OPpMAYBE_LVSUB)) 15849 && ((rv2av->op_flags & OPf_WANT) == OPf_WANT_LIST) 15850 ) { 15851 q = rv2av->op_next; 15852 if (q->op_type == OP_NULL) 15853 q = q->op_next; 15854 if (q->op_type == OP_PUSHMARK) { 15855 defav = 1; 15856 p = q; 15857 } 15858 } 15859 } 15860 if (!defav) { 15861 p = o; 15862 } 15863 15864 /* scan for PAD ops */ 15865 15866 for (p = p->op_next; p; p = p->op_next) { 15867 if (p->op_type == OP_NULL) 15868 continue; 15869 15870 if (( p->op_type != OP_PADSV 15871 && p->op_type != OP_PADAV 15872 && p->op_type != OP_PADHV 15873 ) 15874 /* any private flag other than INTRO? e.g. STATE */ 15875 || (p->op_private & ~OPpLVAL_INTRO) 15876 ) 15877 break; 15878 15879 /* let $a[N] potentially be optimised into AELEMFAST_LEX 15880 * instead */ 15881 if ( p->op_type == OP_PADAV 15882 && p->op_next 15883 && p->op_next->op_type == OP_CONST 15884 && p->op_next->op_next 15885 && p->op_next->op_next->op_type == OP_AELEM 15886 ) 15887 break; 15888 15889 /* for 1st padop, note what type it is and the range 15890 * start; for the others, check that it's the same type 15891 * and that the targs are contiguous */ 15892 if (count == 0) { 15893 intro = (p->op_private & OPpLVAL_INTRO); 15894 base = p->op_targ; 15895 gvoid = OP_GIMME(p,0) == G_VOID; 15896 } 15897 else { 15898 if ((p->op_private & OPpLVAL_INTRO) != intro) 15899 break; 15900 /* Note that you'd normally expect targs to be 15901 * contiguous in my($a,$b,$c), but that's not the case 15902 * when external modules start doing things, e.g. 15903 * Function::Parameters */ 15904 if (p->op_targ != base + count) 15905 break; 15906 assert(p->op_targ == base + count); 15907 /* Either all the padops or none of the padops should 15908 be in void context. Since we only do the optimisa- 15909 tion for av/hv when the aggregate itself is pushed 15910 on to the stack (one item), there is no need to dis- 15911 tinguish list from scalar context. */ 15912 if (gvoid != (OP_GIMME(p,0) == G_VOID)) 15913 break; 15914 } 15915 15916 /* for AV, HV, only when we're not flattening */ 15917 if ( p->op_type != OP_PADSV 15918 && !gvoid 15919 && !(p->op_flags & OPf_REF) 15920 ) 15921 break; 15922 15923 if (count >= OPpPADRANGE_COUNTMASK) 15924 break; 15925 15926 /* there's a biggest base we can fit into a 15927 * SAVEt_CLEARPADRANGE in pp_padrange. 15928 * (The sizeof() stuff will be constant-folded, and is 15929 * intended to avoid getting "comparison is always false" 15930 * compiler warnings. See the comments above 15931 * MEM_WRAP_CHECK for more explanation on why we do this 15932 * in a weird way to avoid compiler warnings.) 15933 */ 15934 if ( intro 15935 && (8*sizeof(base) > 15936 8*sizeof(UV)-OPpPADRANGE_COUNTSHIFT-SAVE_TIGHT_SHIFT 15937 ? (Size_t)base 15938 : (UV_MAX >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT)) 15939 ) > 15940 (UV_MAX >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT)) 15941 ) 15942 break; 15943 15944 /* Success! We've got another valid pad op to optimise away */ 15945 count++; 15946 followop = p->op_next; 15947 } 15948 15949 if (count < 1 || (count == 1 && !defav)) 15950 break; 15951 15952 /* pp_padrange in specifically compile-time void context 15953 * skips pushing a mark and lexicals; in all other contexts 15954 * (including unknown till runtime) it pushes a mark and the 15955 * lexicals. We must be very careful then, that the ops we 15956 * optimise away would have exactly the same effect as the 15957 * padrange. 15958 * In particular in void context, we can only optimise to 15959 * a padrange if we see the complete sequence 15960 * pushmark, pad*v, ...., list 15961 * which has the net effect of leaving the markstack as it 15962 * was. Not pushing onto the stack (whereas padsv does touch 15963 * the stack) makes no difference in void context. 15964 */ 15965 assert(followop); 15966 if (gvoid) { 15967 if (followop->op_type == OP_LIST 15968 && OP_GIMME(followop,0) == G_VOID 15969 ) 15970 { 15971 followop = followop->op_next; /* skip OP_LIST */ 15972 15973 /* consolidate two successive my(...);'s */ 15974 15975 if ( oldoldop 15976 && oldoldop->op_type == OP_PADRANGE 15977 && (oldoldop->op_flags & OPf_WANT) == OPf_WANT_VOID 15978 && (oldoldop->op_private & OPpLVAL_INTRO) == intro 15979 && !(oldoldop->op_flags & OPf_SPECIAL) 15980 ) { 15981 U8 old_count; 15982 assert(oldoldop->op_next == oldop); 15983 assert( oldop->op_type == OP_NEXTSTATE 15984 || oldop->op_type == OP_DBSTATE); 15985 assert(oldop->op_next == o); 15986 15987 old_count 15988 = (oldoldop->op_private & OPpPADRANGE_COUNTMASK); 15989 15990 /* Do not assume pad offsets for $c and $d are con- 15991 tiguous in 15992 my ($a,$b,$c); 15993 my ($d,$e,$f); 15994 */ 15995 if ( oldoldop->op_targ + old_count == base 15996 && old_count < OPpPADRANGE_COUNTMASK - count) { 15997 base = oldoldop->op_targ; 15998 count += old_count; 15999 reuse = 1; 16000 } 16001 } 16002 16003 /* if there's any immediately following singleton 16004 * my var's; then swallow them and the associated 16005 * nextstates; i.e. 16006 * my ($a,$b); my $c; my $d; 16007 * is treated as 16008 * my ($a,$b,$c,$d); 16009 */ 16010 16011 while ( ((p = followop->op_next)) 16012 && ( p->op_type == OP_PADSV 16013 || p->op_type == OP_PADAV 16014 || p->op_type == OP_PADHV) 16015 && (p->op_flags & OPf_WANT) == OPf_WANT_VOID 16016 && (p->op_private & OPpLVAL_INTRO) == intro 16017 && !(p->op_private & ~OPpLVAL_INTRO) 16018 && p->op_next 16019 && ( p->op_next->op_type == OP_NEXTSTATE 16020 || p->op_next->op_type == OP_DBSTATE) 16021 && count < OPpPADRANGE_COUNTMASK 16022 && base + count == p->op_targ 16023 ) { 16024 count++; 16025 followop = p->op_next; 16026 } 16027 } 16028 else 16029 break; 16030 } 16031 16032 if (reuse) { 16033 assert(oldoldop->op_type == OP_PADRANGE); 16034 oldoldop->op_next = followop; 16035 oldoldop->op_private = (intro | count); 16036 o = oldoldop; 16037 oldop = NULL; 16038 oldoldop = NULL; 16039 } 16040 else { 16041 /* Convert the pushmark into a padrange. 16042 * To make Deparse easier, we guarantee that a padrange was 16043 * *always* formerly a pushmark */ 16044 assert(o->op_type == OP_PUSHMARK); 16045 o->op_next = followop; 16046 OpTYPE_set(o, OP_PADRANGE); 16047 o->op_targ = base; 16048 /* bit 7: INTRO; bit 6..0: count */ 16049 o->op_private = (intro | count); 16050 o->op_flags = ((o->op_flags & ~(OPf_WANT|OPf_SPECIAL)) 16051 | gvoid * OPf_WANT_VOID 16052 | (defav ? OPf_SPECIAL : 0)); 16053 } 16054 break; 16055 } 16056 16057 case OP_RV2AV: 16058 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR) 16059 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0); 16060 break; 16061 16062 case OP_RV2HV: 16063 case OP_PADHV: 16064 /*'keys %h' in void or scalar context: skip the OP_KEYS 16065 * and perform the functionality directly in the RV2HV/PADHV 16066 * op 16067 */ 16068 if (o->op_flags & OPf_REF) { 16069 OP *k = o->op_next; 16070 U8 want = (k->op_flags & OPf_WANT); 16071 if ( k 16072 && k->op_type == OP_KEYS 16073 && ( want == OPf_WANT_VOID 16074 || want == OPf_WANT_SCALAR) 16075 && !(k->op_private & OPpMAYBE_LVSUB) 16076 && !(k->op_flags & OPf_MOD) 16077 ) { 16078 o->op_next = k->op_next; 16079 o->op_flags &= ~(OPf_REF|OPf_WANT); 16080 o->op_flags |= want; 16081 o->op_private |= (o->op_type == OP_PADHV ? 16082 OPpPADHV_ISKEYS : OPpRV2HV_ISKEYS); 16083 /* for keys(%lex), hold onto the OP_KEYS's targ 16084 * since padhv doesn't have its own targ to return 16085 * an int with */ 16086 if (!(o->op_type ==OP_PADHV && want == OPf_WANT_SCALAR)) 16087 op_null(k); 16088 } 16089 } 16090 16091 /* see if %h is used in boolean context */ 16092 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR) 16093 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, OPpMAYBE_TRUEBOOL); 16094 16095 16096 if (o->op_type != OP_PADHV) 16097 break; 16098 /* FALLTHROUGH */ 16099 case OP_PADAV: 16100 if ( o->op_type == OP_PADAV 16101 && (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR 16102 ) 16103 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0); 16104 /* FALLTHROUGH */ 16105 case OP_PADSV: 16106 /* Skip over state($x) in void context. */ 16107 if (oldop && o->op_private == (OPpPAD_STATE|OPpLVAL_INTRO) 16108 && (o->op_flags & OPf_WANT) == OPf_WANT_VOID) 16109 { 16110 oldop->op_next = o->op_next; 16111 goto redo_nextstate; 16112 } 16113 if (o->op_type != OP_PADAV) 16114 break; 16115 /* FALLTHROUGH */ 16116 case OP_GV: 16117 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) { 16118 OP* const pop = (o->op_type == OP_PADAV) ? 16119 o->op_next : o->op_next->op_next; 16120 IV i; 16121 if (pop && pop->op_type == OP_CONST && 16122 ((PL_op = pop->op_next)) && 16123 pop->op_next->op_type == OP_AELEM && 16124 !(pop->op_next->op_private & 16125 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) && 16126 (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127) 16127 { 16128 GV *gv; 16129 if (cSVOPx(pop)->op_private & OPpCONST_STRICT) 16130 no_bareword_allowed(pop); 16131 if (o->op_type == OP_GV) 16132 op_null(o->op_next); 16133 op_null(pop->op_next); 16134 op_null(pop); 16135 o->op_flags |= pop->op_next->op_flags & OPf_MOD; 16136 o->op_next = pop->op_next->op_next; 16137 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST]; 16138 o->op_private = (U8)i; 16139 if (o->op_type == OP_GV) { 16140 gv = cGVOPo_gv; 16141 GvAVn(gv); 16142 o->op_type = OP_AELEMFAST; 16143 } 16144 else 16145 o->op_type = OP_AELEMFAST_LEX; 16146 } 16147 if (o->op_type != OP_GV) 16148 break; 16149 } 16150 16151 /* Remove $foo from the op_next chain in void context. */ 16152 if (oldop 16153 && ( o->op_next->op_type == OP_RV2SV 16154 || o->op_next->op_type == OP_RV2AV 16155 || o->op_next->op_type == OP_RV2HV ) 16156 && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID 16157 && !(o->op_next->op_private & OPpLVAL_INTRO)) 16158 { 16159 oldop->op_next = o->op_next->op_next; 16160 /* Reprocess the previous op if it is a nextstate, to 16161 allow double-nextstate optimisation. */ 16162 redo_nextstate: 16163 if (oldop->op_type == OP_NEXTSTATE) { 16164 oldop->op_opt = 0; 16165 o = oldop; 16166 oldop = oldoldop; 16167 oldoldop = NULL; 16168 goto redo; 16169 } 16170 o = oldop->op_next; 16171 goto redo; 16172 } 16173 else if (o->op_next->op_type == OP_RV2SV) { 16174 if (!(o->op_next->op_private & OPpDEREF)) { 16175 op_null(o->op_next); 16176 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO 16177 | OPpOUR_INTRO); 16178 o->op_next = o->op_next->op_next; 16179 OpTYPE_set(o, OP_GVSV); 16180 } 16181 } 16182 else if (o->op_next->op_type == OP_READLINE 16183 && o->op_next->op_next->op_type == OP_CONCAT 16184 && (o->op_next->op_next->op_flags & OPf_STACKED)) 16185 { 16186 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */ 16187 OpTYPE_set(o, OP_RCATLINE); 16188 o->op_flags |= OPf_STACKED; 16189 op_null(o->op_next->op_next); 16190 op_null(o->op_next); 16191 } 16192 16193 break; 16194 16195 case OP_NOT: 16196 break; 16197 16198 case OP_AND: 16199 case OP_OR: 16200 case OP_DOR: 16201 while (cLOGOP->op_other->op_type == OP_NULL) 16202 cLOGOP->op_other = cLOGOP->op_other->op_next; 16203 while (o->op_next && ( o->op_type == o->op_next->op_type 16204 || o->op_next->op_type == OP_NULL)) 16205 o->op_next = o->op_next->op_next; 16206 16207 /* If we're an OR and our next is an AND in void context, we'll 16208 follow its op_other on short circuit, same for reverse. 16209 We can't do this with OP_DOR since if it's true, its return 16210 value is the underlying value which must be evaluated 16211 by the next op. */ 16212 if (o->op_next && 16213 ( 16214 (IS_AND_OP(o) && IS_OR_OP(o->op_next)) 16215 || (IS_OR_OP(o) && IS_AND_OP(o->op_next)) 16216 ) 16217 && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID 16218 ) { 16219 o->op_next = ((LOGOP*)o->op_next)->op_other; 16220 } 16221 DEFER(cLOGOP->op_other); 16222 o->op_opt = 1; 16223 break; 16224 16225 case OP_GREPWHILE: 16226 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR) 16227 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0); 16228 /* FALLTHROUGH */ 16229 case OP_COND_EXPR: 16230 case OP_MAPWHILE: 16231 case OP_ANDASSIGN: 16232 case OP_ORASSIGN: 16233 case OP_DORASSIGN: 16234 case OP_RANGE: 16235 case OP_ONCE: 16236 case OP_ARGDEFELEM: 16237 while (cLOGOP->op_other->op_type == OP_NULL) 16238 cLOGOP->op_other = cLOGOP->op_other->op_next; 16239 DEFER(cLOGOP->op_other); 16240 break; 16241 16242 case OP_ENTERLOOP: 16243 case OP_ENTERITER: 16244 while (cLOOP->op_redoop->op_type == OP_NULL) 16245 cLOOP->op_redoop = cLOOP->op_redoop->op_next; 16246 while (cLOOP->op_nextop->op_type == OP_NULL) 16247 cLOOP->op_nextop = cLOOP->op_nextop->op_next; 16248 while (cLOOP->op_lastop->op_type == OP_NULL) 16249 cLOOP->op_lastop = cLOOP->op_lastop->op_next; 16250 /* a while(1) loop doesn't have an op_next that escapes the 16251 * loop, so we have to explicitly follow the op_lastop to 16252 * process the rest of the code */ 16253 DEFER(cLOOP->op_lastop); 16254 break; 16255 16256 case OP_ENTERTRY: 16257 assert(cLOGOPo->op_other->op_type == OP_LEAVETRY); 16258 DEFER(cLOGOPo->op_other); 16259 break; 16260 16261 case OP_SUBST: 16262 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR) 16263 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0); 16264 assert(!(cPMOP->op_pmflags & PMf_ONCE)); 16265 while (cPMOP->op_pmstashstartu.op_pmreplstart && 16266 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL) 16267 cPMOP->op_pmstashstartu.op_pmreplstart 16268 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next; 16269 DEFER(cPMOP->op_pmstashstartu.op_pmreplstart); 16270 break; 16271 16272 case OP_SORT: { 16273 OP *oright; 16274 16275 if (o->op_flags & OPf_SPECIAL) { 16276 /* first arg is a code block */ 16277 OP * const nullop = OpSIBLING(cLISTOP->op_first); 16278 OP * kid = cUNOPx(nullop)->op_first; 16279 16280 assert(nullop->op_type == OP_NULL); 16281 assert(kid->op_type == OP_SCOPE 16282 || (kid->op_type == OP_NULL && kid->op_targ == OP_LEAVE)); 16283 /* since OP_SORT doesn't have a handy op_other-style 16284 * field that can point directly to the start of the code 16285 * block, store it in the otherwise-unused op_next field 16286 * of the top-level OP_NULL. This will be quicker at 16287 * run-time, and it will also allow us to remove leading 16288 * OP_NULLs by just messing with op_nexts without 16289 * altering the basic op_first/op_sibling layout. */ 16290 kid = kLISTOP->op_first; 16291 assert( 16292 (kid->op_type == OP_NULL 16293 && ( kid->op_targ == OP_NEXTSTATE 16294 || kid->op_targ == OP_DBSTATE )) 16295 || kid->op_type == OP_STUB 16296 || kid->op_type == OP_ENTER 16297 || (PL_parser && PL_parser->error_count)); 16298 nullop->op_next = kid->op_next; 16299 DEFER(nullop->op_next); 16300 } 16301 16302 /* check that RHS of sort is a single plain array */ 16303 oright = cUNOPo->op_first; 16304 if (!oright || oright->op_type != OP_PUSHMARK) 16305 break; 16306 16307 if (o->op_private & OPpSORT_INPLACE) 16308 break; 16309 16310 /* reverse sort ... can be optimised. */ 16311 if (!OpHAS_SIBLING(cUNOPo)) { 16312 /* Nothing follows us on the list. */ 16313 OP * const reverse = o->op_next; 16314 16315 if (reverse->op_type == OP_REVERSE && 16316 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) { 16317 OP * const pushmark = cUNOPx(reverse)->op_first; 16318 if (pushmark && (pushmark->op_type == OP_PUSHMARK) 16319 && (OpSIBLING(cUNOPx(pushmark)) == o)) { 16320 /* reverse -> pushmark -> sort */ 16321 o->op_private |= OPpSORT_REVERSE; 16322 op_null(reverse); 16323 pushmark->op_next = oright->op_next; 16324 op_null(oright); 16325 } 16326 } 16327 } 16328 16329 break; 16330 } 16331 16332 case OP_REVERSE: { 16333 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av; 16334 OP *gvop = NULL; 16335 LISTOP *enter, *exlist; 16336 16337 if (o->op_private & OPpSORT_INPLACE) 16338 break; 16339 16340 enter = (LISTOP *) o->op_next; 16341 if (!enter) 16342 break; 16343 if (enter->op_type == OP_NULL) { 16344 enter = (LISTOP *) enter->op_next; 16345 if (!enter) 16346 break; 16347 } 16348 /* for $a (...) will have OP_GV then OP_RV2GV here. 16349 for (...) just has an OP_GV. */ 16350 if (enter->op_type == OP_GV) { 16351 gvop = (OP *) enter; 16352 enter = (LISTOP *) enter->op_next; 16353 if (!enter) 16354 break; 16355 if (enter->op_type == OP_RV2GV) { 16356 enter = (LISTOP *) enter->op_next; 16357 if (!enter) 16358 break; 16359 } 16360 } 16361 16362 if (enter->op_type != OP_ENTERITER) 16363 break; 16364 16365 iter = enter->op_next; 16366 if (!iter || iter->op_type != OP_ITER) 16367 break; 16368 16369 expushmark = enter->op_first; 16370 if (!expushmark || expushmark->op_type != OP_NULL 16371 || expushmark->op_targ != OP_PUSHMARK) 16372 break; 16373 16374 exlist = (LISTOP *) OpSIBLING(expushmark); 16375 if (!exlist || exlist->op_type != OP_NULL 16376 || exlist->op_targ != OP_LIST) 16377 break; 16378 16379 if (exlist->op_last != o) { 16380 /* Mmm. Was expecting to point back to this op. */ 16381 break; 16382 } 16383 theirmark = exlist->op_first; 16384 if (!theirmark || theirmark->op_type != OP_PUSHMARK) 16385 break; 16386 16387 if (OpSIBLING(theirmark) != o) { 16388 /* There's something between the mark and the reverse, eg 16389 for (1, reverse (...)) 16390 so no go. */ 16391 break; 16392 } 16393 16394 ourmark = ((LISTOP *)o)->op_first; 16395 if (!ourmark || ourmark->op_type != OP_PUSHMARK) 16396 break; 16397 16398 ourlast = ((LISTOP *)o)->op_last; 16399 if (!ourlast || ourlast->op_next != o) 16400 break; 16401 16402 rv2av = OpSIBLING(ourmark); 16403 if (rv2av && rv2av->op_type == OP_RV2AV && !OpHAS_SIBLING(rv2av) 16404 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)) { 16405 /* We're just reversing a single array. */ 16406 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF; 16407 enter->op_flags |= OPf_STACKED; 16408 } 16409 16410 /* We don't have control over who points to theirmark, so sacrifice 16411 ours. */ 16412 theirmark->op_next = ourmark->op_next; 16413 theirmark->op_flags = ourmark->op_flags; 16414 ourlast->op_next = gvop ? gvop : (OP *) enter; 16415 op_null(ourmark); 16416 op_null(o); 16417 enter->op_private |= OPpITER_REVERSED; 16418 iter->op_private |= OPpITER_REVERSED; 16419 16420 oldoldop = NULL; 16421 oldop = ourlast; 16422 o = oldop->op_next; 16423 goto redo; 16424 NOT_REACHED; /* NOTREACHED */ 16425 break; 16426 } 16427 16428 case OP_QR: 16429 case OP_MATCH: 16430 if (!(cPMOP->op_pmflags & PMf_ONCE)) { 16431 assert (!cPMOP->op_pmstashstartu.op_pmreplstart); 16432 } 16433 break; 16434 16435 case OP_RUNCV: 16436 if (!(o->op_private & OPpOFFBYONE) && !CvCLONE(PL_compcv) 16437 && (!CvANON(PL_compcv) || (!PL_cv_has_eval && !PL_perldb))) 16438 { 16439 SV *sv; 16440 if (CvEVAL(PL_compcv)) sv = &PL_sv_undef; 16441 else { 16442 sv = newRV((SV *)PL_compcv); 16443 sv_rvweaken(sv); 16444 SvREADONLY_on(sv); 16445 } 16446 OpTYPE_set(o, OP_CONST); 16447 o->op_flags |= OPf_SPECIAL; 16448 cSVOPo->op_sv = sv; 16449 } 16450 break; 16451 16452 case OP_SASSIGN: 16453 if (OP_GIMME(o,0) == G_VOID 16454 || ( o->op_next->op_type == OP_LINESEQ 16455 && ( o->op_next->op_next->op_type == OP_LEAVESUB 16456 || ( o->op_next->op_next->op_type == OP_RETURN 16457 && !CvLVALUE(PL_compcv))))) 16458 { 16459 OP *right = cBINOP->op_first; 16460 if (right) { 16461 /* sassign 16462 * RIGHT 16463 * substr 16464 * pushmark 16465 * arg1 16466 * arg2 16467 * ... 16468 * becomes 16469 * 16470 * ex-sassign 16471 * substr 16472 * pushmark 16473 * RIGHT 16474 * arg1 16475 * arg2 16476 * ... 16477 */ 16478 OP *left = OpSIBLING(right); 16479 if (left->op_type == OP_SUBSTR 16480 && (left->op_private & 7) < 4) { 16481 op_null(o); 16482 /* cut out right */ 16483 op_sibling_splice(o, NULL, 1, NULL); 16484 /* and insert it as second child of OP_SUBSTR */ 16485 op_sibling_splice(left, cBINOPx(left)->op_first, 0, 16486 right); 16487 left->op_private |= OPpSUBSTR_REPL_FIRST; 16488 left->op_flags = 16489 (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID; 16490 } 16491 } 16492 } 16493 break; 16494 16495 case OP_AASSIGN: { 16496 int l, r, lr, lscalars, rscalars; 16497 16498 /* handle common vars detection, e.g. ($a,$b) = ($b,$a). 16499 Note that we do this now rather than in newASSIGNOP(), 16500 since only by now are aliased lexicals flagged as such 16501 16502 See the essay "Common vars in list assignment" above for 16503 the full details of the rationale behind all the conditions 16504 below. 16505 16506 PL_generation sorcery: 16507 To detect whether there are common vars, the global var 16508 PL_generation is incremented for each assign op we scan. 16509 Then we run through all the lexical variables on the LHS, 16510 of the assignment, setting a spare slot in each of them to 16511 PL_generation. Then we scan the RHS, and if any lexicals 16512 already have that value, we know we've got commonality. 16513 Also, if the generation number is already set to 16514 PERL_INT_MAX, then the variable is involved in aliasing, so 16515 we also have potential commonality in that case. 16516 */ 16517 16518 PL_generation++; 16519 /* scan LHS */ 16520 lscalars = 0; 16521 l = S_aassign_scan(aTHX_ cLISTOPo->op_last, FALSE, 1, &lscalars); 16522 /* scan RHS */ 16523 rscalars = 0; 16524 r = S_aassign_scan(aTHX_ cLISTOPo->op_first, TRUE, 1, &rscalars); 16525 lr = (l|r); 16526 16527 16528 /* After looking for things which are *always* safe, this main 16529 * if/else chain selects primarily based on the type of the 16530 * LHS, gradually working its way down from the more dangerous 16531 * to the more restrictive and thus safer cases */ 16532 16533 if ( !l /* () = ....; */ 16534 || !r /* .... = (); */ 16535 || !(l & ~AAS_SAFE_SCALAR) /* (undef, pos()) = ...; */ 16536 || !(r & ~AAS_SAFE_SCALAR) /* ... = (1,2,length,undef); */ 16537 || (lscalars < 2) /* ($x, undef) = ... */ 16538 ) { 16539 NOOP; /* always safe */ 16540 } 16541 else if (l & AAS_DANGEROUS) { 16542 /* always dangerous */ 16543 o->op_private |= OPpASSIGN_COMMON_SCALAR; 16544 o->op_private |= OPpASSIGN_COMMON_AGG; 16545 } 16546 else if (l & (AAS_PKG_SCALAR|AAS_PKG_AGG)) { 16547 /* package vars are always dangerous - too many 16548 * aliasing possibilities */ 16549 if (l & AAS_PKG_SCALAR) 16550 o->op_private |= OPpASSIGN_COMMON_SCALAR; 16551 if (l & AAS_PKG_AGG) 16552 o->op_private |= OPpASSIGN_COMMON_AGG; 16553 } 16554 else if (l & ( AAS_MY_SCALAR|AAS_MY_AGG 16555 |AAS_LEX_SCALAR|AAS_LEX_AGG)) 16556 { 16557 /* LHS contains only lexicals and safe ops */ 16558 16559 if (l & (AAS_MY_AGG|AAS_LEX_AGG)) 16560 o->op_private |= OPpASSIGN_COMMON_AGG; 16561 16562 if (l & (AAS_MY_SCALAR|AAS_LEX_SCALAR)) { 16563 if (lr & AAS_LEX_SCALAR_COMM) 16564 o->op_private |= OPpASSIGN_COMMON_SCALAR; 16565 else if ( !(l & AAS_LEX_SCALAR) 16566 && (r & AAS_DEFAV)) 16567 { 16568 /* falsely mark 16569 * my (...) = @_ 16570 * as scalar-safe for performance reasons. 16571 * (it will still have been marked _AGG if necessary */ 16572 NOOP; 16573 } 16574 else if (r & (AAS_PKG_SCALAR|AAS_PKG_AGG|AAS_DANGEROUS)) 16575 /* if there are only lexicals on the LHS and no 16576 * common ones on the RHS, then we assume that the 16577 * only way those lexicals could also get 16578 * on the RHS is via some sort of dereffing or 16579 * closure, e.g. 16580 * $r = \$lex; 16581 * ($lex, $x) = (1, $$r) 16582 * and in this case we assume the var must have 16583 * a bumped ref count. So if its ref count is 1, 16584 * it must only be on the LHS. 16585 */ 16586 o->op_private |= OPpASSIGN_COMMON_RC1; 16587 } 16588 } 16589 16590 /* ... = ($x) 16591 * may have to handle aggregate on LHS, but we can't 16592 * have common scalars. */ 16593 if (rscalars < 2) 16594 o->op_private &= 16595 ~(OPpASSIGN_COMMON_SCALAR|OPpASSIGN_COMMON_RC1); 16596 16597 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR) 16598 S_check_for_bool_cxt(o, 1, OPpASSIGN_TRUEBOOL, 0); 16599 break; 16600 } 16601 16602 case OP_REF: 16603 /* see if ref() is used in boolean context */ 16604 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR) 16605 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, OPpMAYBE_TRUEBOOL); 16606 break; 16607 16608 case OP_LENGTH: 16609 /* see if the op is used in known boolean context, 16610 * but not if OA_TARGLEX optimisation is enabled */ 16611 if ( (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR 16612 && !(o->op_private & OPpTARGET_MY) 16613 ) 16614 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0); 16615 break; 16616 16617 case OP_POS: 16618 /* see if the op is used in known boolean context */ 16619 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR) 16620 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0); 16621 break; 16622 16623 case OP_CUSTOM: { 16624 Perl_cpeep_t cpeep = 16625 XopENTRYCUSTOM(o, xop_peep); 16626 if (cpeep) 16627 cpeep(aTHX_ o, oldop); 16628 break; 16629 } 16630 16631 } 16632 /* did we just null the current op? If so, re-process it to handle 16633 * eliding "empty" ops from the chain */ 16634 if (o->op_type == OP_NULL && oldop && oldop->op_next == o) { 16635 o->op_opt = 0; 16636 o = oldop; 16637 } 16638 else { 16639 oldoldop = oldop; 16640 oldop = o; 16641 } 16642 } 16643 LEAVE; 16644 } 16645 16646 void 16647 Perl_peep(pTHX_ OP *o) 16648 { 16649 CALL_RPEEP(o); 16650 } 16651 16652 /* 16653 =head1 Custom Operators 16654 16655 =for apidoc Ao||custom_op_xop 16656 Return the XOP structure for a given custom op. This macro should be 16657 considered internal to C<OP_NAME> and the other access macros: use them instead. 16658 This macro does call a function. Prior 16659 to 5.19.6, this was implemented as a 16660 function. 16661 16662 =cut 16663 */ 16664 16665 16666 /* use PERL_MAGIC_ext to call a function to free the xop structure when 16667 * freeing PL_custom_ops */ 16668 16669 static int 16670 custom_op_register_free(pTHX_ SV *sv, MAGIC *mg) 16671 { 16672 XOP *xop; 16673 16674 PERL_UNUSED_ARG(mg); 16675 xop = INT2PTR(XOP *, SvIV(sv)); 16676 Safefree(xop->xop_name); 16677 Safefree(xop->xop_desc); 16678 Safefree(xop); 16679 return 0; 16680 } 16681 16682 16683 static const MGVTBL custom_op_register_vtbl = { 16684 0, /* get */ 16685 0, /* set */ 16686 0, /* len */ 16687 0, /* clear */ 16688 custom_op_register_free, /* free */ 16689 0, /* copy */ 16690 0, /* dup */ 16691 #ifdef MGf_LOCAL 16692 0, /* local */ 16693 #endif 16694 }; 16695 16696 16697 XOPRETANY 16698 Perl_custom_op_get_field(pTHX_ const OP *o, const xop_flags_enum field) 16699 { 16700 SV *keysv; 16701 HE *he = NULL; 16702 XOP *xop; 16703 16704 static const XOP xop_null = { 0, 0, 0, 0, 0 }; 16705 16706 PERL_ARGS_ASSERT_CUSTOM_OP_GET_FIELD; 16707 assert(o->op_type == OP_CUSTOM); 16708 16709 /* This is wrong. It assumes a function pointer can be cast to IV, 16710 * which isn't guaranteed, but this is what the old custom OP code 16711 * did. In principle it should be safer to Copy the bytes of the 16712 * pointer into a PV: since the new interface is hidden behind 16713 * functions, this can be changed later if necessary. */ 16714 /* Change custom_op_xop if this ever happens */ 16715 keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr))); 16716 16717 if (PL_custom_ops) 16718 he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0); 16719 16720 /* See if the op isn't registered, but its name *is* registered. 16721 * That implies someone is using the pre-5.14 API,where only name and 16722 * description could be registered. If so, fake up a real 16723 * registration. 16724 * We only check for an existing name, and assume no one will have 16725 * just registered a desc */ 16726 if (!he && PL_custom_op_names && 16727 (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0)) 16728 ) { 16729 const char *pv; 16730 STRLEN l; 16731 16732 /* XXX does all this need to be shared mem? */ 16733 Newxz(xop, 1, XOP); 16734 pv = SvPV(HeVAL(he), l); 16735 XopENTRY_set(xop, xop_name, savepvn(pv, l)); 16736 if (PL_custom_op_descs && 16737 (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0)) 16738 ) { 16739 pv = SvPV(HeVAL(he), l); 16740 XopENTRY_set(xop, xop_desc, savepvn(pv, l)); 16741 } 16742 Perl_custom_op_register(aTHX_ o->op_ppaddr, xop); 16743 he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0); 16744 /* add magic to the SV so that the xop struct (pointed to by 16745 * SvIV(sv)) is freed. Normally a static xop is registered, but 16746 * for this backcompat hack, we've alloced one */ 16747 (void)sv_magicext(HeVAL(he), NULL, PERL_MAGIC_ext, 16748 &custom_op_register_vtbl, NULL, 0); 16749 16750 } 16751 else { 16752 if (!he) 16753 xop = (XOP *)&xop_null; 16754 else 16755 xop = INT2PTR(XOP *, SvIV(HeVAL(he))); 16756 } 16757 { 16758 XOPRETANY any; 16759 if(field == XOPe_xop_ptr) { 16760 any.xop_ptr = xop; 16761 } else { 16762 const U32 flags = XopFLAGS(xop); 16763 if(flags & field) { 16764 switch(field) { 16765 case XOPe_xop_name: 16766 any.xop_name = xop->xop_name; 16767 break; 16768 case XOPe_xop_desc: 16769 any.xop_desc = xop->xop_desc; 16770 break; 16771 case XOPe_xop_class: 16772 any.xop_class = xop->xop_class; 16773 break; 16774 case XOPe_xop_peep: 16775 any.xop_peep = xop->xop_peep; 16776 break; 16777 default: 16778 NOT_REACHED; /* NOTREACHED */ 16779 break; 16780 } 16781 } else { 16782 switch(field) { 16783 case XOPe_xop_name: 16784 any.xop_name = XOPd_xop_name; 16785 break; 16786 case XOPe_xop_desc: 16787 any.xop_desc = XOPd_xop_desc; 16788 break; 16789 case XOPe_xop_class: 16790 any.xop_class = XOPd_xop_class; 16791 break; 16792 case XOPe_xop_peep: 16793 any.xop_peep = XOPd_xop_peep; 16794 break; 16795 default: 16796 NOT_REACHED; /* NOTREACHED */ 16797 break; 16798 } 16799 } 16800 } 16801 /* On some platforms (HP-UX, IA64) gcc emits a warning for this function: 16802 * op.c: In function 'Perl_custom_op_get_field': 16803 * op.c:...: warning: 'any.xop_name' may be used uninitialized in this function [-Wmaybe-uninitialized] 16804 * This is because on those platforms (with -DEBUGGING) NOT_REACHED 16805 * expands to assert(0), which expands to ((0) ? (void)0 : 16806 * __assert(...)), and gcc doesn't know that __assert can never return. */ 16807 return any; 16808 } 16809 } 16810 16811 /* 16812 =for apidoc Ao||custom_op_register 16813 Register a custom op. See L<perlguts/"Custom Operators">. 16814 16815 =cut 16816 */ 16817 16818 void 16819 Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop) 16820 { 16821 SV *keysv; 16822 16823 PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER; 16824 16825 /* see the comment in custom_op_xop */ 16826 keysv = sv_2mortal(newSViv(PTR2IV(ppaddr))); 16827 16828 if (!PL_custom_ops) 16829 PL_custom_ops = newHV(); 16830 16831 if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0)) 16832 Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name); 16833 } 16834 16835 /* 16836 16837 =for apidoc core_prototype 16838 16839 This function assigns the prototype of the named core function to C<sv>, or 16840 to a new mortal SV if C<sv> is C<NULL>. It returns the modified C<sv>, or 16841 C<NULL> if the core function has no prototype. C<code> is a code as returned 16842 by C<keyword()>. It must not be equal to 0. 16843 16844 =cut 16845 */ 16846 16847 SV * 16848 Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code, 16849 int * const opnum) 16850 { 16851 int i = 0, n = 0, seen_question = 0, defgv = 0; 16852 I32 oa; 16853 #define MAX_ARGS_OP ((sizeof(I32) - 1) * 2) 16854 char str[ MAX_ARGS_OP * 2 + 2 ]; /* One ';', one '\0' */ 16855 bool nullret = FALSE; 16856 16857 PERL_ARGS_ASSERT_CORE_PROTOTYPE; 16858 16859 assert (code); 16860 16861 if (!sv) sv = sv_newmortal(); 16862 16863 #define retsetpvs(x,y) sv_setpvs(sv, x); if(opnum) *opnum=(y); return sv 16864 16865 switch (code < 0 ? -code : code) { 16866 case KEY_and : case KEY_chop: case KEY_chomp: 16867 case KEY_cmp : case KEY_defined: case KEY_delete: case KEY_exec : 16868 case KEY_exists: case KEY_eq : case KEY_ge : case KEY_goto : 16869 case KEY_grep : case KEY_gt : case KEY_last : case KEY_le : 16870 case KEY_lt : case KEY_map : case KEY_ne : case KEY_next : 16871 case KEY_or : case KEY_print : case KEY_printf: case KEY_qr : 16872 case KEY_redo : case KEY_require: case KEY_return: case KEY_say : 16873 case KEY_select: case KEY_sort : case KEY_split : case KEY_system: 16874 case KEY_x : case KEY_xor : 16875 if (!opnum) return NULL; nullret = TRUE; goto findopnum; 16876 case KEY_glob: retsetpvs("_;", OP_GLOB); 16877 case KEY_keys: retsetpvs("\\[%@]", OP_KEYS); 16878 case KEY_values: retsetpvs("\\[%@]", OP_VALUES); 16879 case KEY_each: retsetpvs("\\[%@]", OP_EACH); 16880 case KEY_pos: retsetpvs(";\\[$*]", OP_POS); 16881 case KEY___FILE__: case KEY___LINE__: case KEY___PACKAGE__: 16882 retsetpvs("", 0); 16883 case KEY_evalbytes: 16884 name = "entereval"; break; 16885 case KEY_readpipe: 16886 name = "backtick"; 16887 } 16888 16889 #undef retsetpvs 16890 16891 findopnum: 16892 while (i < MAXO) { /* The slow way. */ 16893 if (strEQ(name, PL_op_name[i]) 16894 || strEQ(name, PL_op_desc[i])) 16895 { 16896 if (nullret) { assert(opnum); *opnum = i; return NULL; } 16897 goto found; 16898 } 16899 i++; 16900 } 16901 return NULL; 16902 found: 16903 defgv = PL_opargs[i] & OA_DEFGV; 16904 oa = PL_opargs[i] >> OASHIFT; 16905 while (oa) { 16906 if (oa & OA_OPTIONAL && !seen_question && ( 16907 !defgv || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF 16908 )) { 16909 seen_question = 1; 16910 str[n++] = ';'; 16911 } 16912 if ((oa & (OA_OPTIONAL - 1)) >= OA_AVREF 16913 && (oa & (OA_OPTIONAL - 1)) <= OA_SCALARREF 16914 /* But globs are already references (kinda) */ 16915 && (oa & (OA_OPTIONAL - 1)) != OA_FILEREF 16916 ) { 16917 str[n++] = '\\'; 16918 } 16919 if ((oa & (OA_OPTIONAL - 1)) == OA_SCALARREF 16920 && !scalar_mod_type(NULL, i)) { 16921 str[n++] = '['; 16922 str[n++] = '$'; 16923 str[n++] = '@'; 16924 str[n++] = '%'; 16925 if (i == OP_LOCK || i == OP_UNDEF) str[n++] = '&'; 16926 str[n++] = '*'; 16927 str[n++] = ']'; 16928 } 16929 else str[n++] = ("?$@@%&*$")[oa & (OA_OPTIONAL - 1)]; 16930 if (oa & OA_OPTIONAL && defgv && str[n-1] == '$') { 16931 str[n-1] = '_'; defgv = 0; 16932 } 16933 oa = oa >> 4; 16934 } 16935 if (code == -KEY_not || code == -KEY_getprotobynumber) str[n++] = ';'; 16936 str[n++] = '\0'; 16937 sv_setpvn(sv, str, n - 1); 16938 if (opnum) *opnum = i; 16939 return sv; 16940 } 16941 16942 OP * 16943 Perl_coresub_op(pTHX_ SV * const coreargssv, const int code, 16944 const int opnum) 16945 { 16946 OP * const argop = (opnum == OP_SELECT && code) ? NULL : 16947 newSVOP(OP_COREARGS,0,coreargssv); 16948 OP *o; 16949 16950 PERL_ARGS_ASSERT_CORESUB_OP; 16951 16952 switch(opnum) { 16953 case 0: 16954 return op_append_elem(OP_LINESEQ, 16955 argop, 16956 newSLICEOP(0, 16957 newSVOP(OP_CONST, 0, newSViv(-code % 3)), 16958 newOP(OP_CALLER,0) 16959 ) 16960 ); 16961 case OP_EACH: 16962 case OP_KEYS: 16963 case OP_VALUES: 16964 o = newUNOP(OP_AVHVSWITCH,0,argop); 16965 o->op_private = opnum-OP_EACH; 16966 return o; 16967 case OP_SELECT: /* which represents OP_SSELECT as well */ 16968 if (code) 16969 return newCONDOP( 16970 0, 16971 newBINOP(OP_GT, 0, 16972 newAVREF(newGVOP(OP_GV, 0, PL_defgv)), 16973 newSVOP(OP_CONST, 0, newSVuv(1)) 16974 ), 16975 coresub_op(newSVuv((UV)OP_SSELECT), 0, 16976 OP_SSELECT), 16977 coresub_op(coreargssv, 0, OP_SELECT) 16978 ); 16979 /* FALLTHROUGH */ 16980 default: 16981 switch (PL_opargs[opnum] & OA_CLASS_MASK) { 16982 case OA_BASEOP: 16983 return op_append_elem( 16984 OP_LINESEQ, argop, 16985 newOP(opnum, 16986 opnum == OP_WANTARRAY || opnum == OP_RUNCV 16987 ? OPpOFFBYONE << 8 : 0) 16988 ); 16989 case OA_BASEOP_OR_UNOP: 16990 if (opnum == OP_ENTEREVAL) { 16991 o = newUNOP(OP_ENTEREVAL,OPpEVAL_COPHH<<8,argop); 16992 if (code == -KEY_evalbytes) o->op_private |= OPpEVAL_BYTES; 16993 } 16994 else o = newUNOP(opnum,0,argop); 16995 if (opnum == OP_CALLER) o->op_private |= OPpOFFBYONE; 16996 else { 16997 onearg: 16998 if (is_handle_constructor(o, 1)) 16999 argop->op_private |= OPpCOREARGS_DEREF1; 17000 if (scalar_mod_type(NULL, opnum)) 17001 argop->op_private |= OPpCOREARGS_SCALARMOD; 17002 } 17003 return o; 17004 default: 17005 o = op_convert_list(opnum,OPf_SPECIAL*(opnum == OP_GLOB),argop); 17006 if (is_handle_constructor(o, 2)) 17007 argop->op_private |= OPpCOREARGS_DEREF2; 17008 if (opnum == OP_SUBSTR) { 17009 o->op_private |= OPpMAYBE_LVSUB; 17010 return o; 17011 } 17012 else goto onearg; 17013 } 17014 } 17015 } 17016 17017 void 17018 Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv, 17019 SV * const *new_const_svp) 17020 { 17021 const char *hvname; 17022 bool is_const = !!CvCONST(old_cv); 17023 SV *old_const_sv = is_const ? cv_const_sv(old_cv) : NULL; 17024 17025 PERL_ARGS_ASSERT_REPORT_REDEFINED_CV; 17026 17027 if (is_const && new_const_svp && old_const_sv == *new_const_svp) 17028 return; 17029 /* They are 2 constant subroutines generated from 17030 the same constant. This probably means that 17031 they are really the "same" proxy subroutine 17032 instantiated in 2 places. Most likely this is 17033 when a constant is exported twice. Don't warn. 17034 */ 17035 if ( 17036 (ckWARN(WARN_REDEFINE) 17037 && !( 17038 CvGV(old_cv) && GvSTASH(CvGV(old_cv)) 17039 && HvNAMELEN(GvSTASH(CvGV(old_cv))) == 7 17040 && (hvname = HvNAME(GvSTASH(CvGV(old_cv))), 17041 strEQ(hvname, "autouse")) 17042 ) 17043 ) 17044 || (is_const 17045 && ckWARN_d(WARN_REDEFINE) 17046 && (!new_const_svp || sv_cmp(old_const_sv, *new_const_svp)) 17047 ) 17048 ) 17049 Perl_warner(aTHX_ packWARN(WARN_REDEFINE), 17050 is_const 17051 ? "Constant subroutine %" SVf " redefined" 17052 : "Subroutine %" SVf " redefined", 17053 SVfARG(name)); 17054 } 17055 17056 /* 17057 =head1 Hook manipulation 17058 17059 These functions provide convenient and thread-safe means of manipulating 17060 hook variables. 17061 17062 =cut 17063 */ 17064 17065 /* 17066 =for apidoc Am|void|wrap_op_checker|Optype opcode|Perl_check_t new_checker|Perl_check_t *old_checker_p 17067 17068 Puts a C function into the chain of check functions for a specified op 17069 type. This is the preferred way to manipulate the L</PL_check> array. 17070 C<opcode> specifies which type of op is to be affected. C<new_checker> 17071 is a pointer to the C function that is to be added to that opcode's 17072 check chain, and C<old_checker_p> points to the storage location where a 17073 pointer to the next function in the chain will be stored. The value of 17074 C<new_checker> is written into the L</PL_check> array, while the value 17075 previously stored there is written to C<*old_checker_p>. 17076 17077 L</PL_check> is global to an entire process, and a module wishing to 17078 hook op checking may find itself invoked more than once per process, 17079 typically in different threads. To handle that situation, this function 17080 is idempotent. The location C<*old_checker_p> must initially (once 17081 per process) contain a null pointer. A C variable of static duration 17082 (declared at file scope, typically also marked C<static> to give 17083 it internal linkage) will be implicitly initialised appropriately, 17084 if it does not have an explicit initialiser. This function will only 17085 actually modify the check chain if it finds C<*old_checker_p> to be null. 17086 This function is also thread safe on the small scale. It uses appropriate 17087 locking to avoid race conditions in accessing L</PL_check>. 17088 17089 When this function is called, the function referenced by C<new_checker> 17090 must be ready to be called, except for C<*old_checker_p> being unfilled. 17091 In a threading situation, C<new_checker> may be called immediately, 17092 even before this function has returned. C<*old_checker_p> will always 17093 be appropriately set before C<new_checker> is called. If C<new_checker> 17094 decides not to do anything special with an op that it is given (which 17095 is the usual case for most uses of op check hooking), it must chain the 17096 check function referenced by C<*old_checker_p>. 17097 17098 Taken all together, XS code to hook an op checker should typically look 17099 something like this: 17100 17101 static Perl_check_t nxck_frob; 17102 static OP *myck_frob(pTHX_ OP *op) { 17103 ... 17104 op = nxck_frob(aTHX_ op); 17105 ... 17106 return op; 17107 } 17108 BOOT: 17109 wrap_op_checker(OP_FROB, myck_frob, &nxck_frob); 17110 17111 If you want to influence compilation of calls to a specific subroutine, 17112 then use L</cv_set_call_checker_flags> rather than hooking checking of 17113 all C<entersub> ops. 17114 17115 =cut 17116 */ 17117 17118 void 17119 Perl_wrap_op_checker(pTHX_ Optype opcode, 17120 Perl_check_t new_checker, Perl_check_t *old_checker_p) 17121 { 17122 dVAR; 17123 17124 PERL_UNUSED_CONTEXT; 17125 PERL_ARGS_ASSERT_WRAP_OP_CHECKER; 17126 if (*old_checker_p) return; 17127 OP_CHECK_MUTEX_LOCK; 17128 if (!*old_checker_p) { 17129 *old_checker_p = PL_check[opcode]; 17130 PL_check[opcode] = new_checker; 17131 } 17132 OP_CHECK_MUTEX_UNLOCK; 17133 } 17134 17135 #include "XSUB.h" 17136 17137 /* Efficient sub that returns a constant scalar value. */ 17138 static void 17139 const_sv_xsub(pTHX_ CV* cv) 17140 { 17141 dXSARGS; 17142 SV *const sv = MUTABLE_SV(XSANY.any_ptr); 17143 PERL_UNUSED_ARG(items); 17144 if (!sv) { 17145 XSRETURN(0); 17146 } 17147 EXTEND(sp, 1); 17148 ST(0) = sv; 17149 XSRETURN(1); 17150 } 17151 17152 static void 17153 const_av_xsub(pTHX_ CV* cv) 17154 { 17155 dXSARGS; 17156 AV * const av = MUTABLE_AV(XSANY.any_ptr); 17157 SP -= items; 17158 assert(av); 17159 #ifndef DEBUGGING 17160 if (!av) { 17161 XSRETURN(0); 17162 } 17163 #endif 17164 if (SvRMAGICAL(av)) 17165 Perl_croak(aTHX_ "Magical list constants are not supported"); 17166 if (GIMME_V != G_ARRAY) { 17167 EXTEND(SP, 1); 17168 ST(0) = sv_2mortal(newSViv((IV)AvFILLp(av)+1)); 17169 XSRETURN(1); 17170 } 17171 EXTEND(SP, AvFILLp(av)+1); 17172 Copy(AvARRAY(av), &ST(0), AvFILLp(av)+1, SV *); 17173 XSRETURN(AvFILLp(av)+1); 17174 } 17175 17176 /* Copy an existing cop->cop_warnings field. 17177 * If it's one of the standard addresses, just re-use the address. 17178 * This is the e implementation for the DUP_WARNINGS() macro 17179 */ 17180 17181 STRLEN* 17182 Perl_dup_warnings(pTHX_ STRLEN* warnings) 17183 { 17184 Size_t size; 17185 STRLEN *new_warnings; 17186 17187 if (warnings == NULL || specialWARN(warnings)) 17188 return warnings; 17189 17190 size = sizeof(*warnings) + *warnings; 17191 17192 new_warnings = (STRLEN*)PerlMemShared_malloc(size); 17193 Copy(warnings, new_warnings, size, char); 17194 return new_warnings; 17195 } 17196 17197 /* 17198 * ex: set ts=8 sts=4 sw=4 et: 17199 */ 17200