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
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.
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
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
25 * Note that during the build of miniperl, a temporary copy of this file
26 * is made, called opmini.c.
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.
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):
44 * newBINOP(OP_ADD, flags,
46 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
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
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:
65 * with the intended execution order being:
67 * [PREV] => A => B => [*] => C => D => [/] => [+] => [NEXT]
69 * At this point all the nodes' op_next pointers will have been set,
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
84 * [*] => A; A => B; B => [*]
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.
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.
97 * In summary: given a subtree, its top-level node's op_next will either
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
106 Here's an older description from Larry.
108 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
112 An execution-order pass
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
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.
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.
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.
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.
164 #include "keywords.h"
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)
172 static const char array_passed_to_stat[] = "Array passed to stat will be coerced to a scalar";
174 /* Used to avoid recursion through the op tree in scalarvoid() and
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) \
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 *); \
191 defer_stack[++defer_ix] = o; \
193 #define DEFER_REVERSE(count) \
197 OP **top = defer_stack + defer_ix; \
198 /* top - (cnt) + 1 isn't safe here */ \
199 OP **bottom = top - (cnt - 1); \
201 assert(bottom >= defer_stack); \
202 while (top > bottom) { \
210 #define POP_DEFERRED_OP() (defer_ix >= 0 ? defer_stack[defer_ix--] : (OP *)NULL)
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.
218 S_prune_chain_head(OP** 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)
226 *op_p = (*op_p)->op_next;
230 /* See the explanatory comments above struct opslab in op.h. */
232 #ifdef PERL_DEBUG_READONLY_OPS
233 # define PERL_SLAB_SIZE 128
234 # define PERL_MAX_SLAB_SIZE 4096
235 # include <sys/mman.h>
238 #ifndef PERL_SLAB_SIZE
239 # define PERL_SLAB_SIZE 64
241 #ifndef PERL_MAX_SLAB_SIZE
242 # define PERL_MAX_SLAB_SIZE 2048
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)))
249 /* malloc a new op slab (suitable for attaching to PL_compcv) */
252 S_new_slab(pTHX_ size_t sz)
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");
264 slab->opslab_size = (U16)sz;
266 OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
269 /* The context is unused in non-Windows */
272 slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
276 /* requires double parens and aTHX_ */
277 #define DEBUG_S_warn(args) \
279 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
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.
289 Perl_Slab_Alloc(pTHX_ size_t sz)
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)))
306 o = (OP*)PerlMemShared_calloc(1, sz);
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
316 if (!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 */
322 else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
324 opsz = SIZE_TO_PSIZE(sz);
325 sz = opsz + OPSLOT_HEADER_P;
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;
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)); }
341 Zero(o, opsz, I32 *);
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; \
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. */
359 /* If we can fit a BASEOP, add it to the free chain, so as not
361 if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
362 slot = &slab2->opslab_slots;
364 o->op_type = OP_FREED;
365 o->op_next = slab->opslab_freed;
366 slab->opslab_freed = o;
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
375 : (DIFF(slab2, slot)+1)*2);
376 slab2->opslab_next = slab->opslab_next;
377 slab->opslab_next = slab2;
379 assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
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;
388 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", (void*)o, (void*)slab));
391 /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
392 assert(!o->op_moresib);
393 assert(!o->op_sibparent);
400 #ifdef PERL_DEBUG_READONLY_OPS
402 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
404 PERL_ARGS_ASSERT_SLAB_TO_RO;
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);
418 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
422 PERL_ARGS_ASSERT_SLAB_TO_RW;
424 if (!slab->opslab_readonly) return;
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);
435 slab->opslab_readonly = 0;
439 # define Slab_to_rw(op) NOOP
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
446 # define PerlMemShared PerlMem
449 /* make freed ops die if they're inadvertently executed */
454 DIE(aTHX_ "panic: freed op 0x%p called\n", PL_op);
459 /* Return the block of memory used by an op to the free list of
460 * the OP slab associated with that op.
464 Perl_Slab_Free(pTHX_ void *op)
466 OP * const o = (OP *)op;
469 PERL_ARGS_ASSERT_SLAB_FREE;
472 o->op_ppaddr = S_pp_freed;
475 if (!o->op_slabbed) {
477 PerlMemShared_free(op);
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);
492 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
494 const bool havepad = !!PL_comppad;
495 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
498 PAD_SAVE_SETNULLPAD();
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).
515 Perl_opslab_free(pTHX_ OPSLAB *slab)
518 PERL_ARGS_ASSERT_OPSLAB_FREE;
520 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
521 assert(slab->opslab_refcnt == 1);
523 slab2 = slab->opslab_next;
525 slab->opslab_refcnt = ~(size_t)0;
527 #ifdef PERL_DEBUG_READONLY_OPS
528 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
530 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
531 perror("munmap failed");
535 PerlMemShared_free(slab);
541 /* like opslab_free(), but first calls op_free() on any ops in the slab
542 * not marked as OP_FREED
546 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
550 size_t savestack_count = 0;
552 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
556 for (slot = slab2->opslab_first;
558 slot = slot->opslot_next) {
559 if (slot->opslot_op.op_type != OP_FREED
560 && !(slot->opslot_op.op_savefree
566 assert(slot->opslot_op.op_slabbed);
567 op_free(&slot->opslot_op);
568 if (slab->opslab_refcnt == 1) goto free;
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 */
575 assert(savestack_count == slab->opslab_refcnt-1);
577 /* Remove the CV’s reference count. */
578 slab->opslab_refcnt--;
585 #ifdef PERL_DEBUG_READONLY_OPS
587 Perl_op_refcnt_inc(pTHX_ OP *o)
590 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
591 if (slab && slab->opslab_readonly) {
604 Perl_op_refcnt_dec(pTHX_ OP *o)
607 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
609 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
611 if (slab && slab->opslab_readonly) {
613 result = --o->op_targ;
616 result = --o->op_targ;
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.
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]), \
630 : PL_check[type](aTHX_ (OP*)o))
632 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
634 #define OpTYPE_set(o,type) \
636 o->op_type = (OPCODE)type; \
637 o->op_ppaddr = PL_ppaddr[type]; \
641 S_no_fh_allowed(pTHX_ OP *o)
643 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
645 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
651 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
653 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
654 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
659 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
661 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
663 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
668 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
670 PERL_ARGS_ASSERT_BAD_TYPE_PV;
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);
676 /* remove flags var, its unused in all callers, move to to right end since gv
677 and kid are always the same */
679 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
681 SV * const namesv = cv_name((CV *)gv, NULL, 0);
682 PERL_ARGS_ASSERT_BAD_TYPE_GV;
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));
689 S_no_bareword_allowed(pTHX_ OP *o)
691 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
693 qerror(Perl_mess(aTHX_
694 "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use",
696 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
699 /* "register" allocation */
702 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
705 const bool is_our = (PL_parser->in_my == KEY_our);
707 PERL_ARGS_ASSERT_ALLOCMY;
709 if (flags & ~SVf_UTF8)
710 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
713 /* complain about "my $<special_var>" etc etc */
717 || ( (flags & SVf_UTF8)
718 && isIDFIRST_utf8_safe((U8 *)name+1, name + len))
719 || (name[1] == '_' && len > 2)))
721 if (!(flags & SVf_UTF8 && UTF8_IS_START(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"));
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);
734 /* allocate a spare slot and store the name in that slot */
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,
741 /* $_ is always in main::, even with our */
742 ? (PL_curstash && !memEQs(name,len,"$_")
748 /* anon sub prototypes contains state vars should always be cloned,
749 * otherwise the state var would be shared between anon subs */
751 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
752 CvCLONE_on(PL_compcv);
758 =head1 Optree Manipulation Functions
760 =for apidoc alloccopstash
762 Available only under threaded builds, this function allocates an entry in
763 C<PL_stashpad> for the stash passed to it.
770 Perl_alloccopstash(pTHX_ HV *hv)
772 PADOFFSET off = 0, o = 1;
773 bool found_slot = FALSE;
775 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
777 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
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;
785 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
786 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
787 off = PL_stashpadmax;
788 PL_stashpadmax += 10;
791 PL_stashpad[PL_stashpadix = off] = hv;
796 /* free the body of an op without examining its contents.
797 * Always use this rather than FreeOp directly */
800 S_op_destroy(pTHX_ OP *o)
808 =for apidoc Am|void|op_free|OP *o
810 Free an op. Only use this when an op is no longer linked to from any
817 Perl_op_free(pTHX_ OP *o)
825 /* Though ops may be freed twice, freeing the op after its slab is a
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)
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 */
846 if ( o->op_ppaddr == PL_ppaddr[o->op_type]
848 && !PL_parser->error_count)
850 assert(!(o->op_private & ~PL_op_private_valid[type]));
854 if (o->op_private & OPpREFCOUNTED) {
865 refcnt = OpREFCNT_dec(o);
868 /* Need to find and remove any pattern match ops from the list
869 we maintain for reset(). */
870 find_and_forget_pmops(o);
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
885 if (o->op_flags & OPf_KIDS) {
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
895 if (!(kid->op_flags & OPf_KIDS))
896 /* If it has no kids, just free it now */
903 type = (OPCODE)o->op_targ;
906 Slab_to_rw(OpSLAB(o));
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) {
918 } while ( (o = POP_DEFERRED_OP()) );
923 /* S_op_clear_gv(): free a GV attached to an OP */
927 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
929 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
933 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
934 || o->op_type == OP_MULTIDEREF)
937 ? ((GV*)PAD_SVl(*ixp)) : NULL;
939 ? (GV*)(*svp) : NULL;
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);
958 SvREFCNT_inc_simple_void(gv);
961 pad_swipe(*ixp, TRUE);
969 int try_downgrade = SvREFCNT(gv) == 2;
972 gv_try_downgrade(gv);
978 Perl_op_clear(pTHX_ OP *o)
983 PERL_ARGS_ASSERT_OP_CLEAR;
985 switch (o->op_type) {
986 case OP_NULL: /* Was holding old type, if any. */
989 case OP_ENTEREVAL: /* Was holding hints. */
990 case OP_ARGDEFELEM: /* Was holding signature index. */
994 if (!(o->op_flags & OPf_REF)
995 || (PL_check[o->op_type] != Perl_ck_ftst))
1002 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
1004 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
1007 case OP_METHOD_REDIR:
1008 case OP_METHOD_REDIR_SUPER:
1010 if (cMETHOPx(o)->op_rclass_targ) {
1011 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
1012 cMETHOPx(o)->op_rclass_targ = 0;
1015 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
1016 cMETHOPx(o)->op_rclass_sv = NULL;
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;
1025 pad_swipe(o->op_targ, 1);
1032 SvREFCNT_dec(cSVOPo->op_sv);
1033 cSVOPo->op_sv = NULL;
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.
1042 pad_swipe(o->op_targ,1);
1052 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
1057 if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR)
1058 && (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)))
1061 if (cPADOPo->op_padix > 0) {
1062 pad_swipe(cPADOPo->op_padix, TRUE);
1063 cPADOPo->op_padix = 0;
1066 SvREFCNT_dec(cSVOPo->op_sv);
1067 cSVOPo->op_sv = NULL;
1071 PerlMemShared_free(cPVOPo->op_pv);
1072 cPVOPo->op_pv = NULL;
1076 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
1080 if ( (o->op_private & OPpSPLIT_ASSIGN) /* @array = split */
1081 && !(o->op_flags & OPf_STACKED)) /* @{expr} = split */
1083 if (o->op_private & OPpSPLIT_LEX)
1084 pad_free(cPMOPo->op_pmreplrootu.op_pmtargetoff);
1087 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
1089 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
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
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,
1116 ReREFCNT_dec(PM_GETRE(cPMOPo));
1117 PM_SETRE(cPMOPo, NULL);
1123 PerlMemShared_free(cUNOP_AUXo->op_aux);
1126 case OP_MULTICONCAT:
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;
1135 PerlMemShared_free(p1);
1137 PerlMemShared_free(p2);
1138 PerlMemShared_free(aux);
1144 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
1145 UV actions = items->uv;
1147 bool is_hash = FALSE;
1150 switch (actions & MDEREF_ACTION_MASK) {
1153 actions = (++items)->uv;
1156 case MDEREF_HV_padhv_helem:
1159 case MDEREF_AV_padav_aelem:
1160 pad_free((++items)->pad_offset);
1163 case MDEREF_HV_gvhv_helem:
1166 case MDEREF_AV_gvav_aelem:
1168 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1170 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1174 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1177 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1179 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1181 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1183 goto do_vivify_rv2xv_elem;
1185 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1188 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1189 pad_free((++items)->pad_offset);
1190 goto do_vivify_rv2xv_elem;
1192 case MDEREF_HV_pop_rv2hv_helem:
1193 case MDEREF_HV_vivify_rv2hv_helem:
1196 do_vivify_rv2xv_elem:
1197 case MDEREF_AV_pop_rv2av_aelem:
1198 case MDEREF_AV_vivify_rv2av_aelem:
1200 switch (actions & MDEREF_INDEX_MASK) {
1201 case MDEREF_INDEX_none:
1204 case MDEREF_INDEX_const:
1208 pad_swipe((++items)->pad_offset, 1);
1210 SvREFCNT_dec((++items)->sv);
1216 case MDEREF_INDEX_padsv:
1217 pad_free((++items)->pad_offset);
1219 case MDEREF_INDEX_gvsv:
1221 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1223 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1228 if (actions & MDEREF_FLAG_last)
1241 actions >>= MDEREF_SHIFT;
1244 /* start of malloc is at op_aux[-1], where the length is
1246 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1251 if (o->op_targ > 0) {
1252 pad_free(o->op_targ);
1258 S_cop_free(pTHX_ COP* cop)
1260 PERL_ARGS_ASSERT_COP_FREE;
1263 if (! specialWARN(cop->cop_warnings))
1264 PerlMemShared_free(cop->cop_warnings);
1265 cophh_free(CopHINTHASH_get(cop));
1266 if (PL_curcop == cop)
1271 S_forget_pmop(pTHX_ PMOP *const o)
1273 HV * const pmstash = PmopSTASH(o);
1275 PERL_ARGS_ASSERT_FORGET_PMOP;
1277 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1278 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1280 PMOP **const array = (PMOP**) mg->mg_ptr;
1281 U32 count = mg->mg_len / sizeof(PMOP**);
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
1293 Safefree(mg->mg_ptr);
1306 S_find_and_forget_pmops(pTHX_ OP *o)
1308 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1310 if (o->op_flags & OPf_KIDS) {
1311 OP *kid = cUNOPo->op_first;
1313 switch (kid->op_type) {
1318 forget_pmop((PMOP*)kid);
1320 find_and_forget_pmops(kid);
1321 kid = OpSIBLING(kid);
1327 =for apidoc Am|void|op_null|OP *o
1329 Neutralizes an op when it is no longer needed, but is still linked to from
1336 Perl_op_null(pTHX_ OP *o)
1340 PERL_ARGS_ASSERT_OP_NULL;
1342 if (o->op_type == OP_NULL)
1345 o->op_targ = o->op_type;
1346 OpTYPE_set(o, OP_NULL);
1350 Perl_op_refcnt_lock(pTHX)
1351 PERL_TSA_ACQUIRE(PL_op_mutex)
1356 PERL_UNUSED_CONTEXT;
1361 Perl_op_refcnt_unlock(pTHX)
1362 PERL_TSA_RELEASE(PL_op_mutex)
1367 PERL_UNUSED_CONTEXT;
1373 =for apidoc op_sibling_splice
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.
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.
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.
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
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.
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.
1402 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1407 action before after returns
1408 ------ ----- ----- -------
1411 splice(P, A, 2, X-Y-Z) | | B-C
1415 splice(P, NULL, 1, X-Y) | | A
1419 splice(P, NULL, 3, NULL) | | A-B-C
1423 splice(P, B, 0, X-Y) | | NULL
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>>.
1434 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1438 OP *last_del = NULL;
1439 OP *last_ins = NULL;
1442 first = OpSIBLING(start);
1446 first = cLISTOPx(parent)->op_first;
1448 assert(del_count >= -1);
1450 if (del_count && 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);
1462 while (OpHAS_SIBLING(last_ins))
1463 last_ins = OpSIBLING(last_ins);
1464 OpMAYBESIB_set(last_ins, rest, NULL);
1470 OpMAYBESIB_set(start, insert, NULL);
1474 cLISTOPx(parent)->op_first = insert;
1476 parent->op_flags |= OPf_KIDS;
1478 parent->op_flags &= ~OPf_KIDS;
1482 /* update op_last etc */
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
1492 type = parent->op_type;
1493 if (type == OP_CUSTOM) {
1495 type = XopENTRYCUSTOM(parent, xop_class);
1498 if (type == OP_NULL)
1499 type = parent->op_targ;
1500 type = PL_opargs[type] & OA_CLASS_MASK;
1503 lastop = last_ins ? last_ins : start ? start : NULL;
1504 if ( type == OA_BINOP
1505 || type == OA_LISTOP
1509 cLISTOPx(parent)->op_last = lastop;
1512 OpLASTSIB_set(lastop, parent);
1514 return last_del ? first : NULL;
1517 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1521 =for apidoc op_parent
1523 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1529 Perl_op_parent(OP *o)
1531 PERL_ARGS_ASSERT_OP_PARENT;
1532 while (OpHAS_SIBLING(o))
1534 return o->op_sibparent;
1537 /* replace the sibling following start with a new UNOP, which becomes
1538 * the parent of the original sibling; e.g.
1540 * op_sibling_newUNOP(P, A, unop-args...)
1548 * where U is the new UNOP.
1550 * parent and start args are the same as for op_sibling_splice();
1551 * type and flags args are as newUNOP().
1553 * Returns the new UNOP.
1557 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1561 kid = op_sibling_splice(parent, start, 1, NULL);
1562 newop = newUNOP(type, flags, kid);
1563 op_sibling_splice(parent, start, 0, newop);
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.
1575 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1580 NewOp(1101, logop, 1, LOGOP);
1581 OpTYPE_set(logop, type);
1582 logop->op_first = first;
1583 logop->op_other = other;
1585 logop->op_flags = OPf_KIDS;
1586 while (kid && OpHAS_SIBLING(kid))
1587 kid = OpSIBLING(kid);
1589 OpLASTSIB_set(kid, (OP*)logop);
1594 /* Contextualizers */
1597 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
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
1608 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1610 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1612 case G_SCALAR: return scalar(o);
1613 case G_ARRAY: return list(o);
1614 case G_VOID: return scalarvoid(o);
1616 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
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.
1631 Perl_op_linklist(pTHX_ OP *o)
1635 PERL_ARGS_ASSERT_OP_LINKLIST;
1640 /* establish postfix order */
1641 first = cUNOPo->op_first;
1644 o->op_next = LINKLIST(first);
1647 OP *sibl = OpSIBLING(kid);
1649 kid->op_next = LINKLIST(sibl);
1664 S_scalarkids(pTHX_ OP *o)
1666 if (o && o->op_flags & OPf_KIDS) {
1668 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1675 S_scalarboolean(pTHX_ OP *o)
1677 PERL_ARGS_ASSERT_SCALARBOOLEAN;
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);
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);
1692 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1693 CopLINE_set(PL_curcop, oldline);
1700 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type)
1703 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1704 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
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) {
1710 if (cUNOPo->op_first->op_type != OP_GV
1711 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1713 return varname(gv, funny, 0, NULL, 0, subscript_type);
1716 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type);
1721 S_op_varname(pTHX_ const OP *o)
1723 return S_op_varname_subscript(aTHX_ o, 1);
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) {
1731 if (SvPOK(*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);
1737 else if (!SvOK(*retsv))
1740 else *retpv = "...";
1744 S_scalar_slice_warning(pTHX_ const OP *o)
1747 const bool h = o->op_type == OP_HSLICE
1748 || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE);
1754 SV *keysv = NULL; /* just to silence compiler warnings */
1755 const char *key = NULL;
1757 if (!(o->op_private & OPpSLICEWARNING))
1759 if (PL_parser && PL_parser->error_count)
1760 /* This warning can be nonsensical when there is a syntax error. */
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) {
1792 /* Don't warn if we have a nulled list either. */
1793 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1796 assert(OpSIBLING(kid));
1797 name = S_op_varname(aTHX_ OpSIBLING(kid));
1798 if (!name) /* XS module fiddling with the op tree */
1800 S_op_pretty(aTHX_ kid, &keysv, &key);
1801 assert(SvPOK(name));
1802 sv_chop(name,SvPVX(name)+1);
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
1808 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1809 lbrack, key, rbrack);
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 $%"
1815 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1816 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1820 Perl_scalar(pTHX_ OP *o)
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)
1832 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1834 switch (o->op_type) {
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;
1849 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
1859 if (o->op_flags & OPf_KIDS) {
1860 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
1866 kid = cLISTOPo->op_first;
1868 kid = OpSIBLING(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 )))
1881 PL_curcop = &PL_compiling;
1886 kid = cLISTOPo->op_first;
1889 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1894 /* Warn about scalar context */
1895 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1896 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1899 const char *key = NULL;
1901 /* This warning can be nonsensical when there is a syntax error. */
1902 if (PL_parser && PL_parser->error_count)
1905 if (!ckWARN(WARN_SYNTAX)) break;
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 */
1913 S_op_pretty(aTHX_ kid, &keysv, &key);
1914 assert(SvPOK(name));
1915 sv_chop(name,SvPVX(name)+1);
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);
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);
1936 Perl_scalarvoid(pTHX_ OP *arg)
1944 PERL_ARGS_ASSERT_SCALARVOID;
1948 SV *useless_sv = NULL;
1949 const char* useless = NULL;
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 */
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)
1966 if ((o->op_private & OPpTARGET_MY)
1967 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1969 /* newASSIGNOP has already applied scalar context, which we
1970 leave, as if this op is inside SASSIGN. */
1974 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1976 switch (o->op_type) {
1978 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1982 if (o->op_flags & OPf_STACKED)
1984 if (o->op_type == OP_REPEAT)
1985 scalar(cBINOPo->op_first);
1988 if ((o->op_flags & OPf_STACKED) &&
1989 !(o->op_private & OPpCONCAT_NESTED))
1993 if (o->op_private == 4)
2028 case OP_GETSOCKNAME:
2029 case OP_GETPEERNAME:
2034 case OP_GETPRIORITY:
2059 useless = OP_DESC(o);
2069 case OP_AELEMFAST_LEX:
2073 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
2074 /* Otherwise it's "Useless use of grep iterator" */
2075 useless = OP_DESC(o);
2079 if (!(o->op_private & OPpSPLIT_ASSIGN))
2080 useless = OP_DESC(o);
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) {
2089 useless = "negative pattern binding (!~)";
2093 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
2094 useless = "non-destructive substitution (s///r)";
2098 useless = "non-destructive transliteration (tr///r)";
2105 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
2106 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
2107 useless = "a variable";
2112 if (cSVOPo->op_private & OPpCONST_STRICT)
2113 no_bareword_allowed(o);
2115 if (ckWARN(WARN_VOID)) {
2117 /* don't warn on optimised away booleans, eg
2118 * use constant Foo, 5; Foo || print; */
2119 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
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))
2126 else if (SvPOK(sv)) {
2127 SV * const dsv = newSVpvs("");
2129 = Perl_newSVpvf(aTHX_
2131 pv_pretty(dsv, SvPVX_const(sv),
2132 SvCUR(sv), 32, NULL, NULL,
2134 | PERL_PV_ESCAPE_NOCLEAR
2135 | PERL_PV_ESCAPE_UNI_DETECT));
2136 SvREFCNT_dec_NN(dsv);
2138 else if (SvOK(sv)) {
2139 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%" SVf ")", SVfARG(sv));
2142 useless = "a constant (undef)";
2145 op_null(o); /* don't execute or even remember it */
2149 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */
2153 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */
2157 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */
2161 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */
2166 UNOP *refgen, *rv2cv;
2169 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2172 rv2gv = ((BINOP *)o)->op_last;
2173 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2176 refgen = (UNOP *)((BINOP *)o)->op_first;
2178 if (!refgen || (refgen->op_type != OP_REFGEN
2179 && refgen->op_type != OP_SREFGEN))
2182 exlist = (LISTOP *)refgen->op_first;
2183 if (!exlist || exlist->op_type != OP_NULL
2184 || exlist->op_targ != OP_LIST)
2187 if (exlist->op_first->op_type != OP_PUSHMARK
2188 && exlist->op_first != exlist->op_last)
2191 rv2cv = (UNOP*)exlist->op_last;
2193 if (rv2cv->op_type != OP_RV2CV)
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);
2200 o->op_private |= OPpASSIGN_CV_TO_GV;
2201 rv2gv->op_private |= OPpDONT_INIT_GV;
2202 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
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);
2220 OpTYPE_set(o, OP_AND);
2230 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2231 if (!(kid->op_flags & OPf_KIDS))
2238 if (o->op_flags & OPf_STACKED)
2245 if (!(o->op_flags & OPf_KIDS))
2256 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2257 if (!(kid->op_flags & OPf_KIDS))
2263 /* If the first kid after pushmark is something that the padrange
2264 optimisation would reject, then null the list and the pushmark.
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)
2278 op_null(cUNOPo->op_first); /* NULL the pushmark */
2279 op_null(o); /* NULL the list */
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)));
2297 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2298 "Useless use of %s in void context",
2301 } while ( (o = POP_DEFERRED_OP()) );
2309 S_listkids(pTHX_ OP *o)
2311 if (o && o->op_flags & OPf_KIDS) {
2313 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2320 Perl_list(pTHX_ OP *o)
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)
2332 if ((o->op_private & OPpTARGET_MY)
2333 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2335 return o; /* As if inside SASSIGN */
2338 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2340 switch (o->op_type) {
2342 list(cBINOPo->op_first);
2345 if (o->op_private & OPpREPEAT_DOLIST
2346 && !(o->op_flags & OPf_STACKED))
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)
2353 op_null(o); /* repeat */
2354 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2356 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2363 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2371 if (!(o->op_flags & OPf_KIDS))
2373 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2374 list(cBINOPo->op_first);
2375 return gen_constant_list(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 */
2388 kid = cLISTOPo->op_first;
2390 kid = OpSIBLING(kid);
2393 OP *sib = OpSIBLING(kid);
2394 if (sib && kid->op_type != OP_LEAVEWHEN)
2400 PL_curcop = &PL_compiling;
2404 kid = cLISTOPo->op_first;
2411 S_scalarseq(pTHX_ OP *o)
2414 const OPCODE type = o->op_type;
2416 if (type == OP_LINESEQ || type == OP_SCOPE ||
2417 type == OP_LEAVE || type == OP_LEAVETRY)
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 )))
2429 PL_curcop = &PL_compiling;
2431 o->op_flags &= ~OPf_PARENS;
2432 if (PL_hints & HINT_BLOCK_SCOPE)
2433 o->op_flags |= OPf_PARENS;
2436 o = newOP(OP_STUB, 0);
2441 S_modkids(pTHX_ OP *o, I32 type)
2443 if (o && o->op_flags & OPf_KIDS) {
2445 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2446 op_lvalue(kid, type);
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
2460 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op, int real)
2466 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2468 if (rop->op_first->op_type == OP_PADSV)
2469 /* @$hash{qw(keys here)} */
2470 rop = (UNOP*)rop->op_first;
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)
2476 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2483 lexname = NULL; /* just to silence compiler warnings */
2484 fields = NULL; /* just to silence compiler warnings */
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);
2493 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2495 if (key_op->op_type != OP_CONST)
2497 svp = cSVOPx_svp(key_op);
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)
2503 no_bareword_allowed((OP*)key_op);
2506 /* Make the CONST have a shared SV */
2507 if ( !SvIsCOW_shared_hash(sv = *svp)
2508 && SvTYPE(sv) < SVt_PVMG
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);
2521 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
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))));
2531 /* info returned by S_sprintf_is_multiconcatable() */
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 */
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());
2550 * sprintf "i=%d a=%s f=%s", $i, @a, f();
2552 * If successful, the sprintf_ismc_info struct pointed to by info will be
2557 S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info)
2559 OP *pm, *constop, *kid;
2562 SSize_t nargs, nformats;
2563 STRLEN cur, total_len, variant;
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));
2573 pm = cUNOPo->op_first;
2574 if (pm->op_type != OP_PUSHMARK) /* weird coreargs stuff */
2576 constop = OpSIBLING(pm);
2577 if (!constop || constop->op_type != OP_CONST)
2579 sv = cSVOPx_sv(constop);
2580 if (SvMAGICAL(sv) || !SvPOK(sv))
2586 /* Scan format for %% and %s and work out how many %s there are.
2587 * Abandon if other format types are found.
2594 for (p = s; p < e; p++) {
2597 if (!UTF8_IS_INVARIANT(*p))
2603 return FALSE; /* lone % at end gives "Invalid conversion" */
2612 if (!nformats || nformats > PERL_MULTICONCAT_MAXARG)
2615 utf8 = cBOOL(SvUTF8(sv));
2619 /* scan args; they must all be in scalar cxt */
2622 kid = OpSIBLING(constop);
2625 if ((kid->op_flags & OPf_WANT) != OPf_WANT_SCALAR)
2628 kid = OpSIBLING(kid);
2631 if (nargs != nformats)
2632 return FALSE; /* e.g. sprintf("%s%s", $a); */
2635 info->nargs = nargs;
2638 info->total_len = total_len;
2639 info->variant = variant;
2647 /* S_maybe_multiconcat():
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.
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.
2664 * STRINGIFY -- PADSV[$x]
2667 * ex-PUSHMARK -- CONCAT/S
2669 * CONCAT/S -- PADSV[$d]
2671 * CONCAT -- CONST["-"]
2673 * PADSV[$a] -- PADSV[$b]
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.
2680 S_maybe_multiconcat(pTHX_ OP *o)
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 */
2693 UNOP_AUX_item *lenp;
2694 char *const_str, *p;
2695 struct sprintf_ismc_info sprintf_info;
2697 /* store info about each arg in args[];
2698 * toparg is the highest used slot; argp is a general
2699 * pointer to args[] slots */
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];
2708 SSize_t nadjconst = 0; /* adjacent consts - may be demoted to args */
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 */
2722 /* -----------------------------------------------------------------
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[].
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);
2742 Zero(&sprintf_info, 1, struct sprintf_ismc_info);
2744 /* first see if, at the top of the tree, there is an assign,
2745 * append and/or stringify */
2747 if (topop->op_type == OP_SASSIGN) {
2749 if (o->op_ppaddr != PL_ppaddr[OP_SASSIGN])
2751 if (o->op_private & (OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV))
2753 assert(!(o->op_private & ~OPpARG2_MASK)); /* barf on unknown flags */
2756 topop = cBINOPo->op_first;
2757 targetop = OpSIBLING(topop);
2758 if (!targetop) /* probably some sort of syntax error */
2761 else if ( topop->op_type == OP_CONCAT
2762 && (topop->op_flags & OPf_STACKED)
2763 && (!(topop->op_private & OPpCONCAT_NESTED))
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));
2772 /* barf on unknown flags */
2773 assert(!(o->op_private & ~(OPpARG2_MASK|OPpTARGET_MY)));
2774 private_flags |= OPpMULTICONCAT_APPEND;
2775 targetop = cBINOPo->op_first;
2777 topop = OpSIBLING(targetop);
2779 /* $x .= <FOO> gets optimised to rcatline instead */
2780 if (topop->op_type == OP_READLINE)
2785 /* Can targetop (the LHS) if it's a padsv, be be optimised
2786 * away and use OPpTARGET_MY instead?
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))
2798 if (topop->op_type == OP_STRINGIFY) {
2799 if (topop->op_ppaddr != PL_ppaddr[OP_STRINGIFY])
2803 /* barf on unknown flags */
2804 assert(!(o->op_private & ~(OPpARG4_MASK|OPpTARGET_MY)));
2806 if ((topop->op_private & OPpTARGET_MY)) {
2807 if (o->op_type == OP_SASSIGN)
2808 return; /* can't have two assigns */
2812 private_flags |= OPpMULTICONCAT_STRINGIFY;
2814 topop = cBINOPx(topop)->op_first;
2815 assert(OP_TYPE_IS_OR_WAS_NN(topop, OP_PUSHMARK));
2816 topop = OpSIBLING(topop);
2819 if (topop->op_type == OP_SPRINTF) {
2820 if (topop->op_ppaddr != PL_ppaddr[OP_SPRINTF])
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;
2828 private_flags |= OPpMULTICONCAT_FAKE;
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 */
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
2844 else if (topop->op_type == OP_CONCAT) {
2845 if (topop->op_ppaddr != PL_ppaddr[OP_CONCAT])
2848 if ((topop->op_private & OPpTARGET_MY)) {
2849 if (o->op_type == OP_SASSIGN || targmyop)
2850 return; /* can't have two assigns */
2855 /* Is it safe to convert a sassign/stringify/concat op into
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));
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:
2873 * CONCAT/STACKED -- EXPR5
2875 * CONCAT/STACKED -- EXPR4
2881 * corresponds to an expression like
2883 * (EXPR1 . EXPR2 . EXPR3 . EXPR4 . EXPR5)
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.
2888 * The reason why the last concat can't be STACKED is the difference
2891 * ((($a .= $a) .= $a) .= $a) .= $a
2894 * $a . $a . $a . $a . $a
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.
2910 if ( kid->op_type == OP_CONCAT
2914 k1 = cUNOPx(kid)->op_first;
2916 /* shouldn't happen except maybe after compile err? */
2920 /* avoid turning (A . B . ($lex = C) ...) into (A . B . C ...) */
2921 if (kid->op_private & OPpTARGET_MY)
2924 stacked_last = (kid->op_flags & OPf_STACKED);
2936 if ( nargs + nadjconst > PERL_MULTICONCAT_MAXARG - 2
2937 || (argp - args + 1) > (PERL_MULTICONCAT_MAXARG*2 + 1) - 2)
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
2951 /* the last arg is the rest of the optree */
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))
2965 utf8 |= cBOOL(SvUTF8(sv));
2968 /* this const may be demoted back to a plain arg later;
2969 * make sure we have enough arg slots left */
2971 prev_was_const = !prev_was_const;
2976 prev_was_const = FALSE;
2986 return; /* we don't support ((A.=B).=C)...) */
2988 /* look for two adjacent consts and don't fold them together:
2991 * $o->concat("a")->concat("b")
2994 * (but $o .= "a" . "b" should still fold)
2997 bool seen_nonconst = FALSE;
2998 for (argp = toparg; argp >= args; argp--) {
2999 if (argp->p == NULL) {
3000 seen_nonconst = TRUE;
3006 /* both previous and current arg were constants;
3007 * leave the current OP_CONST as-is */
3015 /* -----------------------------------------------------------------
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*.
3024 /* we need at least one concat action, e.g.:
3030 * otherwise we could be doing something like $x = "foo", which
3031 * if treated as as a concat, would fail to COW.
3033 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 2)
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
3044 /* eliminated at least one OP_CONST */
3046 /* eliminated an OP_SASSIGN */
3047 || o->op_type == OP_SASSIGN
3048 /* eliminated an OP_PADSV */
3049 || (!targmyop && is_targable)
3051 /* definitely a net gain to optimise */
3054 /* ... if not, what else? */
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
3064 && topop->op_type == OP_CONCAT
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
3071 && ( k1->op_type != OP_PADSV
3072 || k1->op_targ != t)
3077 /* need at least two concats */
3078 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 3)
3083 /* -----------------------------------------------------------------
3086 * At this point the optree has been verified as ok to be optimised
3087 * into an OP_MULTICONCAT. Now start changing things.
3092 /* stringify all const args and determine utf8ness */
3095 for (argp = args; argp <= toparg; argp++) {
3096 SV *sv = (SV*)argp->p;
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;
3104 /* see if any strings would grow if converted to utf8 */
3106 variant += variant_under_utf8_count((U8 *) argp->p,
3107 (U8 *) argp->p + argp->len);
3111 /* create and populate aux struct */
3115 aux = (UNOP_AUX_item*)PerlMemShared_malloc(
3116 sizeof(UNOP_AUX_item)
3118 PERL_MULTICONCAT_HEADER_SIZE
3119 + ((nargs + 1) * (variant ? 2 : 1))
3122 const_str = (char *)PerlMemShared_malloc(total_len ? total_len : 1);
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:
3129 * STRINGIFY -- TARGET
3131 * ex-PUSHMARK -- CONCAT
3146 * ex-PUSHMARK -- EXPR1 -- EXPR2 -- EXPR3 -- EXPR4 -- EXPR5 -- TARGET
3148 * except that if EXPRi is an OP_CONST, it's discarded.
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.
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.
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 */
3165 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3167 p = sprintf_info.start;
3170 for (; p < sprintf_info.end; p++) {
3174 (lenp++)->ssize = q - oldq;
3181 lenp->ssize = q - oldq;
3182 assert((STRLEN)(q - const_str) == total_len);
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.
3188 lastkidop = cLISTOPx(topop)->op_last;
3189 kid = cUNOPx(topop)->op_first; /* pushmark */
3191 op_null(OpSIBLING(kid)); /* const */
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;
3200 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
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
3209 for (argp = toparg; argp >= args; argp--) {
3211 /* not a const op */
3212 (++lenp)->ssize = -1;
3214 STRLEN l = argp->len;
3215 Copy(argp->p, p, l, char);
3217 if (lenp->ssize == -1)
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
3234 bool last = (argp == toparg);
3237 /* set prev to the sibling *before* the arg to be cut out,
3238 * e.g. when cutting EXPR:
3243 * prev= CONCAT -- EXPR
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
3251 /* find the op before kid */
3253 o2 = cUNOPx(parentop)->op_first;
3254 while (o2 && o2 != kid) {
3262 else if (kid == o && lastkidop)
3263 prev = last ? lastkidop : OpSIBLING(lastkidop);
3265 prev = last ? NULL : cUNOPx(kid)->op_first;
3267 if (!argp->p || last) {
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 */
3276 aop->op_next = nextop;
3279 /* null the const at start of op_next chain */
3283 nextop = prev->op_next;
3286 /* the last two arguments are both attached to the same concat op */
3287 if (argp < toparg - 1)
3292 /* Populate the aux struct */
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;
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
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);
3312 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = up;
3313 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = ulen;
3315 for (n = 0; n < (nargs + 1); n++) {
3317 char * orig_up = up;
3318 for (i = (lens++)->ssize; i > 0; i--) {
3320 append_utf8_from_native_byte(c, (U8**)&up);
3322 (ulens++)->ssize = (i < 0) ? i : up - orig_up;
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
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);
3344 * target .= A.B.C...
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,
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;
3364 /* Move the target subtree from being the first of o's
3365 * original children to being the first of *all* o's children.
3368 op_sibling_splice(o, lastkidop, 1, NULL); /* cut target op */
3369 op_sibling_splice(o, NULL, 0, targetop); /* and paste*/
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);
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
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);
3385 assert(topop == OpSIBLING(cBINOPo->op_first));
3394 * my $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
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;
3408 flags |= OPf_STACKED;
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;
3418 /* detach the emaciated husk of the sprintf/concat optree and free it */
3420 kid = op_sibling_splice(o, lastkidop, 1, NULL);
3426 /* and convert o into a multiconcat */
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;
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)
3442 S_process_optree(pTHX_ CV *cv, OP *optree, OP* start)
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 */
3451 startp = &CvSTART(cv);
3453 startp = PL_in_eval? &PL_eval_start : &PL_main_start;
3456 optree->op_private |= OPpREFCOUNTED;
3457 OpREFCNT_set(optree, 1);
3458 optimize_optree(optree);
3460 finalize_optree(optree);
3461 S_prune_chain_head(startp);
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);
3472 =for apidoc optimize_optree
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.
3483 Perl_optimize_optree(pTHX_ OP* o)
3485 PERL_ARGS_ASSERT_OPTIMIZE_OPTREE;
3488 SAVEVPTR(PL_curcop);
3496 /* helper for optimize_optree() which optimises on op then recurses
3497 * to optimise any children.
3501 S_optimize_op(pTHX_ OP* o)
3505 PERL_ARGS_ASSERT_OPTIMIZE_OP;
3507 assert(o->op_type != OP_FREED);
3509 switch (o->op_type) {
3512 PL_curcop = ((COP*)o); /* for warnings */
3520 S_maybe_multiconcat(aTHX_ o);
3524 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
3525 DEFER_OP(cPMOPo->op_pmreplrootu.op_pmreplroot);
3532 if (o->op_flags & OPf_KIDS) {
3535 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
3539 DEFER_REVERSE(child_count);
3541 } while ( ( o = POP_DEFERRED_OP() ) );
3548 =for apidoc finalize_optree
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.
3558 Perl_finalize_optree(pTHX_ OP* o)
3560 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
3563 SAVEVPTR(PL_curcop);
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)
3578 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
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));
3591 =for apidoc s|OP*|traverse_op_tree|OP* top|OP* o
3593 Return the next op in a depth-first traversal of the op tree,
3594 returning NULL when the traversal is complete.
3596 The initial call must supply the root of the tree as both top and o.
3598 For now it's static, but it may be exposed to the API in the future.
3604 S_traverse_op_tree(pTHX_ OP *top, OP *o) {
3607 PERL_ARGS_ASSERT_TRAVERSE_OP_TREE;
3609 if ((o->op_flags & OPf_KIDS) && cUNOPo->op_first) {
3610 return cUNOPo->op_first;
3612 else if ((sib = OpSIBLING(o))) {
3616 OP *parent = o->op_sibparent;
3617 assert(!(o->op_moresib));
3618 while (parent && parent != top) {
3619 OP *sib = OpSIBLING(parent);
3622 parent = parent->op_sibparent;
3630 S_finalize_op(pTHX_ OP* o)
3633 PERL_ARGS_ASSERT_FINALIZE_OP;
3636 assert(o->op_type != OP_FREED);
3638 switch (o->op_type) {
3641 PL_curcop = ((COP*)o); /* for warnings */
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))
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);
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",
3679 if (cSVOPo->op_private & OPpCONST_STRICT)
3680 no_bareword_allowed(o);
3684 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
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);
3703 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
3706 rop = (UNOP*)((BINOP*)o)->op_first;
3711 S_scalar_slice_warning(aTHX_ o);
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))
3723 key_op = (SVOP*)(kid->op_type == OP_CONST
3725 : OpSIBLING(kLISTOP->op_first));
3727 rop = (UNOP*)((LISTOP*)o)->op_last;
3730 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
3732 S_check_hash_fields_and_hekify(aTHX_ rop, key_op, 1);
3736 if (o->op_targ != OP_HSLICE && o->op_targ != OP_ASLICE)
3740 S_scalar_slice_warning(aTHX_ o);
3744 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
3745 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3753 if (o->op_flags & OPf_KIDS) {
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;
3764 if (type == OP_NULL) {
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)
3771 family = PL_opargs[type] & OA_CLASS_MASK;
3773 has_last = ( family == OA_BINOP
3774 || family == OA_LISTOP
3775 || family == OA_PMOP
3776 || family == OA_LOOP
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 */
3791 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
3792 if (!OpHAS_SIBLING(kid)) {
3794 assert(kid == cLISTOPo->op_last);
3795 assert(kid->op_sibparent == o);
3800 } while (( o = traverse_op_tree(top, o)) != NULL);
3804 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
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
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>.
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>.
3823 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
3826 PadnameLVALUE_on(pn);
3827 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
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.
3836 assert(CvPADLIST(cv));
3838 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
3839 assert(PadnameLEN(pn));
3840 PadnameLVALUE_on(pn);
3845 S_vivifies(const OPCODE 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:
3860 S_lvref(pTHX_ OP *o, I32 type)
3864 switch (o->op_type) {
3866 for (kid = OpSIBLING(cUNOPo->op_first); kid;
3867 kid = OpSIBLING(kid))
3868 S_lvref(aTHX_ kid, type);
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"));
3882 OpTYPE_set(o, OP_LVAVREF);
3883 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
3884 o->op_flags |= OPf_MOD|OPf_REF;
3887 o->op_private |= OPpLVREF_AV;
3890 kid = cUNOPo->op_first;
3891 if (kid->op_type == OP_NULL)
3892 kid = cUNOPx(OpSIBLING(kUNOP->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;
3900 op_free(cUNOPo->op_first);
3901 cUNOPo->op_first = NULL;
3902 o->op_flags &=~ OPf_KIDS;
3907 if (o->op_flags & OPf_PARENS) {
3909 yyerror(Perl_form(aTHX_ "Can't modify reference to "
3910 "parenthesized hash in list assignment"));
3913 o->op_private |= OPpLVREF_HV;
3917 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
3918 o->op_flags |= OPf_STACKED;
3921 if (o->op_flags & OPf_PARENS) goto parenhash;
3922 o->op_private |= OPpLVREF_HV;
3925 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
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;
3934 o->op_private |= OPpLVREF_ELEM;
3935 o->op_flags |= OPf_STACKED;
3939 OpTYPE_set(o, OP_LVREFSLICE);
3940 o->op_private &= OPpLVAL_INTRO;
3943 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
3945 else if (!(o->op_flags & OPf_KIDS))
3947 if (o->op_targ != OP_LIST) {
3948 S_lvref(aTHX_ cBINOPo->op_first, type);
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);
3959 if (o->op_flags & OPf_PARENS)
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
3972 OpTYPE_set(o, OP_LVREF);
3974 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
3975 if (type == OP_ENTERLOOP)
3976 o->op_private |= OPpLVREF_ITER;
3979 PERL_STATIC_INLINE bool
3980 S_potential_mod_type(I32 type)
3982 /* Types that only potentially result in modification. */
3983 return type == OP_GREPSTART || type == OP_ENTERSUB
3984 || type == OP_REFGEN || type == OP_LEAVESUBLV;
3988 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
3992 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
3995 if (!o || (PL_parser && PL_parser->error_count))
3998 if ((o->op_private & OPpTARGET_MY)
3999 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
4004 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
4006 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
4008 switch (o->op_type) {
4013 if ((o->op_flags & OPf_PARENS))
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 */
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;
4031 else { /* Compile-time error message: */
4032 OP *kid = cUNOPo->op_first;
4037 if (kid->op_type != OP_PUSHMARK) {
4038 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
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;
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 */
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)
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) {
4066 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
4067 ? MUTABLE_CV(SvRV(gv))
4073 if (flags & OP_LVALUE_NO_CROAK)
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]),
4087 if (flags & OP_LVALUE_NO_CROAK) return NULL;
4088 /* grep, foreach, subcalls, refgen */
4089 if (S_potential_mod_type(type))
4091 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
4092 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
4095 type ? PL_op_desc[type] : "local"));
4108 case OP_RIGHT_SHIFT:
4117 if (!(o->op_flags & OPf_STACKED))
4123 if (o->op_flags & OPf_STACKED) {
4127 if (!(o->op_private & OPpREPEAT_DOLIST))
4130 const I32 mods = PL_modcount;
4131 modkids(cBINOPo->op_first, type);
4132 if (type != OP_AASSIGN)
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)
4139 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
4142 PL_modcount = RETURN_UNLIMITED_NUMBER;
4148 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
4149 op_lvalue(kid, type);
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;
4163 if (scalar_mod_type(o, type))
4165 ref(cUNOPo->op_first, o->op_type);
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
4177 o->op_private |= OPpMAYBE_LVSUB;
4181 PL_modcount = RETURN_UNLIMITED_NUMBER;
4186 if (type == OP_LEAVESUBLV)
4187 o->op_private |= OPpMAYBE_LVSUB;
4190 if (type == OP_LEAVESUBLV
4191 && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS)
4192 o->op_private |= OPpMAYBE_LVSUB;
4195 PL_hints |= HINT_BLOCK_SCOPE;
4196 if (type == OP_LEAVESUBLV)
4197 o->op_private |= OPpMAYBE_LVSUB;
4201 ref(cUNOPo->op_first, o->op_type);
4205 PL_hints |= HINT_BLOCK_SCOPE;
4215 case OP_AELEMFAST_LEX:
4222 PL_modcount = RETURN_UNLIMITED_NUMBER;
4223 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
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;
4230 if (scalar_mod_type(o, type))
4232 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4233 && type == OP_LEAVESUBLV)
4234 o->op_private |= OPpMAYBE_LVSUB;
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));
4252 if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type))
4256 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
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)
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;
4292 o->op_private |= OPpLVALUE;
4298 if (o->op_flags & OPf_KIDS)
4299 op_lvalue(cLISTOPo->op_last, type);
4304 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4306 else if (!(o->op_flags & OPf_KIDS))
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
4318 * compared with things like OP_MATCH which have the argument
4324 * so handle specially to correctly get "Can't modify" croaks etc
4327 if (sib && (sib->op_type == OP_TRANS || sib->op_type == OP_TRANSR))
4329 /* this should trigger a "Can't modify transliteration" err */
4330 op_lvalue(sib, type);
4332 op_lvalue(cBINOPo->op_first, type);
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);
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);
4359 if (type == OP_NULL) { /* local */
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);
4370 if (type != OP_AASSIGN && type != OP_SASSIGN
4371 && type != OP_ENTERLOOP)
4373 /* Don’t bother applying lvalue context to the ex-list. */
4374 kid = cUNOPx(cUNOPo->op_first)->op_first;
4375 assert (!OpHAS_SIBLING(kid));
4378 if (type == OP_NULL) /* local */
4380 if (type != OP_AASSIGN) goto nomod;
4381 kid = cUNOPo->op_first;
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)
4389 "Experimental aliasing via reference not enabled");
4390 Perl_ck_warner_d(aTHX_
4391 packWARN(WARN_EXPERIMENTAL__REFALIASING),
4392 "Aliasing via reference is experimental");
4395 if (o->op_type == OP_REFGEN)
4396 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
4401 if ((o->op_private & OPpSPLIT_ASSIGN)) {
4402 /* This is actually @array = split. */
4403 PL_modcount = RETURN_UNLIMITED_NUMBER;
4409 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
4413 /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that
4414 their argument is a filehandle; thus \stat(".") should not set
4416 if (type == OP_REFGEN &&
4417 PL_check[o->op_type] == Perl_ck_ftst)
4420 if (type != OP_LEAVESUBLV)
4421 o->op_flags |= OPf_MOD;
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() */
4429 o->op_private |= OPpLVAL_INTRO;
4430 o->op_flags &= ~OPf_SPECIAL;
4431 PL_hints |= HINT_BLOCK_SCOPE;
4436 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
4437 "Useless localization of %s", OP_DESC(o));
4440 else if (type != OP_GREPSTART && type != OP_ENTERSUB
4441 && type != OP_LEAVESUBLV && o->op_type != OP_ENTERSUB)
4442 o->op_flags |= OPf_REF;
4447 S_scalar_mod_type(const OP *o, I32 type)
4452 if (o && o->op_type == OP_RV2GV)
4476 case OP_RIGHT_SHIFT:
4505 S_is_handle_constructor(const OP *o, I32 numargs)
4507 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
4509 switch (o->op_type) {
4517 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
4530 S_refkids(pTHX_ OP *o, I32 type)
4532 if (o && o->op_flags & OPf_KIDS) {
4534 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
4541 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
4546 PERL_ARGS_ASSERT_DOREF;
4548 if (PL_parser && PL_parser->error_count)
4551 switch (o->op_type) {
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;
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
4564 o->op_flags |= OPf_MOD;
4570 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
4571 doref(kid, type, set_op_ref);
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);
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
4583 o->op_flags |= OPf_MOD;
4590 o->op_flags |= OPf_REF;
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);
4601 o->op_flags |= OPf_REF;
4606 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
4608 doref(cBINOPo->op_first, type, set_op_ref);
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
4617 o->op_flags |= OPf_MOD;
4627 if (!(o->op_flags & OPf_KIDS))
4629 doref(cLISTOPo->op_last, type, set_op_ref);
4639 S_dup_attrlist(pTHX_ OP *o)
4643 PERL_ARGS_ASSERT_DUP_ATTRLIST;
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.
4649 if (o->op_type == OP_CONST)
4650 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
4652 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
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)));
4665 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
4667 PERL_ARGS_ASSERT_APPLY_ATTRS;
4669 SV * const stashsv = newSVhek(HvNAME_HEK(stash));
4671 /* fake up C<use attributes $pkg,$rv,@attrs> */
4673 #define ATTRSMODULE "attributes"
4674 #define ATTRSMODULE_PM "attributes.pm"
4677 aTHX_ PERL_LOADMOD_IMPORT_OPS,
4678 newSVpvs(ATTRSMODULE),
4680 op_prepend_elem(OP_LIST,
4681 newSVOP(OP_CONST, 0, stashsv),
4682 op_prepend_elem(OP_LIST,
4683 newSVOP(OP_CONST, 0,
4685 dup_attrlist(attrs))));
4690 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
4692 OP *pack, *imop, *arg;
4693 SV *meth, *stashsv, **svp;
4695 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
4700 assert(target->op_type == OP_PADSV ||
4701 target->op_type == OP_PADHV ||
4702 target->op_type == OP_PADAV);
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 */
4710 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
4711 newSVpvs(ATTRSMODULE), NULL);
4713 /* Need package name for method call. */
4714 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
4716 /* Build up the real arg-list. */
4717 stashsv = newSVhek(HvNAME_HEK(stash));
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,
4726 dup_attrlist(attrs)));
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)));
4735 /* Combine the ops. */
4736 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
4740 =notfor apidoc apply_attrs_string
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.
4757 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
4758 const char *attrstr, STRLEN len)
4762 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
4765 len = strlen(attrstr);
4769 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
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)));
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))),
4790 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name,
4793 OP *new_proto = NULL;
4798 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
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);
4814 } else if (o->op_type == OP_LIST) {
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);
4827 if (new_proto && ckWARN(WARN_MISC)) {
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));
4838 /* excise new_proto from the list */
4839 op_sibling_splice(*attrs, lasto, 1, NULL);
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)) {
4857 svname = sv_newmortal();
4858 gv_efullname3(svname, name, NULL);
4860 else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
4861 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
4863 svname = (SV *)name;
4864 if (ckWARN(WARN_ILLEGALPROTO))
4865 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE,
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);
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);
4879 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
4880 "Prototype '%" UTF8f "' overridden by attribute 'prototype(%" UTF8f ")'"
4882 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
4883 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
4893 S_cant_declare(pTHX_ OP *o)
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
4903 PL_parser->in_my == KEY_our ? "our" :
4904 PL_parser->in_my == KEY_state ? "state" :
4909 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
4912 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
4914 PERL_ARGS_ASSERT_MY_KID;
4916 if (!o || (PL_parser && PL_parser->error_count))
4921 if (OP_TYPE_IS_OR_WAS(o, OP_LIST)) {
4923 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
4924 my_kid(kid, attrs, imopsp);
4926 } else if (type == OP_UNDEF || type == OP_STUB) {
4928 } else if (type == OP_RV2SV || /* "our" declaration */
4931 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
4932 S_cant_declare(aTHX_ o);
4934 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
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)),
4944 o->op_private |= OPpOUR_INTRO;
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);
4958 else if (type != OP_PADSV &&
4961 type != OP_PUSHMARK)
4963 S_cant_declare(aTHX_ o);
4966 else if (attrs && type != OP_PUSHMARK) {
4970 PL_parser->in_my = FALSE;
4971 PL_parser->in_my_stash = NULL;
4973 /* check for C<my Dog $spot> when deciding package */
4974 stash = PAD_COMPNAME_TYPE(o->op_targ);
4976 stash = PL_curstash;
4977 apply_attrs_my(stash, o, attrs, imopsp);
4979 o->op_flags |= OPf_MOD;
4980 o->op_private |= OPpLVAL_INTRO;
4982 o->op_private |= OPpPAD_STATE;
4987 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
4990 int maybe_scalar = 0;
4992 PERL_ARGS_ASSERT_MY_ATTRS;
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 */
4997 if (o->op_flags & OPf_PARENS)
5007 o = my_kid(o, attrs, &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;
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)
5020 OP * const pushmark = lrops->op_first;
5021 /* excise pushmark */
5022 op_sibling_splice(rops, NULL, 1, NULL);
5025 o = op_append_list(OP_LIST, o, rops);
5028 PL_parser->in_my = FALSE;
5029 PL_parser->in_my_stash = NULL;
5034 Perl_sawparens(pTHX_ OP *o)
5036 PERL_UNUSED_CONTEXT;
5038 o->op_flags |= OPf_PARENS;
5043 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
5047 const OPCODE ltype = left->op_type;
5048 const OPCODE rtype = right->op_type;
5050 PERL_ARGS_ASSERT_BIND_MATCH;
5052 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
5053 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
5055 const char * const desc
5057 rtype == OP_SUBST || rtype == OP_TRANS
5058 || rtype == OP_TRANSR
5060 ? (int)rtype : OP_MATCH];
5061 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
5063 S_op_varname(aTHX_ left);
5065 Perl_warner(aTHX_ packWARN(WARN_MISC),
5066 "Applying %s to %" SVf " will act on scalar(%" SVf ")",
5067 desc, SVfARG(name), SVfARG(name));
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);
5077 if (rtype == OP_CONST &&
5078 cSVOPx(right)->op_private & OPpCONST_BARE &&
5079 cSVOPx(right)->op_private & OPpCONST_STRICT)
5081 no_bareword_allowed(right);
5084 /* !~ doesn't make sense with /r, so error on it for now */
5085 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
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");
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) {
5099 right->op_private &= ~OPpTARGET_MY;
5101 if (!(right->op_flags & OPf_STACKED) && !right->op_targ && ismatchop) {
5102 if (left->op_type == OP_PADSV
5103 && !(left->op_private & OPpLVAL_INTRO))
5105 right->op_targ = left->op_targ;
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);
5120 o = op_prepend_elem(rtype, scalar(left), right);
5123 return newUNOP(OP_NOT, 0, scalar(o));
5127 return bind_match(type, left,
5128 pmruntime(newPMOP(OP_MATCH, 0), right, NULL, 0, 0));
5132 Perl_invert(pTHX_ OP *o)
5136 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
5140 =for apidoc Amx|OP *|op_scope|OP *o
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
5154 Perl_op_scope(pTHX_ OP *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);
5162 else if (o->op_type == OP_LINESEQ) {
5164 OpTYPE_set(o, OP_SCOPE);
5165 kid = ((LISTOP*)o)->op_first;
5166 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
5169 /* The following deals with things like 'do {1 for 1}' */
5170 kid = OpSIBLING(kid);
5172 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
5177 o = newLISTOP(OP_SCOPE, 0, o, NULL);
5183 Perl_op_unscope(pTHX_ OP *o)
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)
5195 =for apidoc Am|int|block_start|int full
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>.
5206 Perl_block_start(pTHX_ int full)
5208 const int retval = PL_savestack_ix;
5210 PL_compiling.cop_seq = PL_cop_seqmax;
5212 pad_block_start(full);
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;
5220 CALL_BLOCK_HOOKS(bhk_start, full);
5226 =for apidoc Am|OP *|block_end|I32 floor|OP *seq
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,
5237 Perl_block_end(pTHX_ I32 floor, OP *seq)
5239 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
5240 OP* retval = scalarseq(seq);
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);
5248 retval = op_append_elem(OP_LINESEQ, retval, o);
5251 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
5255 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
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:
5266 sub s1 { state sub foo { \&s2 } }
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:
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;
5314 retval = op_prepend_elem(OP_LINESEQ, o, retval);
5317 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
5323 =head1 Compile-time scope hooks
5325 =for apidoc Aox||blockhook_register
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">.
5334 Perl_blockhook_register(pTHX_ BHK *hk)
5336 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
5338 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
5342 Perl_newPROG(pTHX_ OP *o)
5346 PERL_ARGS_ASSERT_NEWPROG;
5353 PL_eval_root = newUNOP(OP_LEAVEEVAL,
5354 ((PL_in_eval & EVAL_KEEPERR)
5355 ? OPf_SPECIAL : 0), o);
5358 assert(CxTYPE(cx) == CXt_EVAL);
5360 if ((cx->blk_gimme & G_WANT) == G_VOID)
5361 scalarvoid(PL_eval_root);
5362 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
5365 scalar(PL_eval_root);
5367 start = op_linklist(PL_eval_root);
5368 PL_eval_root->op_next = 0;
5369 i = PL_savestack_ix;
5372 S_process_optree(aTHX_ NULL, PL_eval_root, start);
5374 PL_savestack_ix = i;
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
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
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.
5404 PL_comppad_name = 0;
5406 S_op_destroy(aTHX_ o);
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);
5420 /* Register with debugger */
5422 CV * const cv = get_cvs("DB::postponed", 0);
5426 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
5428 call_sv(MUTABLE_SV(cv), G_DISCARD);
5435 Perl_localize(pTHX_ OP *o, I32 lex)
5437 PERL_ARGS_ASSERT_LOCALIZE;
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 */
5448 if ( PL_parser->bufptr > PL_parser->oldbufptr
5449 && PL_parser->bufptr[-1] == ','
5450 && ckWARN(WARN_PARENTHESIS))
5452 char *s = PL_parser->bufptr;
5455 /* some heuristics to detect a potential error */
5456 while (*s && (strchr(", \t\n", *s)))
5460 if (*s && (strchr("@$%", *s) || (!lex && *s == '*'))
5462 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
5465 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
5467 while (*s && (strchr(", \t\n", *s)))
5473 if (sigil && (*s == ';' || *s == '=')) {
5474 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
5475 "Parentheses missing around \"%s\" list",
5477 ? (PL_parser->in_my == KEY_our
5479 : PL_parser->in_my == KEY_state
5489 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
5490 PL_parser->in_my = FALSE;
5491 PL_parser->in_my_stash = NULL;
5496 Perl_jmaybe(pTHX_ OP *o)
5498 PERL_ARGS_ASSERT_JMAYBE;
5500 if (o->op_type == OP_LIST) {
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));
5508 PERL_STATIC_INLINE OP *
5509 S_op_std_init(pTHX_ OP *o)
5511 I32 type = o->op_type;
5513 PERL_ARGS_ASSERT_OP_STD_INIT;
5515 if (PL_opargs[type] & OA_RETSCALAR)
5517 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
5518 o->op_targ = pad_alloc(type, SVs_PADTMP);
5523 PERL_STATIC_INLINE OP *
5524 S_op_integerize(pTHX_ OP *o)
5526 I32 type = o->op_type;
5528 PERL_ARGS_ASSERT_OP_INTEGERIZE;
5530 /* integerize op. */
5531 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
5534 o->op_ppaddr = PL_ppaddr[++(o->op_type)];
5537 if (type == OP_NEGATE)
5538 /* XXX might want a ck_negate() for this */
5539 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
5544 /* This function exists solely to provide a scope to limit
5545 setjmp/longjmp() messing with auto variables.
5547 PERL_STATIC_INLINE int
5548 S_fold_constants_eval(pTHX) {
5564 S_fold_constants(pTHX_ OP *const o)
5569 I32 type = o->op_type;
5574 SV * const oldwarnhook = PL_warnhook;
5575 SV * const olddiehook = PL_diehook;
5577 U8 oldwarn = PL_dowarn;
5580 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
5582 if (!(PL_opargs[type] & OA_FOLDCONST))
5591 #ifdef USE_LOCALE_CTYPE
5592 if (IN_LC_COMPILETIME(LC_CTYPE))
5601 #ifdef USE_LOCALE_COLLATE
5602 if (IN_LC_COMPILETIME(LC_COLLATE))
5607 /* XXX what about the numeric ops? */
5608 #ifdef USE_LOCALE_NUMERIC
5609 if (IN_LC_COMPILETIME(LC_NUMERIC))
5614 if (!OpHAS_SIBLING(cLISTOPo->op_first)
5615 || OpSIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
5618 SV * const sv = cSVOPx_sv(OpSIBLING(cLISTOPo->op_first));
5619 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
5621 const char *s = SvPVX_const(sv);
5622 while (s < SvEND(sv)) {
5623 if (isALPHA_FOLD_EQ(*s, 'p')) goto nope;
5630 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
5633 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
5634 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
5638 if (PL_parser && PL_parser->error_count)
5639 goto nope; /* Don't try to run w/ errors */
5641 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
5642 switch (curop->op_type) {
5644 if ( (curop->op_private & OPpCONST_BARE)
5645 && (curop->op_private & OPpCONST_STRICT)) {
5646 no_bareword_allowed(curop);
5654 /* Foldable; move to next op in list */
5658 /* No other op types are considered foldable */
5663 curop = LINKLIST(o);
5664 old_next = o->op_next;
5668 old_cxix = cxstack_ix;
5669 create_eval_scope(NULL, G_FAKINGEVAL);
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;
5681 /* Effective $^W=1. */
5682 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
5683 PL_dowarn |= G_WARN_ON;
5685 ret = S_fold_constants_eval(aTHX);
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);
5693 else if (SvTEMP(sv)) { /* grab mortal temp? */
5694 SvREFCNT_inc_simple_void(sv);
5697 else { assert(SvIMMORTAL(sv)); }
5700 /* Something tried to die. Abandon constant folding. */
5701 /* Pretend the error never happened. */
5703 o->op_next = old_next;
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);
5713 PL_dowarn = oldwarn;
5714 PL_warnhook = oldwarnhook;
5715 PL_diehook = olddiehook;
5716 PL_curcop = &PL_compiling;
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();
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;
5737 else if (!SvIMMORTAL(sv)) {
5741 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
5742 if (!is_stringify) newop->op_folded = 1;
5750 S_gen_constant_list(pTHX_ OP *o)
5753 OP *curop, *old_next;
5754 SV * const oldwarnhook = PL_warnhook;
5755 SV * const olddiehook = PL_diehook;
5757 U8 oldwarn = PL_dowarn;
5767 if (PL_parser && PL_parser->error_count)
5768 return o; /* Don't attempt to run with errors */
5770 curop = LINKLIST(o);
5771 old_next = o->op_next;
5773 op_was_null = o->op_type == OP_NULL;
5774 if (op_was_null) /* b3698342565fb462291fba4b432cfcd05b6eb4e1 */
5775 o->op_type = OP_CUSTOM;
5778 o->op_type = OP_NULL;
5779 S_prune_chain_head(&curop);
5782 old_cxix = cxstack_ix;
5783 create_eval_scope(NULL, G_FAKINGEVAL);
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;
5795 /* Effective $^W=1. */
5796 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
5797 PL_dowarn |= G_WARN_ON;
5801 #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY
5802 PL_curstackinfo->si_stack_hwm = 0; /* stop valgrind complaining */
5804 Perl_pp_pushmark(aTHX);
5807 assert (!(curop->op_flags & OPf_SPECIAL));
5808 assert(curop->op_type == OP_RANGE);
5809 Perl_pp_anonlist(aTHX);
5813 o->op_next = old_next;
5817 PL_warnhook = oldwarnhook;
5818 PL_diehook = olddiehook;
5819 Perl_croak(aTHX_ "panic: gen_constant_list JMPENV_PUSH returned %d",
5824 PL_dowarn = oldwarn;
5825 PL_warnhook = oldwarnhook;
5826 PL_diehook = olddiehook;
5827 PL_curcop = old_curcop;
5829 if (cxstack_ix > old_cxix) {
5830 assert(cxstack_ix == old_cxix + 1);
5831 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
5832 delete_eval_scope();
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--);
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));
5848 if (AvFILLp(av) != -1)
5849 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
5852 SvREADONLY_on(*svp);
5859 =head1 Optree Manipulation Functions
5862 /* List constructors */
5865 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
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.
5878 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
5886 if (first->op_type != (unsigned)type
5887 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
5889 return newLISTOP(type, 0, first, last);
5892 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
5893 first->op_flags |= OPf_KIDS;
5898 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
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.
5911 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
5919 if (first->op_type != (unsigned)type)
5920 return op_prepend_elem(type, first, last);
5922 if (last->op_type != (unsigned)type)
5923 return op_append_elem(type, first, last);
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);
5930 S_op_destroy(aTHX_ last);
5936 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
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.
5949 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
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;
5965 op_sibling_splice(last, NULL, 0, first);
5966 last->op_flags |= OPf_KIDS;
5970 return newLISTOP(type, 0, first, last);
5974 =for apidoc Am|OP *|op_convert_list|I32 type|I32 flags|OP *o
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.
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.
5988 Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o)
5991 if (type < 0) type = -type, flags |= OPf_SPECIAL;
5992 if (!o || o->op_type != OP_LIST)
5993 o = force_list(o, 0);
5996 o->op_flags &= ~OPf_WANT;
5997 o->op_private &= ~OPpLVAL_INTRO;
6000 if (!(PL_opargs[type] & OA_MARK))
6001 op_null(cLISTOPo->op_first);
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;
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.
6015 OpTYPE_set(o, type);
6017 o->op_flags |= flags;
6018 if (flags & OPf_FOLDED)
6021 o = CHECKOP(type, o);
6022 if (o->op_type != (unsigned)type)
6025 return fold_constants(op_integerize(op_std_init(o)));
6032 =head1 Optree construction
6034 =for apidoc Am|OP *|newNULLLIST
6036 Constructs, checks, and returns a new C<stub> op, which represents an
6037 empty list expression.
6043 Perl_newNULLLIST(pTHX)
6045 return newOP(OP_STUB, 0);
6048 /* promote o and any siblings to be a list if its not already; i.e.
6056 * pushmark - o - A - B
6058 * If nullit it true, the list op is nulled.
6062 S_force_list(pTHX_ OP *o, bool nullit)
6064 if (!o || o->op_type != OP_LIST) {
6067 /* manually detach any siblings then add them back later */
6068 rest = OpSIBLING(o);
6069 OpLASTSIB_set(o, NULL);
6071 o = newLISTOP(OP_LIST, 0, o, NULL);
6073 op_sibling_splice(o, cLISTOPo->op_last, 0, rest);
6081 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
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.
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.
6100 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
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;
6109 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP
6110 || type == OP_CUSTOM);
6112 NewOp(1101, listop, 1, LISTOP);
6113 OpTYPE_set(listop, type);
6116 listop->op_flags = (U8)flags;
6120 else if (!first && last)
6123 OpMORESIB_set(first, last);
6124 listop->op_first = first;
6125 listop->op_last = last;
6128 OpMORESIB_set(pushop, first);
6129 listop->op_first = pushop;
6130 listop->op_flags |= OPf_KIDS;
6132 listop->op_last = pushop;
6134 if (listop->op_last)
6135 OpLASTSIB_set(listop->op_last, (OP*)listop);
6137 return CHECKOP(type, listop);
6141 =for apidoc Am|OP *|newOP|I32 type|I32 flags
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
6152 Perl_newOP(pTHX_ I32 type, I32 flags)
6157 if (type == -OP_ENTEREVAL) {
6158 type = OP_ENTEREVAL;
6159 flags |= OPpEVAL_BYTES<<8;
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);
6167 NewOp(1101, o, 1, OP);
6168 OpTYPE_set(o, type);
6169 o->op_flags = (U8)flags;
6172 o->op_private = (U8)(0 | (flags >> 8));
6173 if (PL_opargs[type] & OA_RETSCALAR)
6175 if (PL_opargs[type] & OA_TARGET)
6176 o->op_targ = pad_alloc(type, SVs_PADTMP);
6177 return CHECKOP(type, o);
6181 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
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.
6195 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
6200 if (type == -OP_ENTEREVAL) {
6201 type = OP_ENTEREVAL;
6202 flags |= OPpEVAL_BYTES<<8;
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 );
6215 first = newOP(OP_STUB, 0);
6216 if (PL_opargs[type] & OA_MARK)
6217 first = force_list(first, 1);
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));
6225 if (!OpHAS_SIBLING(first)) /* true unless weird syntax error */
6226 OpLASTSIB_set(first, (OP*)unop);
6228 unop = (UNOP*) CHECKOP(type, unop);
6232 return fold_constants(op_integerize(op_std_init((OP *) unop)));
6236 =for apidoc newUNOP_AUX
6238 Similar to C<newUNOP>, but creates an C<UNOP_AUX> struct instead, with C<op_aux>
6239 initialised to C<aux>
6245 Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags, OP *first, UNOP_AUX_item *aux)
6250 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP_AUX
6251 || type == OP_CUSTOM);
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));
6261 if (first && !OpHAS_SIBLING(first)) /* true unless weird syntax error */
6262 OpLASTSIB_set(first, (OP*)unop);
6264 unop = (UNOP_AUX*) CHECKOP(type, unop);
6266 return op_std_init((OP *) unop);
6270 =for apidoc Am|OP *|newMETHOP|I32 type|I32 flags|OP *first
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>.
6285 S_newMETHOP_internal(pTHX_ I32 type, I32 flags, OP* dynamic_meth, SV* const_meth) {
6289 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_METHOP
6290 || type == OP_CUSTOM);
6292 NewOp(1101, methop, 1, METHOP);
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));
6299 if (!OpHAS_SIBLING(dynamic_meth))
6300 OpLASTSIB_set(dynamic_meth, (OP*)methop);
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;
6311 methop->op_rclass_targ = 0;
6313 methop->op_rclass_sv = NULL;
6316 OpTYPE_set(methop, type);
6317 return CHECKOP(type, methop);
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);
6327 =for apidoc Am|OP *|newMETHOP_named|I32 type|I32 flags|SV *const_meth
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>.
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);
6346 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
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.
6360 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
6365 ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
6366 || type == OP_NULL || type == OP_CUSTOM);
6368 NewOp(1101, binop, 1, BINOP);
6371 first = newOP(OP_NULL, 0);
6373 OpTYPE_set(binop, type);
6374 binop->op_first = first;
6375 binop->op_flags = (U8)(flags | OPf_KIDS);
6378 binop->op_private = (U8)(1 | (flags >> 8));
6381 binop->op_private = (U8)(2 | (flags >> 8));
6382 OpMORESIB_set(first, last);
6385 if (!OpHAS_SIBLING(last)) /* true unless weird syntax error */
6386 OpLASTSIB_set(last, (OP*)binop);
6388 binop->op_last = OpSIBLING(binop->op_first);
6390 OpLASTSIB_set(binop->op_last, (OP*)binop);
6392 binop = (BINOP*)CHECKOP(type, binop);
6393 if (binop->op_next || binop->op_type != (OPCODE)type)
6396 return fold_constants(op_integerize(op_std_init((OP *)binop)));
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
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)
6409 if (*((const UV *)a) < (*(const UV *)b))
6411 if (*((const UV *)a) > (*(const UV *)b))
6413 if (*((const UV *)a+1) < (*(const UV *)b+1))
6415 if (*((const UV *)a+1) > (*(const UV *)b+1))
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
6428 * flags as appropriate; this function may add
6431 * OPpTRANS_IDENTICAL
6437 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
6439 SV * const tstr = ((SVOP*)expr)->op_sv;
6440 SV * const rstr = ((SVOP*)repl)->op_sv;
6443 const U8 *t = (U8*)SvPV_const(tstr, tlen);
6444 const U8 *r = (U8*)SvPV_const(rstr, rlen);
6448 SSize_t struct_size; /* malloced size of table struct */
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);
6455 PERL_ARGS_ASSERT_PMTRANS;
6457 PL_hints |= HINT_BLOCK_SCOPE;
6460 o->op_private |= OPpTRANS_FROM_UTF;
6463 o->op_private |= OPpTRANS_TO_UTF;
6465 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
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"> .
6474 SV* const listsv = newSVpvs("# comment\n");
6476 const U8* tend = t + tlen;
6477 const U8* rend = r + rlen;
6493 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
6494 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
6497 const U32 flags = UTF8_ALLOW_DEFAULT;
6501 t = tsave = bytes_to_utf8(t, &len);
6504 if (!to_utf && rlen) {
6506 r = rsave = bytes_to_utf8(r, &len);
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
6516 * replace t/tlen/tend with a version that has the ranges
6519 U8 tmpbuf[UTF8_MAXBYTES+1];
6522 Newx(cp, 2*tlen, UV);
6524 transv = newSVpvs("");
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 */
6530 cp[2*i] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
6532 /* the toker converts X-Y into (X, ILLEGAL_UTF8_BYTE, Y) */
6533 if (t < tend && *t == ILLEGAL_UTF8_BYTE) {
6535 cp[2*i+1] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
6539 cp[2*i+1] = cp[2*i];
6544 /* sort the ranges */
6545 qsort(cp, i, 2*sizeof(UV), uvcompare);
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
6556 for (j = 0; j < i; j++) {
6558 diff = val - nextmin;
6560 t = uvchr_to_utf8(tmpbuf,nextmin);
6561 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
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);
6574 t = uvchr_to_utf8(tmpbuf,nextmin);
6575 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
6577 U8 range_mark = ILLEGAL_UTF8_BYTE;
6578 sv_catpvn(transv, (char *)&range_mark, 1);
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);
6587 else if (!rlen && !del) {
6588 r = t; rlen = tlen; rend = tend;
6592 if ((!rlen && !del) || t == r ||
6593 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
6595 o->op_private |= OPpTRANS_IDENTICAL;
6599 /* extract char ranges from t and r and append them to listsv */
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);
6606 if (t < tend && *t == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
6608 tlast = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
6615 /* now see if we need more "r" chars */
6616 if (rfirst > rlast) {
6618 rfirst = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
6620 if (r < rend && *r == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
6622 rlast = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
6631 rfirst = rlast = 0xffffffff;
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;
6646 if (rfirst == 0xffffffff) {
6647 diff = tdiff; /* oops, pretend rdiff is infinite */
6649 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
6650 (long)tfirst, (long)tlast);
6652 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
6656 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
6657 (long)tfirst, (long)(tfirst + diff),
6660 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
6661 (long)tfirst, (long)rfirst);
6663 if (rfirst + diff > max)
6664 max = rfirst + diff;
6666 grows = (tfirst < rfirst &&
6667 UVCHR_SKIP(tfirst) < UVCHR_SKIP(rfirst + diff));
6673 /* compile listsv into a swash and attach to o */
6681 else if (max > 0xff)
6686 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
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);
6692 SvREADONLY_on(swash);
6694 cSVOPo->op_sv = swash;
6696 SvREFCNT_dec(listsv);
6697 SvREFCNT_dec(transv);
6699 if (!del && havefinal && rlen)
6700 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
6701 newSVuv((UV)final), 0);
6710 else if (rlast == 0xffffffff)
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.
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
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
6732 * The toker will have already expanded char ranges in t and r.
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.
6739 struct_size = sizeof(OPtrans_map) + (256 - 1 + 1)*sizeof(short);
6740 tbl = (OPtrans_map*)PerlMemShared_calloc(struct_size, 1);
6742 cPVOPo->op_pv = (char*)tbl;
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)
6750 for (i = 0; i < tlen; i++)
6751 tbl->map[t[i]] = -1;
6753 for (i = 0, j = 0; i < 256; i++) {
6759 tbl->map[i] = r[j-1];
6761 tbl->map[i] = (short)i;
6764 tbl->map[i] = r[j++];
6766 if ( tbl->map[i] >= 0
6767 && UVCHR_IS_INVARIANT((UV)i)
6768 && !UVCHR_IS_INVARIANT((UV)(tbl->map[i]))
6778 /* More replacement chars than search chars:
6779 * store excess replacement chars at end of main table.
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;
6788 for (i = 0; i < excess; i++)
6789 tbl->map[i + 256] = r[j+i];
6792 /* no more replacement chars than search chars */
6793 if (!rlen && !del && !squash)
6794 o->op_private |= OPpTRANS_IDENTICAL;
6797 tbl->map[tbl->size] = del ? -2 : rlen ? r[rlen - 1] : -3;
6800 if (!rlen && !del) {
6803 o->op_private |= OPpTRANS_IDENTICAL;
6805 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
6806 o->op_private |= OPpTRANS_IDENTICAL;
6809 for (i = 0; i < 256; i++)
6811 for (i = 0, j = 0; i < tlen; i++,j++) {
6814 if (tbl->map[t[i]] == -1)
6815 tbl->map[t[i]] = -2;
6820 if (tbl->map[t[i]] == -1) {
6821 if ( UVCHR_IS_INVARIANT(t[i])
6822 && ! UVCHR_IS_INVARIANT(r[j]))
6824 tbl->map[t[i]] = r[j];
6827 tbl->map[tbl->size] = del ? -1 : rlen ? -1 : -3;
6830 /* both non-utf8 and utf8 code paths end up here */
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");
6840 o->op_private |= OPpTRANS_GROWS;
6849 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
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>.
6859 Perl_newPMOP(pTHX_ I32 type, I32 flags)
6864 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP
6865 || type == OP_CUSTOM);
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)
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);
6883 set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
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
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
6893 if (reflags && SvOK(reflags)) {
6894 set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
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);
6907 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
6909 SvEND_set(repointer_list, p);
6911 pmop->op_pmoffset = offset;
6912 /* This slot should be free, so assert this: */
6913 assert(PL_regex_pad[offset] == &PL_sv_undef);
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);
6922 return CHECKOP(type, pmop);
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))
6935 if (PadnameOUTER(pn) || PadnameIN_SCOPE(pn, PL_cop_seqmax))
6936 S_mark_padname_lvalue(aTHX_ pn);
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
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.
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
6958 Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, UV flags, I32 floor)
6962 I32 repl_has_vars = 0;
6963 bool is_trans = (o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
6964 bool is_compiletime;
6966 bool isreg = cBOOL(flags & 1);
6967 bool is_split = cBOOL(flags & 2);
6969 PERL_ARGS_ASSERT_PMRUNTIME;
6972 return pmtrans(o, expr, repl);
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 */
6983 if (expr->op_type == OP_LIST) {
6985 for (o = cLISTOPx(expr)->op_first; o; o = OpSIBLING(o)) {
6986 if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)) {
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
6994 op_sibling_splice(expr, o, 0,
6995 newSVOP(OP_CONST, 0, &PL_sv_no));
6997 o->op_next = OpSIBLING(o);
6999 else if (o->op_type != OP_CONST && o->op_type != OP_PUSHMARK)
7003 else if (expr->op_type != OP_CONST)
7008 /* fix up DO blocks; treat each one as a separate little sub;
7009 * also, mark any arrays as LIST/REF */
7011 if (expr->op_type == OP_LIST) {
7013 for (o = cLISTOPx(expr)->op_first; o; o = OpSIBLING(o)) {
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);
7023 if (!(o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)))
7025 o->op_next = NULL; /* undo temporary hack from above */
7028 if (cLISTOPo->op_first->op_type == OP_LEAVE) {
7029 LISTOP *leaveop = cLISTOPx(cLISTOPo->op_first);
7031 assert(leaveop->op_first->op_type == OP_ENTER);
7032 assert(OpHAS_SIBLING(leaveop->op_first));
7033 o->op_next = OpSIBLING(leaveop->op_first);
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);
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 */
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 */
7059 /* have to peep the DOs individually as we've removed it from
7060 * the op_next chain */
7062 S_prune_chain_head(&(o->op_next));
7064 /* runtime finalizes as part of finalizing whole tree */
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);
7075 PL_hints |= HINT_BLOCK_SCOPE;
7077 assert(floor==0 || (pm->op_pmflags & PMf_HAS_CV));
7079 if (is_compiletime) {
7080 U32 rx_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
7081 regexp_engine const *eng = current_re_engine();
7084 /* make engine handle split ' ' specially */
7085 pm->op_pmflags |= PMf_SPLIT;
7086 rx_flags |= RXf_SPLIT;
7089 if (!has_code || !eng->op_comp) {
7090 /* compile-time simple constant pattern */
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.
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]));
7110 assert(!PL_curpad[i]);
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.
7122 pm->op_pmflags &= ~PMf_HAS_CV;
7125 /* Skip compiling if parser found an error for this pattern */
7126 if (pm->op_pmflags & PMf_HAS_ERROR) {
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)
7140 /* compile-time pattern that includes literal code blocks */
7144 /* Skip compiling if parser found an error for this pattern */
7145 if (pm->op_pmflags & PMf_HAS_ERROR) {
7149 re = eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
7152 ((PL_hints & HINT_RE_EVAL) ? PMf_USE_RE_EVAL : 0))
7155 if (pm->op_pmflags & PMf_HAS_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;
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;
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);
7175 pm->op_code_list = expr;
7180 /* runtime pattern: build chain of regcomp etc ops */
7182 PADOFFSET cv_targ = 0;
7184 reglist = isreg && expr->op_type == OP_LIST;
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;
7195 /* make engine handle split ' ' specially */
7196 pm->op_pmflags |= PMf_SPLIT;
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
7203 if (pm->op_pmflags & PMf_KEEP || TAINTING_get)
7204 expr = newUNOP((TAINTING_get ? OP_REGCRESET : OP_REGCMAYBE),0,expr);
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
7216 * we build an anon sub that looks like
7218 * sub { "a", $b, '(?{...})' }
7220 * and call it, passing the returned list to regcomp.
7221 * Or to put it another way, the list of ops that get executed
7225 * ------ -------------------
7226 * pushmark (for regcomp)
7227 * pushmark (for entersub)
7231 * regcreset regcreset
7233 * const("a") const("a")
7235 * const("(?{...})") const("(?{...})")
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);
7248 expr = list(force_list(newUNOP(OP_ENTERSUB, 0, scalar(expr)), 1));
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;
7256 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
7257 if (PL_hints & HINT_RE_EVAL)
7258 S_set_haseval(aTHX);
7260 /* establish postfix order */
7261 if (expr->op_type == OP_REGCRESET || expr->op_type == OP_REGCMAYBE) {
7263 rcop->op_next = expr;
7264 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
7267 rcop->op_next = LINKLIST(expr);
7268 expr->op_next = (OP*)rcop;
7271 op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
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)
7284 OP *kid = cUNOPx(cUNOPx(curop)->op_first)->op_first;
7285 if (kid->op_type == OP_NULL && (sib = OpSIBLING(kid))
7286 && !OpHAS_SIBLING(sib))
7289 if (curop->op_type == OP_CONST)
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) {
7308 || !RX_PRELEN(PM_GETRE(pm))
7309 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
7311 pm->op_pmflags |= PMf_CONST; /* const for long enough */
7312 op_prepend_elem(o->op_type, scalar(repl), o);
7315 rcop = alloc_LOGOP(OP_SUBSTCONT, scalar(repl), o);
7316 rcop->op_private = 1;
7318 /* establish postfix order */
7319 rcop->op_next = LINKLIST(repl);
7320 repl->op_next = (OP*)rcop;
7322 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
7323 assert(!(pm->op_pmflags & PMf_ONCE));
7324 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
7333 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
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.
7344 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
7349 PERL_ARGS_ASSERT_NEWSVOP;
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);
7356 NewOp(1101, svop, 1, SVOP);
7357 OpTYPE_set(svop, type);
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)
7364 if (PL_opargs[type] & OA_TARGET)
7365 svop->op_targ = pad_alloc(type, SVs_PADTMP);
7366 return CHECKOP(type, svop);
7370 =for apidoc Am|OP *|newDEFSVOP|
7372 Constructs and returns an op to access C<$_>.
7378 Perl_newDEFSVOP(pTHX)
7380 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
7386 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
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
7394 This function only exists if Perl has been compiled to use ithreads.
7400 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
7405 PERL_ARGS_ASSERT_NEWPADOP;
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);
7412 NewOp(1101, padop, 1, PADOP);
7413 OpTYPE_set(padop, type);
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);
7419 padop->op_next = (OP*)padop;
7420 padop->op_flags = (U8)flags;
7421 if (PL_opargs[type] & OA_RETSCALAR)
7423 if (PL_opargs[type] & OA_TARGET)
7424 padop->op_targ = pad_alloc(type, SVs_PADTMP);
7425 return CHECKOP(type, padop);
7428 #endif /* USE_ITHREADS */
7431 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
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
7443 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
7445 PERL_ARGS_ASSERT_NEWGVOP;
7448 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
7450 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
7455 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
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>.
7468 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
7471 const bool utf8 = cBOOL(flags & SVf_UTF8);
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);
7480 NewOp(1101, pvop, 1, PVOP);
7481 OpTYPE_set(pvop, type);
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)
7488 if (PL_opargs[type] & OA_TARGET)
7489 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
7490 return CHECKOP(type, pvop);
7494 Perl_package(pTHX_ OP *o)
7496 SV *const sv = cSVOPo->op_sv;
7498 PERL_ARGS_ASSERT_PACKAGE;
7500 SAVEGENERICSV(PL_curstash);
7501 save_item(PL_curstname);
7503 PL_curstash = (HV *)SvREFCNT_inc(gv_stashsv(sv, GV_ADD));
7505 sv_setsv(PL_curstname, sv);
7507 PL_hints |= HINT_BLOCK_SCOPE;
7508 PL_parser->copline = NOLINE;
7514 Perl_package_version( pTHX_ OP *v )
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;
7525 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
7530 SV *use_version = NULL;
7532 PERL_ARGS_ASSERT_UTILIZE;
7534 if (idop->op_type != OP_CONST)
7535 Perl_croak(aTHX_ "Module name must be constant");
7540 SV * const vesv = ((SVOP*)version)->op_sv;
7542 if (!arg && !SvNIOKp(vesv)) {
7549 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
7550 Perl_croak(aTHX_ "Version number must be a constant number");
7552 /* Make copy of idop so we don't free it twice */
7553 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
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)));
7564 /* Fake up an import/unimport */
7565 if (arg && arg->op_type == OP_STUB) {
7566 imop = arg; /* no import on explicit () */
7568 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
7569 imop = NULL; /* use 5.0; */
7571 use_version = ((SVOP*)idop)->op_sv;
7573 idop->op_private |= OPpCONST_NOVER;
7578 /* Make copy of idop so we don't free it twice */
7579 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
7581 /* Fake up a method call to import/unimport */
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)
7591 /* Fake up the BEGIN {}, which does its thing immediately. */
7593 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
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) ));
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);
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;
7618 /* otherwise they are off */
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;
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.
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".
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.
7646 PL_hints |= HINT_BLOCK_SCOPE;
7647 PL_parser->copline = NOLINE;
7648 COP_SEQMAX_INC; /* Purely for B::*'s benefit */
7652 =head1 Embedding Functions
7654 =for apidoc load_module
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).
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.
7678 If C<PERL_LOADMOD_DENY> is set, the module is loaded as if with C<no> rather
7684 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
7688 PERL_ARGS_ASSERT_LOAD_MODULE;
7690 va_start(args, ver);
7691 vload_module(flags, name, ver, &args);
7695 #ifdef PERL_IMPLICIT_CONTEXT
7697 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
7701 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
7702 va_start(args, ver);
7703 vload_module(flags, name, ver, &args);
7709 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
7715 PERL_ARGS_ASSERT_VLOAD_MODULE;
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.
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
7730 SAVEVPTR(PL_curcop);
7731 lex_start(NULL, NULL, LEX_START_SAME_FILTER);
7732 floor = start_subparse(FALSE, 0);
7734 modname = newSVOP(OP_CONST, 0, name);
7735 modname->op_private |= OPpCONST_BARE;
7737 veop = newSVOP(OP_CONST, 0, ver);
7741 if (flags & PERL_LOADMOD_NOIMPORT) {
7742 imop = sawparens(newNULLLIST());
7744 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
7745 imop = va_arg(*args, OP*);
7750 sv = va_arg(*args, SV*);
7752 imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
7753 sv = va_arg(*args, SV*);
7757 utilize(!(flags & PERL_LOADMOD_DENY), floor, veop, modname, imop);
7761 PERL_STATIC_INLINE OP *
7762 S_new_entersubop(pTHX_ GV *gv, OP *arg)
7764 return newUNOP(OP_ENTERSUB, OPf_STACKED,
7765 newLISTOP(OP_LIST, 0, arg,
7766 newUNOP(OP_RV2CV, 0,
7767 newGVOP(OP_GV, 0, gv))));
7771 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
7776 PERL_ARGS_ASSERT_DOFILE;
7778 if (!force_builtin && (gv = gv_override("do", 2))) {
7779 doop = S_new_entersubop(aTHX_ gv, term);
7782 doop = newUNOP(OP_DOFILE, 0, scalar(term));
7788 =head1 Optree construction
7790 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
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.
7804 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
7806 return newBINOP(OP_LSLICE, flags,
7807 list(force_list(subscript, 1)),
7808 list(force_list(listval, 1)) );
7811 #define ASSIGN_LIST 1
7812 #define ASSIGN_REF 2
7815 S_assignment_type(pTHX_ const OP *o)
7824 if (o->op_type == OP_SREFGEN)
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 ))
7835 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
7836 o = cUNOPo->op_first;
7837 flags = o->op_flags;
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));
7847 if (t == ASSIGN_LIST && f == ASSIGN_LIST)
7849 if ((t == ASSIGN_LIST) ^ (f == ASSIGN_LIST))
7850 yyerror("Assignment to both a list and a scalar");
7854 if (type == OP_LIST &&
7855 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
7856 o->op_private & OPpLVAL_INTRO)
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)
7865 if (type == OP_PADAV || type == OP_PADHV)
7868 if (type == OP_RV2SV)
7875 S_newONCEOP(pTHX_ OP *initop, OP *padop)
7878 const PADOFFSET target = padop->op_targ;
7879 OP *const other = newOP(OP_PADSV,
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);
7887 OP *const condop = first->op_next;
7889 OpTYPE_set(condop, OP_ONCE);
7890 other->op_targ = target;
7891 nullop->op_flags |= OPf_WANT_SCALAR;
7893 /* Store the initializedness of state vars in a separate
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));
7904 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
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.
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.
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
7927 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
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));
7940 return newBINOP(optype, OPf_STACKED,
7941 op_lvalue(scalar(left), optype), scalar(right));
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";
7951 if (left->op_type == OP_ASLICE || left->op_type == OP_HSLICE)
7952 left->op_private &= ~ OPpSLICEWARNING;
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));
7960 if (OP_TYPE_IS_OR_WAS(left, OP_LIST))
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)) {
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)
7982 yyerror(no_list_state);
7983 lop = OpSIBLING(lop);
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)
7994 /* All single variable list context state assignments, hence
8004 if (left->op_flags & OPf_PARENS)
8005 yyerror(no_list_state);
8007 state_var_op = left;
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)
8017 && right->op_type == OP_SPLIT
8018 /* don't do twice, e.g. @b = (@a = split) */
8019 && !(right->op_private & OPpSPLIT_ASSIGN))
8023 if ( ( left->op_type == OP_RV2AV
8024 && (gvop=((UNOP*)left)->op_first)->op_type==OP_GV)
8025 || left->op_type == OP_PADAV)
8027 /* @pkg or @lex or local @pkg' or 'my @lex' */
8031 ((PMOP*)right)->op_pmreplrootu.op_pmtargetoff
8032 = cPADOPx(gvop)->op_padix;
8033 cPADOPx(gvop)->op_padix = 0; /* steal it */
8035 ((PMOP*)right)->op_pmreplrootu.op_pmtargetgv
8036 = MUTABLE_GV(cSVOPx(gvop)->op_sv);
8037 cSVOPx(gvop)->op_sv = NULL; /* steal it */
8039 right->op_private |=
8040 left->op_private & OPpOUR_INTRO;
8043 ((PMOP*)right)->op_pmreplrootu.op_pmtargetoff = left->op_targ;
8044 left->op_targ = 0; /* steal it */
8045 right->op_private |= OPpSPLIT_LEX;
8047 right->op_private |= left->op_private & OPpLVAL_INTRO;
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." */
8063 else if (left->op_type == OP_RV2AV) {
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,
8073 right->op_flags |= OPf_STACKED;
8074 /* Detach split and expunge aassign as above. */
8077 else if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
8078 ((LISTOP*)right)->op_last->op_type == OP_CONST)
8080 /* convert split(...,0) to split(..., PL_modcount+1) */
8082 &((SVOP*)((LISTOP*)right)->op_last)->op_sv;
8083 SV * const sv = *svp;
8084 if (SvIOK(sv) && SvIVX(sv) == 0)
8086 if (right->op_private & OPpSPLIT_IMPLIM) {
8087 /* our own SV, created in ck_split */
8089 sv_setiv(sv, PL_modcount+1);
8092 /* SV may belong to someone else */
8094 *svp = newSViv(PL_modcount+1);
8101 o = S_newONCEOP(aTHX_ o, state_var_op);
8104 if (assign_type == ASSIGN_REF)
8105 return newBINOP(OP_REFASSIGN, flags, scalar(right), left);
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),
8114 o = newBINOP(OP_SASSIGN, flags,
8115 scalar(right), op_lvalue(scalar(left), OP_SASSIGN) );
8121 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
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>
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.
8139 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
8142 const U32 seq = intro_my();
8143 const U32 utf8 = flags & SVf_UTF8;
8146 PL_parser->parsed_sub = 0;
8150 NewOp(1101, cop, 1, COP);
8151 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
8152 OpTYPE_set(cop, OP_DBSTATE);
8155 OpTYPE_set(cop, OP_NEXTSTATE);
8157 cop->op_flags = (U8)flags;
8158 CopHINTS_set(cop, PL_hints);
8160 if (VMSISH_HUSHED) cop->op_private |= OPpHUSH_VMSISH;
8162 cop->op_next = (OP*)cop;
8165 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
8166 CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop)));
8168 Perl_cop_store_label(aTHX_ cop, label, strlen(label), utf8);
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
8177 if (PL_parser->preambling != NOLINE) {
8178 CopLINE_set(cop, PL_parser->preambling);
8179 PL_parser->copline = NOLINE;
8181 else if (PL_parser->copline == NOLINE)
8182 CopLINE_set(cop, CopLINE(PL_curcop));
8184 CopLINE_set(cop, PL_parser->copline);
8185 PL_parser->copline = NOLINE;
8188 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
8190 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
8192 CopSTASH_set(cop, PL_curstash);
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);
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));
8206 if (flags & OPf_SPECIAL)
8208 return op_prepend_elem(OP_LINESEQ, (OP*)cop, o);
8212 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
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.
8226 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
8228 PERL_ARGS_ASSERT_NEWLOGOP;
8230 return new_logop(type, flags, &first, &other);
8234 S_search_const(pTHX_ OP *o)
8236 PERL_ARGS_ASSERT_SEARCH_CONST;
8238 switch (o->op_type) {
8242 if (o->op_flags & OPf_KIDS)
8243 return search_const(cUNOPo->op_first);
8250 if (!(o->op_flags & OPf_KIDS))
8252 kid = cLISTOPo->op_first;
8254 switch (kid->op_type) {
8258 kid = OpSIBLING(kid);
8261 if (kid != cLISTOPo->op_last)
8267 kid = cLISTOPo->op_last;
8269 return search_const(kid);
8277 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
8285 int prepend_not = 0;
8287 PERL_ARGS_ASSERT_NEW_LOGOP;
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
8297 switch (first->op_type) {
8301 /* XXX: Perhaps we should emit a stronger warning for these.
8302 Even with the high-precedence operator they don't seem to do
8305 But until we do, fall through here.
8311 /* XXX: Currently we allow people to "shoot themselves in the
8312 foot" by explicitly writing "(return $a) or $b".
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.
8318 use constant FEATURE => ( $] >= ... );
8319 sub { not FEATURE and return or do_stuff(); }
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
8330 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
8331 return newBINOP(type, flags, scalar(first), scalar(other));
8333 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP
8334 || type == OP_CUSTOM);
8336 scalarboolean(first);
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 */
8349 if (other->op_type == OP_CONST)
8350 other->op_private |= OPpCONST_SHORTCIRCUIT;
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;
8361 other->op_folded = 1;
8365 /* Elide the rhs, since the outcome is entirely determined by
8366 * the (constant) lhs */
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))) )
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))
8381 Perl_croak(aTHX_ "This use of my() in false conditional is "
8382 "no longer allowed");
8386 if (cstop->op_type == OP_CONST)
8387 cstop->op_private |= OPpCONST_SHORTCIRCUIT;
8392 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
8393 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
8395 const OP * const k1 = ((UNOP*)first)->op_first;
8396 const OP * const k2 = OpSIBLING(k1);
8398 switch (first->op_type)
8401 if (k2 && k2->op_type == OP_READLINE
8402 && (k2->op_flags & OPf_STACKED)
8403 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
8405 warnop = k2->op_type;
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)
8416 warnop = ((k1->op_type == OP_NULL)
8417 ? (OPCODE)k1->op_targ : k1->op_type);
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()",
8429 ((warnop == OP_READLINE || warnop == OP_GLOB)
8430 ? " construct" : "() operator"));
8431 CopLINE_set(PL_curcop, oldline);
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) { } */
8441 if (type == OP_AND || type == OP_OR) {
8447 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
8449 prepend_not = 1; /* prepend a NOT op later */
8454 logop = alloc_LOGOP(type, first, LINKLIST(other));
8455 logop->op_flags |= (U8)flags;
8456 logop->op_private = (U8)(1 | (flags >> 8));
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);
8464 CHECKOP(type,logop);
8466 o = newUNOP(prepend_not ? OP_NOT : OP_NULL,
8467 PL_opargs[type] & OA_RETSCALAR ? OPf_WANT_SCALAR : 0,
8475 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
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.
8489 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
8497 PERL_ARGS_ASSERT_NEWCONDOP;
8500 return newLOGOP(OP_AND, 0, first, trueop);
8502 return newLOGOP(OP_OR, 0, first, falseop);
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);
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;
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);
8530 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
8533 /* establish postfix order */
8534 start = LINKLIST(first);
8535 first->op_next = (OP*)logop;
8537 /* make first, trueop, falseop siblings */
8538 op_sibling_splice((OP*)logop, first, 0, trueop);
8539 op_sibling_splice((OP*)logop, trueop, 0, falseop);
8541 o = newUNOP(OP_NULL, 0, (OP*)logop);
8543 trueop->op_next = falseop->op_next = o;
8550 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
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.
8564 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
8572 PERL_ARGS_ASSERT_NEWRANGE;
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));
8579 /* make left and right siblings */
8580 op_sibling_splice((OP*)range, left, 0, right);
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);
8587 range->op_next = leftstart;
8589 left->op_next = flip;
8590 right->op_next = flop;
8593 pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0);
8594 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
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));
8600 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
8601 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
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);
8610 if (!flip->op_private || !flop->op_private)
8611 LINKLIST(o); /* blow off optimizer unless constant */
8617 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
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.
8633 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
8637 const bool once = block && block->op_flags & OPf_SPECIAL &&
8638 block->op_type == OP_NULL;
8640 PERL_UNUSED_ARG(debuggable);
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))
8650 /* Return the block now, so that S_new_logop does not try to
8654 return block; /* do {} while 0 does once */
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) {
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);
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);
8687 /* if block is null, the next op_append_elem() would put UNSTACK, a scalar
8688 * op, in listop. This is wrong. [perl #27024] */
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);
8699 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
8701 if (once && o != listop)
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;
8709 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
8711 o->op_flags |= flags;
8713 o->op_flags |= OPf_SPECIAL; /* suppress cx_popblock() curpm restoration*/
8718 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my
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.
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.
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.
8742 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
8743 OP *expr, OP *block, OP *cont, I32 has_my)
8752 PERL_UNUSED_ARG(debuggable);
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) {
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);
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);
8786 block = newOP(OP_NULL, 0);
8787 else if (cont || has_my) {
8788 block = op_scope(block);
8792 next = LINKLIST(cont);
8795 OP * const unstack = newOP(OP_UNSTACK, 0);
8798 cont = op_append_elem(OP_LINESEQ, cont, unstack);
8802 listop = op_append_list(OP_LINESEQ, block, cont);
8804 redo = LINKLIST(listop);
8808 o = new_logop(OP_AND, 0, &expr, &listop);
8809 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
8811 return expr; /* listop already freed by new_logop */
8814 ((LISTOP*)listop)->op_last->op_next =
8815 (o == listop ? redo : LINKLIST(o));
8821 NewOp(1101,loop,1,LOOP);
8822 OpTYPE_set(loop, OP_ENTERLOOP);
8823 loop->op_private = 0;
8824 loop->op_next = (OP*)loop;
8827 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
8829 loop->op_redoop = redo;
8830 loop->op_lastop = o;
8831 o->op_private |= loopflags;
8834 loop->op_nextop = next;
8836 loop->op_nextop = o;
8838 o->op_flags |= flags;
8839 o->op_private |= (flags >> 8);
8844 =for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont
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.
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
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
8867 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
8872 PADOFFSET padoff = 0;
8876 PERL_ARGS_ASSERT_NEWFOROP;
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);
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
8889 if (cUNOPx(sv)->op_first->op_type == OP_GV
8890 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
8891 iterpflags |= OPpITER_DEF;
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;
8899 PAD_COMPNAME_GEN_set(padoff, PERL_INT_MAX);
8901 else if (sv->op_type == OP_NULL && sv->op_targ == OP_SREFGEN)
8904 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
8906 PADNAME * const pn = PAD_COMPNAME(padoff);
8907 const char * const name = PadnamePV(pn);
8909 if (PadnameLEN(pn) == 2 && name[0] == '$' && name[1] == '_')
8910 iterpflags |= OPpITER_DEF;
8914 sv = newGVOP(OP_GV, 0, PL_defgv);
8915 iterpflags |= OPpITER_DEF;
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;
8922 else if (expr->op_type == OP_NULL &&
8923 (expr->op_flags & OPf_KIDS) &&
8924 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
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'.
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);
8936 range->op_flags &= ~OPf_KIDS;
8937 /* detach range's children */
8938 op_sibling_splice((OP*)range, NULL, -1, NULL);
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;
8947 expr = (OP*)(listop);
8949 iterflags |= OPf_STACKED;
8952 expr = op_lvalue(force_list(expr, 1), OP_GREPSTART);
8955 loop = (LOOP*)op_convert_list(OP_ENTERITER, iterflags,
8956 op_append_elem(OP_LIST, list(expr),
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)))
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);
8974 else if (!loop->op_slabbed)
8976 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
8977 OpLASTSIB_set(loop->op_last, (OP*)loop);
8979 loop->op_targ = padoff;
8980 wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0);
8985 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
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.
8996 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
9000 PERL_ARGS_ASSERT_NEWLOOPEX;
9002 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
9003 || type == OP_CUSTOM);
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);
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));
9018 /* Check for a constant argument */
9019 if (label->op_type == OP_CONST) {
9020 SV * const sv = ((SVOP *)label)->op_sv;
9022 const char *s = SvPV_const(sv,l);
9023 if (l == strlen(s)) {
9025 SvUTF8(((SVOP*)label)->op_sv),
9027 SvPV_nolen_const(((SVOP*)label)->op_sv)));
9031 /* If we have already created an op, we do not need the label. */
9034 else o = newUNOP(type, OPf_STACKED, label);
9036 PL_hints |= HINT_BLOCK_SCOPE;
9040 /* if the condition is a literal array or hash
9041 (or @{ ... } etc), make a reference to it.
9044 S_ref_array_or_hash(pTHX_ OP *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))
9052 return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN));
9055 && (cond->op_type == OP_ASLICE
9056 || cond->op_type == OP_KVASLICE
9057 || cond->op_type == OP_HSLICE
9058 || cond->op_type == OP_KVHSLICE)) {
9060 /* anonlist now needs a list from this op, was previously used in
9062 cond->op_flags &= ~(OPf_WANT_SCALAR | OPf_REF);
9063 cond->op_flags |= OPf_WANT_LIST;
9065 return newANONLIST(op_lvalue(cond, OP_ANONLIST));
9072 /* These construct the optree fragments representing given()
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.)
9083 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
9084 I32 enter_opcode, I32 leave_opcode,
9085 PADOFFSET entertarg)
9091 PERL_ARGS_ASSERT_NEWGIVWHENOP;
9092 PERL_UNUSED_ARG(entertarg); /* used to indicate targ of lexical $_ */
9094 enterop = alloc_LOGOP(enter_opcode, block, NULL);
9095 enterop->op_targ = 0;
9096 enterop->op_private = 0;
9098 o = newUNOP(leave_opcode, 0, (OP *) enterop);
9101 /* prepend cond if we have one */
9102 op_sibling_splice((OP*)enterop, NULL, 0, scalar(cond));
9104 o->op_next = LINKLIST(cond);
9105 cond->op_next = (OP *) enterop;
9108 /* This is a default {} block */
9109 enterop->op_flags |= OPf_SPECIAL;
9110 o ->op_flags |= OPf_SPECIAL;
9112 o->op_next = (OP *) enterop;
9115 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
9116 entergiven and enterwhen both
9119 enterop->op_next = LINKLIST(block);
9120 block->op_next = enterop->op_other = o;
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/
9134 [*] possibly surprising
9137 S_looks_like_bool(pTHX_ const OP *o)
9139 PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
9141 switch(o->op_type) {
9144 return looks_like_bool(cLOGOPo->op_first);
9148 OP* sibl = OpSIBLING(cLOGOPo->op_first);
9151 looks_like_bool(cLOGOPo->op_first)
9152 && looks_like_bool(sibl));
9158 o->op_flags & OPf_KIDS
9159 && looks_like_bool(cUNOPo->op_first));
9163 case OP_NOT: case OP_XOR:
9165 case OP_EQ: case OP_NE: case OP_LT:
9166 case OP_GT: case OP_LE: case OP_GE:
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:
9171 case OP_SEQ: case OP_SNE: case OP_SLT:
9172 case OP_SGT: case OP_SLE: case OP_SGE:
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:
9185 case OP_DEFINED: case OP_EXISTS:
9186 case OP_MATCH: case OP_EOF:
9194 /* optimised-away (index() != -1) or similar comparison */
9195 if (o->op_private & OPpTRUEBOOL)
9200 /* Detect comparisons that have been optimized away */
9201 if (cSVOPo->op_sv == &PL_sv_yes
9202 || cSVOPo->op_sv == &PL_sv_no)
9214 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
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 $_).
9226 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
9228 PERL_ARGS_ASSERT_NEWGIVENOP;
9229 PERL_UNUSED_ARG(defsv_off);
9232 return newGIVWHENOP(
9233 ref_array_or_hash(cond),
9235 OP_ENTERGIVEN, OP_LEAVEGIVEN,
9240 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
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.
9253 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
9255 const bool cond_llb = (!cond || looks_like_bool(cond));
9258 PERL_ARGS_ASSERT_NEWWHENOP;
9263 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
9265 scalar(ref_array_or_hash(cond)));
9268 return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0);
9271 /* must not conflict with SVf_UTF8 */
9272 #define CV_CKPROTO_CURSTASH 0x1
9275 Perl_cv_ckproto_len_flags(pTHX_ const CV *cv, const GV *gv, const char *p,
9276 const STRLEN len, const U32 flags)
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))
9284 STRLEN clen = CvPROTOLEN(cv), plen = len;
9286 PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS;
9288 if (p == NULL && cvp == NULL)
9291 if (!ckWARN_d(WARN_PROTOTYPE))
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))
9301 if (flags & SVf_UTF8) {
9302 if (bytes_cmp_utf8((const U8 *)cvp, clen, (const U8 *)p, plen) == 0)
9306 if (bytes_cmp_utf8((const U8 *)p, plen, (const U8 *)cvp, clen) == 0)
9312 msg = sv_newmortal();
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, "::");
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))));
9328 else sv_catsv(name, (SV *)gv);
9330 else name = (SV *)gv;
9332 sv_setpvs(msg, "Prototype mismatch:");
9334 Perl_sv_catpvf(aTHX_ msg, " sub %" SVf, SVfARG(name));
9336 Perl_sv_catpvf(aTHX_ msg, " (%" UTF8f ")",
9337 UTF8fARG(SvUTF8(cv),clen,cvp)
9340 sv_catpvs(msg, ": none");
9341 sv_catpvs(msg, " vs ");
9343 Perl_sv_catpvf(aTHX_ msg, "(%" UTF8f ")", UTF8fARG(flags & SVf_UTF8,len,p));
9345 sv_catpvs(msg, "none");
9346 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%" SVf, SVfARG(msg));
9349 static void const_sv_xsub(pTHX_ CV* cv);
9350 static void const_av_xsub(pTHX_ CV* cv);
9354 =head1 Optree Manipulation Functions
9356 =for apidoc cv_const_sv
9358 If C<cv> is a constant sub eligible for inlining, returns the constant
9359 value returned by the sub. Otherwise, returns C<NULL>.
9361 Constant subs can be created with C<newCONSTSUB> or as described in
9362 L<perlsub/"Constant Functions">.
9367 Perl_cv_const_sv(const CV *const cv)
9372 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
9374 sv = CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
9375 if (sv && SvTYPE(sv) == SVt_PVAV) return NULL;
9380 Perl_cv_const_sv_or_av(const CV * const cv)
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;
9389 /* op_const_sv: examine an optree to determine whether it's in-lineable.
9390 * Can be called in 2 ways:
9393 * look for a single OP_CONST with attached value: return the value
9395 * allow_lex && !CvCONST(cv);
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.
9404 S_op_const_sv(pTHX_ const OP *o, CV *cv, bool allow_lex)
9412 for (; o; o = o->op_next) {
9413 const OPCODE type = o->op_type;
9415 if (type == OP_NEXTSTATE || type == OP_LINESEQ
9417 || type == OP_PUSHMARK)
9419 if (type == OP_DBSTATE)
9421 if (type == OP_LEAVESUB)
9425 if (type == OP_CONST && cSVOPo->op_sv)
9427 else if (type == OP_UNDEF && !o->op_private) {
9431 else if (allow_lex && type == OP_PADSV) {
9432 if (PAD_COMPNAME_FLAGS(o->op_targ) & PADNAMEt_OUTER)
9434 sv = &PL_sv_undef; /* an arbitrary non-null value */
9452 S_already_defined(pTHX_ CV *const cv, OP * const block, OP * const o,
9453 PADNAME * const name, SV ** const const_svp)
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))
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);
9471 (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS
9472 & ~(CVf_LVALUE * pureperl));
9477 /* redundant check for speed: */
9478 if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) {
9479 const line_t oldline = CopLINE(PL_curcop);
9482 : sv_2mortal(newSVpvn_utf8(
9483 PadnamePV(name)+1,PadnameLEN(name)-1, PadnameUTF8(name)
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);
9500 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
9505 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
9508 CV *compcv = PL_compcv;
9511 PADOFFSET pax = o->op_targ;
9512 CV *outcv = CvOUTSIDE(PL_compcv);
9515 bool reusable = FALSE;
9517 #ifdef PERL_DEBUG_READONLY_OPS
9518 OPSLAB *slab = NULL;
9521 PERL_ARGS_ASSERT_NEWMYSUB;
9523 PL_hints |= HINT_BLOCK_SCOPE;
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
9530 my sub foo; sub { sub foo { } }
9533 name = PadlistNAMESARRAY(CvPADLIST(outcv))[pax];
9534 if (PadnameOUTER(name) && PARENT_PAD_INDEX(name)) {
9535 pax = PARENT_PAD_INDEX(name);
9536 outcv = CvOUTSIDE(outcv);
9541 &PadARRAY(PadlistARRAY(CvPADLIST(outcv))
9542 [CvDEPTH(outcv) ? CvDEPTH(outcv) : 1])[pax];
9543 spot = (CV **)svspot;
9545 if (!(PL_parser && PL_parser->error_count))
9546 move_proto_attr(&proto, &attrs, (GV *)PadnameSV(name), 0);
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);
9561 if (PL_parser && PL_parser->error_count) {
9563 SvREFCNT_dec(PL_compcv);
9568 if (CvDEPTH(outcv) && CvCLONE(compcv)) {
9570 svspot = (SV **)(spot = &clonee);
9572 else if (PadnameIsSTATE(name) || CvDEPTH(outcv))
9575 assert (SvTYPE(*spot) == SVt_PVCV);
9577 hek = CvNAME_HEK(*spot);
9581 PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1);
9582 CvNAME_HEK_set(*spot, hek =
9585 (PadnameLEN(name)-1) * (PadnameUTF8(name) ? -1 : 1),
9589 CvLEXICAL_on(*spot);
9591 cv = PadnamePROTOCV(name);
9592 svspot = (SV **)(spot = &PadnamePROTOCV(name));
9596 /* This makes sub {}; work as expected. */
9597 if (block->op_type == OP_STUB) {
9598 const line_t l = PL_parser->copline;
9600 block = newSTATEOP(0, NULL, 0);
9601 PL_parser->copline = l;
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);
9610 if (ps && !*ps && !attrs && !CvLVALUE(compcv))
9611 const_sv = S_op_const_sv(aTHX_ start, compcv, FALSE);
9619 const bool exists = CvROOT(cv) || CvXSUB(cv);
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
9625 if (exists || SvPOK(cv))
9626 cv_ckproto_len_flags(cv, (GV *)PadnameSV(name), ps, ps_len,
9628 /* already defined? */
9630 S_already_defined(aTHX_ cv, block, NULL, name, &const_sv);
9636 /* just a "sub foo;" when &foo is already defined */
9641 else if (CvDEPTH(outcv) && CvCLONE(compcv)) {
9648 SvREFCNT_inc_simple_void_NN(const_sv);
9649 SvFLAGS(const_sv) |= SVs_PADTMP;
9651 assert(!CvROOT(cv) && !CvCONST(cv));
9655 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
9656 CvFILE_set_from_cop(cv, PL_curcop);
9657 CvSTASH_set(cv, PL_curstash);
9660 SvPVCLEAR(MUTABLE_SV(cv)); /* prototype is "" */
9661 CvXSUBANY(cv).any_ptr = const_sv;
9662 CvXSUB(cv) = const_sv_xsub;
9666 CvFLAGS(cv) |= CvMETHOD(compcv);
9668 SvREFCNT_dec(compcv);
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.
9679 if (outcv == CvOUTSIDE(compcv) && !PadnameOUTER(name)) {
9680 assert(!CvWEAKOUTSIDE(compcv));
9681 SvREFCNT_dec(CvOUTSIDE(compcv));
9682 CvWEAKOUTSIDE_on(compcv);
9684 /* XXX else do we have a circular reference? */
9686 if (cv) { /* must reuse cv in case stub is referenced elsewhere */
9687 /* transfer PL_compcv to cv */
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);
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;
9712 Safefree(CvFILE(cv));
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;
9722 /* Might have had built-in attributes applied -- propagate them. */
9723 CvFLAGS(cv) |= (CvFLAGS(compcv) & CVf_BUILTIN_ATTRS);
9725 /* ... before we throw it away */
9726 SvREFCNT_dec(compcv);
9727 PL_compcv = compcv = cv;
9736 if (!CvNAME_HEK(cv)) {
9737 if (hek) (void)share_hek_hek(hek);
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),
9746 CvNAME_HEK_set(cv, hek);
9752 if (CvFILE(cv) && CvDYNFILE(cv))
9753 Safefree(CvFILE(cv));
9754 CvFILE_set_from_cop(cv, PL_curcop);
9755 CvSTASH_set(cv, PL_curstash);
9758 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
9760 SvUTF8_on(MUTABLE_SV(cv));
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. */
9769 PL_breakable_sub_gen++;
9771 /* The cv no longer needs to hold a refcount on the slab, as CvROOT
9772 itself has a refcount. */
9774 OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv));
9775 #ifdef PERL_DEBUG_READONLY_OPS
9776 slab = (OPSLAB *)CvSTART(cv);
9778 S_process_optree(aTHX_ cv, block, start);
9783 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
9784 apply_attrs(PL_curstash, MUTABLE_SV(cv), attrs);
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);
9793 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
9796 (long)CopLINE(PL_curcop));
9797 if (HvNAME_HEK(PL_curstash)) {
9798 sv_sethek(tmpstr, HvNAME_HEK(PL_curstash));
9799 sv_catpvs(tmpstr, "::");
9802 sv_setpvs(tmpstr, "__ANON__::");
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);
9816 call_sv(MUTABLE_SV(pcv), G_DISCARD);
9824 assert(CvDEPTH(outcv));
9826 &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[CvDEPTH(outcv)])[pax];
9828 cv_clone_into(clonee, *spot);
9829 else *spot = cv_clone(clonee);
9830 SvREFCNT_dec_NN(clonee);
9834 if (CvDEPTH(outcv) && !reusable && PadnameIsSTATE(name)) {
9835 PADOFFSET depth = CvDEPTH(outcv);
9838 svspot = &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[depth])[pax];
9840 *svspot = SvREFCNT_inc_simple_NN(cv);
9841 SvREFCNT_dec(oldcv);
9847 PL_parser->copline = NOLINE;
9849 #ifdef PERL_DEBUG_READONLY_OPS
9858 =for apidoc m|CV *|newATTRSUB_x|I32 floor|OP *o|OP *proto|OP *attrs|OP *block|bool o_is_gv
9860 Construct a Perl subroutine, also performing some surrounding jobs.
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.
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.
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.
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
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.
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.
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.
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.
9939 Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
9940 OP *block, bool o_is_gv)
9944 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
9946 CV *cv = NULL; /* the previous CV with this name, if any */
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
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;
9959 const char * const name =
9960 o ? SvPV_const(o_is_gv ? (SV *)o : cSVOPo->op_sv, namlen) : NULL;
9962 bool name_is_utf8 = o && !o_is_gv && SvUTF8(cSVOPo->op_sv);
9963 bool evanescent = FALSE;
9965 #ifdef PERL_DEBUG_READONLY_OPS
9966 OPSLAB *slab = NULL;
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. */
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)
9989 : GV_ADDMULTI | GV_NOINIT | GV_NOTQUAL;
9990 gv = gv_fetchsv(cSVOPo->op_sv, flags, SVt_PVCV);
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);
9999 } else if (PL_curstash) {
10000 gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
10003 gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
10009 move_proto_attr(&proto, &attrs, gv, 0);
10012 move_proto_attr(&proto, &attrs, (GV *)cSVOPo->op_sv, 1);
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);
10035 SvREFCNT_dec(PL_compcv);
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");
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));
10057 if (!block && SvTYPE(gv) != SVt_PVGV) {
10058 /* If we are not defining a new sub and the existing one is not a
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);
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,
10077 sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
10079 SvUTF8_on(MUTABLE_SV(gv));
10082 sv_setiv(MUTABLE_SV(gv), -1);
10085 SvREFCNT_dec(PL_compcv);
10086 cv = PL_compcv = NULL;
10091 cv = (!name || (isGV(gv) && GvCVGEN(gv)))
10095 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
10101 /* This makes sub {}; work as expected. */
10102 if (block->op_type == OP_STUB) {
10103 const line_t l = PL_parser->copline;
10105 block = newSTATEOP(0, NULL, 0);
10106 PL_parser->copline = l;
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))
10118 S_op_const_sv(aTHX_ start, PL_compcv,
10119 cBOOL(CvCLONE(PL_compcv)));
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);
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);
10143 if (ckWARN(WARN_REDEFINE)
10144 || ( ckWARN_d(WARN_REDEFINE)
10145 && ( !const_sv || SvRV(gv) == const_sv
10146 || sv_cmp(SvRV(gv), const_sv) ))) {
10148 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10149 "Constant subroutine %" SVf " redefined",
10150 SVfARG(cSVOPo->op_sv));
10153 SvREFCNT_inc_simple_void_NN(PL_compcv);
10154 CopLINE_set(PL_curcop, oldline);
10155 SvREFCNT_dec(SvRV(gv));
10160 const bool exists = CvROOT(cv) || CvXSUB(cv);
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
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);
10176 /* just a "sub foo;" when &foo is already defined */
10177 SAVEFREESV(PL_compcv);
10184 SvREFCNT_inc_simple_void_NN(const_sv);
10185 SvFLAGS(const_sv) |= SVs_PADTMP;
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;
10195 CvFLAGS(cv) |= CvMETHOD(PL_compcv);
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,
10206 assert(SvREFCNT((SV*)cv) != 0);
10207 CvFLAGS(cv) |= CvMETHOD(PL_compcv);
10211 SV_CHECK_THINKFIRST_COW_DROP((SV *)gv);
10212 prepare_SV_for_RV((SV *)gv);
10213 SvOK_off((SV *)gv);
10216 SvRV_set(gv, const_sv);
10220 SvREFCNT_dec(PL_compcv);
10225 /* don't copy new BEGIN CV to old BEGIN CV - RT #129099 */
10226 if (name && cv && *name == 'B' && strEQ(name, "BEGIN"))
10229 if (cv) { /* must reuse cv if autoloaded */
10230 /* transfer PL_compcv to cv */
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);
10242 assert(!CvCVGV_RC(cv));
10243 assert(CvGV(cv) == gv);
10248 PERL_HASH(hash, name, namlen);
10258 CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs
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;
10271 Safefree(CvFILE(cv));
10273 CvFILE_set_from_cop(cv, PL_curcop);
10274 CvSTASH_set(cv, PL_curstash);
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;
10282 /* Might have had built-in attributes applied -- propagate them. */
10283 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
10285 /* ... before we throw it away */
10286 SvREFCNT_dec(PL_compcv);
10291 if (name && isGV(gv)) {
10294 if (HvENAME_HEK(GvSTASH(gv)))
10295 /* sub Foo::bar { (shift)+1 } */
10296 gv_method_changed(gv);
10300 SV_CHECK_THINKFIRST_COW_DROP((SV *)gv);
10301 prepare_SV_for_RV((SV *)gv);
10302 SvOK_off((SV *)gv);
10305 SvRV_set(gv, (SV *)cv);
10306 if (HvENAME_HEK(PL_curstash))
10307 mro_method_changed_in(PL_curstash);
10311 assert(SvREFCNT((SV*)cv) != 0);
10313 if (!CvHASGV(cv)) {
10319 PERL_HASH(hash, name, namlen);
10320 CvNAME_HEK_set(cv, share_hek(name,
10326 CvFILE_set_from_cop(cv, PL_curcop);
10327 CvSTASH_set(cv, PL_curstash);
10331 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
10333 SvUTF8_on(MUTABLE_SV(cv));
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. */
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. */
10347 OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv));
10348 #ifdef PERL_DEBUG_READONLY_OPS
10349 slab = (OPSLAB *)CvSTART(cv);
10351 S_process_optree(aTHX_ cv, block, start);
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))
10362 apply_attrs(stash, MUTABLE_SV(cv), attrs);
10364 SvREFCNT_inc_simple_void_NN(cv);
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);
10373 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
10374 CopFILE(PL_curcop),
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);
10387 call_sv(MUTABLE_SV(pcv), G_DISCARD);
10393 if (PL_parser && PL_parser->error_count)
10394 clear_special_blocks(name, gv, cv);
10397 process_special_blocks(floor, name, gv, cv);
10403 assert(!cv || evanescent || SvREFCNT((SV*)cv) != 0);
10405 PL_parser->copline = NOLINE;
10406 LEAVE_SCOPE(floor);
10408 assert(!cv || evanescent || SvREFCNT((SV*)cv) != 0);
10410 #ifdef PERL_DEBUG_READONLY_OPS
10414 if (cv && name && block && CvOUTSIDE(cv) && !CvEVAL(CvOUTSIDE(cv)))
10415 pad_add_weakref(cv);
10421 S_clear_special_blocks(pTHX_ const char *const fullname,
10422 GV *const gv, CV *const cv) {
10426 PERL_ARGS_ASSERT_CLEAR_SPECIAL_BLOCKS;
10428 colon = strrchr(fullname,':');
10429 name = colon ? colon + 1 : fullname;
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"))) {
10440 GvCV_set(gv, NULL);
10441 SvREFCNT_dec_NN(MUTABLE_SV(cv));
10445 /* Returns true if the sub has been freed. */
10447 S_process_special_blocks(pTHX_ I32 floor, const char *const fullname,
10451 const char *const colon = strrchr(fullname,':');
10452 const char *const name = colon ? colon + 1 : fullname;
10454 PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
10456 if (*name == 'B') {
10457 if (strEQ(name, "BEGIN")) {
10458 const I32 oldscope = PL_scopestack_ix;
10461 if (floor) LEAVE_SCOPE(floor);
10463 PUSHSTACKi(PERLSI_REQUIRE);
10464 SAVECOPFILE(&PL_compiling);
10465 SAVECOPLINE(&PL_compiling);
10466 SAVEVPTR(PL_curcop);
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);
10475 return !PL_savebegin;
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));
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));
10493 } else if (*name == 'C') {
10494 if (strEQ(name, "CHECK")) {
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));
10503 } else if (*name == 'I') {
10504 if (strEQ(name, "INIT")) {
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));
10515 DEBUG_x( dump_sub(gv) );
10517 GvCV_set(gv,0); /* cv has been hijacked */
10523 =for apidoc Am|CV *|newCONSTSUB|HV *stash|const char *name|SV *sv
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.)
10533 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
10535 return newCONSTSUB_flags(stash, name, name ? strlen(name) : 0, 0, sv);
10539 =for apidoc Am|CV *|newCONSTSUB_flags|HV *stash|const char *name|STRLEN len|U32 flags|SV *sv
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.
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.
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.
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>
10577 C<flags> should not have bits set other than C<SVf_UTF8>.
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.
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.
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.
10609 Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len,
10613 const char *const file = CopFILE(PL_curcop);
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
10621 SAVEVPTR(PL_curcop);
10622 SAVECOMPILEWARNINGS();
10623 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
10624 PL_curcop = &PL_compiling;
10626 SAVECOPLINE(PL_curcop);
10627 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
10630 PL_hints &= ~HINT_BLOCK_SCOPE;
10633 SAVEGENERICSV(PL_curstash);
10634 PL_curstash = (HV *)SvREFCNT_inc_simple_NN(stash);
10637 /* Protect sv against leakage caused by fatal warnings. */
10638 if (sv) SAVEFREESV(sv);
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
10648 file ? file : "", "",
10649 &sv, XS_DYNAMIC_FILENAME | flags);
10651 assert(SvREFCNT((SV*)cv) != 0);
10652 CvXSUBANY(cv).any_ptr = SvREFCNT_inc_simple(sv);
10661 =for apidoc U||newXS
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.
10670 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
10672 PERL_ARGS_ASSERT_NEWXS;
10673 return newXS_len_flags(
10674 name, name ? strlen(name) : 0, subaddr, filename, NULL, NULL, 0
10679 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
10680 const char *const filename, const char *const proto,
10683 PERL_ARGS_ASSERT_NEWXS_FLAGS;
10684 return newXS_len_flags(
10685 name, name ? strlen(name) : 0, subaddr, filename, proto, NULL, flags
10690 Perl_newXS_deffile(pTHX_ const char *name, XSUBADDR_t subaddr)
10692 PERL_ARGS_ASSERT_NEWXS_DEFFILE;
10693 return newXS_len_flags(
10694 name, strlen(name), subaddr, NULL, NULL, NULL, 0
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
10701 Construct an XS subroutine, also performing some surrounding jobs.
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
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
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.
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.
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.
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.
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,
10777 bool interleave = FALSE;
10778 bool evanescent = FALSE;
10780 PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS;
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);
10789 if ((cv = (name ? GvCV(gv) : NULL))) {
10791 /* just a cached method */
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
10812 if (cv) /* must reuse cv if autoloaded */
10815 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
10819 if (HvENAME_HEK(GvSTASH(gv)))
10820 gv_method_changed(gv); /* newXS */
10824 assert(SvREFCNT((SV*)cv) != 0);
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) {
10834 CvFILE(cv) = savepv(filename);
10836 /* NOTE: not copied, as it is expected to be an external constant string */
10837 CvFILE(cv) = (char *)filename;
10840 assert((flags & XS_DYNAMIC_FILENAME) == 0 && PL_xsubfilename);
10841 CvFILE(cv) = (char*)PL_xsubfilename;
10844 CvXSUB(cv) = subaddr;
10845 #ifndef PERL_IMPLICIT_CONTEXT
10846 CvHSCXT(cv) = &PL_stack_sp;
10852 evanescent = process_special_blocks(0, name, gv, cv);
10855 } /* <- not a conditional branch */
10858 assert(evanescent || SvREFCNT((SV*)cv) != 0);
10860 if (!evanescent) sv_setpv(MUTABLE_SV(cv), proto);
10861 if (interleave) LEAVE;
10862 assert(evanescent || SvREFCNT((SV*)cv) != 0);
10866 /* Add a stub CV to a typeglob.
10867 * This is the implementation of a forward declaration, 'sub foo';'
10871 Perl_newSTUB(pTHX_ GV *gv, bool fake)
10873 CV *cv = MUTABLE_CV(newSV_type(SVt_PVCV));
10875 PERL_ARGS_ASSERT_NEWSTUB;
10876 assert(!GvCVu(gv));
10879 if (!fake && GvSTASH(gv) && HvENAME_HEK(GvSTASH(gv)))
10880 gv_method_changed(gv);
10882 cvgv = gv_fetchsv((SV *)gv, GV_ADDMULTI, SVt_PVCV);
10886 CvGV_set(cv, cvgv);
10887 CvFILE_set_from_cop(cv, PL_curcop);
10888 CvSTASH_set(cv, PL_curstash);
10894 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
10901 if (PL_parser && PL_parser->error_count) {
10907 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
10908 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
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);
10917 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10918 "Format %" SVf " redefined", SVfARG(cSVOPo->op_sv));
10920 /* diag_listed_as: Format %s redefined */
10921 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10922 "Format STDOUT redefined");
10924 CopLINE_set(PL_curcop, oldline);
10929 GvFORM(gv) = (CV *)SvREFCNT_inc_simple_NN(cv);
10931 CvFILE_set_from_cop(cv, PL_curcop);
10934 root = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
10936 start = LINKLIST(root);
10938 S_process_optree(aTHX_ cv, root, start);
10939 cv_forget_slab(cv);
10944 PL_parser->copline = NOLINE;
10945 LEAVE_SCOPE(floor);
10946 PL_compiling.cop_seq = 0;
10950 Perl_newANONLIST(pTHX_ OP *o)
10952 return op_convert_list(OP_ANONLIST, OPf_SPECIAL, o);
10956 Perl_newANONHASH(pTHX_ OP *o)
10958 return op_convert_list(OP_ANONHASH, OPf_SPECIAL, o);
10962 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
10964 return newANONATTRSUB(floor, proto, NULL, block);
10968 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
10970 SV * const cv = MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block));
10972 newSVOP(OP_ANONCODE, 0,
10974 if (CvANONCONST(cv))
10975 anoncode = newUNOP(OP_ANONCONST, 0,
10976 op_convert_list(OP_ENTERSUB,
10977 OPf_STACKED|OPf_WANT_SCALAR,
10979 return newUNOP(OP_REFGEN, 0, anoncode);
10983 Perl_oopsAV(pTHX_ OP *o)
10987 PERL_ARGS_ASSERT_OOPSAV;
10989 switch (o->op_type) {
10992 OpTYPE_set(o, OP_PADAV);
10993 return ref(o, OP_RV2AV);
10997 OpTYPE_set(o, OP_RV2AV);
11002 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
11009 Perl_oopsHV(pTHX_ OP *o)
11013 PERL_ARGS_ASSERT_OOPSHV;
11015 switch (o->op_type) {
11018 OpTYPE_set(o, OP_PADHV);
11019 return ref(o, OP_RV2HV);
11023 OpTYPE_set(o, OP_RV2HV);
11024 /* rv2hv steals the bottom bit for its own uses */
11025 o->op_private &= ~OPpARG1_MASK;
11030 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
11037 Perl_newAVREF(pTHX_ OP *o)
11041 PERL_ARGS_ASSERT_NEWAVREF;
11043 if (o->op_type == OP_PADANY) {
11044 OpTYPE_set(o, OP_PADAV);
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");
11050 return newUNOP(OP_RV2AV, 0, scalar(o));
11054 Perl_newGVREF(pTHX_ I32 type, OP *o)
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);
11062 Perl_newHVREF(pTHX_ OP *o)
11066 PERL_ARGS_ASSERT_NEWHVREF;
11068 if (o->op_type == OP_PADANY) {
11069 OpTYPE_set(o, OP_PADHV);
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");
11075 return newUNOP(OP_RV2HV, 0, scalar(o));
11079 Perl_newCVREF(pTHX_ I32 flags, OP *o)
11081 if (o->op_type == OP_PADANY) {
11083 OpTYPE_set(o, OP_PADCV);
11085 return newUNOP(OP_RV2CV, flags, scalar(o));
11089 Perl_newSVREF(pTHX_ OP *o)
11093 PERL_ARGS_ASSERT_NEWSVREF;
11095 if (o->op_type == OP_PADANY) {
11096 OpTYPE_set(o, OP_PADSV);
11100 return newUNOP(OP_RV2SV, 0, scalar(o));
11103 /* Check routines. See the comments at the top of this file for details
11104 * on when these are called */
11107 Perl_ck_anoncode(pTHX_ OP *o)
11109 PERL_ARGS_ASSERT_CK_ANONCODE;
11111 cSVOPo->op_targ = pad_add_anon((CV*)cSVOPo->op_sv, o->op_type);
11112 cSVOPo->op_sv = NULL;
11117 S_io_hints(pTHX_ OP *o)
11119 #if O_BINARY != 0 || O_TEXT != 0
11121 PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;;
11123 SV **svp = hv_fetchs(table, "open_IN", FALSE);
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. */
11130 if (mode & O_BINARY)
11131 o->op_private |= OPpOPEN_IN_RAW;
11135 o->op_private |= OPpOPEN_IN_CRLF;
11139 svp = hv_fetchs(table, "open_OUT", FALSE);
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. */
11146 if (mode & O_BINARY)
11147 o->op_private |= OPpOPEN_OUT_RAW;
11151 o->op_private |= OPpOPEN_OUT_CRLF;
11156 PERL_UNUSED_CONTEXT;
11157 PERL_UNUSED_ARG(o);
11162 Perl_ck_backtick(pTHX_ OP *o)
11167 PERL_ARGS_ASSERT_CK_BACKTICK;
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)))
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);
11177 else if (!(o->op_flags & OPf_KIDS))
11178 newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
11183 S_io_hints(aTHX_ o);
11188 Perl_ck_bitop(pTHX_ OP *o)
11190 PERL_ARGS_ASSERT_CK_BITOP;
11192 o->op_private = (U8)(PL_hints & HINT_INTEGER);
11194 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
11195 && OP_IS_INFIX_BIT(o->op_type))
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 ? "&." : "^."
11218 PERL_STATIC_INLINE bool
11219 is_dollar_bracket(pTHX_ const OP * const o)
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)), "[");
11229 /* for lt, gt, le, ge, eq, ne and their i_ variants */
11232 Perl_ck_cmp(pTHX_ OP *o)
11238 OP *indexop, *constop, *start;
11242 PERL_ARGS_ASSERT_CK_CMP;
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);
11249 if (!is_eq && ckWARN(WARN_SYNTAX)) {
11250 const OP *kid = cUNOPo->op_first;
11253 ( is_dollar_bracket(aTHX_ kid)
11254 && OpSIBLING(kid) && OpSIBLING(kid)->op_type == OP_CONST
11256 || ( kid->op_type == OP_CONST
11257 && (kid = OpSIBLING(kid)) && is_dollar_bracket(aTHX_ kid)
11261 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
11262 "$[ used in %s (did you mean $] ?)", OP_DESC(o));
11265 /* convert (index(...) == -1) and variations into
11266 * (r)index/BOOL(,NEG)
11271 indexop = cUNOPo->op_first;
11272 constop = OpSIBLING(indexop);
11274 if (indexop->op_type == OP_CONST) {
11276 indexop = OpSIBLING(constop);
11281 if (indexop->op_type != OP_INDEX && indexop->op_type != OP_RINDEX)
11284 /* ($lex = index(....)) == -1 */
11285 if (indexop->op_private & OPpTARGET_MY)
11288 if (constop->op_type != OP_CONST)
11291 sv = cSVOPx_sv(constop);
11292 if (!(sv && SvIOK_notUV(sv)))
11296 if (iv != -1 && iv != 0)
11300 if (o->op_type == OP_LT || o->op_type == OP_I_LT) {
11301 if (!(iv0 ^ reverse))
11305 else if (o->op_type == OP_LE || o->op_type == OP_I_LE) {
11310 else if (o->op_type == OP_GE || o->op_type == OP_I_GE) {
11311 if (!(iv0 ^ reverse))
11315 else if (o->op_type == OP_GT || o->op_type == OP_I_GT) {
11320 else if (o->op_type == OP_EQ || o->op_type == OP_I_EQ) {
11326 assert(o->op_type == OP_NE || o->op_type == OP_I_NE);
11332 indexop->op_flags &= ~OPf_PARENS;
11333 indexop->op_flags |= (o->op_flags & OPf_PARENS);
11334 indexop->op_private |= OPpTRUEBOOL;
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);
11346 Perl_ck_concat(pTHX_ OP *o)
11348 const OP * const kid = cUNOPo->op_first;
11350 PERL_ARGS_ASSERT_CK_CONCAT;
11351 PERL_UNUSED_CONTEXT;
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))
11357 o->op_flags |= OPf_STACKED;
11358 o->op_private |= OPpCONCAT_NESTED;
11364 Perl_ck_spair(pTHX_ OP *o)
11368 PERL_ARGS_ASSERT_CK_SPAIR;
11370 if (o->op_flags & OPf_KIDS) {
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);
11380 const OPCODE type = newop->op_type;
11381 if (OpHAS_SIBLING(newop))
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)
11392 /* excise first sibling */
11393 op_sibling_splice(kid, NULL, 1, NULL);
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];
11403 Perl_ck_delete(pTHX_ OP *o)
11405 PERL_ARGS_ASSERT_CK_DELETE;
11409 if (o->op_flags & OPf_KIDS) {
11410 OP * const kid = cUNOPo->op_first;
11411 switch (kid->op_type) {
11413 o->op_flags |= OPf_SPECIAL;
11416 o->op_private |= OPpSLICE;
11419 o->op_flags |= OPf_SPECIAL;
11424 o->op_flags |= OPf_SPECIAL;
11427 o->op_private |= OPpKVSLICE;
11430 Perl_croak(aTHX_ "delete argument is not a HASH or ARRAY "
11431 "element or slice");
11433 if (kid->op_private & OPpLVAL_INTRO)
11434 o->op_private |= OPpLVAL_INTRO;
11441 Perl_ck_eof(pTHX_ OP *o)
11443 PERL_ARGS_ASSERT_CK_EOF;
11445 if (o->op_flags & OPf_KIDS) {
11447 if (cLISTOPo->op_first->op_type == OP_STUB) {
11449 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
11454 kid = cLISTOPo->op_first;
11455 if (kid->op_type == OP_RV2GV)
11456 kid->op_private |= OPpALLOW_FAKE;
11463 Perl_ck_eval(pTHX_ OP *o)
11467 PERL_ARGS_ASSERT_CK_EVAL;
11469 PL_hints |= HINT_BLOCK_SCOPE;
11470 if (o->op_flags & OPf_KIDS) {
11471 SVOP * const kid = (SVOP*)cUNOPo->op_first;
11474 if (o->op_type == OP_ENTERTRY) {
11477 /* cut whole sibling chain free from o */
11478 op_sibling_splice(o, NULL, -1, NULL);
11481 enter = alloc_LOGOP(OP_ENTERTRY, NULL, NULL);
11483 /* establish postfix order */
11484 enter->op_next = (OP*)enter;
11486 o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
11487 OpTYPE_set(o, OP_LEAVETRY);
11488 enter->op_other = o;
11493 S_set_haseval(aTHX);
11497 const U8 priv = o->op_private;
11499 /* the newUNOP will recursively call ck_eval(), which will handle
11500 * all the stuff at the end of this function, like adding
11503 return newUNOP(OP_ENTEREVAL, priv <<8, newDEFSVOP());
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);
11515 o->op_private |= OPpEVAL_HAS_HH;
11517 if (!(o->op_private & OPpEVAL_BYTES)
11518 && FEATURE_UNIEVAL_IS_ENABLED)
11519 o->op_private |= OPpEVAL_UNICODE;
11524 Perl_ck_exec(pTHX_ OP *o)
11526 PERL_ARGS_ASSERT_CK_EXEC;
11528 if (o->op_flags & OPf_STACKED) {
11531 kid = OpSIBLING(cUNOPo->op_first);
11532 if (kid->op_type == OP_RV2GV)
11541 Perl_ck_exists(pTHX_ OP *o)
11543 PERL_ARGS_ASSERT_CK_EXISTS;
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))
11553 "exists argument is not a subroutine name");
11554 o->op_private |= OPpEXISTS_SUB;
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");
11567 Perl_ck_rvconst(pTHX_ OP *o)
11570 SVOP * const kid = (SVOP*)cUNOPo->op_first;
11572 PERL_ARGS_ASSERT_CK_RVCONST;
11574 if (o->op_type == OP_RV2HV)
11575 /* rv2hv steals the bottom bit for its own uses */
11576 o->op_private &= ~OPpARG1_MASK;
11578 o->op_private |= (PL_hints & HINT_STRICT_REFS);
11580 if (kid->op_type == OP_CONST) {
11583 SV * const kidsv = kid->op_sv;
11585 /* Is it a constant from cv_const_sv()? */
11586 if ((SvROK(kidsv) || isGV_with_GP(kidsv)) && SvREADONLY(kidsv)) {
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) {
11594 badthing = "a SCALAR";
11597 badthing = "an ARRAY";
11600 badthing = "a HASH";
11608 "Can't use bareword (\"%" SVf "\") as %s ref while \"strict refs\" in use",
11609 SVfARG(kidsv), badthing);
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.
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
11624 : iscv | !(kid->op_private & OPpCONST_ENTERED),
11627 : o->op_type == OP_RV2SV
11629 : o->op_type == OP_RV2AV
11631 : o->op_type == OP_RV2HV
11638 if (!(o->op_private & OPpMAY_RETURN_CONSTANT)
11639 && SvTYPE(SvRV(gv)) != SVt_PVCV)
11640 gv_fetchsv(kidsv, GV_ADDMULTI, SVt_PVCV);
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)));
11651 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
11653 kid->op_private = 0;
11654 /* FAKE globs in the symbol table cause weird bugs (#77810) */
11662 Perl_ck_ftst(pTHX_ OP *o)
11665 const I32 type = o->op_type;
11667 PERL_ARGS_ASSERT_CK_FTST;
11669 if (o->op_flags & OPf_REF) {
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;
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));
11684 if ((kidtype == OP_RV2AV || kidtype == OP_PADAV) && ckWARN(WARN_SYNTAX)) {
11685 SV *name = S_op_varname_subscript(aTHX_ (OP*)kid, 2);
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);
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);
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
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
11709 o->op_private |= OPpFT_AFTER_t;
11714 if (type == OP_FTTTY)
11715 o = newGVOP(type, OPf_REF, PL_stdingv);
11717 o = newUNOP(type, 0, newDEFSVOP());
11723 Perl_ck_fun(pTHX_ OP *o)
11725 const int type = o->op_type;
11726 I32 oa = PL_opargs[type] >> OASHIFT;
11728 PERL_ARGS_ASSERT_CK_FUN;
11730 if (o->op_flags & OPf_STACKED) {
11731 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
11732 oa &= ~OA_OPTIONAL;
11734 return no_fh_allowed(o);
11737 if (o->op_flags & OPf_KIDS) {
11738 OP *prev_kid = NULL;
11739 OP *kid = cLISTOPo->op_first;
11741 bool seen_optional = FALSE;
11743 if (kid->op_type == OP_PUSHMARK ||
11744 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
11747 kid = OpSIBLING(kid);
11749 if (kid && kid->op_type == OP_COREARGS) {
11750 bool optional = FALSE;
11753 if (oa & OA_OPTIONAL) optional = TRUE;
11756 if (optional) o->op_private |= numargs;
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);
11767 seen_optional = TRUE;
11774 /* list seen where single (scalar) arg expected? */
11775 if (numargs == 1 && !(oa >> 4)
11776 && kid->op_type == OP_LIST && type != OP_SCALAR)
11778 return too_many_arguments_pv(o,PL_op_desc[type], 0);
11780 if (type != OP_DELETE) scalar(kid);
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",
11797 if (kid->op_type == OP_CONST
11798 && ( !SvROK(cSVOPx_sv(kid))
11799 || SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV )
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);
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);
11811 op_lvalue(kid, type);
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);
11821 /* replace kid with newop in chain */
11823 S_op_sibling_newUNOP(aTHX_ o, prev_kid, OP_NULL, 0);
11824 newop->op_next = newop;
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))
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);
11840 else if (kid->op_type == OP_READLINE) {
11841 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
11842 bad_type_pv(numargs, "HANDLE", o, kid);
11845 I32 flags = OPf_SPECIAL;
11847 PADOFFSET targ = 0;
11849 /* is this op a FH constructor? */
11850 if (is_handle_constructor(o,numargs)) {
11851 const char *name = NULL;
11854 bool want_dollar = TRUE;
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
11862 if (kid->op_type == OP_PADSV) {
11864 = PAD_COMPNAME_SV(kid->op_targ);
11865 name = PadnamePV (pn);
11866 len = PadnameLEN(pn);
11867 name_utf8 = PadnameUTF8(pn);
11869 else if (kid->op_type == OP_RV2SV
11870 && kUNOP->op_first->op_type == OP_GV)
11872 GV * const gv = cGVOPx_gv(kUNOP->op_first);
11874 len = GvNAMELEN(gv);
11875 name_utf8 = GvNAMEUTF8(gv) ? SVf_UTF8 : 0;
11877 else if (kid->op_type == OP_AELEM
11878 || kid->op_type == OP_HELEM)
11881 OP *op = ((BINOP*)kid)->op_first;
11885 const char * const a =
11886 kid->op_type == OP_AELEM ?
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);
11896 Perl_newSVpvf(aTHX_
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);
11908 Perl_newSVpvf(aTHX_
11914 name = SvPV_const(tmpstr, len);
11915 name_utf8 = SvUTF8(tmpstr);
11916 sv_2mortal(tmpstr);
11920 name = "__ANONIO__";
11922 want_dollar = FALSE;
11924 op_lvalue(kid, type);
11928 targ = pad_alloc(OP_RV2GV, SVf_READONLY);
11929 namesv = PAD_SVl(targ);
11930 if (want_dollar && *name != '$')
11931 sv_setpvs(namesv, "$");
11934 sv_catpvn(namesv, name, len);
11935 if ( name_utf8 ) SvUTF8_on(namesv);
11939 kid = S_op_sibling_newUNOP(aTHX_ o, prev_kid,
11941 kid->op_targ = targ;
11942 kid->op_private |= priv;
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);
11957 kid = OpSIBLING(kid);
11959 /* FIXME - should the numargs or-ing move after the too many
11960 * arguments check? */
11961 o->op_private |= numargs;
11963 return too_many_arguments_pv(o,OP_DESC(o), 0);
11966 else if (PL_opargs[type] & OA_DEFGV) {
11967 /* Ordering of these two is important to keep f_map.t passing. */
11969 return newUNOP(type, 0, newDEFSVOP());
11973 while (oa & OA_OPTIONAL)
11975 if (oa && oa != OA_LIST)
11976 return too_few_arguments_pv(o,OP_DESC(o), 0);
11982 Perl_ck_glob(pTHX_ OP *o)
11986 PERL_ARGS_ASSERT_CK_GLOB;
11989 if ((o->op_flags & OPf_KIDS) && !OpHAS_SIBLING(cLISTOPo->op_first))
11990 op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */
11992 if (!(o->op_flags & OPf_SPECIAL) && (gv = gv_override("glob", 4)))
11996 * \ null - const(wildcard)
12001 * \ mark - glob - rv2cv
12002 * | \ gv(CORE::GLOBAL::glob)
12004 * \ null - const(wildcard)
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 */
12013 else o->op_flags &= ~OPf_SPECIAL;
12014 #if !defined(PERL_EXTERNAL_GLOB)
12015 if (!PL_globhook) {
12017 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
12018 newSVpvs("File::Glob"), NULL, NULL, NULL);
12021 #endif /* !PERL_EXTERNAL_GLOB */
12022 gv = (GV *)newSV(0);
12023 gv_init(gv, 0, "", 0, 0);
12025 op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
12026 SvREFCNT_dec_NN(gv); /* newGVOP increased it */
12032 Perl_ck_grep(pTHX_ OP *o)
12036 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
12038 PERL_ARGS_ASSERT_CK_GREP;
12040 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
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;
12048 kid = OpSIBLING(cLISTOPo->op_first);
12049 if (type == OP_MAPWHILE)
12054 if (PL_parser && PL_parser->error_count)
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;
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);
12066 kid = OpSIBLING(cLISTOPo->op_first);
12067 for (kid = OpSIBLING(kid); kid; kid = OpSIBLING(kid))
12068 op_lvalue(kid, OP_GREPSTART);
12074 Perl_ck_index(pTHX_ OP *o)
12076 PERL_ARGS_ASSERT_CK_INDEX;
12078 if (o->op_flags & OPf_KIDS) {
12079 OP *kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
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))
12089 sv_copypv(sv, kSVOP->op_sv);
12090 SvREFCNT_dec_NN(kSVOP->op_sv);
12093 if (SvOK(sv)) fbm_compile(sv, 0);
12094 TAINT_set(save_taint);
12095 #ifdef NO_TAINT_SUPPORT
12096 PERL_UNUSED_VAR(save_taint);
12104 Perl_ck_lfun(pTHX_ OP *o)
12106 const OPCODE type = o->op_type;
12108 PERL_ARGS_ASSERT_CK_LFUN;
12110 return modkids(ck_fun(o), type);
12114 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
12116 PERL_ARGS_ASSERT_CK_DEFINED;
12118 if ((o->op_flags & OPf_KIDS)) {
12119 switch (cUNOPo->op_first->op_type) {
12122 Perl_croak(aTHX_ "Can't use 'defined(@array)'"
12123 " (Maybe you should just omit the defined()?)");
12124 NOT_REACHED; /* NOTREACHED */
12128 Perl_croak(aTHX_ "Can't use 'defined(%%hash)'"
12129 " (Maybe you should just omit the defined()?)");
12130 NOT_REACHED; /* NOTREACHED */
12141 Perl_ck_readline(pTHX_ OP *o)
12143 PERL_ARGS_ASSERT_CK_READLINE;
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;
12151 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
12159 Perl_ck_rfun(pTHX_ OP *o)
12161 const OPCODE type = o->op_type;
12163 PERL_ARGS_ASSERT_CK_RFUN;
12165 return refkids(ck_fun(o), type);
12169 Perl_ck_listiob(pTHX_ OP *o)
12173 PERL_ARGS_ASSERT_CK_LISTIOB;
12175 kid = cLISTOPo->op_first;
12177 o = force_list(o, 1);
12178 kid = cLISTOPo->op_first;
12180 if (kid->op_type == OP_PUSHMARK)
12181 kid = OpSIBLING(kid);
12182 if (kid && o->op_flags & OPf_STACKED)
12183 kid = OpSIBLING(kid);
12184 else if (kid && !OpHAS_SIBLING(kid)) { /* print HANDLE; */
12185 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE
12186 && !kid->op_folded) {
12187 o->op_flags |= OPf_STACKED; /* make it a filehandle */
12189 /* replace old const op with new OP_RV2GV parent */
12190 kid = S_op_sibling_newUNOP(aTHX_ o, cLISTOPo->op_first,
12191 OP_RV2GV, OPf_REF);
12192 kid = OpSIBLING(kid);
12197 op_append_elem(o->op_type, o, newDEFSVOP());
12199 if (o->op_type == OP_PRTF) return modkids(listkids(o), OP_PRTF);
12200 return listkids(o);
12204 Perl_ck_smartmatch(pTHX_ OP *o)
12207 PERL_ARGS_ASSERT_CK_SMARTMATCH;
12208 if (0 == (o->op_flags & OPf_SPECIAL)) {
12209 OP *first = cBINOPo->op_first;
12210 OP *second = OpSIBLING(first);
12212 /* Implicitly take a reference to an array or hash */
12214 /* remove the original two siblings, then add back the
12215 * (possibly different) first and second sibs.
12217 op_sibling_splice(o, NULL, 1, NULL);
12218 op_sibling_splice(o, NULL, 1, NULL);
12219 first = ref_array_or_hash(first);
12220 second = ref_array_or_hash(second);
12221 op_sibling_splice(o, NULL, 0, second);
12222 op_sibling_splice(o, NULL, 0, first);
12224 /* Implicitly take a reference to a regular expression */
12225 if (first->op_type == OP_MATCH && !(first->op_flags & OPf_STACKED)) {
12226 OpTYPE_set(first, OP_QR);
12228 if (second->op_type == OP_MATCH && !(second->op_flags & OPf_STACKED)) {
12229 OpTYPE_set(second, OP_QR);
12238 S_maybe_targlex(pTHX_ OP *o)
12240 OP * const kid = cLISTOPo->op_first;
12241 /* has a disposable target? */
12242 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
12243 && !(kid->op_flags & OPf_STACKED)
12244 /* Cannot steal the second time! */
12245 && !(kid->op_private & OPpTARGET_MY)
12248 OP * const kkid = OpSIBLING(kid);
12250 /* Can just relocate the target. */
12251 if (kkid && kkid->op_type == OP_PADSV
12252 && (!(kkid->op_private & OPpLVAL_INTRO)
12253 || kkid->op_private & OPpPAD_STATE))
12255 kid->op_targ = kkid->op_targ;
12257 /* Now we do not need PADSV and SASSIGN.
12258 * Detach kid and free the rest. */
12259 op_sibling_splice(o, NULL, 1, NULL);
12261 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
12269 Perl_ck_sassign(pTHX_ OP *o)
12272 OP * const kid = cBINOPo->op_first;
12274 PERL_ARGS_ASSERT_CK_SASSIGN;
12276 if (OpHAS_SIBLING(kid)) {
12277 OP *kkid = OpSIBLING(kid);
12278 /* For state variable assignment with attributes, kkid is a list op
12279 whose op_last is a padsv. */
12280 if ((kkid->op_type == OP_PADSV ||
12281 (OP_TYPE_IS_OR_WAS(kkid, OP_LIST) &&
12282 (kkid = cLISTOPx(kkid)->op_last)->op_type == OP_PADSV
12285 && (kkid->op_private & (OPpLVAL_INTRO|OPpPAD_STATE))
12286 == (OPpLVAL_INTRO|OPpPAD_STATE)) {
12287 return S_newONCEOP(aTHX_ o, kkid);
12290 return S_maybe_targlex(aTHX_ o);
12295 Perl_ck_match(pTHX_ OP *o)
12297 PERL_UNUSED_CONTEXT;
12298 PERL_ARGS_ASSERT_CK_MATCH;
12304 Perl_ck_method(pTHX_ OP *o)
12306 SV *sv, *methsv, *rclass;
12307 const char* method;
12310 STRLEN len, nsplit = 0, i;
12312 OP * const kid = cUNOPo->op_first;
12314 PERL_ARGS_ASSERT_CK_METHOD;
12315 if (kid->op_type != OP_CONST) return o;
12319 /* replace ' with :: */
12320 while ((compatptr = (char *) memchr(SvPVX(sv), '\'',
12321 SvEND(sv) - SvPVX(sv) )))
12324 sv_insert(sv, compatptr - SvPVX_const(sv), 0, ":", 1);
12327 method = SvPVX_const(sv);
12329 utf8 = SvUTF8(sv) ? -1 : 1;
12331 for (i = len - 1; i > 0; --i) if (method[i] == ':') {
12336 methsv = newSVpvn_share(method+nsplit, utf8*(len - nsplit), 0);
12338 if (!nsplit) { /* $proto->method() */
12340 return newMETHOP_named(OP_METHOD_NAMED, 0, methsv);
12343 if (memEQs(method, nsplit, "SUPER::")) { /* $proto->SUPER::method() */
12345 return newMETHOP_named(OP_METHOD_SUPER, 0, methsv);
12348 /* $proto->MyClass::method() and $proto->MyClass::SUPER::method() */
12349 if (nsplit >= 9 && strBEGINs(method+nsplit-9, "::SUPER::")) {
12350 rclass = newSVpvn_share(method, utf8*(nsplit-9), 0);
12351 new_op = newMETHOP_named(OP_METHOD_REDIR_SUPER, 0, methsv);
12353 rclass = newSVpvn_share(method, utf8*(nsplit-2), 0);
12354 new_op = newMETHOP_named(OP_METHOD_REDIR, 0, methsv);
12356 #ifdef USE_ITHREADS
12357 op_relocate_sv(&rclass, &cMETHOPx(new_op)->op_rclass_targ);
12359 cMETHOPx(new_op)->op_rclass_sv = rclass;
12366 Perl_ck_null(pTHX_ OP *o)
12368 PERL_ARGS_ASSERT_CK_NULL;
12369 PERL_UNUSED_CONTEXT;
12374 Perl_ck_open(pTHX_ OP *o)
12376 PERL_ARGS_ASSERT_CK_OPEN;
12378 S_io_hints(aTHX_ o);
12380 /* In case of three-arg dup open remove strictness
12381 * from the last arg if it is a bareword. */
12382 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
12383 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
12387 if ((last->op_type == OP_CONST) && /* The bareword. */
12388 (last->op_private & OPpCONST_BARE) &&
12389 (last->op_private & OPpCONST_STRICT) &&
12390 (oa = OpSIBLING(first)) && /* The fh. */
12391 (oa = OpSIBLING(oa)) && /* The mode. */
12392 (oa->op_type == OP_CONST) &&
12393 SvPOK(((SVOP*)oa)->op_sv) &&
12394 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
12395 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
12396 (last == OpSIBLING(oa))) /* The bareword. */
12397 last->op_private &= ~OPpCONST_STRICT;
12403 Perl_ck_prototype(pTHX_ OP *o)
12405 PERL_ARGS_ASSERT_CK_PROTOTYPE;
12406 if (!(o->op_flags & OPf_KIDS)) {
12408 return newUNOP(OP_PROTOTYPE, 0, newDEFSVOP());
12414 Perl_ck_refassign(pTHX_ OP *o)
12416 OP * const right = cLISTOPo->op_first;
12417 OP * const left = OpSIBLING(right);
12418 OP *varop = cUNOPx(cUNOPx(left)->op_first)->op_first;
12421 PERL_ARGS_ASSERT_CK_REFASSIGN;
12423 assert (left->op_type == OP_SREFGEN);
12426 /* we use OPpPAD_STATE in refassign to mean either of those things,
12427 * and the code assumes the two flags occupy the same bit position
12428 * in the various ops below */
12429 assert(OPpPAD_STATE == OPpOUR_INTRO);
12431 switch (varop->op_type) {
12433 o->op_private |= OPpLVREF_AV;
12436 o->op_private |= OPpLVREF_HV;
12440 o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpPAD_STATE));
12441 o->op_targ = varop->op_targ;
12442 varop->op_targ = 0;
12443 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
12447 o->op_private |= OPpLVREF_AV;
12449 NOT_REACHED; /* NOTREACHED */
12451 o->op_private |= OPpLVREF_HV;
12455 o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO));
12456 if (cUNOPx(varop)->op_first->op_type != OP_GV) goto bad;
12458 /* Point varop to its GV kid, detached. */
12459 varop = op_sibling_splice(varop, NULL, -1, NULL);
12463 OP * const kidparent =
12464 OpSIBLING(cUNOPx(cUNOPx(varop)->op_first)->op_first);
12465 OP * const kid = cUNOPx(kidparent)->op_first;
12466 o->op_private |= OPpLVREF_CV;
12467 if (kid->op_type == OP_GV) {
12469 goto detach_and_stack;
12471 if (kid->op_type != OP_PADCV) goto bad;
12472 o->op_targ = kid->op_targ;
12478 o->op_private |= (varop->op_private & OPpLVAL_INTRO);
12479 o->op_private |= OPpLVREF_ELEM;
12482 /* Detach varop. */
12483 op_sibling_splice(cUNOPx(left)->op_first, NULL, -1, NULL);
12487 /* diag_listed_as: Can't modify reference to %s in %s assignment */
12488 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in scalar "
12493 if (!FEATURE_REFALIASING_IS_ENABLED)
12495 "Experimental aliasing via reference not enabled");
12496 Perl_ck_warner_d(aTHX_
12497 packWARN(WARN_EXPERIMENTAL__REFALIASING),
12498 "Aliasing via reference is experimental");
12500 o->op_flags |= OPf_STACKED;
12501 op_sibling_splice(o, right, 1, varop);
12504 o->op_flags &=~ OPf_STACKED;
12505 op_sibling_splice(o, right, 1, NULL);
12512 Perl_ck_repeat(pTHX_ OP *o)
12514 PERL_ARGS_ASSERT_CK_REPEAT;
12516 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
12518 o->op_private |= OPpREPEAT_DOLIST;
12519 kids = op_sibling_splice(o, NULL, 1, NULL); /* detach first kid */
12520 kids = force_list(kids, 1); /* promote it to a list */
12521 op_sibling_splice(o, NULL, 0, kids); /* and add back */
12529 Perl_ck_require(pTHX_ OP *o)
12533 PERL_ARGS_ASSERT_CK_REQUIRE;
12535 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
12536 SVOP * const kid = (SVOP*)cUNOPo->op_first;
12540 if (kid->op_type == OP_CONST) {
12541 SV * const sv = kid->op_sv;
12542 U32 const was_readonly = SvREADONLY(sv);
12543 if (kid->op_private & OPpCONST_BARE) {
12548 if (was_readonly) {
12549 SvREADONLY_off(sv);
12551 if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0);
12556 /* treat ::foo::bar as foo::bar */
12557 if (len >= 2 && s[0] == ':' && s[1] == ':')
12558 DIE(aTHX_ "Bareword in require must not start with a double-colon: \"%s\"\n", s);
12560 DIE(aTHX_ "Bareword in require maps to empty filename");
12562 for (; s < end; s++) {
12563 if (*s == ':' && s[1] == ':') {
12565 Move(s+2, s+1, end - s - 1, char);
12569 SvEND_set(sv, end);
12570 sv_catpvs(sv, ".pm");
12571 PERL_HASH(hash, SvPVX(sv), SvCUR(sv));
12572 hek = share_hek(SvPVX(sv),
12573 (SSize_t)SvCUR(sv) * (SvUTF8(sv) ? -1 : 1),
12575 sv_sethek(sv, hek);
12577 SvFLAGS(sv) |= was_readonly;
12579 else if (SvPOK(sv) && !SvNIOK(sv) && !SvGMAGICAL(sv)
12582 if (SvREFCNT(sv) > 1) {
12583 kid->op_sv = newSVpvn_share(
12584 s, SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len, 0);
12585 SvREFCNT_dec_NN(sv);
12590 if (was_readonly) SvREADONLY_off(sv);
12591 PERL_HASH(hash, s, len);
12593 SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len,
12595 sv_sethek(sv, hek);
12597 SvFLAGS(sv) |= was_readonly;
12603 if (!(o->op_flags & OPf_SPECIAL) /* Wasn't written as CORE::require */
12604 /* handle override, if any */
12605 && (gv = gv_override("require", 7))) {
12607 if (o->op_flags & OPf_KIDS) {
12608 kid = cUNOPo->op_first;
12609 op_sibling_splice(o, NULL, -1, NULL);
12612 kid = newDEFSVOP();
12615 newop = S_new_entersubop(aTHX_ gv, kid);
12623 Perl_ck_return(pTHX_ OP *o)
12627 PERL_ARGS_ASSERT_CK_RETURN;
12629 kid = OpSIBLING(cLISTOPo->op_first);
12630 if (PL_compcv && CvLVALUE(PL_compcv)) {
12631 for (; kid; kid = OpSIBLING(kid))
12632 op_lvalue(kid, OP_LEAVESUBLV);
12639 Perl_ck_select(pTHX_ OP *o)
12644 PERL_ARGS_ASSERT_CK_SELECT;
12646 if (o->op_flags & OPf_KIDS) {
12647 kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
12648 if (kid && OpHAS_SIBLING(kid)) {
12649 OpTYPE_set(o, OP_SSELECT);
12651 return fold_constants(op_integerize(op_std_init(o)));
12655 kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
12656 if (kid && kid->op_type == OP_RV2GV)
12657 kid->op_private &= ~HINT_STRICT_REFS;
12662 Perl_ck_shift(pTHX_ OP *o)
12664 const I32 type = o->op_type;
12666 PERL_ARGS_ASSERT_CK_SHIFT;
12668 if (!(o->op_flags & OPf_KIDS)) {
12671 if (!CvUNIQUE(PL_compcv)) {
12672 o->op_flags |= OPf_SPECIAL;
12676 argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
12678 return newUNOP(type, 0, scalar(argop));
12680 return scalar(ck_fun(o));
12684 Perl_ck_sort(pTHX_ OP *o)
12688 HV * const hinthv =
12689 PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;
12692 PERL_ARGS_ASSERT_CK_SORT;
12695 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
12697 const I32 sorthints = (I32)SvIV(*svp);
12698 if ((sorthints & HINT_SORT_STABLE) != 0)
12699 o->op_private |= OPpSORT_STABLE;
12700 if ((sorthints & HINT_SORT_UNSTABLE) != 0)
12701 o->op_private |= OPpSORT_UNSTABLE;
12705 if (o->op_flags & OPf_STACKED)
12707 firstkid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
12709 if ((stacked = o->op_flags & OPf_STACKED)) { /* may have been cleared */
12710 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
12712 /* if the first arg is a code block, process it and mark sort as
12714 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
12716 if (kid->op_type == OP_LEAVE)
12717 op_null(kid); /* wipe out leave */
12718 /* Prevent execution from escaping out of the sort block. */
12721 /* provide scalar context for comparison function/block */
12722 kid = scalar(firstkid);
12723 kid->op_next = kid;
12724 o->op_flags |= OPf_SPECIAL;
12726 else if (kid->op_type == OP_CONST
12727 && kid->op_private & OPpCONST_BARE) {
12731 const char * const name = SvPV(kSVOP_sv, len);
12733 assert (len < 256);
12734 Copy(name, tmpbuf+1, len, char);
12735 off = pad_findmy_pvn(tmpbuf, len+1, SvUTF8(kSVOP_sv));
12736 if (off != NOT_IN_PAD) {
12737 if (PAD_COMPNAME_FLAGS_isOUR(off)) {
12739 newSVhek(HvNAME_HEK(PAD_COMPNAME_OURSTASH(off)));
12740 sv_catpvs(fq, "::");
12741 sv_catsv(fq, kSVOP_sv);
12742 SvREFCNT_dec_NN(kSVOP_sv);
12746 OP * const padop = newOP(OP_PADCV, 0);
12747 padop->op_targ = off;
12748 /* replace the const op with the pad op */
12749 op_sibling_splice(firstkid, NULL, 1, padop);
12755 firstkid = OpSIBLING(firstkid);
12758 for (kid = firstkid; kid; kid = OpSIBLING(kid)) {
12759 /* provide list context for arguments */
12762 op_lvalue(kid, OP_GREPSTART);
12768 /* for sort { X } ..., where X is one of
12769 * $a <=> $b, $b <=> $a, $a cmp $b, $b cmp $a
12770 * elide the second child of the sort (the one containing X),
12771 * and set these flags as appropriate
12775 * Also, check and warn on lexical $a, $b.
12779 S_simplify_sort(pTHX_ OP *o)
12781 OP *kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
12785 const char *gvname;
12788 PERL_ARGS_ASSERT_SIMPLIFY_SORT;
12790 kid = kUNOP->op_first; /* get past null */
12791 if (!(have_scopeop = kid->op_type == OP_SCOPE)
12792 && kid->op_type != OP_LEAVE)
12794 kid = kLISTOP->op_last; /* get past scope */
12795 switch(kid->op_type) {
12799 if (!have_scopeop) goto padkids;
12804 k = kid; /* remember this node*/
12805 if (kBINOP->op_first->op_type != OP_RV2SV
12806 || kBINOP->op_last ->op_type != OP_RV2SV)
12809 Warn about my($a) or my($b) in a sort block, *if* $a or $b is
12810 then used in a comparison. This catches most, but not
12811 all cases. For instance, it catches
12812 sort { my($a); $a <=> $b }
12814 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
12815 (although why you'd do that is anyone's guess).
12819 if (!ckWARN(WARN_SYNTAX)) return;
12820 kid = kBINOP->op_first;
12822 if (kid->op_type == OP_PADSV) {
12823 PADNAME * const name = PAD_COMPNAME(kid->op_targ);
12824 if (PadnameLEN(name) == 2 && *PadnamePV(name) == '$'
12825 && ( PadnamePV(name)[1] == 'a'
12826 || PadnamePV(name)[1] == 'b' ))
12827 /* diag_listed_as: "my %s" used in sort comparison */
12828 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
12829 "\"%s %s\" used in sort comparison",
12830 PadnameIsSTATE(name)
12835 } while ((kid = OpSIBLING(kid)));
12838 kid = kBINOP->op_first; /* get past cmp */
12839 if (kUNOP->op_first->op_type != OP_GV)
12841 kid = kUNOP->op_first; /* get past rv2sv */
12843 if (GvSTASH(gv) != PL_curstash)
12845 gvname = GvNAME(gv);
12846 if (*gvname == 'a' && gvname[1] == '\0')
12848 else if (*gvname == 'b' && gvname[1] == '\0')
12853 kid = k; /* back to cmp */
12854 /* already checked above that it is rv2sv */
12855 kid = kBINOP->op_last; /* down to 2nd arg */
12856 if (kUNOP->op_first->op_type != OP_GV)
12858 kid = kUNOP->op_first; /* get past rv2sv */
12860 if (GvSTASH(gv) != PL_curstash)
12862 gvname = GvNAME(gv);
12864 ? !(*gvname == 'a' && gvname[1] == '\0')
12865 : !(*gvname == 'b' && gvname[1] == '\0'))
12867 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
12869 o->op_private |= OPpSORT_DESCEND;
12870 if (k->op_type == OP_NCMP)
12871 o->op_private |= OPpSORT_NUMERIC;
12872 if (k->op_type == OP_I_NCMP)
12873 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
12874 kid = OpSIBLING(cLISTOPo->op_first);
12875 /* cut out and delete old block (second sibling) */
12876 op_sibling_splice(o, cLISTOPo->op_first, 1, NULL);
12881 Perl_ck_split(pTHX_ OP *o)
12887 PERL_ARGS_ASSERT_CK_SPLIT;
12889 assert(o->op_type == OP_LIST);
12891 if (o->op_flags & OPf_STACKED)
12892 return no_fh_allowed(o);
12894 kid = cLISTOPo->op_first;
12895 /* delete leading NULL node, then add a CONST if no other nodes */
12896 assert(kid->op_type == OP_NULL);
12897 op_sibling_splice(o, NULL, 1,
12898 OpHAS_SIBLING(kid) ? NULL : newSVOP(OP_CONST, 0, newSVpvs(" ")));
12900 kid = cLISTOPo->op_first;
12902 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
12903 /* remove match expression, and replace with new optree with
12904 * a match op at its head */
12905 op_sibling_splice(o, NULL, 1, NULL);
12906 /* pmruntime will handle split " " behavior with flag==2 */
12907 kid = pmruntime(newPMOP(OP_MATCH, 0), kid, NULL, 2, 0);
12908 op_sibling_splice(o, NULL, 0, kid);
12911 assert(kid->op_type == OP_MATCH || kid->op_type == OP_SPLIT);
12913 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
12914 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
12915 "Use of /g modifier is meaningless in split");
12918 /* eliminate the split op, and move the match op (plus any children)
12919 * into its place, then convert the match op into a split op. i.e.
12921 * SPLIT MATCH SPLIT(ex-MATCH)
12923 * MATCH - A - B - C => R - A - B - C => R - A - B - C
12929 * (R, if it exists, will be a regcomp op)
12932 op_sibling_splice(o, NULL, 1, NULL); /* detach match op from o */
12933 sibs = op_sibling_splice(o, NULL, -1, NULL); /* detach any other sibs */
12934 op_sibling_splice(kid, cLISTOPx(kid)->op_last, 0, sibs); /* and reattach */
12935 OpTYPE_set(kid, OP_SPLIT);
12936 kid->op_flags = (o->op_flags | (kid->op_flags & OPf_KIDS));
12937 kid->op_private = o->op_private;
12940 kid = sibs; /* kid is now the string arg of the split */
12943 kid = newDEFSVOP();
12944 op_append_elem(OP_SPLIT, o, kid);
12948 kid = OpSIBLING(kid);
12950 kid = newSVOP(OP_CONST, 0, newSViv(0));
12951 op_append_elem(OP_SPLIT, o, kid);
12952 o->op_private |= OPpSPLIT_IMPLIM;
12956 if (OpHAS_SIBLING(kid))
12957 return too_many_arguments_pv(o,OP_DESC(o), 0);
12963 Perl_ck_stringify(pTHX_ OP *o)
12965 OP * const kid = OpSIBLING(cUNOPo->op_first);
12966 PERL_ARGS_ASSERT_CK_STRINGIFY;
12967 if (( kid->op_type == OP_JOIN || kid->op_type == OP_QUOTEMETA
12968 || kid->op_type == OP_LC || kid->op_type == OP_LCFIRST
12969 || kid->op_type == OP_UC || kid->op_type == OP_UCFIRST)
12970 && !OpHAS_SIBLING(kid)) /* syntax errs can leave extra children */
12972 op_sibling_splice(o, cUNOPo->op_first, -1, NULL);
12980 Perl_ck_join(pTHX_ OP *o)
12982 OP * const kid = OpSIBLING(cLISTOPo->op_first);
12984 PERL_ARGS_ASSERT_CK_JOIN;
12986 if (kid && kid->op_type == OP_MATCH) {
12987 if (ckWARN(WARN_SYNTAX)) {
12988 const REGEXP *re = PM_GETRE(kPMOP);
12990 ? newSVpvn_flags( RX_PRECOMP_const(re), RX_PRELEN(re),
12991 SVs_TEMP | ( RX_UTF8(re) ? SVf_UTF8 : 0 ) )
12992 : newSVpvs_flags( "STRING", SVs_TEMP );
12993 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
12994 "/%" SVf "/ should probably be written as \"%" SVf "\"",
12995 SVfARG(msg), SVfARG(msg));
12999 && (kid->op_type == OP_CONST /* an innocent, unsuspicious separator */
13000 || (kid->op_type == OP_PADSV && !(kid->op_private & OPpLVAL_INTRO))
13001 || ( kid->op_type==OP_RV2SV && kUNOP->op_first->op_type == OP_GV
13002 && !(kid->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))))
13004 const OP * const bairn = OpSIBLING(kid); /* the list */
13005 if (bairn && !OpHAS_SIBLING(bairn) /* single-item list */
13006 && OP_GIMME(bairn,0) == G_SCALAR)
13008 OP * const ret = op_convert_list(OP_STRINGIFY, OPf_FOLDED,
13009 op_sibling_splice(o, kid, 1, NULL));
13019 =for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
13021 Examines an op, which is expected to identify a subroutine at runtime,
13022 and attempts to determine at compile time which subroutine it identifies.
13023 This is normally used during Perl compilation to determine whether
13024 a prototype can be applied to a function call. C<cvop> is the op
13025 being considered, normally an C<rv2cv> op. A pointer to the identified
13026 subroutine is returned, if it could be determined statically, and a null
13027 pointer is returned if it was not possible to determine statically.
13029 Currently, the subroutine can be identified statically if the RV that the
13030 C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
13031 A C<gv> op is suitable if the GV's CV slot is populated. A C<const> op is
13032 suitable if the constant value must be an RV pointing to a CV. Details of
13033 this process may change in future versions of Perl. If the C<rv2cv> op
13034 has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
13035 the subroutine statically: this flag is used to suppress compile-time
13036 magic on a subroutine call, forcing it to use default runtime behaviour.
13038 If C<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
13039 of a GV reference is modified. If a GV was examined and its CV slot was
13040 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
13041 If the op is not optimised away, and the CV slot is later populated with
13042 a subroutine having a prototype, that flag eventually triggers the warning
13043 "called too early to check prototype".
13045 If C<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
13046 of returning a pointer to the subroutine it returns a pointer to the
13047 GV giving the most appropriate name for the subroutine in this context.
13048 Normally this is just the C<CvGV> of the subroutine, but for an anonymous
13049 (C<CvANON>) subroutine that is referenced through a GV it will be the
13050 referencing GV. The resulting C<GV*> is cast to C<CV*> to be returned.
13051 A null pointer is returned as usual if there is no statically-determinable
13057 /* shared by toke.c:yylex */
13059 Perl_find_lexical_cv(pTHX_ PADOFFSET off)
13061 PADNAME *name = PAD_COMPNAME(off);
13062 CV *compcv = PL_compcv;
13063 while (PadnameOUTER(name)) {
13064 assert(PARENT_PAD_INDEX(name));
13065 compcv = CvOUTSIDE(compcv);
13066 name = PadlistNAMESARRAY(CvPADLIST(compcv))
13067 [off = PARENT_PAD_INDEX(name)];
13069 assert(!PadnameIsOUR(name));
13070 if (!PadnameIsSTATE(name) && PadnamePROTOCV(name)) {
13071 return PadnamePROTOCV(name);
13073 return (CV *)AvARRAY(PadlistARRAY(CvPADLIST(compcv))[1])[off];
13077 Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
13082 PERL_ARGS_ASSERT_RV2CV_OP_CV;
13083 if (flags & ~RV2CVOPCV_FLAG_MASK)
13084 Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags);
13085 if (cvop->op_type != OP_RV2CV)
13087 if (cvop->op_private & OPpENTERSUB_AMPER)
13089 if (!(cvop->op_flags & OPf_KIDS))
13091 rvop = cUNOPx(cvop)->op_first;
13092 switch (rvop->op_type) {
13094 gv = cGVOPx_gv(rvop);
13096 if (SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV) {
13097 cv = MUTABLE_CV(SvRV(gv));
13101 if (flags & RV2CVOPCV_RETURN_STUB)
13107 if (flags & RV2CVOPCV_MARK_EARLY)
13108 rvop->op_private |= OPpEARLY_CV;
13113 SV *rv = cSVOPx_sv(rvop);
13116 cv = (CV*)SvRV(rv);
13120 cv = find_lexical_cv(rvop->op_targ);
13125 } NOT_REACHED; /* NOTREACHED */
13127 if (SvTYPE((SV*)cv) != SVt_PVCV)
13129 if (flags & RV2CVOPCV_RETURN_NAME_GV) {
13130 if ((!CvANON(cv) && !CvLEXICAL(cv)) || !gv)
13134 else if (flags & RV2CVOPCV_MAYBE_NAME_GV) {
13135 if (CvLEXICAL(cv) || CvNAMED(cv))
13137 if (!CvANON(cv) || !gv)
13147 =for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
13149 Performs the default fixup of the arguments part of an C<entersub>
13150 op tree. This consists of applying list context to each of the
13151 argument ops. This is the standard treatment used on a call marked
13152 with C<&>, or a method call, or a call through a subroutine reference,
13153 or any other call where the callee can't be identified at compile time,
13154 or a call where the callee has no prototype.
13160 Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
13164 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
13166 aop = cUNOPx(entersubop)->op_first;
13167 if (!OpHAS_SIBLING(aop))
13168 aop = cUNOPx(aop)->op_first;
13169 for (aop = OpSIBLING(aop); OpHAS_SIBLING(aop); aop = OpSIBLING(aop)) {
13170 /* skip the extra attributes->import() call implicitly added in
13171 * something like foo(my $x : bar)
13173 if ( aop->op_type == OP_ENTERSUB
13174 && (aop->op_flags & OPf_WANT) == OPf_WANT_VOID
13178 op_lvalue(aop, OP_ENTERSUB);
13184 =for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
13186 Performs the fixup of the arguments part of an C<entersub> op tree
13187 based on a subroutine prototype. This makes various modifications to
13188 the argument ops, from applying context up to inserting C<refgen> ops,
13189 and checking the number and syntactic types of arguments, as directed by
13190 the prototype. This is the standard treatment used on a subroutine call,
13191 not marked with C<&>, where the callee can be identified at compile time
13192 and has a prototype.
13194 C<protosv> supplies the subroutine prototype to be applied to the call.
13195 It may be a normal defined scalar, of which the string value will be used.
13196 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
13197 that has been cast to C<SV*>) which has a prototype. The prototype
13198 supplied, in whichever form, does not need to match the actual callee
13199 referenced by the op tree.
13201 If the argument ops disagree with the prototype, for example by having
13202 an unacceptable number of arguments, a valid op tree is returned anyway.
13203 The error is reflected in the parser state, normally resulting in a single
13204 exception at the top level of parsing which covers all the compilation
13205 errors that occurred. In the error message, the callee is referred to
13206 by the name defined by the C<namegv> parameter.
13212 Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
13215 const char *proto, *proto_end;
13216 OP *aop, *prev, *cvop, *parent;
13219 I32 contextclass = 0;
13220 const char *e = NULL;
13221 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO;
13222 if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv))
13223 Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto, "
13224 "flags=%lx", (unsigned long) SvFLAGS(protosv));
13225 if (SvTYPE(protosv) == SVt_PVCV)
13226 proto = CvPROTO(protosv), proto_len = CvPROTOLEN(protosv);
13227 else proto = SvPV(protosv, proto_len);
13228 proto = S_strip_spaces(aTHX_ proto, &proto_len);
13229 proto_end = proto + proto_len;
13230 parent = entersubop;
13231 aop = cUNOPx(entersubop)->op_first;
13232 if (!OpHAS_SIBLING(aop)) {
13234 aop = cUNOPx(aop)->op_first;
13237 aop = OpSIBLING(aop);
13238 for (cvop = aop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ;
13239 while (aop != cvop) {
13242 if (proto >= proto_end)
13244 SV * const namesv = cv_name((CV *)namegv, NULL, 0);
13245 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf,
13246 SVfARG(namesv)), SvUTF8(namesv));
13256 /* _ must be at the end */
13257 if (proto[1] && !strchr(";@%", proto[1]))
13273 if ( o3->op_type != OP_UNDEF
13274 && (o3->op_type != OP_SREFGEN
13275 || ( cUNOPx(cUNOPx(o3)->op_first)->op_first->op_type
13277 && cUNOPx(cUNOPx(o3)->op_first)->op_first->op_type
13279 bad_type_gv(arg, namegv, o3,
13280 arg == 1 ? "block or sub {}" : "sub {}");
13283 /* '*' allows any scalar type, including bareword */
13286 if (o3->op_type == OP_RV2GV)
13287 goto wrapref; /* autoconvert GLOB -> GLOBref */
13288 else if (o3->op_type == OP_CONST)
13289 o3->op_private &= ~OPpCONST_STRICT;
13295 if (o3->op_type == OP_RV2AV ||
13296 o3->op_type == OP_PADAV ||
13297 o3->op_type == OP_RV2HV ||
13298 o3->op_type == OP_PADHV
13304 case '[': case ']':
13311 switch (*proto++) {
13313 if (contextclass++ == 0) {
13314 e = (char *) memchr(proto, ']', proto_end - proto);
13315 if (!e || e == proto)
13323 if (contextclass) {
13324 const char *p = proto;
13325 const char *const end = proto;
13327 while (*--p != '[')
13328 /* \[$] accepts any scalar lvalue */
13330 && Perl_op_lvalue_flags(aTHX_
13332 OP_READ, /* not entersub */
13335 bad_type_gv(arg, namegv, o3,
13336 Perl_form(aTHX_ "one of %.*s",(int)(end - p), p));
13341 if (o3->op_type == OP_RV2GV)
13344 bad_type_gv(arg, namegv, o3, "symbol");
13347 if (o3->op_type == OP_ENTERSUB
13348 && !(o3->op_flags & OPf_STACKED))
13351 bad_type_gv(arg, namegv, o3, "subroutine");
13354 if (o3->op_type == OP_RV2SV ||
13355 o3->op_type == OP_PADSV ||
13356 o3->op_type == OP_HELEM ||
13357 o3->op_type == OP_AELEM)
13359 if (!contextclass) {
13360 /* \$ accepts any scalar lvalue */
13361 if (Perl_op_lvalue_flags(aTHX_
13363 OP_READ, /* not entersub */
13366 bad_type_gv(arg, namegv, o3, "scalar");
13370 if (o3->op_type == OP_RV2AV ||
13371 o3->op_type == OP_PADAV)
13373 o3->op_flags &=~ OPf_PARENS;
13377 bad_type_gv(arg, namegv, o3, "array");
13380 if (o3->op_type == OP_RV2HV ||
13381 o3->op_type == OP_PADHV)
13383 o3->op_flags &=~ OPf_PARENS;
13387 bad_type_gv(arg, namegv, o3, "hash");
13390 aop = S_op_sibling_newUNOP(aTHX_ parent, prev,
13392 if (contextclass && e) {
13397 default: goto oops;
13407 Perl_croak(aTHX_ "Malformed prototype for %" SVf ": %" SVf,
13408 SVfARG(cv_name((CV *)namegv, NULL, 0)),
13413 op_lvalue(aop, OP_ENTERSUB);
13415 aop = OpSIBLING(aop);
13417 if (aop == cvop && *proto == '_') {
13418 /* generate an access to $_ */
13419 op_sibling_splice(parent, prev, 0, newDEFSVOP());
13421 if (!optional && proto_end > proto &&
13422 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
13424 SV * const namesv = cv_name((CV *)namegv, NULL, 0);
13425 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %" SVf,
13426 SVfARG(namesv)), SvUTF8(namesv));
13432 =for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
13434 Performs the fixup of the arguments part of an C<entersub> op tree either
13435 based on a subroutine prototype or using default list-context processing.
13436 This is the standard treatment used on a subroutine call, not marked
13437 with C<&>, where the callee can be identified at compile time.
13439 C<protosv> supplies the subroutine prototype to be applied to the call,
13440 or indicates that there is no prototype. It may be a normal scalar,
13441 in which case if it is defined then the string value will be used
13442 as a prototype, and if it is undefined then there is no prototype.
13443 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
13444 that has been cast to C<SV*>), of which the prototype will be used if it
13445 has one. The prototype (or lack thereof) supplied, in whichever form,
13446 does not need to match the actual callee referenced by the op tree.
13448 If the argument ops disagree with the prototype, for example by having
13449 an unacceptable number of arguments, a valid op tree is returned anyway.
13450 The error is reflected in the parser state, normally resulting in a single
13451 exception at the top level of parsing which covers all the compilation
13452 errors that occurred. In the error message, the callee is referred to
13453 by the name defined by the C<namegv> parameter.
13459 Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
13460 GV *namegv, SV *protosv)
13462 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST;
13463 if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv))
13464 return ck_entersub_args_proto(entersubop, namegv, protosv);
13466 return ck_entersub_args_list(entersubop);
13470 Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
13472 IV cvflags = SvIVX(protosv);
13473 int opnum = cvflags & 0xffff;
13474 OP *aop = cUNOPx(entersubop)->op_first;
13476 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE;
13480 if (!OpHAS_SIBLING(aop))
13481 aop = cUNOPx(aop)->op_first;
13482 aop = OpSIBLING(aop);
13483 for (cvop = aop; OpSIBLING(cvop); cvop = OpSIBLING(cvop)) ;
13485 SV *namesv = cv_name((CV *)namegv, NULL, CV_NAME_NOTQUAL);
13486 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf,
13487 SVfARG(namesv)), SvUTF8(namesv));
13490 op_free(entersubop);
13491 switch(cvflags >> 16) {
13492 case 'F': return newSVOP(OP_CONST, 0,
13493 newSVpv(CopFILE(PL_curcop),0));
13494 case 'L': return newSVOP(
13496 Perl_newSVpvf(aTHX_
13497 "%" IVdf, (IV)CopLINE(PL_curcop)
13500 case 'P': return newSVOP(OP_CONST, 0,
13502 ? newSVhek(HvNAME_HEK(PL_curstash))
13507 NOT_REACHED; /* NOTREACHED */
13510 OP *prev, *cvop, *first, *parent;
13513 parent = entersubop;
13514 if (!OpHAS_SIBLING(aop)) {
13516 aop = cUNOPx(aop)->op_first;
13519 first = prev = aop;
13520 aop = OpSIBLING(aop);
13521 /* find last sibling */
13523 OpHAS_SIBLING(cvop);
13524 prev = cvop, cvop = OpSIBLING(cvop))
13526 if (!(cvop->op_private & OPpENTERSUB_NOPAREN)
13527 /* Usually, OPf_SPECIAL on an op with no args means that it had
13528 * parens, but these have their own meaning for that flag: */
13529 && opnum != OP_VALUES && opnum != OP_KEYS && opnum != OP_EACH
13530 && opnum != OP_DELETE && opnum != OP_EXISTS)
13531 flags |= OPf_SPECIAL;
13532 /* excise cvop from end of sibling chain */
13533 op_sibling_splice(parent, prev, 1, NULL);
13535 if (aop == cvop) aop = NULL;
13537 /* detach remaining siblings from the first sibling, then
13538 * dispose of original optree */
13541 op_sibling_splice(parent, first, -1, NULL);
13542 op_free(entersubop);
13544 if (cvflags == (OP_ENTEREVAL | (1<<16)))
13545 flags |= OPpEVAL_BYTES <<8;
13547 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
13549 case OA_BASEOP_OR_UNOP:
13550 case OA_FILESTATOP:
13552 return newOP(opnum,flags); /* zero args */
13554 return newUNOP(opnum,flags,aop); /* one arg */
13555 /* too many args */
13562 namesv = cv_name((CV *)namegv, NULL, CV_NAME_NOTQUAL);
13563 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf,
13564 SVfARG(namesv)), SvUTF8(namesv));
13566 nextop = OpSIBLING(aop);
13572 return opnum == OP_RUNCV
13573 ? newPVOP(OP_RUNCV,0,NULL)
13576 return op_convert_list(opnum,0,aop);
13579 NOT_REACHED; /* NOTREACHED */
13584 =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 Retrieves the function that will be used to fix up a call to C<cv>.
13587 Specifically, the function is applied to an C<entersub> op tree for a
13588 subroutine call, not marked with C<&>, where the callee can be identified
13589 at compile time as C<cv>.
13591 The C-level function pointer is returned in C<*ckfun_p>, an SV argument
13592 for it is returned in C<*ckobj_p>, and control flags are returned in
13593 C<*ckflags_p>. The function is intended to be called in this manner:
13595 entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
13597 In this call, C<entersubop> is a pointer to the C<entersub> op,
13598 which may be replaced by the check function, and C<namegv> supplies
13599 the name that should be used by the check function to refer
13600 to the callee of the C<entersub> op if it needs to emit any diagnostics.
13601 It is permitted to apply the check function in non-standard situations,
13602 such as to a call to a different subroutine or to a method call.
13604 C<namegv> may not actually be a GV. If the C<CALL_CHECKER_REQUIRE_GV>
13605 bit is clear in C<*ckflags_p>, it is permitted to pass a CV or other SV
13606 instead, anything that can be used as the first argument to L</cv_name>.
13607 If the C<CALL_CHECKER_REQUIRE_GV> bit is set in C<*ckflags_p> then the
13608 check function requires C<namegv> to be a genuine GV.
13610 By default, the check function is
13611 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
13612 the SV parameter is C<cv> itself, and the C<CALL_CHECKER_REQUIRE_GV>
13613 flag is clear. This implements standard prototype processing. It can
13614 be changed, for a particular subroutine, by L</cv_set_call_checker_flags>.
13616 If the C<CALL_CHECKER_REQUIRE_GV> bit is set in C<gflags> then it
13617 indicates that the caller only knows about the genuine GV version of
13618 C<namegv>, and accordingly the corresponding bit will always be set in
13619 C<*ckflags_p>, regardless of the check function's recorded requirements.
13620 If the C<CALL_CHECKER_REQUIRE_GV> bit is clear in C<gflags> then it
13621 indicates the caller knows about the possibility of passing something
13622 other than a GV as C<namegv>, and accordingly the corresponding bit may
13623 be either set or clear in C<*ckflags_p>, indicating the check function's
13624 recorded requirements.
13626 C<gflags> is a bitset passed into C<cv_get_call_checker_flags>, in which
13627 only the C<CALL_CHECKER_REQUIRE_GV> bit currently has a defined meaning
13628 (for which see above). All other bits should be clear.
13630 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
13632 The original form of L</cv_get_call_checker_flags>, which does not return
13633 checker flags. When using a checker function returned by this function,
13634 it is only safe to call it with a genuine GV as its C<namegv> argument.
13640 Perl_cv_get_call_checker_flags(pTHX_ CV *cv, U32 gflags,
13641 Perl_call_checker *ckfun_p, SV **ckobj_p, U32 *ckflags_p)
13644 PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER_FLAGS;
13645 PERL_UNUSED_CONTEXT;
13646 callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL;
13648 *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr);
13649 *ckobj_p = callmg->mg_obj;
13650 *ckflags_p = (callmg->mg_flags | gflags) & MGf_REQUIRE_GV;
13652 *ckfun_p = Perl_ck_entersub_args_proto_or_list;
13653 *ckobj_p = (SV*)cv;
13654 *ckflags_p = gflags & MGf_REQUIRE_GV;
13659 Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
13662 PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER;
13663 PERL_UNUSED_CONTEXT;
13664 cv_get_call_checker_flags(cv, CALL_CHECKER_REQUIRE_GV, ckfun_p, ckobj_p,
13669 =for apidoc Am|void|cv_set_call_checker_flags|CV *cv|Perl_call_checker ckfun|SV *ckobj|U32 ckflags
13671 Sets the function that will be used to fix up a call to C<cv>.
13672 Specifically, the function is applied to an C<entersub> op tree for a
13673 subroutine call, not marked with C<&>, where the callee can be identified
13674 at compile time as C<cv>.
13676 The C-level function pointer is supplied in C<ckfun>, an SV argument for
13677 it is supplied in C<ckobj>, and control flags are supplied in C<ckflags>.
13678 The function should be defined like this:
13680 STATIC OP * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj)
13682 It is intended to be called in this manner:
13684 entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
13686 In this call, C<entersubop> is a pointer to the C<entersub> op,
13687 which may be replaced by the check function, and C<namegv> supplies
13688 the name that should be used by the check function to refer
13689 to the callee of the C<entersub> op if it needs to emit any diagnostics.
13690 It is permitted to apply the check function in non-standard situations,
13691 such as to a call to a different subroutine or to a method call.
13693 C<namegv> may not actually be a GV. For efficiency, perl may pass a
13694 CV or other SV instead. Whatever is passed can be used as the first
13695 argument to L</cv_name>. You can force perl to pass a GV by including
13696 C<CALL_CHECKER_REQUIRE_GV> in the C<ckflags>.
13698 C<ckflags> is a bitset, in which only the C<CALL_CHECKER_REQUIRE_GV>
13699 bit currently has a defined meaning (for which see above). All other
13700 bits should be clear.
13702 The current setting for a particular CV can be retrieved by
13703 L</cv_get_call_checker_flags>.
13705 =for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
13707 The original form of L</cv_set_call_checker_flags>, which passes it the
13708 C<CALL_CHECKER_REQUIRE_GV> flag for backward-compatibility. The effect
13709 of that flag setting is that the check function is guaranteed to get a
13710 genuine GV as its C<namegv> argument.
13716 Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
13718 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER;
13719 cv_set_call_checker_flags(cv, ckfun, ckobj, CALL_CHECKER_REQUIRE_GV);
13723 Perl_cv_set_call_checker_flags(pTHX_ CV *cv, Perl_call_checker ckfun,
13724 SV *ckobj, U32 ckflags)
13726 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER_FLAGS;
13727 if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) {
13728 if (SvMAGICAL((SV*)cv))
13729 mg_free_type((SV*)cv, PERL_MAGIC_checkcall);
13732 sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0);
13733 callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall);
13735 if (callmg->mg_flags & MGf_REFCOUNTED) {
13736 SvREFCNT_dec(callmg->mg_obj);
13737 callmg->mg_flags &= ~MGf_REFCOUNTED;
13739 callmg->mg_ptr = FPTR2DPTR(char *, ckfun);
13740 callmg->mg_obj = ckobj;
13741 if (ckobj != (SV*)cv) {
13742 SvREFCNT_inc_simple_void_NN(ckobj);
13743 callmg->mg_flags |= MGf_REFCOUNTED;
13745 callmg->mg_flags = (callmg->mg_flags &~ MGf_REQUIRE_GV)
13746 | (U8)(ckflags & MGf_REQUIRE_GV) | MGf_COPY;
13751 S_entersub_alloc_targ(pTHX_ OP * const o)
13753 o->op_targ = pad_alloc(OP_ENTERSUB, SVs_PADTMP);
13754 o->op_private |= OPpENTERSUB_HASTARG;
13758 Perl_ck_subr(pTHX_ OP *o)
13763 SV **const_class = NULL;
13765 PERL_ARGS_ASSERT_CK_SUBR;
13767 aop = cUNOPx(o)->op_first;
13768 if (!OpHAS_SIBLING(aop))
13769 aop = cUNOPx(aop)->op_first;
13770 aop = OpSIBLING(aop);
13771 for (cvop = aop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ;
13772 cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY);
13773 namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_MAYBE_NAME_GV) : NULL;
13775 o->op_private &= ~1;
13776 o->op_private |= (PL_hints & HINT_STRICT_REFS);
13777 if (PERLDB_SUB && PL_curstash != PL_debstash)
13778 o->op_private |= OPpENTERSUB_DB;
13779 switch (cvop->op_type) {
13781 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
13785 case OP_METHOD_NAMED:
13786 case OP_METHOD_SUPER:
13787 case OP_METHOD_REDIR:
13788 case OP_METHOD_REDIR_SUPER:
13789 o->op_flags |= OPf_REF;
13790 if (aop->op_type == OP_CONST) {
13791 aop->op_private &= ~OPpCONST_STRICT;
13792 const_class = &cSVOPx(aop)->op_sv;
13794 else if (aop->op_type == OP_LIST) {
13795 OP * const sib = OpSIBLING(((UNOP*)aop)->op_first);
13796 if (sib && sib->op_type == OP_CONST) {
13797 sib->op_private &= ~OPpCONST_STRICT;
13798 const_class = &cSVOPx(sib)->op_sv;
13801 /* make class name a shared cow string to speedup method calls */
13802 /* constant string might be replaced with object, f.e. bigint */
13803 if (const_class && SvPOK(*const_class)) {
13805 const char* str = SvPV(*const_class, len);
13807 SV* const shared = newSVpvn_share(
13808 str, SvUTF8(*const_class)
13809 ? -(SSize_t)len : (SSize_t)len,
13812 if (SvREADONLY(*const_class))
13813 SvREADONLY_on(shared);
13814 SvREFCNT_dec(*const_class);
13815 *const_class = shared;
13822 S_entersub_alloc_targ(aTHX_ o);
13823 return ck_entersub_args_list(o);
13825 Perl_call_checker ckfun;
13828 cv_get_call_checker_flags(cv, 0, &ckfun, &ckobj, &ckflags);
13829 if (CvISXSUB(cv) || !CvROOT(cv))
13830 S_entersub_alloc_targ(aTHX_ o);
13832 /* The original call checker API guarantees that a GV will be
13833 be provided with the right name. So, if the old API was
13834 used (or the REQUIRE_GV flag was passed), we have to reify
13835 the CV’s GV, unless this is an anonymous sub. This is not
13836 ideal for lexical subs, as its stringification will include
13837 the package. But it is the best we can do. */
13838 if (ckflags & CALL_CHECKER_REQUIRE_GV) {
13839 if (!CvANON(cv) && (!CvNAMED(cv) || CvNAME_HEK(cv)))
13842 else namegv = MUTABLE_GV(cv);
13843 /* After a syntax error in a lexical sub, the cv that
13844 rv2cv_op_cv returns may be a nameless stub. */
13845 if (!namegv) return ck_entersub_args_list(o);
13848 return ckfun(aTHX_ o, namegv, ckobj);
13853 Perl_ck_svconst(pTHX_ OP *o)
13855 SV * const sv = cSVOPo->op_sv;
13856 PERL_ARGS_ASSERT_CK_SVCONST;
13857 PERL_UNUSED_CONTEXT;
13858 #ifdef PERL_COPY_ON_WRITE
13859 /* Since the read-only flag may be used to protect a string buffer, we
13860 cannot do copy-on-write with existing read-only scalars that are not
13861 already copy-on-write scalars. To allow $_ = "hello" to do COW with
13862 that constant, mark the constant as COWable here, if it is not
13863 already read-only. */
13864 if (!SvREADONLY(sv) && !SvIsCOW(sv) && SvCANCOW(sv)) {
13867 # ifdef PERL_DEBUG_READONLY_COW
13877 Perl_ck_trunc(pTHX_ OP *o)
13879 PERL_ARGS_ASSERT_CK_TRUNC;
13881 if (o->op_flags & OPf_KIDS) {
13882 SVOP *kid = (SVOP*)cUNOPo->op_first;
13884 if (kid->op_type == OP_NULL)
13885 kid = (SVOP*)OpSIBLING(kid);
13886 if (kid && kid->op_type == OP_CONST &&
13887 (kid->op_private & OPpCONST_BARE) &&
13890 o->op_flags |= OPf_SPECIAL;
13891 kid->op_private &= ~OPpCONST_STRICT;
13898 Perl_ck_substr(pTHX_ OP *o)
13900 PERL_ARGS_ASSERT_CK_SUBSTR;
13903 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
13904 OP *kid = cLISTOPo->op_first;
13906 if (kid->op_type == OP_NULL)
13907 kid = OpSIBLING(kid);
13909 /* Historically, substr(delete $foo{bar},...) has been allowed
13910 with 4-arg substr. Keep it working by applying entersub
13912 op_lvalue(kid, OP_ENTERSUB);
13919 Perl_ck_tell(pTHX_ OP *o)
13921 PERL_ARGS_ASSERT_CK_TELL;
13923 if (o->op_flags & OPf_KIDS) {
13924 OP *kid = cLISTOPo->op_first;
13925 if (kid->op_type == OP_NULL && OpHAS_SIBLING(kid)) kid = OpSIBLING(kid);
13926 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
13932 Perl_ck_each(pTHX_ OP *o)
13935 OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL;
13936 const unsigned orig_type = o->op_type;
13938 PERL_ARGS_ASSERT_CK_EACH;
13941 switch (kid->op_type) {
13947 OpTYPE_set(o, orig_type == OP_EACH ? OP_AEACH
13948 : orig_type == OP_KEYS ? OP_AKEYS
13952 if (kid->op_private == OPpCONST_BARE
13953 || !SvROK(cSVOPx_sv(kid))
13954 || ( SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV
13955 && SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVHV )
13960 qerror(Perl_mess(aTHX_
13961 "Experimental %s on scalar is now forbidden",
13962 PL_op_desc[orig_type]));
13964 bad_type_pv(1, "hash or array", o, kid);
13972 Perl_ck_length(pTHX_ OP *o)
13974 PERL_ARGS_ASSERT_CK_LENGTH;
13978 if (ckWARN(WARN_SYNTAX)) {
13979 const OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
13983 const bool hash = kid->op_type == OP_PADHV
13984 || kid->op_type == OP_RV2HV;
13985 switch (kid->op_type) {
13990 name = S_op_varname(aTHX_ kid);
13996 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
13997 "length() used on %" SVf " (did you mean \"scalar(%s%" SVf
13999 SVfARG(name), hash ? "keys " : "", SVfARG(name)
14002 /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */
14003 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
14004 "length() used on %%hash (did you mean \"scalar(keys %%hash)\"?)");
14006 /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */
14007 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
14008 "length() used on @array (did you mean \"scalar(@array)\"?)");
14018 ---------------------------------------------------------
14020 Common vars in list assignment
14022 There now follows some enums and static functions for detecting
14023 common variables in list assignments. Here is a little essay I wrote
14024 for myself when trying to get my head around this. DAPM.
14028 First some random observations:
14030 * If a lexical var is an alias of something else, e.g.
14031 for my $x ($lex, $pkg, $a[0]) {...}
14032 then the act of aliasing will increase the reference count of the SV
14034 * If a package var is an alias of something else, it may still have a
14035 reference count of 1, depending on how the alias was created, e.g.
14036 in *a = *b, $a may have a refcount of 1 since the GP is shared
14037 with a single GvSV pointer to the SV. So If it's an alias of another
14038 package var, then RC may be 1; if it's an alias of another scalar, e.g.
14039 a lexical var or an array element, then it will have RC > 1.
14041 * There are many ways to create a package alias; ultimately, XS code
14042 may quite legally do GvSV(gv) = SvREFCNT_inc(sv) for example, so
14043 run-time tracing mechanisms are unlikely to be able to catch all cases.
14045 * When the LHS is all my declarations, the same vars can't appear directly
14046 on the RHS, but they can indirectly via closures, aliasing and lvalue
14047 subs. But those techniques all involve an increase in the lexical
14048 scalar's ref count.
14050 * When the LHS is all lexical vars (but not necessarily my declarations),
14051 it is possible for the same lexicals to appear directly on the RHS, and
14052 without an increased ref count, since the stack isn't refcounted.
14053 This case can be detected at compile time by scanning for common lex
14054 vars with PL_generation.
14056 * lvalue subs defeat common var detection, but they do at least
14057 return vars with a temporary ref count increment. Also, you can't
14058 tell at compile time whether a sub call is lvalue.
14063 A: There are a few circumstances where there definitely can't be any
14066 LHS empty: () = (...);
14067 RHS empty: (....) = ();
14068 RHS contains only constants or other 'can't possibly be shared'
14069 elements (e.g. ops that return PADTMPs): (...) = (1,2, length)
14070 i.e. they only contain ops not marked as dangerous, whose children
14071 are also not dangerous;
14073 LHS contains a single scalar element: e.g. ($x) = (....); because
14074 after $x has been modified, it won't be used again on the RHS;
14075 RHS contains a single element with no aggregate on LHS: e.g.
14076 ($a,$b,$c) = ($x); again, once $a has been modified, its value
14077 won't be used again.
14079 B: If LHS are all 'my' lexical var declarations (or safe ops, which
14082 my ($a, $b, @c) = ...;
14084 Due to closure and goto tricks, these vars may already have content.
14085 For the same reason, an element on the RHS may be a lexical or package
14086 alias of one of the vars on the left, or share common elements, for
14089 my ($x,$y) = f(); # $x and $y on both sides
14090 sub f : lvalue { ($x,$y) = (1,2); $y, $x }
14095 my @a = @$ra; # elements of @a on both sides
14096 sub f { @a = 1..4; \@a }
14099 First, just consider scalar vars on LHS:
14101 RHS is safe only if (A), or in addition,
14102 * contains only lexical *scalar* vars, where neither side's
14103 lexicals have been flagged as aliases
14105 If RHS is not safe, then it's always legal to check LHS vars for
14106 RC==1, since the only RHS aliases will always be associated
14109 Note that in particular, RHS is not safe if:
14111 * it contains package scalar vars; e.g.:
14114 my ($x, $y) = (2, $x_alias);
14115 sub f { $x = 1; *x_alias = \$x; }
14117 * It contains other general elements, such as flattened or
14118 * spliced or single array or hash elements, e.g.
14121 my ($x,$y) = @a; # or $a[0] or @a{@b} etc
14125 use feature 'refaliasing';
14126 \($a[0], $a[1]) = \($y,$x);
14129 It doesn't matter if the array/hash is lexical or package.
14131 * it contains a function call that happens to be an lvalue
14132 sub which returns one or more of the above, e.g.
14143 (so a sub call on the RHS should be treated the same
14144 as having a package var on the RHS).
14146 * any other "dangerous" thing, such an op or built-in that
14147 returns one of the above, e.g. pp_preinc
14150 If RHS is not safe, what we can do however is at compile time flag
14151 that the LHS are all my declarations, and at run time check whether
14152 all the LHS have RC == 1, and if so skip the full scan.
14154 Now consider array and hash vars on LHS: e.g. my (...,@a) = ...;
14156 Here the issue is whether there can be elements of @a on the RHS
14157 which will get prematurely freed when @a is cleared prior to
14158 assignment. This is only a problem if the aliasing mechanism
14159 is one which doesn't increase the refcount - only if RC == 1
14160 will the RHS element be prematurely freed.
14162 Because the array/hash is being INTROed, it or its elements
14163 can't directly appear on the RHS:
14165 my (@a) = ($a[0], @a, etc) # NOT POSSIBLE
14167 but can indirectly, e.g.:
14171 sub f { @a = 1..3; \@a }
14173 So if the RHS isn't safe as defined by (A), we must always
14174 mortalise and bump the ref count of any remaining RHS elements
14175 when assigning to a non-empty LHS aggregate.
14177 Lexical scalars on the RHS aren't safe if they've been involved in
14180 use feature 'refaliasing';
14183 \(my $lex) = \$pkg;
14184 my @a = ($lex,3); # equivalent to ($a[0],3)
14191 Similarly with lexical arrays and hashes on the RHS:
14205 C: As (B), but in addition the LHS may contain non-intro lexicals, e.g.
14206 my $a; ($a, my $b) = (....);
14208 The difference between (B) and (C) is that it is now physically
14209 possible for the LHS vars to appear on the RHS too, where they
14210 are not reference counted; but in this case, the compile-time
14211 PL_generation sweep will detect such common vars.
14213 So the rules for (C) differ from (B) in that if common vars are
14214 detected, the runtime "test RC==1" optimisation can no longer be used,
14215 and a full mark and sweep is required
14217 D: As (C), but in addition the LHS may contain package vars.
14219 Since package vars can be aliased without a corresponding refcount
14220 increase, all bets are off. It's only safe if (A). E.g.
14222 my ($x, $y) = (1,2);
14224 for $x_alias ($x) {
14225 ($x_alias, $y) = (3, $x); # whoops
14228 Ditto for LHS aggregate package vars.
14230 E: Any other dangerous ops on LHS, e.g.
14231 (f(), $a[0], @$r) = (...);
14233 this is similar to (E) in that all bets are off. In addition, it's
14234 impossible to determine at compile time whether the LHS
14235 contains a scalar or an aggregate, e.g.
14237 sub f : lvalue { @a }
14240 * ---------------------------------------------------------
14244 /* A set of bit flags returned by S_aassign_scan(). Each flag indicates
14245 * that at least one of the things flagged was seen.
14249 AAS_MY_SCALAR = 0x001, /* my $scalar */
14250 AAS_MY_AGG = 0x002, /* aggregate: my @array or my %hash */
14251 AAS_LEX_SCALAR = 0x004, /* $lexical */
14252 AAS_LEX_AGG = 0x008, /* @lexical or %lexical aggregate */
14253 AAS_LEX_SCALAR_COMM = 0x010, /* $lexical seen on both sides */
14254 AAS_PKG_SCALAR = 0x020, /* $scalar (where $scalar is pkg var) */
14255 AAS_PKG_AGG = 0x040, /* package @array or %hash aggregate */
14256 AAS_DANGEROUS = 0x080, /* an op (other than the above)
14257 that's flagged OA_DANGEROUS */
14258 AAS_SAFE_SCALAR = 0x100, /* produces at least one scalar SV that's
14259 not in any of the categories above */
14260 AAS_DEFAV = 0x200 /* contains just a single '@_' on RHS */
14265 /* helper function for S_aassign_scan().
14266 * check a PAD-related op for commonality and/or set its generation number.
14267 * Returns a boolean indicating whether its shared */
14270 S_aassign_padcheck(pTHX_ OP* o, bool rhs)
14272 if (PAD_COMPNAME_GEN(o->op_targ) == PERL_INT_MAX)
14273 /* lexical used in aliasing */
14277 return cBOOL(PAD_COMPNAME_GEN(o->op_targ) == (STRLEN)PL_generation);
14279 PAD_COMPNAME_GEN_set(o->op_targ, PL_generation);
14286 Helper function for OPpASSIGN_COMMON* detection in rpeep().
14287 It scans the left or right hand subtree of the aassign op, and returns a
14288 set of flags indicating what sorts of things it found there.
14289 'rhs' indicates whether we're scanning the LHS or RHS. If the former, we
14290 set PL_generation on lexical vars; if the latter, we see if
14291 PL_generation matches.
14292 'top' indicates whether we're recursing or at the top level.
14293 'scalars_p' is a pointer to a counter of the number of scalar SVs seen.
14294 This fn will increment it by the number seen. It's not intended to
14295 be an accurate count (especially as many ops can push a variable
14296 number of SVs onto the stack); rather it's used as to test whether there
14297 can be at most 1 SV pushed; so it's only meanings are "0, 1, many".
14301 S_aassign_scan(pTHX_ OP* o, bool rhs, bool top, int *scalars_p)
14304 bool kid_top = FALSE;
14306 /* first, look for a solitary @_ on the RHS */
14309 && (o->op_flags & OPf_KIDS)
14310 && OP_TYPE_IS_OR_WAS(o, OP_LIST)
14312 OP *kid = cUNOPo->op_first;
14313 if ( ( kid->op_type == OP_PUSHMARK
14314 || kid->op_type == OP_PADRANGE) /* ex-pushmark */
14315 && ((kid = OpSIBLING(kid)))
14316 && !OpHAS_SIBLING(kid)
14317 && kid->op_type == OP_RV2AV
14318 && !(kid->op_flags & OPf_REF)
14319 && !(kid->op_private & (OPpLVAL_INTRO|OPpMAYBE_LVSUB))
14320 && ((kid->op_flags & OPf_WANT) == OPf_WANT_LIST)
14321 && ((kid = cUNOPx(kid)->op_first))
14322 && kid->op_type == OP_GV
14323 && cGVOPx_gv(kid) == PL_defgv
14325 flags |= AAS_DEFAV;
14328 switch (o->op_type) {
14331 return AAS_PKG_SCALAR;
14336 /* if !top, could be e.g. @a[0,1] */
14337 if (top && (o->op_flags & OPf_REF))
14338 return (o->op_private & OPpLVAL_INTRO)
14339 ? AAS_MY_AGG : AAS_LEX_AGG;
14340 return AAS_DANGEROUS;
14344 int comm = S_aassign_padcheck(aTHX_ o, rhs)
14345 ? AAS_LEX_SCALAR_COMM : 0;
14347 return (o->op_private & OPpLVAL_INTRO)
14348 ? (AAS_MY_SCALAR|comm) : (AAS_LEX_SCALAR|comm);
14354 if (cUNOPx(o)->op_first->op_type != OP_GV)
14355 return AAS_DANGEROUS; /* @{expr}, %{expr} */
14357 /* if !top, could be e.g. @a[0,1] */
14358 if (top && (o->op_flags & OPf_REF))
14359 return AAS_PKG_AGG;
14360 return AAS_DANGEROUS;
14364 if (cUNOPx(o)->op_first->op_type != OP_GV) {
14366 return AAS_DANGEROUS; /* ${expr} */
14368 return AAS_PKG_SCALAR; /* $pkg */
14371 if (o->op_private & OPpSPLIT_ASSIGN) {
14372 /* the assign in @a = split() has been optimised away
14373 * and the @a attached directly to the split op
14374 * Treat the array as appearing on the RHS, i.e.
14375 * ... = (@a = split)
14380 if (o->op_flags & OPf_STACKED)
14381 /* @{expr} = split() - the array expression is tacked
14382 * on as an extra child to split - process kid */
14383 return S_aassign_scan(aTHX_ cLISTOPo->op_last, rhs,
14386 /* ... else array is directly attached to split op */
14388 if (PL_op->op_private & OPpSPLIT_LEX)
14389 return (o->op_private & OPpLVAL_INTRO)
14390 ? AAS_MY_AGG : AAS_LEX_AGG;
14392 return AAS_PKG_AGG;
14395 /* other args of split can't be returned */
14396 return AAS_SAFE_SCALAR;
14399 /* undef counts as a scalar on the RHS:
14400 * (undef, $x) = ...; # only 1 scalar on LHS: always safe
14401 * ($x, $y) = (undef, $x); # 2 scalars on RHS: unsafe
14405 flags = AAS_SAFE_SCALAR;
14410 /* these are all no-ops; they don't push a potentially common SV
14411 * onto the stack, so they are neither AAS_DANGEROUS nor
14412 * AAS_SAFE_SCALAR */
14415 case OP_PADRANGE: /* Ignore padrange; checking its siblings is enough */
14420 /* these do nothing but may have children; but their children
14421 * should also be treated as top-level */
14426 if (PL_opargs[o->op_type] & OA_DANGEROUS) {
14428 flags = AAS_DANGEROUS;
14432 if ( (PL_opargs[o->op_type] & OA_TARGLEX)
14433 && (o->op_private & OPpTARGET_MY))
14436 return S_aassign_padcheck(aTHX_ o, rhs)
14437 ? AAS_LEX_SCALAR_COMM : AAS_LEX_SCALAR;
14440 /* if its an unrecognised, non-dangerous op, assume that it
14441 * it the cause of at least one safe scalar */
14443 flags = AAS_SAFE_SCALAR;
14447 /* XXX this assumes that all other ops are "transparent" - i.e. that
14448 * they can return some of their children. While this true for e.g.
14449 * sort and grep, it's not true for e.g. map. We really need a
14450 * 'transparent' flag added to regen/opcodes
14452 if (o->op_flags & OPf_KIDS) {
14454 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
14455 flags |= S_aassign_scan(aTHX_ kid, rhs, kid_top, scalars_p);
14461 /* Check for in place reverse and sort assignments like "@a = reverse @a"
14462 and modify the optree to make them work inplace */
14465 S_inplace_aassign(pTHX_ OP *o) {
14467 OP *modop, *modop_pushmark;
14469 OP *oleft, *oleft_pushmark;
14471 PERL_ARGS_ASSERT_INPLACE_AASSIGN;
14473 assert((o->op_flags & OPf_WANT) == OPf_WANT_VOID);
14475 assert(cUNOPo->op_first->op_type == OP_NULL);
14476 modop_pushmark = cUNOPx(cUNOPo->op_first)->op_first;
14477 assert(modop_pushmark->op_type == OP_PUSHMARK);
14478 modop = OpSIBLING(modop_pushmark);
14480 if (modop->op_type != OP_SORT && modop->op_type != OP_REVERSE)
14483 /* no other operation except sort/reverse */
14484 if (OpHAS_SIBLING(modop))
14487 assert(cUNOPx(modop)->op_first->op_type == OP_PUSHMARK);
14488 if (!(oright = OpSIBLING(cUNOPx(modop)->op_first))) return;
14490 if (modop->op_flags & OPf_STACKED) {
14491 /* skip sort subroutine/block */
14492 assert(oright->op_type == OP_NULL);
14493 oright = OpSIBLING(oright);
14496 assert(OpSIBLING(cUNOPo->op_first)->op_type == OP_NULL);
14497 oleft_pushmark = cUNOPx(OpSIBLING(cUNOPo->op_first))->op_first;
14498 assert(oleft_pushmark->op_type == OP_PUSHMARK);
14499 oleft = OpSIBLING(oleft_pushmark);
14501 /* Check the lhs is an array */
14503 (oleft->op_type != OP_RV2AV && oleft->op_type != OP_PADAV)
14504 || OpHAS_SIBLING(oleft)
14505 || (oleft->op_private & OPpLVAL_INTRO)
14509 /* Only one thing on the rhs */
14510 if (OpHAS_SIBLING(oright))
14513 /* check the array is the same on both sides */
14514 if (oleft->op_type == OP_RV2AV) {
14515 if (oright->op_type != OP_RV2AV
14516 || !cUNOPx(oright)->op_first
14517 || cUNOPx(oright)->op_first->op_type != OP_GV
14518 || cUNOPx(oleft )->op_first->op_type != OP_GV
14519 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
14520 cGVOPx_gv(cUNOPx(oright)->op_first)
14524 else if (oright->op_type != OP_PADAV
14525 || oright->op_targ != oleft->op_targ
14529 /* This actually is an inplace assignment */
14531 modop->op_private |= OPpSORT_INPLACE;
14533 /* transfer MODishness etc from LHS arg to RHS arg */
14534 oright->op_flags = oleft->op_flags;
14536 /* remove the aassign op and the lhs */
14538 op_null(oleft_pushmark);
14539 if (oleft->op_type == OP_RV2AV && cUNOPx(oleft)->op_first)
14540 op_null(cUNOPx(oleft)->op_first);
14546 /* S_maybe_multideref(): given an op_next chain of ops beginning at 'start'
14547 * that potentially represent a series of one or more aggregate derefs
14548 * (such as $a->[1]{$key}), examine the chain, and if appropriate, convert
14549 * the whole chain to a single OP_MULTIDEREF op (maybe with a few
14550 * additional ops left in too).
14552 * The caller will have already verified that the first few ops in the
14553 * chain following 'start' indicate a multideref candidate, and will have
14554 * set 'orig_o' to the point further on in the chain where the first index
14555 * expression (if any) begins. 'orig_action' specifies what type of
14556 * beginning has already been determined by the ops between start..orig_o
14557 * (e.g. $lex_ary[], $pkg_ary->{}, expr->[], etc).
14559 * 'hints' contains any hints flags that need adding (currently just
14560 * OPpHINT_STRICT_REFS) as found in any rv2av/hv skipped by the caller.
14564 S_maybe_multideref(pTHX_ OP *start, OP *orig_o, UV orig_action, U8 hints)
14568 UNOP_AUX_item *arg_buf = NULL;
14569 bool reset_start_targ = FALSE; /* start->op_targ needs zeroing */
14570 int index_skip = -1; /* don't output index arg on this action */
14572 /* similar to regex compiling, do two passes; the first pass
14573 * determines whether the op chain is convertible and calculates the
14574 * buffer size; the second pass populates the buffer and makes any
14575 * changes necessary to ops (such as moving consts to the pad on
14576 * threaded builds).
14578 * NB: for things like Coverity, note that both passes take the same
14579 * path through the logic tree (except for 'if (pass)' bits), since
14580 * both passes are following the same op_next chain; and in
14581 * particular, if it would return early on the second pass, it would
14582 * already have returned early on the first pass.
14584 for (pass = 0; pass < 2; pass++) {
14586 UV action = orig_action;
14587 OP *first_elem_op = NULL; /* first seen aelem/helem */
14588 OP *top_op = NULL; /* highest [ah]elem/exists/del/rv2[ah]v */
14589 int action_count = 0; /* number of actions seen so far */
14590 int action_ix = 0; /* action_count % (actions per IV) */
14591 bool next_is_hash = FALSE; /* is the next lookup to be a hash? */
14592 bool is_last = FALSE; /* no more derefs to follow */
14593 bool maybe_aelemfast = FALSE; /* we can replace with aelemfast? */
14594 UNOP_AUX_item *arg = arg_buf;
14595 UNOP_AUX_item *action_ptr = arg_buf;
14598 action_ptr->uv = 0;
14602 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
14603 case MDEREF_HV_gvhv_helem:
14604 next_is_hash = TRUE;
14606 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
14607 case MDEREF_AV_gvav_aelem:
14609 #ifdef USE_ITHREADS
14610 arg->pad_offset = cPADOPx(start)->op_padix;
14611 /* stop it being swiped when nulled */
14612 cPADOPx(start)->op_padix = 0;
14614 arg->sv = cSVOPx(start)->op_sv;
14615 cSVOPx(start)->op_sv = NULL;
14621 case MDEREF_HV_padhv_helem:
14622 case MDEREF_HV_padsv_vivify_rv2hv_helem:
14623 next_is_hash = TRUE;
14625 case MDEREF_AV_padav_aelem:
14626 case MDEREF_AV_padsv_vivify_rv2av_aelem:
14628 arg->pad_offset = start->op_targ;
14629 /* we skip setting op_targ = 0 for now, since the intact
14630 * OP_PADXV is needed by S_check_hash_fields_and_hekify */
14631 reset_start_targ = TRUE;
14636 case MDEREF_HV_pop_rv2hv_helem:
14637 next_is_hash = TRUE;
14639 case MDEREF_AV_pop_rv2av_aelem:
14643 NOT_REACHED; /* NOTREACHED */
14648 /* look for another (rv2av/hv; get index;
14649 * aelem/helem/exists/delele) sequence */
14654 UV index_type = MDEREF_INDEX_none;
14656 if (action_count) {
14657 /* if this is not the first lookup, consume the rv2av/hv */
14659 /* for N levels of aggregate lookup, we normally expect
14660 * that the first N-1 [ah]elem ops will be flagged as
14661 * /DEREF (so they autovivifiy if necessary), and the last
14662 * lookup op not to be.
14663 * For other things (like @{$h{k1}{k2}}) extra scope or
14664 * leave ops can appear, so abandon the effort in that
14666 if (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
14669 /* rv2av or rv2hv sKR/1 */
14671 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
14672 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
14673 if (o->op_flags != (OPf_WANT_SCALAR|OPf_KIDS|OPf_REF))
14676 /* at this point, we wouldn't expect any of these
14677 * possible private flags:
14678 * OPpMAYBE_LVSUB, OPpOUR_INTRO, OPpLVAL_INTRO
14679 * OPpTRUEBOOL, OPpMAYBE_TRUEBOOL (rv2hv only)
14681 ASSUME(!(o->op_private &
14682 ~(OPpHINT_STRICT_REFS|OPpARG1_MASK|OPpSLICEWARNING)));
14684 hints = (o->op_private & OPpHINT_STRICT_REFS);
14686 /* make sure the type of the previous /DEREF matches the
14687 * type of the next lookup */
14688 ASSUME(o->op_type == (next_is_hash ? OP_RV2HV : OP_RV2AV));
14691 action = next_is_hash
14692 ? MDEREF_HV_vivify_rv2hv_helem
14693 : MDEREF_AV_vivify_rv2av_aelem;
14697 /* if this is the second pass, and we're at the depth where
14698 * previously we encountered a non-simple index expression,
14699 * stop processing the index at this point */
14700 if (action_count != index_skip) {
14702 /* look for one or more simple ops that return an array
14703 * index or hash key */
14705 switch (o->op_type) {
14707 /* it may be a lexical var index */
14708 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_PARENS
14709 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
14710 ASSUME(!(o->op_private &
14711 ~(OPpPAD_STATE|OPpDEREF|OPpLVAL_INTRO)));
14713 if ( OP_GIMME(o,0) == G_SCALAR
14714 && !(o->op_flags & (OPf_REF|OPf_MOD))
14715 && o->op_private == 0)
14718 arg->pad_offset = o->op_targ;
14720 index_type = MDEREF_INDEX_padsv;
14726 if (next_is_hash) {
14727 /* it's a constant hash index */
14728 if (!(SvFLAGS(cSVOPo_sv) & (SVf_IOK|SVf_NOK|SVf_POK)))
14729 /* "use constant foo => FOO; $h{+foo}" for
14730 * some weird FOO, can leave you with constants
14731 * that aren't simple strings. It's not worth
14732 * the extra hassle for those edge cases */
14737 OP * helem_op = o->op_next;
14739 ASSUME( helem_op->op_type == OP_HELEM
14740 || helem_op->op_type == OP_NULL
14742 if (helem_op->op_type == OP_HELEM) {
14743 rop = (UNOP*)(((BINOP*)helem_op)->op_first);
14744 if ( helem_op->op_private & OPpLVAL_INTRO
14745 || rop->op_type != OP_RV2HV
14749 /* on first pass just check; on second pass
14751 S_check_hash_fields_and_hekify(aTHX_ rop, cSVOPo,
14756 #ifdef USE_ITHREADS
14757 /* Relocate sv to the pad for thread safety */
14758 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
14759 arg->pad_offset = o->op_targ;
14762 arg->sv = cSVOPx_sv(o);
14767 /* it's a constant array index */
14769 SV *ix_sv = cSVOPo->op_sv;
14774 if ( action_count == 0
14777 && ( action == MDEREF_AV_padav_aelem
14778 || action == MDEREF_AV_gvav_aelem)
14780 maybe_aelemfast = TRUE;
14784 SvREFCNT_dec_NN(cSVOPo->op_sv);
14788 /* we've taken ownership of the SV */
14789 cSVOPo->op_sv = NULL;
14791 index_type = MDEREF_INDEX_const;
14796 /* it may be a package var index */
14798 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_PARENS|OPf_SPECIAL)));
14799 ASSUME(!(o->op_private & ~(OPpEARLY_CV)));
14800 if ( (o->op_flags & ~(OPf_PARENS|OPf_SPECIAL)) != OPf_WANT_SCALAR
14801 || o->op_private != 0
14806 if (kid->op_type != OP_RV2SV)
14809 ASSUME(!(kid->op_flags &
14810 ~(OPf_WANT|OPf_KIDS|OPf_MOD|OPf_REF
14811 |OPf_SPECIAL|OPf_PARENS)));
14812 ASSUME(!(kid->op_private &
14814 |OPpHINT_STRICT_REFS|OPpOUR_INTRO
14815 |OPpDEREF|OPpLVAL_INTRO)));
14816 if( (kid->op_flags &~ OPf_PARENS)
14817 != (OPf_WANT_SCALAR|OPf_KIDS)
14818 || (kid->op_private & ~(OPpARG1_MASK|HINT_STRICT_REFS))
14823 #ifdef USE_ITHREADS
14824 arg->pad_offset = cPADOPx(o)->op_padix;
14825 /* stop it being swiped when nulled */
14826 cPADOPx(o)->op_padix = 0;
14828 arg->sv = cSVOPx(o)->op_sv;
14829 cSVOPo->op_sv = NULL;
14833 index_type = MDEREF_INDEX_gvsv;
14838 } /* action_count != index_skip */
14840 action |= index_type;
14843 /* at this point we have either:
14844 * * detected what looks like a simple index expression,
14845 * and expect the next op to be an [ah]elem, or
14846 * an nulled [ah]elem followed by a delete or exists;
14847 * * found a more complex expression, so something other
14848 * than the above follows.
14851 /* possibly an optimised away [ah]elem (where op_next is
14852 * exists or delete) */
14853 if (o->op_type == OP_NULL)
14856 /* at this point we're looking for an OP_AELEM, OP_HELEM,
14857 * OP_EXISTS or OP_DELETE */
14859 /* if a custom array/hash access checker is in scope,
14860 * abandon optimisation attempt */
14861 if ( (o->op_type == OP_AELEM || o->op_type == OP_HELEM)
14862 && PL_check[o->op_type] != Perl_ck_null)
14864 /* similarly for customised exists and delete */
14865 if ( (o->op_type == OP_EXISTS)
14866 && PL_check[o->op_type] != Perl_ck_exists)
14868 if ( (o->op_type == OP_DELETE)
14869 && PL_check[o->op_type] != Perl_ck_delete)
14872 if ( o->op_type != OP_AELEM
14873 || (o->op_private &
14874 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB))
14876 maybe_aelemfast = FALSE;
14878 /* look for aelem/helem/exists/delete. If it's not the last elem
14879 * lookup, it *must* have OPpDEREF_AV/HV, but not many other
14880 * flags; if it's the last, then it mustn't have
14881 * OPpDEREF_AV/HV, but may have lots of other flags, like
14882 * OPpLVAL_INTRO etc
14885 if ( index_type == MDEREF_INDEX_none
14886 || ( o->op_type != OP_AELEM && o->op_type != OP_HELEM
14887 && o->op_type != OP_EXISTS && o->op_type != OP_DELETE)
14891 /* we have aelem/helem/exists/delete with valid simple index */
14893 is_deref = (o->op_type == OP_AELEM || o->op_type == OP_HELEM)
14894 && ( (o->op_private & OPpDEREF) == OPpDEREF_AV
14895 || (o->op_private & OPpDEREF) == OPpDEREF_HV);
14897 /* This doesn't make much sense but is legal:
14898 * @{ local $x[0][0] } = 1
14899 * Since scope exit will undo the autovivification,
14900 * don't bother in the first place. The OP_LEAVE
14901 * assertion is in case there are other cases of both
14902 * OPpLVAL_INTRO and OPpDEREF which don't include a scope
14903 * exit that would undo the local - in which case this
14904 * block of code would need rethinking.
14906 if (is_deref && (o->op_private & OPpLVAL_INTRO)) {
14908 OP *n = o->op_next;
14909 while (n && ( n->op_type == OP_NULL
14910 || n->op_type == OP_LIST))
14912 assert(n && n->op_type == OP_LEAVE);
14914 o->op_private &= ~OPpDEREF;
14919 ASSUME(!(o->op_flags &
14920 ~(OPf_WANT|OPf_KIDS|OPf_MOD|OPf_PARENS)));
14921 ASSUME(!(o->op_private & ~(OPpARG2_MASK|OPpDEREF)));
14923 ok = (o->op_flags &~ OPf_PARENS)
14924 == (OPf_WANT_SCALAR|OPf_KIDS|OPf_MOD)
14925 && !(o->op_private & ~(OPpDEREF|OPpARG2_MASK));
14927 else if (o->op_type == OP_EXISTS) {
14928 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
14929 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
14930 ASSUME(!(o->op_private & ~(OPpARG1_MASK|OPpEXISTS_SUB)));
14931 ok = !(o->op_private & ~OPpARG1_MASK);
14933 else if (o->op_type == OP_DELETE) {
14934 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
14935 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
14936 ASSUME(!(o->op_private &
14937 ~(OPpARG1_MASK|OPpSLICE|OPpLVAL_INTRO)));
14938 /* don't handle slices or 'local delete'; the latter
14939 * is fairly rare, and has a complex runtime */
14940 ok = !(o->op_private & ~OPpARG1_MASK);
14941 if (OP_TYPE_IS_OR_WAS(cUNOPo->op_first, OP_AELEM))
14942 /* skip handling run-tome error */
14943 ok = (ok && cBOOL(o->op_flags & OPf_SPECIAL));
14946 ASSUME(o->op_type == OP_AELEM || o->op_type == OP_HELEM);
14947 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_MOD
14948 |OPf_PARENS|OPf_REF|OPf_SPECIAL)));
14949 ASSUME(!(o->op_private & ~(OPpARG2_MASK|OPpMAYBE_LVSUB
14950 |OPpLVAL_DEFER|OPpDEREF|OPpLVAL_INTRO)));
14951 ok = (o->op_private & OPpDEREF) != OPpDEREF_SV;
14956 if (!first_elem_op)
14960 next_is_hash = cBOOL((o->op_private & OPpDEREF) == OPpDEREF_HV);
14965 action |= MDEREF_FLAG_last;
14969 /* at this point we have something that started
14970 * promisingly enough (with rv2av or whatever), but failed
14971 * to find a simple index followed by an
14972 * aelem/helem/exists/delete. If this is the first action,
14973 * give up; but if we've already seen at least one
14974 * aelem/helem, then keep them and add a new action with
14975 * MDEREF_INDEX_none, which causes it to do the vivify
14976 * from the end of the previous lookup, and do the deref,
14977 * but stop at that point. So $a[0][expr] will do one
14978 * av_fetch, vivify and deref, then continue executing at
14983 index_skip = action_count;
14984 action |= MDEREF_FLAG_last;
14985 if (index_type != MDEREF_INDEX_none)
14990 action_ptr->uv |= (action << (action_ix * MDEREF_SHIFT));
14993 /* if there's no space for the next action, create a new slot
14994 * for it *before* we start adding args for that action */
14995 if ((action_ix + 1) * MDEREF_SHIFT > UVSIZE*8) {
15002 } /* while !is_last */
15010 mderef = newUNOP_AUX(OP_MULTIDEREF, 0, NULL, arg_buf);
15011 if (index_skip == -1) {
15012 mderef->op_flags = o->op_flags
15013 & (OPf_WANT|OPf_MOD|(next_is_hash ? OPf_SPECIAL : 0));
15014 if (o->op_type == OP_EXISTS)
15015 mderef->op_private = OPpMULTIDEREF_EXISTS;
15016 else if (o->op_type == OP_DELETE)
15017 mderef->op_private = OPpMULTIDEREF_DELETE;
15019 mderef->op_private = o->op_private
15020 & (OPpMAYBE_LVSUB|OPpLVAL_DEFER|OPpLVAL_INTRO);
15022 /* accumulate strictness from every level (although I don't think
15023 * they can actually vary) */
15024 mderef->op_private |= hints;
15026 /* integrate the new multideref op into the optree and the
15029 * In general an op like aelem or helem has two child
15030 * sub-trees: the aggregate expression (a_expr) and the
15031 * index expression (i_expr):
15037 * The a_expr returns an AV or HV, while the i-expr returns an
15038 * index. In general a multideref replaces most or all of a
15039 * multi-level tree, e.g.
15055 * With multideref, all the i_exprs will be simple vars or
15056 * constants, except that i_expr1 may be arbitrary in the case
15057 * of MDEREF_INDEX_none.
15059 * The bottom-most a_expr will be either:
15060 * 1) a simple var (so padXv or gv+rv2Xv);
15061 * 2) a simple scalar var dereferenced (e.g. $r->[0]):
15062 * so a simple var with an extra rv2Xv;
15063 * 3) or an arbitrary expression.
15065 * 'start', the first op in the execution chain, will point to
15066 * 1),2): the padXv or gv op;
15067 * 3): the rv2Xv which forms the last op in the a_expr
15068 * execution chain, and the top-most op in the a_expr
15071 * For all cases, the 'start' node is no longer required,
15072 * but we can't free it since one or more external nodes
15073 * may point to it. E.g. consider
15074 * $h{foo} = $a ? $b : $c
15075 * Here, both the op_next and op_other branches of the
15076 * cond_expr point to the gv[*h] of the hash expression, so
15077 * we can't free the 'start' op.
15079 * For expr->[...], we need to save the subtree containing the
15080 * expression; for the other cases, we just need to save the
15082 * So in all cases, we null the start op and keep it around by
15083 * making it the child of the multideref op; for the expr->
15084 * case, the expr will be a subtree of the start node.
15086 * So in the simple 1,2 case the optree above changes to
15092 * ex-gv (or ex-padxv)
15094 * with the op_next chain being
15096 * -> ex-gv -> multideref -> op-following-ex-exists ->
15098 * In the 3 case, we have
15111 * -> rest-of-a_expr subtree ->
15112 * ex-rv2xv -> multideref -> op-following-ex-exists ->
15115 * Where the last i_expr is non-simple (i.e. MDEREF_INDEX_none,
15116 * e.g. $a[0]{foo}[$x+1], the next rv2xv is nulled and the
15117 * multideref attached as the child, e.g.
15123 * ex-rv2av - i_expr1
15131 /* if we free this op, don't free the pad entry */
15132 if (reset_start_targ)
15133 start->op_targ = 0;
15136 /* Cut the bit we need to save out of the tree and attach to
15137 * the multideref op, then free the rest of the tree */
15139 /* find parent of node to be detached (for use by splice) */
15141 if ( orig_action == MDEREF_AV_pop_rv2av_aelem
15142 || orig_action == MDEREF_HV_pop_rv2hv_helem)
15144 /* there is an arbitrary expression preceding us, e.g.
15145 * expr->[..]? so we need to save the 'expr' subtree */
15146 if (p->op_type == OP_EXISTS || p->op_type == OP_DELETE)
15147 p = cUNOPx(p)->op_first;
15148 ASSUME( start->op_type == OP_RV2AV
15149 || start->op_type == OP_RV2HV);
15152 /* either a padXv or rv2Xv+gv, maybe with an ex-Xelem
15153 * above for exists/delete. */
15154 while ( (p->op_flags & OPf_KIDS)
15155 && cUNOPx(p)->op_first != start
15157 p = cUNOPx(p)->op_first;
15159 ASSUME(cUNOPx(p)->op_first == start);
15161 /* detach from main tree, and re-attach under the multideref */
15162 op_sibling_splice(mderef, NULL, 0,
15163 op_sibling_splice(p, NULL, 1, NULL));
15166 start->op_next = mderef;
15168 mderef->op_next = index_skip == -1 ? o->op_next : o;
15170 /* excise and free the original tree, and replace with
15171 * the multideref op */
15172 p = op_sibling_splice(top_op, NULL, -1, mderef);
15181 Size_t size = arg - arg_buf;
15183 if (maybe_aelemfast && action_count == 1)
15186 arg_buf = (UNOP_AUX_item*)PerlMemShared_malloc(
15187 sizeof(UNOP_AUX_item) * (size + 1));
15188 /* for dumping etc: store the length in a hidden first slot;
15189 * we set the op_aux pointer to the second slot */
15190 arg_buf->uv = size;
15193 } /* for (pass = ...) */
15196 /* See if the ops following o are such that o will always be executed in
15197 * boolean context: that is, the SV which o pushes onto the stack will
15198 * only ever be consumed by later ops via SvTRUE(sv) or similar.
15199 * If so, set a suitable private flag on o. Normally this will be
15200 * bool_flag; but see below why maybe_flag is needed too.
15202 * Typically the two flags you pass will be the generic OPpTRUEBOOL and
15203 * OPpMAYBE_TRUEBOOL, buts it's possible that for some ops those bits may
15204 * already be taken, so you'll have to give that op two different flags.
15206 * More explanation of 'maybe_flag' and 'safe_and' parameters.
15207 * The binary logical ops &&, ||, // (plus 'if' and 'unless' which use
15208 * those underlying ops) short-circuit, which means that rather than
15209 * necessarily returning a truth value, they may return the LH argument,
15210 * which may not be boolean. For example in $x = (keys %h || -1), keys
15211 * should return a key count rather than a boolean, even though its
15212 * sort-of being used in boolean context.
15214 * So we only consider such logical ops to provide boolean context to
15215 * their LH argument if they themselves are in void or boolean context.
15216 * However, sometimes the context isn't known until run-time. In this
15217 * case the op is marked with the maybe_flag flag it.
15219 * Consider the following.
15221 * sub f { ....; if (%h) { .... } }
15223 * This is actually compiled as
15225 * sub f { ....; %h && do { .... } }
15227 * Here we won't know until runtime whether the final statement (and hence
15228 * the &&) is in void context and so is safe to return a boolean value.
15229 * So mark o with maybe_flag rather than the bool_flag.
15230 * Note that there is cost associated with determining context at runtime
15231 * (e.g. a call to block_gimme()), so it may not be worth setting (at
15232 * compile time) and testing (at runtime) maybe_flag if the scalar verses
15233 * boolean costs savings are marginal.
15235 * However, we can do slightly better with && (compared to || and //):
15236 * this op only returns its LH argument when that argument is false. In
15237 * this case, as long as the op promises to return a false value which is
15238 * valid in both boolean and scalar contexts, we can mark an op consumed
15239 * by && with bool_flag rather than maybe_flag.
15240 * For example as long as pp_padhv and pp_rv2hv return &PL_sv_zero rather
15241 * than &PL_sv_no for a false result in boolean context, then it's safe. An
15242 * op which promises to handle this case is indicated by setting safe_and
15247 S_check_for_bool_cxt(OP*o, bool safe_and, U8 bool_flag, U8 maybe_flag)
15252 assert((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR);
15254 /* OPpTARGET_MY and boolean context probably don't mix well.
15255 * If someone finds a valid use case, maybe add an extra flag to this
15256 * function which indicates its safe to do so for this op? */
15257 assert(!( (PL_opargs[o->op_type] & OA_TARGLEX)
15258 && (o->op_private & OPpTARGET_MY)));
15263 switch (lop->op_type) {
15268 /* these two consume the stack argument in the scalar case,
15269 * and treat it as a boolean in the non linenumber case */
15272 if ( ((lop->op_flags & OPf_WANT) == OPf_WANT_LIST)
15273 || (lop->op_private & OPpFLIP_LINENUM))
15279 /* these never leave the original value on the stack */
15288 /* OR DOR and AND evaluate their arg as a boolean, but then may
15289 * leave the original scalar value on the stack when following the
15290 * op_next route. If not in void context, we need to ensure
15291 * that whatever follows consumes the arg only in boolean context
15303 if ((lop->op_flags & OPf_WANT) == OPf_WANT_VOID) {
15307 else if (!(lop->op_flags & OPf_WANT)) {
15308 /* unknown context - decide at runtime */
15320 lop = lop->op_next;
15323 o->op_private |= flag;
15328 /* mechanism for deferring recursion in rpeep() */
15330 #define MAX_DEFERRED 4
15334 if (defer_ix == (MAX_DEFERRED-1)) { \
15335 OP **defer = defer_queue[defer_base]; \
15336 CALL_RPEEP(*defer); \
15337 S_prune_chain_head(defer); \
15338 defer_base = (defer_base + 1) % MAX_DEFERRED; \
15341 defer_queue[(defer_base + ++defer_ix) % MAX_DEFERRED] = &(o); \
15344 #define IS_AND_OP(o) (o->op_type == OP_AND)
15345 #define IS_OR_OP(o) (o->op_type == OP_OR)
15348 /* A peephole optimizer. We visit the ops in the order they're to execute.
15349 * See the comments at the top of this file for more details about when
15350 * peep() is called */
15353 Perl_rpeep(pTHX_ OP *o)
15357 OP* oldoldop = NULL;
15358 OP** defer_queue[MAX_DEFERRED]; /* small queue of deferred branches */
15359 int defer_base = 0;
15362 if (!o || o->op_opt)
15365 assert(o->op_type != OP_FREED);
15369 SAVEVPTR(PL_curcop);
15370 for (;; o = o->op_next) {
15371 if (o && o->op_opt)
15374 while (defer_ix >= 0) {
15376 defer_queue[(defer_base + defer_ix--) % MAX_DEFERRED];
15377 CALL_RPEEP(*defer);
15378 S_prune_chain_head(defer);
15385 /* oldoldop -> oldop -> o should be a chain of 3 adjacent ops */
15386 assert(!oldoldop || oldoldop->op_next == oldop);
15387 assert(!oldop || oldop->op_next == o);
15389 /* By default, this op has now been optimised. A couple of cases below
15390 clear this again. */
15394 /* look for a series of 1 or more aggregate derefs, e.g.
15395 * $a[1]{foo}[$i]{$k}
15396 * and replace with a single OP_MULTIDEREF op.
15397 * Each index must be either a const, or a simple variable,
15399 * First, look for likely combinations of starting ops,
15400 * corresponding to (global and lexical variants of)
15402 * $r->[...] $r->{...}
15403 * (preceding expression)->[...]
15404 * (preceding expression)->{...}
15405 * and if so, call maybe_multideref() to do a full inspection
15406 * of the op chain and if appropriate, replace with an
15414 switch (o2->op_type) {
15416 /* $pkg[..] : gv[*pkg]
15417 * $pkg->[...]: gv[*pkg]; rv2sv sKM/DREFAV */
15419 /* Fail if there are new op flag combinations that we're
15420 * not aware of, rather than:
15421 * * silently failing to optimise, or
15422 * * silently optimising the flag away.
15423 * If this ASSUME starts failing, examine what new flag
15424 * has been added to the op, and decide whether the
15425 * optimisation should still occur with that flag, then
15426 * update the code accordingly. This applies to all the
15427 * other ASSUMEs in the block of code too.
15429 ASSUME(!(o2->op_flags &
15430 ~(OPf_WANT|OPf_MOD|OPf_PARENS|OPf_SPECIAL)));
15431 ASSUME(!(o2->op_private & ~OPpEARLY_CV));
15435 if (o2->op_type == OP_RV2AV) {
15436 action = MDEREF_AV_gvav_aelem;
15440 if (o2->op_type == OP_RV2HV) {
15441 action = MDEREF_HV_gvhv_helem;
15445 if (o2->op_type != OP_RV2SV)
15448 /* at this point we've seen gv,rv2sv, so the only valid
15449 * construct left is $pkg->[] or $pkg->{} */
15451 ASSUME(!(o2->op_flags & OPf_STACKED));
15452 if ((o2->op_flags & (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL))
15453 != (OPf_WANT_SCALAR|OPf_MOD))
15456 ASSUME(!(o2->op_private & ~(OPpARG1_MASK|HINT_STRICT_REFS
15457 |OPpOUR_INTRO|OPpDEREF|OPpLVAL_INTRO)));
15458 if (o2->op_private & (OPpOUR_INTRO|OPpLVAL_INTRO))
15460 if ( (o2->op_private & OPpDEREF) != OPpDEREF_AV
15461 && (o2->op_private & OPpDEREF) != OPpDEREF_HV)
15465 if (o2->op_type == OP_RV2AV) {
15466 action = MDEREF_AV_gvsv_vivify_rv2av_aelem;
15469 if (o2->op_type == OP_RV2HV) {
15470 action = MDEREF_HV_gvsv_vivify_rv2hv_helem;
15476 /* $lex->[...]: padsv[$lex] sM/DREFAV */
15478 ASSUME(!(o2->op_flags &
15479 ~(OPf_WANT|OPf_PARENS|OPf_REF|OPf_MOD|OPf_SPECIAL)));
15480 if ((o2->op_flags &
15481 (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL))
15482 != (OPf_WANT_SCALAR|OPf_MOD))
15485 ASSUME(!(o2->op_private &
15486 ~(OPpPAD_STATE|OPpDEREF|OPpLVAL_INTRO)));
15487 /* skip if state or intro, or not a deref */
15488 if ( o2->op_private != OPpDEREF_AV
15489 && o2->op_private != OPpDEREF_HV)
15493 if (o2->op_type == OP_RV2AV) {
15494 action = MDEREF_AV_padsv_vivify_rv2av_aelem;
15497 if (o2->op_type == OP_RV2HV) {
15498 action = MDEREF_HV_padsv_vivify_rv2hv_helem;
15505 /* $lex[..]: padav[@lex:1,2] sR *
15506 * or $lex{..}: padhv[%lex:1,2] sR */
15507 ASSUME(!(o2->op_flags & ~(OPf_WANT|OPf_MOD|OPf_PARENS|
15508 OPf_REF|OPf_SPECIAL)));
15509 if ((o2->op_flags &
15510 (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL))
15511 != (OPf_WANT_SCALAR|OPf_REF))
15513 if (o2->op_flags != (OPf_WANT_SCALAR|OPf_REF))
15515 /* OPf_PARENS isn't currently used in this case;
15516 * if that changes, let us know! */
15517 ASSUME(!(o2->op_flags & OPf_PARENS));
15519 /* at this point, we wouldn't expect any of the remaining
15520 * possible private flags:
15521 * OPpPAD_STATE, OPpLVAL_INTRO, OPpTRUEBOOL,
15522 * OPpMAYBE_TRUEBOOL, OPpMAYBE_LVSUB
15524 * OPpSLICEWARNING shouldn't affect runtime
15526 ASSUME(!(o2->op_private & ~(OPpSLICEWARNING)));
15528 action = o2->op_type == OP_PADAV
15529 ? MDEREF_AV_padav_aelem
15530 : MDEREF_HV_padhv_helem;
15532 S_maybe_multideref(aTHX_ o, o2, action, 0);
15538 action = o2->op_type == OP_RV2AV
15539 ? MDEREF_AV_pop_rv2av_aelem
15540 : MDEREF_HV_pop_rv2hv_helem;
15543 /* (expr)->[...]: rv2av sKR/1;
15544 * (expr)->{...}: rv2hv sKR/1; */
15546 ASSUME(o2->op_type == OP_RV2AV || o2->op_type == OP_RV2HV);
15548 ASSUME(!(o2->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
15549 |OPf_REF|OPf_MOD|OPf_STACKED|OPf_SPECIAL)));
15550 if (o2->op_flags != (OPf_WANT_SCALAR|OPf_KIDS|OPf_REF))
15553 /* at this point, we wouldn't expect any of these
15554 * possible private flags:
15555 * OPpMAYBE_LVSUB, OPpLVAL_INTRO
15556 * OPpTRUEBOOL, OPpMAYBE_TRUEBOOL, (rv2hv only)
15558 ASSUME(!(o2->op_private &
15559 ~(OPpHINT_STRICT_REFS|OPpARG1_MASK|OPpSLICEWARNING
15561 hints |= (o2->op_private & OPpHINT_STRICT_REFS);
15565 S_maybe_multideref(aTHX_ o, o2, action, hints);
15574 switch (o->op_type) {
15576 PL_curcop = ((COP*)o); /* for warnings */
15579 PL_curcop = ((COP*)o); /* for warnings */
15581 /* Optimise a "return ..." at the end of a sub to just be "...".
15582 * This saves 2 ops. Before:
15583 * 1 <;> nextstate(main 1 -e:1) v ->2
15584 * 4 <@> return K ->5
15585 * 2 <0> pushmark s ->3
15586 * - <1> ex-rv2sv sK/1 ->4
15587 * 3 <#> gvsv[*cat] s ->4
15590 * - <@> return K ->-
15591 * - <0> pushmark s ->2
15592 * - <1> ex-rv2sv sK/1 ->-
15593 * 2 <$> gvsv(*cat) s ->3
15596 OP *next = o->op_next;
15597 OP *sibling = OpSIBLING(o);
15598 if ( OP_TYPE_IS(next, OP_PUSHMARK)
15599 && OP_TYPE_IS(sibling, OP_RETURN)
15600 && OP_TYPE_IS(sibling->op_next, OP_LINESEQ)
15601 && ( OP_TYPE_IS(sibling->op_next->op_next, OP_LEAVESUB)
15602 ||OP_TYPE_IS(sibling->op_next->op_next,
15604 && cUNOPx(sibling)->op_first == next
15605 && OpHAS_SIBLING(next) && OpSIBLING(next)->op_next
15608 /* Look through the PUSHMARK's siblings for one that
15609 * points to the RETURN */
15610 OP *top = OpSIBLING(next);
15611 while (top && top->op_next) {
15612 if (top->op_next == sibling) {
15613 top->op_next = sibling->op_next;
15614 o->op_next = next->op_next;
15617 top = OpSIBLING(top);
15622 /* Optimise 'my $x; my $y;' into 'my ($x, $y);'
15624 * This latter form is then suitable for conversion into padrange
15625 * later on. Convert:
15627 * nextstate1 -> padop1 -> nextstate2 -> padop2 -> nextstate3
15631 * nextstate1 -> listop -> nextstate3
15633 * pushmark -> padop1 -> padop2
15635 if (o->op_next && (
15636 o->op_next->op_type == OP_PADSV
15637 || o->op_next->op_type == OP_PADAV
15638 || o->op_next->op_type == OP_PADHV
15640 && !(o->op_next->op_private & ~OPpLVAL_INTRO)
15641 && o->op_next->op_next && o->op_next->op_next->op_type == OP_NEXTSTATE
15642 && o->op_next->op_next->op_next && (
15643 o->op_next->op_next->op_next->op_type == OP_PADSV
15644 || o->op_next->op_next->op_next->op_type == OP_PADAV
15645 || o->op_next->op_next->op_next->op_type == OP_PADHV
15647 && !(o->op_next->op_next->op_next->op_private & ~OPpLVAL_INTRO)
15648 && o->op_next->op_next->op_next->op_next && o->op_next->op_next->op_next->op_next->op_type == OP_NEXTSTATE
15649 && (!CopLABEL((COP*)o)) /* Don't mess with labels */
15650 && (!CopLABEL((COP*)o->op_next->op_next)) /* ... */
15652 OP *pad1, *ns2, *pad2, *ns3, *newop, *newpm;
15655 ns2 = pad1->op_next;
15656 pad2 = ns2->op_next;
15657 ns3 = pad2->op_next;
15659 /* we assume here that the op_next chain is the same as
15660 * the op_sibling chain */
15661 assert(OpSIBLING(o) == pad1);
15662 assert(OpSIBLING(pad1) == ns2);
15663 assert(OpSIBLING(ns2) == pad2);
15664 assert(OpSIBLING(pad2) == ns3);
15666 /* excise and delete ns2 */
15667 op_sibling_splice(NULL, pad1, 1, NULL);
15670 /* excise pad1 and pad2 */
15671 op_sibling_splice(NULL, o, 2, NULL);
15673 /* create new listop, with children consisting of:
15674 * a new pushmark, pad1, pad2. */
15675 newop = newLISTOP(OP_LIST, 0, pad1, pad2);
15676 newop->op_flags |= OPf_PARENS;
15677 newop->op_flags = (newop->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
15679 /* insert newop between o and ns3 */
15680 op_sibling_splice(NULL, o, 0, newop);
15682 /*fixup op_next chain */
15683 newpm = cUNOPx(newop)->op_first; /* pushmark */
15684 o ->op_next = newpm;
15685 newpm->op_next = pad1;
15686 pad1 ->op_next = pad2;
15687 pad2 ->op_next = newop; /* listop */
15688 newop->op_next = ns3;
15690 /* Ensure pushmark has this flag if padops do */
15691 if (pad1->op_flags & OPf_MOD && pad2->op_flags & OPf_MOD) {
15692 newpm->op_flags |= OPf_MOD;
15698 /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
15699 to carry two labels. For now, take the easier option, and skip
15700 this optimisation if the first NEXTSTATE has a label. */
15701 if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) {
15702 OP *nextop = o->op_next;
15703 while (nextop && nextop->op_type == OP_NULL)
15704 nextop = nextop->op_next;
15706 if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
15709 oldop->op_next = nextop;
15711 /* Skip (old)oldop assignment since the current oldop's
15712 op_next already points to the next op. */
15719 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
15720 if (o->op_next->op_private & OPpTARGET_MY) {
15721 if (o->op_flags & OPf_STACKED) /* chained concats */
15722 break; /* ignore_optimization */
15724 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
15725 o->op_targ = o->op_next->op_targ;
15726 o->op_next->op_targ = 0;
15727 o->op_private |= OPpTARGET_MY;
15730 op_null(o->op_next);
15734 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
15735 break; /* Scalar stub must produce undef. List stub is noop */
15739 if (o->op_targ == OP_NEXTSTATE
15740 || o->op_targ == OP_DBSTATE)
15742 PL_curcop = ((COP*)o);
15744 /* XXX: We avoid setting op_seq here to prevent later calls
15745 to rpeep() from mistakenly concluding that optimisation
15746 has already occurred. This doesn't fix the real problem,
15747 though (See 20010220.007 (#5874)). AMS 20010719 */
15748 /* op_seq functionality is now replaced by op_opt */
15756 oldop->op_next = o->op_next;
15770 convert repeat into a stub with no kids.
15772 if (o->op_next->op_type == OP_CONST
15773 || ( o->op_next->op_type == OP_PADSV
15774 && !(o->op_next->op_private & OPpLVAL_INTRO))
15775 || ( o->op_next->op_type == OP_GV
15776 && o->op_next->op_next->op_type == OP_RV2SV
15777 && !(o->op_next->op_next->op_private
15778 & (OPpLVAL_INTRO|OPpOUR_INTRO))))
15780 const OP *kid = o->op_next->op_next;
15781 if (o->op_next->op_type == OP_GV)
15782 kid = kid->op_next;
15783 /* kid is now the ex-list. */
15784 if (kid->op_type == OP_NULL
15785 && (kid = kid->op_next)->op_type == OP_CONST
15786 /* kid is now the repeat count. */
15787 && kid->op_next->op_type == OP_REPEAT
15788 && kid->op_next->op_private & OPpREPEAT_DOLIST
15789 && (kid->op_next->op_flags & OPf_WANT) == OPf_WANT_LIST
15790 && SvIOK(kSVOP_sv) && SvIVX(kSVOP_sv) == 0
15793 o = kid->op_next; /* repeat */
15794 oldop->op_next = o;
15795 op_free(cBINOPo->op_first);
15796 op_free(cBINOPo->op_last );
15797 o->op_flags &=~ OPf_KIDS;
15798 /* stub is a baseop; repeat is a binop */
15799 STATIC_ASSERT_STMT(sizeof(OP) <= sizeof(BINOP));
15800 OpTYPE_set(o, OP_STUB);
15806 /* Convert a series of PAD ops for my vars plus support into a
15807 * single padrange op. Basically
15809 * pushmark -> pad[ahs]v -> pad[ahs]?v -> ... -> (list) -> rest
15811 * becomes, depending on circumstances, one of
15813 * padrange ----------------------------------> (list) -> rest
15814 * padrange --------------------------------------------> rest
15816 * where all the pad indexes are sequential and of the same type
15818 * We convert the pushmark into a padrange op, then skip
15819 * any other pad ops, and possibly some trailing ops.
15820 * Note that we don't null() the skipped ops, to make it
15821 * easier for Deparse to undo this optimisation (and none of
15822 * the skipped ops are holding any resourses). It also makes
15823 * it easier for find_uninit_var(), as it can just ignore
15824 * padrange, and examine the original pad ops.
15828 OP *followop = NULL; /* the op that will follow the padrange op */
15831 PADOFFSET base = 0; /* init only to stop compiler whining */
15832 bool gvoid = 0; /* init only to stop compiler whining */
15833 bool defav = 0; /* seen (...) = @_ */
15834 bool reuse = 0; /* reuse an existing padrange op */
15836 /* look for a pushmark -> gv[_] -> rv2av */
15841 if ( p->op_type == OP_GV
15842 && cGVOPx_gv(p) == PL_defgv
15843 && (rv2av = p->op_next)
15844 && rv2av->op_type == OP_RV2AV
15845 && !(rv2av->op_flags & OPf_REF)
15846 && !(rv2av->op_private & (OPpLVAL_INTRO|OPpMAYBE_LVSUB))
15847 && ((rv2av->op_flags & OPf_WANT) == OPf_WANT_LIST)
15849 q = rv2av->op_next;
15850 if (q->op_type == OP_NULL)
15852 if (q->op_type == OP_PUSHMARK) {
15862 /* scan for PAD ops */
15864 for (p = p->op_next; p; p = p->op_next) {
15865 if (p->op_type == OP_NULL)
15868 if (( p->op_type != OP_PADSV
15869 && p->op_type != OP_PADAV
15870 && p->op_type != OP_PADHV
15872 /* any private flag other than INTRO? e.g. STATE */
15873 || (p->op_private & ~OPpLVAL_INTRO)
15877 /* let $a[N] potentially be optimised into AELEMFAST_LEX
15879 if ( p->op_type == OP_PADAV
15881 && p->op_next->op_type == OP_CONST
15882 && p->op_next->op_next
15883 && p->op_next->op_next->op_type == OP_AELEM
15887 /* for 1st padop, note what type it is and the range
15888 * start; for the others, check that it's the same type
15889 * and that the targs are contiguous */
15891 intro = (p->op_private & OPpLVAL_INTRO);
15893 gvoid = OP_GIMME(p,0) == G_VOID;
15896 if ((p->op_private & OPpLVAL_INTRO) != intro)
15898 /* Note that you'd normally expect targs to be
15899 * contiguous in my($a,$b,$c), but that's not the case
15900 * when external modules start doing things, e.g.
15901 * Function::Parameters */
15902 if (p->op_targ != base + count)
15904 assert(p->op_targ == base + count);
15905 /* Either all the padops or none of the padops should
15906 be in void context. Since we only do the optimisa-
15907 tion for av/hv when the aggregate itself is pushed
15908 on to the stack (one item), there is no need to dis-
15909 tinguish list from scalar context. */
15910 if (gvoid != (OP_GIMME(p,0) == G_VOID))
15914 /* for AV, HV, only when we're not flattening */
15915 if ( p->op_type != OP_PADSV
15917 && !(p->op_flags & OPf_REF)
15921 if (count >= OPpPADRANGE_COUNTMASK)
15924 /* there's a biggest base we can fit into a
15925 * SAVEt_CLEARPADRANGE in pp_padrange.
15926 * (The sizeof() stuff will be constant-folded, and is
15927 * intended to avoid getting "comparison is always false"
15928 * compiler warnings. See the comments above
15929 * MEM_WRAP_CHECK for more explanation on why we do this
15930 * in a weird way to avoid compiler warnings.)
15933 && (8*sizeof(base) >
15934 8*sizeof(UV)-OPpPADRANGE_COUNTSHIFT-SAVE_TIGHT_SHIFT
15936 : (UV_MAX >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT))
15938 (UV_MAX >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT))
15942 /* Success! We've got another valid pad op to optimise away */
15944 followop = p->op_next;
15947 if (count < 1 || (count == 1 && !defav))
15950 /* pp_padrange in specifically compile-time void context
15951 * skips pushing a mark and lexicals; in all other contexts
15952 * (including unknown till runtime) it pushes a mark and the
15953 * lexicals. We must be very careful then, that the ops we
15954 * optimise away would have exactly the same effect as the
15956 * In particular in void context, we can only optimise to
15957 * a padrange if we see the complete sequence
15958 * pushmark, pad*v, ...., list
15959 * which has the net effect of leaving the markstack as it
15960 * was. Not pushing onto the stack (whereas padsv does touch
15961 * the stack) makes no difference in void context.
15965 if (followop->op_type == OP_LIST
15966 && OP_GIMME(followop,0) == G_VOID
15969 followop = followop->op_next; /* skip OP_LIST */
15971 /* consolidate two successive my(...);'s */
15974 && oldoldop->op_type == OP_PADRANGE
15975 && (oldoldop->op_flags & OPf_WANT) == OPf_WANT_VOID
15976 && (oldoldop->op_private & OPpLVAL_INTRO) == intro
15977 && !(oldoldop->op_flags & OPf_SPECIAL)
15980 assert(oldoldop->op_next == oldop);
15981 assert( oldop->op_type == OP_NEXTSTATE
15982 || oldop->op_type == OP_DBSTATE);
15983 assert(oldop->op_next == o);
15986 = (oldoldop->op_private & OPpPADRANGE_COUNTMASK);
15988 /* Do not assume pad offsets for $c and $d are con-
15993 if ( oldoldop->op_targ + old_count == base
15994 && old_count < OPpPADRANGE_COUNTMASK - count) {
15995 base = oldoldop->op_targ;
15996 count += old_count;
16001 /* if there's any immediately following singleton
16002 * my var's; then swallow them and the associated
16004 * my ($a,$b); my $c; my $d;
16006 * my ($a,$b,$c,$d);
16009 while ( ((p = followop->op_next))
16010 && ( p->op_type == OP_PADSV
16011 || p->op_type == OP_PADAV
16012 || p->op_type == OP_PADHV)
16013 && (p->op_flags & OPf_WANT) == OPf_WANT_VOID
16014 && (p->op_private & OPpLVAL_INTRO) == intro
16015 && !(p->op_private & ~OPpLVAL_INTRO)
16017 && ( p->op_next->op_type == OP_NEXTSTATE
16018 || p->op_next->op_type == OP_DBSTATE)
16019 && count < OPpPADRANGE_COUNTMASK
16020 && base + count == p->op_targ
16023 followop = p->op_next;
16031 assert(oldoldop->op_type == OP_PADRANGE);
16032 oldoldop->op_next = followop;
16033 oldoldop->op_private = (intro | count);
16039 /* Convert the pushmark into a padrange.
16040 * To make Deparse easier, we guarantee that a padrange was
16041 * *always* formerly a pushmark */
16042 assert(o->op_type == OP_PUSHMARK);
16043 o->op_next = followop;
16044 OpTYPE_set(o, OP_PADRANGE);
16046 /* bit 7: INTRO; bit 6..0: count */
16047 o->op_private = (intro | count);
16048 o->op_flags = ((o->op_flags & ~(OPf_WANT|OPf_SPECIAL))
16049 | gvoid * OPf_WANT_VOID
16050 | (defav ? OPf_SPECIAL : 0));
16056 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
16057 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0);
16062 /*'keys %h' in void or scalar context: skip the OP_KEYS
16063 * and perform the functionality directly in the RV2HV/PADHV
16066 if (o->op_flags & OPf_REF) {
16067 OP *k = o->op_next;
16068 U8 want = (k->op_flags & OPf_WANT);
16070 && k->op_type == OP_KEYS
16071 && ( want == OPf_WANT_VOID
16072 || want == OPf_WANT_SCALAR)
16073 && !(k->op_private & OPpMAYBE_LVSUB)
16074 && !(k->op_flags & OPf_MOD)
16076 o->op_next = k->op_next;
16077 o->op_flags &= ~(OPf_REF|OPf_WANT);
16078 o->op_flags |= want;
16079 o->op_private |= (o->op_type == OP_PADHV ?
16080 OPpPADHV_ISKEYS : OPpRV2HV_ISKEYS);
16081 /* for keys(%lex), hold onto the OP_KEYS's targ
16082 * since padhv doesn't have its own targ to return
16084 if (!(o->op_type ==OP_PADHV && want == OPf_WANT_SCALAR))
16089 /* see if %h is used in boolean context */
16090 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
16091 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, OPpMAYBE_TRUEBOOL);
16094 if (o->op_type != OP_PADHV)
16098 if ( o->op_type == OP_PADAV
16099 && (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR
16101 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0);
16104 /* Skip over state($x) in void context. */
16105 if (oldop && o->op_private == (OPpPAD_STATE|OPpLVAL_INTRO)
16106 && (o->op_flags & OPf_WANT) == OPf_WANT_VOID)
16108 oldop->op_next = o->op_next;
16109 goto redo_nextstate;
16111 if (o->op_type != OP_PADAV)
16115 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
16116 OP* const pop = (o->op_type == OP_PADAV) ?
16117 o->op_next : o->op_next->op_next;
16119 if (pop && pop->op_type == OP_CONST &&
16120 ((PL_op = pop->op_next)) &&
16121 pop->op_next->op_type == OP_AELEM &&
16122 !(pop->op_next->op_private &
16123 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
16124 (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
16127 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
16128 no_bareword_allowed(pop);
16129 if (o->op_type == OP_GV)
16130 op_null(o->op_next);
16131 op_null(pop->op_next);
16133 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
16134 o->op_next = pop->op_next->op_next;
16135 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
16136 o->op_private = (U8)i;
16137 if (o->op_type == OP_GV) {
16140 o->op_type = OP_AELEMFAST;
16143 o->op_type = OP_AELEMFAST_LEX;
16145 if (o->op_type != OP_GV)
16149 /* Remove $foo from the op_next chain in void context. */
16151 && ( o->op_next->op_type == OP_RV2SV
16152 || o->op_next->op_type == OP_RV2AV
16153 || o->op_next->op_type == OP_RV2HV )
16154 && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID
16155 && !(o->op_next->op_private & OPpLVAL_INTRO))
16157 oldop->op_next = o->op_next->op_next;
16158 /* Reprocess the previous op if it is a nextstate, to
16159 allow double-nextstate optimisation. */
16161 if (oldop->op_type == OP_NEXTSTATE) {
16168 o = oldop->op_next;
16171 else if (o->op_next->op_type == OP_RV2SV) {
16172 if (!(o->op_next->op_private & OPpDEREF)) {
16173 op_null(o->op_next);
16174 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
16176 o->op_next = o->op_next->op_next;
16177 OpTYPE_set(o, OP_GVSV);
16180 else if (o->op_next->op_type == OP_READLINE
16181 && o->op_next->op_next->op_type == OP_CONCAT
16182 && (o->op_next->op_next->op_flags & OPf_STACKED))
16184 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
16185 OpTYPE_set(o, OP_RCATLINE);
16186 o->op_flags |= OPf_STACKED;
16187 op_null(o->op_next->op_next);
16188 op_null(o->op_next);
16199 while (cLOGOP->op_other->op_type == OP_NULL)
16200 cLOGOP->op_other = cLOGOP->op_other->op_next;
16201 while (o->op_next && ( o->op_type == o->op_next->op_type
16202 || o->op_next->op_type == OP_NULL))
16203 o->op_next = o->op_next->op_next;
16205 /* If we're an OR and our next is an AND in void context, we'll
16206 follow its op_other on short circuit, same for reverse.
16207 We can't do this with OP_DOR since if it's true, its return
16208 value is the underlying value which must be evaluated
16212 (IS_AND_OP(o) && IS_OR_OP(o->op_next))
16213 || (IS_OR_OP(o) && IS_AND_OP(o->op_next))
16215 && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID
16217 o->op_next = ((LOGOP*)o->op_next)->op_other;
16219 DEFER(cLOGOP->op_other);
16224 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
16225 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0);
16234 case OP_ARGDEFELEM:
16235 while (cLOGOP->op_other->op_type == OP_NULL)
16236 cLOGOP->op_other = cLOGOP->op_other->op_next;
16237 DEFER(cLOGOP->op_other);
16242 while (cLOOP->op_redoop->op_type == OP_NULL)
16243 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
16244 while (cLOOP->op_nextop->op_type == OP_NULL)
16245 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
16246 while (cLOOP->op_lastop->op_type == OP_NULL)
16247 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
16248 /* a while(1) loop doesn't have an op_next that escapes the
16249 * loop, so we have to explicitly follow the op_lastop to
16250 * process the rest of the code */
16251 DEFER(cLOOP->op_lastop);
16255 assert(cLOGOPo->op_other->op_type == OP_LEAVETRY);
16256 DEFER(cLOGOPo->op_other);
16260 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
16261 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0);
16262 assert(!(cPMOP->op_pmflags & PMf_ONCE));
16263 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
16264 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
16265 cPMOP->op_pmstashstartu.op_pmreplstart
16266 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
16267 DEFER(cPMOP->op_pmstashstartu.op_pmreplstart);
16273 if (o->op_flags & OPf_SPECIAL) {
16274 /* first arg is a code block */
16275 OP * const nullop = OpSIBLING(cLISTOP->op_first);
16276 OP * kid = cUNOPx(nullop)->op_first;
16278 assert(nullop->op_type == OP_NULL);
16279 assert(kid->op_type == OP_SCOPE
16280 || (kid->op_type == OP_NULL && kid->op_targ == OP_LEAVE));
16281 /* since OP_SORT doesn't have a handy op_other-style
16282 * field that can point directly to the start of the code
16283 * block, store it in the otherwise-unused op_next field
16284 * of the top-level OP_NULL. This will be quicker at
16285 * run-time, and it will also allow us to remove leading
16286 * OP_NULLs by just messing with op_nexts without
16287 * altering the basic op_first/op_sibling layout. */
16288 kid = kLISTOP->op_first;
16290 (kid->op_type == OP_NULL
16291 && ( kid->op_targ == OP_NEXTSTATE
16292 || kid->op_targ == OP_DBSTATE ))
16293 || kid->op_type == OP_STUB
16294 || kid->op_type == OP_ENTER
16295 || (PL_parser && PL_parser->error_count));
16296 nullop->op_next = kid->op_next;
16297 DEFER(nullop->op_next);
16300 /* check that RHS of sort is a single plain array */
16301 oright = cUNOPo->op_first;
16302 if (!oright || oright->op_type != OP_PUSHMARK)
16305 if (o->op_private & OPpSORT_INPLACE)
16308 /* reverse sort ... can be optimised. */
16309 if (!OpHAS_SIBLING(cUNOPo)) {
16310 /* Nothing follows us on the list. */
16311 OP * const reverse = o->op_next;
16313 if (reverse->op_type == OP_REVERSE &&
16314 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
16315 OP * const pushmark = cUNOPx(reverse)->op_first;
16316 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
16317 && (OpSIBLING(cUNOPx(pushmark)) == o)) {
16318 /* reverse -> pushmark -> sort */
16319 o->op_private |= OPpSORT_REVERSE;
16321 pushmark->op_next = oright->op_next;
16331 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
16333 LISTOP *enter, *exlist;
16335 if (o->op_private & OPpSORT_INPLACE)
16338 enter = (LISTOP *) o->op_next;
16341 if (enter->op_type == OP_NULL) {
16342 enter = (LISTOP *) enter->op_next;
16346 /* for $a (...) will have OP_GV then OP_RV2GV here.
16347 for (...) just has an OP_GV. */
16348 if (enter->op_type == OP_GV) {
16349 gvop = (OP *) enter;
16350 enter = (LISTOP *) enter->op_next;
16353 if (enter->op_type == OP_RV2GV) {
16354 enter = (LISTOP *) enter->op_next;
16360 if (enter->op_type != OP_ENTERITER)
16363 iter = enter->op_next;
16364 if (!iter || iter->op_type != OP_ITER)
16367 expushmark = enter->op_first;
16368 if (!expushmark || expushmark->op_type != OP_NULL
16369 || expushmark->op_targ != OP_PUSHMARK)
16372 exlist = (LISTOP *) OpSIBLING(expushmark);
16373 if (!exlist || exlist->op_type != OP_NULL
16374 || exlist->op_targ != OP_LIST)
16377 if (exlist->op_last != o) {
16378 /* Mmm. Was expecting to point back to this op. */
16381 theirmark = exlist->op_first;
16382 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
16385 if (OpSIBLING(theirmark) != o) {
16386 /* There's something between the mark and the reverse, eg
16387 for (1, reverse (...))
16392 ourmark = ((LISTOP *)o)->op_first;
16393 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
16396 ourlast = ((LISTOP *)o)->op_last;
16397 if (!ourlast || ourlast->op_next != o)
16400 rv2av = OpSIBLING(ourmark);
16401 if (rv2av && rv2av->op_type == OP_RV2AV && !OpHAS_SIBLING(rv2av)
16402 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
16403 /* We're just reversing a single array. */
16404 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
16405 enter->op_flags |= OPf_STACKED;
16408 /* We don't have control over who points to theirmark, so sacrifice
16410 theirmark->op_next = ourmark->op_next;
16411 theirmark->op_flags = ourmark->op_flags;
16412 ourlast->op_next = gvop ? gvop : (OP *) enter;
16415 enter->op_private |= OPpITER_REVERSED;
16416 iter->op_private |= OPpITER_REVERSED;
16420 o = oldop->op_next;
16422 NOT_REACHED; /* NOTREACHED */
16428 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
16429 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
16434 if (!(o->op_private & OPpOFFBYONE) && !CvCLONE(PL_compcv)
16435 && (!CvANON(PL_compcv) || (!PL_cv_has_eval && !PL_perldb)))
16438 if (CvEVAL(PL_compcv)) sv = &PL_sv_undef;
16440 sv = newRV((SV *)PL_compcv);
16444 OpTYPE_set(o, OP_CONST);
16445 o->op_flags |= OPf_SPECIAL;
16446 cSVOPo->op_sv = sv;
16451 if (OP_GIMME(o,0) == G_VOID
16452 || ( o->op_next->op_type == OP_LINESEQ
16453 && ( o->op_next->op_next->op_type == OP_LEAVESUB
16454 || ( o->op_next->op_next->op_type == OP_RETURN
16455 && !CvLVALUE(PL_compcv)))))
16457 OP *right = cBINOP->op_first;
16476 OP *left = OpSIBLING(right);
16477 if (left->op_type == OP_SUBSTR
16478 && (left->op_private & 7) < 4) {
16480 /* cut out right */
16481 op_sibling_splice(o, NULL, 1, NULL);
16482 /* and insert it as second child of OP_SUBSTR */
16483 op_sibling_splice(left, cBINOPx(left)->op_first, 0,
16485 left->op_private |= OPpSUBSTR_REPL_FIRST;
16487 (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
16494 int l, r, lr, lscalars, rscalars;
16496 /* handle common vars detection, e.g. ($a,$b) = ($b,$a).
16497 Note that we do this now rather than in newASSIGNOP(),
16498 since only by now are aliased lexicals flagged as such
16500 See the essay "Common vars in list assignment" above for
16501 the full details of the rationale behind all the conditions
16504 PL_generation sorcery:
16505 To detect whether there are common vars, the global var
16506 PL_generation is incremented for each assign op we scan.
16507 Then we run through all the lexical variables on the LHS,
16508 of the assignment, setting a spare slot in each of them to
16509 PL_generation. Then we scan the RHS, and if any lexicals
16510 already have that value, we know we've got commonality.
16511 Also, if the generation number is already set to
16512 PERL_INT_MAX, then the variable is involved in aliasing, so
16513 we also have potential commonality in that case.
16519 l = S_aassign_scan(aTHX_ cLISTOPo->op_last, FALSE, 1, &lscalars);
16522 r = S_aassign_scan(aTHX_ cLISTOPo->op_first, TRUE, 1, &rscalars);
16526 /* After looking for things which are *always* safe, this main
16527 * if/else chain selects primarily based on the type of the
16528 * LHS, gradually working its way down from the more dangerous
16529 * to the more restrictive and thus safer cases */
16531 if ( !l /* () = ....; */
16532 || !r /* .... = (); */
16533 || !(l & ~AAS_SAFE_SCALAR) /* (undef, pos()) = ...; */
16534 || !(r & ~AAS_SAFE_SCALAR) /* ... = (1,2,length,undef); */
16535 || (lscalars < 2) /* ($x, undef) = ... */
16537 NOOP; /* always safe */
16539 else if (l & AAS_DANGEROUS) {
16540 /* always dangerous */
16541 o->op_private |= OPpASSIGN_COMMON_SCALAR;
16542 o->op_private |= OPpASSIGN_COMMON_AGG;
16544 else if (l & (AAS_PKG_SCALAR|AAS_PKG_AGG)) {
16545 /* package vars are always dangerous - too many
16546 * aliasing possibilities */
16547 if (l & AAS_PKG_SCALAR)
16548 o->op_private |= OPpASSIGN_COMMON_SCALAR;
16549 if (l & AAS_PKG_AGG)
16550 o->op_private |= OPpASSIGN_COMMON_AGG;
16552 else if (l & ( AAS_MY_SCALAR|AAS_MY_AGG
16553 |AAS_LEX_SCALAR|AAS_LEX_AGG))
16555 /* LHS contains only lexicals and safe ops */
16557 if (l & (AAS_MY_AGG|AAS_LEX_AGG))
16558 o->op_private |= OPpASSIGN_COMMON_AGG;
16560 if (l & (AAS_MY_SCALAR|AAS_LEX_SCALAR)) {
16561 if (lr & AAS_LEX_SCALAR_COMM)
16562 o->op_private |= OPpASSIGN_COMMON_SCALAR;
16563 else if ( !(l & AAS_LEX_SCALAR)
16564 && (r & AAS_DEFAV))
16568 * as scalar-safe for performance reasons.
16569 * (it will still have been marked _AGG if necessary */
16572 else if (r & (AAS_PKG_SCALAR|AAS_PKG_AGG|AAS_DANGEROUS))
16573 /* if there are only lexicals on the LHS and no
16574 * common ones on the RHS, then we assume that the
16575 * only way those lexicals could also get
16576 * on the RHS is via some sort of dereffing or
16579 * ($lex, $x) = (1, $$r)
16580 * and in this case we assume the var must have
16581 * a bumped ref count. So if its ref count is 1,
16582 * it must only be on the LHS.
16584 o->op_private |= OPpASSIGN_COMMON_RC1;
16589 * may have to handle aggregate on LHS, but we can't
16590 * have common scalars. */
16593 ~(OPpASSIGN_COMMON_SCALAR|OPpASSIGN_COMMON_RC1);
16595 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
16596 S_check_for_bool_cxt(o, 1, OPpASSIGN_TRUEBOOL, 0);
16601 /* see if ref() is used in boolean context */
16602 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
16603 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, OPpMAYBE_TRUEBOOL);
16607 /* see if the op is used in known boolean context,
16608 * but not if OA_TARGLEX optimisation is enabled */
16609 if ( (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR
16610 && !(o->op_private & OPpTARGET_MY)
16612 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0);
16616 /* see if the op is used in known boolean context */
16617 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
16618 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0);
16622 Perl_cpeep_t cpeep =
16623 XopENTRYCUSTOM(o, xop_peep);
16625 cpeep(aTHX_ o, oldop);
16630 /* did we just null the current op? If so, re-process it to handle
16631 * eliding "empty" ops from the chain */
16632 if (o->op_type == OP_NULL && oldop && oldop->op_next == o) {
16645 Perl_peep(pTHX_ OP *o)
16651 =head1 Custom Operators
16653 =for apidoc Ao||custom_op_xop
16654 Return the XOP structure for a given custom op. This macro should be
16655 considered internal to C<OP_NAME> and the other access macros: use them instead.
16656 This macro does call a function. Prior
16657 to 5.19.6, this was implemented as a
16664 /* use PERL_MAGIC_ext to call a function to free the xop structure when
16665 * freeing PL_custom_ops */
16668 custom_op_register_free(pTHX_ SV *sv, MAGIC *mg)
16672 PERL_UNUSED_ARG(mg);
16673 xop = INT2PTR(XOP *, SvIV(sv));
16674 Safefree(xop->xop_name);
16675 Safefree(xop->xop_desc);
16681 static const MGVTBL custom_op_register_vtbl = {
16686 custom_op_register_free, /* free */
16696 Perl_custom_op_get_field(pTHX_ const OP *o, const xop_flags_enum field)
16702 static const XOP xop_null = { 0, 0, 0, 0, 0 };
16704 PERL_ARGS_ASSERT_CUSTOM_OP_GET_FIELD;
16705 assert(o->op_type == OP_CUSTOM);
16707 /* This is wrong. It assumes a function pointer can be cast to IV,
16708 * which isn't guaranteed, but this is what the old custom OP code
16709 * did. In principle it should be safer to Copy the bytes of the
16710 * pointer into a PV: since the new interface is hidden behind
16711 * functions, this can be changed later if necessary. */
16712 /* Change custom_op_xop if this ever happens */
16713 keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
16716 he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0);
16718 /* See if the op isn't registered, but its name *is* registered.
16719 * That implies someone is using the pre-5.14 API,where only name and
16720 * description could be registered. If so, fake up a real
16722 * We only check for an existing name, and assume no one will have
16723 * just registered a desc */
16724 if (!he && PL_custom_op_names &&
16725 (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0))
16730 /* XXX does all this need to be shared mem? */
16731 Newxz(xop, 1, XOP);
16732 pv = SvPV(HeVAL(he), l);
16733 XopENTRY_set(xop, xop_name, savepvn(pv, l));
16734 if (PL_custom_op_descs &&
16735 (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0))
16737 pv = SvPV(HeVAL(he), l);
16738 XopENTRY_set(xop, xop_desc, savepvn(pv, l));
16740 Perl_custom_op_register(aTHX_ o->op_ppaddr, xop);
16741 he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0);
16742 /* add magic to the SV so that the xop struct (pointed to by
16743 * SvIV(sv)) is freed. Normally a static xop is registered, but
16744 * for this backcompat hack, we've alloced one */
16745 (void)sv_magicext(HeVAL(he), NULL, PERL_MAGIC_ext,
16746 &custom_op_register_vtbl, NULL, 0);
16751 xop = (XOP *)&xop_null;
16753 xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
16757 if(field == XOPe_xop_ptr) {
16760 const U32 flags = XopFLAGS(xop);
16761 if(flags & field) {
16763 case XOPe_xop_name:
16764 any.xop_name = xop->xop_name;
16766 case XOPe_xop_desc:
16767 any.xop_desc = xop->xop_desc;
16769 case XOPe_xop_class:
16770 any.xop_class = xop->xop_class;
16772 case XOPe_xop_peep:
16773 any.xop_peep = xop->xop_peep;
16776 NOT_REACHED; /* NOTREACHED */
16781 case XOPe_xop_name:
16782 any.xop_name = XOPd_xop_name;
16784 case XOPe_xop_desc:
16785 any.xop_desc = XOPd_xop_desc;
16787 case XOPe_xop_class:
16788 any.xop_class = XOPd_xop_class;
16790 case XOPe_xop_peep:
16791 any.xop_peep = XOPd_xop_peep;
16794 NOT_REACHED; /* NOTREACHED */
16799 /* On some platforms (HP-UX, IA64) gcc emits a warning for this function:
16800 * op.c: In function 'Perl_custom_op_get_field':
16801 * op.c:...: warning: 'any.xop_name' may be used uninitialized in this function [-Wmaybe-uninitialized]
16802 * This is because on those platforms (with -DEBUGGING) NOT_REACHED
16803 * expands to assert(0), which expands to ((0) ? (void)0 :
16804 * __assert(...)), and gcc doesn't know that __assert can never return. */
16810 =for apidoc Ao||custom_op_register
16811 Register a custom op. See L<perlguts/"Custom Operators">.
16817 Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
16821 PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER;
16823 /* see the comment in custom_op_xop */
16824 keysv = sv_2mortal(newSViv(PTR2IV(ppaddr)));
16826 if (!PL_custom_ops)
16827 PL_custom_ops = newHV();
16829 if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0))
16830 Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name);
16835 =for apidoc core_prototype
16837 This function assigns the prototype of the named core function to C<sv>, or
16838 to a new mortal SV if C<sv> is C<NULL>. It returns the modified C<sv>, or
16839 C<NULL> if the core function has no prototype. C<code> is a code as returned
16840 by C<keyword()>. It must not be equal to 0.
16846 Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code,
16849 int i = 0, n = 0, seen_question = 0, defgv = 0;
16851 #define MAX_ARGS_OP ((sizeof(I32) - 1) * 2)
16852 char str[ MAX_ARGS_OP * 2 + 2 ]; /* One ';', one '\0' */
16853 bool nullret = FALSE;
16855 PERL_ARGS_ASSERT_CORE_PROTOTYPE;
16859 if (!sv) sv = sv_newmortal();
16861 #define retsetpvs(x,y) sv_setpvs(sv, x); if(opnum) *opnum=(y); return sv
16863 switch (code < 0 ? -code : code) {
16864 case KEY_and : case KEY_chop: case KEY_chomp:
16865 case KEY_cmp : case KEY_defined: case KEY_delete: case KEY_exec :
16866 case KEY_exists: case KEY_eq : case KEY_ge : case KEY_goto :
16867 case KEY_grep : case KEY_gt : case KEY_last : case KEY_le :
16868 case KEY_lt : case KEY_map : case KEY_ne : case KEY_next :
16869 case KEY_or : case KEY_print : case KEY_printf: case KEY_qr :
16870 case KEY_redo : case KEY_require: case KEY_return: case KEY_say :
16871 case KEY_select: case KEY_sort : case KEY_split : case KEY_system:
16872 case KEY_x : case KEY_xor :
16873 if (!opnum) return NULL; nullret = TRUE; goto findopnum;
16874 case KEY_glob: retsetpvs("_;", OP_GLOB);
16875 case KEY_keys: retsetpvs("\\[%@]", OP_KEYS);
16876 case KEY_values: retsetpvs("\\[%@]", OP_VALUES);
16877 case KEY_each: retsetpvs("\\[%@]", OP_EACH);
16878 case KEY_pos: retsetpvs(";\\[$*]", OP_POS);
16879 case KEY___FILE__: case KEY___LINE__: case KEY___PACKAGE__:
16881 case KEY_evalbytes:
16882 name = "entereval"; break;
16890 while (i < MAXO) { /* The slow way. */
16891 if (strEQ(name, PL_op_name[i])
16892 || strEQ(name, PL_op_desc[i]))
16894 if (nullret) { assert(opnum); *opnum = i; return NULL; }
16901 defgv = PL_opargs[i] & OA_DEFGV;
16902 oa = PL_opargs[i] >> OASHIFT;
16904 if (oa & OA_OPTIONAL && !seen_question && (
16905 !defgv || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF
16910 if ((oa & (OA_OPTIONAL - 1)) >= OA_AVREF
16911 && (oa & (OA_OPTIONAL - 1)) <= OA_SCALARREF
16912 /* But globs are already references (kinda) */
16913 && (oa & (OA_OPTIONAL - 1)) != OA_FILEREF
16917 if ((oa & (OA_OPTIONAL - 1)) == OA_SCALARREF
16918 && !scalar_mod_type(NULL, i)) {
16923 if (i == OP_LOCK || i == OP_UNDEF) str[n++] = '&';
16927 else str[n++] = ("?$@@%&*$")[oa & (OA_OPTIONAL - 1)];
16928 if (oa & OA_OPTIONAL && defgv && str[n-1] == '$') {
16929 str[n-1] = '_'; defgv = 0;
16933 if (code == -KEY_not || code == -KEY_getprotobynumber) str[n++] = ';';
16935 sv_setpvn(sv, str, n - 1);
16936 if (opnum) *opnum = i;
16941 Perl_coresub_op(pTHX_ SV * const coreargssv, const int code,
16944 OP * const argop = (opnum == OP_SELECT && code) ? NULL :
16945 newSVOP(OP_COREARGS,0,coreargssv);
16948 PERL_ARGS_ASSERT_CORESUB_OP;
16952 return op_append_elem(OP_LINESEQ,
16955 newSVOP(OP_CONST, 0, newSViv(-code % 3)),
16962 o = newUNOP(OP_AVHVSWITCH,0,argop);
16963 o->op_private = opnum-OP_EACH;
16965 case OP_SELECT: /* which represents OP_SSELECT as well */
16970 newAVREF(newGVOP(OP_GV, 0, PL_defgv)),
16971 newSVOP(OP_CONST, 0, newSVuv(1))
16973 coresub_op(newSVuv((UV)OP_SSELECT), 0,
16975 coresub_op(coreargssv, 0, OP_SELECT)
16979 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
16981 return op_append_elem(
16984 opnum == OP_WANTARRAY || opnum == OP_RUNCV
16985 ? OPpOFFBYONE << 8 : 0)
16987 case OA_BASEOP_OR_UNOP:
16988 if (opnum == OP_ENTEREVAL) {
16989 o = newUNOP(OP_ENTEREVAL,OPpEVAL_COPHH<<8,argop);
16990 if (code == -KEY_evalbytes) o->op_private |= OPpEVAL_BYTES;
16992 else o = newUNOP(opnum,0,argop);
16993 if (opnum == OP_CALLER) o->op_private |= OPpOFFBYONE;
16996 if (is_handle_constructor(o, 1))
16997 argop->op_private |= OPpCOREARGS_DEREF1;
16998 if (scalar_mod_type(NULL, opnum))
16999 argop->op_private |= OPpCOREARGS_SCALARMOD;
17003 o = op_convert_list(opnum,OPf_SPECIAL*(opnum == OP_GLOB),argop);
17004 if (is_handle_constructor(o, 2))
17005 argop->op_private |= OPpCOREARGS_DEREF2;
17006 if (opnum == OP_SUBSTR) {
17007 o->op_private |= OPpMAYBE_LVSUB;
17016 Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv,
17017 SV * const *new_const_svp)
17019 const char *hvname;
17020 bool is_const = !!CvCONST(old_cv);
17021 SV *old_const_sv = is_const ? cv_const_sv(old_cv) : NULL;
17023 PERL_ARGS_ASSERT_REPORT_REDEFINED_CV;
17025 if (is_const && new_const_svp && old_const_sv == *new_const_svp)
17027 /* They are 2 constant subroutines generated from
17028 the same constant. This probably means that
17029 they are really the "same" proxy subroutine
17030 instantiated in 2 places. Most likely this is
17031 when a constant is exported twice. Don't warn.
17034 (ckWARN(WARN_REDEFINE)
17036 CvGV(old_cv) && GvSTASH(CvGV(old_cv))
17037 && HvNAMELEN(GvSTASH(CvGV(old_cv))) == 7
17038 && (hvname = HvNAME(GvSTASH(CvGV(old_cv))),
17039 strEQ(hvname, "autouse"))
17043 && ckWARN_d(WARN_REDEFINE)
17044 && (!new_const_svp || sv_cmp(old_const_sv, *new_const_svp))
17047 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
17049 ? "Constant subroutine %" SVf " redefined"
17050 : "Subroutine %" SVf " redefined",
17055 =head1 Hook manipulation
17057 These functions provide convenient and thread-safe means of manipulating
17064 =for apidoc Am|void|wrap_op_checker|Optype opcode|Perl_check_t new_checker|Perl_check_t *old_checker_p
17066 Puts a C function into the chain of check functions for a specified op
17067 type. This is the preferred way to manipulate the L</PL_check> array.
17068 C<opcode> specifies which type of op is to be affected. C<new_checker>
17069 is a pointer to the C function that is to be added to that opcode's
17070 check chain, and C<old_checker_p> points to the storage location where a
17071 pointer to the next function in the chain will be stored. The value of
17072 C<new_checker> is written into the L</PL_check> array, while the value
17073 previously stored there is written to C<*old_checker_p>.
17075 L</PL_check> is global to an entire process, and a module wishing to
17076 hook op checking may find itself invoked more than once per process,
17077 typically in different threads. To handle that situation, this function
17078 is idempotent. The location C<*old_checker_p> must initially (once
17079 per process) contain a null pointer. A C variable of static duration
17080 (declared at file scope, typically also marked C<static> to give
17081 it internal linkage) will be implicitly initialised appropriately,
17082 if it does not have an explicit initialiser. This function will only
17083 actually modify the check chain if it finds C<*old_checker_p> to be null.
17084 This function is also thread safe on the small scale. It uses appropriate
17085 locking to avoid race conditions in accessing L</PL_check>.
17087 When this function is called, the function referenced by C<new_checker>
17088 must be ready to be called, except for C<*old_checker_p> being unfilled.
17089 In a threading situation, C<new_checker> may be called immediately,
17090 even before this function has returned. C<*old_checker_p> will always
17091 be appropriately set before C<new_checker> is called. If C<new_checker>
17092 decides not to do anything special with an op that it is given (which
17093 is the usual case for most uses of op check hooking), it must chain the
17094 check function referenced by C<*old_checker_p>.
17096 Taken all together, XS code to hook an op checker should typically look
17097 something like this:
17099 static Perl_check_t nxck_frob;
17100 static OP *myck_frob(pTHX_ OP *op) {
17102 op = nxck_frob(aTHX_ op);
17107 wrap_op_checker(OP_FROB, myck_frob, &nxck_frob);
17109 If you want to influence compilation of calls to a specific subroutine,
17110 then use L</cv_set_call_checker_flags> rather than hooking checking of
17111 all C<entersub> ops.
17117 Perl_wrap_op_checker(pTHX_ Optype opcode,
17118 Perl_check_t new_checker, Perl_check_t *old_checker_p)
17122 PERL_UNUSED_CONTEXT;
17123 PERL_ARGS_ASSERT_WRAP_OP_CHECKER;
17124 if (*old_checker_p) return;
17125 OP_CHECK_MUTEX_LOCK;
17126 if (!*old_checker_p) {
17127 *old_checker_p = PL_check[opcode];
17128 PL_check[opcode] = new_checker;
17130 OP_CHECK_MUTEX_UNLOCK;
17135 /* Efficient sub that returns a constant scalar value. */
17137 const_sv_xsub(pTHX_ CV* cv)
17140 SV *const sv = MUTABLE_SV(XSANY.any_ptr);
17141 PERL_UNUSED_ARG(items);
17151 const_av_xsub(pTHX_ CV* cv)
17154 AV * const av = MUTABLE_AV(XSANY.any_ptr);
17162 if (SvRMAGICAL(av))
17163 Perl_croak(aTHX_ "Magical list constants are not supported");
17164 if (GIMME_V != G_ARRAY) {
17166 ST(0) = sv_2mortal(newSViv((IV)AvFILLp(av)+1));
17169 EXTEND(SP, AvFILLp(av)+1);
17170 Copy(AvARRAY(av), &ST(0), AvFILLp(av)+1, SV *);
17171 XSRETURN(AvFILLp(av)+1);
17174 /* Copy an existing cop->cop_warnings field.
17175 * If it's one of the standard addresses, just re-use the address.
17176 * This is the e implementation for the DUP_WARNINGS() macro
17180 Perl_dup_warnings(pTHX_ STRLEN* warnings)
17183 STRLEN *new_warnings;
17185 if (warnings == NULL || specialWARN(warnings))
17188 size = sizeof(*warnings) + *warnings;
17190 new_warnings = (STRLEN*)PerlMemShared_malloc(size);
17191 Copy(warnings, new_warnings, size, char);
17192 return new_warnings;
17196 * ex: set ts=8 sts=4 sw=4 et: