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
178 #define DEFERRED_OP_STEP 100
179 #define DEFER_OP(o) \
181 if (UNLIKELY(defer_ix == (defer_stack_alloc-1))) { \
182 defer_stack_alloc += DEFERRED_OP_STEP; \
183 assert(defer_stack_alloc > 0); \
184 Renew(defer_stack, defer_stack_alloc, OP *); \
186 defer_stack[++defer_ix] = o; \
189 #define POP_DEFERRED_OP() (defer_ix >= 0 ? defer_stack[defer_ix--] : (OP *)NULL)
191 /* remove any leading "empty" ops from the op_next chain whose first
192 * node's address is stored in op_p. Store the updated address of the
193 * first node in op_p.
197 S_prune_chain_head(OP** op_p)
200 && ( (*op_p)->op_type == OP_NULL
201 || (*op_p)->op_type == OP_SCOPE
202 || (*op_p)->op_type == OP_SCALAR
203 || (*op_p)->op_type == OP_LINESEQ)
205 *op_p = (*op_p)->op_next;
209 /* See the explanatory comments above struct opslab in op.h. */
211 #ifdef PERL_DEBUG_READONLY_OPS
212 # define PERL_SLAB_SIZE 128
213 # define PERL_MAX_SLAB_SIZE 4096
214 # include <sys/mman.h>
217 #ifndef PERL_SLAB_SIZE
218 # define PERL_SLAB_SIZE 64
220 #ifndef PERL_MAX_SLAB_SIZE
221 # define PERL_MAX_SLAB_SIZE 2048
224 /* rounds up to nearest pointer */
225 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
226 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
229 S_new_slab(pTHX_ size_t sz)
231 #ifdef PERL_DEBUG_READONLY_OPS
232 OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
233 PROT_READ|PROT_WRITE,
234 MAP_ANON|MAP_PRIVATE, -1, 0);
235 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
236 (unsigned long) sz, slab));
237 if (slab == MAP_FAILED) {
238 perror("mmap failed");
241 slab->opslab_size = (U16)sz;
243 OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
246 /* The context is unused in non-Windows */
249 slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
253 /* requires double parens and aTHX_ */
254 #define DEBUG_S_warn(args) \
256 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
260 Perl_Slab_Alloc(pTHX_ size_t sz)
268 /* We only allocate ops from the slab during subroutine compilation.
269 We find the slab via PL_compcv, hence that must be non-NULL. It could
270 also be pointing to a subroutine which is now fully set up (CvROOT()
271 pointing to the top of the optree for that sub), or a subroutine
272 which isn't using the slab allocator. If our sanity checks aren't met,
273 don't use a slab, but allocate the OP directly from the heap. */
274 if (!PL_compcv || CvROOT(PL_compcv)
275 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
277 o = (OP*)PerlMemShared_calloc(1, sz);
281 /* While the subroutine is under construction, the slabs are accessed via
282 CvSTART(), to avoid needing to expand PVCV by one pointer for something
283 unneeded at runtime. Once a subroutine is constructed, the slabs are
284 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
285 allocated yet. See the commit message for 8be227ab5eaa23f2 for more
287 if (!CvSTART(PL_compcv)) {
289 (OP *)(slab = S_new_slab(aTHX_ PERL_SLAB_SIZE));
290 CvSLABBED_on(PL_compcv);
291 slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
293 else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
295 opsz = SIZE_TO_PSIZE(sz);
296 sz = opsz + OPSLOT_HEADER_P;
298 /* The slabs maintain a free list of OPs. In particular, constant folding
299 will free up OPs, so it makes sense to re-use them where possible. A
300 freed up slot is used in preference to a new allocation. */
301 if (slab->opslab_freed) {
302 OP **too = &slab->opslab_freed;
304 DEBUG_S_warn((aTHX_ "found free op at %p, slab %p", (void*)o, (void*)slab));
305 while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
306 DEBUG_S_warn((aTHX_ "Alas! too small"));
307 o = *(too = &o->op_next);
308 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
312 Zero(o, opsz, I32 *);
318 #define INIT_OPSLOT \
319 slot->opslot_slab = slab; \
320 slot->opslot_next = slab2->opslab_first; \
321 slab2->opslab_first = slot; \
322 o = &slot->opslot_op; \
325 /* The partially-filled slab is next in the chain. */
326 slab2 = slab->opslab_next ? slab->opslab_next : slab;
327 if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) {
328 /* Remaining space is too small. */
330 /* If we can fit a BASEOP, add it to the free chain, so as not
332 if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
333 slot = &slab2->opslab_slots;
335 o->op_type = OP_FREED;
336 o->op_next = slab->opslab_freed;
337 slab->opslab_freed = o;
340 /* Create a new slab. Make this one twice as big. */
341 slot = slab2->opslab_first;
342 while (slot->opslot_next) slot = slot->opslot_next;
343 slab2 = S_new_slab(aTHX_
344 (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE
346 : (DIFF(slab2, slot)+1)*2);
347 slab2->opslab_next = slab->opslab_next;
348 slab->opslab_next = slab2;
350 assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
352 /* Create a new op slot */
353 slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz);
354 assert(slot >= &slab2->opslab_slots);
355 if (DIFF(&slab2->opslab_slots, slot)
356 < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
357 slot = &slab2->opslab_slots;
359 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", (void*)o, (void*)slab));
362 #ifdef PERL_OP_PARENT
363 /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
364 assert(!o->op_moresib);
365 assert(!o->op_sibparent);
373 #ifdef PERL_DEBUG_READONLY_OPS
375 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
377 PERL_ARGS_ASSERT_SLAB_TO_RO;
379 if (slab->opslab_readonly) return;
380 slab->opslab_readonly = 1;
381 for (; slab; slab = slab->opslab_next) {
382 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
383 (unsigned long) slab->opslab_size, slab));*/
384 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
385 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
386 (unsigned long)slab->opslab_size, errno);
391 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
395 PERL_ARGS_ASSERT_SLAB_TO_RW;
397 if (!slab->opslab_readonly) return;
399 for (; slab2; slab2 = slab2->opslab_next) {
400 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
401 (unsigned long) size, slab2));*/
402 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
403 PROT_READ|PROT_WRITE)) {
404 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
405 (unsigned long)slab2->opslab_size, errno);
408 slab->opslab_readonly = 0;
412 # define Slab_to_rw(op) NOOP
415 /* This cannot possibly be right, but it was copied from the old slab
416 allocator, to which it was originally added, without explanation, in
419 # define PerlMemShared PerlMem
422 /* make freed ops die if they're inadvertently executed */
427 DIE(aTHX_ "panic: freed op 0x%p called\n", PL_op);
432 Perl_Slab_Free(pTHX_ void *op)
434 OP * const o = (OP *)op;
437 PERL_ARGS_ASSERT_SLAB_FREE;
440 o->op_ppaddr = S_pp_freed;
443 if (!o->op_slabbed) {
445 PerlMemShared_free(op);
450 /* If this op is already freed, our refcount will get screwy. */
451 assert(o->op_type != OP_FREED);
452 o->op_type = OP_FREED;
453 o->op_next = slab->opslab_freed;
454 slab->opslab_freed = o;
455 DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
456 OpslabREFCNT_dec_padok(slab);
460 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
462 const bool havepad = !!PL_comppad;
463 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
466 PAD_SAVE_SETNULLPAD();
473 Perl_opslab_free(pTHX_ OPSLAB *slab)
476 PERL_ARGS_ASSERT_OPSLAB_FREE;
478 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
479 assert(slab->opslab_refcnt == 1);
481 slab2 = slab->opslab_next;
483 slab->opslab_refcnt = ~(size_t)0;
485 #ifdef PERL_DEBUG_READONLY_OPS
486 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
488 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
489 perror("munmap failed");
493 PerlMemShared_free(slab);
500 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
504 size_t savestack_count = 0;
506 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
510 for (slot = slab2->opslab_first;
512 slot = slot->opslot_next) {
513 if (slot->opslot_op.op_type != OP_FREED
514 && !(slot->opslot_op.op_savefree
520 assert(slot->opslot_op.op_slabbed);
521 op_free(&slot->opslot_op);
522 if (slab->opslab_refcnt == 1) goto free;
525 } while ((slab2 = slab2->opslab_next));
526 /* > 1 because the CV still holds a reference count. */
527 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
529 assert(savestack_count == slab->opslab_refcnt-1);
531 /* Remove the CV’s reference count. */
532 slab->opslab_refcnt--;
539 #ifdef PERL_DEBUG_READONLY_OPS
541 Perl_op_refcnt_inc(pTHX_ OP *o)
544 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
545 if (slab && slab->opslab_readonly) {
558 Perl_op_refcnt_dec(pTHX_ OP *o)
561 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
563 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
565 if (slab && slab->opslab_readonly) {
567 result = --o->op_targ;
570 result = --o->op_targ;
576 * In the following definition, the ", (OP*)0" is just to make the compiler
577 * think the expression is of the right type: croak actually does a Siglongjmp.
579 #define CHECKOP(type,o) \
580 ((PL_op_mask && PL_op_mask[type]) \
581 ? ( op_free((OP*)o), \
582 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
584 : PL_check[type](aTHX_ (OP*)o))
586 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
588 #define OpTYPE_set(o,type) \
590 o->op_type = (OPCODE)type; \
591 o->op_ppaddr = PL_ppaddr[type]; \
595 S_no_fh_allowed(pTHX_ OP *o)
597 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
599 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
605 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
607 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
608 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
613 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
615 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
617 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
622 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
624 PERL_ARGS_ASSERT_BAD_TYPE_PV;
626 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
627 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
630 /* remove flags var, its unused in all callers, move to to right end since gv
631 and kid are always the same */
633 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
635 SV * const namesv = cv_name((CV *)gv, NULL, 0);
636 PERL_ARGS_ASSERT_BAD_TYPE_GV;
638 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %" SVf " must be %s (not %s)",
639 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
643 S_no_bareword_allowed(pTHX_ OP *o)
645 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
647 qerror(Perl_mess(aTHX_
648 "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use",
650 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
653 /* "register" allocation */
656 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
659 const bool is_our = (PL_parser->in_my == KEY_our);
661 PERL_ARGS_ASSERT_ALLOCMY;
663 if (flags & ~SVf_UTF8)
664 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
667 /* complain about "my $<special_var>" etc etc */
671 || ( (flags & SVf_UTF8)
672 && isIDFIRST_utf8_safe((U8 *)name+1, name + len))
673 || (name[1] == '_' && len > 2)))
675 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
677 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
678 /* diag_listed_as: Can't use global %s in "%s" */
679 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
680 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
681 PL_parser->in_my == KEY_state ? "state" : "my"));
683 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
684 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
688 /* allocate a spare slot and store the name in that slot */
690 off = pad_add_name_pvn(name, len,
691 (is_our ? padadd_OUR :
692 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
693 PL_parser->in_my_stash,
695 /* $_ is always in main::, even with our */
696 ? (PL_curstash && !memEQs(name,len,"$_")
702 /* anon sub prototypes contains state vars should always be cloned,
703 * otherwise the state var would be shared between anon subs */
705 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
706 CvCLONE_on(PL_compcv);
712 =head1 Optree Manipulation Functions
714 =for apidoc alloccopstash
716 Available only under threaded builds, this function allocates an entry in
717 C<PL_stashpad> for the stash passed to it.
724 Perl_alloccopstash(pTHX_ HV *hv)
726 PADOFFSET off = 0, o = 1;
727 bool found_slot = FALSE;
729 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
731 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
733 for (; o < PL_stashpadmax; ++o) {
734 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
735 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
736 found_slot = TRUE, off = o;
739 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
740 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
741 off = PL_stashpadmax;
742 PL_stashpadmax += 10;
745 PL_stashpad[PL_stashpadix = off] = hv;
750 /* free the body of an op without examining its contents.
751 * Always use this rather than FreeOp directly */
754 S_op_destroy(pTHX_ OP *o)
762 =for apidoc Am|void|op_free|OP *o
764 Free an op. Only use this when an op is no longer linked to from any
771 Perl_op_free(pTHX_ OP *o)
775 SSize_t defer_ix = -1;
776 SSize_t defer_stack_alloc = 0;
777 OP **defer_stack = NULL;
781 /* Though ops may be freed twice, freeing the op after its slab is a
783 assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
784 /* During the forced freeing of ops after compilation failure, kidops
785 may be freed before their parents. */
786 if (!o || o->op_type == OP_FREED)
791 /* an op should only ever acquire op_private flags that we know about.
792 * If this fails, you may need to fix something in regen/op_private.
793 * Don't bother testing if:
794 * * the op_ppaddr doesn't match the op; someone may have
795 * overridden the op and be doing strange things with it;
796 * * we've errored, as op flags are often left in an
797 * inconsistent state then. Note that an error when
798 * compiling the main program leaves PL_parser NULL, so
799 * we can't spot faults in the main code, only
800 * evaled/required code */
802 if ( o->op_ppaddr == PL_ppaddr[o->op_type]
804 && !PL_parser->error_count)
806 assert(!(o->op_private & ~PL_op_private_valid[type]));
810 if (o->op_private & OPpREFCOUNTED) {
821 refcnt = OpREFCNT_dec(o);
824 /* Need to find and remove any pattern match ops from the list
825 we maintain for reset(). */
826 find_and_forget_pmops(o);
836 /* Call the op_free hook if it has been set. Do it now so that it's called
837 * at the right time for refcounted ops, but still before all of the kids
841 if (o->op_flags & OPf_KIDS) {
843 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
844 nextkid = OpSIBLING(kid); /* Get before next freeing kid */
845 if (!kid || kid->op_type == OP_FREED)
846 /* During the forced freeing of ops after
847 compilation failure, kidops may be freed before
850 if (!(kid->op_flags & OPf_KIDS))
851 /* If it has no kids, just free it now */
858 type = (OPCODE)o->op_targ;
861 Slab_to_rw(OpSLAB(o));
863 /* COP* is not cleared by op_clear() so that we may track line
864 * numbers etc even after null() */
865 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
873 } while ( (o = POP_DEFERRED_OP()) );
875 Safefree(defer_stack);
878 /* S_op_clear_gv(): free a GV attached to an OP */
882 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
884 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
888 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
889 || o->op_type == OP_MULTIDEREF)
892 ? ((GV*)PAD_SVl(*ixp)) : NULL;
894 ? (GV*)(*svp) : NULL;
896 /* It's possible during global destruction that the GV is freed
897 before the optree. Whilst the SvREFCNT_inc is happy to bump from
898 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
899 will trigger an assertion failure, because the entry to sv_clear
900 checks that the scalar is not already freed. A check of for
901 !SvIS_FREED(gv) turns out to be invalid, because during global
902 destruction the reference count can be forced down to zero
903 (with SVf_BREAK set). In which case raising to 1 and then
904 dropping to 0 triggers cleanup before it should happen. I
905 *think* that this might actually be a general, systematic,
906 weakness of the whole idea of SVf_BREAK, in that code *is*
907 allowed to raise and lower references during global destruction,
908 so any *valid* code that happens to do this during global
909 destruction might well trigger premature cleanup. */
910 bool still_valid = gv && SvREFCNT(gv);
913 SvREFCNT_inc_simple_void(gv);
916 pad_swipe(*ixp, TRUE);
924 int try_downgrade = SvREFCNT(gv) == 2;
927 gv_try_downgrade(gv);
933 Perl_op_clear(pTHX_ OP *o)
938 PERL_ARGS_ASSERT_OP_CLEAR;
940 switch (o->op_type) {
941 case OP_NULL: /* Was holding old type, if any. */
944 case OP_ENTEREVAL: /* Was holding hints. */
945 case OP_ARGDEFELEM: /* Was holding signature index. */
949 if (!(o->op_flags & OPf_REF)
950 || (PL_check[o->op_type] != Perl_ck_ftst))
957 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
959 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
962 case OP_METHOD_REDIR:
963 case OP_METHOD_REDIR_SUPER:
965 if (cMETHOPx(o)->op_rclass_targ) {
966 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
967 cMETHOPx(o)->op_rclass_targ = 0;
970 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
971 cMETHOPx(o)->op_rclass_sv = NULL;
974 case OP_METHOD_NAMED:
975 case OP_METHOD_SUPER:
976 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
977 cMETHOPx(o)->op_u.op_meth_sv = NULL;
980 pad_swipe(o->op_targ, 1);
987 SvREFCNT_dec(cSVOPo->op_sv);
988 cSVOPo->op_sv = NULL;
991 Even if op_clear does a pad_free for the target of the op,
992 pad_free doesn't actually remove the sv that exists in the pad;
993 instead it lives on. This results in that it could be reused as
994 a target later on when the pad was reallocated.
997 pad_swipe(o->op_targ,1);
1007 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
1012 if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR)
1013 && (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)))
1016 if (cPADOPo->op_padix > 0) {
1017 pad_swipe(cPADOPo->op_padix, TRUE);
1018 cPADOPo->op_padix = 0;
1021 SvREFCNT_dec(cSVOPo->op_sv);
1022 cSVOPo->op_sv = NULL;
1026 PerlMemShared_free(cPVOPo->op_pv);
1027 cPVOPo->op_pv = NULL;
1031 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
1035 if ( (o->op_private & OPpSPLIT_ASSIGN) /* @array = split */
1036 && !(o->op_flags & OPf_STACKED)) /* @{expr} = split */
1038 if (o->op_private & OPpSPLIT_LEX)
1039 pad_free(cPMOPo->op_pmreplrootu.op_pmtargetoff);
1042 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
1044 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
1051 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
1052 op_free(cPMOPo->op_code_list);
1053 cPMOPo->op_code_list = NULL;
1054 forget_pmop(cPMOPo);
1055 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
1056 /* we use the same protection as the "SAFE" version of the PM_ macros
1057 * here since sv_clean_all might release some PMOPs
1058 * after PL_regex_padav has been cleared
1059 * and the clearing of PL_regex_padav needs to
1060 * happen before sv_clean_all
1063 if(PL_regex_pad) { /* We could be in destruction */
1064 const IV offset = (cPMOPo)->op_pmoffset;
1065 ReREFCNT_dec(PM_GETRE(cPMOPo));
1066 PL_regex_pad[offset] = &PL_sv_undef;
1067 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
1071 ReREFCNT_dec(PM_GETRE(cPMOPo));
1072 PM_SETRE(cPMOPo, NULL);
1078 PerlMemShared_free(cUNOP_AUXo->op_aux);
1081 case OP_MULTICONCAT:
1083 UNOP_AUX_item *aux = cUNOP_AUXo->op_aux;
1084 /* aux[PERL_MULTICONCAT_IX_PLAIN_PV] and/or
1085 * aux[PERL_MULTICONCAT_IX_UTF8_PV] point to plain and/or
1086 * utf8 shared strings */
1087 char *p1 = aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv;
1088 char *p2 = aux[PERL_MULTICONCAT_IX_UTF8_PV].pv;
1090 PerlMemShared_free(p1);
1092 PerlMemShared_free(p2);
1093 PerlMemShared_free(aux);
1099 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
1100 UV actions = items->uv;
1102 bool is_hash = FALSE;
1105 switch (actions & MDEREF_ACTION_MASK) {
1108 actions = (++items)->uv;
1111 case MDEREF_HV_padhv_helem:
1114 case MDEREF_AV_padav_aelem:
1115 pad_free((++items)->pad_offset);
1118 case MDEREF_HV_gvhv_helem:
1121 case MDEREF_AV_gvav_aelem:
1123 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1125 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1129 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1132 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1134 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1136 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1138 goto do_vivify_rv2xv_elem;
1140 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1143 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1144 pad_free((++items)->pad_offset);
1145 goto do_vivify_rv2xv_elem;
1147 case MDEREF_HV_pop_rv2hv_helem:
1148 case MDEREF_HV_vivify_rv2hv_helem:
1151 do_vivify_rv2xv_elem:
1152 case MDEREF_AV_pop_rv2av_aelem:
1153 case MDEREF_AV_vivify_rv2av_aelem:
1155 switch (actions & MDEREF_INDEX_MASK) {
1156 case MDEREF_INDEX_none:
1159 case MDEREF_INDEX_const:
1163 pad_swipe((++items)->pad_offset, 1);
1165 SvREFCNT_dec((++items)->sv);
1171 case MDEREF_INDEX_padsv:
1172 pad_free((++items)->pad_offset);
1174 case MDEREF_INDEX_gvsv:
1176 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1178 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1183 if (actions & MDEREF_FLAG_last)
1196 actions >>= MDEREF_SHIFT;
1199 /* start of malloc is at op_aux[-1], where the length is
1201 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1206 if (o->op_targ > 0) {
1207 pad_free(o->op_targ);
1213 S_cop_free(pTHX_ COP* cop)
1215 PERL_ARGS_ASSERT_COP_FREE;
1218 if (! specialWARN(cop->cop_warnings))
1219 PerlMemShared_free(cop->cop_warnings);
1220 cophh_free(CopHINTHASH_get(cop));
1221 if (PL_curcop == cop)
1226 S_forget_pmop(pTHX_ PMOP *const o)
1228 HV * const pmstash = PmopSTASH(o);
1230 PERL_ARGS_ASSERT_FORGET_PMOP;
1232 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1233 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1235 PMOP **const array = (PMOP**) mg->mg_ptr;
1236 U32 count = mg->mg_len / sizeof(PMOP**);
1240 if (array[i] == o) {
1241 /* Found it. Move the entry at the end to overwrite it. */
1242 array[i] = array[--count];
1243 mg->mg_len = count * sizeof(PMOP**);
1244 /* Could realloc smaller at this point always, but probably
1245 not worth it. Probably worth free()ing if we're the
1248 Safefree(mg->mg_ptr);
1261 S_find_and_forget_pmops(pTHX_ OP *o)
1263 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1265 if (o->op_flags & OPf_KIDS) {
1266 OP *kid = cUNOPo->op_first;
1268 switch (kid->op_type) {
1273 forget_pmop((PMOP*)kid);
1275 find_and_forget_pmops(kid);
1276 kid = OpSIBLING(kid);
1282 =for apidoc Am|void|op_null|OP *o
1284 Neutralizes an op when it is no longer needed, but is still linked to from
1291 Perl_op_null(pTHX_ OP *o)
1295 PERL_ARGS_ASSERT_OP_NULL;
1297 if (o->op_type == OP_NULL)
1300 o->op_targ = o->op_type;
1301 OpTYPE_set(o, OP_NULL);
1305 Perl_op_refcnt_lock(pTHX)
1306 PERL_TSA_ACQUIRE(PL_op_mutex)
1311 PERL_UNUSED_CONTEXT;
1316 Perl_op_refcnt_unlock(pTHX)
1317 PERL_TSA_RELEASE(PL_op_mutex)
1322 PERL_UNUSED_CONTEXT;
1328 =for apidoc op_sibling_splice
1330 A general function for editing the structure of an existing chain of
1331 op_sibling nodes. By analogy with the perl-level C<splice()> function, allows
1332 you to delete zero or more sequential nodes, replacing them with zero or
1333 more different nodes. Performs the necessary op_first/op_last
1334 housekeeping on the parent node and op_sibling manipulation on the
1335 children. The last deleted node will be marked as as the last node by
1336 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1338 Note that op_next is not manipulated, and nodes are not freed; that is the
1339 responsibility of the caller. It also won't create a new list op for an
1340 empty list etc; use higher-level functions like op_append_elem() for that.
1342 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
1343 the splicing doesn't affect the first or last op in the chain.
1345 C<start> is the node preceding the first node to be spliced. Node(s)
1346 following it will be deleted, and ops will be inserted after it. If it is
1347 C<NULL>, the first node onwards is deleted, and nodes are inserted at the
1350 C<del_count> is the number of nodes to delete. If zero, no nodes are deleted.
1351 If -1 or greater than or equal to the number of remaining kids, all
1352 remaining kids are deleted.
1354 C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
1355 If C<NULL>, no nodes are inserted.
1357 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1362 action before after returns
1363 ------ ----- ----- -------
1366 splice(P, A, 2, X-Y-Z) | | B-C
1370 splice(P, NULL, 1, X-Y) | | A
1374 splice(P, NULL, 3, NULL) | | A-B-C
1378 splice(P, B, 0, X-Y) | | NULL
1382 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1383 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
1389 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1393 OP *last_del = NULL;
1394 OP *last_ins = NULL;
1397 first = OpSIBLING(start);
1401 first = cLISTOPx(parent)->op_first;
1403 assert(del_count >= -1);
1405 if (del_count && first) {
1407 while (--del_count && OpHAS_SIBLING(last_del))
1408 last_del = OpSIBLING(last_del);
1409 rest = OpSIBLING(last_del);
1410 OpLASTSIB_set(last_del, NULL);
1417 while (OpHAS_SIBLING(last_ins))
1418 last_ins = OpSIBLING(last_ins);
1419 OpMAYBESIB_set(last_ins, rest, NULL);
1425 OpMAYBESIB_set(start, insert, NULL);
1430 cLISTOPx(parent)->op_first = insert;
1432 parent->op_flags |= OPf_KIDS;
1434 parent->op_flags &= ~OPf_KIDS;
1438 /* update op_last etc */
1445 /* ought to use OP_CLASS(parent) here, but that can't handle
1446 * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1448 type = parent->op_type;
1449 if (type == OP_CUSTOM) {
1451 type = XopENTRYCUSTOM(parent, xop_class);
1454 if (type == OP_NULL)
1455 type = parent->op_targ;
1456 type = PL_opargs[type] & OA_CLASS_MASK;
1459 lastop = last_ins ? last_ins : start ? start : NULL;
1460 if ( type == OA_BINOP
1461 || type == OA_LISTOP
1465 cLISTOPx(parent)->op_last = lastop;
1468 OpLASTSIB_set(lastop, parent);
1470 return last_del ? first : NULL;
1473 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1477 #ifdef PERL_OP_PARENT
1480 =for apidoc op_parent
1482 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1483 This function is only available on perls built with C<-DPERL_OP_PARENT>.
1489 Perl_op_parent(OP *o)
1491 PERL_ARGS_ASSERT_OP_PARENT;
1492 while (OpHAS_SIBLING(o))
1494 return o->op_sibparent;
1500 /* replace the sibling following start with a new UNOP, which becomes
1501 * the parent of the original sibling; e.g.
1503 * op_sibling_newUNOP(P, A, unop-args...)
1511 * where U is the new UNOP.
1513 * parent and start args are the same as for op_sibling_splice();
1514 * type and flags args are as newUNOP().
1516 * Returns the new UNOP.
1520 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1524 kid = op_sibling_splice(parent, start, 1, NULL);
1525 newop = newUNOP(type, flags, kid);
1526 op_sibling_splice(parent, start, 0, newop);
1531 /* lowest-level newLOGOP-style function - just allocates and populates
1532 * the struct. Higher-level stuff should be done by S_new_logop() /
1533 * newLOGOP(). This function exists mainly to avoid op_first assignment
1534 * being spread throughout this file.
1538 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1543 NewOp(1101, logop, 1, LOGOP);
1544 OpTYPE_set(logop, type);
1545 logop->op_first = first;
1546 logop->op_other = other;
1548 logop->op_flags = OPf_KIDS;
1549 while (kid && OpHAS_SIBLING(kid))
1550 kid = OpSIBLING(kid);
1552 OpLASTSIB_set(kid, (OP*)logop);
1557 /* Contextualizers */
1560 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1562 Applies a syntactic context to an op tree representing an expression.
1563 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1564 or C<G_VOID> to specify the context to apply. The modified op tree
1571 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1573 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1575 case G_SCALAR: return scalar(o);
1576 case G_ARRAY: return list(o);
1577 case G_VOID: return scalarvoid(o);
1579 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1586 =for apidoc Am|OP*|op_linklist|OP *o
1587 This function is the implementation of the L</LINKLIST> macro. It should
1588 not be called directly.
1594 Perl_op_linklist(pTHX_ OP *o)
1598 PERL_ARGS_ASSERT_OP_LINKLIST;
1603 /* establish postfix order */
1604 first = cUNOPo->op_first;
1607 o->op_next = LINKLIST(first);
1610 OP *sibl = OpSIBLING(kid);
1612 kid->op_next = LINKLIST(sibl);
1627 S_scalarkids(pTHX_ OP *o)
1629 if (o && o->op_flags & OPf_KIDS) {
1631 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1638 S_scalarboolean(pTHX_ OP *o)
1640 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1642 if ((o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST &&
1643 !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) ||
1644 (o->op_type == OP_NOT && cUNOPo->op_first->op_type == OP_SASSIGN &&
1645 cBINOPx(cUNOPo->op_first)->op_first->op_type == OP_CONST &&
1646 !(cBINOPx(cUNOPo->op_first)->op_first->op_flags & OPf_SPECIAL))) {
1647 if (ckWARN(WARN_SYNTAX)) {
1648 const line_t oldline = CopLINE(PL_curcop);
1650 if (PL_parser && PL_parser->copline != NOLINE) {
1651 /* This ensures that warnings are reported at the first line
1652 of the conditional, not the last. */
1653 CopLINE_set(PL_curcop, PL_parser->copline);
1655 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1656 CopLINE_set(PL_curcop, oldline);
1663 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type)
1666 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1667 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1669 const char funny = o->op_type == OP_PADAV
1670 || o->op_type == OP_RV2AV ? '@' : '%';
1671 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1673 if (cUNOPo->op_first->op_type != OP_GV
1674 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1676 return varname(gv, funny, 0, NULL, 0, subscript_type);
1679 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type);
1684 S_op_varname(pTHX_ const OP *o)
1686 return S_op_varname_subscript(aTHX_ o, 1);
1690 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1691 { /* or not so pretty :-) */
1692 if (o->op_type == OP_CONST) {
1694 if (SvPOK(*retsv)) {
1696 *retsv = sv_newmortal();
1697 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1698 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1700 else if (!SvOK(*retsv))
1703 else *retpv = "...";
1707 S_scalar_slice_warning(pTHX_ const OP *o)
1710 const bool h = o->op_type == OP_HSLICE
1711 || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE);
1717 SV *keysv = NULL; /* just to silence compiler warnings */
1718 const char *key = NULL;
1720 if (!(o->op_private & OPpSLICEWARNING))
1722 if (PL_parser && PL_parser->error_count)
1723 /* This warning can be nonsensical when there is a syntax error. */
1726 kid = cLISTOPo->op_first;
1727 kid = OpSIBLING(kid); /* get past pushmark */
1728 /* weed out false positives: any ops that can return lists */
1729 switch (kid->op_type) {
1755 /* Don't warn if we have a nulled list either. */
1756 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1759 assert(OpSIBLING(kid));
1760 name = S_op_varname(aTHX_ OpSIBLING(kid));
1761 if (!name) /* XS module fiddling with the op tree */
1763 S_op_pretty(aTHX_ kid, &keysv, &key);
1764 assert(SvPOK(name));
1765 sv_chop(name,SvPVX(name)+1);
1767 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1768 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1769 "Scalar value @%" SVf "%c%s%c better written as $%" SVf
1771 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1772 lbrack, key, rbrack);
1774 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1775 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1776 "Scalar value @%" SVf "%c%" SVf "%c better written as $%"
1778 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1779 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1783 Perl_scalar(pTHX_ OP *o)
1787 /* assumes no premature commitment */
1788 if (!o || (PL_parser && PL_parser->error_count)
1789 || (o->op_flags & OPf_WANT)
1790 || o->op_type == OP_RETURN)
1795 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1797 switch (o->op_type) {
1799 scalar(cBINOPo->op_first);
1800 if (o->op_private & OPpREPEAT_DOLIST) {
1801 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1802 assert(kid->op_type == OP_PUSHMARK);
1803 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1804 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1805 o->op_private &=~ OPpREPEAT_DOLIST;
1812 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
1822 if (o->op_flags & OPf_KIDS) {
1823 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
1829 kid = cLISTOPo->op_first;
1831 kid = OpSIBLING(kid);
1834 OP *sib = OpSIBLING(kid);
1835 if (sib && kid->op_type != OP_LEAVEWHEN
1836 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
1837 || ( sib->op_targ != OP_NEXTSTATE
1838 && sib->op_targ != OP_DBSTATE )))
1844 PL_curcop = &PL_compiling;
1849 kid = cLISTOPo->op_first;
1852 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1857 /* Warn about scalar context */
1858 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1859 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1862 const char *key = NULL;
1864 /* This warning can be nonsensical when there is a syntax error. */
1865 if (PL_parser && PL_parser->error_count)
1868 if (!ckWARN(WARN_SYNTAX)) break;
1870 kid = cLISTOPo->op_first;
1871 kid = OpSIBLING(kid); /* get past pushmark */
1872 assert(OpSIBLING(kid));
1873 name = S_op_varname(aTHX_ OpSIBLING(kid));
1874 if (!name) /* XS module fiddling with the op tree */
1876 S_op_pretty(aTHX_ kid, &keysv, &key);
1877 assert(SvPOK(name));
1878 sv_chop(name,SvPVX(name)+1);
1880 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1881 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1882 "%%%" SVf "%c%s%c in scalar context better written "
1883 "as $%" SVf "%c%s%c",
1884 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1885 lbrack, key, rbrack);
1887 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1888 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1889 "%%%" SVf "%c%" SVf "%c in scalar context better "
1890 "written as $%" SVf "%c%" SVf "%c",
1891 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1892 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1899 Perl_scalarvoid(pTHX_ OP *arg)
1904 SSize_t defer_stack_alloc = 0;
1905 SSize_t defer_ix = -1;
1906 OP **defer_stack = NULL;
1909 PERL_ARGS_ASSERT_SCALARVOID;
1913 SV *useless_sv = NULL;
1914 const char* useless = NULL;
1916 if (o->op_type == OP_NEXTSTATE
1917 || o->op_type == OP_DBSTATE
1918 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1919 || o->op_targ == OP_DBSTATE)))
1920 PL_curcop = (COP*)o; /* for warning below */
1922 /* assumes no premature commitment */
1923 want = o->op_flags & OPf_WANT;
1924 if ((want && want != OPf_WANT_SCALAR)
1925 || (PL_parser && PL_parser->error_count)
1926 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1931 if ((o->op_private & OPpTARGET_MY)
1932 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1934 /* newASSIGNOP has already applied scalar context, which we
1935 leave, as if this op is inside SASSIGN. */
1939 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1941 switch (o->op_type) {
1943 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1947 if (o->op_flags & OPf_STACKED)
1949 if (o->op_type == OP_REPEAT)
1950 scalar(cBINOPo->op_first);
1953 if ((o->op_flags & OPf_STACKED) &&
1954 !(o->op_private & OPpCONCAT_NESTED))
1958 if (o->op_private == 4)
1993 case OP_GETSOCKNAME:
1994 case OP_GETPEERNAME:
1999 case OP_GETPRIORITY:
2024 useless = OP_DESC(o);
2034 case OP_AELEMFAST_LEX:
2038 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
2039 /* Otherwise it's "Useless use of grep iterator" */
2040 useless = OP_DESC(o);
2044 if (!(o->op_private & OPpSPLIT_ASSIGN))
2045 useless = OP_DESC(o);
2049 kid = cUNOPo->op_first;
2050 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
2051 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
2054 useless = "negative pattern binding (!~)";
2058 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
2059 useless = "non-destructive substitution (s///r)";
2063 useless = "non-destructive transliteration (tr///r)";
2070 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
2071 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
2072 useless = "a variable";
2077 if (cSVOPo->op_private & OPpCONST_STRICT)
2078 no_bareword_allowed(o);
2080 if (ckWARN(WARN_VOID)) {
2082 /* don't warn on optimised away booleans, eg
2083 * use constant Foo, 5; Foo || print; */
2084 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
2086 /* the constants 0 and 1 are permitted as they are
2087 conventionally used as dummies in constructs like
2088 1 while some_condition_with_side_effects; */
2089 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
2091 else if (SvPOK(sv)) {
2092 SV * const dsv = newSVpvs("");
2094 = Perl_newSVpvf(aTHX_
2096 pv_pretty(dsv, SvPVX_const(sv),
2097 SvCUR(sv), 32, NULL, NULL,
2099 | PERL_PV_ESCAPE_NOCLEAR
2100 | PERL_PV_ESCAPE_UNI_DETECT));
2101 SvREFCNT_dec_NN(dsv);
2103 else if (SvOK(sv)) {
2104 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%" SVf ")", SVfARG(sv));
2107 useless = "a constant (undef)";
2110 op_null(o); /* don't execute or even remember it */
2114 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */
2118 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */
2122 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */
2126 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */
2131 UNOP *refgen, *rv2cv;
2134 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2137 rv2gv = ((BINOP *)o)->op_last;
2138 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2141 refgen = (UNOP *)((BINOP *)o)->op_first;
2143 if (!refgen || (refgen->op_type != OP_REFGEN
2144 && refgen->op_type != OP_SREFGEN))
2147 exlist = (LISTOP *)refgen->op_first;
2148 if (!exlist || exlist->op_type != OP_NULL
2149 || exlist->op_targ != OP_LIST)
2152 if (exlist->op_first->op_type != OP_PUSHMARK
2153 && exlist->op_first != exlist->op_last)
2156 rv2cv = (UNOP*)exlist->op_last;
2158 if (rv2cv->op_type != OP_RV2CV)
2161 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2162 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2163 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2165 o->op_private |= OPpASSIGN_CV_TO_GV;
2166 rv2gv->op_private |= OPpDONT_INIT_GV;
2167 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2179 kid = cLOGOPo->op_first;
2180 if (kid->op_type == OP_NOT
2181 && (kid->op_flags & OPf_KIDS)) {
2182 if (o->op_type == OP_AND) {
2183 OpTYPE_set(o, OP_OR);
2185 OpTYPE_set(o, OP_AND);
2195 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2196 if (!(kid->op_flags & OPf_KIDS))
2203 if (o->op_flags & OPf_STACKED)
2210 if (!(o->op_flags & OPf_KIDS))
2221 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2222 if (!(kid->op_flags & OPf_KIDS))
2228 /* If the first kid after pushmark is something that the padrange
2229 optimisation would reject, then null the list and the pushmark.
2231 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2232 && ( !(kid = OpSIBLING(kid))
2233 || ( kid->op_type != OP_PADSV
2234 && kid->op_type != OP_PADAV
2235 && kid->op_type != OP_PADHV)
2236 || kid->op_private & ~OPpLVAL_INTRO
2237 || !(kid = OpSIBLING(kid))
2238 || ( kid->op_type != OP_PADSV
2239 && kid->op_type != OP_PADAV
2240 && kid->op_type != OP_PADHV)
2241 || kid->op_private & ~OPpLVAL_INTRO)
2243 op_null(cUNOPo->op_first); /* NULL the pushmark */
2244 op_null(o); /* NULL the list */
2256 /* mortalise it, in case warnings are fatal. */
2257 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2258 "Useless use of %" SVf " in void context",
2259 SVfARG(sv_2mortal(useless_sv)));
2262 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2263 "Useless use of %s in void context",
2266 } while ( (o = POP_DEFERRED_OP()) );
2268 Safefree(defer_stack);
2274 S_listkids(pTHX_ OP *o)
2276 if (o && o->op_flags & OPf_KIDS) {
2278 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2285 Perl_list(pTHX_ OP *o)
2289 /* assumes no premature commitment */
2290 if (!o || (o->op_flags & OPf_WANT)
2291 || (PL_parser && PL_parser->error_count)
2292 || o->op_type == OP_RETURN)
2297 if ((o->op_private & OPpTARGET_MY)
2298 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2300 return o; /* As if inside SASSIGN */
2303 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2305 switch (o->op_type) {
2307 list(cBINOPo->op_first);
2310 if (o->op_private & OPpREPEAT_DOLIST
2311 && !(o->op_flags & OPf_STACKED))
2313 list(cBINOPo->op_first);
2314 kid = cBINOPo->op_last;
2315 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2316 && SvIVX(kSVOP_sv) == 1)
2318 op_null(o); /* repeat */
2319 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2321 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2328 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2336 if (!(o->op_flags & OPf_KIDS))
2338 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2339 list(cBINOPo->op_first);
2340 return gen_constant_list(o);
2346 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2347 op_null(cUNOPo->op_first); /* NULL the pushmark */
2348 op_null(o); /* NULL the list */
2353 kid = cLISTOPo->op_first;
2355 kid = OpSIBLING(kid);
2358 OP *sib = OpSIBLING(kid);
2359 if (sib && kid->op_type != OP_LEAVEWHEN)
2365 PL_curcop = &PL_compiling;
2369 kid = cLISTOPo->op_first;
2376 S_scalarseq(pTHX_ OP *o)
2379 const OPCODE type = o->op_type;
2381 if (type == OP_LINESEQ || type == OP_SCOPE ||
2382 type == OP_LEAVE || type == OP_LEAVETRY)
2385 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2386 if ((sib = OpSIBLING(kid))
2387 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2388 || ( sib->op_targ != OP_NEXTSTATE
2389 && sib->op_targ != OP_DBSTATE )))
2394 PL_curcop = &PL_compiling;
2396 o->op_flags &= ~OPf_PARENS;
2397 if (PL_hints & HINT_BLOCK_SCOPE)
2398 o->op_flags |= OPf_PARENS;
2401 o = newOP(OP_STUB, 0);
2406 S_modkids(pTHX_ OP *o, I32 type)
2408 if (o && o->op_flags & OPf_KIDS) {
2410 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2411 op_lvalue(kid, type);
2417 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2418 * const fields. Also, convert CONST keys to HEK-in-SVs.
2419 * rop is the op that retrieves the hash;
2420 * key_op is the first key
2424 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op)
2430 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2432 if (rop->op_first->op_type == OP_PADSV)
2433 /* @$hash{qw(keys here)} */
2434 rop = (UNOP*)rop->op_first;
2436 /* @{$hash}{qw(keys here)} */
2437 if (rop->op_first->op_type == OP_SCOPE
2438 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2440 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2447 lexname = NULL; /* just to silence compiler warnings */
2448 fields = NULL; /* just to silence compiler warnings */
2452 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2453 SvPAD_TYPED(lexname))
2454 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2455 && isGV(*fields) && GvHV(*fields);
2457 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2459 if (key_op->op_type != OP_CONST)
2461 svp = cSVOPx_svp(key_op);
2463 /* make sure it's not a bareword under strict subs */
2464 if (key_op->op_private & OPpCONST_BARE &&
2465 key_op->op_private & OPpCONST_STRICT)
2467 no_bareword_allowed((OP*)key_op);
2470 /* Make the CONST have a shared SV */
2471 if ( !SvIsCOW_shared_hash(sv = *svp)
2472 && SvTYPE(sv) < SVt_PVMG
2477 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2478 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2479 SvREFCNT_dec_NN(sv);
2484 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2486 Perl_croak(aTHX_ "No such class field \"%" SVf "\" "
2487 "in variable %" PNf " of type %" HEKf,
2488 SVfARG(*svp), PNfARG(lexname),
2489 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2494 /* info returned by S_sprintf_is_multiconcatable() */
2496 struct sprintf_ismc_info {
2497 SSize_t nargs; /* num of args to sprintf (not including the format) */
2498 char *start; /* start of raw format string */
2499 char *end; /* bytes after end of raw format string */
2500 STRLEN total_len; /* total length (in bytes) of format string, not
2501 including '%s' and half of '%%' */
2502 STRLEN variant; /* number of bytes by which total_len_p would grow
2503 if upgraded to utf8 */
2504 bool utf8; /* whether the format is utf8 */
2508 /* is the OP_SPRINTF o suitable for converting into a multiconcat op?
2509 * i.e. its format argument is a const string with only '%s' and '%%'
2510 * formats, and the number of args is known, e.g.
2511 * sprintf "a=%s f=%s", $a[0], scalar(f());
2513 * sprintf "i=%d a=%s f=%s", $i, @a, f();
2515 * If successful, the sprintf_ismc_info struct pointed to by info will be
2520 S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info)
2522 OP *pm, *constop, *kid;
2525 SSize_t nargs, nformats;
2526 STRLEN cur, total_len, variant;
2529 /* if sprintf's behaviour changes, die here so that someone
2530 * can decide whether to enhance this function or skip optimising
2531 * under those new circumstances */
2532 assert(!(o->op_flags & OPf_STACKED));
2533 assert(!(PL_opargs[OP_SPRINTF] & OA_TARGLEX));
2534 assert(!(o->op_private & ~OPpARG4_MASK));
2536 pm = cUNOPo->op_first;
2537 if (pm->op_type != OP_PUSHMARK) /* weird coreargs stuff */
2539 constop = OpSIBLING(pm);
2540 if (!constop || constop->op_type != OP_CONST)
2542 sv = cSVOPx_sv(constop);
2543 if (SvMAGICAL(sv) || !SvPOK(sv))
2549 /* Scan format for %% and %s and work out how many %s there are.
2550 * Abandon if other format types are found.
2557 for (p = s; p < e; p++) {
2560 if (!UTF8_IS_INVARIANT(*p))
2566 return FALSE; /* lone % at end gives "Invalid conversion" */
2575 if (!nformats || nformats > PERL_MULTICONCAT_MAXARG)
2578 utf8 = cBOOL(SvUTF8(sv));
2582 /* scan args; they must all be in scalar cxt */
2585 kid = OpSIBLING(constop);
2588 if ((kid->op_flags & OPf_WANT) != OPf_WANT_SCALAR)
2591 kid = OpSIBLING(kid);
2594 if (nargs != nformats)
2595 return FALSE; /* e.g. sprintf("%s%s", $a); */
2598 info->nargs = nargs;
2601 info->total_len = total_len;
2602 info->variant = variant;
2610 /* S_maybe_multiconcat():
2612 * given an OP_STRINGIFY, OP_SASSIGN, OP_CONCAT or OP_SPRINTF op, possibly
2613 * convert it (and its children) into an OP_MULTICONCAT. See the code
2614 * comments just before pp_multiconcat() for the full details of what
2615 * OP_MULTICONCAT supports.
2617 * Basically we're looking for an optree with a chain of OP_CONCATS down
2618 * the LHS (or an OP_SPRINTF), with possibly an OP_SASSIGN, and/or
2619 * OP_STRINGIFY, and/or OP_CONCAT acting as '.=' at its head, e.g.
2627 * STRINGIFY -- PADSV[$x]
2630 * ex-PUSHMARK -- CONCAT/S
2632 * CONCAT/S -- PADSV[$d]
2634 * CONCAT -- CONST["-"]
2636 * PADSV[$a] -- PADSV[$b]
2638 * Note that at this stage the OP_SASSIGN may have already been optimised
2639 * away with OPpTARGET_MY set on the OP_STRINGIFY or OP_CONCAT.
2643 S_maybe_multiconcat(pTHX_ OP *o)
2645 OP *lastkidop; /* the right-most of any kids unshifted onto o */
2646 OP *topop; /* the top-most op in the concat tree (often equals o,
2647 unless there are assign/stringify ops above it */
2648 OP *parentop; /* the parent op of topop (or itself if no parent) */
2649 OP *targmyop; /* the op (if any) with the OPpTARGET_MY flag */
2650 OP *targetop; /* the op corresponding to target=... or target.=... */
2651 OP *stringop; /* the OP_STRINGIFY op, if any */
2652 OP *nextop; /* used for recreating the op_next chain without consts */
2653 OP *kid; /* general-purpose op pointer */
2655 UNOP_AUX_item *lenp;
2656 char *const_str, *p;
2657 struct sprintf_ismc_info sprintf_info;
2659 /* store info about each arg in args[];
2660 * toparg is the highest used slot; argp is a general
2661 * pointer to args[] slots */
2663 void *p; /* initially points to const sv (or null for op);
2664 later, set to SvPV(constsv), with ... */
2665 STRLEN len; /* ... len set to SvPV(..., len) */
2666 } *argp, *toparg, args[PERL_MULTICONCAT_MAXARG*2 + 1];
2670 SSize_t nadjconst = 0; /* adjacent consts - may be demoted to args */
2673 bool kid_is_last = FALSE; /* most args will be the RHS kid of a concat op;
2674 the last-processed arg will the LHS of one,
2675 as args are processed in reverse order */
2676 U8 stacked_last = 0; /* whether the last seen concat op was STACKED */
2677 STRLEN total_len = 0; /* sum of the lengths of the const segments */
2678 U8 flags = 0; /* what will become the op_flags and ... */
2679 U8 private_flags = 0; /* ... op_private of the multiconcat op */
2680 bool is_sprintf = FALSE; /* we're optimising an sprintf */
2681 bool is_targable = FALSE; /* targetop is an OPpTARGET_MY candidate */
2682 bool prev_was_const = FALSE; /* previous arg was a const */
2684 /* -----------------------------------------------------------------
2687 * Examine the optree non-destructively to determine whether it's
2688 * suitable to be converted into an OP_MULTICONCAT. Accumulate
2689 * information about the optree in args[].
2699 assert( o->op_type == OP_SASSIGN
2700 || o->op_type == OP_CONCAT
2701 || o->op_type == OP_SPRINTF
2702 || o->op_type == OP_STRINGIFY);
2704 Zero(&sprintf_info, 1, struct sprintf_ismc_info);
2706 /* first see if, at the top of the tree, there is an assign,
2707 * append and/or stringify */
2709 if (topop->op_type == OP_SASSIGN) {
2711 if (o->op_ppaddr != PL_ppaddr[OP_SASSIGN])
2713 if (o->op_private & (OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV))
2715 assert(!(o->op_private & ~OPpARG2_MASK)); /* barf on unknown flags */
2718 topop = cBINOPo->op_first;
2719 targetop = OpSIBLING(topop);
2720 if (!targetop) /* probably some sort of syntax error */
2723 else if ( topop->op_type == OP_CONCAT
2724 && (topop->op_flags & OPf_STACKED)
2725 && (cUNOPo->op_first->op_flags & OPf_MOD)
2726 && (!(topop->op_private & OPpCONCAT_NESTED))
2731 /* OPpTARGET_MY shouldn't be able to be set here. If it is,
2732 * decide what to do about it */
2733 assert(!(o->op_private & OPpTARGET_MY));
2735 /* barf on unknown flags */
2736 assert(!(o->op_private & ~(OPpARG2_MASK|OPpTARGET_MY)));
2737 private_flags |= OPpMULTICONCAT_APPEND;
2738 targetop = cBINOPo->op_first;
2740 topop = OpSIBLING(targetop);
2742 /* $x .= <FOO> gets optimised to rcatline instead */
2743 if (topop->op_type == OP_READLINE)
2748 /* Can targetop (the LHS) if it's a padsv, be be optimised
2749 * away and use OPpTARGET_MY instead?
2751 if ( (targetop->op_type == OP_PADSV)
2752 && !(targetop->op_private & OPpDEREF)
2753 && !(targetop->op_private & OPpPAD_STATE)
2754 /* we don't support 'my $x .= ...' */
2755 && ( o->op_type == OP_SASSIGN
2756 || !(targetop->op_private & OPpLVAL_INTRO))
2761 if (topop->op_type == OP_STRINGIFY) {
2762 if (topop->op_ppaddr != PL_ppaddr[OP_STRINGIFY])
2766 /* barf on unknown flags */
2767 assert(!(o->op_private & ~(OPpARG4_MASK|OPpTARGET_MY)));
2769 if ((topop->op_private & OPpTARGET_MY)) {
2770 if (o->op_type == OP_SASSIGN)
2771 return; /* can't have two assigns */
2775 private_flags |= OPpMULTICONCAT_STRINGIFY;
2777 topop = cBINOPx(topop)->op_first;
2778 assert(OP_TYPE_IS_OR_WAS_NN(topop, OP_PUSHMARK));
2779 topop = OpSIBLING(topop);
2782 if (topop->op_type == OP_SPRINTF) {
2783 if (topop->op_ppaddr != PL_ppaddr[OP_SPRINTF])
2785 if (S_sprintf_is_multiconcatable(aTHX_ topop, &sprintf_info)) {
2786 nargs = sprintf_info.nargs;
2787 total_len = sprintf_info.total_len;
2788 variant = sprintf_info.variant;
2789 utf8 = sprintf_info.utf8;
2791 private_flags |= OPpMULTICONCAT_FAKE;
2793 /* we have an sprintf op rather than a concat optree.
2794 * Skip most of the code below which is associated with
2795 * processing that optree. We also skip phase 2, determining
2796 * whether its cost effective to optimise, since for sprintf,
2797 * multiconcat is *always* faster */
2800 /* note that even if the sprintf itself isn't multiconcatable,
2801 * the expression as a whole may be, e.g. in
2802 * $x .= sprintf("%d",...)
2803 * the sprintf op will be left as-is, but the concat/S op may
2804 * be upgraded to multiconcat
2807 else if (topop->op_type == OP_CONCAT) {
2808 if (topop->op_ppaddr != PL_ppaddr[OP_CONCAT])
2811 if ((topop->op_private & OPpTARGET_MY)) {
2812 if (o->op_type == OP_SASSIGN || targmyop)
2813 return; /* can't have two assigns */
2818 /* Is it safe to convert a sassign/stringify/concat op into
2820 assert((PL_opargs[OP_SASSIGN] & OA_CLASS_MASK) == OA_BINOP);
2821 assert((PL_opargs[OP_CONCAT] & OA_CLASS_MASK) == OA_BINOP);
2822 assert((PL_opargs[OP_STRINGIFY] & OA_CLASS_MASK) == OA_LISTOP);
2823 assert((PL_opargs[OP_SPRINTF] & OA_CLASS_MASK) == OA_LISTOP);
2824 STATIC_ASSERT_STMT( STRUCT_OFFSET(BINOP, op_last)
2825 == STRUCT_OFFSET(UNOP_AUX, op_aux));
2826 STATIC_ASSERT_STMT( STRUCT_OFFSET(LISTOP, op_last)
2827 == STRUCT_OFFSET(UNOP_AUX, op_aux));
2829 /* Now scan the down the tree looking for a series of
2830 * CONCAT/OPf_STACKED ops on the LHS (with the last one not
2831 * stacked). For example this tree:
2836 * CONCAT/STACKED -- EXPR5
2838 * CONCAT/STACKED -- EXPR4
2844 * corresponds to an expression like
2846 * (EXPR1 . EXPR2 . EXPR3 . EXPR4 . EXPR5)
2848 * Record info about each EXPR in args[]: in particular, whether it is
2849 * a stringifiable OP_CONST and if so what the const sv is.
2851 * The reason why the last concat can't be STACKED is the difference
2854 * ((($a .= $a) .= $a) .= $a) .= $a
2857 * $a . $a . $a . $a . $a
2859 * The main difference between the optrees for those two constructs
2860 * is the presence of the last STACKED. As well as modifying $a,
2861 * the former sees the changed $a between each concat, so if $s is
2862 * initially 'a', the first returns 'a' x 16, while the latter returns
2863 * 'a' x 5. And pp_multiconcat can't handle that kind of thing.
2873 if ( kid->op_type == OP_CONCAT
2877 k1 = cUNOPx(kid)->op_first;
2879 /* shouldn't happen except maybe after compile err? */
2883 /* avoid turning (A . B . ($lex = C) ...) into (A . B . C ...) */
2884 if (kid->op_private & OPpTARGET_MY)
2887 stacked_last = (kid->op_flags & OPf_STACKED);
2899 if ( nargs + nadjconst > PERL_MULTICONCAT_MAXARG - 2
2900 || (argp - args + 1) > (PERL_MULTICONCAT_MAXARG*2 + 1) - 2)
2902 /* At least two spare slots are needed to decompose both
2903 * concat args. If there are no slots left, continue to
2904 * examine the rest of the optree, but don't push new values
2905 * on args[]. If the optree as a whole is legal for conversion
2906 * (in particular that the last concat isn't STACKED), then
2907 * the first PERL_MULTICONCAT_MAXARG elements of the optree
2908 * can be converted into an OP_MULTICONCAT now, with the first
2909 * child of that op being the remainder of the optree -
2910 * which may itself later be converted to a multiconcat op
2914 /* the last arg is the rest of the optree */
2919 else if ( argop->op_type == OP_CONST
2920 && ((sv = cSVOPx_sv(argop)))
2921 /* defer stringification until runtime of 'constant'
2922 * things that might stringify variantly, e.g. the radix
2923 * point of NVs, or overloaded RVs */
2924 && (SvPOK(sv) || SvIOK(sv))
2925 && (!SvGMAGICAL(sv))
2928 utf8 |= cBOOL(SvUTF8(sv));
2931 /* this const may be demoted back to a plain arg later;
2932 * make sure we have enough arg slots left */
2934 prev_was_const = !prev_was_const;
2939 prev_was_const = FALSE;
2949 return; /* we don't support ((A.=B).=C)...) */
2951 /* look for two adjacent consts and don't fold them together:
2954 * $o->concat("a")->concat("b")
2957 * (but $o .= "a" . "b" should still fold)
2960 bool seen_nonconst = FALSE;
2961 for (argp = toparg; argp >= args; argp--) {
2962 if (argp->p == NULL) {
2963 seen_nonconst = TRUE;
2969 /* both previous and current arg were constants;
2970 * leave the current OP_CONST as-is */
2978 /* -----------------------------------------------------------------
2981 * At this point we have determined that the optree *can* be converted
2982 * into a multiconcat. Having gathered all the evidence, we now decide
2983 * whether it *should*.
2987 /* we need at least one concat action, e.g.:
2993 * otherwise we could be doing something like $x = "foo", which
2994 * if treated as as a concat, would fail to COW.
2996 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 2)
2999 /* Benchmarking seems to indicate that we gain if:
3000 * * we optimise at least two actions into a single multiconcat
3001 * (e.g concat+concat, sassign+concat);
3002 * * or if we can eliminate at least 1 OP_CONST;
3003 * * or if we can eliminate a padsv via OPpTARGET_MY
3007 /* eliminated at least one OP_CONST */
3009 /* eliminated an OP_SASSIGN */
3010 || o->op_type == OP_SASSIGN
3011 /* eliminated an OP_PADSV */
3012 || (!targmyop && is_targable)
3014 /* definitely a net gain to optimise */
3017 /* ... if not, what else? */
3019 /* special-case '$lex1 = expr . $lex1' (where expr isn't lex1):
3020 * multiconcat is faster (due to not creating a temporary copy of
3021 * $lex1), whereas for a general $lex1 = $lex2 . $lex3, concat is
3027 && topop->op_type == OP_CONCAT
3029 PADOFFSET t = targmyop->op_targ;
3030 OP *k1 = cBINOPx(topop)->op_first;
3031 OP *k2 = cBINOPx(topop)->op_last;
3032 if ( k2->op_type == OP_PADSV
3034 && ( k1->op_type != OP_PADSV
3035 || k1->op_targ != t)
3040 /* need at least two concats */
3041 if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 3)
3046 /* -----------------------------------------------------------------
3049 * At this point the optree has been verified as ok to be optimised
3050 * into an OP_MULTICONCAT. Now start changing things.
3055 /* stringify all const args and determine utf8ness */
3058 for (argp = args; argp <= toparg; argp++) {
3059 SV *sv = (SV*)argp->p;
3061 continue; /* not a const op */
3062 if (utf8 && !SvUTF8(sv))
3063 sv_utf8_upgrade_nomg(sv);
3064 argp->p = SvPV_nomg(sv, argp->len);
3065 total_len += argp->len;
3067 /* see if any strings would grow if converted to utf8 */
3069 char *p = (char*)argp->p;
3070 STRLEN len = argp->len;
3073 if (!UTF8_IS_INVARIANT(c))
3079 /* create and populate aux struct */
3083 aux = (UNOP_AUX_item*)PerlMemShared_malloc(
3084 sizeof(UNOP_AUX_item)
3086 PERL_MULTICONCAT_HEADER_SIZE
3087 + ((nargs + 1) * (variant ? 2 : 1))
3090 const_str = (char *)PerlMemShared_malloc(total_len ? total_len : 1);
3092 /* Extract all the non-const expressions from the concat tree then
3093 * dispose of the old tree, e.g. convert the tree from this:
3097 * STRINGIFY -- TARGET
3099 * ex-PUSHMARK -- CONCAT
3114 * ex-PUSHMARK -- EXPR1 -- EXPR2 -- EXPR3 -- EXPR4 -- EXPR5 -- TARGET
3116 * except that if EXPRi is an OP_CONST, it's discarded.
3118 * During the conversion process, EXPR ops are stripped from the tree
3119 * and unshifted onto o. Finally, any of o's remaining original
3120 * childen are discarded and o is converted into an OP_MULTICONCAT.
3122 * In this middle of this, o may contain both: unshifted args on the
3123 * left, and some remaining original args on the right. lastkidop
3124 * is set to point to the right-most unshifted arg to delineate
3125 * between the two sets.
3130 /* create a copy of the format with the %'s removed, and record
3131 * the sizes of the const string segments in the aux struct */
3133 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3135 p = sprintf_info.start;
3138 for (; p < sprintf_info.end; p++) {
3142 (lenp++)->ssize = q - oldq;
3149 lenp->ssize = q - oldq;
3150 assert((STRLEN)(q - const_str) == total_len);
3152 /* Attach all the args (i.e. the kids of the sprintf) to o (which
3153 * may or may not be topop) The pushmark and const ops need to be
3154 * kept in case they're an op_next entry point.
3156 lastkidop = cLISTOPx(topop)->op_last;
3157 kid = cUNOPx(topop)->op_first; /* pushmark */
3159 op_null(OpSIBLING(kid)); /* const */
3161 kid = op_sibling_splice(topop, NULL, -1, NULL); /* cut all args */
3162 op_sibling_splice(o, NULL, 0, kid); /* and attach to o */
3163 lastkidop->op_next = o;
3168 lenp = aux + PERL_MULTICONCAT_IX_LENGTHS;
3172 /* Concatenate all const strings into const_str.
3173 * Note that args[] contains the RHS args in reverse order, so
3174 * we scan args[] from top to bottom to get constant strings
3177 for (argp = toparg; argp >= args; argp--) {
3179 /* not a const op */
3180 (++lenp)->ssize = -1;
3182 STRLEN l = argp->len;
3183 Copy(argp->p, p, l, char);
3185 if (lenp->ssize == -1)
3196 for (argp = args; argp <= toparg; argp++) {
3197 /* only keep non-const args, except keep the first-in-next-chain
3198 * arg no matter what it is (but nulled if OP_CONST), because it
3199 * may be the entry point to this subtree from the previous
3202 bool last = (argp == toparg);
3205 /* set prev to the sibling *before* the arg to be cut out,
3206 * e.g. when cutting EXPR:
3211 * prev= CONCAT -- EXPR
3214 if (argp == args && kid->op_type != OP_CONCAT) {
3215 /* in e.g. '$x .= f(1)' there's no RHS concat tree
3216 * so the expression to be cut isn't kid->op_last but
3219 /* find the op before kid */
3221 o2 = cUNOPx(parentop)->op_first;
3222 while (o2 && o2 != kid) {
3230 else if (kid == o && lastkidop)
3231 prev = last ? lastkidop : OpSIBLING(lastkidop);
3233 prev = last ? NULL : cUNOPx(kid)->op_first;
3235 if (!argp->p || last) {
3237 OP *aop = op_sibling_splice(kid, prev, 1, NULL);
3238 /* and unshift to front of o */
3239 op_sibling_splice(o, NULL, 0, aop);
3240 /* record the right-most op added to o: later we will
3241 * free anything to the right of it */
3244 aop->op_next = nextop;
3247 /* null the const at start of op_next chain */
3251 nextop = prev->op_next;
3254 /* the last two arguments are both attached to the same concat op */
3255 if (argp < toparg - 1)
3260 /* Populate the aux struct */
3262 aux[PERL_MULTICONCAT_IX_NARGS].ssize = nargs;
3263 aux[PERL_MULTICONCAT_IX_PLAIN_PV].pv = utf8 ? NULL : const_str;
3264 aux[PERL_MULTICONCAT_IX_PLAIN_LEN].ssize = utf8 ? 0 : total_len;
3265 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = const_str;
3266 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = total_len;
3268 /* if variant > 0, calculate a variant const string and lengths where
3269 * the utf8 version of the string will take 'variant' more bytes than
3273 char *p = const_str;
3274 STRLEN ulen = total_len + variant;
3275 UNOP_AUX_item *lens = aux + PERL_MULTICONCAT_IX_LENGTHS;
3276 UNOP_AUX_item *ulens = lens + (nargs + 1);
3277 char *up = (char*)PerlMemShared_malloc(ulen);
3280 aux[PERL_MULTICONCAT_IX_UTF8_PV].pv = up;
3281 aux[PERL_MULTICONCAT_IX_UTF8_LEN].ssize = ulen;
3283 for (n = 0; n < (nargs + 1); n++) {
3285 char * orig_up = up;
3286 for (i = (lens++)->ssize; i > 0; i--) {
3288 append_utf8_from_native_byte(c, (U8**)&up);
3290 (ulens++)->ssize = (i < 0) ? i : up - orig_up;
3295 /* if there was a top(ish)-level OP_STRINGIFY, we need to keep
3296 * that op's first child - an ex-PUSHMARK - because the op_next of
3297 * the previous op may point to it (i.e. it's the entry point for
3302 ? op_sibling_splice(o, lastkidop, 1, NULL)
3303 : op_sibling_splice(stringop, NULL, 1, NULL);
3304 assert(OP_TYPE_IS_OR_WAS_NN(pmop, OP_PUSHMARK));
3305 op_sibling_splice(o, NULL, 0, pmop);
3312 * target .= A.B.C...
3318 if (o->op_type == OP_SASSIGN) {
3319 /* Move the target subtree from being the last of o's children
3320 * to being the last of o's preserved children.
3321 * Note the difference between 'target = ...' and 'target .= ...':
3322 * for the former, target is executed last; for the latter,
3325 kid = OpSIBLING(lastkidop);
3326 op_sibling_splice(o, kid, 1, NULL); /* cut target op */
3327 op_sibling_splice(o, lastkidop, 0, targetop); /* and paste */
3328 lastkidop->op_next = kid->op_next;
3329 lastkidop = targetop;
3332 /* Move the target subtree from being the first of o's
3333 * original children to being the first of *all* o's children.
3336 op_sibling_splice(o, lastkidop, 1, NULL); /* cut target op */
3337 op_sibling_splice(o, NULL, 0, targetop); /* and paste*/
3340 /* if the RHS of .= doesn't contain a concat (e.g.
3341 * $x .= "foo"), it gets missed by the "strip ops from the
3342 * tree and add to o" loop earlier */
3343 assert(topop->op_type != OP_CONCAT);
3345 /* in e.g. $x .= "$y", move the $y expression
3346 * from being a child of OP_STRINGIFY to being the
3347 * second child of the OP_CONCAT
3349 assert(cUNOPx(stringop)->op_first == topop);
3350 op_sibling_splice(stringop, NULL, 1, NULL);
3351 op_sibling_splice(o, cUNOPo->op_first, 0, topop);
3353 assert(topop == OpSIBLING(cBINOPo->op_first));
3362 * my $lex = A.B.C...
3365 * The original padsv op is kept but nulled in case it's the
3366 * entry point for the optree (which it will be for
3369 private_flags |= OPpTARGET_MY;
3370 private_flags |= (targetop->op_private & OPpLVAL_INTRO);
3371 o->op_targ = targetop->op_targ;
3372 targetop->op_targ = 0;
3376 flags |= OPf_STACKED;
3378 else if (targmyop) {
3379 private_flags |= OPpTARGET_MY;
3380 if (o != targmyop) {
3381 o->op_targ = targmyop->op_targ;
3382 targmyop->op_targ = 0;
3386 /* detach the emaciated husk of the sprintf/concat optree and free it */
3388 kid = op_sibling_splice(o, lastkidop, 1, NULL);
3394 /* and convert o into a multiconcat */
3396 o->op_flags = (flags|OPf_KIDS|stacked_last
3397 |(o->op_flags & (OPf_WANT|OPf_PARENS)));
3398 o->op_private = private_flags;
3399 o->op_type = OP_MULTICONCAT;
3400 o->op_ppaddr = PL_ppaddr[OP_MULTICONCAT];
3401 cUNOP_AUXo->op_aux = aux;
3405 /* do all the final processing on an optree (e.g. running the peephole
3406 * optimiser on it), then attach it to cv (if cv is non-null)
3410 S_process_optree(pTHX_ CV *cv, OP *optree, OP* start)
3414 /* XXX for some reason, evals, require and main optrees are
3415 * never attached to their CV; instead they just hang off
3416 * PL_main_root + PL_main_start or PL_eval_root + PL_eval_start
3417 * and get manually freed when appropriate */
3419 startp = &CvSTART(cv);
3421 startp = PL_in_eval? &PL_eval_start : &PL_main_start;
3424 optree->op_private |= OPpREFCOUNTED;
3425 OpREFCNT_set(optree, 1);
3426 optimize_optree(optree);
3428 finalize_optree(optree);
3429 S_prune_chain_head(startp);
3432 /* now that optimizer has done its work, adjust pad values */
3433 pad_tidy(optree->op_type == OP_LEAVEWRITE ? padtidy_FORMAT
3434 : CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
3440 =for apidoc optimize_optree
3442 This function applies some optimisations to the optree in top-down order.
3443 It is called before the peephole optimizer, which processes ops in
3444 execution order. Note that finalize_optree() also does a top-down scan,
3445 but is called *after* the peephole optimizer.
3451 Perl_optimize_optree(pTHX_ OP* o)
3453 PERL_ARGS_ASSERT_OPTIMIZE_OPTREE;
3456 SAVEVPTR(PL_curcop);
3464 /* helper for optimize_optree() which optimises on op then recurses
3465 * to optimise any children.
3469 S_optimize_op(pTHX_ OP* o)
3473 PERL_ARGS_ASSERT_OPTIMIZE_OP;
3474 assert(o->op_type != OP_FREED);
3476 switch (o->op_type) {
3479 PL_curcop = ((COP*)o); /* for warnings */
3487 S_maybe_multiconcat(aTHX_ o);
3491 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
3492 optimize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3499 if (!(o->op_flags & OPf_KIDS))
3502 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
3508 =for apidoc finalize_optree
3510 This function finalizes the optree. Should be called directly after
3511 the complete optree is built. It does some additional
3512 checking which can't be done in the normal C<ck_>xxx functions and makes
3513 the tree thread-safe.
3518 Perl_finalize_optree(pTHX_ OP* o)
3520 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
3523 SAVEVPTR(PL_curcop);
3531 /* Relocate sv to the pad for thread safety.
3532 * Despite being a "constant", the SV is written to,
3533 * for reference counts, sv_upgrade() etc. */
3534 PERL_STATIC_INLINE void
3535 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
3538 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
3540 ix = pad_alloc(OP_CONST, SVf_READONLY);
3541 SvREFCNT_dec(PAD_SVl(ix));
3542 PAD_SETSV(ix, *svp);
3543 /* XXX I don't know how this isn't readonly already. */
3544 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
3552 S_finalize_op(pTHX_ OP* o)
3554 PERL_ARGS_ASSERT_FINALIZE_OP;
3556 assert(o->op_type != OP_FREED);
3558 switch (o->op_type) {
3561 PL_curcop = ((COP*)o); /* for warnings */
3564 if (OpHAS_SIBLING(o)) {
3565 OP *sib = OpSIBLING(o);
3566 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
3567 && ckWARN(WARN_EXEC)
3568 && OpHAS_SIBLING(sib))
3570 const OPCODE type = OpSIBLING(sib)->op_type;
3571 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
3572 const line_t oldline = CopLINE(PL_curcop);
3573 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
3574 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3575 "Statement unlikely to be reached");
3576 Perl_warner(aTHX_ packWARN(WARN_EXEC),
3577 "\t(Maybe you meant system() when you said exec()?)\n");
3578 CopLINE_set(PL_curcop, oldline);
3585 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
3586 GV * const gv = cGVOPo_gv;
3587 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
3588 /* XXX could check prototype here instead of just carping */
3589 SV * const sv = sv_newmortal();
3590 gv_efullname3(sv, gv, NULL);
3591 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3592 "%" SVf "() called too early to check prototype",
3599 if (cSVOPo->op_private & OPpCONST_STRICT)
3600 no_bareword_allowed(o);
3604 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
3609 /* Relocate all the METHOP's SVs to the pad for thread safety. */
3610 case OP_METHOD_NAMED:
3611 case OP_METHOD_SUPER:
3612 case OP_METHOD_REDIR:
3613 case OP_METHOD_REDIR_SUPER:
3614 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
3623 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
3626 rop = (UNOP*)((BINOP*)o)->op_first;
3631 S_scalar_slice_warning(aTHX_ o);
3635 kid = OpSIBLING(cLISTOPo->op_first);
3636 if (/* I bet there's always a pushmark... */
3637 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
3638 && OP_TYPE_ISNT_NN(kid, OP_CONST))
3643 key_op = (SVOP*)(kid->op_type == OP_CONST
3645 : OpSIBLING(kLISTOP->op_first));
3647 rop = (UNOP*)((LISTOP*)o)->op_last;
3650 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
3652 S_check_hash_fields_and_hekify(aTHX_ rop, key_op);
3656 if (o->op_targ != OP_HSLICE && o->op_targ != OP_ASLICE)
3660 S_scalar_slice_warning(aTHX_ o);
3664 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
3665 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
3672 if (o->op_flags & OPf_KIDS) {
3676 /* check that op_last points to the last sibling, and that
3677 * the last op_sibling/op_sibparent field points back to the
3678 * parent, and that the only ops with KIDS are those which are
3679 * entitled to them */
3680 U32 type = o->op_type;
3684 if (type == OP_NULL) {
3686 /* ck_glob creates a null UNOP with ex-type GLOB
3687 * (which is a list op. So pretend it wasn't a listop */
3688 if (type == OP_GLOB)
3691 family = PL_opargs[type] & OA_CLASS_MASK;
3693 has_last = ( family == OA_BINOP
3694 || family == OA_LISTOP
3695 || family == OA_PMOP
3696 || family == OA_LOOP
3698 assert( has_last /* has op_first and op_last, or ...
3699 ... has (or may have) op_first: */
3700 || family == OA_UNOP
3701 || family == OA_UNOP_AUX
3702 || family == OA_LOGOP
3703 || family == OA_BASEOP_OR_UNOP
3704 || family == OA_FILESTATOP
3705 || family == OA_LOOPEXOP
3706 || family == OA_METHOP
3707 || type == OP_CUSTOM
3708 || type == OP_NULL /* new_logop does this */
3711 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
3712 # ifdef PERL_OP_PARENT
3713 if (!OpHAS_SIBLING(kid)) {
3715 assert(kid == cLISTOPo->op_last);
3716 assert(kid->op_sibparent == o);
3719 if (has_last && !OpHAS_SIBLING(kid))
3720 assert(kid == cLISTOPo->op_last);
3725 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
3731 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
3733 Propagate lvalue ("modifiable") context to an op and its children.
3734 C<type> represents the context type, roughly based on the type of op that
3735 would do the modifying, although C<local()> is represented by C<OP_NULL>,
3736 because it has no op type of its own (it is signalled by a flag on
3739 This function detects things that can't be modified, such as C<$x+1>, and
3740 generates errors for them. For example, C<$x+1 = 2> would cause it to be
3741 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
3743 It also flags things that need to behave specially in an lvalue context,
3744 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
3750 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
3753 PadnameLVALUE_on(pn);
3754 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
3756 /* RT #127786: cv can be NULL due to an eval within the DB package
3757 * called from an anon sub - anon subs don't have CvOUTSIDE() set
3758 * unless they contain an eval, but calling eval within DB
3759 * pretends the eval was done in the caller's scope.
3763 assert(CvPADLIST(cv));
3765 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
3766 assert(PadnameLEN(pn));
3767 PadnameLVALUE_on(pn);
3772 S_vivifies(const OPCODE type)
3775 case OP_RV2AV: case OP_ASLICE:
3776 case OP_RV2HV: case OP_KVASLICE:
3777 case OP_RV2SV: case OP_HSLICE:
3778 case OP_AELEMFAST: case OP_KVHSLICE:
3787 S_lvref(pTHX_ OP *o, I32 type)
3791 switch (o->op_type) {
3793 for (kid = OpSIBLING(cUNOPo->op_first); kid;
3794 kid = OpSIBLING(kid))
3795 S_lvref(aTHX_ kid, type);
3800 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
3801 o->op_flags |= OPf_STACKED;
3802 if (o->op_flags & OPf_PARENS) {
3803 if (o->op_private & OPpLVAL_INTRO) {
3804 yyerror(Perl_form(aTHX_ "Can't modify reference to "
3805 "localized parenthesized array in list assignment"));
3809 OpTYPE_set(o, OP_LVAVREF);
3810 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
3811 o->op_flags |= OPf_MOD|OPf_REF;
3814 o->op_private |= OPpLVREF_AV;
3817 kid = cUNOPo->op_first;
3818 if (kid->op_type == OP_NULL)
3819 kid = cUNOPx(OpSIBLING(kUNOP->op_first))
3821 o->op_private = OPpLVREF_CV;
3822 if (kid->op_type == OP_GV)
3823 o->op_flags |= OPf_STACKED;
3824 else if (kid->op_type == OP_PADCV) {
3825 o->op_targ = kid->op_targ;
3827 op_free(cUNOPo->op_first);
3828 cUNOPo->op_first = NULL;
3829 o->op_flags &=~ OPf_KIDS;
3834 if (o->op_flags & OPf_PARENS) {
3836 yyerror(Perl_form(aTHX_ "Can't modify reference to "
3837 "parenthesized hash in list assignment"));
3840 o->op_private |= OPpLVREF_HV;
3844 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
3845 o->op_flags |= OPf_STACKED;
3848 if (o->op_flags & OPf_PARENS) goto parenhash;
3849 o->op_private |= OPpLVREF_HV;
3852 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
3855 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
3856 if (o->op_flags & OPf_PARENS) goto slurpy;
3857 o->op_private |= OPpLVREF_AV;
3861 o->op_private |= OPpLVREF_ELEM;
3862 o->op_flags |= OPf_STACKED;
3866 OpTYPE_set(o, OP_LVREFSLICE);
3867 o->op_private &= OPpLVAL_INTRO;
3870 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
3872 else if (!(o->op_flags & OPf_KIDS))
3874 if (o->op_targ != OP_LIST) {
3875 S_lvref(aTHX_ cBINOPo->op_first, type);
3880 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) {
3881 assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
3882 S_lvref(aTHX_ kid, type);
3886 if (o->op_flags & OPf_PARENS)
3891 /* diag_listed_as: Can't modify reference to %s in %s assignment */
3892 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
3893 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
3899 OpTYPE_set(o, OP_LVREF);
3901 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
3902 if (type == OP_ENTERLOOP)
3903 o->op_private |= OPpLVREF_ITER;
3906 PERL_STATIC_INLINE bool
3907 S_potential_mod_type(I32 type)
3909 /* Types that only potentially result in modification. */
3910 return type == OP_GREPSTART || type == OP_ENTERSUB
3911 || type == OP_REFGEN || type == OP_LEAVESUBLV;
3915 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
3919 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
3922 if (!o || (PL_parser && PL_parser->error_count))
3925 if ((o->op_private & OPpTARGET_MY)
3926 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
3931 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
3933 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
3935 switch (o->op_type) {
3940 if ((o->op_flags & OPf_PARENS))
3944 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
3945 !(o->op_flags & OPf_STACKED)) {
3946 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
3947 assert(cUNOPo->op_first->op_type == OP_NULL);
3948 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
3951 else { /* lvalue subroutine call */
3952 o->op_private |= OPpLVAL_INTRO;
3953 PL_modcount = RETURN_UNLIMITED_NUMBER;
3954 if (S_potential_mod_type(type)) {
3955 o->op_private |= OPpENTERSUB_INARGS;
3958 else { /* Compile-time error message: */
3959 OP *kid = cUNOPo->op_first;
3964 if (kid->op_type != OP_PUSHMARK) {
3965 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
3967 "panic: unexpected lvalue entersub "
3968 "args: type/targ %ld:%" UVuf,
3969 (long)kid->op_type, (UV)kid->op_targ);
3970 kid = kLISTOP->op_first;
3972 while (OpHAS_SIBLING(kid))
3973 kid = OpSIBLING(kid);
3974 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
3975 break; /* Postpone until runtime */
3978 kid = kUNOP->op_first;
3979 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
3980 kid = kUNOP->op_first;
3981 if (kid->op_type == OP_NULL)
3983 "Unexpected constant lvalue entersub "
3984 "entry via type/targ %ld:%" UVuf,
3985 (long)kid->op_type, (UV)kid->op_targ);
3986 if (kid->op_type != OP_GV) {
3993 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
3994 ? MUTABLE_CV(SvRV(gv))
4000 if (flags & OP_LVALUE_NO_CROAK)
4003 namesv = cv_name(cv, NULL, 0);
4004 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
4005 "subroutine call of &%" SVf " in %s",
4006 SVfARG(namesv), PL_op_desc[type]),
4014 if (flags & OP_LVALUE_NO_CROAK) return NULL;
4015 /* grep, foreach, subcalls, refgen */
4016 if (S_potential_mod_type(type))
4018 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
4019 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
4022 type ? PL_op_desc[type] : "local"));
4035 case OP_RIGHT_SHIFT:
4044 if (!(o->op_flags & OPf_STACKED))
4050 if (o->op_flags & OPf_STACKED) {
4054 if (!(o->op_private & OPpREPEAT_DOLIST))
4057 const I32 mods = PL_modcount;
4058 modkids(cBINOPo->op_first, type);
4059 if (type != OP_AASSIGN)
4061 kid = cBINOPo->op_last;
4062 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
4063 const IV iv = SvIV(kSVOP_sv);
4064 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
4066 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
4069 PL_modcount = RETURN_UNLIMITED_NUMBER;
4075 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
4076 op_lvalue(kid, type);
4081 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
4082 PL_modcount = RETURN_UNLIMITED_NUMBER;
4083 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4084 fiable since some contexts need to know. */
4085 o->op_flags |= OPf_MOD;
4090 if (scalar_mod_type(o, type))
4092 ref(cUNOPo->op_first, o->op_type);
4099 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
4100 if (type == OP_LEAVESUBLV && (
4101 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
4102 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4104 o->op_private |= OPpMAYBE_LVSUB;
4108 PL_modcount = RETURN_UNLIMITED_NUMBER;
4113 if (type == OP_LEAVESUBLV)
4114 o->op_private |= OPpMAYBE_LVSUB;
4117 if (type == OP_LEAVESUBLV
4118 && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS)
4119 o->op_private |= OPpMAYBE_LVSUB;
4122 PL_hints |= HINT_BLOCK_SCOPE;
4123 if (type == OP_LEAVESUBLV)
4124 o->op_private |= OPpMAYBE_LVSUB;
4128 ref(cUNOPo->op_first, o->op_type);
4132 PL_hints |= HINT_BLOCK_SCOPE;
4142 case OP_AELEMFAST_LEX:
4149 PL_modcount = RETURN_UNLIMITED_NUMBER;
4150 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
4152 /* Treat \(@foo) like ordinary list, but still mark it as modi-
4153 fiable since some contexts need to know. */
4154 o->op_flags |= OPf_MOD;
4157 if (scalar_mod_type(o, type))
4159 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
4160 && type == OP_LEAVESUBLV)
4161 o->op_private |= OPpMAYBE_LVSUB;
4165 if (!type) /* local() */
4166 Perl_croak(aTHX_ "Can't localize lexical variable %" PNf,
4167 PNfARG(PAD_COMPNAME(o->op_targ)));
4168 if (!(o->op_private & OPpLVAL_INTRO)
4169 || ( type != OP_SASSIGN && type != OP_AASSIGN
4170 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
4171 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
4179 if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type))
4183 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
4189 if (type == OP_LEAVESUBLV)
4190 o->op_private |= OPpMAYBE_LVSUB;
4191 if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) {
4192 /* substr and vec */
4193 /* If this op is in merely potential (non-fatal) modifiable
4194 context, then apply OP_ENTERSUB context to
4195 the kid op (to avoid croaking). Other-
4196 wise pass this op’s own type so the correct op is mentioned
4197 in error messages. */
4198 op_lvalue(OpSIBLING(cBINOPo->op_first),
4199 S_potential_mod_type(type)
4207 ref(cBINOPo->op_first, o->op_type);
4208 if (type == OP_ENTERSUB &&
4209 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
4210 o->op_private |= OPpLVAL_DEFER;
4211 if (type == OP_LEAVESUBLV)
4212 o->op_private |= OPpMAYBE_LVSUB;
4219 o->op_private |= OPpLVALUE;
4225 if (o->op_flags & OPf_KIDS)
4226 op_lvalue(cLISTOPo->op_last, type);
4231 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
4233 else if (!(o->op_flags & OPf_KIDS))
4236 if (o->op_targ != OP_LIST) {
4237 OP *sib = OpSIBLING(cLISTOPo->op_first);
4238 /* OP_TRANS and OP_TRANSR with argument have a weird optree
4245 * compared with things like OP_MATCH which have the argument
4251 * so handle specially to correctly get "Can't modify" croaks etc
4254 if (sib && (sib->op_type == OP_TRANS || sib->op_type == OP_TRANSR))
4256 /* this should trigger a "Can't modify transliteration" err */
4257 op_lvalue(sib, type);
4259 op_lvalue(cBINOPo->op_first, type);
4265 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
4266 /* elements might be in void context because the list is
4267 in scalar context or because they are attribute sub calls */
4268 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
4269 op_lvalue(kid, type);
4277 if (type == OP_LEAVESUBLV
4278 || !S_vivifies(cLOGOPo->op_first->op_type))
4279 op_lvalue(cLOGOPo->op_first, type);
4280 if (type == OP_LEAVESUBLV
4281 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
4282 op_lvalue(OpSIBLING(cLOGOPo->op_first), type);
4286 if (type == OP_NULL) { /* local */
4288 if (!FEATURE_MYREF_IS_ENABLED)
4289 Perl_croak(aTHX_ "The experimental declared_refs "
4290 "feature is not enabled");
4291 Perl_ck_warner_d(aTHX_
4292 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
4293 "Declaring references is experimental");
4294 op_lvalue(cUNOPo->op_first, OP_NULL);
4297 if (type != OP_AASSIGN && type != OP_SASSIGN
4298 && type != OP_ENTERLOOP)
4300 /* Don’t bother applying lvalue context to the ex-list. */
4301 kid = cUNOPx(cUNOPo->op_first)->op_first;
4302 assert (!OpHAS_SIBLING(kid));
4305 if (type == OP_NULL) /* local */
4307 if (type != OP_AASSIGN) goto nomod;
4308 kid = cUNOPo->op_first;
4311 const U8 ec = PL_parser ? PL_parser->error_count : 0;
4312 S_lvref(aTHX_ kid, type);
4313 if (!PL_parser || PL_parser->error_count == ec) {
4314 if (!FEATURE_REFALIASING_IS_ENABLED)
4316 "Experimental aliasing via reference not enabled");
4317 Perl_ck_warner_d(aTHX_
4318 packWARN(WARN_EXPERIMENTAL__REFALIASING),
4319 "Aliasing via reference is experimental");
4322 if (o->op_type == OP_REFGEN)
4323 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
4328 if ((o->op_private & OPpSPLIT_ASSIGN)) {
4329 /* This is actually @array = split. */
4330 PL_modcount = RETURN_UNLIMITED_NUMBER;
4336 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
4340 /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that
4341 their argument is a filehandle; thus \stat(".") should not set
4343 if (type == OP_REFGEN &&
4344 PL_check[o->op_type] == Perl_ck_ftst)
4347 if (type != OP_LEAVESUBLV)
4348 o->op_flags |= OPf_MOD;
4350 if (type == OP_AASSIGN || type == OP_SASSIGN)
4351 o->op_flags |= OPf_SPECIAL
4352 |(o->op_type == OP_ENTERSUB ? 0 : OPf_REF);
4353 else if (!type) { /* local() */
4356 o->op_private |= OPpLVAL_INTRO;
4357 o->op_flags &= ~OPf_SPECIAL;
4358 PL_hints |= HINT_BLOCK_SCOPE;
4363 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
4364 "Useless localization of %s", OP_DESC(o));
4367 else if (type != OP_GREPSTART && type != OP_ENTERSUB
4368 && type != OP_LEAVESUBLV && o->op_type != OP_ENTERSUB)
4369 o->op_flags |= OPf_REF;
4374 S_scalar_mod_type(const OP *o, I32 type)
4379 if (o && o->op_type == OP_RV2GV)
4403 case OP_RIGHT_SHIFT:
4432 S_is_handle_constructor(const OP *o, I32 numargs)
4434 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
4436 switch (o->op_type) {
4444 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
4457 S_refkids(pTHX_ OP *o, I32 type)
4459 if (o && o->op_flags & OPf_KIDS) {
4461 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
4468 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
4473 PERL_ARGS_ASSERT_DOREF;
4475 if (PL_parser && PL_parser->error_count)
4478 switch (o->op_type) {
4480 if ((type == OP_EXISTS || type == OP_DEFINED) &&
4481 !(o->op_flags & OPf_STACKED)) {
4482 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
4483 assert(cUNOPo->op_first->op_type == OP_NULL);
4484 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
4485 o->op_flags |= OPf_SPECIAL;
4487 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
4488 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
4489 : type == OP_RV2HV ? OPpDEREF_HV
4491 o->op_flags |= OPf_MOD;
4497 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
4498 doref(kid, type, set_op_ref);
4501 if (type == OP_DEFINED)
4502 o->op_flags |= OPf_SPECIAL; /* don't create GV */
4503 doref(cUNOPo->op_first, o->op_type, set_op_ref);
4506 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
4507 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
4508 : type == OP_RV2HV ? OPpDEREF_HV
4510 o->op_flags |= OPf_MOD;
4517 o->op_flags |= OPf_REF;
4520 if (type == OP_DEFINED)
4521 o->op_flags |= OPf_SPECIAL; /* don't create GV */
4522 doref(cUNOPo->op_first, o->op_type, set_op_ref);
4528 o->op_flags |= OPf_REF;
4533 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
4535 doref(cBINOPo->op_first, type, set_op_ref);
4539 doref(cBINOPo->op_first, o->op_type, set_op_ref);
4540 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
4541 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
4542 : type == OP_RV2HV ? OPpDEREF_HV
4544 o->op_flags |= OPf_MOD;
4554 if (!(o->op_flags & OPf_KIDS))
4556 doref(cLISTOPo->op_last, type, set_op_ref);
4566 S_dup_attrlist(pTHX_ OP *o)
4570 PERL_ARGS_ASSERT_DUP_ATTRLIST;
4572 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
4573 * where the first kid is OP_PUSHMARK and the remaining ones
4574 * are OP_CONST. We need to push the OP_CONST values.
4576 if (o->op_type == OP_CONST)
4577 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
4579 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
4581 for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) {
4582 if (o->op_type == OP_CONST)
4583 rop = op_append_elem(OP_LIST, rop,
4584 newSVOP(OP_CONST, o->op_flags,
4585 SvREFCNT_inc_NN(cSVOPo->op_sv)));
4592 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
4594 PERL_ARGS_ASSERT_APPLY_ATTRS;
4596 SV * const stashsv = newSVhek(HvNAME_HEK(stash));
4598 /* fake up C<use attributes $pkg,$rv,@attrs> */
4600 #define ATTRSMODULE "attributes"
4601 #define ATTRSMODULE_PM "attributes.pm"
4604 aTHX_ PERL_LOADMOD_IMPORT_OPS,
4605 newSVpvs(ATTRSMODULE),
4607 op_prepend_elem(OP_LIST,
4608 newSVOP(OP_CONST, 0, stashsv),
4609 op_prepend_elem(OP_LIST,
4610 newSVOP(OP_CONST, 0,
4612 dup_attrlist(attrs))));
4617 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
4619 OP *pack, *imop, *arg;
4620 SV *meth, *stashsv, **svp;
4622 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
4627 assert(target->op_type == OP_PADSV ||
4628 target->op_type == OP_PADHV ||
4629 target->op_type == OP_PADAV);
4631 /* Ensure that attributes.pm is loaded. */
4632 /* Don't force the C<use> if we don't need it. */
4633 svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
4634 if (svp && *svp != &PL_sv_undef)
4635 NOOP; /* already in %INC */
4637 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
4638 newSVpvs(ATTRSMODULE), NULL);
4640 /* Need package name for method call. */
4641 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
4643 /* Build up the real arg-list. */
4644 stashsv = newSVhek(HvNAME_HEK(stash));
4646 arg = newOP(OP_PADSV, 0);
4647 arg->op_targ = target->op_targ;
4648 arg = op_prepend_elem(OP_LIST,
4649 newSVOP(OP_CONST, 0, stashsv),
4650 op_prepend_elem(OP_LIST,
4651 newUNOP(OP_REFGEN, 0,
4653 dup_attrlist(attrs)));
4655 /* Fake up a method call to import */
4656 meth = newSVpvs_share("import");
4657 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
4658 op_append_elem(OP_LIST,
4659 op_prepend_elem(OP_LIST, pack, arg),
4660 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
4662 /* Combine the ops. */
4663 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
4667 =notfor apidoc apply_attrs_string
4669 Attempts to apply a list of attributes specified by the C<attrstr> and
4670 C<len> arguments to the subroutine identified by the C<cv> argument which
4671 is expected to be associated with the package identified by the C<stashpv>
4672 argument (see L<attributes>). It gets this wrong, though, in that it
4673 does not correctly identify the boundaries of the individual attribute
4674 specifications within C<attrstr>. This is not really intended for the
4675 public API, but has to be listed here for systems such as AIX which
4676 need an explicit export list for symbols. (It's called from XS code
4677 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
4678 to respect attribute syntax properly would be welcome.
4684 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
4685 const char *attrstr, STRLEN len)
4689 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
4692 len = strlen(attrstr);
4696 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
4698 const char * const sstr = attrstr;
4699 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
4700 attrs = op_append_elem(OP_LIST, attrs,
4701 newSVOP(OP_CONST, 0,
4702 newSVpvn(sstr, attrstr-sstr)));
4706 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
4707 newSVpvs(ATTRSMODULE),
4708 NULL, op_prepend_elem(OP_LIST,
4709 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
4710 op_prepend_elem(OP_LIST,
4711 newSVOP(OP_CONST, 0,
4712 newRV(MUTABLE_SV(cv))),
4717 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name,
4720 OP *new_proto = NULL;
4725 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
4731 if (o->op_type == OP_CONST) {
4732 pv = SvPV(cSVOPo_sv, pvlen);
4733 if (memBEGINs(pv, pvlen, "prototype(")) {
4734 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
4735 SV ** const tmpo = cSVOPx_svp(o);
4736 SvREFCNT_dec(cSVOPo_sv);
4741 } else if (o->op_type == OP_LIST) {
4743 assert(o->op_flags & OPf_KIDS);
4744 lasto = cLISTOPo->op_first;
4745 assert(lasto->op_type == OP_PUSHMARK);
4746 for (o = OpSIBLING(lasto); o; o = OpSIBLING(o)) {
4747 if (o->op_type == OP_CONST) {
4748 pv = SvPV(cSVOPo_sv, pvlen);
4749 if (memBEGINs(pv, pvlen, "prototype(")) {
4750 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
4751 SV ** const tmpo = cSVOPx_svp(o);
4752 SvREFCNT_dec(cSVOPo_sv);
4754 if (new_proto && ckWARN(WARN_MISC)) {
4756 const char * newp = SvPV(cSVOPo_sv, new_len);
4757 Perl_warner(aTHX_ packWARN(WARN_MISC),
4758 "Attribute prototype(%" UTF8f ") discards earlier prototype attribute in same sub",
4759 UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
4765 /* excise new_proto from the list */
4766 op_sibling_splice(*attrs, lasto, 1, NULL);
4773 /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
4774 would get pulled in with no real need */
4775 if (!OpHAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
4784 svname = sv_newmortal();
4785 gv_efullname3(svname, name, NULL);
4787 else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
4788 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
4790 svname = (SV *)name;
4791 if (ckWARN(WARN_ILLEGALPROTO))
4792 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE,
4794 if (*proto && ckWARN(WARN_PROTOTYPE)) {
4795 STRLEN old_len, new_len;
4796 const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
4797 const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
4799 if (curstash && svname == (SV *)name
4800 && !memchr(SvPVX(svname), ':', SvCUR(svname))) {
4801 svname = sv_2mortal(newSVsv(PL_curstname));
4802 sv_catpvs(svname, "::");
4803 sv_catsv(svname, (SV *)name);
4806 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
4807 "Prototype '%" UTF8f "' overridden by attribute 'prototype(%" UTF8f ")'"
4809 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
4810 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
4820 S_cant_declare(pTHX_ OP *o)
4822 if (o->op_type == OP_NULL
4823 && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
4824 o = cUNOPo->op_first;
4825 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
4826 o->op_type == OP_NULL
4827 && o->op_flags & OPf_SPECIAL
4830 PL_parser->in_my == KEY_our ? "our" :
4831 PL_parser->in_my == KEY_state ? "state" :
4836 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
4839 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
4841 PERL_ARGS_ASSERT_MY_KID;
4843 if (!o || (PL_parser && PL_parser->error_count))
4848 if (OP_TYPE_IS_OR_WAS(o, OP_LIST)) {
4850 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
4851 my_kid(kid, attrs, imopsp);
4853 } else if (type == OP_UNDEF || type == OP_STUB) {
4855 } else if (type == OP_RV2SV || /* "our" declaration */
4858 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
4859 S_cant_declare(aTHX_ o);
4861 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
4863 PL_parser->in_my = FALSE;
4864 PL_parser->in_my_stash = NULL;
4865 apply_attrs(GvSTASH(gv),
4866 (type == OP_RV2SV ? GvSVn(gv) :
4867 type == OP_RV2AV ? MUTABLE_SV(GvAVn(gv)) :
4868 type == OP_RV2HV ? MUTABLE_SV(GvHVn(gv)) : MUTABLE_SV(gv)),
4871 o->op_private |= OPpOUR_INTRO;
4874 else if (type == OP_REFGEN || type == OP_SREFGEN) {
4875 if (!FEATURE_MYREF_IS_ENABLED)
4876 Perl_croak(aTHX_ "The experimental declared_refs "
4877 "feature is not enabled");
4878 Perl_ck_warner_d(aTHX_
4879 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
4880 "Declaring references is experimental");
4881 /* Kid is a nulled OP_LIST, handled above. */
4882 my_kid(cUNOPo->op_first, attrs, imopsp);
4885 else if (type != OP_PADSV &&
4888 type != OP_PUSHMARK)
4890 S_cant_declare(aTHX_ o);
4893 else if (attrs && type != OP_PUSHMARK) {
4897 PL_parser->in_my = FALSE;
4898 PL_parser->in_my_stash = NULL;
4900 /* check for C<my Dog $spot> when deciding package */
4901 stash = PAD_COMPNAME_TYPE(o->op_targ);
4903 stash = PL_curstash;
4904 apply_attrs_my(stash, o, attrs, imopsp);
4906 o->op_flags |= OPf_MOD;
4907 o->op_private |= OPpLVAL_INTRO;
4909 o->op_private |= OPpPAD_STATE;
4914 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
4917 int maybe_scalar = 0;
4919 PERL_ARGS_ASSERT_MY_ATTRS;
4921 /* [perl #17376]: this appears to be premature, and results in code such as
4922 C< our(%x); > executing in list mode rather than void mode */
4924 if (o->op_flags & OPf_PARENS)
4934 o = my_kid(o, attrs, &rops);
4936 if (maybe_scalar && o->op_type == OP_PADSV) {
4937 o = scalar(op_append_list(OP_LIST, rops, o));
4938 o->op_private |= OPpLVAL_INTRO;
4941 /* The listop in rops might have a pushmark at the beginning,
4942 which will mess up list assignment. */
4943 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
4944 if (rops->op_type == OP_LIST &&
4945 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
4947 OP * const pushmark = lrops->op_first;
4948 /* excise pushmark */
4949 op_sibling_splice(rops, NULL, 1, NULL);
4952 o = op_append_list(OP_LIST, o, rops);
4955 PL_parser->in_my = FALSE;
4956 PL_parser->in_my_stash = NULL;
4961 Perl_sawparens(pTHX_ OP *o)
4963 PERL_UNUSED_CONTEXT;
4965 o->op_flags |= OPf_PARENS;
4970 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
4974 const OPCODE ltype = left->op_type;
4975 const OPCODE rtype = right->op_type;
4977 PERL_ARGS_ASSERT_BIND_MATCH;
4979 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
4980 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
4982 const char * const desc
4984 rtype == OP_SUBST || rtype == OP_TRANS
4985 || rtype == OP_TRANSR
4987 ? (int)rtype : OP_MATCH];
4988 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
4990 S_op_varname(aTHX_ left);
4992 Perl_warner(aTHX_ packWARN(WARN_MISC),
4993 "Applying %s to %" SVf " will act on scalar(%" SVf ")",
4994 desc, SVfARG(name), SVfARG(name));
4996 const char * const sample = (isary
4997 ? "@array" : "%hash");
4998 Perl_warner(aTHX_ packWARN(WARN_MISC),
4999 "Applying %s to %s will act on scalar(%s)",
5000 desc, sample, sample);
5004 if (rtype == OP_CONST &&
5005 cSVOPx(right)->op_private & OPpCONST_BARE &&
5006 cSVOPx(right)->op_private & OPpCONST_STRICT)
5008 no_bareword_allowed(right);
5011 /* !~ doesn't make sense with /r, so error on it for now */
5012 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
5014 /* diag_listed_as: Using !~ with %s doesn't make sense */
5015 yyerror("Using !~ with s///r doesn't make sense");
5016 if (rtype == OP_TRANSR && type == OP_NOT)
5017 /* diag_listed_as: Using !~ with %s doesn't make sense */
5018 yyerror("Using !~ with tr///r doesn't make sense");
5020 ismatchop = (rtype == OP_MATCH ||
5021 rtype == OP_SUBST ||
5022 rtype == OP_TRANS || rtype == OP_TRANSR)
5023 && !(right->op_flags & OPf_SPECIAL);
5024 if (ismatchop && right->op_private & OPpTARGET_MY) {
5026 right->op_private &= ~OPpTARGET_MY;
5028 if (!(right->op_flags & OPf_STACKED) && !right->op_targ && ismatchop) {
5029 if (left->op_type == OP_PADSV
5030 && !(left->op_private & OPpLVAL_INTRO))
5032 right->op_targ = left->op_targ;
5037 right->op_flags |= OPf_STACKED;
5038 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
5039 ! (rtype == OP_TRANS &&
5040 right->op_private & OPpTRANS_IDENTICAL) &&
5041 ! (rtype == OP_SUBST &&
5042 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
5043 left = op_lvalue(left, rtype);
5044 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
5045 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
5047 o = op_prepend_elem(rtype, scalar(left), right);
5050 return newUNOP(OP_NOT, 0, scalar(o));
5054 return bind_match(type, left,
5055 pmruntime(newPMOP(OP_MATCH, 0), right, NULL, 0, 0));
5059 Perl_invert(pTHX_ OP *o)
5063 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
5067 =for apidoc Amx|OP *|op_scope|OP *o
5069 Wraps up an op tree with some additional ops so that at runtime a dynamic
5070 scope will be created. The original ops run in the new dynamic scope,
5071 and then, provided that they exit normally, the scope will be unwound.
5072 The additional ops used to create and unwind the dynamic scope will
5073 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
5074 instead if the ops are simple enough to not need the full dynamic scope
5081 Perl_op_scope(pTHX_ OP *o)
5085 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
5086 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
5087 OpTYPE_set(o, OP_LEAVE);
5089 else if (o->op_type == OP_LINESEQ) {
5091 OpTYPE_set(o, OP_SCOPE);
5092 kid = ((LISTOP*)o)->op_first;
5093 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
5096 /* The following deals with things like 'do {1 for 1}' */
5097 kid = OpSIBLING(kid);
5099 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
5104 o = newLISTOP(OP_SCOPE, 0, o, NULL);
5110 Perl_op_unscope(pTHX_ OP *o)
5112 if (o && o->op_type == OP_LINESEQ) {
5113 OP *kid = cLISTOPo->op_first;
5114 for(; kid; kid = OpSIBLING(kid))
5115 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
5122 =for apidoc Am|int|block_start|int full
5124 Handles compile-time scope entry.
5125 Arranges for hints to be restored on block
5126 exit and also handles pad sequence numbers to make lexical variables scope
5127 right. Returns a savestack index for use with C<block_end>.
5133 Perl_block_start(pTHX_ int full)
5135 const int retval = PL_savestack_ix;
5137 PL_compiling.cop_seq = PL_cop_seqmax;
5139 pad_block_start(full);
5141 PL_hints &= ~HINT_BLOCK_SCOPE;
5142 SAVECOMPILEWARNINGS();
5143 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
5144 SAVEI32(PL_compiling.cop_seq);
5145 PL_compiling.cop_seq = 0;
5147 CALL_BLOCK_HOOKS(bhk_start, full);
5153 =for apidoc Am|OP *|block_end|I32 floor|OP *seq
5155 Handles compile-time scope exit. C<floor>
5156 is the savestack index returned by
5157 C<block_start>, and C<seq> is the body of the block. Returns the block,
5164 Perl_block_end(pTHX_ I32 floor, OP *seq)
5166 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
5167 OP* retval = scalarseq(seq);
5170 /* XXX Is the null PL_parser check necessary here? */
5171 assert(PL_parser); /* Let’s find out under debugging builds. */
5172 if (PL_parser && PL_parser->parsed_sub) {
5173 o = newSTATEOP(0, NULL, NULL);
5175 retval = op_append_elem(OP_LINESEQ, retval, o);
5178 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
5182 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
5186 /* pad_leavemy has created a sequence of introcv ops for all my
5187 subs declared in the block. We have to replicate that list with
5188 clonecv ops, to deal with this situation:
5193 sub s1 { state sub foo { \&s2 } }
5196 Originally, I was going to have introcv clone the CV and turn
5197 off the stale flag. Since &s1 is declared before &s2, the
5198 introcv op for &s1 is executed (on sub entry) before the one for
5199 &s2. But the &foo sub inside &s1 (which is cloned when &s1 is
5200 cloned, since it is a state sub) closes over &s2 and expects
5201 to see it in its outer CV’s pad. If the introcv op clones &s1,
5202 then &s2 is still marked stale. Since &s1 is not active, and
5203 &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia-
5204 ble will not stay shared’ warning. Because it is the same stub
5205 that will be used when the introcv op for &s2 is executed, clos-
5206 ing over it is safe. Hence, we have to turn off the stale flag
5207 on all lexical subs in the block before we clone any of them.
5208 Hence, having introcv clone the sub cannot work. So we create a
5209 list of ops like this:
5233 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
5234 OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
5235 for (;; kid = OpSIBLING(kid)) {
5236 OP *newkid = newOP(OP_CLONECV, 0);
5237 newkid->op_targ = kid->op_targ;
5238 o = op_append_elem(OP_LINESEQ, o, newkid);
5239 if (kid == last) break;
5241 retval = op_prepend_elem(OP_LINESEQ, o, retval);
5244 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
5250 =head1 Compile-time scope hooks
5252 =for apidoc Aox||blockhook_register
5254 Register a set of hooks to be called when the Perl lexical scope changes
5255 at compile time. See L<perlguts/"Compile-time scope hooks">.
5261 Perl_blockhook_register(pTHX_ BHK *hk)
5263 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
5265 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
5269 Perl_newPROG(pTHX_ OP *o)
5273 PERL_ARGS_ASSERT_NEWPROG;
5280 PL_eval_root = newUNOP(OP_LEAVEEVAL,
5281 ((PL_in_eval & EVAL_KEEPERR)
5282 ? OPf_SPECIAL : 0), o);
5285 assert(CxTYPE(cx) == CXt_EVAL);
5287 if ((cx->blk_gimme & G_WANT) == G_VOID)
5288 scalarvoid(PL_eval_root);
5289 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
5292 scalar(PL_eval_root);
5294 start = op_linklist(PL_eval_root);
5295 PL_eval_root->op_next = 0;
5296 i = PL_savestack_ix;
5299 S_process_optree(aTHX_ NULL, PL_eval_root, start);
5301 PL_savestack_ix = i;
5304 if (o->op_type == OP_STUB) {
5305 /* This block is entered if nothing is compiled for the main
5306 program. This will be the case for an genuinely empty main
5307 program, or one which only has BEGIN blocks etc, so already
5310 Historically (5.000) the guard above was !o. However, commit
5311 f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
5312 c71fccf11fde0068, changed perly.y so that newPROG() is now
5313 called with the output of block_end(), which returns a new
5314 OP_STUB for the case of an empty optree. ByteLoader (and
5315 maybe other things) also take this path, because they set up
5316 PL_main_start and PL_main_root directly, without generating an
5319 If the parsing the main program aborts (due to parse errors,
5320 or due to BEGIN or similar calling exit), then newPROG()
5321 isn't even called, and hence this code path and its cleanups
5322 are skipped. This shouldn't make a make a difference:
5323 * a non-zero return from perl_parse is a failure, and
5324 perl_destruct() should be called immediately.
5325 * however, if exit(0) is called during the parse, then
5326 perl_parse() returns 0, and perl_run() is called. As
5327 PL_main_start will be NULL, perl_run() will return
5328 promptly, and the exit code will remain 0.
5331 PL_comppad_name = 0;
5333 S_op_destroy(aTHX_ o);
5336 PL_main_root = op_scope(sawparens(scalarvoid(o)));
5337 PL_curcop = &PL_compiling;
5338 start = LINKLIST(PL_main_root);
5339 PL_main_root->op_next = 0;
5340 S_process_optree(aTHX_ NULL, PL_main_root, start);
5341 cv_forget_slab(PL_compcv);
5344 /* Register with debugger */
5346 CV * const cv = get_cvs("DB::postponed", 0);
5350 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
5352 call_sv(MUTABLE_SV(cv), G_DISCARD);
5359 Perl_localize(pTHX_ OP *o, I32 lex)
5361 PERL_ARGS_ASSERT_LOCALIZE;
5363 if (o->op_flags & OPf_PARENS)
5364 /* [perl #17376]: this appears to be premature, and results in code such as
5365 C< our(%x); > executing in list mode rather than void mode */
5372 if ( PL_parser->bufptr > PL_parser->oldbufptr
5373 && PL_parser->bufptr[-1] == ','
5374 && ckWARN(WARN_PARENTHESIS))
5376 char *s = PL_parser->bufptr;
5379 /* some heuristics to detect a potential error */
5380 while (*s && (strchr(", \t\n", *s)))
5384 if (*s && (strchr("@$%", *s) || (!lex && *s == '*'))
5386 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
5389 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
5391 while (*s && (strchr(", \t\n", *s)))
5397 if (sigil && (*s == ';' || *s == '=')) {
5398 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
5399 "Parentheses missing around \"%s\" list",
5401 ? (PL_parser->in_my == KEY_our
5403 : PL_parser->in_my == KEY_state
5413 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
5414 PL_parser->in_my = FALSE;
5415 PL_parser->in_my_stash = NULL;
5420 Perl_jmaybe(pTHX_ OP *o)
5422 PERL_ARGS_ASSERT_JMAYBE;
5424 if (o->op_type == OP_LIST) {
5426 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
5427 o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
5432 PERL_STATIC_INLINE OP *
5433 S_op_std_init(pTHX_ OP *o)
5435 I32 type = o->op_type;
5437 PERL_ARGS_ASSERT_OP_STD_INIT;
5439 if (PL_opargs[type] & OA_RETSCALAR)
5441 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
5442 o->op_targ = pad_alloc(type, SVs_PADTMP);
5447 PERL_STATIC_INLINE OP *
5448 S_op_integerize(pTHX_ OP *o)
5450 I32 type = o->op_type;
5452 PERL_ARGS_ASSERT_OP_INTEGERIZE;
5454 /* integerize op. */
5455 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
5458 o->op_ppaddr = PL_ppaddr[++(o->op_type)];
5461 if (type == OP_NEGATE)
5462 /* XXX might want a ck_negate() for this */
5463 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
5469 S_fold_constants(pTHX_ OP *const o)
5472 OP * volatile curop;
5474 volatile I32 type = o->op_type;
5476 SV * volatile sv = NULL;
5479 SV * const oldwarnhook = PL_warnhook;
5480 SV * const olddiehook = PL_diehook;
5482 U8 oldwarn = PL_dowarn;
5486 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
5488 if (!(PL_opargs[type] & OA_FOLDCONST))
5497 #ifdef USE_LOCALE_CTYPE
5498 if (IN_LC_COMPILETIME(LC_CTYPE))
5507 #ifdef USE_LOCALE_COLLATE
5508 if (IN_LC_COMPILETIME(LC_COLLATE))
5513 /* XXX what about the numeric ops? */
5514 #ifdef USE_LOCALE_NUMERIC
5515 if (IN_LC_COMPILETIME(LC_NUMERIC))
5520 if (!OpHAS_SIBLING(cLISTOPo->op_first)
5521 || OpSIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
5524 SV * const sv = cSVOPx_sv(OpSIBLING(cLISTOPo->op_first));
5525 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
5527 const char *s = SvPVX_const(sv);
5528 while (s < SvEND(sv)) {
5529 if (isALPHA_FOLD_EQ(*s, 'p')) goto nope;
5536 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
5539 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
5540 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
5544 if (PL_parser && PL_parser->error_count)
5545 goto nope; /* Don't try to run w/ errors */
5547 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
5548 switch (curop->op_type) {
5550 if ( (curop->op_private & OPpCONST_BARE)
5551 && (curop->op_private & OPpCONST_STRICT)) {
5552 no_bareword_allowed(curop);
5560 /* Foldable; move to next op in list */
5564 /* No other op types are considered foldable */
5569 curop = LINKLIST(o);
5570 old_next = o->op_next;
5574 old_cxix = cxstack_ix;
5575 create_eval_scope(NULL, G_FAKINGEVAL);
5577 /* Verify that we don't need to save it: */
5578 assert(PL_curcop == &PL_compiling);
5579 StructCopy(&PL_compiling, ¬_compiling, COP);
5580 PL_curcop = ¬_compiling;
5581 /* The above ensures that we run with all the correct hints of the
5582 currently compiling COP, but that IN_PERL_RUNTIME is true. */
5583 assert(IN_PERL_RUNTIME);
5584 PL_warnhook = PERL_WARNHOOK_FATAL;
5588 /* Effective $^W=1. */
5589 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
5590 PL_dowarn |= G_WARN_ON;
5595 sv = *(PL_stack_sp--);
5596 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
5597 pad_swipe(o->op_targ, FALSE);
5599 else if (SvTEMP(sv)) { /* grab mortal temp? */
5600 SvREFCNT_inc_simple_void(sv);
5603 else { assert(SvIMMORTAL(sv)); }
5606 /* Something tried to die. Abandon constant folding. */
5607 /* Pretend the error never happened. */
5609 o->op_next = old_next;
5613 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
5614 PL_warnhook = oldwarnhook;
5615 PL_diehook = olddiehook;
5616 /* XXX note that this croak may fail as we've already blown away
5617 * the stack - eg any nested evals */
5618 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
5621 PL_dowarn = oldwarn;
5622 PL_warnhook = oldwarnhook;
5623 PL_diehook = olddiehook;
5624 PL_curcop = &PL_compiling;
5626 /* if we croaked, depending on how we croaked the eval scope
5627 * may or may not have already been popped */
5628 if (cxstack_ix > old_cxix) {
5629 assert(cxstack_ix == old_cxix + 1);
5630 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
5631 delete_eval_scope();
5636 /* OP_STRINGIFY and constant folding are used to implement qq.
5637 Here the constant folding is an implementation detail that we
5638 want to hide. If the stringify op is itself already marked
5639 folded, however, then it is actually a folded join. */
5640 is_stringify = type == OP_STRINGIFY && !o->op_folded;
5645 else if (!SvIMMORTAL(sv)) {
5649 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
5650 if (!is_stringify) newop->op_folded = 1;
5658 S_gen_constant_list(pTHX_ OP *o)
5661 OP *curop, *old_next;
5662 SV * const oldwarnhook = PL_warnhook;
5663 SV * const olddiehook = PL_diehook;
5665 U8 oldwarn = PL_dowarn;
5675 if (PL_parser && PL_parser->error_count)
5676 return o; /* Don't attempt to run with errors */
5678 curop = LINKLIST(o);
5679 old_next = o->op_next;
5681 op_was_null = o->op_type == OP_NULL;
5682 if (op_was_null) /* b3698342565fb462291fba4b432cfcd05b6eb4e1 */
5683 o->op_type = OP_CUSTOM;
5686 o->op_type = OP_NULL;
5687 S_prune_chain_head(&curop);
5690 old_cxix = cxstack_ix;
5691 create_eval_scope(NULL, G_FAKINGEVAL);
5693 old_curcop = PL_curcop;
5694 StructCopy(old_curcop, ¬_compiling, COP);
5695 PL_curcop = ¬_compiling;
5696 /* The above ensures that we run with all the correct hints of the
5697 current COP, but that IN_PERL_RUNTIME is true. */
5698 assert(IN_PERL_RUNTIME);
5699 PL_warnhook = PERL_WARNHOOK_FATAL;
5703 /* Effective $^W=1. */
5704 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
5705 PL_dowarn |= G_WARN_ON;
5709 #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY
5710 PL_curstackinfo->si_stack_hwm = 0; /* stop valgrind complaining */
5712 Perl_pp_pushmark(aTHX);
5715 assert (!(curop->op_flags & OPf_SPECIAL));
5716 assert(curop->op_type == OP_RANGE);
5717 Perl_pp_anonlist(aTHX);
5721 o->op_next = old_next;
5725 PL_warnhook = oldwarnhook;
5726 PL_diehook = olddiehook;
5727 Perl_croak(aTHX_ "panic: gen_constant_list JMPENV_PUSH returned %d",
5732 PL_dowarn = oldwarn;
5733 PL_warnhook = oldwarnhook;
5734 PL_diehook = olddiehook;
5735 PL_curcop = old_curcop;
5737 if (cxstack_ix > old_cxix) {
5738 assert(cxstack_ix == old_cxix + 1);
5739 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
5740 delete_eval_scope();
5745 OpTYPE_set(o, OP_RV2AV);
5746 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
5747 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
5748 o->op_opt = 0; /* needs to be revisited in rpeep() */
5749 av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
5751 /* replace subtree with an OP_CONST */
5752 curop = ((UNOP*)o)->op_first;
5753 op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
5756 if (AvFILLp(av) != -1)
5757 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
5760 SvREADONLY_on(*svp);
5767 =head1 Optree Manipulation Functions
5770 /* List constructors */
5773 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
5775 Append an item to the list of ops contained directly within a list-type
5776 op, returning the lengthened list. C<first> is the list-type op,
5777 and C<last> is the op to append to the list. C<optype> specifies the
5778 intended opcode for the list. If C<first> is not already a list of the
5779 right type, it will be upgraded into one. If either C<first> or C<last>
5780 is null, the other is returned unchanged.
5786 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
5794 if (first->op_type != (unsigned)type
5795 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
5797 return newLISTOP(type, 0, first, last);
5800 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
5801 first->op_flags |= OPf_KIDS;
5806 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
5808 Concatenate the lists of ops contained directly within two list-type ops,
5809 returning the combined list. C<first> and C<last> are the list-type ops
5810 to concatenate. C<optype> specifies the intended opcode for the list.
5811 If either C<first> or C<last> is not already a list of the right type,
5812 it will be upgraded into one. If either C<first> or C<last> is null,
5813 the other is returned unchanged.
5819 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
5827 if (first->op_type != (unsigned)type)
5828 return op_prepend_elem(type, first, last);
5830 if (last->op_type != (unsigned)type)
5831 return op_append_elem(type, first, last);
5833 OpMORESIB_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first);
5834 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
5835 OpLASTSIB_set(((LISTOP*)first)->op_last, first);
5836 first->op_flags |= (last->op_flags & OPf_KIDS);
5838 S_op_destroy(aTHX_ last);
5844 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
5846 Prepend an item to the list of ops contained directly within a list-type
5847 op, returning the lengthened list. C<first> is the op to prepend to the
5848 list, and C<last> is the list-type op. C<optype> specifies the intended
5849 opcode for the list. If C<last> is not already a list of the right type,
5850 it will be upgraded into one. If either C<first> or C<last> is null,
5851 the other is returned unchanged.
5857 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
5865 if (last->op_type == (unsigned)type) {
5866 if (type == OP_LIST) { /* already a PUSHMARK there */
5867 /* insert 'first' after pushmark */
5868 op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first);
5869 if (!(first->op_flags & OPf_PARENS))
5870 last->op_flags &= ~OPf_PARENS;
5873 op_sibling_splice(last, NULL, 0, first);
5874 last->op_flags |= OPf_KIDS;
5878 return newLISTOP(type, 0, first, last);
5882 =for apidoc Am|OP *|op_convert_list|I32 type|I32 flags|OP *o
5884 Converts C<o> into a list op if it is not one already, and then converts it
5885 into the specified C<type>, calling its check function, allocating a target if
5886 it needs one, and folding constants.
5888 A list-type op is usually constructed one kid at a time via C<newLISTOP>,
5889 C<op_prepend_elem> and C<op_append_elem>. Then finally it is passed to
5890 C<op_convert_list> to make it the right type.
5896 Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o)
5899 if (type < 0) type = -type, flags |= OPf_SPECIAL;
5900 if (!o || o->op_type != OP_LIST)
5901 o = force_list(o, 0);
5904 o->op_flags &= ~OPf_WANT;
5905 o->op_private &= ~OPpLVAL_INTRO;
5908 if (!(PL_opargs[type] & OA_MARK))
5909 op_null(cLISTOPo->op_first);
5911 OP * const kid2 = OpSIBLING(cLISTOPo->op_first);
5912 if (kid2 && kid2->op_type == OP_COREARGS) {
5913 op_null(cLISTOPo->op_first);
5914 kid2->op_private |= OPpCOREARGS_PUSHMARK;
5918 if (type != OP_SPLIT)
5919 /* At this point o is a LISTOP, but OP_SPLIT is a PMOP; let
5920 * ck_split() create a real PMOP and leave the op's type as listop
5921 * for now. Otherwise op_free() etc will crash.
5923 OpTYPE_set(o, type);
5925 o->op_flags |= flags;
5926 if (flags & OPf_FOLDED)
5929 o = CHECKOP(type, o);
5930 if (o->op_type != (unsigned)type)
5933 return fold_constants(op_integerize(op_std_init(o)));
5940 =head1 Optree construction
5942 =for apidoc Am|OP *|newNULLLIST
5944 Constructs, checks, and returns a new C<stub> op, which represents an
5945 empty list expression.
5951 Perl_newNULLLIST(pTHX)
5953 return newOP(OP_STUB, 0);
5956 /* promote o and any siblings to be a list if its not already; i.e.
5964 * pushmark - o - A - B
5966 * If nullit it true, the list op is nulled.
5970 S_force_list(pTHX_ OP *o, bool nullit)
5972 if (!o || o->op_type != OP_LIST) {
5975 /* manually detach any siblings then add them back later */
5976 rest = OpSIBLING(o);
5977 OpLASTSIB_set(o, NULL);
5979 o = newLISTOP(OP_LIST, 0, o, NULL);
5981 op_sibling_splice(o, cLISTOPo->op_last, 0, rest);
5989 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
5991 Constructs, checks, and returns an op of any list type. C<type> is
5992 the opcode. C<flags> gives the eight bits of C<op_flags>, except that
5993 C<OPf_KIDS> will be set automatically if required. C<first> and C<last>
5994 supply up to two ops to be direct children of the list op; they are
5995 consumed by this function and become part of the constructed op tree.
5997 For most list operators, the check function expects all the kid ops to be
5998 present already, so calling C<newLISTOP(OP_JOIN, ...)> (e.g.) is not
5999 appropriate. What you want to do in that case is create an op of type
6000 C<OP_LIST>, append more children to it, and then call L</op_convert_list>.
6001 See L</op_convert_list> for more information.
6008 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
6013 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP
6014 || type == OP_CUSTOM);
6016 NewOp(1101, listop, 1, LISTOP);
6018 OpTYPE_set(listop, type);
6021 listop->op_flags = (U8)flags;
6025 else if (!first && last)
6028 OpMORESIB_set(first, last);
6029 listop->op_first = first;
6030 listop->op_last = last;
6031 if (type == OP_LIST) {
6032 OP* const pushop = newOP(OP_PUSHMARK, 0);
6033 OpMORESIB_set(pushop, first);
6034 listop->op_first = pushop;
6035 listop->op_flags |= OPf_KIDS;
6037 listop->op_last = pushop;
6039 if (listop->op_last)
6040 OpLASTSIB_set(listop->op_last, (OP*)listop);
6042 return CHECKOP(type, listop);
6046 =for apidoc Am|OP *|newOP|I32 type|I32 flags
6048 Constructs, checks, and returns an op of any base type (any type that
6049 has no extra fields). C<type> is the opcode. C<flags> gives the
6050 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
6057 Perl_newOP(pTHX_ I32 type, I32 flags)
6062 if (type == -OP_ENTEREVAL) {
6063 type = OP_ENTEREVAL;
6064 flags |= OPpEVAL_BYTES<<8;
6067 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
6068 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
6069 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
6070 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
6072 NewOp(1101, o, 1, OP);
6073 OpTYPE_set(o, type);
6074 o->op_flags = (U8)flags;
6077 o->op_private = (U8)(0 | (flags >> 8));
6078 if (PL_opargs[type] & OA_RETSCALAR)
6080 if (PL_opargs[type] & OA_TARGET)
6081 o->op_targ = pad_alloc(type, SVs_PADTMP);
6082 return CHECKOP(type, o);
6086 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
6088 Constructs, checks, and returns an op of any unary type. C<type> is
6089 the opcode. C<flags> gives the eight bits of C<op_flags>, except that
6090 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
6091 bits, the eight bits of C<op_private>, except that the bit with value 1
6092 is automatically set. C<first> supplies an optional op to be the direct
6093 child of the unary op; it is consumed by this function and become part
6094 of the constructed op tree.
6100 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
6105 if (type == -OP_ENTEREVAL) {
6106 type = OP_ENTEREVAL;
6107 flags |= OPpEVAL_BYTES<<8;
6110 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
6111 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
6112 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
6113 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
6114 || type == OP_SASSIGN
6115 || type == OP_ENTERTRY
6116 || type == OP_CUSTOM
6117 || type == OP_NULL );
6120 first = newOP(OP_STUB, 0);
6121 if (PL_opargs[type] & OA_MARK)
6122 first = force_list(first, 1);
6124 NewOp(1101, unop, 1, UNOP);
6125 OpTYPE_set(unop, type);
6126 unop->op_first = first;
6127 unop->op_flags = (U8)(flags | OPf_KIDS);
6128 unop->op_private = (U8)(1 | (flags >> 8));
6130 if (!OpHAS_SIBLING(first)) /* true unless weird syntax error */
6131 OpLASTSIB_set(first, (OP*)unop);
6133 unop = (UNOP*) CHECKOP(type, unop);
6137 return fold_constants(op_integerize(op_std_init((OP *) unop)));
6141 =for apidoc newUNOP_AUX
6143 Similar to C<newUNOP>, but creates an C<UNOP_AUX> struct instead, with C<op_aux>
6144 initialised to C<aux>
6150 Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags, OP *first, UNOP_AUX_item *aux)
6155 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP_AUX
6156 || type == OP_CUSTOM);
6158 NewOp(1101, unop, 1, UNOP_AUX);
6159 unop->op_type = (OPCODE)type;
6160 unop->op_ppaddr = PL_ppaddr[type];
6161 unop->op_first = first;
6162 unop->op_flags = (U8)(flags | (first ? OPf_KIDS : 0));
6163 unop->op_private = (U8)((first ? 1 : 0) | (flags >> 8));
6166 if (first && !OpHAS_SIBLING(first)) /* true unless weird syntax error */
6167 OpLASTSIB_set(first, (OP*)unop);
6169 unop = (UNOP_AUX*) CHECKOP(type, unop);
6171 return op_std_init((OP *) unop);
6175 =for apidoc Am|OP *|newMETHOP|I32 type|I32 flags|OP *first
6177 Constructs, checks, and returns an op of method type with a method name
6178 evaluated at runtime. C<type> is the opcode. C<flags> gives the eight
6179 bits of C<op_flags>, except that C<OPf_KIDS> will be set automatically,
6180 and, shifted up eight bits, the eight bits of C<op_private>, except that
6181 the bit with value 1 is automatically set. C<dynamic_meth> supplies an
6182 op which evaluates method name; it is consumed by this function and
6183 become part of the constructed op tree.
6184 Supported optypes: C<OP_METHOD>.
6190 S_newMETHOP_internal(pTHX_ I32 type, I32 flags, OP* dynamic_meth, SV* const_meth) {
6194 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_METHOP
6195 || type == OP_CUSTOM);
6197 NewOp(1101, methop, 1, METHOP);
6199 if (PL_opargs[type] & OA_MARK) dynamic_meth = force_list(dynamic_meth, 1);
6200 methop->op_flags = (U8)(flags | OPf_KIDS);
6201 methop->op_u.op_first = dynamic_meth;
6202 methop->op_private = (U8)(1 | (flags >> 8));
6204 if (!OpHAS_SIBLING(dynamic_meth))
6205 OpLASTSIB_set(dynamic_meth, (OP*)methop);
6209 methop->op_flags = (U8)(flags & ~OPf_KIDS);
6210 methop->op_u.op_meth_sv = const_meth;
6211 methop->op_private = (U8)(0 | (flags >> 8));
6212 methop->op_next = (OP*)methop;
6216 methop->op_rclass_targ = 0;
6218 methop->op_rclass_sv = NULL;
6221 OpTYPE_set(methop, type);
6222 return CHECKOP(type, methop);
6226 Perl_newMETHOP (pTHX_ I32 type, I32 flags, OP* dynamic_meth) {
6227 PERL_ARGS_ASSERT_NEWMETHOP;
6228 return newMETHOP_internal(type, flags, dynamic_meth, NULL);
6232 =for apidoc Am|OP *|newMETHOP_named|I32 type|I32 flags|SV *const_meth
6234 Constructs, checks, and returns an op of method type with a constant
6235 method name. C<type> is the opcode. C<flags> gives the eight bits of
6236 C<op_flags>, and, shifted up eight bits, the eight bits of
6237 C<op_private>. C<const_meth> supplies a constant method name;
6238 it must be a shared COW string.
6239 Supported optypes: C<OP_METHOD_NAMED>.
6245 Perl_newMETHOP_named (pTHX_ I32 type, I32 flags, SV* const_meth) {
6246 PERL_ARGS_ASSERT_NEWMETHOP_NAMED;
6247 return newMETHOP_internal(type, flags, NULL, const_meth);
6251 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
6253 Constructs, checks, and returns an op of any binary type. C<type>
6254 is the opcode. C<flags> gives the eight bits of C<op_flags>, except
6255 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
6256 the eight bits of C<op_private>, except that the bit with value 1 or
6257 2 is automatically set as required. C<first> and C<last> supply up to
6258 two ops to be the direct children of the binary op; they are consumed
6259 by this function and become part of the constructed op tree.
6265 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
6270 ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
6271 || type == OP_NULL || type == OP_CUSTOM);
6273 NewOp(1101, binop, 1, BINOP);
6276 first = newOP(OP_NULL, 0);
6278 OpTYPE_set(binop, type);
6279 binop->op_first = first;
6280 binop->op_flags = (U8)(flags | OPf_KIDS);
6283 binop->op_private = (U8)(1 | (flags >> 8));
6286 binop->op_private = (U8)(2 | (flags >> 8));
6287 OpMORESIB_set(first, last);
6290 if (!OpHAS_SIBLING(last)) /* true unless weird syntax error */
6291 OpLASTSIB_set(last, (OP*)binop);
6293 binop->op_last = OpSIBLING(binop->op_first);
6295 OpLASTSIB_set(binop->op_last, (OP*)binop);
6297 binop = (BINOP*)CHECKOP(type, binop);
6298 if (binop->op_next || binop->op_type != (OPCODE)type)
6301 return fold_constants(op_integerize(op_std_init((OP *)binop)));
6304 /* Helper function for S_pmtrans(): comparison function to sort an array
6305 * of codepoint range pairs. Sorts by start point, or if equal, by end
6308 static int uvcompare(const void *a, const void *b)
6309 __attribute__nonnull__(1)
6310 __attribute__nonnull__(2)
6311 __attribute__pure__;
6312 static int uvcompare(const void *a, const void *b)
6314 if (*((const UV *)a) < (*(const UV *)b))
6316 if (*((const UV *)a) > (*(const UV *)b))
6318 if (*((const UV *)a+1) < (*(const UV *)b+1))
6320 if (*((const UV *)a+1) > (*(const UV *)b+1))
6325 /* Given an OP_TRANS / OP_TRANSR op o, plus OP_CONST ops expr and repl
6326 * containing the search and replacement strings, assemble into
6327 * a translation table attached as o->op_pv.
6328 * Free expr and repl.
6329 * It expects the toker to have already set the
6330 * OPpTRANS_COMPLEMENT
6333 * flags as appropriate; this function may add
6336 * OPpTRANS_IDENTICAL
6342 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
6344 SV * const tstr = ((SVOP*)expr)->op_sv;
6345 SV * const rstr = ((SVOP*)repl)->op_sv;
6348 const U8 *t = (U8*)SvPV_const(tstr, tlen);
6349 const U8 *r = (U8*)SvPV_const(rstr, rlen);
6353 SSize_t struct_size; /* malloced size of table struct */
6355 const bool complement = cBOOL(o->op_private & OPpTRANS_COMPLEMENT);
6356 const bool squash = cBOOL(o->op_private & OPpTRANS_SQUASH);
6357 const bool del = cBOOL(o->op_private & OPpTRANS_DELETE);
6360 PERL_ARGS_ASSERT_PMTRANS;
6362 PL_hints |= HINT_BLOCK_SCOPE;
6365 o->op_private |= OPpTRANS_FROM_UTF;
6368 o->op_private |= OPpTRANS_TO_UTF;
6370 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
6372 /* for utf8 translations, op_sv will be set to point to a swash
6373 * containing codepoint ranges. This is done by first assembling
6374 * a textual representation of the ranges in listsv then compiling
6375 * it using swash_init(). For more details of the textual format,
6376 * see L<perlunicode.pod/"User-Defined Character Properties"> .
6379 SV* const listsv = newSVpvs("# comment\n");
6381 const U8* tend = t + tlen;
6382 const U8* rend = r + rlen;
6398 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
6399 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
6402 const U32 flags = UTF8_ALLOW_DEFAULT;
6406 t = tsave = bytes_to_utf8(t, &len);
6409 if (!to_utf && rlen) {
6411 r = rsave = bytes_to_utf8(r, &len);
6415 /* There is a snag with this code on EBCDIC: scan_const() in toke.c has
6416 * encoded chars in native encoding which makes ranges in the EBCDIC 0..255
6421 * replace t/tlen/tend with a version that has the ranges
6424 U8 tmpbuf[UTF8_MAXBYTES+1];
6427 Newx(cp, 2*tlen, UV);
6429 transv = newSVpvs("");
6431 /* convert search string into array of (start,end) range
6432 * codepoint pairs stored in cp[]. Most "ranges" will start
6433 * and end at the same char */
6435 cp[2*i] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
6437 /* the toker converts X-Y into (X, ILLEGAL_UTF8_BYTE, Y) */
6438 if (t < tend && *t == ILLEGAL_UTF8_BYTE) {
6440 cp[2*i+1] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
6444 cp[2*i+1] = cp[2*i];
6449 /* sort the ranges */
6450 qsort(cp, i, 2*sizeof(UV), uvcompare);
6452 /* Create a utf8 string containing the complement of the
6453 * codepoint ranges. For example if cp[] contains [A,B], [C,D],
6454 * then transv will contain the equivalent of:
6455 * join '', map chr, 0, ILLEGAL_UTF8_BYTE, A - 1,
6456 * B + 1, ILLEGAL_UTF8_BYTE, C - 1,
6457 * D + 1, ILLEGAL_UTF8_BYTE, 0x7fffffff;
6458 * A range of a single char skips the ILLEGAL_UTF8_BYTE and
6461 for (j = 0; j < i; j++) {
6463 diff = val - nextmin;
6465 t = uvchr_to_utf8(tmpbuf,nextmin);
6466 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
6468 U8 range_mark = ILLEGAL_UTF8_BYTE;
6469 t = uvchr_to_utf8(tmpbuf, val - 1);
6470 sv_catpvn(transv, (char *)&range_mark, 1);
6471 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
6479 t = uvchr_to_utf8(tmpbuf,nextmin);
6480 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
6482 U8 range_mark = ILLEGAL_UTF8_BYTE;
6483 sv_catpvn(transv, (char *)&range_mark, 1);
6485 t = uvchr_to_utf8(tmpbuf, 0x7fffffff);
6486 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
6487 t = (const U8*)SvPVX_const(transv);
6488 tlen = SvCUR(transv);
6492 else if (!rlen && !del) {
6493 r = t; rlen = tlen; rend = tend;
6497 if ((!rlen && !del) || t == r ||
6498 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
6500 o->op_private |= OPpTRANS_IDENTICAL;
6504 /* extract char ranges from t and r and append them to listsv */
6506 while (t < tend || tfirst <= tlast) {
6507 /* see if we need more "t" chars */
6508 if (tfirst > tlast) {
6509 tfirst = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
6511 if (t < tend && *t == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
6513 tlast = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
6520 /* now see if we need more "r" chars */
6521 if (rfirst > rlast) {
6523 rfirst = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
6525 if (r < rend && *r == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
6527 rlast = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
6536 rfirst = rlast = 0xffffffff;
6540 /* now see which range will peter out first, if either. */
6541 tdiff = tlast - tfirst;
6542 rdiff = rlast - rfirst;
6543 tcount += tdiff + 1;
6544 rcount += rdiff + 1;
6551 if (rfirst == 0xffffffff) {
6552 diff = tdiff; /* oops, pretend rdiff is infinite */
6554 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
6555 (long)tfirst, (long)tlast);
6557 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
6561 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
6562 (long)tfirst, (long)(tfirst + diff),
6565 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
6566 (long)tfirst, (long)rfirst);
6568 if (rfirst + diff > max)
6569 max = rfirst + diff;
6571 grows = (tfirst < rfirst &&
6572 UVCHR_SKIP(tfirst) < UVCHR_SKIP(rfirst + diff));
6578 /* compile listsv into a swash and attach to o */
6586 else if (max > 0xff)
6591 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
6593 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVf_READONLY);
6594 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
6595 PAD_SETSV(cPADOPo->op_padix, swash);
6597 SvREADONLY_on(swash);
6599 cSVOPo->op_sv = swash;
6601 SvREFCNT_dec(listsv);
6602 SvREFCNT_dec(transv);
6604 if (!del && havefinal && rlen)
6605 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
6606 newSVuv((UV)final), 0);
6615 else if (rlast == 0xffffffff)
6621 /* Non-utf8 case: set o->op_pv to point to a simple 256+ entry lookup
6622 * table. Entries with the value -1 indicate chars not to be
6623 * translated, while -2 indicates a search char without a
6624 * corresponding replacement char under /d.
6626 * Normally, the table has 256 slots. However, in the presence of
6627 * /c, the search charlist has an implicit \x{100}-\x{7fffffff}
6628 * added, and if there are enough replacement chars to start pairing
6629 * with the \x{100},... search chars, then a larger (> 256) table
6632 * In addition, regardless of whether under /c, an extra slot at the
6633 * end is used to store the final repeating char, or -3 under an empty
6634 * replacement list, or -2 under /d; which makes the runtime code
6637 * The toker will have already expanded char ranges in t and r.
6640 /* Initially allocate 257-slot table: 256 for basic (non /c) usage,
6641 * plus final slot for repeat/-2/-3. Later we realloc if excess > * 0.
6642 * The OPtrans_map struct already contains one slot; hence the -1.
6644 struct_size = sizeof(OPtrans_map) + (256 - 1 + 1)*sizeof(short);
6645 tbl = (OPtrans_map*)PerlMemShared_calloc(struct_size, 1);
6647 cPVOPo->op_pv = (char*)tbl;
6652 /* in this branch, j is a count of 'consumed' (i.e. paired off
6653 * with a search char) replacement chars (so j <= rlen always)
6655 for (i = 0; i < tlen; i++)
6656 tbl->map[t[i]] = -1;
6658 for (i = 0, j = 0; i < 256; i++) {
6664 tbl->map[i] = r[j-1];
6666 tbl->map[i] = (short)i;
6669 tbl->map[i] = r[j++];
6671 if ( tbl->map[i] >= 0
6672 && UVCHR_IS_INVARIANT((UV)i)
6673 && !UVCHR_IS_INVARIANT((UV)(tbl->map[i]))
6683 /* More replacement chars than search chars:
6684 * store excess replacement chars at end of main table.
6687 struct_size += excess;
6688 tbl = (OPtrans_map*)PerlMemShared_realloc(tbl,
6689 struct_size + excess * sizeof(short));
6690 tbl->size += excess;
6691 cPVOPo->op_pv = (char*)tbl;
6693 for (i = 0; i < excess; i++)
6694 tbl->map[i + 256] = r[j+i];
6697 /* no more replacement chars than search chars */
6698 if (!rlen && !del && !squash)
6699 o->op_private |= OPpTRANS_IDENTICAL;
6702 tbl->map[tbl->size] = del ? -2 : rlen ? r[rlen - 1] : -3;
6705 if (!rlen && !del) {
6708 o->op_private |= OPpTRANS_IDENTICAL;
6710 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
6711 o->op_private |= OPpTRANS_IDENTICAL;
6714 for (i = 0; i < 256; i++)
6716 for (i = 0, j = 0; i < tlen; i++,j++) {
6719 if (tbl->map[t[i]] == -1)
6720 tbl->map[t[i]] = -2;
6725 if (tbl->map[t[i]] == -1) {
6726 if ( UVCHR_IS_INVARIANT(t[i])
6727 && ! UVCHR_IS_INVARIANT(r[j]))
6729 tbl->map[t[i]] = r[j];
6732 tbl->map[tbl->size] = del ? -1 : rlen ? -1 : -3;
6735 /* both non-utf8 and utf8 code paths end up here */
6738 if(del && rlen == tlen) {
6739 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
6740 } else if(rlen > tlen && !complement) {
6741 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
6745 o->op_private |= OPpTRANS_GROWS;
6754 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
6756 Constructs, checks, and returns an op of any pattern matching type.
6757 C<type> is the opcode. C<flags> gives the eight bits of C<op_flags>
6758 and, shifted up eight bits, the eight bits of C<op_private>.
6764 Perl_newPMOP(pTHX_ I32 type, I32 flags)
6769 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP
6770 || type == OP_CUSTOM);
6772 NewOp(1101, pmop, 1, PMOP);
6773 OpTYPE_set(pmop, type);
6774 pmop->op_flags = (U8)flags;
6775 pmop->op_private = (U8)(0 | (flags >> 8));
6776 if (PL_opargs[type] & OA_RETSCALAR)
6779 if (PL_hints & HINT_RE_TAINT)
6780 pmop->op_pmflags |= PMf_RETAINT;
6781 #ifdef USE_LOCALE_CTYPE
6782 if (IN_LC_COMPILETIME(LC_CTYPE)) {
6783 set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET);
6788 set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
6790 if (PL_hints & HINT_RE_FLAGS) {
6791 SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
6792 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
6794 if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
6795 reflags = Perl_refcounted_he_fetch_pvn(aTHX_
6796 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0
6798 if (reflags && SvOK(reflags)) {
6799 set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
6805 assert(SvPOK(PL_regex_pad[0]));
6806 if (SvCUR(PL_regex_pad[0])) {
6807 /* Pop off the "packed" IV from the end. */
6808 SV *const repointer_list = PL_regex_pad[0];
6809 const char *p = SvEND(repointer_list) - sizeof(IV);
6810 const IV offset = *((IV*)p);
6812 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
6814 SvEND_set(repointer_list, p);
6816 pmop->op_pmoffset = offset;
6817 /* This slot should be free, so assert this: */
6818 assert(PL_regex_pad[offset] == &PL_sv_undef);
6820 SV * const repointer = &PL_sv_undef;
6821 av_push(PL_regex_padav, repointer);
6822 pmop->op_pmoffset = av_tindex(PL_regex_padav);
6823 PL_regex_pad = AvARRAY(PL_regex_padav);
6827 return CHECKOP(type, pmop);
6835 /* Any pad names in scope are potentially lvalues. */
6836 for (; i < PadnamelistMAXNAMED(PL_comppad_name); i++) {
6837 PADNAME *pn = PAD_COMPNAME_SV(i);
6838 if (!pn || !PadnameLEN(pn))
6840 if (PadnameOUTER(pn) || PadnameIN_SCOPE(pn, PL_cop_seqmax))
6841 S_mark_padname_lvalue(aTHX_ pn);
6845 /* Given some sort of match op o, and an expression expr containing a
6846 * pattern, either compile expr into a regex and attach it to o (if it's
6847 * constant), or convert expr into a runtime regcomp op sequence (if it's
6850 * Flags currently has 2 bits of meaning:
6851 * 1: isreg indicates that the pattern is part of a regex construct, eg
6852 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
6853 * split "pattern", which aren't. In the former case, expr will be a list
6854 * if the pattern contains more than one term (eg /a$b/).
6855 * 2: The pattern is for a split.
6857 * When the pattern has been compiled within a new anon CV (for
6858 * qr/(?{...})/ ), then floor indicates the savestack level just before
6859 * the new sub was created
6863 Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, UV flags, I32 floor)
6867 I32 repl_has_vars = 0;
6868 bool is_trans = (o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
6869 bool is_compiletime;
6871 bool isreg = cBOOL(flags & 1);
6872 bool is_split = cBOOL(flags & 2);
6874 PERL_ARGS_ASSERT_PMRUNTIME;
6877 return pmtrans(o, expr, repl);
6880 /* find whether we have any runtime or code elements;
6881 * at the same time, temporarily set the op_next of each DO block;
6882 * then when we LINKLIST, this will cause the DO blocks to be excluded
6883 * from the op_next chain (and from having LINKLIST recursively
6884 * applied to them). We fix up the DOs specially later */
6888 if (expr->op_type == OP_LIST) {
6890 for (o = cLISTOPx(expr)->op_first; o; o = OpSIBLING(o)) {
6891 if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)) {
6893 assert(!o->op_next);
6894 if (UNLIKELY(!OpHAS_SIBLING(o))) {
6895 assert(PL_parser && PL_parser->error_count);
6896 /* This can happen with qr/ (?{(^{})/. Just fake up
6897 the op we were expecting to see, to avoid crashing
6899 op_sibling_splice(expr, o, 0,
6900 newSVOP(OP_CONST, 0, &PL_sv_no));
6902 o->op_next = OpSIBLING(o);
6904 else if (o->op_type != OP_CONST && o->op_type != OP_PUSHMARK)
6908 else if (expr->op_type != OP_CONST)
6913 /* fix up DO blocks; treat each one as a separate little sub;
6914 * also, mark any arrays as LIST/REF */
6916 if (expr->op_type == OP_LIST) {
6918 for (o = cLISTOPx(expr)->op_first; o; o = OpSIBLING(o)) {
6920 if (o->op_type == OP_PADAV || o->op_type == OP_RV2AV) {
6921 assert( !(o->op_flags & OPf_WANT));
6922 /* push the array rather than its contents. The regex
6923 * engine will retrieve and join the elements later */
6924 o->op_flags |= (OPf_WANT_LIST | OPf_REF);
6928 if (!(o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)))
6930 o->op_next = NULL; /* undo temporary hack from above */
6933 if (cLISTOPo->op_first->op_type == OP_LEAVE) {
6934 LISTOP *leaveop = cLISTOPx(cLISTOPo->op_first);
6936 assert(leaveop->op_first->op_type == OP_ENTER);
6937 assert(OpHAS_SIBLING(leaveop->op_first));
6938 o->op_next = OpSIBLING(leaveop->op_first);
6940 assert(leaveop->op_flags & OPf_KIDS);
6941 assert(leaveop->op_last->op_next == (OP*)leaveop);
6942 leaveop->op_next = NULL; /* stop on last op */
6943 op_null((OP*)leaveop);
6947 OP *scope = cLISTOPo->op_first;
6948 assert(scope->op_type == OP_SCOPE);
6949 assert(scope->op_flags & OPf_KIDS);
6950 scope->op_next = NULL; /* stop on last op */
6954 /* XXX optimize_optree() must be called on o before
6955 * CALL_PEEP(), as currently S_maybe_multiconcat() can't
6956 * currently cope with a peephole-optimised optree.
6957 * Calling optimize_optree() here ensures that condition
6958 * is met, but may mean optimize_optree() is applied
6959 * to the same optree later (where hopefully it won't do any
6960 * harm as it can't convert an op to multiconcat if it's
6961 * already been converted */
6964 /* have to peep the DOs individually as we've removed it from
6965 * the op_next chain */
6967 S_prune_chain_head(&(o->op_next));
6969 /* runtime finalizes as part of finalizing whole tree */
6973 else if (expr->op_type == OP_PADAV || expr->op_type == OP_RV2AV) {
6974 assert( !(expr->op_flags & OPf_WANT));
6975 /* push the array rather than its contents. The regex
6976 * engine will retrieve and join the elements later */
6977 expr->op_flags |= (OPf_WANT_LIST | OPf_REF);
6980 PL_hints |= HINT_BLOCK_SCOPE;
6982 assert(floor==0 || (pm->op_pmflags & PMf_HAS_CV));
6984 if (is_compiletime) {
6985 U32 rx_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
6986 regexp_engine const *eng = current_re_engine();
6989 /* make engine handle split ' ' specially */
6990 pm->op_pmflags |= PMf_SPLIT;
6991 rx_flags |= RXf_SPLIT;
6994 /* Skip compiling if parser found an error for this pattern */
6995 if (pm->op_pmflags & PMf_HAS_ERROR) {
6999 if (!has_code || !eng->op_comp) {
7000 /* compile-time simple constant pattern */
7002 if ((pm->op_pmflags & PMf_HAS_CV) && !has_code) {
7003 /* whoops! we guessed that a qr// had a code block, but we
7004 * were wrong (e.g. /[(?{}]/ ). Throw away the PL_compcv
7005 * that isn't required now. Note that we have to be pretty
7006 * confident that nothing used that CV's pad while the
7007 * regex was parsed, except maybe op targets for \Q etc.
7008 * If there were any op targets, though, they should have
7009 * been stolen by constant folding.
7013 assert(PadnamelistMAXNAMED(PL_comppad_name) == 0);
7014 while (++i <= AvFILLp(PL_comppad)) {
7015 # ifdef USE_PAD_RESET
7016 /* under USE_PAD_RESET, pad swipe replaces a swiped
7017 * folded constant with a fresh padtmp */
7018 assert(!PL_curpad[i] || SvPADTMP(PL_curpad[i]));
7020 assert(!PL_curpad[i]);
7024 /* But we know that one op is using this CV's slab. */
7025 cv_forget_slab(PL_compcv);
7027 pm->op_pmflags &= ~PMf_HAS_CV;
7032 ? eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
7033 rx_flags, pm->op_pmflags)
7034 : Perl_re_op_compile(aTHX_ NULL, 0, expr, eng, NULL, NULL,
7035 rx_flags, pm->op_pmflags)
7040 /* compile-time pattern that includes literal code blocks */
7041 REGEXP* re = eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
7044 ((PL_hints & HINT_RE_EVAL) ? PMf_USE_RE_EVAL : 0))
7047 if (pm->op_pmflags & PMf_HAS_CV) {
7049 /* this QR op (and the anon sub we embed it in) is never
7050 * actually executed. It's just a placeholder where we can
7051 * squirrel away expr in op_code_list without the peephole
7052 * optimiser etc processing it for a second time */
7053 OP *qr = newPMOP(OP_QR, 0);
7054 ((PMOP*)qr)->op_code_list = expr;
7056 /* handle the implicit sub{} wrapped round the qr/(?{..})/ */
7057 SvREFCNT_inc_simple_void(PL_compcv);
7058 cv = newATTRSUB(floor, 0, NULL, NULL, qr);
7059 ReANY(re)->qr_anoncv = cv;
7061 /* attach the anon CV to the pad so that
7062 * pad_fixup_inner_anons() can find it */
7063 (void)pad_add_anon(cv, o->op_type);
7064 SvREFCNT_inc_simple_void(cv);
7067 pm->op_code_list = expr;
7072 /* runtime pattern: build chain of regcomp etc ops */
7074 PADOFFSET cv_targ = 0;
7076 reglist = isreg && expr->op_type == OP_LIST;
7081 pm->op_code_list = expr;
7082 /* don't free op_code_list; its ops are embedded elsewhere too */
7083 pm->op_pmflags |= PMf_CODELIST_PRIVATE;
7087 /* make engine handle split ' ' specially */
7088 pm->op_pmflags |= PMf_SPLIT;
7090 /* the OP_REGCMAYBE is a placeholder in the non-threaded case
7091 * to allow its op_next to be pointed past the regcomp and
7092 * preceding stacking ops;
7093 * OP_REGCRESET is there to reset taint before executing the
7095 if (pm->op_pmflags & PMf_KEEP || TAINTING_get)
7096 expr = newUNOP((TAINTING_get ? OP_REGCRESET : OP_REGCMAYBE),0,expr);
7098 if (pm->op_pmflags & PMf_HAS_CV) {
7099 /* we have a runtime qr with literal code. This means
7100 * that the qr// has been wrapped in a new CV, which
7101 * means that runtime consts, vars etc will have been compiled
7102 * against a new pad. So... we need to execute those ops
7103 * within the environment of the new CV. So wrap them in a call
7104 * to a new anon sub. i.e. for
7108 * we build an anon sub that looks like
7110 * sub { "a", $b, '(?{...})' }
7112 * and call it, passing the returned list to regcomp.
7113 * Or to put it another way, the list of ops that get executed
7117 * ------ -------------------
7118 * pushmark (for regcomp)
7119 * pushmark (for entersub)
7123 * regcreset regcreset
7125 * const("a") const("a")
7127 * const("(?{...})") const("(?{...})")
7132 SvREFCNT_inc_simple_void(PL_compcv);
7133 CvLVALUE_on(PL_compcv);
7134 /* these lines are just an unrolled newANONATTRSUB */
7135 expr = newSVOP(OP_ANONCODE, 0,
7136 MUTABLE_SV(newATTRSUB(floor, 0, NULL, NULL, expr)));
7137 cv_targ = expr->op_targ;
7138 expr = newUNOP(OP_REFGEN, 0, expr);
7140 expr = list(force_list(newUNOP(OP_ENTERSUB, 0, scalar(expr)), 1));
7143 rcop = alloc_LOGOP(OP_REGCOMP, scalar(expr), o);
7144 rcop->op_flags |= ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
7145 | (reglist ? OPf_STACKED : 0);
7146 rcop->op_targ = cv_targ;
7148 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
7149 if (PL_hints & HINT_RE_EVAL)
7150 S_set_haseval(aTHX);
7152 /* establish postfix order */
7153 if (expr->op_type == OP_REGCRESET || expr->op_type == OP_REGCMAYBE) {
7155 rcop->op_next = expr;
7156 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
7159 rcop->op_next = LINKLIST(expr);
7160 expr->op_next = (OP*)rcop;
7163 op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
7169 /* If we are looking at s//.../e with a single statement, get past
7170 the implicit do{}. */
7171 if (curop->op_type == OP_NULL && curop->op_flags & OPf_KIDS
7172 && cUNOPx(curop)->op_first->op_type == OP_SCOPE
7173 && cUNOPx(curop)->op_first->op_flags & OPf_KIDS)
7176 OP *kid = cUNOPx(cUNOPx(curop)->op_first)->op_first;
7177 if (kid->op_type == OP_NULL && (sib = OpSIBLING(kid))
7178 && !OpHAS_SIBLING(sib))
7181 if (curop->op_type == OP_CONST)
7183 else if (( (curop->op_type == OP_RV2SV ||
7184 curop->op_type == OP_RV2AV ||
7185 curop->op_type == OP_RV2HV ||
7186 curop->op_type == OP_RV2GV)
7187 && cUNOPx(curop)->op_first
7188 && cUNOPx(curop)->op_first->op_type == OP_GV )
7189 || curop->op_type == OP_PADSV
7190 || curop->op_type == OP_PADAV
7191 || curop->op_type == OP_PADHV
7192 || curop->op_type == OP_PADANY) {
7200 || !RX_PRELEN(PM_GETRE(pm))
7201 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
7203 pm->op_pmflags |= PMf_CONST; /* const for long enough */
7204 op_prepend_elem(o->op_type, scalar(repl), o);
7207 rcop = alloc_LOGOP(OP_SUBSTCONT, scalar(repl), o);
7208 rcop->op_private = 1;
7210 /* establish postfix order */
7211 rcop->op_next = LINKLIST(repl);
7212 repl->op_next = (OP*)rcop;
7214 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
7215 assert(!(pm->op_pmflags & PMf_ONCE));
7216 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
7225 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
7227 Constructs, checks, and returns an op of any type that involves an
7228 embedded SV. C<type> is the opcode. C<flags> gives the eight bits
7229 of C<op_flags>. C<sv> gives the SV to embed in the op; this function
7230 takes ownership of one reference to it.
7236 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
7241 PERL_ARGS_ASSERT_NEWSVOP;
7243 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
7244 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
7245 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
7246 || type == OP_CUSTOM);
7248 NewOp(1101, svop, 1, SVOP);
7249 OpTYPE_set(svop, type);
7251 svop->op_next = (OP*)svop;
7252 svop->op_flags = (U8)flags;
7253 svop->op_private = (U8)(0 | (flags >> 8));
7254 if (PL_opargs[type] & OA_RETSCALAR)
7256 if (PL_opargs[type] & OA_TARGET)
7257 svop->op_targ = pad_alloc(type, SVs_PADTMP);
7258 return CHECKOP(type, svop);
7262 =for apidoc Am|OP *|newDEFSVOP|
7264 Constructs and returns an op to access C<$_>.
7270 Perl_newDEFSVOP(pTHX)
7272 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
7278 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
7280 Constructs, checks, and returns an op of any type that involves a
7281 reference to a pad element. C<type> is the opcode. C<flags> gives the
7282 eight bits of C<op_flags>. A pad slot is automatically allocated, and
7283 is populated with C<sv>; this function takes ownership of one reference
7286 This function only exists if Perl has been compiled to use ithreads.
7292 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
7297 PERL_ARGS_ASSERT_NEWPADOP;
7299 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
7300 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
7301 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
7302 || type == OP_CUSTOM);
7304 NewOp(1101, padop, 1, PADOP);
7305 OpTYPE_set(padop, type);
7307 pad_alloc(type, isGV(sv) ? SVf_READONLY : SVs_PADTMP);
7308 SvREFCNT_dec(PAD_SVl(padop->op_padix));
7309 PAD_SETSV(padop->op_padix, sv);
7311 padop->op_next = (OP*)padop;
7312 padop->op_flags = (U8)flags;
7313 if (PL_opargs[type] & OA_RETSCALAR)
7315 if (PL_opargs[type] & OA_TARGET)
7316 padop->op_targ = pad_alloc(type, SVs_PADTMP);
7317 return CHECKOP(type, padop);
7320 #endif /* USE_ITHREADS */
7323 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
7325 Constructs, checks, and returns an op of any type that involves an
7326 embedded reference to a GV. C<type> is the opcode. C<flags> gives the
7327 eight bits of C<op_flags>. C<gv> identifies the GV that the op should
7328 reference; calling this function does not transfer ownership of any
7335 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
7337 PERL_ARGS_ASSERT_NEWGVOP;
7340 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
7342 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
7347 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
7349 Constructs, checks, and returns an op of any type that involves an
7350 embedded C-level pointer (PV). C<type> is the opcode. C<flags> gives
7351 the eight bits of C<op_flags>. C<pv> supplies the C-level pointer.
7352 Depending on the op type, the memory referenced by C<pv> may be freed
7353 when the op is destroyed. If the op is of a freeing type, C<pv> must
7354 have been allocated using C<PerlMemShared_malloc>.
7360 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
7363 const bool utf8 = cBOOL(flags & SVf_UTF8);
7368 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
7369 || type == OP_RUNCV || type == OP_CUSTOM
7370 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
7372 NewOp(1101, pvop, 1, PVOP);
7373 OpTYPE_set(pvop, type);
7375 pvop->op_next = (OP*)pvop;
7376 pvop->op_flags = (U8)flags;
7377 pvop->op_private = utf8 ? OPpPV_IS_UTF8 : 0;
7378 if (PL_opargs[type] & OA_RETSCALAR)
7380 if (PL_opargs[type] & OA_TARGET)
7381 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
7382 return CHECKOP(type, pvop);
7386 Perl_package(pTHX_ OP *o)
7388 SV *const sv = cSVOPo->op_sv;
7390 PERL_ARGS_ASSERT_PACKAGE;
7392 SAVEGENERICSV(PL_curstash);
7393 save_item(PL_curstname);
7395 PL_curstash = (HV *)SvREFCNT_inc(gv_stashsv(sv, GV_ADD));
7397 sv_setsv(PL_curstname, sv);
7399 PL_hints |= HINT_BLOCK_SCOPE;
7400 PL_parser->copline = NOLINE;
7406 Perl_package_version( pTHX_ OP *v )
7408 U32 savehints = PL_hints;
7409 PERL_ARGS_ASSERT_PACKAGE_VERSION;
7410 PL_hints &= ~HINT_STRICT_VARS;
7411 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
7412 PL_hints = savehints;
7417 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
7422 SV *use_version = NULL;
7424 PERL_ARGS_ASSERT_UTILIZE;
7426 if (idop->op_type != OP_CONST)
7427 Perl_croak(aTHX_ "Module name must be constant");
7432 SV * const vesv = ((SVOP*)version)->op_sv;
7434 if (!arg && !SvNIOKp(vesv)) {
7441 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
7442 Perl_croak(aTHX_ "Version number must be a constant number");
7444 /* Make copy of idop so we don't free it twice */
7445 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
7447 /* Fake up a method call to VERSION */
7448 meth = newSVpvs_share("VERSION");
7449 veop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
7450 op_append_elem(OP_LIST,
7451 op_prepend_elem(OP_LIST, pack, version),
7452 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
7456 /* Fake up an import/unimport */
7457 if (arg && arg->op_type == OP_STUB) {
7458 imop = arg; /* no import on explicit () */
7460 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
7461 imop = NULL; /* use 5.0; */
7463 use_version = ((SVOP*)idop)->op_sv;
7465 idop->op_private |= OPpCONST_NOVER;
7470 /* Make copy of idop so we don't free it twice */
7471 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
7473 /* Fake up a method call to import/unimport */
7475 ? newSVpvs_share("import") : newSVpvs_share("unimport");
7476 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
7477 op_append_elem(OP_LIST,
7478 op_prepend_elem(OP_LIST, pack, arg),
7479 newMETHOP_named(OP_METHOD_NAMED, 0, meth)
7483 /* Fake up the BEGIN {}, which does its thing immediately. */
7485 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
7488 op_append_elem(OP_LINESEQ,
7489 op_append_elem(OP_LINESEQ,
7490 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
7491 newSTATEOP(0, NULL, veop)),
7492 newSTATEOP(0, NULL, imop) ));
7496 * feature bundle that corresponds to the required version. */
7497 use_version = sv_2mortal(new_version(use_version));
7498 S_enable_feature_bundle(aTHX_ use_version);
7500 /* If a version >= 5.11.0 is requested, strictures are on by default! */
7501 if (vcmp(use_version,
7502 sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
7503 if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS))
7504 PL_hints |= HINT_STRICT_REFS;
7505 if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS))
7506 PL_hints |= HINT_STRICT_SUBS;
7507 if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS))
7508 PL_hints |= HINT_STRICT_VARS;
7510 /* otherwise they are off */
7512 if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS))
7513 PL_hints &= ~HINT_STRICT_REFS;
7514 if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS))
7515 PL_hints &= ~HINT_STRICT_SUBS;
7516 if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS))
7517 PL_hints &= ~HINT_STRICT_VARS;
7521 /* The "did you use incorrect case?" warning used to be here.
7522 * The problem is that on case-insensitive filesystems one
7523 * might get false positives for "use" (and "require"):
7524 * "use Strict" or "require CARP" will work. This causes
7525 * portability problems for the script: in case-strict
7526 * filesystems the script will stop working.
7528 * The "incorrect case" warning checked whether "use Foo"
7529 * imported "Foo" to your namespace, but that is wrong, too:
7530 * there is no requirement nor promise in the language that
7531 * a Foo.pm should or would contain anything in package "Foo".
7533 * There is very little Configure-wise that can be done, either:
7534 * the case-sensitivity of the build filesystem of Perl does not
7535 * help in guessing the case-sensitivity of the runtime environment.
7538 PL_hints |= HINT_BLOCK_SCOPE;
7539 PL_parser->copline = NOLINE;
7540 COP_SEQMAX_INC; /* Purely for B::*'s benefit */
7544 =head1 Embedding Functions
7546 =for apidoc load_module
7548 Loads the module whose name is pointed to by the string part of C<name>.
7549 Note that the actual module name, not its filename, should be given.
7550 Eg, "Foo::Bar" instead of "Foo/Bar.pm". ver, if specified and not NULL,
7551 provides version semantics similar to C<use Foo::Bar VERSION>. The optional
7552 trailing arguments can be used to specify arguments to the module's C<import()>
7553 method, similar to C<use Foo::Bar VERSION LIST>; their precise handling depends
7554 on the flags. The flags argument is a bitwise-ORed collection of any of
7555 C<PERL_LOADMOD_DENY>, C<PERL_LOADMOD_NOIMPORT>, or C<PERL_LOADMOD_IMPORT_OPS>
7556 (or 0 for no flags).
7558 If C<PERL_LOADMOD_NOIMPORT> is set, the module is loaded as if with an empty
7559 import list, as in C<use Foo::Bar ()>; this is the only circumstance in which
7560 the trailing optional arguments may be omitted entirely. Otherwise, if
7561 C<PERL_LOADMOD_IMPORT_OPS> is set, the trailing arguments must consist of
7562 exactly one C<OP*>, containing the op tree that produces the relevant import
7563 arguments. Otherwise, the trailing arguments must all be C<SV*> values that
7564 will be used as import arguments; and the list must be terminated with C<(SV*)
7565 NULL>. If neither C<PERL_LOADMOD_NOIMPORT> nor C<PERL_LOADMOD_IMPORT_OPS> is
7566 set, the trailing C<NULL> pointer is needed even if no import arguments are
7567 desired. The reference count for each specified C<SV*> argument is
7568 decremented. In addition, the C<name> argument is modified.
7570 If C<PERL_LOADMOD_DENY> is set, the module is loaded as if with C<no> rather
7576 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
7580 PERL_ARGS_ASSERT_LOAD_MODULE;
7582 va_start(args, ver);
7583 vload_module(flags, name, ver, &args);
7587 #ifdef PERL_IMPLICIT_CONTEXT
7589 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
7593 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
7594 va_start(args, ver);
7595 vload_module(flags, name, ver, &args);
7601 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
7604 OP * const modname = newSVOP(OP_CONST, 0, name);
7606 PERL_ARGS_ASSERT_VLOAD_MODULE;
7608 modname->op_private |= OPpCONST_BARE;
7610 veop = newSVOP(OP_CONST, 0, ver);
7614 if (flags & PERL_LOADMOD_NOIMPORT) {
7615 imop = sawparens(newNULLLIST());
7617 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
7618 imop = va_arg(*args, OP*);
7623 sv = va_arg(*args, SV*);
7625 imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
7626 sv = va_arg(*args, SV*);
7630 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
7631 * that it has a PL_parser to play with while doing that, and also
7632 * that it doesn't mess with any existing parser, by creating a tmp
7633 * new parser with lex_start(). This won't actually be used for much,
7634 * since pp_require() will create another parser for the real work.
7635 * The ENTER/LEAVE pair protect callers from any side effects of use. */
7638 SAVEVPTR(PL_curcop);
7639 lex_start(NULL, NULL, LEX_START_SAME_FILTER);
7640 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
7641 veop, modname, imop);
7645 PERL_STATIC_INLINE OP *
7646 S_new_entersubop(pTHX_ GV *gv, OP *arg)
7648 return newUNOP(OP_ENTERSUB, OPf_STACKED,
7649 newLISTOP(OP_LIST, 0, arg,
7650 newUNOP(OP_RV2CV, 0,
7651 newGVOP(OP_GV, 0, gv))));
7655 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
7660 PERL_ARGS_ASSERT_DOFILE;
7662 if (!force_builtin && (gv = gv_override("do", 2))) {
7663 doop = S_new_entersubop(aTHX_ gv, term);
7666 doop = newUNOP(OP_DOFILE, 0, scalar(term));
7672 =head1 Optree construction
7674 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
7676 Constructs, checks, and returns an C<lslice> (list slice) op. C<flags>
7677 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
7678 be set automatically, and, shifted up eight bits, the eight bits of
7679 C<op_private>, except that the bit with value 1 or 2 is automatically
7680 set as required. C<listval> and C<subscript> supply the parameters of
7681 the slice; they are consumed by this function and become part of the
7682 constructed op tree.
7688 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
7690 return newBINOP(OP_LSLICE, flags,
7691 list(force_list(subscript, 1)),
7692 list(force_list(listval, 1)) );
7695 #define ASSIGN_LIST 1
7696 #define ASSIGN_REF 2
7699 S_assignment_type(pTHX_ const OP *o)
7708 if (o->op_type == OP_SREFGEN)
7710 OP * const kid = cUNOPx(cUNOPo->op_first)->op_first;
7711 type = kid->op_type;
7712 flags = o->op_flags | kid->op_flags;
7713 if (!(flags & OPf_PARENS)
7714 && (kid->op_type == OP_RV2AV || kid->op_type == OP_PADAV ||
7715 kid->op_type == OP_RV2HV || kid->op_type == OP_PADHV ))
7719 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
7720 o = cUNOPo->op_first;
7721 flags = o->op_flags;
7726 if (type == OP_COND_EXPR) {
7727 OP * const sib = OpSIBLING(cLOGOPo->op_first);
7728 const I32 t = assignment_type(sib);
7729 const I32 f = assignment_type(OpSIBLING(sib));
7731 if (t == ASSIGN_LIST && f == ASSIGN_LIST)
7733 if ((t == ASSIGN_LIST) ^ (f == ASSIGN_LIST))
7734 yyerror("Assignment to both a list and a scalar");
7738 if (type == OP_LIST &&
7739 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
7740 o->op_private & OPpLVAL_INTRO)
7743 if (type == OP_LIST || flags & OPf_PARENS ||
7744 type == OP_RV2AV || type == OP_RV2HV ||
7745 type == OP_ASLICE || type == OP_HSLICE ||
7746 type == OP_KVASLICE || type == OP_KVHSLICE || type == OP_REFGEN)
7749 if (type == OP_PADAV || type == OP_PADHV)
7752 if (type == OP_RV2SV)
7759 S_newONCEOP(pTHX_ OP *initop, OP *padop)
7761 const PADOFFSET target = padop->op_targ;
7762 OP *const other = newOP(OP_PADSV,
7764 | ((padop->op_private & ~OPpLVAL_INTRO) << 8));
7765 OP *const first = newOP(OP_NULL, 0);
7766 OP *const nullop = newCONDOP(0, first, initop, other);
7767 /* XXX targlex disabled for now; see ticket #124160
7768 newCONDOP(0, first, S_maybe_targlex(aTHX_ initop), other);
7770 OP *const condop = first->op_next;
7772 OpTYPE_set(condop, OP_ONCE);
7773 other->op_targ = target;
7774 nullop->op_flags |= OPf_WANT_SCALAR;
7776 /* Store the initializedness of state vars in a separate
7779 pad_add_name_pvn("$",1,padadd_NO_DUP_CHECK|padadd_STATE,0,0);
7780 /* hijacking PADSTALE for uninitialized state variables */
7781 SvPADSTALE_on(PAD_SVl(condop->op_targ));
7787 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
7789 Constructs, checks, and returns an assignment op. C<left> and C<right>
7790 supply the parameters of the assignment; they are consumed by this
7791 function and become part of the constructed op tree.
7793 If C<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
7794 a suitable conditional optree is constructed. If C<optype> is the opcode
7795 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
7796 performs the binary operation and assigns the result to the left argument.
7797 Either way, if C<optype> is non-zero then C<flags> has no effect.
7799 If C<optype> is zero, then a plain scalar or list assignment is
7800 constructed. Which type of assignment it is is automatically determined.
7801 C<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
7802 will be set automatically, and, shifted up eight bits, the eight bits
7803 of C<op_private>, except that the bit with value 1 or 2 is automatically
7810 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
7816 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
7817 right = scalar(right);
7818 return newLOGOP(optype, 0,
7819 op_lvalue(scalar(left), optype),
7820 newBINOP(OP_SASSIGN, OPpASSIGN_BACKWARDS<<8, right, right));
7823 return newBINOP(optype, OPf_STACKED,
7824 op_lvalue(scalar(left), optype), scalar(right));
7828 if ((assign_type = assignment_type(left)) == ASSIGN_LIST) {
7829 OP *state_var_op = NULL;
7830 static const char no_list_state[] = "Initialization of state variables"
7831 " in list currently forbidden";
7834 if (left->op_type == OP_ASLICE || left->op_type == OP_HSLICE)
7835 left->op_private &= ~ OPpSLICEWARNING;
7838 left = op_lvalue(left, OP_AASSIGN);
7839 curop = list(force_list(left, 1));
7840 o = newBINOP(OP_AASSIGN, flags, list(force_list(right, 1)), curop);
7841 o->op_private = (U8)(0 | (flags >> 8));
7843 if (OP_TYPE_IS_OR_WAS(left, OP_LIST))
7845 OP *lop = ((LISTOP*)left)->op_first, *vop, *eop;
7846 if (!(left->op_flags & OPf_PARENS) &&
7847 lop->op_type == OP_PUSHMARK &&
7848 (vop = OpSIBLING(lop)) &&
7849 (vop->op_type == OP_PADAV || vop->op_type == OP_PADHV) &&
7850 !(vop->op_flags & OPf_PARENS) &&
7851 (vop->op_private & (OPpLVAL_INTRO|OPpPAD_STATE)) ==
7852 (OPpLVAL_INTRO|OPpPAD_STATE) &&
7853 (eop = OpSIBLING(vop)) &&
7854 eop->op_type == OP_ENTERSUB &&
7855 !OpHAS_SIBLING(eop)) {
7859 if ((lop->op_type == OP_PADSV ||
7860 lop->op_type == OP_PADAV ||
7861 lop->op_type == OP_PADHV ||
7862 lop->op_type == OP_PADANY)
7863 && (lop->op_private & OPpPAD_STATE)
7865 yyerror(no_list_state);
7866 lop = OpSIBLING(lop);
7870 else if ( (left->op_private & OPpLVAL_INTRO)
7871 && (left->op_private & OPpPAD_STATE)
7872 && ( left->op_type == OP_PADSV
7873 || left->op_type == OP_PADAV
7874 || left->op_type == OP_PADHV
7875 || left->op_type == OP_PADANY)
7877 /* All single variable list context state assignments, hence
7887 if (left->op_flags & OPf_PARENS)
7888 yyerror(no_list_state);
7890 state_var_op = left;
7893 /* optimise @a = split(...) into:
7894 * @{expr}: split(..., @{expr}) (where @a is not flattened)
7895 * @a, my @a, local @a: split(...) (where @a is attached to
7896 * the split op itself)
7900 && right->op_type == OP_SPLIT
7901 /* don't do twice, e.g. @b = (@a = split) */
7902 && !(right->op_private & OPpSPLIT_ASSIGN))
7906 if ( ( left->op_type == OP_RV2AV
7907 && (gvop=((UNOP*)left)->op_first)->op_type==OP_GV)
7908 || left->op_type == OP_PADAV)
7910 /* @pkg or @lex or local @pkg' or 'my @lex' */
7914 ((PMOP*)right)->op_pmreplrootu.op_pmtargetoff
7915 = cPADOPx(gvop)->op_padix;
7916 cPADOPx(gvop)->op_padix = 0; /* steal it */
7918 ((PMOP*)right)->op_pmreplrootu.op_pmtargetgv
7919 = MUTABLE_GV(cSVOPx(gvop)->op_sv);
7920 cSVOPx(gvop)->op_sv = NULL; /* steal it */
7922 right->op_private |=
7923 left->op_private & OPpOUR_INTRO;
7926 ((PMOP*)right)->op_pmreplrootu.op_pmtargetoff = left->op_targ;
7927 left->op_targ = 0; /* steal it */
7928 right->op_private |= OPpSPLIT_LEX;
7930 right->op_private |= left->op_private & OPpLVAL_INTRO;
7933 tmpop = cUNOPo->op_first; /* to list (nulled) */
7934 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
7935 assert(OpSIBLING(tmpop) == right);
7936 assert(!OpHAS_SIBLING(right));
7937 /* detach the split subtreee from the o tree,
7938 * then free the residual o tree */
7939 op_sibling_splice(cUNOPo->op_first, tmpop, 1, NULL);
7940 op_free(o); /* blow off assign */
7941 right->op_private |= OPpSPLIT_ASSIGN;
7942 right->op_flags &= ~OPf_WANT;
7943 /* "I don't know and I don't care." */
7946 else if (left->op_type == OP_RV2AV) {
7949 OP *pushop = cUNOPx(cBINOPo->op_last)->op_first;
7950 assert(OpSIBLING(pushop) == left);
7951 /* Detach the array ... */
7952 op_sibling_splice(cBINOPo->op_last, pushop, 1, NULL);
7953 /* ... and attach it to the split. */
7954 op_sibling_splice(right, cLISTOPx(right)->op_last,
7956 right->op_flags |= OPf_STACKED;
7957 /* Detach split and expunge aassign as above. */
7960 else if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
7961 ((LISTOP*)right)->op_last->op_type == OP_CONST)
7963 /* convert split(...,0) to split(..., PL_modcount+1) */
7965 &((SVOP*)((LISTOP*)right)->op_last)->op_sv;
7966 SV * const sv = *svp;
7967 if (SvIOK(sv) && SvIVX(sv) == 0)
7969 if (right->op_private & OPpSPLIT_IMPLIM) {
7970 /* our own SV, created in ck_split */
7972 sv_setiv(sv, PL_modcount+1);
7975 /* SV may belong to someone else */
7977 *svp = newSViv(PL_modcount+1);
7984 o = S_newONCEOP(aTHX_ o, state_var_op);
7987 if (assign_type == ASSIGN_REF)
7988 return newBINOP(OP_REFASSIGN, flags, scalar(right), left);
7990 right = newOP(OP_UNDEF, 0);
7991 if (right->op_type == OP_READLINE) {
7992 right->op_flags |= OPf_STACKED;
7993 return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN),
7997 o = newBINOP(OP_SASSIGN, flags,
7998 scalar(right), op_lvalue(scalar(left), OP_SASSIGN) );
8004 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
8006 Constructs a state op (COP). The state op is normally a C<nextstate> op,
8007 but will be a C<dbstate> op if debugging is enabled for currently-compiled
8008 code. The state op is populated from C<PL_curcop> (or C<PL_compiling>).
8009 If C<label> is non-null, it supplies the name of a label to attach to
8010 the state op; this function takes ownership of the memory pointed at by
8011 C<label>, and will free it. C<flags> gives the eight bits of C<op_flags>
8014 If C<o> is null, the state op is returned. Otherwise the state op is
8015 combined with C<o> into a C<lineseq> list op, which is returned. C<o>
8016 is consumed by this function and becomes part of the returned op tree.
8022 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
8025 const U32 seq = intro_my();
8026 const U32 utf8 = flags & SVf_UTF8;
8029 PL_parser->parsed_sub = 0;
8033 NewOp(1101, cop, 1, COP);
8034 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
8035 OpTYPE_set(cop, OP_DBSTATE);
8038 OpTYPE_set(cop, OP_NEXTSTATE);
8040 cop->op_flags = (U8)flags;
8041 CopHINTS_set(cop, PL_hints);
8043 if (VMSISH_HUSHED) cop->op_private |= OPpHUSH_VMSISH;
8045 cop->op_next = (OP*)cop;
8048 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
8049 CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop)));
8051 Perl_cop_store_label(aTHX_ cop, label, strlen(label), utf8);
8053 PL_hints |= HINT_BLOCK_SCOPE;
8054 /* It seems that we need to defer freeing this pointer, as other parts
8055 of the grammar end up wanting to copy it after this op has been
8060 if (PL_parser->preambling != NOLINE) {
8061 CopLINE_set(cop, PL_parser->preambling);
8062 PL_parser->copline = NOLINE;
8064 else if (PL_parser->copline == NOLINE)
8065 CopLINE_set(cop, CopLINE(PL_curcop));
8067 CopLINE_set(cop, PL_parser->copline);
8068 PL_parser->copline = NOLINE;
8071 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
8073 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
8075 CopSTASH_set(cop, PL_curstash);
8077 if (cop->op_type == OP_DBSTATE) {
8078 /* this line can have a breakpoint - store the cop in IV */
8079 AV *av = CopFILEAVx(PL_curcop);
8081 SV * const * const svp = av_fetch(av, CopLINE(cop), FALSE);
8082 if (svp && *svp != &PL_sv_undef ) {
8083 (void)SvIOK_on(*svp);
8084 SvIV_set(*svp, PTR2IV(cop));
8089 if (flags & OPf_SPECIAL)
8091 return op_prepend_elem(OP_LINESEQ, (OP*)cop, o);
8095 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
8097 Constructs, checks, and returns a logical (flow control) op. C<type>
8098 is the opcode. C<flags> gives the eight bits of C<op_flags>, except
8099 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
8100 the eight bits of C<op_private>, except that the bit with value 1 is
8101 automatically set. C<first> supplies the expression controlling the
8102 flow, and C<other> supplies the side (alternate) chain of ops; they are
8103 consumed by this function and become part of the constructed op tree.
8109 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
8111 PERL_ARGS_ASSERT_NEWLOGOP;
8113 return new_logop(type, flags, &first, &other);
8117 S_search_const(pTHX_ OP *o)
8119 PERL_ARGS_ASSERT_SEARCH_CONST;
8121 switch (o->op_type) {
8125 if (o->op_flags & OPf_KIDS)
8126 return search_const(cUNOPo->op_first);
8133 if (!(o->op_flags & OPf_KIDS))
8135 kid = cLISTOPo->op_first;
8137 switch (kid->op_type) {
8141 kid = OpSIBLING(kid);
8144 if (kid != cLISTOPo->op_last)
8150 kid = cLISTOPo->op_last;
8152 return search_const(kid);
8160 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
8168 int prepend_not = 0;
8170 PERL_ARGS_ASSERT_NEW_LOGOP;
8175 /* [perl #59802]: Warn about things like "return $a or $b", which
8176 is parsed as "(return $a) or $b" rather than "return ($a or
8177 $b)". NB: This also applies to xor, which is why we do it
8180 switch (first->op_type) {
8184 /* XXX: Perhaps we should emit a stronger warning for these.
8185 Even with the high-precedence operator they don't seem to do
8188 But until we do, fall through here.
8194 /* XXX: Currently we allow people to "shoot themselves in the
8195 foot" by explicitly writing "(return $a) or $b".
8197 Warn unless we are looking at the result from folding or if
8198 the programmer explicitly grouped the operators like this.
8199 The former can occur with e.g.
8201 use constant FEATURE => ( $] >= ... );
8202 sub { not FEATURE and return or do_stuff(); }
8204 if (!first->op_folded && !(first->op_flags & OPf_PARENS))
8205 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
8206 "Possible precedence issue with control flow operator");
8207 /* XXX: Should we optimze this to "return $a;" (i.e. remove
8213 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
8214 return newBINOP(type, flags, scalar(first), scalar(other));
8216 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP
8217 || type == OP_CUSTOM);
8219 scalarboolean(first);
8221 /* search for a constant op that could let us fold the test */
8222 if ((cstop = search_const(first))) {
8223 if (cstop->op_private & OPpCONST_STRICT)
8224 no_bareword_allowed(cstop);
8225 else if ((cstop->op_private & OPpCONST_BARE))
8226 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
8227 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
8228 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
8229 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
8230 /* Elide the (constant) lhs, since it can't affect the outcome */
8232 if (other->op_type == OP_CONST)
8233 other->op_private |= OPpCONST_SHORTCIRCUIT;
8235 if (other->op_type == OP_LEAVE)
8236 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
8237 else if (other->op_type == OP_MATCH
8238 || other->op_type == OP_SUBST
8239 || other->op_type == OP_TRANSR
8240 || other->op_type == OP_TRANS)
8241 /* Mark the op as being unbindable with =~ */
8242 other->op_flags |= OPf_SPECIAL;
8244 other->op_folded = 1;
8248 /* Elide the rhs, since the outcome is entirely determined by
8249 * the (constant) lhs */
8251 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
8252 const OP *o2 = other;
8253 if ( ! (o2->op_type == OP_LIST
8254 && (( o2 = cUNOPx(o2)->op_first))
8255 && o2->op_type == OP_PUSHMARK
8256 && (( o2 = OpSIBLING(o2))) )
8259 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
8260 || o2->op_type == OP_PADHV)
8261 && o2->op_private & OPpLVAL_INTRO
8262 && !(o2->op_private & OPpPAD_STATE))
8264 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8265 "Deprecated use of my() in false conditional. "
8266 "This will be a fatal error in Perl 5.30");
8270 if (cstop->op_type == OP_CONST)
8271 cstop->op_private |= OPpCONST_SHORTCIRCUIT;
8276 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
8277 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
8279 const OP * const k1 = ((UNOP*)first)->op_first;
8280 const OP * const k2 = OpSIBLING(k1);
8282 switch (first->op_type)
8285 if (k2 && k2->op_type == OP_READLINE
8286 && (k2->op_flags & OPf_STACKED)
8287 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
8289 warnop = k2->op_type;
8294 if (k1->op_type == OP_READDIR
8295 || k1->op_type == OP_GLOB
8296 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
8297 || k1->op_type == OP_EACH
8298 || k1->op_type == OP_AEACH)
8300 warnop = ((k1->op_type == OP_NULL)
8301 ? (OPCODE)k1->op_targ : k1->op_type);
8306 const line_t oldline = CopLINE(PL_curcop);
8307 /* This ensures that warnings are reported at the first line
8308 of the construction, not the last. */
8309 CopLINE_set(PL_curcop, PL_parser->copline);
8310 Perl_warner(aTHX_ packWARN(WARN_MISC),
8311 "Value of %s%s can be \"0\"; test with defined()",
8313 ((warnop == OP_READLINE || warnop == OP_GLOB)
8314 ? " construct" : "() operator"));
8315 CopLINE_set(PL_curcop, oldline);
8319 /* optimize AND and OR ops that have NOTs as children */
8320 if (first->op_type == OP_NOT
8321 && (first->op_flags & OPf_KIDS)
8322 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
8323 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
8325 if (type == OP_AND || type == OP_OR) {
8331 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
8333 prepend_not = 1; /* prepend a NOT op later */
8338 logop = alloc_LOGOP(type, first, LINKLIST(other));
8339 logop->op_flags |= (U8)flags;
8340 logop->op_private = (U8)(1 | (flags >> 8));
8342 /* establish postfix order */
8343 logop->op_next = LINKLIST(first);
8344 first->op_next = (OP*)logop;
8345 assert(!OpHAS_SIBLING(first));
8346 op_sibling_splice((OP*)logop, first, 0, other);
8348 CHECKOP(type,logop);
8350 o = newUNOP(prepend_not ? OP_NOT : OP_NULL,
8351 PL_opargs[type] & OA_RETSCALAR ? OPf_WANT_SCALAR : 0,
8359 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
8361 Constructs, checks, and returns a conditional-expression (C<cond_expr>)
8362 op. C<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
8363 will be set automatically, and, shifted up eight bits, the eight bits of
8364 C<op_private>, except that the bit with value 1 is automatically set.
8365 C<first> supplies the expression selecting between the two branches,
8366 and C<trueop> and C<falseop> supply the branches; they are consumed by
8367 this function and become part of the constructed op tree.
8373 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
8381 PERL_ARGS_ASSERT_NEWCONDOP;
8384 return newLOGOP(OP_AND, 0, first, trueop);
8386 return newLOGOP(OP_OR, 0, first, falseop);
8388 scalarboolean(first);
8389 if ((cstop = search_const(first))) {
8390 /* Left or right arm of the conditional? */
8391 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
8392 OP *live = left ? trueop : falseop;
8393 OP *const dead = left ? falseop : trueop;
8394 if (cstop->op_private & OPpCONST_BARE &&
8395 cstop->op_private & OPpCONST_STRICT) {
8396 no_bareword_allowed(cstop);
8400 if (live->op_type == OP_LEAVE)
8401 live = newUNOP(OP_NULL, OPf_SPECIAL, live);
8402 else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST
8403 || live->op_type == OP_TRANS || live->op_type == OP_TRANSR)
8404 /* Mark the op as being unbindable with =~ */
8405 live->op_flags |= OPf_SPECIAL;
8406 live->op_folded = 1;
8409 logop = alloc_LOGOP(OP_COND_EXPR, first, LINKLIST(trueop));
8410 logop->op_flags |= (U8)flags;
8411 logop->op_private = (U8)(1 | (flags >> 8));
8412 logop->op_next = LINKLIST(falseop);
8414 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
8417 /* establish postfix order */
8418 start = LINKLIST(first);
8419 first->op_next = (OP*)logop;
8421 /* make first, trueop, falseop siblings */
8422 op_sibling_splice((OP*)logop, first, 0, trueop);
8423 op_sibling_splice((OP*)logop, trueop, 0, falseop);
8425 o = newUNOP(OP_NULL, 0, (OP*)logop);
8427 trueop->op_next = falseop->op_next = o;
8434 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
8436 Constructs and returns a C<range> op, with subordinate C<flip> and
8437 C<flop> ops. C<flags> gives the eight bits of C<op_flags> for the
8438 C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
8439 for both the C<flip> and C<range> ops, except that the bit with value
8440 1 is automatically set. C<left> and C<right> supply the expressions
8441 controlling the endpoints of the range; they are consumed by this function
8442 and become part of the constructed op tree.
8448 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
8456 PERL_ARGS_ASSERT_NEWRANGE;
8458 range = alloc_LOGOP(OP_RANGE, left, LINKLIST(right));
8459 range->op_flags = OPf_KIDS;
8460 leftstart = LINKLIST(left);
8461 range->op_private = (U8)(1 | (flags >> 8));
8463 /* make left and right siblings */
8464 op_sibling_splice((OP*)range, left, 0, right);
8466 range->op_next = (OP*)range;
8467 flip = newUNOP(OP_FLIP, flags, (OP*)range);
8468 flop = newUNOP(OP_FLOP, 0, flip);
8469 o = newUNOP(OP_NULL, 0, flop);
8471 range->op_next = leftstart;
8473 left->op_next = flip;
8474 right->op_next = flop;
8477 pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0);
8478 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
8480 pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0);;
8481 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
8482 SvPADTMP_on(PAD_SV(flip->op_targ));
8484 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
8485 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
8487 /* check barewords before they might be optimized aways */
8488 if (flip->op_private && cSVOPx(left)->op_private & OPpCONST_STRICT)
8489 no_bareword_allowed(left);
8490 if (flop->op_private && cSVOPx(right)->op_private & OPpCONST_STRICT)
8491 no_bareword_allowed(right);
8494 if (!flip->op_private || !flop->op_private)
8495 LINKLIST(o); /* blow off optimizer unless constant */
8501 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
8503 Constructs, checks, and returns an op tree expressing a loop. This is
8504 only a loop in the control flow through the op tree; it does not have
8505 the heavyweight loop structure that allows exiting the loop by C<last>
8506 and suchlike. C<flags> gives the eight bits of C<op_flags> for the
8507 top-level op, except that some bits will be set automatically as required.
8508 C<expr> supplies the expression controlling loop iteration, and C<block>
8509 supplies the body of the loop; they are consumed by this function and
8510 become part of the constructed op tree. C<debuggable> is currently
8511 unused and should always be 1.
8517 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
8521 const bool once = block && block->op_flags & OPf_SPECIAL &&
8522 block->op_type == OP_NULL;
8524 PERL_UNUSED_ARG(debuggable);
8528 (expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
8529 || ( expr->op_type == OP_NOT
8530 && cUNOPx(expr)->op_first->op_type == OP_CONST
8531 && SvTRUE(cSVOPx_sv(cUNOPx(expr)->op_first))
8534 /* Return the block now, so that S_new_logop does not try to
8536 return block; /* do {} while 0 does once */
8537 if (expr->op_type == OP_READLINE
8538 || expr->op_type == OP_READDIR
8539 || expr->op_type == OP_GLOB
8540 || expr->op_type == OP_EACH || expr->op_type == OP_AEACH
8541 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
8542 expr = newUNOP(OP_DEFINED, 0,
8543 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
8544 } else if (expr->op_flags & OPf_KIDS) {
8545 const OP * const k1 = ((UNOP*)expr)->op_first;
8546 const OP * const k2 = k1 ? OpSIBLING(k1) : NULL;
8547 switch (expr->op_type) {
8549 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
8550 && (k2->op_flags & OPf_STACKED)
8551 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
8552 expr = newUNOP(OP_DEFINED, 0, expr);
8556 if (k1 && (k1->op_type == OP_READDIR
8557 || k1->op_type == OP_GLOB
8558 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
8559 || k1->op_type == OP_EACH
8560 || k1->op_type == OP_AEACH))
8561 expr = newUNOP(OP_DEFINED, 0, expr);
8567 /* if block is null, the next op_append_elem() would put UNSTACK, a scalar
8568 * op, in listop. This is wrong. [perl #27024] */
8570 block = newOP(OP_NULL, 0);
8571 listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
8572 o = new_logop(OP_AND, 0, &expr, &listop);
8579 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
8581 if (once && o != listop)
8583 assert(cUNOPo->op_first->op_type == OP_AND
8584 || cUNOPo->op_first->op_type == OP_OR);
8585 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
8589 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
8591 o->op_flags |= flags;
8593 o->op_flags |= OPf_SPECIAL; /* suppress cx_popblock() curpm restoration*/
8598 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my
8600 Constructs, checks, and returns an op tree expressing a C<while> loop.
8601 This is a heavyweight loop, with structure that allows exiting the loop
8602 by C<last> and suchlike.
8604 C<loop> is an optional preconstructed C<enterloop> op to use in the
8605 loop; if it is null then a suitable op will be constructed automatically.
8606 C<expr> supplies the loop's controlling expression. C<block> supplies the
8607 main body of the loop, and C<cont> optionally supplies a C<continue> block
8608 that operates as a second half of the body. All of these optree inputs
8609 are consumed by this function and become part of the constructed op tree.
8611 C<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
8612 op and, shifted up eight bits, the eight bits of C<op_private> for
8613 the C<leaveloop> op, except that (in both cases) some bits will be set
8614 automatically. C<debuggable> is currently unused and should always be 1.
8615 C<has_my> can be supplied as true to force the
8616 loop body to be enclosed in its own scope.
8622 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
8623 OP *expr, OP *block, OP *cont, I32 has_my)
8632 PERL_UNUSED_ARG(debuggable);
8635 if (expr->op_type == OP_READLINE
8636 || expr->op_type == OP_READDIR
8637 || expr->op_type == OP_GLOB
8638 || expr->op_type == OP_EACH || expr->op_type == OP_AEACH
8639 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
8640 expr = newUNOP(OP_DEFINED, 0,
8641 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
8642 } else if (expr->op_flags & OPf_KIDS) {
8643 const OP * const k1 = ((UNOP*)expr)->op_first;
8644 const OP * const k2 = (k1) ? OpSIBLING(k1) : NULL;
8645 switch (expr->op_type) {
8647 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
8648 && (k2->op_flags & OPf_STACKED)
8649 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
8650 expr = newUNOP(OP_DEFINED, 0, expr);
8654 if (k1 && (k1->op_type == OP_READDIR
8655 || k1->op_type == OP_GLOB
8656 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
8657 || k1->op_type == OP_EACH
8658 || k1->op_type == OP_AEACH))
8659 expr = newUNOP(OP_DEFINED, 0, expr);
8666 block = newOP(OP_NULL, 0);
8667 else if (cont || has_my) {
8668 block = op_scope(block);
8672 next = LINKLIST(cont);
8675 OP * const unstack = newOP(OP_UNSTACK, 0);
8678 cont = op_append_elem(OP_LINESEQ, cont, unstack);
8682 listop = op_append_list(OP_LINESEQ, block, cont);
8684 redo = LINKLIST(listop);
8688 o = new_logop(OP_AND, 0, &expr, &listop);
8689 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
8691 return expr; /* listop already freed by new_logop */
8694 ((LISTOP*)listop)->op_last->op_next =
8695 (o == listop ? redo : LINKLIST(o));
8701 NewOp(1101,loop,1,LOOP);
8702 OpTYPE_set(loop, OP_ENTERLOOP);
8703 loop->op_private = 0;
8704 loop->op_next = (OP*)loop;
8707 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
8709 loop->op_redoop = redo;
8710 loop->op_lastop = o;
8711 o->op_private |= loopflags;
8714 loop->op_nextop = next;
8716 loop->op_nextop = o;
8718 o->op_flags |= flags;
8719 o->op_private |= (flags >> 8);
8724 =for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont
8726 Constructs, checks, and returns an op tree expressing a C<foreach>
8727 loop (iteration through a list of values). This is a heavyweight loop,
8728 with structure that allows exiting the loop by C<last> and suchlike.
8730 C<sv> optionally supplies the variable that will be aliased to each
8731 item in turn; if null, it defaults to C<$_>.
8732 C<expr> supplies the list of values to iterate over. C<block> supplies
8733 the main body of the loop, and C<cont> optionally supplies a C<continue>
8734 block that operates as a second half of the body. All of these optree
8735 inputs are consumed by this function and become part of the constructed
8738 C<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
8739 op and, shifted up eight bits, the eight bits of C<op_private> for
8740 the C<leaveloop> op, except that (in both cases) some bits will be set
8747 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
8752 PADOFFSET padoff = 0;
8756 PERL_ARGS_ASSERT_NEWFOROP;
8759 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
8760 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
8761 OpTYPE_set(sv, OP_RV2GV);
8763 /* The op_type check is needed to prevent a possible segfault
8764 * if the loop variable is undeclared and 'strict vars' is in
8765 * effect. This is illegal but is nonetheless parsed, so we
8766 * may reach this point with an OP_CONST where we're expecting
8769 if (cUNOPx(sv)->op_first->op_type == OP_GV
8770 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
8771 iterpflags |= OPpITER_DEF;
8773 else if (sv->op_type == OP_PADSV) { /* private variable */
8774 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
8775 padoff = sv->op_targ;
8779 PAD_COMPNAME_GEN_set(padoff, PERL_INT_MAX);
8781 else if (sv->op_type == OP_NULL && sv->op_targ == OP_SREFGEN)
8784 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
8786 PADNAME * const pn = PAD_COMPNAME(padoff);
8787 const char * const name = PadnamePV(pn);
8789 if (PadnameLEN(pn) == 2 && name[0] == '$' && name[1] == '_')
8790 iterpflags |= OPpITER_DEF;
8794 sv = newGVOP(OP_GV, 0, PL_defgv);
8795 iterpflags |= OPpITER_DEF;
8798 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
8799 expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER)), 1), OP_GREPSTART);
8800 iterflags |= OPf_STACKED;
8802 else if (expr->op_type == OP_NULL &&
8803 (expr->op_flags & OPf_KIDS) &&
8804 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
8806 /* Basically turn for($x..$y) into the same as for($x,$y), but we
8807 * set the STACKED flag to indicate that these values are to be
8808 * treated as min/max values by 'pp_enteriter'.
8810 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
8811 LOGOP* const range = (LOGOP*) flip->op_first;
8812 OP* const left = range->op_first;
8813 OP* const right = OpSIBLING(left);
8816 range->op_flags &= ~OPf_KIDS;
8817 /* detach range's children */
8818 op_sibling_splice((OP*)range, NULL, -1, NULL);
8820 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
8821 listop->op_first->op_next = range->op_next;
8822 left->op_next = range->op_other;
8823 right->op_next = (OP*)listop;
8824 listop->op_next = listop->op_first;
8827 expr = (OP*)(listop);
8829 iterflags |= OPf_STACKED;
8832 expr = op_lvalue(force_list(expr, 1), OP_GREPSTART);
8835 loop = (LOOP*)op_convert_list(OP_ENTERITER, iterflags,
8836 op_append_elem(OP_LIST, list(expr),
8838 assert(!loop->op_next);
8839 /* for my $x () sets OPpLVAL_INTRO;
8840 * for our $x () sets OPpOUR_INTRO */
8841 loop->op_private = (U8)iterpflags;
8842 if (loop->op_slabbed
8843 && DIFF(loop, OpSLOT(loop)->opslot_next)
8844 < SIZE_TO_PSIZE(sizeof(LOOP)))
8847 NewOp(1234,tmp,1,LOOP);
8848 Copy(loop,tmp,1,LISTOP);
8849 #ifdef PERL_OP_PARENT
8850 assert(loop->op_last->op_sibparent == (OP*)loop);
8851 OpLASTSIB_set(loop->op_last, (OP*)tmp); /*point back to new parent */
8853 S_op_destroy(aTHX_ (OP*)loop);
8856 else if (!loop->op_slabbed)
8858 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
8859 #ifdef PERL_OP_PARENT
8860 OpLASTSIB_set(loop->op_last, (OP*)loop);
8863 loop->op_targ = padoff;
8864 wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0);
8869 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
8871 Constructs, checks, and returns a loop-exiting op (such as C<goto>
8872 or C<last>). C<type> is the opcode. C<label> supplies the parameter
8873 determining the target of the op; it is consumed by this function and
8874 becomes part of the constructed op tree.
8880 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
8884 PERL_ARGS_ASSERT_NEWLOOPEX;
8886 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
8887 || type == OP_CUSTOM);
8889 if (type != OP_GOTO) {
8890 /* "last()" means "last" */
8891 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS)) {
8892 o = newOP(type, OPf_SPECIAL);
8896 /* Check whether it's going to be a goto &function */
8897 if (label->op_type == OP_ENTERSUB
8898 && !(label->op_flags & OPf_STACKED))
8899 label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN));
8902 /* Check for a constant argument */
8903 if (label->op_type == OP_CONST) {
8904 SV * const sv = ((SVOP *)label)->op_sv;
8906 const char *s = SvPV_const(sv,l);
8907 if (l == strlen(s)) {
8909 SvUTF8(((SVOP*)label)->op_sv),
8911 SvPV_nolen_const(((SVOP*)label)->op_sv)));
8915 /* If we have already created an op, we do not need the label. */
8918 else o = newUNOP(type, OPf_STACKED, label);
8920 PL_hints |= HINT_BLOCK_SCOPE;
8924 /* if the condition is a literal array or hash
8925 (or @{ ... } etc), make a reference to it.
8928 S_ref_array_or_hash(pTHX_ OP *cond)
8931 && (cond->op_type == OP_RV2AV
8932 || cond->op_type == OP_PADAV
8933 || cond->op_type == OP_RV2HV
8934 || cond->op_type == OP_PADHV))
8936 return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN));
8939 && (cond->op_type == OP_ASLICE
8940 || cond->op_type == OP_KVASLICE
8941 || cond->op_type == OP_HSLICE
8942 || cond->op_type == OP_KVHSLICE)) {
8944 /* anonlist now needs a list from this op, was previously used in
8946 cond->op_flags &= ~(OPf_WANT_SCALAR | OPf_REF);
8947 cond->op_flags |= OPf_WANT_LIST;
8949 return newANONLIST(op_lvalue(cond, OP_ANONLIST));
8956 /* These construct the optree fragments representing given()
8959 entergiven and enterwhen are LOGOPs; the op_other pointer
8960 points up to the associated leave op. We need this so we
8961 can put it in the context and make break/continue work.
8962 (Also, of course, pp_enterwhen will jump straight to
8963 op_other if the match fails.)
8967 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
8968 I32 enter_opcode, I32 leave_opcode,
8969 PADOFFSET entertarg)
8975 PERL_ARGS_ASSERT_NEWGIVWHENOP;
8976 PERL_UNUSED_ARG(entertarg); /* used to indicate targ of lexical $_ */
8978 enterop = alloc_LOGOP(enter_opcode, block, NULL);
8979 enterop->op_targ = 0;
8980 enterop->op_private = 0;
8982 o = newUNOP(leave_opcode, 0, (OP *) enterop);
8985 /* prepend cond if we have one */
8986 op_sibling_splice((OP*)enterop, NULL, 0, scalar(cond));
8988 o->op_next = LINKLIST(cond);
8989 cond->op_next = (OP *) enterop;
8992 /* This is a default {} block */
8993 enterop->op_flags |= OPf_SPECIAL;
8994 o ->op_flags |= OPf_SPECIAL;
8996 o->op_next = (OP *) enterop;
8999 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
9000 entergiven and enterwhen both
9003 enterop->op_next = LINKLIST(block);
9004 block->op_next = enterop->op_other = o;
9009 /* Does this look like a boolean operation? For these purposes
9010 a boolean operation is:
9011 - a subroutine call [*]
9012 - a logical connective
9013 - a comparison operator
9014 - a filetest operator, with the exception of -s -M -A -C
9015 - defined(), exists() or eof()
9016 - /$re/ or $foo =~ /$re/
9018 [*] possibly surprising
9021 S_looks_like_bool(pTHX_ const OP *o)
9023 PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
9025 switch(o->op_type) {
9028 return looks_like_bool(cLOGOPo->op_first);
9032 OP* sibl = OpSIBLING(cLOGOPo->op_first);
9035 looks_like_bool(cLOGOPo->op_first)
9036 && looks_like_bool(sibl));
9042 o->op_flags & OPf_KIDS
9043 && looks_like_bool(cUNOPo->op_first));
9047 case OP_NOT: case OP_XOR:
9049 case OP_EQ: case OP_NE: case OP_LT:
9050 case OP_GT: case OP_LE: case OP_GE:
9052 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
9053 case OP_I_GT: case OP_I_LE: case OP_I_GE:
9055 case OP_SEQ: case OP_SNE: case OP_SLT:
9056 case OP_SGT: case OP_SLE: case OP_SGE:
9060 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
9061 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
9062 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
9063 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
9064 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
9065 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
9066 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
9067 case OP_FTTEXT: case OP_FTBINARY:
9069 case OP_DEFINED: case OP_EXISTS:
9070 case OP_MATCH: case OP_EOF:
9077 /* Detect comparisons that have been optimized away */
9078 if (cSVOPo->op_sv == &PL_sv_yes
9079 || cSVOPo->op_sv == &PL_sv_no)
9092 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
9094 Constructs, checks, and returns an op tree expressing a C<given> block.
9095 C<cond> supplies the expression to whose value C<$_> will be locally
9096 aliased, and C<block> supplies the body of the C<given> construct; they
9097 are consumed by this function and become part of the constructed op tree.
9098 C<defsv_off> must be zero (it used to identity the pad slot of lexical $_).
9104 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
9106 PERL_ARGS_ASSERT_NEWGIVENOP;
9107 PERL_UNUSED_ARG(defsv_off);
9110 return newGIVWHENOP(
9111 ref_array_or_hash(cond),
9113 OP_ENTERGIVEN, OP_LEAVEGIVEN,
9118 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
9120 Constructs, checks, and returns an op tree expressing a C<when> block.
9121 C<cond> supplies the test expression, and C<block> supplies the block
9122 that will be executed if the test evaluates to true; they are consumed
9123 by this function and become part of the constructed op tree. C<cond>
9124 will be interpreted DWIMically, often as a comparison against C<$_>,
9125 and may be null to generate a C<default> block.
9131 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
9133 const bool cond_llb = (!cond || looks_like_bool(cond));
9136 PERL_ARGS_ASSERT_NEWWHENOP;
9141 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
9143 scalar(ref_array_or_hash(cond)));
9146 return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0);
9149 /* must not conflict with SVf_UTF8 */
9150 #define CV_CKPROTO_CURSTASH 0x1
9153 Perl_cv_ckproto_len_flags(pTHX_ const CV *cv, const GV *gv, const char *p,
9154 const STRLEN len, const U32 flags)
9156 SV *name = NULL, *msg;
9157 const char * cvp = SvROK(cv)
9158 ? SvTYPE(SvRV_const(cv)) == SVt_PVCV
9159 ? (cv = (const CV *)SvRV_const(cv), CvPROTO(cv))
9162 STRLEN clen = CvPROTOLEN(cv), plen = len;
9164 PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS;
9166 if (p == NULL && cvp == NULL)
9169 if (!ckWARN_d(WARN_PROTOTYPE))
9173 p = S_strip_spaces(aTHX_ p, &plen);
9174 cvp = S_strip_spaces(aTHX_ cvp, &clen);
9175 if ((flags & SVf_UTF8) == SvUTF8(cv)) {
9176 if (plen == clen && memEQ(cvp, p, plen))
9179 if (flags & SVf_UTF8) {
9180 if (bytes_cmp_utf8((const U8 *)cvp, clen, (const U8 *)p, plen) == 0)
9184 if (bytes_cmp_utf8((const U8 *)p, plen, (const U8 *)cvp, clen) == 0)
9190 msg = sv_newmortal();
9195 gv_efullname3(name = sv_newmortal(), gv, NULL);
9196 else if (SvPOK(gv) && *SvPVX((SV *)gv) == '&')
9197 name = newSVpvn_flags(SvPVX((SV *)gv)+1, SvCUR(gv)-1, SvUTF8(gv)|SVs_TEMP);
9198 else if (flags & CV_CKPROTO_CURSTASH || SvROK(gv)) {
9199 name = sv_2mortal(newSVhek(HvNAME_HEK(PL_curstash)));
9200 sv_catpvs(name, "::");
9202 assert (SvTYPE(SvRV_const(gv)) == SVt_PVCV);
9203 assert (CvNAMED(SvRV_const(gv)));
9204 sv_cathek(name, CvNAME_HEK(MUTABLE_CV(SvRV_const(gv))));
9206 else sv_catsv(name, (SV *)gv);
9208 else name = (SV *)gv;
9210 sv_setpvs(msg, "Prototype mismatch:");
9212 Perl_sv_catpvf(aTHX_ msg, " sub %" SVf, SVfARG(name));
9214 Perl_sv_catpvf(aTHX_ msg, " (%" UTF8f ")",
9215 UTF8fARG(SvUTF8(cv),clen,cvp)
9218 sv_catpvs(msg, ": none");
9219 sv_catpvs(msg, " vs ");
9221 Perl_sv_catpvf(aTHX_ msg, "(%" UTF8f ")", UTF8fARG(flags & SVf_UTF8,len,p));
9223 sv_catpvs(msg, "none");
9224 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%" SVf, SVfARG(msg));
9227 static void const_sv_xsub(pTHX_ CV* cv);
9228 static void const_av_xsub(pTHX_ CV* cv);
9232 =head1 Optree Manipulation Functions
9234 =for apidoc cv_const_sv
9236 If C<cv> is a constant sub eligible for inlining, returns the constant
9237 value returned by the sub. Otherwise, returns C<NULL>.
9239 Constant subs can be created with C<newCONSTSUB> or as described in
9240 L<perlsub/"Constant Functions">.
9245 Perl_cv_const_sv(const CV *const cv)
9250 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
9252 sv = CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
9253 if (sv && SvTYPE(sv) == SVt_PVAV) return NULL;
9258 Perl_cv_const_sv_or_av(const CV * const cv)
9262 if (SvROK(cv)) return SvRV((SV *)cv);
9263 assert (SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
9264 return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
9267 /* op_const_sv: examine an optree to determine whether it's in-lineable.
9268 * Can be called in 2 ways:
9271 * look for a single OP_CONST with attached value: return the value
9273 * allow_lex && !CvCONST(cv);
9275 * examine the clone prototype, and if contains only a single
9276 * OP_CONST, return the value; or if it contains a single PADSV ref-
9277 * erencing an outer lexical, turn on CvCONST to indicate the CV is
9278 * a candidate for "constizing" at clone time, and return NULL.
9282 S_op_const_sv(pTHX_ const OP *o, CV *cv, bool allow_lex)
9290 for (; o; o = o->op_next) {
9291 const OPCODE type = o->op_type;
9293 if (type == OP_NEXTSTATE || type == OP_LINESEQ
9295 || type == OP_PUSHMARK)
9297 if (type == OP_DBSTATE)
9299 if (type == OP_LEAVESUB)
9303 if (type == OP_CONST && cSVOPo->op_sv)
9305 else if (type == OP_UNDEF && !o->op_private) {
9309 else if (allow_lex && type == OP_PADSV) {
9310 if (PAD_COMPNAME_FLAGS(o->op_targ) & PADNAMEt_OUTER)
9312 sv = &PL_sv_undef; /* an arbitrary non-null value */
9330 S_already_defined(pTHX_ CV *const cv, OP * const block, OP * const o,
9331 PADNAME * const name, SV ** const const_svp)
9337 if (CvFLAGS(PL_compcv)) {
9338 /* might have had built-in attrs applied */
9339 const bool pureperl = !CvISXSUB(cv) && CvROOT(cv);
9340 if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && pureperl
9341 && ckWARN(WARN_MISC))
9343 /* protect against fatal warnings leaking compcv */
9344 SAVEFREESV(PL_compcv);
9345 Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
9346 SvREFCNT_inc_simple_void_NN(PL_compcv);
9349 (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS
9350 & ~(CVf_LVALUE * pureperl));
9355 /* redundant check for speed: */
9356 if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) {
9357 const line_t oldline = CopLINE(PL_curcop);
9360 : sv_2mortal(newSVpvn_utf8(
9361 PadnamePV(name)+1,PadnameLEN(name)-1, PadnameUTF8(name)
9363 if (PL_parser && PL_parser->copline != NOLINE)
9364 /* This ensures that warnings are reported at the first
9365 line of a redefinition, not the last. */
9366 CopLINE_set(PL_curcop, PL_parser->copline);
9367 /* protect against fatal warnings leaking compcv */
9368 SAVEFREESV(PL_compcv);
9369 report_redefined_cv(namesv, cv, const_svp);
9370 SvREFCNT_inc_simple_void_NN(PL_compcv);
9371 CopLINE_set(PL_curcop, oldline);
9378 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
9383 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
9386 CV *compcv = PL_compcv;
9389 PADOFFSET pax = o->op_targ;
9390 CV *outcv = CvOUTSIDE(PL_compcv);
9393 bool reusable = FALSE;
9395 #ifdef PERL_DEBUG_READONLY_OPS
9396 OPSLAB *slab = NULL;
9399 PERL_ARGS_ASSERT_NEWMYSUB;
9401 PL_hints |= HINT_BLOCK_SCOPE;
9403 /* Find the pad slot for storing the new sub.
9404 We cannot use PL_comppad, as it is the pad owned by the new sub. We
9405 need to look in CvOUTSIDE and find the pad belonging to the enclos-
9406 ing sub. And then we need to dig deeper if this is a lexical from
9408 my sub foo; sub { sub foo { } }
9411 name = PadlistNAMESARRAY(CvPADLIST(outcv))[pax];
9412 if (PadnameOUTER(name) && PARENT_PAD_INDEX(name)) {
9413 pax = PARENT_PAD_INDEX(name);
9414 outcv = CvOUTSIDE(outcv);
9419 &PadARRAY(PadlistARRAY(CvPADLIST(outcv))
9420 [CvDEPTH(outcv) ? CvDEPTH(outcv) : 1])[pax];
9421 spot = (CV **)svspot;
9423 if (!(PL_parser && PL_parser->error_count))
9424 move_proto_attr(&proto, &attrs, (GV *)PadnameSV(name), 0);
9427 assert(proto->op_type == OP_CONST);
9428 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
9429 ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv);
9439 if (PL_parser && PL_parser->error_count) {
9441 SvREFCNT_dec(PL_compcv);
9446 if (CvDEPTH(outcv) && CvCLONE(compcv)) {
9448 svspot = (SV **)(spot = &clonee);
9450 else if (PadnameIsSTATE(name) || CvDEPTH(outcv))
9453 assert (SvTYPE(*spot) == SVt_PVCV);
9455 hek = CvNAME_HEK(*spot);
9459 PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1);
9460 CvNAME_HEK_set(*spot, hek =
9463 (PadnameLEN(name)-1) * (PadnameUTF8(name) ? -1 : 1),
9467 CvLEXICAL_on(*spot);
9469 cv = PadnamePROTOCV(name);
9470 svspot = (SV **)(spot = &PadnamePROTOCV(name));
9474 /* This makes sub {}; work as expected. */
9475 if (block->op_type == OP_STUB) {
9476 const line_t l = PL_parser->copline;
9478 block = newSTATEOP(0, NULL, 0);
9479 PL_parser->copline = l;
9481 block = CvLVALUE(compcv)
9482 || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv))
9483 ? newUNOP(OP_LEAVESUBLV, 0,
9484 op_lvalue(scalarseq(block), OP_LEAVESUBLV))
9485 : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
9486 start = LINKLIST(block);
9488 if (ps && !*ps && !attrs && !CvLVALUE(compcv))
9489 const_sv = S_op_const_sv(aTHX_ start, compcv, FALSE);
9497 const bool exists = CvROOT(cv) || CvXSUB(cv);
9499 /* if the subroutine doesn't exist and wasn't pre-declared
9500 * with a prototype, assume it will be AUTOLOADed,
9501 * skipping the prototype check
9503 if (exists || SvPOK(cv))
9504 cv_ckproto_len_flags(cv, (GV *)PadnameSV(name), ps, ps_len,
9506 /* already defined? */
9508 S_already_defined(aTHX_ cv, block, NULL, name, &const_sv);
9514 /* just a "sub foo;" when &foo is already defined */
9519 else if (CvDEPTH(outcv) && CvCLONE(compcv)) {
9526 SvREFCNT_inc_simple_void_NN(const_sv);
9527 SvFLAGS(const_sv) |= SVs_PADTMP;
9529 assert(!CvROOT(cv) && !CvCONST(cv));
9533 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
9534 CvFILE_set_from_cop(cv, PL_curcop);
9535 CvSTASH_set(cv, PL_curstash);
9538 SvPVCLEAR(MUTABLE_SV(cv)); /* prototype is "" */
9539 CvXSUBANY(cv).any_ptr = const_sv;
9540 CvXSUB(cv) = const_sv_xsub;
9544 CvFLAGS(cv) |= CvMETHOD(compcv);
9546 SvREFCNT_dec(compcv);
9551 /* Checking whether outcv is CvOUTSIDE(compcv) is not sufficient to
9552 determine whether this sub definition is in the same scope as its
9553 declaration. If this sub definition is inside an inner named pack-
9554 age sub (my sub foo; sub bar { sub foo { ... } }), outcv points to
9555 the package sub. So check PadnameOUTER(name) too.
9557 if (outcv == CvOUTSIDE(compcv) && !PadnameOUTER(name)) {
9558 assert(!CvWEAKOUTSIDE(compcv));
9559 SvREFCNT_dec(CvOUTSIDE(compcv));
9560 CvWEAKOUTSIDE_on(compcv);
9562 /* XXX else do we have a circular reference? */
9564 if (cv) { /* must reuse cv in case stub is referenced elsewhere */
9565 /* transfer PL_compcv to cv */
9567 cv_flags_t preserved_flags =
9568 CvFLAGS(cv) & (CVf_BUILTIN_ATTRS|CVf_NAMED);
9569 PADLIST *const temp_padl = CvPADLIST(cv);
9570 CV *const temp_cv = CvOUTSIDE(cv);
9571 const cv_flags_t other_flags =
9572 CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE);
9573 OP * const cvstart = CvSTART(cv);
9577 CvFLAGS(compcv) | preserved_flags;
9578 CvOUTSIDE(cv) = CvOUTSIDE(compcv);
9579 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(compcv);
9580 CvPADLIST_set(cv, CvPADLIST(compcv));
9581 CvOUTSIDE(compcv) = temp_cv;
9582 CvPADLIST_set(compcv, temp_padl);
9583 CvSTART(cv) = CvSTART(compcv);
9584 CvSTART(compcv) = cvstart;
9585 CvFLAGS(compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE);
9586 CvFLAGS(compcv) |= other_flags;
9588 if (CvFILE(cv) && CvDYNFILE(cv)) {
9589 Safefree(CvFILE(cv));
9592 /* inner references to compcv must be fixed up ... */
9593 pad_fixup_inner_anons(CvPADLIST(cv), compcv, cv);
9594 if (PERLDB_INTER)/* Advice debugger on the new sub. */
9595 ++PL_sub_generation;
9598 /* Might have had built-in attributes applied -- propagate them. */
9599 CvFLAGS(cv) |= (CvFLAGS(compcv) & CVf_BUILTIN_ATTRS);
9601 /* ... before we throw it away */
9602 SvREFCNT_dec(compcv);
9603 PL_compcv = compcv = cv;
9612 if (!CvNAME_HEK(cv)) {
9613 if (hek) (void)share_hek_hek(hek);
9617 PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1);
9618 hek = share_hek(PadnamePV(name)+1,
9619 (PadnameLEN(name)-1) * (PadnameUTF8(name) ? -1 : 1),
9622 CvNAME_HEK_set(cv, hek);
9628 CvFILE_set_from_cop(cv, PL_curcop);
9629 CvSTASH_set(cv, PL_curstash);
9632 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
9634 SvUTF8_on(MUTABLE_SV(cv));
9638 /* If we assign an optree to a PVCV, then we've defined a
9639 * subroutine that the debugger could be able to set a breakpoint
9640 * in, so signal to pp_entereval that it should not throw away any
9641 * saved lines at scope exit. */
9643 PL_breakable_sub_gen++;
9645 /* The cv no longer needs to hold a refcount on the slab, as CvROOT
9646 itself has a refcount. */
9648 OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv));
9649 #ifdef PERL_DEBUG_READONLY_OPS
9650 slab = (OPSLAB *)CvSTART(cv);
9652 S_process_optree(aTHX_ cv, block, start);
9657 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
9658 apply_attrs(PL_curstash, MUTABLE_SV(cv), attrs);
9662 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
9663 SV * const tmpstr = sv_newmortal();
9664 GV * const db_postponed = gv_fetchpvs("DB::postponed",
9665 GV_ADDMULTI, SVt_PVHV);
9667 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
9670 (long)CopLINE(PL_curcop));
9671 if (HvNAME_HEK(PL_curstash)) {
9672 sv_sethek(tmpstr, HvNAME_HEK(PL_curstash));
9673 sv_catpvs(tmpstr, "::");
9676 sv_setpvs(tmpstr, "__ANON__::");
9678 sv_catpvn_flags(tmpstr, PadnamePV(name)+1, PadnameLEN(name)-1,
9679 PadnameUTF8(name) ? SV_CATUTF8 : SV_CATBYTES);
9680 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
9681 SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0);
9682 hv = GvHVn(db_postponed);
9683 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) {
9684 CV * const pcv = GvCV(db_postponed);
9690 call_sv(MUTABLE_SV(pcv), G_DISCARD);
9698 assert(CvDEPTH(outcv));
9700 &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[CvDEPTH(outcv)])[pax];
9702 cv_clone_into(clonee, *spot);
9703 else *spot = cv_clone(clonee);
9704 SvREFCNT_dec_NN(clonee);
9708 if (CvDEPTH(outcv) && !reusable && PadnameIsSTATE(name)) {
9709 PADOFFSET depth = CvDEPTH(outcv);
9712 svspot = &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[depth])[pax];
9714 *svspot = SvREFCNT_inc_simple_NN(cv);
9715 SvREFCNT_dec(oldcv);
9721 PL_parser->copline = NOLINE;
9723 #ifdef PERL_DEBUG_READONLY_OPS
9732 =for apidoc m|CV *|newATTRSUB_x|I32 floor|OP *o|OP *proto|OP *attrs|OP *block|bool o_is_gv
9734 Construct a Perl subroutine, also performing some surrounding jobs.
9736 This function is expected to be called in a Perl compilation context,
9737 and some aspects of the subroutine are taken from global variables
9738 associated with compilation. In particular, C<PL_compcv> represents
9739 the subroutine that is currently being compiled. It must be non-null
9740 when this function is called, and some aspects of the subroutine being
9741 constructed are taken from it. The constructed subroutine may actually
9742 be a reuse of the C<PL_compcv> object, but will not necessarily be so.
9744 If C<block> is null then the subroutine will have no body, and for the
9745 time being it will be an error to call it. This represents a forward
9746 subroutine declaration such as S<C<sub foo ($$);>>. If C<block> is
9747 non-null then it provides the Perl code of the subroutine body, which
9748 will be executed when the subroutine is called. This body includes
9749 any argument unwrapping code resulting from a subroutine signature or
9750 similar. The pad use of the code must correspond to the pad attached
9751 to C<PL_compcv>. The code is not expected to include a C<leavesub> or
9752 C<leavesublv> op; this function will add such an op. C<block> is consumed
9753 by this function and will become part of the constructed subroutine.
9755 C<proto> specifies the subroutine's prototype, unless one is supplied
9756 as an attribute (see below). If C<proto> is null, then the subroutine
9757 will not have a prototype. If C<proto> is non-null, it must point to a
9758 C<const> op whose value is a string, and the subroutine will have that
9759 string as its prototype. If a prototype is supplied as an attribute, the
9760 attribute takes precedence over C<proto>, but in that case C<proto> should
9761 preferably be null. In any case, C<proto> is consumed by this function.
9763 C<attrs> supplies attributes to be applied the subroutine. A handful of
9764 attributes take effect by built-in means, being applied to C<PL_compcv>
9765 immediately when seen. Other attributes are collected up and attached
9766 to the subroutine by this route. C<attrs> may be null to supply no
9767 attributes, or point to a C<const> op for a single attribute, or point
9768 to a C<list> op whose children apart from the C<pushmark> are C<const>
9769 ops for one or more attributes. Each C<const> op must be a string,
9770 giving the attribute name optionally followed by parenthesised arguments,
9771 in the manner in which attributes appear in Perl source. The attributes
9772 will be applied to the sub by this function. C<attrs> is consumed by
9775 If C<o_is_gv> is false and C<o> is null, then the subroutine will
9776 be anonymous. If C<o_is_gv> is false and C<o> is non-null, then C<o>
9777 must point to a C<const> op, which will be consumed by this function,
9778 and its string value supplies a name for the subroutine. The name may
9779 be qualified or unqualified, and if it is unqualified then a default
9780 stash will be selected in some manner. If C<o_is_gv> is true, then C<o>
9781 doesn't point to an C<OP> at all, but is instead a cast pointer to a C<GV>
9782 by which the subroutine will be named.
9784 If there is already a subroutine of the specified name, then the new
9785 sub will either replace the existing one in the glob or be merged with
9786 the existing one. A warning may be generated about redefinition.
9788 If the subroutine has one of a few special names, such as C<BEGIN> or
9789 C<END>, then it will be claimed by the appropriate queue for automatic
9790 running of phase-related subroutines. In this case the relevant glob will
9791 be left not containing any subroutine, even if it did contain one before.
9792 In the case of C<BEGIN>, the subroutine will be executed and the reference
9793 to it disposed of before this function returns.
9795 The function returns a pointer to the constructed subroutine. If the sub
9796 is anonymous then ownership of one counted reference to the subroutine
9797 is transferred to the caller. If the sub is named then the caller does
9798 not get ownership of a reference. In most such cases, where the sub
9799 has a non-phase name, the sub will be alive at the point it is returned
9800 by virtue of being contained in the glob that names it. A phase-named
9801 subroutine will usually be alive by virtue of the reference owned by the
9802 phase's automatic run queue. But a C<BEGIN> subroutine, having already
9803 been executed, will quite likely have been destroyed already by the
9804 time this function returns, making it erroneous for the caller to make
9805 any use of the returned pointer. It is the caller's responsibility to
9806 ensure that it knows which of these situations applies.
9813 Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
9814 OP *block, bool o_is_gv)
9818 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
9820 CV *cv = NULL; /* the previous CV with this name, if any */
9822 const bool ec = PL_parser && PL_parser->error_count;
9823 /* If the subroutine has no body, no attributes, and no builtin attributes
9824 then it's just a sub declaration, and we may be able to get away with
9825 storing with a placeholder scalar in the symbol table, rather than a
9826 full CV. If anything is present then it will take a full CV to
9828 const I32 gv_fetch_flags
9829 = ec ? GV_NOADD_NOINIT :
9830 (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
9831 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
9833 const char * const name =
9834 o ? SvPV_const(o_is_gv ? (SV *)o : cSVOPo->op_sv, namlen) : NULL;
9836 bool name_is_utf8 = o && !o_is_gv && SvUTF8(cSVOPo->op_sv);
9837 bool evanescent = FALSE;
9839 #ifdef PERL_DEBUG_READONLY_OPS
9840 OPSLAB *slab = NULL;
9848 /* Try to optimise and avoid creating a GV. Instead, the CV’s name
9849 hek and CvSTASH pointer together can imply the GV. If the name
9850 contains a package name, then GvSTASH(CvGV(cv)) may differ from
9851 CvSTASH, so forego the optimisation if we find any.
9852 Also, we may be called from load_module at run time, so
9853 PL_curstash (which sets CvSTASH) may not point to the stash the
9854 sub is stored in. */
9855 /* XXX This optimization is currently disabled for packages other
9856 than main, since there was too much CPAN breakage. */
9858 ec ? GV_NOADD_NOINIT
9859 : (IN_PERL_RUNTIME && PL_curstash != CopSTASH(PL_curcop))
9860 || PL_curstash != PL_defstash
9861 || memchr(name, ':', namlen) || memchr(name, '\'', namlen)
9863 : GV_ADDMULTI | GV_NOINIT | GV_NOTQUAL;
9864 gv = gv_fetchsv(cSVOPo->op_sv, flags, SVt_PVCV);
9866 } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
9867 SV * const sv = sv_newmortal();
9868 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%" IVdf "]",
9869 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
9870 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
9871 gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
9873 } else if (PL_curstash) {
9874 gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
9877 gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
9883 move_proto_attr(&proto, &attrs, gv, 0);
9886 move_proto_attr(&proto, &attrs, (GV *)cSVOPo->op_sv, 1);
9891 assert(proto->op_type == OP_CONST);
9892 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
9893 ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv);
9909 SvREFCNT_dec(PL_compcv);
9914 if (name && block) {
9915 const char *s = (char *) my_memrchr(name, ':', namlen);
9917 if (strEQ(s, "BEGIN")) {
9918 if (PL_in_eval & EVAL_KEEPERR)
9919 Perl_croak_nocontext("BEGIN not safe after errors--compilation aborted");
9921 SV * const errsv = ERRSV;
9922 /* force display of errors found but not reported */
9923 sv_catpvs(errsv, "BEGIN not safe after errors--compilation aborted");
9924 Perl_croak_nocontext("%" SVf, SVfARG(errsv));
9931 if (!block && SvTYPE(gv) != SVt_PVGV) {
9932 /* If we are not defining a new sub and the existing one is not a
9934 if (attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)) {
9935 /* We are applying attributes to an existing sub, so we need it
9936 upgraded if it is a constant. */
9937 if (SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVCV)
9938 gv_init_pvn(gv, PL_curstash, name, namlen,
9939 SVf_UTF8 * name_is_utf8);
9941 else { /* Maybe prototype now, and had at maximum
9942 a prototype or const/sub ref before. */
9943 if (SvTYPE(gv) > SVt_NULL) {
9944 cv_ckproto_len_flags((const CV *)gv,
9945 o ? (const GV *)cSVOPo->op_sv : NULL, ps,
9951 sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
9953 SvUTF8_on(MUTABLE_SV(gv));
9956 sv_setiv(MUTABLE_SV(gv), -1);
9959 SvREFCNT_dec(PL_compcv);
9960 cv = PL_compcv = NULL;
9965 cv = (!name || (isGV(gv) && GvCVGEN(gv)))
9969 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
9975 /* This makes sub {}; work as expected. */
9976 if (block->op_type == OP_STUB) {
9977 const line_t l = PL_parser->copline;
9979 block = newSTATEOP(0, NULL, 0);
9980 PL_parser->copline = l;
9982 block = CvLVALUE(PL_compcv)
9983 || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv)
9984 && (!isGV(gv) || !GvASSUMECV(gv)))
9985 ? newUNOP(OP_LEAVESUBLV, 0,
9986 op_lvalue(scalarseq(block), OP_LEAVESUBLV))
9987 : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
9988 start = LINKLIST(block);
9990 if (ps && !*ps && !attrs && !CvLVALUE(PL_compcv))
9992 S_op_const_sv(aTHX_ start, PL_compcv,
9993 cBOOL(CvCLONE(PL_compcv)));
10000 if (SvPOK(gv) || (SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVCV)) {
10001 cv_ckproto_len_flags((const CV *)gv,
10002 o ? (const GV *)cSVOPo->op_sv : NULL, ps,
10003 ps_len, ps_utf8|CV_CKPROTO_CURSTASH);
10005 /* All the other code for sub redefinition warnings expects the
10006 clobbered sub to be a CV. Instead of making all those code
10007 paths more complex, just inline the RV version here. */
10008 const line_t oldline = CopLINE(PL_curcop);
10009 assert(IN_PERL_COMPILETIME);
10010 if (PL_parser && PL_parser->copline != NOLINE)
10011 /* This ensures that warnings are reported at the first
10012 line of a redefinition, not the last. */
10013 CopLINE_set(PL_curcop, PL_parser->copline);
10014 /* protect against fatal warnings leaking compcv */
10015 SAVEFREESV(PL_compcv);
10017 if (ckWARN(WARN_REDEFINE)
10018 || ( ckWARN_d(WARN_REDEFINE)
10019 && ( !const_sv || SvRV(gv) == const_sv
10020 || sv_cmp(SvRV(gv), const_sv) ))) {
10022 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10023 "Constant subroutine %" SVf " redefined",
10024 SVfARG(cSVOPo->op_sv));
10027 SvREFCNT_inc_simple_void_NN(PL_compcv);
10028 CopLINE_set(PL_curcop, oldline);
10029 SvREFCNT_dec(SvRV(gv));
10034 const bool exists = CvROOT(cv) || CvXSUB(cv);
10036 /* if the subroutine doesn't exist and wasn't pre-declared
10037 * with a prototype, assume it will be AUTOLOADed,
10038 * skipping the prototype check
10040 if (exists || SvPOK(cv))
10041 cv_ckproto_len_flags(cv, gv, ps, ps_len, ps_utf8);
10042 /* already defined (or promised)? */
10043 if (exists || (isGV(gv) && GvASSUMECV(gv))) {
10044 S_already_defined(aTHX_ cv, block, o, NULL, &const_sv);
10050 /* just a "sub foo;" when &foo is already defined */
10051 SAVEFREESV(PL_compcv);
10058 SvREFCNT_inc_simple_void_NN(const_sv);
10059 SvFLAGS(const_sv) |= SVs_PADTMP;
10061 assert(!CvROOT(cv) && !CvCONST(cv));
10062 cv_forget_slab(cv);
10063 SvPVCLEAR(MUTABLE_SV(cv)); /* prototype is "" */
10064 CvXSUBANY(cv).any_ptr = const_sv;
10065 CvXSUB(cv) = const_sv_xsub;
10069 CvFLAGS(cv) |= CvMETHOD(PL_compcv);
10072 if (isGV(gv) || CvMETHOD(PL_compcv)) {
10073 if (name && isGV(gv))
10074 GvCV_set(gv, NULL);
10075 cv = newCONSTSUB_flags(
10076 NULL, name, namlen, name_is_utf8 ? SVf_UTF8 : 0,
10080 assert(SvREFCNT((SV*)cv) != 0);
10081 CvFLAGS(cv) |= CvMETHOD(PL_compcv);
10085 SV_CHECK_THINKFIRST_COW_DROP((SV *)gv);
10086 prepare_SV_for_RV((SV *)gv);
10087 SvOK_off((SV *)gv);
10090 SvRV_set(gv, const_sv);
10094 SvREFCNT_dec(PL_compcv);
10099 /* don't copy new BEGIN CV to old BEGIN CV - RT #129099 */
10100 if (name && cv && *name == 'B' && strEQ(name, "BEGIN"))
10103 if (cv) { /* must reuse cv if autoloaded */
10104 /* transfer PL_compcv to cv */
10106 cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
10107 PADLIST *const temp_av = CvPADLIST(cv);
10108 CV *const temp_cv = CvOUTSIDE(cv);
10109 const cv_flags_t other_flags =
10110 CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE);
10111 OP * const cvstart = CvSTART(cv);
10115 assert(!CvCVGV_RC(cv));
10116 assert(CvGV(cv) == gv);
10121 PERL_HASH(hash, name, namlen);
10131 CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs
10133 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
10134 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
10135 CvPADLIST_set(cv,CvPADLIST(PL_compcv));
10136 CvOUTSIDE(PL_compcv) = temp_cv;
10137 CvPADLIST_set(PL_compcv, temp_av);
10138 CvSTART(cv) = CvSTART(PL_compcv);
10139 CvSTART(PL_compcv) = cvstart;
10140 CvFLAGS(PL_compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE);
10141 CvFLAGS(PL_compcv) |= other_flags;
10143 if (CvFILE(cv) && CvDYNFILE(cv)) {
10144 Safefree(CvFILE(cv));
10146 CvFILE_set_from_cop(cv, PL_curcop);
10147 CvSTASH_set(cv, PL_curstash);
10149 /* inner references to PL_compcv must be fixed up ... */
10150 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
10151 if (PERLDB_INTER)/* Advice debugger on the new sub. */
10152 ++PL_sub_generation;
10155 /* Might have had built-in attributes applied -- propagate them. */
10156 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
10158 /* ... before we throw it away */
10159 SvREFCNT_dec(PL_compcv);
10164 if (name && isGV(gv)) {
10167 if (HvENAME_HEK(GvSTASH(gv)))
10168 /* sub Foo::bar { (shift)+1 } */
10169 gv_method_changed(gv);
10173 SV_CHECK_THINKFIRST_COW_DROP((SV *)gv);
10174 prepare_SV_for_RV((SV *)gv);
10175 SvOK_off((SV *)gv);
10178 SvRV_set(gv, (SV *)cv);
10179 if (HvENAME_HEK(PL_curstash))
10180 mro_method_changed_in(PL_curstash);
10184 assert(SvREFCNT((SV*)cv) != 0);
10186 if (!CvHASGV(cv)) {
10192 PERL_HASH(hash, name, namlen);
10193 CvNAME_HEK_set(cv, share_hek(name,
10199 CvFILE_set_from_cop(cv, PL_curcop);
10200 CvSTASH_set(cv, PL_curstash);
10204 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
10206 SvUTF8_on(MUTABLE_SV(cv));
10210 /* If we assign an optree to a PVCV, then we've defined a
10211 * subroutine that the debugger could be able to set a breakpoint
10212 * in, so signal to pp_entereval that it should not throw away any
10213 * saved lines at scope exit. */
10215 PL_breakable_sub_gen++;
10216 CvROOT(cv) = block;
10217 /* The cv no longer needs to hold a refcount on the slab, as CvROOT
10218 itself has a refcount. */
10220 OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv));
10221 #ifdef PERL_DEBUG_READONLY_OPS
10222 slab = (OPSLAB *)CvSTART(cv);
10224 S_process_optree(aTHX_ cv, block, start);
10229 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
10230 HV *stash = name && !CvNAMED(cv) && GvSTASH(CvGV(cv))
10231 ? GvSTASH(CvGV(cv))
10235 apply_attrs(stash, MUTABLE_SV(cv), attrs);
10237 SvREFCNT_inc_simple_void_NN(cv);
10240 if (block && has_name) {
10241 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
10242 SV * const tmpstr = cv_name(cv,NULL,0);
10243 GV * const db_postponed = gv_fetchpvs("DB::postponed",
10244 GV_ADDMULTI, SVt_PVHV);
10246 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
10247 CopFILE(PL_curcop),
10249 (long)CopLINE(PL_curcop));
10250 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
10251 SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0);
10252 hv = GvHVn(db_postponed);
10253 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) {
10254 CV * const pcv = GvCV(db_postponed);
10260 call_sv(MUTABLE_SV(pcv), G_DISCARD);
10266 if (PL_parser && PL_parser->error_count)
10267 clear_special_blocks(name, gv, cv);
10270 process_special_blocks(floor, name, gv, cv);
10276 assert(!cv || evanescent || SvREFCNT((SV*)cv) != 0);
10278 PL_parser->copline = NOLINE;
10279 LEAVE_SCOPE(floor);
10281 assert(!cv || evanescent || SvREFCNT((SV*)cv) != 0);
10283 #ifdef PERL_DEBUG_READONLY_OPS
10287 if (cv && name && block && CvOUTSIDE(cv) && !CvEVAL(CvOUTSIDE(cv)))
10288 pad_add_weakref(cv);
10294 S_clear_special_blocks(pTHX_ const char *const fullname,
10295 GV *const gv, CV *const cv) {
10299 PERL_ARGS_ASSERT_CLEAR_SPECIAL_BLOCKS;
10301 colon = strrchr(fullname,':');
10302 name = colon ? colon + 1 : fullname;
10304 if ((*name == 'B' && strEQ(name, "BEGIN"))
10305 || (*name == 'E' && strEQ(name, "END"))
10306 || (*name == 'U' && strEQ(name, "UNITCHECK"))
10307 || (*name == 'C' && strEQ(name, "CHECK"))
10308 || (*name == 'I' && strEQ(name, "INIT"))) {
10313 GvCV_set(gv, NULL);
10314 SvREFCNT_dec_NN(MUTABLE_SV(cv));
10318 /* Returns true if the sub has been freed. */
10320 S_process_special_blocks(pTHX_ I32 floor, const char *const fullname,
10324 const char *const colon = strrchr(fullname,':');
10325 const char *const name = colon ? colon + 1 : fullname;
10327 PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
10329 if (*name == 'B') {
10330 if (strEQ(name, "BEGIN")) {
10331 const I32 oldscope = PL_scopestack_ix;
10334 if (floor) LEAVE_SCOPE(floor);
10336 PUSHSTACKi(PERLSI_REQUIRE);
10337 SAVECOPFILE(&PL_compiling);
10338 SAVECOPLINE(&PL_compiling);
10339 SAVEVPTR(PL_curcop);
10341 DEBUG_x( dump_sub(gv) );
10342 Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
10343 GvCV_set(gv,0); /* cv has been hijacked */
10344 call_list(oldscope, PL_beginav);
10348 return !PL_savebegin;
10353 if (*name == 'E') {
10354 if strEQ(name, "END") {
10355 DEBUG_x( dump_sub(gv) );
10356 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
10359 } else if (*name == 'U') {
10360 if (strEQ(name, "UNITCHECK")) {
10361 /* It's never too late to run a unitcheck block */
10362 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
10366 } else if (*name == 'C') {
10367 if (strEQ(name, "CHECK")) {
10369 /* diag_listed_as: Too late to run %s block */
10370 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
10371 "Too late to run CHECK block");
10372 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
10376 } else if (*name == 'I') {
10377 if (strEQ(name, "INIT")) {
10379 /* diag_listed_as: Too late to run %s block */
10380 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
10381 "Too late to run INIT block");
10382 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
10388 DEBUG_x( dump_sub(gv) );
10390 GvCV_set(gv,0); /* cv has been hijacked */
10396 =for apidoc Am|CV *|newCONSTSUB|HV *stash|const char *name|SV *sv
10398 Behaves like L</newCONSTSUB_flags>, except that C<name> is nul-terminated
10399 rather than of counted length, and no flags are set. (This means that
10400 C<name> is always interpreted as Latin-1.)
10406 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
10408 return newCONSTSUB_flags(stash, name, name ? strlen(name) : 0, 0, sv);
10412 =for apidoc Am|CV *|newCONSTSUB_flags|HV *stash|const char *name|STRLEN len|U32 flags|SV *sv
10414 Construct a constant subroutine, also performing some surrounding
10415 jobs. A scalar constant-valued subroutine is eligible for inlining
10416 at compile-time, and in Perl code can be created by S<C<sub FOO () {
10417 123 }>>. Other kinds of constant subroutine have other treatment.
10419 The subroutine will have an empty prototype and will ignore any arguments
10420 when called. Its constant behaviour is determined by C<sv>. If C<sv>
10421 is null, the subroutine will yield an empty list. If C<sv> points to a
10422 scalar, the subroutine will always yield that scalar. If C<sv> points
10423 to an array, the subroutine will always yield a list of the elements of
10424 that array in list context, or the number of elements in the array in
10425 scalar context. This function takes ownership of one counted reference
10426 to the scalar or array, and will arrange for the object to live as long
10427 as the subroutine does. If C<sv> points to a scalar then the inlining
10428 assumes that the value of the scalar will never change, so the caller
10429 must ensure that the scalar is not subsequently written to. If C<sv>
10430 points to an array then no such assumption is made, so it is ostensibly
10431 safe to mutate the array or its elements, but whether this is really
10432 supported has not been determined.
10434 The subroutine will have C<CvFILE> set according to C<PL_curcop>.
10435 Other aspects of the subroutine will be left in their default state.
10436 The caller is free to mutate the subroutine beyond its initial state
10437 after this function has returned.
10439 If C<name> is null then the subroutine will be anonymous, with its
10440 C<CvGV> referring to an C<__ANON__> glob. If C<name> is non-null then the
10441 subroutine will be named accordingly, referenced by the appropriate glob.
10442 C<name> is a string of length C<len> bytes giving a sigilless symbol
10443 name, in UTF-8 if C<flags> has the C<SVf_UTF8> bit set and in Latin-1
10444 otherwise. The name may be either qualified or unqualified. If the
10445 name is unqualified then it defaults to being in the stash specified by
10446 C<stash> if that is non-null, or to C<PL_curstash> if C<stash> is null.
10447 The symbol is always added to the stash if necessary, with C<GV_ADDMULTI>
10450 C<flags> should not have bits set other than C<SVf_UTF8>.
10452 If there is already a subroutine of the specified name, then the new sub
10453 will replace the existing one in the glob. A warning may be generated
10454 about the redefinition.
10456 If the subroutine has one of a few special names, such as C<BEGIN> or
10457 C<END>, then it will be claimed by the appropriate queue for automatic
10458 running of phase-related subroutines. In this case the relevant glob will
10459 be left not containing any subroutine, even if it did contain one before.
10460 Execution of the subroutine will likely be a no-op, unless C<sv> was
10461 a tied array or the caller modified the subroutine in some interesting
10462 way before it was executed. In the case of C<BEGIN>, the treatment is
10463 buggy: the sub will be executed when only half built, and may be deleted
10464 prematurely, possibly causing a crash.
10466 The function returns a pointer to the constructed subroutine. If the sub
10467 is anonymous then ownership of one counted reference to the subroutine
10468 is transferred to the caller. If the sub is named then the caller does
10469 not get ownership of a reference. In most such cases, where the sub
10470 has a non-phase name, the sub will be alive at the point it is returned
10471 by virtue of being contained in the glob that names it. A phase-named
10472 subroutine will usually be alive by virtue of the reference owned by
10473 the phase's automatic run queue. A C<BEGIN> subroutine may have been
10474 destroyed already by the time this function returns, but currently bugs
10475 occur in that case before the caller gets control. It is the caller's
10476 responsibility to ensure that it knows which of these situations applies.
10482 Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len,
10486 const char *const file = CopFILE(PL_curcop);
10490 if (IN_PERL_RUNTIME) {
10491 /* at runtime, it's not safe to manipulate PL_curcop: it may be
10492 * an op shared between threads. Use a non-shared COP for our
10494 SAVEVPTR(PL_curcop);
10495 SAVECOMPILEWARNINGS();
10496 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
10497 PL_curcop = &PL_compiling;
10499 SAVECOPLINE(PL_curcop);
10500 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
10503 PL_hints &= ~HINT_BLOCK_SCOPE;
10506 SAVEGENERICSV(PL_curstash);
10507 PL_curstash = (HV *)SvREFCNT_inc_simple_NN(stash);
10510 /* Protect sv against leakage caused by fatal warnings. */
10511 if (sv) SAVEFREESV(sv);
10513 /* file becomes the CvFILE. For an XS, it's usually static storage,
10514 and so doesn't get free()d. (It's expected to be from the C pre-
10515 processor __FILE__ directive). But we need a dynamically allocated one,
10516 and we need it to get freed. */
10517 cv = newXS_len_flags(name, len,
10518 sv && SvTYPE(sv) == SVt_PVAV
10521 file ? file : "", "",
10522 &sv, XS_DYNAMIC_FILENAME | flags);
10524 assert(SvREFCNT((SV*)cv) != 0);
10525 CvXSUBANY(cv).any_ptr = SvREFCNT_inc_simple(sv);
10534 =for apidoc U||newXS
10536 Used by C<xsubpp> to hook up XSUBs as Perl subs. C<filename> needs to be
10537 static storage, as it is used directly as CvFILE(), without a copy being made.
10543 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
10545 PERL_ARGS_ASSERT_NEWXS;
10546 return newXS_len_flags(
10547 name, name ? strlen(name) : 0, subaddr, filename, NULL, NULL, 0
10552 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
10553 const char *const filename, const char *const proto,
10556 PERL_ARGS_ASSERT_NEWXS_FLAGS;
10557 return newXS_len_flags(
10558 name, name ? strlen(name) : 0, subaddr, filename, proto, NULL, flags
10563 Perl_newXS_deffile(pTHX_ const char *name, XSUBADDR_t subaddr)
10565 PERL_ARGS_ASSERT_NEWXS_DEFFILE;
10566 return newXS_len_flags(
10567 name, strlen(name), subaddr, NULL, NULL, NULL, 0
10572 =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
10574 Construct an XS subroutine, also performing some surrounding jobs.
10576 The subroutine will have the entry point C<subaddr>. It will have
10577 the prototype specified by the nul-terminated string C<proto>, or
10578 no prototype if C<proto> is null. The prototype string is copied;
10579 the caller can mutate the supplied string afterwards. If C<filename>
10580 is non-null, it must be a nul-terminated filename, and the subroutine
10581 will have its C<CvFILE> set accordingly. By default C<CvFILE> is set to
10582 point directly to the supplied string, which must be static. If C<flags>
10583 has the C<XS_DYNAMIC_FILENAME> bit set, then a copy of the string will
10586 Other aspects of the subroutine will be left in their default state.
10587 If anything else needs to be done to the subroutine for it to function
10588 correctly, it is the caller's responsibility to do that after this
10589 function has constructed it. However, beware of the subroutine
10590 potentially being destroyed before this function returns, as described
10593 If C<name> is null then the subroutine will be anonymous, with its
10594 C<CvGV> referring to an C<__ANON__> glob. If C<name> is non-null then the
10595 subroutine will be named accordingly, referenced by the appropriate glob.
10596 C<name> is a string of length C<len> bytes giving a sigilless symbol name,
10597 in UTF-8 if C<flags> has the C<SVf_UTF8> bit set and in Latin-1 otherwise.
10598 The name may be either qualified or unqualified, with the stash defaulting
10599 in the same manner as for C<gv_fetchpvn_flags>. C<flags> may contain
10600 flag bits understood by C<gv_fetchpvn_flags> with the same meaning as
10601 they have there, such as C<GV_ADDWARN>. The symbol is always added to
10602 the stash if necessary, with C<GV_ADDMULTI> semantics.
10604 If there is already a subroutine of the specified name, then the new sub
10605 will replace the existing one in the glob. A warning may be generated
10606 about the redefinition. If the old subroutine was C<CvCONST> then the
10607 decision about whether to warn is influenced by an expectation about
10608 whether the new subroutine will become a constant of similar value.
10609 That expectation is determined by C<const_svp>. (Note that the call to
10610 this function doesn't make the new subroutine C<CvCONST> in any case;
10611 that is left to the caller.) If C<const_svp> is null then it indicates
10612 that the new subroutine will not become a constant. If C<const_svp>
10613 is non-null then it indicates that the new subroutine will become a
10614 constant, and it points to an C<SV*> that provides the constant value
10615 that the subroutine will have.
10617 If the subroutine has one of a few special names, such as C<BEGIN> or
10618 C<END>, then it will be claimed by the appropriate queue for automatic
10619 running of phase-related subroutines. In this case the relevant glob will
10620 be left not containing any subroutine, even if it did contain one before.
10621 In the case of C<BEGIN>, the subroutine will be executed and the reference
10622 to it disposed of before this function returns, and also before its
10623 prototype is set. If a C<BEGIN> subroutine would not be sufficiently
10624 constructed by this function to be ready for execution then the caller
10625 must prevent this happening by giving the subroutine a different name.
10627 The function returns a pointer to the constructed subroutine. If the sub
10628 is anonymous then ownership of one counted reference to the subroutine
10629 is transferred to the caller. If the sub is named then the caller does
10630 not get ownership of a reference. In most such cases, where the sub
10631 has a non-phase name, the sub will be alive at the point it is returned
10632 by virtue of being contained in the glob that names it. A phase-named
10633 subroutine will usually be alive by virtue of the reference owned by the
10634 phase's automatic run queue. But a C<BEGIN> subroutine, having already
10635 been executed, will quite likely have been destroyed already by the
10636 time this function returns, making it erroneous for the caller to make
10637 any use of the returned pointer. It is the caller's responsibility to
10638 ensure that it knows which of these situations applies.
10644 Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len,
10645 XSUBADDR_t subaddr, const char *const filename,
10646 const char *const proto, SV **const_svp,
10650 bool interleave = FALSE;
10651 bool evanescent = FALSE;
10653 PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS;
10656 GV * const gv = gv_fetchpvn(
10657 name ? name : PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
10658 name ? len : PL_curstash ? sizeof("__ANON__") - 1:
10659 sizeof("__ANON__::__ANON__") - 1,
10660 GV_ADDMULTI | flags, SVt_PVCV);
10662 if ((cv = (name ? GvCV(gv) : NULL))) {
10664 /* just a cached method */
10668 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
10669 /* already defined (or promised) */
10670 /* Redundant check that allows us to avoid creating an SV
10671 most of the time: */
10672 if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) {
10673 report_redefined_cv(newSVpvn_flags(
10674 name,len,(flags&SVf_UTF8)|SVs_TEMP
10685 if (cv) /* must reuse cv if autoloaded */
10688 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
10692 if (HvENAME_HEK(GvSTASH(gv)))
10693 gv_method_changed(gv); /* newXS */
10697 assert(SvREFCNT((SV*)cv) != 0);
10701 /* XSUBs can't be perl lang/perl5db.pl debugged
10702 if (PERLDB_LINE_OR_SAVESRC)
10703 (void)gv_fetchfile(filename); */
10704 assert(!CvDYNFILE(cv)); /* cv_undef should have turned it off */
10705 if (flags & XS_DYNAMIC_FILENAME) {
10707 CvFILE(cv) = savepv(filename);
10709 /* NOTE: not copied, as it is expected to be an external constant string */
10710 CvFILE(cv) = (char *)filename;
10713 assert((flags & XS_DYNAMIC_FILENAME) == 0 && PL_xsubfilename);
10714 CvFILE(cv) = (char*)PL_xsubfilename;
10717 CvXSUB(cv) = subaddr;
10718 #ifndef PERL_IMPLICIT_CONTEXT
10719 CvHSCXT(cv) = &PL_stack_sp;
10725 evanescent = process_special_blocks(0, name, gv, cv);
10728 } /* <- not a conditional branch */
10731 assert(evanescent || SvREFCNT((SV*)cv) != 0);
10733 if (!evanescent) sv_setpv(MUTABLE_SV(cv), proto);
10734 if (interleave) LEAVE;
10735 assert(evanescent || SvREFCNT((SV*)cv) != 0);
10740 Perl_newSTUB(pTHX_ GV *gv, bool fake)
10742 CV *cv = MUTABLE_CV(newSV_type(SVt_PVCV));
10744 PERL_ARGS_ASSERT_NEWSTUB;
10745 assert(!GvCVu(gv));
10748 if (!fake && GvSTASH(gv) && HvENAME_HEK(GvSTASH(gv)))
10749 gv_method_changed(gv);
10751 cvgv = gv_fetchsv((SV *)gv, GV_ADDMULTI, SVt_PVCV);
10755 CvGV_set(cv, cvgv);
10756 CvFILE_set_from_cop(cv, PL_curcop);
10757 CvSTASH_set(cv, PL_curstash);
10763 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
10770 if (PL_parser && PL_parser->error_count) {
10776 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
10777 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
10780 if ((cv = GvFORM(gv))) {
10781 if (ckWARN(WARN_REDEFINE)) {
10782 const line_t oldline = CopLINE(PL_curcop);
10783 if (PL_parser && PL_parser->copline != NOLINE)
10784 CopLINE_set(PL_curcop, PL_parser->copline);
10786 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10787 "Format %" SVf " redefined", SVfARG(cSVOPo->op_sv));
10789 /* diag_listed_as: Format %s redefined */
10790 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10791 "Format STDOUT redefined");
10793 CopLINE_set(PL_curcop, oldline);
10798 GvFORM(gv) = (CV *)SvREFCNT_inc_simple_NN(cv);
10800 CvFILE_set_from_cop(cv, PL_curcop);
10803 root = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
10805 start = LINKLIST(root);
10807 S_process_optree(aTHX_ cv, root, start);
10808 cv_forget_slab(cv);
10813 PL_parser->copline = NOLINE;
10814 LEAVE_SCOPE(floor);
10815 PL_compiling.cop_seq = 0;
10819 Perl_newANONLIST(pTHX_ OP *o)
10821 return op_convert_list(OP_ANONLIST, OPf_SPECIAL, o);
10825 Perl_newANONHASH(pTHX_ OP *o)
10827 return op_convert_list(OP_ANONHASH, OPf_SPECIAL, o);
10831 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
10833 return newANONATTRSUB(floor, proto, NULL, block);
10837 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
10839 SV * const cv = MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block));
10841 newSVOP(OP_ANONCODE, 0,
10843 if (CvANONCONST(cv))
10844 anoncode = newUNOP(OP_ANONCONST, 0,
10845 op_convert_list(OP_ENTERSUB,
10846 OPf_STACKED|OPf_WANT_SCALAR,
10848 return newUNOP(OP_REFGEN, 0, anoncode);
10852 Perl_oopsAV(pTHX_ OP *o)
10856 PERL_ARGS_ASSERT_OOPSAV;
10858 switch (o->op_type) {
10861 OpTYPE_set(o, OP_PADAV);
10862 return ref(o, OP_RV2AV);
10866 OpTYPE_set(o, OP_RV2AV);
10871 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
10878 Perl_oopsHV(pTHX_ OP *o)
10882 PERL_ARGS_ASSERT_OOPSHV;
10884 switch (o->op_type) {
10887 OpTYPE_set(o, OP_PADHV);
10888 return ref(o, OP_RV2HV);
10892 OpTYPE_set(o, OP_RV2HV);
10893 /* rv2hv steals the bottom bit for its own uses */
10894 o->op_private &= ~OPpARG1_MASK;
10899 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
10906 Perl_newAVREF(pTHX_ OP *o)
10910 PERL_ARGS_ASSERT_NEWAVREF;
10912 if (o->op_type == OP_PADANY) {
10913 OpTYPE_set(o, OP_PADAV);
10916 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
10917 Perl_croak(aTHX_ "Can't use an array as a reference");
10919 return newUNOP(OP_RV2AV, 0, scalar(o));
10923 Perl_newGVREF(pTHX_ I32 type, OP *o)
10925 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
10926 return newUNOP(OP_NULL, 0, o);
10927 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
10931 Perl_newHVREF(pTHX_ OP *o)
10935 PERL_ARGS_ASSERT_NEWHVREF;
10937 if (o->op_type == OP_PADANY) {
10938 OpTYPE_set(o, OP_PADHV);
10941 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
10942 Perl_croak(aTHX_ "Can't use a hash as a reference");
10944 return newUNOP(OP_RV2HV, 0, scalar(o));
10948 Perl_newCVREF(pTHX_ I32 flags, OP *o)
10950 if (o->op_type == OP_PADANY) {
10952 OpTYPE_set(o, OP_PADCV);
10954 return newUNOP(OP_RV2CV, flags, scalar(o));
10958 Perl_newSVREF(pTHX_ OP *o)
10962 PERL_ARGS_ASSERT_NEWSVREF;
10964 if (o->op_type == OP_PADANY) {
10965 OpTYPE_set(o, OP_PADSV);
10969 return newUNOP(OP_RV2SV, 0, scalar(o));
10972 /* Check routines. See the comments at the top of this file for details
10973 * on when these are called */
10976 Perl_ck_anoncode(pTHX_ OP *o)
10978 PERL_ARGS_ASSERT_CK_ANONCODE;
10980 cSVOPo->op_targ = pad_add_anon((CV*)cSVOPo->op_sv, o->op_type);
10981 cSVOPo->op_sv = NULL;
10986 S_io_hints(pTHX_ OP *o)
10988 #if O_BINARY != 0 || O_TEXT != 0
10990 PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;;
10992 SV **svp = hv_fetchs(table, "open_IN", FALSE);
10995 const char *d = SvPV_const(*svp, len);
10996 const I32 mode = mode_from_discipline(d, len);
10997 /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */
10999 if (mode & O_BINARY)
11000 o->op_private |= OPpOPEN_IN_RAW;
11004 o->op_private |= OPpOPEN_IN_CRLF;
11008 svp = hv_fetchs(table, "open_OUT", FALSE);
11011 const char *d = SvPV_const(*svp, len);
11012 const I32 mode = mode_from_discipline(d, len);
11013 /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */
11015 if (mode & O_BINARY)
11016 o->op_private |= OPpOPEN_OUT_RAW;
11020 o->op_private |= OPpOPEN_OUT_CRLF;
11025 PERL_UNUSED_CONTEXT;
11026 PERL_UNUSED_ARG(o);
11031 Perl_ck_backtick(pTHX_ OP *o)
11036 PERL_ARGS_ASSERT_CK_BACKTICK;
11038 /* qx and `` have a null pushmark; CORE::readpipe has only one kid. */
11039 if (o->op_flags & OPf_KIDS && (sibl = OpSIBLING(cUNOPo->op_first))
11040 && (gv = gv_override("readpipe",8)))
11042 /* detach rest of siblings from o and its first child */
11043 op_sibling_splice(o, cUNOPo->op_first, -1, NULL);
11044 newop = S_new_entersubop(aTHX_ gv, sibl);
11046 else if (!(o->op_flags & OPf_KIDS))
11047 newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
11052 S_io_hints(aTHX_ o);
11057 Perl_ck_bitop(pTHX_ OP *o)
11059 PERL_ARGS_ASSERT_CK_BITOP;
11061 o->op_private = (U8)(PL_hints & HINT_INTEGER);
11063 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
11064 && OP_IS_INFIX_BIT(o->op_type))
11066 const OP * const left = cBINOPo->op_first;
11067 const OP * const right = OpSIBLING(left);
11068 if ((OP_IS_NUMCOMPARE(left->op_type) &&
11069 (left->op_flags & OPf_PARENS) == 0) ||
11070 (OP_IS_NUMCOMPARE(right->op_type) &&
11071 (right->op_flags & OPf_PARENS) == 0))
11072 Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
11073 "Possible precedence problem on bitwise %s operator",
11074 o->op_type == OP_BIT_OR
11075 ||o->op_type == OP_NBIT_OR ? "|"
11076 : o->op_type == OP_BIT_AND
11077 ||o->op_type == OP_NBIT_AND ? "&"
11078 : o->op_type == OP_BIT_XOR
11079 ||o->op_type == OP_NBIT_XOR ? "^"
11080 : o->op_type == OP_SBIT_OR ? "|."
11081 : o->op_type == OP_SBIT_AND ? "&." : "^."
11087 PERL_STATIC_INLINE bool
11088 is_dollar_bracket(pTHX_ const OP * const o)
11091 PERL_UNUSED_CONTEXT;
11092 return o->op_type == OP_RV2SV && o->op_flags & OPf_KIDS
11093 && (kid = cUNOPx(o)->op_first)
11094 && kid->op_type == OP_GV
11095 && strEQ(GvNAME(cGVOPx_gv(kid)), "[");
11098 /* for lt, gt, le, ge, eq, ne and their i_ variants */
11101 Perl_ck_cmp(pTHX_ OP *o)
11107 OP *indexop, *constop, *start;
11111 PERL_ARGS_ASSERT_CK_CMP;
11113 is_eq = ( o->op_type == OP_EQ
11114 || o->op_type == OP_NE
11115 || o->op_type == OP_I_EQ
11116 || o->op_type == OP_I_NE);
11118 if (!is_eq && ckWARN(WARN_SYNTAX)) {
11119 const OP *kid = cUNOPo->op_first;
11122 ( is_dollar_bracket(aTHX_ kid)
11123 && OpSIBLING(kid) && OpSIBLING(kid)->op_type == OP_CONST
11125 || ( kid->op_type == OP_CONST
11126 && (kid = OpSIBLING(kid)) && is_dollar_bracket(aTHX_ kid)
11130 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
11131 "$[ used in %s (did you mean $] ?)", OP_DESC(o));
11134 /* convert (index(...) == -1) and variations into
11135 * (r)index/BOOL(,NEG)
11140 indexop = cUNOPo->op_first;
11141 constop = OpSIBLING(indexop);
11143 if (indexop->op_type == OP_CONST) {
11145 indexop = OpSIBLING(constop);
11150 if (indexop->op_type != OP_INDEX && indexop->op_type != OP_RINDEX)
11153 /* ($lex = index(....)) == -1 */
11154 if (indexop->op_private & OPpTARGET_MY)
11157 if (constop->op_type != OP_CONST)
11160 sv = cSVOPx_sv(constop);
11161 if (!(sv && SvIOK_notUV(sv)))
11165 if (iv != -1 && iv != 0)
11169 if (o->op_type == OP_LT || o->op_type == OP_I_LT) {
11170 if (!(iv0 ^ reverse))
11174 else if (o->op_type == OP_LE || o->op_type == OP_I_LE) {
11179 else if (o->op_type == OP_GE || o->op_type == OP_I_GE) {
11180 if (!(iv0 ^ reverse))
11184 else if (o->op_type == OP_GT || o->op_type == OP_I_GT) {
11189 else if (o->op_type == OP_EQ || o->op_type == OP_I_EQ) {
11195 assert(o->op_type == OP_NE || o->op_type == OP_I_NE);
11201 indexop->op_flags &= ~OPf_PARENS;
11202 indexop->op_flags |= (o->op_flags & OPf_PARENS);
11203 indexop->op_private |= OPpTRUEBOOL;
11205 indexop->op_private |= OPpINDEX_BOOLNEG;
11206 /* cut out the index op and free the eq,const ops */
11207 (void)op_sibling_splice(o, start, 1, NULL);
11215 Perl_ck_concat(pTHX_ OP *o)
11217 const OP * const kid = cUNOPo->op_first;
11219 PERL_ARGS_ASSERT_CK_CONCAT;
11220 PERL_UNUSED_CONTEXT;
11222 /* reuse the padtmp returned by the concat child */
11223 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
11224 !(kUNOP->op_first->op_flags & OPf_MOD))
11226 o->op_flags |= OPf_STACKED;
11227 o->op_private |= OPpCONCAT_NESTED;
11233 Perl_ck_spair(pTHX_ OP *o)
11237 PERL_ARGS_ASSERT_CK_SPAIR;
11239 if (o->op_flags & OPf_KIDS) {
11243 const OPCODE type = o->op_type;
11244 o = modkids(ck_fun(o), type);
11245 kid = cUNOPo->op_first;
11246 kidkid = kUNOP->op_first;
11247 newop = OpSIBLING(kidkid);
11249 const OPCODE type = newop->op_type;
11250 if (OpHAS_SIBLING(newop))
11252 if (o->op_type == OP_REFGEN
11253 && ( type == OP_RV2CV
11254 || ( !(newop->op_flags & OPf_PARENS)
11255 && ( type == OP_RV2AV || type == OP_PADAV
11256 || type == OP_RV2HV || type == OP_PADHV))))
11257 NOOP; /* OK (allow srefgen for \@a and \%h) */
11258 else if (OP_GIMME(newop,0) != G_SCALAR)
11261 /* excise first sibling */
11262 op_sibling_splice(kid, NULL, 1, NULL);
11265 /* transforms OP_REFGEN into OP_SREFGEN, OP_CHOP into OP_SCHOP,
11266 * and OP_CHOMP into OP_SCHOMP */
11267 o->op_ppaddr = PL_ppaddr[++o->op_type];
11272 Perl_ck_delete(pTHX_ OP *o)
11274 PERL_ARGS_ASSERT_CK_DELETE;
11278 if (o->op_flags & OPf_KIDS) {
11279 OP * const kid = cUNOPo->op_first;
11280 switch (kid->op_type) {
11282 o->op_flags |= OPf_SPECIAL;
11285 o->op_private |= OPpSLICE;
11288 o->op_flags |= OPf_SPECIAL;
11293 o->op_flags |= OPf_SPECIAL;
11296 o->op_private |= OPpKVSLICE;
11299 Perl_croak(aTHX_ "delete argument is not a HASH or ARRAY "
11300 "element or slice");
11302 if (kid->op_private & OPpLVAL_INTRO)
11303 o->op_private |= OPpLVAL_INTRO;
11310 Perl_ck_eof(pTHX_ OP *o)
11312 PERL_ARGS_ASSERT_CK_EOF;
11314 if (o->op_flags & OPf_KIDS) {
11316 if (cLISTOPo->op_first->op_type == OP_STUB) {
11318 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
11323 kid = cLISTOPo->op_first;
11324 if (kid->op_type == OP_RV2GV)
11325 kid->op_private |= OPpALLOW_FAKE;
11332 Perl_ck_eval(pTHX_ OP *o)
11336 PERL_ARGS_ASSERT_CK_EVAL;
11338 PL_hints |= HINT_BLOCK_SCOPE;
11339 if (o->op_flags & OPf_KIDS) {
11340 SVOP * const kid = (SVOP*)cUNOPo->op_first;
11343 if (o->op_type == OP_ENTERTRY) {
11346 /* cut whole sibling chain free from o */
11347 op_sibling_splice(o, NULL, -1, NULL);
11350 enter = alloc_LOGOP(OP_ENTERTRY, NULL, NULL);
11352 /* establish postfix order */
11353 enter->op_next = (OP*)enter;
11355 o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
11356 OpTYPE_set(o, OP_LEAVETRY);
11357 enter->op_other = o;
11362 S_set_haseval(aTHX);
11366 const U8 priv = o->op_private;
11368 /* the newUNOP will recursively call ck_eval(), which will handle
11369 * all the stuff at the end of this function, like adding
11372 return newUNOP(OP_ENTEREVAL, priv <<8, newDEFSVOP());
11374 o->op_targ = (PADOFFSET)PL_hints;
11375 if (o->op_private & OPpEVAL_BYTES) o->op_targ &= ~HINT_UTF8;
11376 if ((PL_hints & HINT_LOCALIZE_HH) != 0
11377 && !(o->op_private & OPpEVAL_COPHH) && GvHV(PL_hintgv)) {
11378 /* Store a copy of %^H that pp_entereval can pick up. */
11379 OP *hhop = newSVOP(OP_HINTSEVAL, 0,
11380 MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv))));
11381 /* append hhop to only child */
11382 op_sibling_splice(o, cUNOPo->op_first, 0, hhop);
11384 o->op_private |= OPpEVAL_HAS_HH;
11386 if (!(o->op_private & OPpEVAL_BYTES)
11387 && FEATURE_UNIEVAL_IS_ENABLED)
11388 o->op_private |= OPpEVAL_UNICODE;
11393 Perl_ck_exec(pTHX_ OP *o)
11395 PERL_ARGS_ASSERT_CK_EXEC;
11397 if (o->op_flags & OPf_STACKED) {
11400 kid = OpSIBLING(cUNOPo->op_first);
11401 if (kid->op_type == OP_RV2GV)
11410 Perl_ck_exists(pTHX_ OP *o)
11412 PERL_ARGS_ASSERT_CK_EXISTS;
11415 if (o->op_flags & OPf_KIDS) {
11416 OP * const kid = cUNOPo->op_first;
11417 if (kid->op_type == OP_ENTERSUB) {
11418 (void) ref(kid, o->op_type);
11419 if (kid->op_type != OP_RV2CV
11420 && !(PL_parser && PL_parser->error_count))
11422 "exists argument is not a subroutine name");
11423 o->op_private |= OPpEXISTS_SUB;
11425 else if (kid->op_type == OP_AELEM)
11426 o->op_flags |= OPf_SPECIAL;
11427 else if (kid->op_type != OP_HELEM)
11428 Perl_croak(aTHX_ "exists argument is not a HASH or ARRAY "
11429 "element or a subroutine");
11436 Perl_ck_rvconst(pTHX_ OP *o)
11439 SVOP * const kid = (SVOP*)cUNOPo->op_first;
11441 PERL_ARGS_ASSERT_CK_RVCONST;
11443 if (o->op_type == OP_RV2HV)
11444 /* rv2hv steals the bottom bit for its own uses */
11445 o->op_private &= ~OPpARG1_MASK;
11447 o->op_private |= (PL_hints & HINT_STRICT_REFS);
11449 if (kid->op_type == OP_CONST) {
11452 SV * const kidsv = kid->op_sv;
11454 /* Is it a constant from cv_const_sv()? */
11455 if ((SvROK(kidsv) || isGV_with_GP(kidsv)) && SvREADONLY(kidsv)) {
11458 if (SvTYPE(kidsv) == SVt_PVAV) return o;
11459 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
11460 const char *badthing;
11461 switch (o->op_type) {
11463 badthing = "a SCALAR";
11466 badthing = "an ARRAY";
11469 badthing = "a HASH";
11477 "Can't use bareword (\"%" SVf "\") as %s ref while \"strict refs\" in use",
11478 SVfARG(kidsv), badthing);
11481 * This is a little tricky. We only want to add the symbol if we
11482 * didn't add it in the lexer. Otherwise we get duplicate strict
11483 * warnings. But if we didn't add it in the lexer, we must at
11484 * least pretend like we wanted to add it even if it existed before,
11485 * or we get possible typo warnings. OPpCONST_ENTERED says
11486 * whether the lexer already added THIS instance of this symbol.
11488 iscv = o->op_type == OP_RV2CV ? GV_NOEXPAND|GV_ADDMULTI : 0;
11489 gv = gv_fetchsv(kidsv,
11490 o->op_type == OP_RV2CV
11491 && o->op_private & OPpMAY_RETURN_CONSTANT
11493 : iscv | !(kid->op_private & OPpCONST_ENTERED),
11496 : o->op_type == OP_RV2SV
11498 : o->op_type == OP_RV2AV
11500 : o->op_type == OP_RV2HV
11507 if (!(o->op_private & OPpMAY_RETURN_CONSTANT)
11508 && SvTYPE(SvRV(gv)) != SVt_PVCV)
11509 gv_fetchsv(kidsv, GV_ADDMULTI, SVt_PVCV);
11511 OpTYPE_set(kid, OP_GV);
11512 SvREFCNT_dec(kid->op_sv);
11513 #ifdef USE_ITHREADS
11514 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
11515 STATIC_ASSERT_STMT(sizeof(PADOP) <= sizeof(SVOP));
11516 kPADOP->op_padix = pad_alloc(OP_GV, SVf_READONLY);
11517 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
11518 PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
11520 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
11522 kid->op_private = 0;
11523 /* FAKE globs in the symbol table cause weird bugs (#77810) */
11531 Perl_ck_ftst(pTHX_ OP *o)
11534 const I32 type = o->op_type;
11536 PERL_ARGS_ASSERT_CK_FTST;
11538 if (o->op_flags & OPf_REF) {
11541 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
11542 SVOP * const kid = (SVOP*)cUNOPo->op_first;
11543 const OPCODE kidtype = kid->op_type;
11545 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)
11546 && !kid->op_folded) {
11547 OP * const newop = newGVOP(type, OPf_REF,
11548 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
11553 if ((kidtype == OP_RV2AV || kidtype == OP_PADAV) && ckWARN(WARN_SYNTAX)) {
11554 SV *name = S_op_varname_subscript(aTHX_ (OP*)kid, 2);
11556 /* diag_listed_as: Array passed to stat will be coerced to a scalar%s */
11557 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "%s (did you want stat %" SVf "?)",
11558 array_passed_to_stat, name);
11561 /* diag_listed_as: Array passed to stat will be coerced to a scalar%s */
11562 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "%s", array_passed_to_stat);
11565 scalar((OP *) kid);
11566 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
11567 o->op_private |= OPpFT_ACCESS;
11568 if (type != OP_STAT && type != OP_LSTAT
11569 && PL_check[kidtype] == Perl_ck_ftst
11570 && kidtype != OP_STAT && kidtype != OP_LSTAT
11572 o->op_private |= OPpFT_STACKED;
11573 kid->op_private |= OPpFT_STACKING;
11574 if (kidtype == OP_FTTTY && (
11575 !(kid->op_private & OPpFT_STACKED)
11576 || kid->op_private & OPpFT_AFTER_t
11578 o->op_private |= OPpFT_AFTER_t;
11583 if (type == OP_FTTTY)
11584 o = newGVOP(type, OPf_REF, PL_stdingv);
11586 o = newUNOP(type, 0, newDEFSVOP());
11592 Perl_ck_fun(pTHX_ OP *o)
11594 const int type = o->op_type;
11595 I32 oa = PL_opargs[type] >> OASHIFT;
11597 PERL_ARGS_ASSERT_CK_FUN;
11599 if (o->op_flags & OPf_STACKED) {
11600 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
11601 oa &= ~OA_OPTIONAL;
11603 return no_fh_allowed(o);
11606 if (o->op_flags & OPf_KIDS) {
11607 OP *prev_kid = NULL;
11608 OP *kid = cLISTOPo->op_first;
11610 bool seen_optional = FALSE;
11612 if (kid->op_type == OP_PUSHMARK ||
11613 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
11616 kid = OpSIBLING(kid);
11618 if (kid && kid->op_type == OP_COREARGS) {
11619 bool optional = FALSE;
11622 if (oa & OA_OPTIONAL) optional = TRUE;
11625 if (optional) o->op_private |= numargs;
11630 if (oa & OA_OPTIONAL || (oa & 7) == OA_LIST) {
11631 if (!kid && !seen_optional && PL_opargs[type] & OA_DEFGV) {
11632 kid = newDEFSVOP();
11633 /* append kid to chain */
11634 op_sibling_splice(o, prev_kid, 0, kid);
11636 seen_optional = TRUE;
11643 /* list seen where single (scalar) arg expected? */
11644 if (numargs == 1 && !(oa >> 4)
11645 && kid->op_type == OP_LIST && type != OP_SCALAR)
11647 return too_many_arguments_pv(o,PL_op_desc[type], 0);
11649 if (type != OP_DELETE) scalar(kid);
11660 if ((type == OP_PUSH || type == OP_UNSHIFT)
11661 && !OpHAS_SIBLING(kid))
11662 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
11663 "Useless use of %s with no values",
11666 if (kid->op_type == OP_CONST
11667 && ( !SvROK(cSVOPx_sv(kid))
11668 || SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV )
11670 bad_type_pv(numargs, "array", o, kid);
11671 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV) {
11672 yyerror_pv(Perl_form(aTHX_ "Experimental %s on scalar is now forbidden",
11673 PL_op_desc[type]), 0);
11676 op_lvalue(kid, type);
11680 if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
11681 bad_type_pv(numargs, "hash", o, kid);
11682 op_lvalue(kid, type);
11686 /* replace kid with newop in chain */
11688 S_op_sibling_newUNOP(aTHX_ o, prev_kid, OP_NULL, 0);
11689 newop->op_next = newop;
11694 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
11695 if (kid->op_type == OP_CONST &&
11696 (kid->op_private & OPpCONST_BARE))
11698 OP * const newop = newGVOP(OP_GV, 0,
11699 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
11700 /* replace kid with newop in chain */
11701 op_sibling_splice(o, prev_kid, 1, newop);
11705 else if (kid->op_type == OP_READLINE) {
11706 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
11707 bad_type_pv(numargs, "HANDLE", o, kid);
11710 I32 flags = OPf_SPECIAL;
11712 PADOFFSET targ = 0;
11714 /* is this op a FH constructor? */
11715 if (is_handle_constructor(o,numargs)) {
11716 const char *name = NULL;
11719 bool want_dollar = TRUE;
11722 /* Set a flag to tell rv2gv to vivify
11723 * need to "prove" flag does not mean something
11724 * else already - NI-S 1999/05/07
11727 if (kid->op_type == OP_PADSV) {
11729 = PAD_COMPNAME_SV(kid->op_targ);
11730 name = PadnamePV (pn);
11731 len = PadnameLEN(pn);
11732 name_utf8 = PadnameUTF8(pn);
11734 else if (kid->op_type == OP_RV2SV
11735 && kUNOP->op_first->op_type == OP_GV)
11737 GV * const gv = cGVOPx_gv(kUNOP->op_first);
11739 len = GvNAMELEN(gv);
11740 name_utf8 = GvNAMEUTF8(gv) ? SVf_UTF8 : 0;
11742 else if (kid->op_type == OP_AELEM
11743 || kid->op_type == OP_HELEM)
11746 OP *op = ((BINOP*)kid)->op_first;
11750 const char * const a =
11751 kid->op_type == OP_AELEM ?
11753 if (((op->op_type == OP_RV2AV) ||
11754 (op->op_type == OP_RV2HV)) &&
11755 (firstop = ((UNOP*)op)->op_first) &&
11756 (firstop->op_type == OP_GV)) {
11757 /* packagevar $a[] or $h{} */
11758 GV * const gv = cGVOPx_gv(firstop);
11761 Perl_newSVpvf(aTHX_
11766 else if (op->op_type == OP_PADAV
11767 || op->op_type == OP_PADHV) {
11768 /* lexicalvar $a[] or $h{} */
11769 const char * const padname =
11770 PAD_COMPNAME_PV(op->op_targ);
11773 Perl_newSVpvf(aTHX_
11779 name = SvPV_const(tmpstr, len);
11780 name_utf8 = SvUTF8(tmpstr);
11781 sv_2mortal(tmpstr);
11785 name = "__ANONIO__";
11787 want_dollar = FALSE;
11789 op_lvalue(kid, type);
11793 targ = pad_alloc(OP_RV2GV, SVf_READONLY);
11794 namesv = PAD_SVl(targ);
11795 if (want_dollar && *name != '$')
11796 sv_setpvs(namesv, "$");
11799 sv_catpvn(namesv, name, len);
11800 if ( name_utf8 ) SvUTF8_on(namesv);
11804 kid = S_op_sibling_newUNOP(aTHX_ o, prev_kid,
11806 kid->op_targ = targ;
11807 kid->op_private |= priv;
11813 if ((type == OP_UNDEF || type == OP_POS)
11814 && numargs == 1 && !(oa >> 4)
11815 && kid->op_type == OP_LIST)
11816 return too_many_arguments_pv(o,PL_op_desc[type], 0);
11817 op_lvalue(scalar(kid), type);
11822 kid = OpSIBLING(kid);
11824 /* FIXME - should the numargs or-ing move after the too many
11825 * arguments check? */
11826 o->op_private |= numargs;
11828 return too_many_arguments_pv(o,OP_DESC(o), 0);
11831 else if (PL_opargs[type] & OA_DEFGV) {
11832 /* Ordering of these two is important to keep f_map.t passing. */
11834 return newUNOP(type, 0, newDEFSVOP());
11838 while (oa & OA_OPTIONAL)
11840 if (oa && oa != OA_LIST)
11841 return too_few_arguments_pv(o,OP_DESC(o), 0);
11847 Perl_ck_glob(pTHX_ OP *o)
11851 PERL_ARGS_ASSERT_CK_GLOB;
11854 if ((o->op_flags & OPf_KIDS) && !OpHAS_SIBLING(cLISTOPo->op_first))
11855 op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */
11857 if (!(o->op_flags & OPf_SPECIAL) && (gv = gv_override("glob", 4)))
11861 * \ null - const(wildcard)
11866 * \ mark - glob - rv2cv
11867 * | \ gv(CORE::GLOBAL::glob)
11869 * \ null - const(wildcard)
11871 o->op_flags |= OPf_SPECIAL;
11872 o->op_targ = pad_alloc(OP_GLOB, SVs_PADTMP);
11873 o = S_new_entersubop(aTHX_ gv, o);
11874 o = newUNOP(OP_NULL, 0, o);
11875 o->op_targ = OP_GLOB; /* hint at what it used to be: eg in newWHILEOP */
11878 else o->op_flags &= ~OPf_SPECIAL;
11879 #if !defined(PERL_EXTERNAL_GLOB)
11880 if (!PL_globhook) {
11882 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
11883 newSVpvs("File::Glob"), NULL, NULL, NULL);
11886 #endif /* !PERL_EXTERNAL_GLOB */
11887 gv = (GV *)newSV(0);
11888 gv_init(gv, 0, "", 0, 0);
11890 op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
11891 SvREFCNT_dec_NN(gv); /* newGVOP increased it */
11897 Perl_ck_grep(pTHX_ OP *o)
11901 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
11903 PERL_ARGS_ASSERT_CK_GREP;
11905 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
11907 if (o->op_flags & OPf_STACKED) {
11908 kid = cUNOPx(OpSIBLING(cLISTOPo->op_first))->op_first;
11909 if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
11910 return no_fh_allowed(o);
11911 o->op_flags &= ~OPf_STACKED;
11913 kid = OpSIBLING(cLISTOPo->op_first);
11914 if (type == OP_MAPWHILE)
11919 if (PL_parser && PL_parser->error_count)
11921 kid = OpSIBLING(cLISTOPo->op_first);
11922 if (kid->op_type != OP_NULL)
11923 Perl_croak(aTHX_ "panic: ck_grep, type=%u", (unsigned) kid->op_type);
11924 kid = kUNOP->op_first;
11926 gwop = alloc_LOGOP(type, o, LINKLIST(kid));
11927 kid->op_next = (OP*)gwop;
11928 o->op_private = gwop->op_private = 0;
11929 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
11931 kid = OpSIBLING(cLISTOPo->op_first);
11932 for (kid = OpSIBLING(kid); kid; kid = OpSIBLING(kid))
11933 op_lvalue(kid, OP_GREPSTART);
11939 Perl_ck_index(pTHX_ OP *o)
11941 PERL_ARGS_ASSERT_CK_INDEX;
11943 if (o->op_flags & OPf_KIDS) {
11944 OP *kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
11946 kid = OpSIBLING(kid); /* get past "big" */
11947 if (kid && kid->op_type == OP_CONST) {
11948 const bool save_taint = TAINT_get;
11949 SV *sv = kSVOP->op_sv;
11950 if ( (!SvPOK(sv) || SvNIOKp(sv) || isREGEXP(sv))
11951 && SvOK(sv) && !SvROK(sv))
11954 sv_copypv(sv, kSVOP->op_sv);
11955 SvREFCNT_dec_NN(kSVOP->op_sv);
11958 if (SvOK(sv)) fbm_compile(sv, 0);
11959 TAINT_set(save_taint);
11960 #ifdef NO_TAINT_SUPPORT
11961 PERL_UNUSED_VAR(save_taint);
11969 Perl_ck_lfun(pTHX_ OP *o)
11971 const OPCODE type = o->op_type;
11973 PERL_ARGS_ASSERT_CK_LFUN;
11975 return modkids(ck_fun(o), type);
11979 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
11981 PERL_ARGS_ASSERT_CK_DEFINED;
11983 if ((o->op_flags & OPf_KIDS)) {
11984 switch (cUNOPo->op_first->op_type) {
11987 Perl_croak(aTHX_ "Can't use 'defined(@array)'"
11988 " (Maybe you should just omit the defined()?)");
11989 NOT_REACHED; /* NOTREACHED */
11993 Perl_croak(aTHX_ "Can't use 'defined(%%hash)'"
11994 " (Maybe you should just omit the defined()?)");
11995 NOT_REACHED; /* NOTREACHED */
12006 Perl_ck_readline(pTHX_ OP *o)
12008 PERL_ARGS_ASSERT_CK_READLINE;
12010 if (o->op_flags & OPf_KIDS) {
12011 OP *kid = cLISTOPo->op_first;
12012 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
12016 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
12024 Perl_ck_rfun(pTHX_ OP *o)
12026 const OPCODE type = o->op_type;
12028 PERL_ARGS_ASSERT_CK_RFUN;
12030 return refkids(ck_fun(o), type);
12034 Perl_ck_listiob(pTHX_ OP *o)
12038 PERL_ARGS_ASSERT_CK_LISTIOB;
12040 kid = cLISTOPo->op_first;
12042 o = force_list(o, 1);
12043 kid = cLISTOPo->op_first;
12045 if (kid->op_type == OP_PUSHMARK)
12046 kid = OpSIBLING(kid);
12047 if (kid && o->op_flags & OPf_STACKED)
12048 kid = OpSIBLING(kid);
12049 else if (kid && !OpHAS_SIBLING(kid)) { /* print HANDLE; */
12050 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE
12051 && !kid->op_folded) {
12052 o->op_flags |= OPf_STACKED; /* make it a filehandle */
12054 /* replace old const op with new OP_RV2GV parent */
12055 kid = S_op_sibling_newUNOP(aTHX_ o, cLISTOPo->op_first,
12056 OP_RV2GV, OPf_REF);
12057 kid = OpSIBLING(kid);
12062 op_append_elem(o->op_type, o, newDEFSVOP());
12064 if (o->op_type == OP_PRTF) return modkids(listkids(o), OP_PRTF);
12065 return listkids(o);
12069 Perl_ck_smartmatch(pTHX_ OP *o)
12072 PERL_ARGS_ASSERT_CK_SMARTMATCH;
12073 if (0 == (o->op_flags & OPf_SPECIAL)) {
12074 OP *first = cBINOPo->op_first;
12075 OP *second = OpSIBLING(first);
12077 /* Implicitly take a reference to an array or hash */
12079 /* remove the original two siblings, then add back the
12080 * (possibly different) first and second sibs.
12082 op_sibling_splice(o, NULL, 1, NULL);
12083 op_sibling_splice(o, NULL, 1, NULL);
12084 first = ref_array_or_hash(first);
12085 second = ref_array_or_hash(second);
12086 op_sibling_splice(o, NULL, 0, second);
12087 op_sibling_splice(o, NULL, 0, first);
12089 /* Implicitly take a reference to a regular expression */
12090 if (first->op_type == OP_MATCH && !(first->op_flags & OPf_STACKED)) {
12091 OpTYPE_set(first, OP_QR);
12093 if (second->op_type == OP_MATCH && !(second->op_flags & OPf_STACKED)) {
12094 OpTYPE_set(second, OP_QR);
12103 S_maybe_targlex(pTHX_ OP *o)
12105 OP * const kid = cLISTOPo->op_first;
12106 /* has a disposable target? */
12107 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
12108 && !(kid->op_flags & OPf_STACKED)
12109 /* Cannot steal the second time! */
12110 && !(kid->op_private & OPpTARGET_MY)
12113 OP * const kkid = OpSIBLING(kid);
12115 /* Can just relocate the target. */
12116 if (kkid && kkid->op_type == OP_PADSV
12117 && (!(kkid->op_private & OPpLVAL_INTRO)
12118 || kkid->op_private & OPpPAD_STATE))
12120 kid->op_targ = kkid->op_targ;
12122 /* Now we do not need PADSV and SASSIGN.
12123 * Detach kid and free the rest. */
12124 op_sibling_splice(o, NULL, 1, NULL);
12126 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
12134 Perl_ck_sassign(pTHX_ OP *o)
12137 OP * const kid = cBINOPo->op_first;
12139 PERL_ARGS_ASSERT_CK_SASSIGN;
12141 if (OpHAS_SIBLING(kid)) {
12142 OP *kkid = OpSIBLING(kid);
12143 /* For state variable assignment with attributes, kkid is a list op
12144 whose op_last is a padsv. */
12145 if ((kkid->op_type == OP_PADSV ||
12146 (OP_TYPE_IS_OR_WAS(kkid, OP_LIST) &&
12147 (kkid = cLISTOPx(kkid)->op_last)->op_type == OP_PADSV
12150 && (kkid->op_private & (OPpLVAL_INTRO|OPpPAD_STATE))
12151 == (OPpLVAL_INTRO|OPpPAD_STATE)) {
12152 return S_newONCEOP(aTHX_ o, kkid);
12155 return S_maybe_targlex(aTHX_ o);
12160 Perl_ck_match(pTHX_ OP *o)
12162 PERL_UNUSED_CONTEXT;
12163 PERL_ARGS_ASSERT_CK_MATCH;
12169 Perl_ck_method(pTHX_ OP *o)
12171 SV *sv, *methsv, *rclass;
12172 const char* method;
12175 STRLEN len, nsplit = 0, i;
12177 OP * const kid = cUNOPo->op_first;
12179 PERL_ARGS_ASSERT_CK_METHOD;
12180 if (kid->op_type != OP_CONST) return o;
12184 /* replace ' with :: */
12185 while ((compatptr = (char *) memchr(SvPVX(sv), '\'',
12186 SvEND(sv) - SvPVX(sv) )))
12189 sv_insert(sv, compatptr - SvPVX_const(sv), 0, ":", 1);
12192 method = SvPVX_const(sv);
12194 utf8 = SvUTF8(sv) ? -1 : 1;
12196 for (i = len - 1; i > 0; --i) if (method[i] == ':') {
12201 methsv = newSVpvn_share(method+nsplit, utf8*(len - nsplit), 0);
12203 if (!nsplit) { /* $proto->method() */
12205 return newMETHOP_named(OP_METHOD_NAMED, 0, methsv);
12208 if (memEQs(method, nsplit, "SUPER::")) { /* $proto->SUPER::method() */
12210 return newMETHOP_named(OP_METHOD_SUPER, 0, methsv);
12213 /* $proto->MyClass::method() and $proto->MyClass::SUPER::method() */
12214 if (nsplit >= 9 && strBEGINs(method+nsplit-9, "::SUPER::")) {
12215 rclass = newSVpvn_share(method, utf8*(nsplit-9), 0);
12216 new_op = newMETHOP_named(OP_METHOD_REDIR_SUPER, 0, methsv);
12218 rclass = newSVpvn_share(method, utf8*(nsplit-2), 0);
12219 new_op = newMETHOP_named(OP_METHOD_REDIR, 0, methsv);
12221 #ifdef USE_ITHREADS
12222 op_relocate_sv(&rclass, &cMETHOPx(new_op)->op_rclass_targ);
12224 cMETHOPx(new_op)->op_rclass_sv = rclass;
12231 Perl_ck_null(pTHX_ OP *o)
12233 PERL_ARGS_ASSERT_CK_NULL;
12234 PERL_UNUSED_CONTEXT;
12239 Perl_ck_open(pTHX_ OP *o)
12241 PERL_ARGS_ASSERT_CK_OPEN;
12243 S_io_hints(aTHX_ o);
12245 /* In case of three-arg dup open remove strictness
12246 * from the last arg if it is a bareword. */
12247 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
12248 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
12252 if ((last->op_type == OP_CONST) && /* The bareword. */
12253 (last->op_private & OPpCONST_BARE) &&
12254 (last->op_private & OPpCONST_STRICT) &&
12255 (oa = OpSIBLING(first)) && /* The fh. */
12256 (oa = OpSIBLING(oa)) && /* The mode. */
12257 (oa->op_type == OP_CONST) &&
12258 SvPOK(((SVOP*)oa)->op_sv) &&
12259 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
12260 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
12261 (last == OpSIBLING(oa))) /* The bareword. */
12262 last->op_private &= ~OPpCONST_STRICT;
12268 Perl_ck_prototype(pTHX_ OP *o)
12270 PERL_ARGS_ASSERT_CK_PROTOTYPE;
12271 if (!(o->op_flags & OPf_KIDS)) {
12273 return newUNOP(OP_PROTOTYPE, 0, newDEFSVOP());
12279 Perl_ck_refassign(pTHX_ OP *o)
12281 OP * const right = cLISTOPo->op_first;
12282 OP * const left = OpSIBLING(right);
12283 OP *varop = cUNOPx(cUNOPx(left)->op_first)->op_first;
12286 PERL_ARGS_ASSERT_CK_REFASSIGN;
12288 assert (left->op_type == OP_SREFGEN);
12291 /* we use OPpPAD_STATE in refassign to mean either of those things,
12292 * and the code assumes the two flags occupy the same bit position
12293 * in the various ops below */
12294 assert(OPpPAD_STATE == OPpOUR_INTRO);
12296 switch (varop->op_type) {
12298 o->op_private |= OPpLVREF_AV;
12301 o->op_private |= OPpLVREF_HV;
12305 o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpPAD_STATE));
12306 o->op_targ = varop->op_targ;
12307 varop->op_targ = 0;
12308 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
12312 o->op_private |= OPpLVREF_AV;
12314 NOT_REACHED; /* NOTREACHED */
12316 o->op_private |= OPpLVREF_HV;
12320 o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO));
12321 if (cUNOPx(varop)->op_first->op_type != OP_GV) goto bad;
12323 /* Point varop to its GV kid, detached. */
12324 varop = op_sibling_splice(varop, NULL, -1, NULL);
12328 OP * const kidparent =
12329 OpSIBLING(cUNOPx(cUNOPx(varop)->op_first)->op_first);
12330 OP * const kid = cUNOPx(kidparent)->op_first;
12331 o->op_private |= OPpLVREF_CV;
12332 if (kid->op_type == OP_GV) {
12334 goto detach_and_stack;
12336 if (kid->op_type != OP_PADCV) goto bad;
12337 o->op_targ = kid->op_targ;
12343 o->op_private |= (varop->op_private & OPpLVAL_INTRO);
12344 o->op_private |= OPpLVREF_ELEM;
12347 /* Detach varop. */
12348 op_sibling_splice(cUNOPx(left)->op_first, NULL, -1, NULL);
12352 /* diag_listed_as: Can't modify reference to %s in %s assignment */
12353 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in scalar "
12358 if (!FEATURE_REFALIASING_IS_ENABLED)
12360 "Experimental aliasing via reference not enabled");
12361 Perl_ck_warner_d(aTHX_
12362 packWARN(WARN_EXPERIMENTAL__REFALIASING),
12363 "Aliasing via reference is experimental");
12365 o->op_flags |= OPf_STACKED;
12366 op_sibling_splice(o, right, 1, varop);
12369 o->op_flags &=~ OPf_STACKED;
12370 op_sibling_splice(o, right, 1, NULL);
12377 Perl_ck_repeat(pTHX_ OP *o)
12379 PERL_ARGS_ASSERT_CK_REPEAT;
12381 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
12383 o->op_private |= OPpREPEAT_DOLIST;
12384 kids = op_sibling_splice(o, NULL, 1, NULL); /* detach first kid */
12385 kids = force_list(kids, 1); /* promote it to a list */
12386 op_sibling_splice(o, NULL, 0, kids); /* and add back */
12394 Perl_ck_require(pTHX_ OP *o)
12398 PERL_ARGS_ASSERT_CK_REQUIRE;
12400 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
12401 SVOP * const kid = (SVOP*)cUNOPo->op_first;
12405 if (kid->op_type == OP_CONST) {
12406 SV * const sv = kid->op_sv;
12407 U32 const was_readonly = SvREADONLY(sv);
12408 if (kid->op_private & OPpCONST_BARE) {
12413 if (was_readonly) {
12414 SvREADONLY_off(sv);
12416 if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0);
12421 /* treat ::foo::bar as foo::bar */
12422 if (len >= 2 && s[0] == ':' && s[1] == ':')
12423 DIE(aTHX_ "Bareword in require must not start with a double-colon: \"%s\"\n", s);
12425 DIE(aTHX_ "Bareword in require maps to empty filename");
12427 for (; s < end; s++) {
12428 if (*s == ':' && s[1] == ':') {
12430 Move(s+2, s+1, end - s - 1, char);
12434 SvEND_set(sv, end);
12435 sv_catpvs(sv, ".pm");
12436 PERL_HASH(hash, SvPVX(sv), SvCUR(sv));
12437 hek = share_hek(SvPVX(sv),
12438 (SSize_t)SvCUR(sv) * (SvUTF8(sv) ? -1 : 1),
12440 sv_sethek(sv, hek);
12442 SvFLAGS(sv) |= was_readonly;
12444 else if (SvPOK(sv) && !SvNIOK(sv) && !SvGMAGICAL(sv)
12447 if (SvREFCNT(sv) > 1) {
12448 kid->op_sv = newSVpvn_share(
12449 s, SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len, 0);
12450 SvREFCNT_dec_NN(sv);
12455 if (was_readonly) SvREADONLY_off(sv);
12456 PERL_HASH(hash, s, len);
12458 SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len,
12460 sv_sethek(sv, hek);
12462 SvFLAGS(sv) |= was_readonly;
12468 if (!(o->op_flags & OPf_SPECIAL) /* Wasn't written as CORE::require */
12469 /* handle override, if any */
12470 && (gv = gv_override("require", 7))) {
12472 if (o->op_flags & OPf_KIDS) {
12473 kid = cUNOPo->op_first;
12474 op_sibling_splice(o, NULL, -1, NULL);
12477 kid = newDEFSVOP();
12480 newop = S_new_entersubop(aTHX_ gv, kid);
12488 Perl_ck_return(pTHX_ OP *o)
12492 PERL_ARGS_ASSERT_CK_RETURN;
12494 kid = OpSIBLING(cLISTOPo->op_first);
12495 if (PL_compcv && CvLVALUE(PL_compcv)) {
12496 for (; kid; kid = OpSIBLING(kid))
12497 op_lvalue(kid, OP_LEAVESUBLV);
12504 Perl_ck_select(pTHX_ OP *o)
12509 PERL_ARGS_ASSERT_CK_SELECT;
12511 if (o->op_flags & OPf_KIDS) {
12512 kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
12513 if (kid && OpHAS_SIBLING(kid)) {
12514 OpTYPE_set(o, OP_SSELECT);
12516 return fold_constants(op_integerize(op_std_init(o)));
12520 kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
12521 if (kid && kid->op_type == OP_RV2GV)
12522 kid->op_private &= ~HINT_STRICT_REFS;
12527 Perl_ck_shift(pTHX_ OP *o)
12529 const I32 type = o->op_type;
12531 PERL_ARGS_ASSERT_CK_SHIFT;
12533 if (!(o->op_flags & OPf_KIDS)) {
12536 if (!CvUNIQUE(PL_compcv)) {
12537 o->op_flags |= OPf_SPECIAL;
12541 argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
12543 return newUNOP(type, 0, scalar(argop));
12545 return scalar(ck_fun(o));
12549 Perl_ck_sort(pTHX_ OP *o)
12553 HV * const hinthv =
12554 PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;
12557 PERL_ARGS_ASSERT_CK_SORT;
12560 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
12562 const I32 sorthints = (I32)SvIV(*svp);
12563 if ((sorthints & HINT_SORT_STABLE) != 0)
12564 o->op_private |= OPpSORT_STABLE;
12565 if ((sorthints & HINT_SORT_UNSTABLE) != 0)
12566 o->op_private |= OPpSORT_UNSTABLE;
12570 if (o->op_flags & OPf_STACKED)
12572 firstkid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
12574 if ((stacked = o->op_flags & OPf_STACKED)) { /* may have been cleared */
12575 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
12577 /* if the first arg is a code block, process it and mark sort as
12579 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
12581 if (kid->op_type == OP_LEAVE)
12582 op_null(kid); /* wipe out leave */
12583 /* Prevent execution from escaping out of the sort block. */
12586 /* provide scalar context for comparison function/block */
12587 kid = scalar(firstkid);
12588 kid->op_next = kid;
12589 o->op_flags |= OPf_SPECIAL;
12591 else if (kid->op_type == OP_CONST
12592 && kid->op_private & OPpCONST_BARE) {
12596 const char * const name = SvPV(kSVOP_sv, len);
12598 assert (len < 256);
12599 Copy(name, tmpbuf+1, len, char);
12600 off = pad_findmy_pvn(tmpbuf, len+1, SvUTF8(kSVOP_sv));
12601 if (off != NOT_IN_PAD) {
12602 if (PAD_COMPNAME_FLAGS_isOUR(off)) {
12604 newSVhek(HvNAME_HEK(PAD_COMPNAME_OURSTASH(off)));
12605 sv_catpvs(fq, "::");
12606 sv_catsv(fq, kSVOP_sv);
12607 SvREFCNT_dec_NN(kSVOP_sv);
12611 OP * const padop = newOP(OP_PADCV, 0);
12612 padop->op_targ = off;
12613 /* replace the const op with the pad op */
12614 op_sibling_splice(firstkid, NULL, 1, padop);
12620 firstkid = OpSIBLING(firstkid);
12623 for (kid = firstkid; kid; kid = OpSIBLING(kid)) {
12624 /* provide list context for arguments */
12627 op_lvalue(kid, OP_GREPSTART);
12633 /* for sort { X } ..., where X is one of
12634 * $a <=> $b, $b <=> $a, $a cmp $b, $b cmp $a
12635 * elide the second child of the sort (the one containing X),
12636 * and set these flags as appropriate
12640 * Also, check and warn on lexical $a, $b.
12644 S_simplify_sort(pTHX_ OP *o)
12646 OP *kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
12650 const char *gvname;
12653 PERL_ARGS_ASSERT_SIMPLIFY_SORT;
12655 kid = kUNOP->op_first; /* get past null */
12656 if (!(have_scopeop = kid->op_type == OP_SCOPE)
12657 && kid->op_type != OP_LEAVE)
12659 kid = kLISTOP->op_last; /* get past scope */
12660 switch(kid->op_type) {
12664 if (!have_scopeop) goto padkids;
12669 k = kid; /* remember this node*/
12670 if (kBINOP->op_first->op_type != OP_RV2SV
12671 || kBINOP->op_last ->op_type != OP_RV2SV)
12674 Warn about my($a) or my($b) in a sort block, *if* $a or $b is
12675 then used in a comparison. This catches most, but not
12676 all cases. For instance, it catches
12677 sort { my($a); $a <=> $b }
12679 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
12680 (although why you'd do that is anyone's guess).
12684 if (!ckWARN(WARN_SYNTAX)) return;
12685 kid = kBINOP->op_first;
12687 if (kid->op_type == OP_PADSV) {
12688 PADNAME * const name = PAD_COMPNAME(kid->op_targ);
12689 if (PadnameLEN(name) == 2 && *PadnamePV(name) == '$'
12690 && ( PadnamePV(name)[1] == 'a'
12691 || PadnamePV(name)[1] == 'b' ))
12692 /* diag_listed_as: "my %s" used in sort comparison */
12693 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
12694 "\"%s %s\" used in sort comparison",
12695 PadnameIsSTATE(name)
12700 } while ((kid = OpSIBLING(kid)));
12703 kid = kBINOP->op_first; /* get past cmp */
12704 if (kUNOP->op_first->op_type != OP_GV)
12706 kid = kUNOP->op_first; /* get past rv2sv */
12708 if (GvSTASH(gv) != PL_curstash)
12710 gvname = GvNAME(gv);
12711 if (*gvname == 'a' && gvname[1] == '\0')
12713 else if (*gvname == 'b' && gvname[1] == '\0')
12718 kid = k; /* back to cmp */
12719 /* already checked above that it is rv2sv */
12720 kid = kBINOP->op_last; /* down to 2nd arg */
12721 if (kUNOP->op_first->op_type != OP_GV)
12723 kid = kUNOP->op_first; /* get past rv2sv */
12725 if (GvSTASH(gv) != PL_curstash)
12727 gvname = GvNAME(gv);
12729 ? !(*gvname == 'a' && gvname[1] == '\0')
12730 : !(*gvname == 'b' && gvname[1] == '\0'))
12732 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
12734 o->op_private |= OPpSORT_DESCEND;
12735 if (k->op_type == OP_NCMP)
12736 o->op_private |= OPpSORT_NUMERIC;
12737 if (k->op_type == OP_I_NCMP)
12738 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
12739 kid = OpSIBLING(cLISTOPo->op_first);
12740 /* cut out and delete old block (second sibling) */
12741 op_sibling_splice(o, cLISTOPo->op_first, 1, NULL);
12746 Perl_ck_split(pTHX_ OP *o)
12752 PERL_ARGS_ASSERT_CK_SPLIT;
12754 assert(o->op_type == OP_LIST);
12756 if (o->op_flags & OPf_STACKED)
12757 return no_fh_allowed(o);
12759 kid = cLISTOPo->op_first;
12760 /* delete leading NULL node, then add a CONST if no other nodes */
12761 assert(kid->op_type == OP_NULL);
12762 op_sibling_splice(o, NULL, 1,
12763 OpHAS_SIBLING(kid) ? NULL : newSVOP(OP_CONST, 0, newSVpvs(" ")));
12765 kid = cLISTOPo->op_first;
12767 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
12768 /* remove match expression, and replace with new optree with
12769 * a match op at its head */
12770 op_sibling_splice(o, NULL, 1, NULL);
12771 /* pmruntime will handle split " " behavior with flag==2 */
12772 kid = pmruntime(newPMOP(OP_MATCH, 0), kid, NULL, 2, 0);
12773 op_sibling_splice(o, NULL, 0, kid);
12776 assert(kid->op_type == OP_MATCH || kid->op_type == OP_SPLIT);
12778 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
12779 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
12780 "Use of /g modifier is meaningless in split");
12783 /* eliminate the split op, and move the match op (plus any children)
12784 * into its place, then convert the match op into a split op. i.e.
12786 * SPLIT MATCH SPLIT(ex-MATCH)
12788 * MATCH - A - B - C => R - A - B - C => R - A - B - C
12794 * (R, if it exists, will be a regcomp op)
12797 op_sibling_splice(o, NULL, 1, NULL); /* detach match op from o */
12798 sibs = op_sibling_splice(o, NULL, -1, NULL); /* detach any other sibs */
12799 op_sibling_splice(kid, cLISTOPx(kid)->op_last, 0, sibs); /* and reattach */
12800 OpTYPE_set(kid, OP_SPLIT);
12801 kid->op_flags = (o->op_flags | (kid->op_flags & OPf_KIDS));
12802 kid->op_private = o->op_private;
12805 kid = sibs; /* kid is now the string arg of the split */
12808 kid = newDEFSVOP();
12809 op_append_elem(OP_SPLIT, o, kid);
12813 kid = OpSIBLING(kid);
12815 kid = newSVOP(OP_CONST, 0, newSViv(0));
12816 op_append_elem(OP_SPLIT, o, kid);
12817 o->op_private |= OPpSPLIT_IMPLIM;
12821 if (OpHAS_SIBLING(kid))
12822 return too_many_arguments_pv(o,OP_DESC(o), 0);
12828 Perl_ck_stringify(pTHX_ OP *o)
12830 OP * const kid = OpSIBLING(cUNOPo->op_first);
12831 PERL_ARGS_ASSERT_CK_STRINGIFY;
12832 if (( kid->op_type == OP_JOIN || kid->op_type == OP_QUOTEMETA
12833 || kid->op_type == OP_LC || kid->op_type == OP_LCFIRST
12834 || kid->op_type == OP_UC || kid->op_type == OP_UCFIRST)
12835 && !OpHAS_SIBLING(kid)) /* syntax errs can leave extra children */
12837 op_sibling_splice(o, cUNOPo->op_first, -1, NULL);
12845 Perl_ck_join(pTHX_ OP *o)
12847 OP * const kid = OpSIBLING(cLISTOPo->op_first);
12849 PERL_ARGS_ASSERT_CK_JOIN;
12851 if (kid && kid->op_type == OP_MATCH) {
12852 if (ckWARN(WARN_SYNTAX)) {
12853 const REGEXP *re = PM_GETRE(kPMOP);
12855 ? newSVpvn_flags( RX_PRECOMP_const(re), RX_PRELEN(re),
12856 SVs_TEMP | ( RX_UTF8(re) ? SVf_UTF8 : 0 ) )
12857 : newSVpvs_flags( "STRING", SVs_TEMP );
12858 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
12859 "/%" SVf "/ should probably be written as \"%" SVf "\"",
12860 SVfARG(msg), SVfARG(msg));
12864 && (kid->op_type == OP_CONST /* an innocent, unsuspicious separator */
12865 || (kid->op_type == OP_PADSV && !(kid->op_private & OPpLVAL_INTRO))
12866 || ( kid->op_type==OP_RV2SV && kUNOP->op_first->op_type == OP_GV
12867 && !(kid->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))))
12869 const OP * const bairn = OpSIBLING(kid); /* the list */
12870 if (bairn && !OpHAS_SIBLING(bairn) /* single-item list */
12871 && OP_GIMME(bairn,0) == G_SCALAR)
12873 OP * const ret = op_convert_list(OP_STRINGIFY, OPf_FOLDED,
12874 op_sibling_splice(o, kid, 1, NULL));
12884 =for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
12886 Examines an op, which is expected to identify a subroutine at runtime,
12887 and attempts to determine at compile time which subroutine it identifies.
12888 This is normally used during Perl compilation to determine whether
12889 a prototype can be applied to a function call. C<cvop> is the op
12890 being considered, normally an C<rv2cv> op. A pointer to the identified
12891 subroutine is returned, if it could be determined statically, and a null
12892 pointer is returned if it was not possible to determine statically.
12894 Currently, the subroutine can be identified statically if the RV that the
12895 C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
12896 A C<gv> op is suitable if the GV's CV slot is populated. A C<const> op is
12897 suitable if the constant value must be an RV pointing to a CV. Details of
12898 this process may change in future versions of Perl. If the C<rv2cv> op
12899 has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
12900 the subroutine statically: this flag is used to suppress compile-time
12901 magic on a subroutine call, forcing it to use default runtime behaviour.
12903 If C<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
12904 of a GV reference is modified. If a GV was examined and its CV slot was
12905 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
12906 If the op is not optimised away, and the CV slot is later populated with
12907 a subroutine having a prototype, that flag eventually triggers the warning
12908 "called too early to check prototype".
12910 If C<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
12911 of returning a pointer to the subroutine it returns a pointer to the
12912 GV giving the most appropriate name for the subroutine in this context.
12913 Normally this is just the C<CvGV> of the subroutine, but for an anonymous
12914 (C<CvANON>) subroutine that is referenced through a GV it will be the
12915 referencing GV. The resulting C<GV*> is cast to C<CV*> to be returned.
12916 A null pointer is returned as usual if there is no statically-determinable
12922 /* shared by toke.c:yylex */
12924 Perl_find_lexical_cv(pTHX_ PADOFFSET off)
12926 PADNAME *name = PAD_COMPNAME(off);
12927 CV *compcv = PL_compcv;
12928 while (PadnameOUTER(name)) {
12929 assert(PARENT_PAD_INDEX(name));
12930 compcv = CvOUTSIDE(compcv);
12931 name = PadlistNAMESARRAY(CvPADLIST(compcv))
12932 [off = PARENT_PAD_INDEX(name)];
12934 assert(!PadnameIsOUR(name));
12935 if (!PadnameIsSTATE(name) && PadnamePROTOCV(name)) {
12936 return PadnamePROTOCV(name);
12938 return (CV *)AvARRAY(PadlistARRAY(CvPADLIST(compcv))[1])[off];
12942 Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
12947 PERL_ARGS_ASSERT_RV2CV_OP_CV;
12948 if (flags & ~RV2CVOPCV_FLAG_MASK)
12949 Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags);
12950 if (cvop->op_type != OP_RV2CV)
12952 if (cvop->op_private & OPpENTERSUB_AMPER)
12954 if (!(cvop->op_flags & OPf_KIDS))
12956 rvop = cUNOPx(cvop)->op_first;
12957 switch (rvop->op_type) {
12959 gv = cGVOPx_gv(rvop);
12961 if (SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV) {
12962 cv = MUTABLE_CV(SvRV(gv));
12966 if (flags & RV2CVOPCV_RETURN_STUB)
12972 if (flags & RV2CVOPCV_MARK_EARLY)
12973 rvop->op_private |= OPpEARLY_CV;
12978 SV *rv = cSVOPx_sv(rvop);
12981 cv = (CV*)SvRV(rv);
12985 cv = find_lexical_cv(rvop->op_targ);
12990 } NOT_REACHED; /* NOTREACHED */
12992 if (SvTYPE((SV*)cv) != SVt_PVCV)
12994 if (flags & RV2CVOPCV_RETURN_NAME_GV) {
12995 if ((!CvANON(cv) && !CvLEXICAL(cv)) || !gv)
12999 else if (flags & RV2CVOPCV_MAYBE_NAME_GV) {
13000 if (CvLEXICAL(cv) || CvNAMED(cv))
13002 if (!CvANON(cv) || !gv)
13012 =for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
13014 Performs the default fixup of the arguments part of an C<entersub>
13015 op tree. This consists of applying list context to each of the
13016 argument ops. This is the standard treatment used on a call marked
13017 with C<&>, or a method call, or a call through a subroutine reference,
13018 or any other call where the callee can't be identified at compile time,
13019 or a call where the callee has no prototype.
13025 Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
13029 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
13031 aop = cUNOPx(entersubop)->op_first;
13032 if (!OpHAS_SIBLING(aop))
13033 aop = cUNOPx(aop)->op_first;
13034 for (aop = OpSIBLING(aop); OpHAS_SIBLING(aop); aop = OpSIBLING(aop)) {
13035 /* skip the extra attributes->import() call implicitly added in
13036 * something like foo(my $x : bar)
13038 if ( aop->op_type == OP_ENTERSUB
13039 && (aop->op_flags & OPf_WANT) == OPf_WANT_VOID
13043 op_lvalue(aop, OP_ENTERSUB);
13049 =for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
13051 Performs the fixup of the arguments part of an C<entersub> op tree
13052 based on a subroutine prototype. This makes various modifications to
13053 the argument ops, from applying context up to inserting C<refgen> ops,
13054 and checking the number and syntactic types of arguments, as directed by
13055 the prototype. This is the standard treatment used on a subroutine call,
13056 not marked with C<&>, where the callee can be identified at compile time
13057 and has a prototype.
13059 C<protosv> supplies the subroutine prototype to be applied to the call.
13060 It may be a normal defined scalar, of which the string value will be used.
13061 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
13062 that has been cast to C<SV*>) which has a prototype. The prototype
13063 supplied, in whichever form, does not need to match the actual callee
13064 referenced by the op tree.
13066 If the argument ops disagree with the prototype, for example by having
13067 an unacceptable number of arguments, a valid op tree is returned anyway.
13068 The error is reflected in the parser state, normally resulting in a single
13069 exception at the top level of parsing which covers all the compilation
13070 errors that occurred. In the error message, the callee is referred to
13071 by the name defined by the C<namegv> parameter.
13077 Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
13080 const char *proto, *proto_end;
13081 OP *aop, *prev, *cvop, *parent;
13084 I32 contextclass = 0;
13085 const char *e = NULL;
13086 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO;
13087 if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv))
13088 Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto, "
13089 "flags=%lx", (unsigned long) SvFLAGS(protosv));
13090 if (SvTYPE(protosv) == SVt_PVCV)
13091 proto = CvPROTO(protosv), proto_len = CvPROTOLEN(protosv);
13092 else proto = SvPV(protosv, proto_len);
13093 proto = S_strip_spaces(aTHX_ proto, &proto_len);
13094 proto_end = proto + proto_len;
13095 parent = entersubop;
13096 aop = cUNOPx(entersubop)->op_first;
13097 if (!OpHAS_SIBLING(aop)) {
13099 aop = cUNOPx(aop)->op_first;
13102 aop = OpSIBLING(aop);
13103 for (cvop = aop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ;
13104 while (aop != cvop) {
13107 if (proto >= proto_end)
13109 SV * const namesv = cv_name((CV *)namegv, NULL, 0);
13110 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf,
13111 SVfARG(namesv)), SvUTF8(namesv));
13121 /* _ must be at the end */
13122 if (proto[1] && !strchr(";@%", proto[1]))
13138 if ( o3->op_type != OP_UNDEF
13139 && (o3->op_type != OP_SREFGEN
13140 || ( cUNOPx(cUNOPx(o3)->op_first)->op_first->op_type
13142 && cUNOPx(cUNOPx(o3)->op_first)->op_first->op_type
13144 bad_type_gv(arg, namegv, o3,
13145 arg == 1 ? "block or sub {}" : "sub {}");
13148 /* '*' allows any scalar type, including bareword */
13151 if (o3->op_type == OP_RV2GV)
13152 goto wrapref; /* autoconvert GLOB -> GLOBref */
13153 else if (o3->op_type == OP_CONST)
13154 o3->op_private &= ~OPpCONST_STRICT;
13160 if (o3->op_type == OP_RV2AV ||
13161 o3->op_type == OP_PADAV ||
13162 o3->op_type == OP_RV2HV ||
13163 o3->op_type == OP_PADHV
13169 case '[': case ']':
13176 switch (*proto++) {
13178 if (contextclass++ == 0) {
13179 e = (char *) memchr(proto, ']', proto_end - proto);
13180 if (!e || e == proto)
13188 if (contextclass) {
13189 const char *p = proto;
13190 const char *const end = proto;
13192 while (*--p != '[')
13193 /* \[$] accepts any scalar lvalue */
13195 && Perl_op_lvalue_flags(aTHX_
13197 OP_READ, /* not entersub */
13200 bad_type_gv(arg, namegv, o3,
13201 Perl_form(aTHX_ "one of %.*s",(int)(end - p), p));
13206 if (o3->op_type == OP_RV2GV)
13209 bad_type_gv(arg, namegv, o3, "symbol");
13212 if (o3->op_type == OP_ENTERSUB
13213 && !(o3->op_flags & OPf_STACKED))
13216 bad_type_gv(arg, namegv, o3, "subroutine");
13219 if (o3->op_type == OP_RV2SV ||
13220 o3->op_type == OP_PADSV ||
13221 o3->op_type == OP_HELEM ||
13222 o3->op_type == OP_AELEM)
13224 if (!contextclass) {
13225 /* \$ accepts any scalar lvalue */
13226 if (Perl_op_lvalue_flags(aTHX_
13228 OP_READ, /* not entersub */
13231 bad_type_gv(arg, namegv, o3, "scalar");
13235 if (o3->op_type == OP_RV2AV ||
13236 o3->op_type == OP_PADAV)
13238 o3->op_flags &=~ OPf_PARENS;
13242 bad_type_gv(arg, namegv, o3, "array");
13245 if (o3->op_type == OP_RV2HV ||
13246 o3->op_type == OP_PADHV)
13248 o3->op_flags &=~ OPf_PARENS;
13252 bad_type_gv(arg, namegv, o3, "hash");
13255 aop = S_op_sibling_newUNOP(aTHX_ parent, prev,
13257 if (contextclass && e) {
13262 default: goto oops;
13272 Perl_croak(aTHX_ "Malformed prototype for %" SVf ": %" SVf,
13273 SVfARG(cv_name((CV *)namegv, NULL, 0)),
13278 op_lvalue(aop, OP_ENTERSUB);
13280 aop = OpSIBLING(aop);
13282 if (aop == cvop && *proto == '_') {
13283 /* generate an access to $_ */
13284 op_sibling_splice(parent, prev, 0, newDEFSVOP());
13286 if (!optional && proto_end > proto &&
13287 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
13289 SV * const namesv = cv_name((CV *)namegv, NULL, 0);
13290 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %" SVf,
13291 SVfARG(namesv)), SvUTF8(namesv));
13297 =for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
13299 Performs the fixup of the arguments part of an C<entersub> op tree either
13300 based on a subroutine prototype or using default list-context processing.
13301 This is the standard treatment used on a subroutine call, not marked
13302 with C<&>, where the callee can be identified at compile time.
13304 C<protosv> supplies the subroutine prototype to be applied to the call,
13305 or indicates that there is no prototype. It may be a normal scalar,
13306 in which case if it is defined then the string value will be used
13307 as a prototype, and if it is undefined then there is no prototype.
13308 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
13309 that has been cast to C<SV*>), of which the prototype will be used if it
13310 has one. The prototype (or lack thereof) supplied, in whichever form,
13311 does not need to match the actual callee referenced by the op tree.
13313 If the argument ops disagree with the prototype, for example by having
13314 an unacceptable number of arguments, a valid op tree is returned anyway.
13315 The error is reflected in the parser state, normally resulting in a single
13316 exception at the top level of parsing which covers all the compilation
13317 errors that occurred. In the error message, the callee is referred to
13318 by the name defined by the C<namegv> parameter.
13324 Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
13325 GV *namegv, SV *protosv)
13327 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST;
13328 if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv))
13329 return ck_entersub_args_proto(entersubop, namegv, protosv);
13331 return ck_entersub_args_list(entersubop);
13335 Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
13337 IV cvflags = SvIVX(protosv);
13338 int opnum = cvflags & 0xffff;
13339 OP *aop = cUNOPx(entersubop)->op_first;
13341 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE;
13345 if (!OpHAS_SIBLING(aop))
13346 aop = cUNOPx(aop)->op_first;
13347 aop = OpSIBLING(aop);
13348 for (cvop = aop; OpSIBLING(cvop); cvop = OpSIBLING(cvop)) ;
13350 SV *namesv = cv_name((CV *)namegv, NULL, CV_NAME_NOTQUAL);
13351 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf,
13352 SVfARG(namesv)), SvUTF8(namesv));
13355 op_free(entersubop);
13356 switch(cvflags >> 16) {
13357 case 'F': return newSVOP(OP_CONST, 0,
13358 newSVpv(CopFILE(PL_curcop),0));
13359 case 'L': return newSVOP(
13361 Perl_newSVpvf(aTHX_
13362 "%" IVdf, (IV)CopLINE(PL_curcop)
13365 case 'P': return newSVOP(OP_CONST, 0,
13367 ? newSVhek(HvNAME_HEK(PL_curstash))
13372 NOT_REACHED; /* NOTREACHED */
13375 OP *prev, *cvop, *first, *parent;
13378 parent = entersubop;
13379 if (!OpHAS_SIBLING(aop)) {
13381 aop = cUNOPx(aop)->op_first;
13384 first = prev = aop;
13385 aop = OpSIBLING(aop);
13386 /* find last sibling */
13388 OpHAS_SIBLING(cvop);
13389 prev = cvop, cvop = OpSIBLING(cvop))
13391 if (!(cvop->op_private & OPpENTERSUB_NOPAREN)
13392 /* Usually, OPf_SPECIAL on an op with no args means that it had
13393 * parens, but these have their own meaning for that flag: */
13394 && opnum != OP_VALUES && opnum != OP_KEYS && opnum != OP_EACH
13395 && opnum != OP_DELETE && opnum != OP_EXISTS)
13396 flags |= OPf_SPECIAL;
13397 /* excise cvop from end of sibling chain */
13398 op_sibling_splice(parent, prev, 1, NULL);
13400 if (aop == cvop) aop = NULL;
13402 /* detach remaining siblings from the first sibling, then
13403 * dispose of original optree */
13406 op_sibling_splice(parent, first, -1, NULL);
13407 op_free(entersubop);
13409 if (cvflags == (OP_ENTEREVAL | (1<<16)))
13410 flags |= OPpEVAL_BYTES <<8;
13412 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
13414 case OA_BASEOP_OR_UNOP:
13415 case OA_FILESTATOP:
13416 return aop ? newUNOP(opnum,flags,aop) : newOP(opnum,flags);
13419 SV *namesv = cv_name((CV *)namegv, NULL, CV_NAME_NOTQUAL);
13420 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf,
13421 SVfARG(namesv)), SvUTF8(namesv));
13424 return opnum == OP_RUNCV
13425 ? newPVOP(OP_RUNCV,0,NULL)
13428 return op_convert_list(opnum,0,aop);
13431 NOT_REACHED; /* NOTREACHED */
13436 =for apidoc Am|void|cv_get_call_checker_flags|CV *cv|U32 gflags|Perl_call_checker *ckfun_p|SV **ckobj_p|U32 *ckflags_p
13438 Retrieves the function that will be used to fix up a call to C<cv>.
13439 Specifically, the function is applied to an C<entersub> op tree for a
13440 subroutine call, not marked with C<&>, where the callee can be identified
13441 at compile time as C<cv>.
13443 The C-level function pointer is returned in C<*ckfun_p>, an SV argument
13444 for it is returned in C<*ckobj_p>, and control flags are returned in
13445 C<*ckflags_p>. The function is intended to be called in this manner:
13447 entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
13449 In this call, C<entersubop> is a pointer to the C<entersub> op,
13450 which may be replaced by the check function, and C<namegv> supplies
13451 the name that should be used by the check function to refer
13452 to the callee of the C<entersub> op if it needs to emit any diagnostics.
13453 It is permitted to apply the check function in non-standard situations,
13454 such as to a call to a different subroutine or to a method call.
13456 C<namegv> may not actually be a GV. If the C<CALL_CHECKER_REQUIRE_GV>
13457 bit is clear in C<*ckflags_p>, it is permitted to pass a CV or other SV
13458 instead, anything that can be used as the first argument to L</cv_name>.
13459 If the C<CALL_CHECKER_REQUIRE_GV> bit is set in C<*ckflags_p> then the
13460 check function requires C<namegv> to be a genuine GV.
13462 By default, the check function is
13463 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
13464 the SV parameter is C<cv> itself, and the C<CALL_CHECKER_REQUIRE_GV>
13465 flag is clear. This implements standard prototype processing. It can
13466 be changed, for a particular subroutine, by L</cv_set_call_checker_flags>.
13468 If the C<CALL_CHECKER_REQUIRE_GV> bit is set in C<gflags> then it
13469 indicates that the caller only knows about the genuine GV version of
13470 C<namegv>, and accordingly the corresponding bit will always be set in
13471 C<*ckflags_p>, regardless of the check function's recorded requirements.
13472 If the C<CALL_CHECKER_REQUIRE_GV> bit is clear in C<gflags> then it
13473 indicates the caller knows about the possibility of passing something
13474 other than a GV as C<namegv>, and accordingly the corresponding bit may
13475 be either set or clear in C<*ckflags_p>, indicating the check function's
13476 recorded requirements.
13478 C<gflags> is a bitset passed into C<cv_get_call_checker_flags>, in which
13479 only the C<CALL_CHECKER_REQUIRE_GV> bit currently has a defined meaning
13480 (for which see above). All other bits should be clear.
13482 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
13484 The original form of L</cv_get_call_checker_flags>, which does not return
13485 checker flags. When using a checker function returned by this function,
13486 it is only safe to call it with a genuine GV as its C<namegv> argument.
13492 Perl_cv_get_call_checker_flags(pTHX_ CV *cv, U32 gflags,
13493 Perl_call_checker *ckfun_p, SV **ckobj_p, U32 *ckflags_p)
13496 PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER_FLAGS;
13497 PERL_UNUSED_CONTEXT;
13498 callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL;
13500 *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr);
13501 *ckobj_p = callmg->mg_obj;
13502 *ckflags_p = (callmg->mg_flags | gflags) & MGf_REQUIRE_GV;
13504 *ckfun_p = Perl_ck_entersub_args_proto_or_list;
13505 *ckobj_p = (SV*)cv;
13506 *ckflags_p = gflags & MGf_REQUIRE_GV;
13511 Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
13514 PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER;
13515 PERL_UNUSED_CONTEXT;
13516 cv_get_call_checker_flags(cv, CALL_CHECKER_REQUIRE_GV, ckfun_p, ckobj_p,
13521 =for apidoc Am|void|cv_set_call_checker_flags|CV *cv|Perl_call_checker ckfun|SV *ckobj|U32 ckflags
13523 Sets the function that will be used to fix up a call to C<cv>.
13524 Specifically, the function is applied to an C<entersub> op tree for a
13525 subroutine call, not marked with C<&>, where the callee can be identified
13526 at compile time as C<cv>.
13528 The C-level function pointer is supplied in C<ckfun>, an SV argument for
13529 it is supplied in C<ckobj>, and control flags are supplied in C<ckflags>.
13530 The function should be defined like this:
13532 STATIC OP * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj)
13534 It is intended to be called in this manner:
13536 entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
13538 In this call, C<entersubop> is a pointer to the C<entersub> op,
13539 which may be replaced by the check function, and C<namegv> supplies
13540 the name that should be used by the check function to refer
13541 to the callee of the C<entersub> op if it needs to emit any diagnostics.
13542 It is permitted to apply the check function in non-standard situations,
13543 such as to a call to a different subroutine or to a method call.
13545 C<namegv> may not actually be a GV. For efficiency, perl may pass a
13546 CV or other SV instead. Whatever is passed can be used as the first
13547 argument to L</cv_name>. You can force perl to pass a GV by including
13548 C<CALL_CHECKER_REQUIRE_GV> in the C<ckflags>.
13550 C<ckflags> is a bitset, in which only the C<CALL_CHECKER_REQUIRE_GV>
13551 bit currently has a defined meaning (for which see above). All other
13552 bits should be clear.
13554 The current setting for a particular CV can be retrieved by
13555 L</cv_get_call_checker_flags>.
13557 =for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
13559 The original form of L</cv_set_call_checker_flags>, which passes it the
13560 C<CALL_CHECKER_REQUIRE_GV> flag for backward-compatibility. The effect
13561 of that flag setting is that the check function is guaranteed to get a
13562 genuine GV as its C<namegv> argument.
13568 Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
13570 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER;
13571 cv_set_call_checker_flags(cv, ckfun, ckobj, CALL_CHECKER_REQUIRE_GV);
13575 Perl_cv_set_call_checker_flags(pTHX_ CV *cv, Perl_call_checker ckfun,
13576 SV *ckobj, U32 ckflags)
13578 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER_FLAGS;
13579 if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) {
13580 if (SvMAGICAL((SV*)cv))
13581 mg_free_type((SV*)cv, PERL_MAGIC_checkcall);
13584 sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0);
13585 callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall);
13587 if (callmg->mg_flags & MGf_REFCOUNTED) {
13588 SvREFCNT_dec(callmg->mg_obj);
13589 callmg->mg_flags &= ~MGf_REFCOUNTED;
13591 callmg->mg_ptr = FPTR2DPTR(char *, ckfun);
13592 callmg->mg_obj = ckobj;
13593 if (ckobj != (SV*)cv) {
13594 SvREFCNT_inc_simple_void_NN(ckobj);
13595 callmg->mg_flags |= MGf_REFCOUNTED;
13597 callmg->mg_flags = (callmg->mg_flags &~ MGf_REQUIRE_GV)
13598 | (U8)(ckflags & MGf_REQUIRE_GV) | MGf_COPY;
13603 S_entersub_alloc_targ(pTHX_ OP * const o)
13605 o->op_targ = pad_alloc(OP_ENTERSUB, SVs_PADTMP);
13606 o->op_private |= OPpENTERSUB_HASTARG;
13610 Perl_ck_subr(pTHX_ OP *o)
13615 SV **const_class = NULL;
13617 PERL_ARGS_ASSERT_CK_SUBR;
13619 aop = cUNOPx(o)->op_first;
13620 if (!OpHAS_SIBLING(aop))
13621 aop = cUNOPx(aop)->op_first;
13622 aop = OpSIBLING(aop);
13623 for (cvop = aop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ;
13624 cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY);
13625 namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_MAYBE_NAME_GV) : NULL;
13627 o->op_private &= ~1;
13628 o->op_private |= (PL_hints & HINT_STRICT_REFS);
13629 if (PERLDB_SUB && PL_curstash != PL_debstash)
13630 o->op_private |= OPpENTERSUB_DB;
13631 switch (cvop->op_type) {
13633 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
13637 case OP_METHOD_NAMED:
13638 case OP_METHOD_SUPER:
13639 case OP_METHOD_REDIR:
13640 case OP_METHOD_REDIR_SUPER:
13641 o->op_flags |= OPf_REF;
13642 if (aop->op_type == OP_CONST) {
13643 aop->op_private &= ~OPpCONST_STRICT;
13644 const_class = &cSVOPx(aop)->op_sv;
13646 else if (aop->op_type == OP_LIST) {
13647 OP * const sib = OpSIBLING(((UNOP*)aop)->op_first);
13648 if (sib && sib->op_type == OP_CONST) {
13649 sib->op_private &= ~OPpCONST_STRICT;
13650 const_class = &cSVOPx(sib)->op_sv;
13653 /* make class name a shared cow string to speedup method calls */
13654 /* constant string might be replaced with object, f.e. bigint */
13655 if (const_class && SvPOK(*const_class)) {
13657 const char* str = SvPV(*const_class, len);
13659 SV* const shared = newSVpvn_share(
13660 str, SvUTF8(*const_class)
13661 ? -(SSize_t)len : (SSize_t)len,
13664 if (SvREADONLY(*const_class))
13665 SvREADONLY_on(shared);
13666 SvREFCNT_dec(*const_class);
13667 *const_class = shared;
13674 S_entersub_alloc_targ(aTHX_ o);
13675 return ck_entersub_args_list(o);
13677 Perl_call_checker ckfun;
13680 cv_get_call_checker_flags(cv, 0, &ckfun, &ckobj, &ckflags);
13681 if (CvISXSUB(cv) || !CvROOT(cv))
13682 S_entersub_alloc_targ(aTHX_ o);
13684 /* The original call checker API guarantees that a GV will be
13685 be provided with the right name. So, if the old API was
13686 used (or the REQUIRE_GV flag was passed), we have to reify
13687 the CV’s GV, unless this is an anonymous sub. This is not
13688 ideal for lexical subs, as its stringification will include
13689 the package. But it is the best we can do. */
13690 if (ckflags & CALL_CHECKER_REQUIRE_GV) {
13691 if (!CvANON(cv) && (!CvNAMED(cv) || CvNAME_HEK(cv)))
13694 else namegv = MUTABLE_GV(cv);
13695 /* After a syntax error in a lexical sub, the cv that
13696 rv2cv_op_cv returns may be a nameless stub. */
13697 if (!namegv) return ck_entersub_args_list(o);
13700 return ckfun(aTHX_ o, namegv, ckobj);
13705 Perl_ck_svconst(pTHX_ OP *o)
13707 SV * const sv = cSVOPo->op_sv;
13708 PERL_ARGS_ASSERT_CK_SVCONST;
13709 PERL_UNUSED_CONTEXT;
13710 #ifdef PERL_COPY_ON_WRITE
13711 /* Since the read-only flag may be used to protect a string buffer, we
13712 cannot do copy-on-write with existing read-only scalars that are not
13713 already copy-on-write scalars. To allow $_ = "hello" to do COW with
13714 that constant, mark the constant as COWable here, if it is not
13715 already read-only. */
13716 if (!SvREADONLY(sv) && !SvIsCOW(sv) && SvCANCOW(sv)) {
13719 # ifdef PERL_DEBUG_READONLY_COW
13729 Perl_ck_trunc(pTHX_ OP *o)
13731 PERL_ARGS_ASSERT_CK_TRUNC;
13733 if (o->op_flags & OPf_KIDS) {
13734 SVOP *kid = (SVOP*)cUNOPo->op_first;
13736 if (kid->op_type == OP_NULL)
13737 kid = (SVOP*)OpSIBLING(kid);
13738 if (kid && kid->op_type == OP_CONST &&
13739 (kid->op_private & OPpCONST_BARE) &&
13742 o->op_flags |= OPf_SPECIAL;
13743 kid->op_private &= ~OPpCONST_STRICT;
13750 Perl_ck_substr(pTHX_ OP *o)
13752 PERL_ARGS_ASSERT_CK_SUBSTR;
13755 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
13756 OP *kid = cLISTOPo->op_first;
13758 if (kid->op_type == OP_NULL)
13759 kid = OpSIBLING(kid);
13761 /* Historically, substr(delete $foo{bar},...) has been allowed
13762 with 4-arg substr. Keep it working by applying entersub
13764 op_lvalue(kid, OP_ENTERSUB);
13771 Perl_ck_tell(pTHX_ OP *o)
13773 PERL_ARGS_ASSERT_CK_TELL;
13775 if (o->op_flags & OPf_KIDS) {
13776 OP *kid = cLISTOPo->op_first;
13777 if (kid->op_type == OP_NULL && OpHAS_SIBLING(kid)) kid = OpSIBLING(kid);
13778 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
13784 Perl_ck_each(pTHX_ OP *o)
13787 OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL;
13788 const unsigned orig_type = o->op_type;
13790 PERL_ARGS_ASSERT_CK_EACH;
13793 switch (kid->op_type) {
13799 OpTYPE_set(o, orig_type == OP_EACH ? OP_AEACH
13800 : orig_type == OP_KEYS ? OP_AKEYS
13804 if (kid->op_private == OPpCONST_BARE
13805 || !SvROK(cSVOPx_sv(kid))
13806 || ( SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV
13807 && SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVHV )
13812 qerror(Perl_mess(aTHX_
13813 "Experimental %s on scalar is now forbidden",
13814 PL_op_desc[orig_type]));
13816 bad_type_pv(1, "hash or array", o, kid);
13824 Perl_ck_length(pTHX_ OP *o)
13826 PERL_ARGS_ASSERT_CK_LENGTH;
13830 if (ckWARN(WARN_SYNTAX)) {
13831 const OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
13835 const bool hash = kid->op_type == OP_PADHV
13836 || kid->op_type == OP_RV2HV;
13837 switch (kid->op_type) {
13842 name = S_op_varname(aTHX_ kid);
13848 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
13849 "length() used on %" SVf " (did you mean \"scalar(%s%" SVf
13851 SVfARG(name), hash ? "keys " : "", SVfARG(name)
13854 /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */
13855 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
13856 "length() used on %%hash (did you mean \"scalar(keys %%hash)\"?)");
13858 /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */
13859 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
13860 "length() used on @array (did you mean \"scalar(@array)\"?)");
13870 ---------------------------------------------------------
13872 Common vars in list assignment
13874 There now follows some enums and static functions for detecting
13875 common variables in list assignments. Here is a little essay I wrote
13876 for myself when trying to get my head around this. DAPM.
13880 First some random observations:
13882 * If a lexical var is an alias of something else, e.g.
13883 for my $x ($lex, $pkg, $a[0]) {...}
13884 then the act of aliasing will increase the reference count of the SV
13886 * If a package var is an alias of something else, it may still have a
13887 reference count of 1, depending on how the alias was created, e.g.
13888 in *a = *b, $a may have a refcount of 1 since the GP is shared
13889 with a single GvSV pointer to the SV. So If it's an alias of another
13890 package var, then RC may be 1; if it's an alias of another scalar, e.g.
13891 a lexical var or an array element, then it will have RC > 1.
13893 * There are many ways to create a package alias; ultimately, XS code
13894 may quite legally do GvSV(gv) = SvREFCNT_inc(sv) for example, so
13895 run-time tracing mechanisms are unlikely to be able to catch all cases.
13897 * When the LHS is all my declarations, the same vars can't appear directly
13898 on the RHS, but they can indirectly via closures, aliasing and lvalue
13899 subs. But those techniques all involve an increase in the lexical
13900 scalar's ref count.
13902 * When the LHS is all lexical vars (but not necessarily my declarations),
13903 it is possible for the same lexicals to appear directly on the RHS, and
13904 without an increased ref count, since the stack isn't refcounted.
13905 This case can be detected at compile time by scanning for common lex
13906 vars with PL_generation.
13908 * lvalue subs defeat common var detection, but they do at least
13909 return vars with a temporary ref count increment. Also, you can't
13910 tell at compile time whether a sub call is lvalue.
13915 A: There are a few circumstances where there definitely can't be any
13918 LHS empty: () = (...);
13919 RHS empty: (....) = ();
13920 RHS contains only constants or other 'can't possibly be shared'
13921 elements (e.g. ops that return PADTMPs): (...) = (1,2, length)
13922 i.e. they only contain ops not marked as dangerous, whose children
13923 are also not dangerous;
13925 LHS contains a single scalar element: e.g. ($x) = (....); because
13926 after $x has been modified, it won't be used again on the RHS;
13927 RHS contains a single element with no aggregate on LHS: e.g.
13928 ($a,$b,$c) = ($x); again, once $a has been modified, its value
13929 won't be used again.
13931 B: If LHS are all 'my' lexical var declarations (or safe ops, which
13934 my ($a, $b, @c) = ...;
13936 Due to closure and goto tricks, these vars may already have content.
13937 For the same reason, an element on the RHS may be a lexical or package
13938 alias of one of the vars on the left, or share common elements, for
13941 my ($x,$y) = f(); # $x and $y on both sides
13942 sub f : lvalue { ($x,$y) = (1,2); $y, $x }
13947 my @a = @$ra; # elements of @a on both sides
13948 sub f { @a = 1..4; \@a }
13951 First, just consider scalar vars on LHS:
13953 RHS is safe only if (A), or in addition,
13954 * contains only lexical *scalar* vars, where neither side's
13955 lexicals have been flagged as aliases
13957 If RHS is not safe, then it's always legal to check LHS vars for
13958 RC==1, since the only RHS aliases will always be associated
13961 Note that in particular, RHS is not safe if:
13963 * it contains package scalar vars; e.g.:
13966 my ($x, $y) = (2, $x_alias);
13967 sub f { $x = 1; *x_alias = \$x; }
13969 * It contains other general elements, such as flattened or
13970 * spliced or single array or hash elements, e.g.
13973 my ($x,$y) = @a; # or $a[0] or @a{@b} etc
13977 use feature 'refaliasing';
13978 \($a[0], $a[1]) = \($y,$x);
13981 It doesn't matter if the array/hash is lexical or package.
13983 * it contains a function call that happens to be an lvalue
13984 sub which returns one or more of the above, e.g.
13995 (so a sub call on the RHS should be treated the same
13996 as having a package var on the RHS).
13998 * any other "dangerous" thing, such an op or built-in that
13999 returns one of the above, e.g. pp_preinc
14002 If RHS is not safe, what we can do however is at compile time flag
14003 that the LHS are all my declarations, and at run time check whether
14004 all the LHS have RC == 1, and if so skip the full scan.
14006 Now consider array and hash vars on LHS: e.g. my (...,@a) = ...;
14008 Here the issue is whether there can be elements of @a on the RHS
14009 which will get prematurely freed when @a is cleared prior to
14010 assignment. This is only a problem if the aliasing mechanism
14011 is one which doesn't increase the refcount - only if RC == 1
14012 will the RHS element be prematurely freed.
14014 Because the array/hash is being INTROed, it or its elements
14015 can't directly appear on the RHS:
14017 my (@a) = ($a[0], @a, etc) # NOT POSSIBLE
14019 but can indirectly, e.g.:
14023 sub f { @a = 1..3; \@a }
14025 So if the RHS isn't safe as defined by (A), we must always
14026 mortalise and bump the ref count of any remaining RHS elements
14027 when assigning to a non-empty LHS aggregate.
14029 Lexical scalars on the RHS aren't safe if they've been involved in
14032 use feature 'refaliasing';
14035 \(my $lex) = \$pkg;
14036 my @a = ($lex,3); # equivalent to ($a[0],3)
14043 Similarly with lexical arrays and hashes on the RHS:
14057 C: As (B), but in addition the LHS may contain non-intro lexicals, e.g.
14058 my $a; ($a, my $b) = (....);
14060 The difference between (B) and (C) is that it is now physically
14061 possible for the LHS vars to appear on the RHS too, where they
14062 are not reference counted; but in this case, the compile-time
14063 PL_generation sweep will detect such common vars.
14065 So the rules for (C) differ from (B) in that if common vars are
14066 detected, the runtime "test RC==1" optimisation can no longer be used,
14067 and a full mark and sweep is required
14069 D: As (C), but in addition the LHS may contain package vars.
14071 Since package vars can be aliased without a corresponding refcount
14072 increase, all bets are off. It's only safe if (A). E.g.
14074 my ($x, $y) = (1,2);
14076 for $x_alias ($x) {
14077 ($x_alias, $y) = (3, $x); # whoops
14080 Ditto for LHS aggregate package vars.
14082 E: Any other dangerous ops on LHS, e.g.
14083 (f(), $a[0], @$r) = (...);
14085 this is similar to (E) in that all bets are off. In addition, it's
14086 impossible to determine at compile time whether the LHS
14087 contains a scalar or an aggregate, e.g.
14089 sub f : lvalue { @a }
14092 * ---------------------------------------------------------
14096 /* A set of bit flags returned by S_aassign_scan(). Each flag indicates
14097 * that at least one of the things flagged was seen.
14101 AAS_MY_SCALAR = 0x001, /* my $scalar */
14102 AAS_MY_AGG = 0x002, /* aggregate: my @array or my %hash */
14103 AAS_LEX_SCALAR = 0x004, /* $lexical */
14104 AAS_LEX_AGG = 0x008, /* @lexical or %lexical aggregate */
14105 AAS_LEX_SCALAR_COMM = 0x010, /* $lexical seen on both sides */
14106 AAS_PKG_SCALAR = 0x020, /* $scalar (where $scalar is pkg var) */
14107 AAS_PKG_AGG = 0x040, /* package @array or %hash aggregate */
14108 AAS_DANGEROUS = 0x080, /* an op (other than the above)
14109 that's flagged OA_DANGEROUS */
14110 AAS_SAFE_SCALAR = 0x100, /* produces at least one scalar SV that's
14111 not in any of the categories above */
14112 AAS_DEFAV = 0x200 /* contains just a single '@_' on RHS */
14117 /* helper function for S_aassign_scan().
14118 * check a PAD-related op for commonality and/or set its generation number.
14119 * Returns a boolean indicating whether its shared */
14122 S_aassign_padcheck(pTHX_ OP* o, bool rhs)
14124 if (PAD_COMPNAME_GEN(o->op_targ) == PERL_INT_MAX)
14125 /* lexical used in aliasing */
14129 return cBOOL(PAD_COMPNAME_GEN(o->op_targ) == (STRLEN)PL_generation);
14131 PAD_COMPNAME_GEN_set(o->op_targ, PL_generation);
14138 Helper function for OPpASSIGN_COMMON* detection in rpeep().
14139 It scans the left or right hand subtree of the aassign op, and returns a
14140 set of flags indicating what sorts of things it found there.
14141 'rhs' indicates whether we're scanning the LHS or RHS. If the former, we
14142 set PL_generation on lexical vars; if the latter, we see if
14143 PL_generation matches.
14144 'top' indicates whether we're recursing or at the top level.
14145 'scalars_p' is a pointer to a counter of the number of scalar SVs seen.
14146 This fn will increment it by the number seen. It's not intended to
14147 be an accurate count (especially as many ops can push a variable
14148 number of SVs onto the stack); rather it's used as to test whether there
14149 can be at most 1 SV pushed; so it's only meanings are "0, 1, many".
14153 S_aassign_scan(pTHX_ OP* o, bool rhs, bool top, int *scalars_p)
14156 bool kid_top = FALSE;
14158 /* first, look for a solitary @_ on the RHS */
14161 && (o->op_flags & OPf_KIDS)
14162 && OP_TYPE_IS_OR_WAS(o, OP_LIST)
14164 OP *kid = cUNOPo->op_first;
14165 if ( ( kid->op_type == OP_PUSHMARK
14166 || kid->op_type == OP_PADRANGE) /* ex-pushmark */
14167 && ((kid = OpSIBLING(kid)))
14168 && !OpHAS_SIBLING(kid)
14169 && kid->op_type == OP_RV2AV
14170 && !(kid->op_flags & OPf_REF)
14171 && !(kid->op_private & (OPpLVAL_INTRO|OPpMAYBE_LVSUB))
14172 && ((kid->op_flags & OPf_WANT) == OPf_WANT_LIST)
14173 && ((kid = cUNOPx(kid)->op_first))
14174 && kid->op_type == OP_GV
14175 && cGVOPx_gv(kid) == PL_defgv
14177 flags |= AAS_DEFAV;
14180 switch (o->op_type) {
14183 return AAS_PKG_SCALAR;
14188 /* if !top, could be e.g. @a[0,1] */
14189 if (top && (o->op_flags & OPf_REF))
14190 return (o->op_private & OPpLVAL_INTRO)
14191 ? AAS_MY_AGG : AAS_LEX_AGG;
14192 return AAS_DANGEROUS;
14196 int comm = S_aassign_padcheck(aTHX_ o, rhs)
14197 ? AAS_LEX_SCALAR_COMM : 0;
14199 return (o->op_private & OPpLVAL_INTRO)
14200 ? (AAS_MY_SCALAR|comm) : (AAS_LEX_SCALAR|comm);
14206 if (cUNOPx(o)->op_first->op_type != OP_GV)
14207 return AAS_DANGEROUS; /* @{expr}, %{expr} */
14209 /* if !top, could be e.g. @a[0,1] */
14210 if (top && (o->op_flags & OPf_REF))
14211 return AAS_PKG_AGG;
14212 return AAS_DANGEROUS;
14216 if (cUNOPx(o)->op_first->op_type != OP_GV) {
14218 return AAS_DANGEROUS; /* ${expr} */
14220 return AAS_PKG_SCALAR; /* $pkg */
14223 if (o->op_private & OPpSPLIT_ASSIGN) {
14224 /* the assign in @a = split() has been optimised away
14225 * and the @a attached directly to the split op
14226 * Treat the array as appearing on the RHS, i.e.
14227 * ... = (@a = split)
14232 if (o->op_flags & OPf_STACKED)
14233 /* @{expr} = split() - the array expression is tacked
14234 * on as an extra child to split - process kid */
14235 return S_aassign_scan(aTHX_ cLISTOPo->op_last, rhs,
14238 /* ... else array is directly attached to split op */
14240 if (PL_op->op_private & OPpSPLIT_LEX)
14241 return (o->op_private & OPpLVAL_INTRO)
14242 ? AAS_MY_AGG : AAS_LEX_AGG;
14244 return AAS_PKG_AGG;
14247 /* other args of split can't be returned */
14248 return AAS_SAFE_SCALAR;
14251 /* undef counts as a scalar on the RHS:
14252 * (undef, $x) = ...; # only 1 scalar on LHS: always safe
14253 * ($x, $y) = (undef, $x); # 2 scalars on RHS: unsafe
14257 flags = AAS_SAFE_SCALAR;
14262 /* these are all no-ops; they don't push a potentially common SV
14263 * onto the stack, so they are neither AAS_DANGEROUS nor
14264 * AAS_SAFE_SCALAR */
14267 case OP_PADRANGE: /* Ignore padrange; checking its siblings is enough */
14272 /* these do nothing but may have children; but their children
14273 * should also be treated as top-level */
14278 if (PL_opargs[o->op_type] & OA_DANGEROUS) {
14280 flags = AAS_DANGEROUS;
14284 if ( (PL_opargs[o->op_type] & OA_TARGLEX)
14285 && (o->op_private & OPpTARGET_MY))
14288 return S_aassign_padcheck(aTHX_ o, rhs)
14289 ? AAS_LEX_SCALAR_COMM : AAS_LEX_SCALAR;
14292 /* if its an unrecognised, non-dangerous op, assume that it
14293 * it the cause of at least one safe scalar */
14295 flags = AAS_SAFE_SCALAR;
14299 /* XXX this assumes that all other ops are "transparent" - i.e. that
14300 * they can return some of their children. While this true for e.g.
14301 * sort and grep, it's not true for e.g. map. We really need a
14302 * 'transparent' flag added to regen/opcodes
14304 if (o->op_flags & OPf_KIDS) {
14306 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
14307 flags |= S_aassign_scan(aTHX_ kid, rhs, kid_top, scalars_p);
14313 /* Check for in place reverse and sort assignments like "@a = reverse @a"
14314 and modify the optree to make them work inplace */
14317 S_inplace_aassign(pTHX_ OP *o) {
14319 OP *modop, *modop_pushmark;
14321 OP *oleft, *oleft_pushmark;
14323 PERL_ARGS_ASSERT_INPLACE_AASSIGN;
14325 assert((o->op_flags & OPf_WANT) == OPf_WANT_VOID);
14327 assert(cUNOPo->op_first->op_type == OP_NULL);
14328 modop_pushmark = cUNOPx(cUNOPo->op_first)->op_first;
14329 assert(modop_pushmark->op_type == OP_PUSHMARK);
14330 modop = OpSIBLING(modop_pushmark);
14332 if (modop->op_type != OP_SORT && modop->op_type != OP_REVERSE)
14335 /* no other operation except sort/reverse */
14336 if (OpHAS_SIBLING(modop))
14339 assert(cUNOPx(modop)->op_first->op_type == OP_PUSHMARK);
14340 if (!(oright = OpSIBLING(cUNOPx(modop)->op_first))) return;
14342 if (modop->op_flags & OPf_STACKED) {
14343 /* skip sort subroutine/block */
14344 assert(oright->op_type == OP_NULL);
14345 oright = OpSIBLING(oright);
14348 assert(OpSIBLING(cUNOPo->op_first)->op_type == OP_NULL);
14349 oleft_pushmark = cUNOPx(OpSIBLING(cUNOPo->op_first))->op_first;
14350 assert(oleft_pushmark->op_type == OP_PUSHMARK);
14351 oleft = OpSIBLING(oleft_pushmark);
14353 /* Check the lhs is an array */
14355 (oleft->op_type != OP_RV2AV && oleft->op_type != OP_PADAV)
14356 || OpHAS_SIBLING(oleft)
14357 || (oleft->op_private & OPpLVAL_INTRO)
14361 /* Only one thing on the rhs */
14362 if (OpHAS_SIBLING(oright))
14365 /* check the array is the same on both sides */
14366 if (oleft->op_type == OP_RV2AV) {
14367 if (oright->op_type != OP_RV2AV
14368 || !cUNOPx(oright)->op_first
14369 || cUNOPx(oright)->op_first->op_type != OP_GV
14370 || cUNOPx(oleft )->op_first->op_type != OP_GV
14371 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
14372 cGVOPx_gv(cUNOPx(oright)->op_first)
14376 else if (oright->op_type != OP_PADAV
14377 || oright->op_targ != oleft->op_targ
14381 /* This actually is an inplace assignment */
14383 modop->op_private |= OPpSORT_INPLACE;
14385 /* transfer MODishness etc from LHS arg to RHS arg */
14386 oright->op_flags = oleft->op_flags;
14388 /* remove the aassign op and the lhs */
14390 op_null(oleft_pushmark);
14391 if (oleft->op_type == OP_RV2AV && cUNOPx(oleft)->op_first)
14392 op_null(cUNOPx(oleft)->op_first);
14398 /* S_maybe_multideref(): given an op_next chain of ops beginning at 'start'
14399 * that potentially represent a series of one or more aggregate derefs
14400 * (such as $a->[1]{$key}), examine the chain, and if appropriate, convert
14401 * the whole chain to a single OP_MULTIDEREF op (maybe with a few
14402 * additional ops left in too).
14404 * The caller will have already verified that the first few ops in the
14405 * chain following 'start' indicate a multideref candidate, and will have
14406 * set 'orig_o' to the point further on in the chain where the first index
14407 * expression (if any) begins. 'orig_action' specifies what type of
14408 * beginning has already been determined by the ops between start..orig_o
14409 * (e.g. $lex_ary[], $pkg_ary->{}, expr->[], etc).
14411 * 'hints' contains any hints flags that need adding (currently just
14412 * OPpHINT_STRICT_REFS) as found in any rv2av/hv skipped by the caller.
14416 S_maybe_multideref(pTHX_ OP *start, OP *orig_o, UV orig_action, U8 hints)
14420 UNOP_AUX_item *arg_buf = NULL;
14421 bool reset_start_targ = FALSE; /* start->op_targ needs zeroing */
14422 int index_skip = -1; /* don't output index arg on this action */
14424 /* similar to regex compiling, do two passes; the first pass
14425 * determines whether the op chain is convertible and calculates the
14426 * buffer size; the second pass populates the buffer and makes any
14427 * changes necessary to ops (such as moving consts to the pad on
14428 * threaded builds).
14430 * NB: for things like Coverity, note that both passes take the same
14431 * path through the logic tree (except for 'if (pass)' bits), since
14432 * both passes are following the same op_next chain; and in
14433 * particular, if it would return early on the second pass, it would
14434 * already have returned early on the first pass.
14436 for (pass = 0; pass < 2; pass++) {
14438 UV action = orig_action;
14439 OP *first_elem_op = NULL; /* first seen aelem/helem */
14440 OP *top_op = NULL; /* highest [ah]elem/exists/del/rv2[ah]v */
14441 int action_count = 0; /* number of actions seen so far */
14442 int action_ix = 0; /* action_count % (actions per IV) */
14443 bool next_is_hash = FALSE; /* is the next lookup to be a hash? */
14444 bool is_last = FALSE; /* no more derefs to follow */
14445 bool maybe_aelemfast = FALSE; /* we can replace with aelemfast? */
14446 UNOP_AUX_item *arg = arg_buf;
14447 UNOP_AUX_item *action_ptr = arg_buf;
14450 action_ptr->uv = 0;
14454 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
14455 case MDEREF_HV_gvhv_helem:
14456 next_is_hash = TRUE;
14458 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
14459 case MDEREF_AV_gvav_aelem:
14461 #ifdef USE_ITHREADS
14462 arg->pad_offset = cPADOPx(start)->op_padix;
14463 /* stop it being swiped when nulled */
14464 cPADOPx(start)->op_padix = 0;
14466 arg->sv = cSVOPx(start)->op_sv;
14467 cSVOPx(start)->op_sv = NULL;
14473 case MDEREF_HV_padhv_helem:
14474 case MDEREF_HV_padsv_vivify_rv2hv_helem:
14475 next_is_hash = TRUE;
14477 case MDEREF_AV_padav_aelem:
14478 case MDEREF_AV_padsv_vivify_rv2av_aelem:
14480 arg->pad_offset = start->op_targ;
14481 /* we skip setting op_targ = 0 for now, since the intact
14482 * OP_PADXV is needed by S_check_hash_fields_and_hekify */
14483 reset_start_targ = TRUE;
14488 case MDEREF_HV_pop_rv2hv_helem:
14489 next_is_hash = TRUE;
14491 case MDEREF_AV_pop_rv2av_aelem:
14495 NOT_REACHED; /* NOTREACHED */
14500 /* look for another (rv2av/hv; get index;
14501 * aelem/helem/exists/delele) sequence */
14506 UV index_type = MDEREF_INDEX_none;
14508 if (action_count) {
14509 /* if this is not the first lookup, consume the rv2av/hv */
14511 /* for N levels of aggregate lookup, we normally expect
14512 * that the first N-1 [ah]elem ops will be flagged as
14513 * /DEREF (so they autovivifiy if necessary), and the last
14514 * lookup op not to be.
14515 * For other things (like @{$h{k1}{k2}}) extra scope or
14516 * leave ops can appear, so abandon the effort in that
14518 if (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
14521 /* rv2av or rv2hv sKR/1 */
14523 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
14524 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
14525 if (o->op_flags != (OPf_WANT_SCALAR|OPf_KIDS|OPf_REF))
14528 /* at this point, we wouldn't expect any of these
14529 * possible private flags:
14530 * OPpMAYBE_LVSUB, OPpOUR_INTRO, OPpLVAL_INTRO
14531 * OPpTRUEBOOL, OPpMAYBE_TRUEBOOL (rv2hv only)
14533 ASSUME(!(o->op_private &
14534 ~(OPpHINT_STRICT_REFS|OPpARG1_MASK|OPpSLICEWARNING)));
14536 hints = (o->op_private & OPpHINT_STRICT_REFS);
14538 /* make sure the type of the previous /DEREF matches the
14539 * type of the next lookup */
14540 ASSUME(o->op_type == (next_is_hash ? OP_RV2HV : OP_RV2AV));
14543 action = next_is_hash
14544 ? MDEREF_HV_vivify_rv2hv_helem
14545 : MDEREF_AV_vivify_rv2av_aelem;
14549 /* if this is the second pass, and we're at the depth where
14550 * previously we encountered a non-simple index expression,
14551 * stop processing the index at this point */
14552 if (action_count != index_skip) {
14554 /* look for one or more simple ops that return an array
14555 * index or hash key */
14557 switch (o->op_type) {
14559 /* it may be a lexical var index */
14560 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_PARENS
14561 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
14562 ASSUME(!(o->op_private &
14563 ~(OPpPAD_STATE|OPpDEREF|OPpLVAL_INTRO)));
14565 if ( OP_GIMME(o,0) == G_SCALAR
14566 && !(o->op_flags & (OPf_REF|OPf_MOD))
14567 && o->op_private == 0)
14570 arg->pad_offset = o->op_targ;
14572 index_type = MDEREF_INDEX_padsv;
14578 if (next_is_hash) {
14579 /* it's a constant hash index */
14580 if (!(SvFLAGS(cSVOPo_sv) & (SVf_IOK|SVf_NOK|SVf_POK)))
14581 /* "use constant foo => FOO; $h{+foo}" for
14582 * some weird FOO, can leave you with constants
14583 * that aren't simple strings. It's not worth
14584 * the extra hassle for those edge cases */
14589 OP * helem_op = o->op_next;
14591 ASSUME( helem_op->op_type == OP_HELEM
14592 || helem_op->op_type == OP_NULL);
14593 if (helem_op->op_type == OP_HELEM) {
14594 rop = (UNOP*)(((BINOP*)helem_op)->op_first);
14595 if ( helem_op->op_private & OPpLVAL_INTRO
14596 || rop->op_type != OP_RV2HV
14600 S_check_hash_fields_and_hekify(aTHX_ rop, cSVOPo);
14602 #ifdef USE_ITHREADS
14603 /* Relocate sv to the pad for thread safety */
14604 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
14605 arg->pad_offset = o->op_targ;
14608 arg->sv = cSVOPx_sv(o);
14613 /* it's a constant array index */
14615 SV *ix_sv = cSVOPo->op_sv;
14620 if ( action_count == 0
14623 && ( action == MDEREF_AV_padav_aelem
14624 || action == MDEREF_AV_gvav_aelem)
14626 maybe_aelemfast = TRUE;
14630 SvREFCNT_dec_NN(cSVOPo->op_sv);
14634 /* we've taken ownership of the SV */
14635 cSVOPo->op_sv = NULL;
14637 index_type = MDEREF_INDEX_const;
14642 /* it may be a package var index */
14644 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_PARENS|OPf_SPECIAL)));
14645 ASSUME(!(o->op_private & ~(OPpEARLY_CV)));
14646 if ( (o->op_flags & ~(OPf_PARENS|OPf_SPECIAL)) != OPf_WANT_SCALAR
14647 || o->op_private != 0
14652 if (kid->op_type != OP_RV2SV)
14655 ASSUME(!(kid->op_flags &
14656 ~(OPf_WANT|OPf_KIDS|OPf_MOD|OPf_REF
14657 |OPf_SPECIAL|OPf_PARENS)));
14658 ASSUME(!(kid->op_private &
14660 |OPpHINT_STRICT_REFS|OPpOUR_INTRO
14661 |OPpDEREF|OPpLVAL_INTRO)));
14662 if( (kid->op_flags &~ OPf_PARENS)
14663 != (OPf_WANT_SCALAR|OPf_KIDS)
14664 || (kid->op_private & ~(OPpARG1_MASK|HINT_STRICT_REFS))
14669 #ifdef USE_ITHREADS
14670 arg->pad_offset = cPADOPx(o)->op_padix;
14671 /* stop it being swiped when nulled */
14672 cPADOPx(o)->op_padix = 0;
14674 arg->sv = cSVOPx(o)->op_sv;
14675 cSVOPo->op_sv = NULL;
14679 index_type = MDEREF_INDEX_gvsv;
14684 } /* action_count != index_skip */
14686 action |= index_type;
14689 /* at this point we have either:
14690 * * detected what looks like a simple index expression,
14691 * and expect the next op to be an [ah]elem, or
14692 * an nulled [ah]elem followed by a delete or exists;
14693 * * found a more complex expression, so something other
14694 * than the above follows.
14697 /* possibly an optimised away [ah]elem (where op_next is
14698 * exists or delete) */
14699 if (o->op_type == OP_NULL)
14702 /* at this point we're looking for an OP_AELEM, OP_HELEM,
14703 * OP_EXISTS or OP_DELETE */
14705 /* if something like arybase (a.k.a $[ ) is in scope,
14706 * abandon optimisation attempt */
14707 if ( (o->op_type == OP_AELEM || o->op_type == OP_HELEM)
14708 && PL_check[o->op_type] != Perl_ck_null)
14710 /* similarly for customised exists and delete */
14711 if ( (o->op_type == OP_EXISTS)
14712 && PL_check[o->op_type] != Perl_ck_exists)
14714 if ( (o->op_type == OP_DELETE)
14715 && PL_check[o->op_type] != Perl_ck_delete)
14718 if ( o->op_type != OP_AELEM
14719 || (o->op_private &
14720 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB))
14722 maybe_aelemfast = FALSE;
14724 /* look for aelem/helem/exists/delete. If it's not the last elem
14725 * lookup, it *must* have OPpDEREF_AV/HV, but not many other
14726 * flags; if it's the last, then it mustn't have
14727 * OPpDEREF_AV/HV, but may have lots of other flags, like
14728 * OPpLVAL_INTRO etc
14731 if ( index_type == MDEREF_INDEX_none
14732 || ( o->op_type != OP_AELEM && o->op_type != OP_HELEM
14733 && o->op_type != OP_EXISTS && o->op_type != OP_DELETE)
14737 /* we have aelem/helem/exists/delete with valid simple index */
14739 is_deref = (o->op_type == OP_AELEM || o->op_type == OP_HELEM)
14740 && ( (o->op_private & OPpDEREF) == OPpDEREF_AV
14741 || (o->op_private & OPpDEREF) == OPpDEREF_HV);
14743 /* This doesn't make much sense but is legal:
14744 * @{ local $x[0][0] } = 1
14745 * Since scope exit will undo the autovivification,
14746 * don't bother in the first place. The OP_LEAVE
14747 * assertion is in case there are other cases of both
14748 * OPpLVAL_INTRO and OPpDEREF which don't include a scope
14749 * exit that would undo the local - in which case this
14750 * block of code would need rethinking.
14752 if (is_deref && (o->op_private & OPpLVAL_INTRO)) {
14754 OP *n = o->op_next;
14755 while (n && ( n->op_type == OP_NULL
14756 || n->op_type == OP_LIST))
14758 assert(n && n->op_type == OP_LEAVE);
14760 o->op_private &= ~OPpDEREF;
14765 ASSUME(!(o->op_flags &
14766 ~(OPf_WANT|OPf_KIDS|OPf_MOD|OPf_PARENS)));
14767 ASSUME(!(o->op_private & ~(OPpARG2_MASK|OPpDEREF)));
14769 ok = (o->op_flags &~ OPf_PARENS)
14770 == (OPf_WANT_SCALAR|OPf_KIDS|OPf_MOD)
14771 && !(o->op_private & ~(OPpDEREF|OPpARG2_MASK));
14773 else if (o->op_type == OP_EXISTS) {
14774 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
14775 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
14776 ASSUME(!(o->op_private & ~(OPpARG1_MASK|OPpEXISTS_SUB)));
14777 ok = !(o->op_private & ~OPpARG1_MASK);
14779 else if (o->op_type == OP_DELETE) {
14780 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
14781 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
14782 ASSUME(!(o->op_private &
14783 ~(OPpARG1_MASK|OPpSLICE|OPpLVAL_INTRO)));
14784 /* don't handle slices or 'local delete'; the latter
14785 * is fairly rare, and has a complex runtime */
14786 ok = !(o->op_private & ~OPpARG1_MASK);
14787 if (OP_TYPE_IS_OR_WAS(cUNOPo->op_first, OP_AELEM))
14788 /* skip handling run-tome error */
14789 ok = (ok && cBOOL(o->op_flags & OPf_SPECIAL));
14792 ASSUME(o->op_type == OP_AELEM || o->op_type == OP_HELEM);
14793 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_MOD
14794 |OPf_PARENS|OPf_REF|OPf_SPECIAL)));
14795 ASSUME(!(o->op_private & ~(OPpARG2_MASK|OPpMAYBE_LVSUB
14796 |OPpLVAL_DEFER|OPpDEREF|OPpLVAL_INTRO)));
14797 ok = (o->op_private & OPpDEREF) != OPpDEREF_SV;
14802 if (!first_elem_op)
14806 next_is_hash = cBOOL((o->op_private & OPpDEREF) == OPpDEREF_HV);
14811 action |= MDEREF_FLAG_last;
14815 /* at this point we have something that started
14816 * promisingly enough (with rv2av or whatever), but failed
14817 * to find a simple index followed by an
14818 * aelem/helem/exists/delete. If this is the first action,
14819 * give up; but if we've already seen at least one
14820 * aelem/helem, then keep them and add a new action with
14821 * MDEREF_INDEX_none, which causes it to do the vivify
14822 * from the end of the previous lookup, and do the deref,
14823 * but stop at that point. So $a[0][expr] will do one
14824 * av_fetch, vivify and deref, then continue executing at
14829 index_skip = action_count;
14830 action |= MDEREF_FLAG_last;
14831 if (index_type != MDEREF_INDEX_none)
14836 action_ptr->uv |= (action << (action_ix * MDEREF_SHIFT));
14839 /* if there's no space for the next action, create a new slot
14840 * for it *before* we start adding args for that action */
14841 if ((action_ix + 1) * MDEREF_SHIFT > UVSIZE*8) {
14848 } /* while !is_last */
14856 mderef = newUNOP_AUX(OP_MULTIDEREF, 0, NULL, arg_buf);
14857 if (index_skip == -1) {
14858 mderef->op_flags = o->op_flags
14859 & (OPf_WANT|OPf_MOD|(next_is_hash ? OPf_SPECIAL : 0));
14860 if (o->op_type == OP_EXISTS)
14861 mderef->op_private = OPpMULTIDEREF_EXISTS;
14862 else if (o->op_type == OP_DELETE)
14863 mderef->op_private = OPpMULTIDEREF_DELETE;
14865 mderef->op_private = o->op_private
14866 & (OPpMAYBE_LVSUB|OPpLVAL_DEFER|OPpLVAL_INTRO);
14868 /* accumulate strictness from every level (although I don't think
14869 * they can actually vary) */
14870 mderef->op_private |= hints;
14872 /* integrate the new multideref op into the optree and the
14875 * In general an op like aelem or helem has two child
14876 * sub-trees: the aggregate expression (a_expr) and the
14877 * index expression (i_expr):
14883 * The a_expr returns an AV or HV, while the i-expr returns an
14884 * index. In general a multideref replaces most or all of a
14885 * multi-level tree, e.g.
14901 * With multideref, all the i_exprs will be simple vars or
14902 * constants, except that i_expr1 may be arbitrary in the case
14903 * of MDEREF_INDEX_none.
14905 * The bottom-most a_expr will be either:
14906 * 1) a simple var (so padXv or gv+rv2Xv);
14907 * 2) a simple scalar var dereferenced (e.g. $r->[0]):
14908 * so a simple var with an extra rv2Xv;
14909 * 3) or an arbitrary expression.
14911 * 'start', the first op in the execution chain, will point to
14912 * 1),2): the padXv or gv op;
14913 * 3): the rv2Xv which forms the last op in the a_expr
14914 * execution chain, and the top-most op in the a_expr
14917 * For all cases, the 'start' node is no longer required,
14918 * but we can't free it since one or more external nodes
14919 * may point to it. E.g. consider
14920 * $h{foo} = $a ? $b : $c
14921 * Here, both the op_next and op_other branches of the
14922 * cond_expr point to the gv[*h] of the hash expression, so
14923 * we can't free the 'start' op.
14925 * For expr->[...], we need to save the subtree containing the
14926 * expression; for the other cases, we just need to save the
14928 * So in all cases, we null the start op and keep it around by
14929 * making it the child of the multideref op; for the expr->
14930 * case, the expr will be a subtree of the start node.
14932 * So in the simple 1,2 case the optree above changes to
14938 * ex-gv (or ex-padxv)
14940 * with the op_next chain being
14942 * -> ex-gv -> multideref -> op-following-ex-exists ->
14944 * In the 3 case, we have
14957 * -> rest-of-a_expr subtree ->
14958 * ex-rv2xv -> multideref -> op-following-ex-exists ->
14961 * Where the last i_expr is non-simple (i.e. MDEREF_INDEX_none,
14962 * e.g. $a[0]{foo}[$x+1], the next rv2xv is nulled and the
14963 * multideref attached as the child, e.g.
14969 * ex-rv2av - i_expr1
14977 /* if we free this op, don't free the pad entry */
14978 if (reset_start_targ)
14979 start->op_targ = 0;
14982 /* Cut the bit we need to save out of the tree and attach to
14983 * the multideref op, then free the rest of the tree */
14985 /* find parent of node to be detached (for use by splice) */
14987 if ( orig_action == MDEREF_AV_pop_rv2av_aelem
14988 || orig_action == MDEREF_HV_pop_rv2hv_helem)
14990 /* there is an arbitrary expression preceding us, e.g.
14991 * expr->[..]? so we need to save the 'expr' subtree */
14992 if (p->op_type == OP_EXISTS || p->op_type == OP_DELETE)
14993 p = cUNOPx(p)->op_first;
14994 ASSUME( start->op_type == OP_RV2AV
14995 || start->op_type == OP_RV2HV);
14998 /* either a padXv or rv2Xv+gv, maybe with an ex-Xelem
14999 * above for exists/delete. */
15000 while ( (p->op_flags & OPf_KIDS)
15001 && cUNOPx(p)->op_first != start
15003 p = cUNOPx(p)->op_first;
15005 ASSUME(cUNOPx(p)->op_first == start);
15007 /* detach from main tree, and re-attach under the multideref */
15008 op_sibling_splice(mderef, NULL, 0,
15009 op_sibling_splice(p, NULL, 1, NULL));
15012 start->op_next = mderef;
15014 mderef->op_next = index_skip == -1 ? o->op_next : o;
15016 /* excise and free the original tree, and replace with
15017 * the multideref op */
15018 p = op_sibling_splice(top_op, NULL, -1, mderef);
15027 Size_t size = arg - arg_buf;
15029 if (maybe_aelemfast && action_count == 1)
15032 arg_buf = (UNOP_AUX_item*)PerlMemShared_malloc(
15033 sizeof(UNOP_AUX_item) * (size + 1));
15034 /* for dumping etc: store the length in a hidden first slot;
15035 * we set the op_aux pointer to the second slot */
15036 arg_buf->uv = size;
15039 } /* for (pass = ...) */
15042 /* See if the ops following o are such that o will always be executed in
15043 * boolean context: that is, the SV which o pushes onto the stack will
15044 * only ever be consumed by later ops via SvTRUE(sv) or similar.
15045 * If so, set a suitable private flag on o. Normally this will be
15046 * bool_flag; but see below why maybe_flag is needed too.
15048 * Typically the two flags you pass will be the generic OPpTRUEBOOL and
15049 * OPpMAYBE_TRUEBOOL, buts it's possible that for some ops those bits may
15050 * already be taken, so you'll have to give that op two different flags.
15052 * More explanation of 'maybe_flag' and 'safe_and' parameters.
15053 * The binary logical ops &&, ||, // (plus 'if' and 'unless' which use
15054 * those underlying ops) short-circuit, which means that rather than
15055 * necessarily returning a truth value, they may return the LH argument,
15056 * which may not be boolean. For example in $x = (keys %h || -1), keys
15057 * should return a key count rather than a boolean, even though its
15058 * sort-of being used in boolean context.
15060 * So we only consider such logical ops to provide boolean context to
15061 * their LH argument if they themselves are in void or boolean context.
15062 * However, sometimes the context isn't known until run-time. In this
15063 * case the op is marked with the maybe_flag flag it.
15065 * Consider the following.
15067 * sub f { ....; if (%h) { .... } }
15069 * This is actually compiled as
15071 * sub f { ....; %h && do { .... } }
15073 * Here we won't know until runtime whether the final statement (and hence
15074 * the &&) is in void context and so is safe to return a boolean value.
15075 * So mark o with maybe_flag rather than the bool_flag.
15076 * Note that there is cost associated with determining context at runtime
15077 * (e.g. a call to block_gimme()), so it may not be worth setting (at
15078 * compile time) and testing (at runtime) maybe_flag if the scalar verses
15079 * boolean costs savings are marginal.
15081 * However, we can do slightly better with && (compared to || and //):
15082 * this op only returns its LH argument when that argument is false. In
15083 * this case, as long as the op promises to return a false value which is
15084 * valid in both boolean and scalar contexts, we can mark an op consumed
15085 * by && with bool_flag rather than maybe_flag.
15086 * For example as long as pp_padhv and pp_rv2hv return &PL_sv_zero rather
15087 * than &PL_sv_no for a false result in boolean context, then it's safe. An
15088 * op which promises to handle this case is indicated by setting safe_and
15093 S_check_for_bool_cxt(OP*o, bool safe_and, U8 bool_flag, U8 maybe_flag)
15098 assert((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR);
15100 /* OPpTARGET_MY and boolean context probably don't mix well.
15101 * If someone finds a valid use case, maybe add an extra flag to this
15102 * function which indicates its safe to do so for this op? */
15103 assert(!( (PL_opargs[o->op_type] & OA_TARGLEX)
15104 && (o->op_private & OPpTARGET_MY)));
15109 switch (lop->op_type) {
15114 /* these two consume the stack argument in the scalar case,
15115 * and treat it as a boolean in the non linenumber case */
15118 if ( ((lop->op_flags & OPf_WANT) == OPf_WANT_LIST)
15119 || (lop->op_private & OPpFLIP_LINENUM))
15125 /* these never leave the original value on the stack */
15134 /* OR DOR and AND evaluate their arg as a boolean, but then may
15135 * leave the original scalar value on the stack when following the
15136 * op_next route. If not in void context, we need to ensure
15137 * that whatever follows consumes the arg only in boolean context
15149 if ((lop->op_flags & OPf_WANT) == OPf_WANT_VOID) {
15153 else if (!(lop->op_flags & OPf_WANT)) {
15154 /* unknown context - decide at runtime */
15166 lop = lop->op_next;
15169 o->op_private |= flag;
15174 /* mechanism for deferring recursion in rpeep() */
15176 #define MAX_DEFERRED 4
15180 if (defer_ix == (MAX_DEFERRED-1)) { \
15181 OP **defer = defer_queue[defer_base]; \
15182 CALL_RPEEP(*defer); \
15183 S_prune_chain_head(defer); \
15184 defer_base = (defer_base + 1) % MAX_DEFERRED; \
15187 defer_queue[(defer_base + ++defer_ix) % MAX_DEFERRED] = &(o); \
15190 #define IS_AND_OP(o) (o->op_type == OP_AND)
15191 #define IS_OR_OP(o) (o->op_type == OP_OR)
15194 /* A peephole optimizer. We visit the ops in the order they're to execute.
15195 * See the comments at the top of this file for more details about when
15196 * peep() is called */
15199 Perl_rpeep(pTHX_ OP *o)
15203 OP* oldoldop = NULL;
15204 OP** defer_queue[MAX_DEFERRED]; /* small queue of deferred branches */
15205 int defer_base = 0;
15208 if (!o || o->op_opt)
15211 assert(o->op_type != OP_FREED);
15215 SAVEVPTR(PL_curcop);
15216 for (;; o = o->op_next) {
15217 if (o && o->op_opt)
15220 while (defer_ix >= 0) {
15222 defer_queue[(defer_base + defer_ix--) % MAX_DEFERRED];
15223 CALL_RPEEP(*defer);
15224 S_prune_chain_head(defer);
15231 /* oldoldop -> oldop -> o should be a chain of 3 adjacent ops */
15232 assert(!oldoldop || oldoldop->op_next == oldop);
15233 assert(!oldop || oldop->op_next == o);
15235 /* By default, this op has now been optimised. A couple of cases below
15236 clear this again. */
15240 /* look for a series of 1 or more aggregate derefs, e.g.
15241 * $a[1]{foo}[$i]{$k}
15242 * and replace with a single OP_MULTIDEREF op.
15243 * Each index must be either a const, or a simple variable,
15245 * First, look for likely combinations of starting ops,
15246 * corresponding to (global and lexical variants of)
15248 * $r->[...] $r->{...}
15249 * (preceding expression)->[...]
15250 * (preceding expression)->{...}
15251 * and if so, call maybe_multideref() to do a full inspection
15252 * of the op chain and if appropriate, replace with an
15260 switch (o2->op_type) {
15262 /* $pkg[..] : gv[*pkg]
15263 * $pkg->[...]: gv[*pkg]; rv2sv sKM/DREFAV */
15265 /* Fail if there are new op flag combinations that we're
15266 * not aware of, rather than:
15267 * * silently failing to optimise, or
15268 * * silently optimising the flag away.
15269 * If this ASSUME starts failing, examine what new flag
15270 * has been added to the op, and decide whether the
15271 * optimisation should still occur with that flag, then
15272 * update the code accordingly. This applies to all the
15273 * other ASSUMEs in the block of code too.
15275 ASSUME(!(o2->op_flags &
15276 ~(OPf_WANT|OPf_MOD|OPf_PARENS|OPf_SPECIAL)));
15277 ASSUME(!(o2->op_private & ~OPpEARLY_CV));
15281 if (o2->op_type == OP_RV2AV) {
15282 action = MDEREF_AV_gvav_aelem;
15286 if (o2->op_type == OP_RV2HV) {
15287 action = MDEREF_HV_gvhv_helem;
15291 if (o2->op_type != OP_RV2SV)
15294 /* at this point we've seen gv,rv2sv, so the only valid
15295 * construct left is $pkg->[] or $pkg->{} */
15297 ASSUME(!(o2->op_flags & OPf_STACKED));
15298 if ((o2->op_flags & (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL))
15299 != (OPf_WANT_SCALAR|OPf_MOD))
15302 ASSUME(!(o2->op_private & ~(OPpARG1_MASK|HINT_STRICT_REFS
15303 |OPpOUR_INTRO|OPpDEREF|OPpLVAL_INTRO)));
15304 if (o2->op_private & (OPpOUR_INTRO|OPpLVAL_INTRO))
15306 if ( (o2->op_private & OPpDEREF) != OPpDEREF_AV
15307 && (o2->op_private & OPpDEREF) != OPpDEREF_HV)
15311 if (o2->op_type == OP_RV2AV) {
15312 action = MDEREF_AV_gvsv_vivify_rv2av_aelem;
15315 if (o2->op_type == OP_RV2HV) {
15316 action = MDEREF_HV_gvsv_vivify_rv2hv_helem;
15322 /* $lex->[...]: padsv[$lex] sM/DREFAV */
15324 ASSUME(!(o2->op_flags &
15325 ~(OPf_WANT|OPf_PARENS|OPf_REF|OPf_MOD|OPf_SPECIAL)));
15326 if ((o2->op_flags &
15327 (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL))
15328 != (OPf_WANT_SCALAR|OPf_MOD))
15331 ASSUME(!(o2->op_private &
15332 ~(OPpPAD_STATE|OPpDEREF|OPpLVAL_INTRO)));
15333 /* skip if state or intro, or not a deref */
15334 if ( o2->op_private != OPpDEREF_AV
15335 && o2->op_private != OPpDEREF_HV)
15339 if (o2->op_type == OP_RV2AV) {
15340 action = MDEREF_AV_padsv_vivify_rv2av_aelem;
15343 if (o2->op_type == OP_RV2HV) {
15344 action = MDEREF_HV_padsv_vivify_rv2hv_helem;
15351 /* $lex[..]: padav[@lex:1,2] sR *
15352 * or $lex{..}: padhv[%lex:1,2] sR */
15353 ASSUME(!(o2->op_flags & ~(OPf_WANT|OPf_MOD|OPf_PARENS|
15354 OPf_REF|OPf_SPECIAL)));
15355 if ((o2->op_flags &
15356 (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL))
15357 != (OPf_WANT_SCALAR|OPf_REF))
15359 if (o2->op_flags != (OPf_WANT_SCALAR|OPf_REF))
15361 /* OPf_PARENS isn't currently used in this case;
15362 * if that changes, let us know! */
15363 ASSUME(!(o2->op_flags & OPf_PARENS));
15365 /* at this point, we wouldn't expect any of the remaining
15366 * possible private flags:
15367 * OPpPAD_STATE, OPpLVAL_INTRO, OPpTRUEBOOL,
15368 * OPpMAYBE_TRUEBOOL, OPpMAYBE_LVSUB
15370 * OPpSLICEWARNING shouldn't affect runtime
15372 ASSUME(!(o2->op_private & ~(OPpSLICEWARNING)));
15374 action = o2->op_type == OP_PADAV
15375 ? MDEREF_AV_padav_aelem
15376 : MDEREF_HV_padhv_helem;
15378 S_maybe_multideref(aTHX_ o, o2, action, 0);
15384 action = o2->op_type == OP_RV2AV
15385 ? MDEREF_AV_pop_rv2av_aelem
15386 : MDEREF_HV_pop_rv2hv_helem;
15389 /* (expr)->[...]: rv2av sKR/1;
15390 * (expr)->{...}: rv2hv sKR/1; */
15392 ASSUME(o2->op_type == OP_RV2AV || o2->op_type == OP_RV2HV);
15394 ASSUME(!(o2->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
15395 |OPf_REF|OPf_MOD|OPf_STACKED|OPf_SPECIAL)));
15396 if (o2->op_flags != (OPf_WANT_SCALAR|OPf_KIDS|OPf_REF))
15399 /* at this point, we wouldn't expect any of these
15400 * possible private flags:
15401 * OPpMAYBE_LVSUB, OPpLVAL_INTRO
15402 * OPpTRUEBOOL, OPpMAYBE_TRUEBOOL, (rv2hv only)
15404 ASSUME(!(o2->op_private &
15405 ~(OPpHINT_STRICT_REFS|OPpARG1_MASK|OPpSLICEWARNING
15407 hints |= (o2->op_private & OPpHINT_STRICT_REFS);
15411 S_maybe_multideref(aTHX_ o, o2, action, hints);
15420 switch (o->op_type) {
15422 PL_curcop = ((COP*)o); /* for warnings */
15425 PL_curcop = ((COP*)o); /* for warnings */
15427 /* Optimise a "return ..." at the end of a sub to just be "...".
15428 * This saves 2 ops. Before:
15429 * 1 <;> nextstate(main 1 -e:1) v ->2
15430 * 4 <@> return K ->5
15431 * 2 <0> pushmark s ->3
15432 * - <1> ex-rv2sv sK/1 ->4
15433 * 3 <#> gvsv[*cat] s ->4
15436 * - <@> return K ->-
15437 * - <0> pushmark s ->2
15438 * - <1> ex-rv2sv sK/1 ->-
15439 * 2 <$> gvsv(*cat) s ->3
15442 OP *next = o->op_next;
15443 OP *sibling = OpSIBLING(o);
15444 if ( OP_TYPE_IS(next, OP_PUSHMARK)
15445 && OP_TYPE_IS(sibling, OP_RETURN)
15446 && OP_TYPE_IS(sibling->op_next, OP_LINESEQ)
15447 && ( OP_TYPE_IS(sibling->op_next->op_next, OP_LEAVESUB)
15448 ||OP_TYPE_IS(sibling->op_next->op_next,
15450 && cUNOPx(sibling)->op_first == next
15451 && OpHAS_SIBLING(next) && OpSIBLING(next)->op_next
15454 /* Look through the PUSHMARK's siblings for one that
15455 * points to the RETURN */
15456 OP *top = OpSIBLING(next);
15457 while (top && top->op_next) {
15458 if (top->op_next == sibling) {
15459 top->op_next = sibling->op_next;
15460 o->op_next = next->op_next;
15463 top = OpSIBLING(top);
15468 /* Optimise 'my $x; my $y;' into 'my ($x, $y);'
15470 * This latter form is then suitable for conversion into padrange
15471 * later on. Convert:
15473 * nextstate1 -> padop1 -> nextstate2 -> padop2 -> nextstate3
15477 * nextstate1 -> listop -> nextstate3
15479 * pushmark -> padop1 -> padop2
15481 if (o->op_next && (
15482 o->op_next->op_type == OP_PADSV
15483 || o->op_next->op_type == OP_PADAV
15484 || o->op_next->op_type == OP_PADHV
15486 && !(o->op_next->op_private & ~OPpLVAL_INTRO)
15487 && o->op_next->op_next && o->op_next->op_next->op_type == OP_NEXTSTATE
15488 && o->op_next->op_next->op_next && (
15489 o->op_next->op_next->op_next->op_type == OP_PADSV
15490 || o->op_next->op_next->op_next->op_type == OP_PADAV
15491 || o->op_next->op_next->op_next->op_type == OP_PADHV
15493 && !(o->op_next->op_next->op_next->op_private & ~OPpLVAL_INTRO)
15494 && o->op_next->op_next->op_next->op_next && o->op_next->op_next->op_next->op_next->op_type == OP_NEXTSTATE
15495 && (!CopLABEL((COP*)o)) /* Don't mess with labels */
15496 && (!CopLABEL((COP*)o->op_next->op_next)) /* ... */
15498 OP *pad1, *ns2, *pad2, *ns3, *newop, *newpm;
15501 ns2 = pad1->op_next;
15502 pad2 = ns2->op_next;
15503 ns3 = pad2->op_next;
15505 /* we assume here that the op_next chain is the same as
15506 * the op_sibling chain */
15507 assert(OpSIBLING(o) == pad1);
15508 assert(OpSIBLING(pad1) == ns2);
15509 assert(OpSIBLING(ns2) == pad2);
15510 assert(OpSIBLING(pad2) == ns3);
15512 /* excise and delete ns2 */
15513 op_sibling_splice(NULL, pad1, 1, NULL);
15516 /* excise pad1 and pad2 */
15517 op_sibling_splice(NULL, o, 2, NULL);
15519 /* create new listop, with children consisting of:
15520 * a new pushmark, pad1, pad2. */
15521 newop = newLISTOP(OP_LIST, 0, pad1, pad2);
15522 newop->op_flags |= OPf_PARENS;
15523 newop->op_flags = (newop->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
15525 /* insert newop between o and ns3 */
15526 op_sibling_splice(NULL, o, 0, newop);
15528 /*fixup op_next chain */
15529 newpm = cUNOPx(newop)->op_first; /* pushmark */
15530 o ->op_next = newpm;
15531 newpm->op_next = pad1;
15532 pad1 ->op_next = pad2;
15533 pad2 ->op_next = newop; /* listop */
15534 newop->op_next = ns3;
15536 /* Ensure pushmark has this flag if padops do */
15537 if (pad1->op_flags & OPf_MOD && pad2->op_flags & OPf_MOD) {
15538 newpm->op_flags |= OPf_MOD;
15544 /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
15545 to carry two labels. For now, take the easier option, and skip
15546 this optimisation if the first NEXTSTATE has a label. */
15547 if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) {
15548 OP *nextop = o->op_next;
15549 while (nextop && nextop->op_type == OP_NULL)
15550 nextop = nextop->op_next;
15552 if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
15555 oldop->op_next = nextop;
15557 /* Skip (old)oldop assignment since the current oldop's
15558 op_next already points to the next op. */
15565 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
15566 if (o->op_next->op_private & OPpTARGET_MY) {
15567 if (o->op_flags & OPf_STACKED) /* chained concats */
15568 break; /* ignore_optimization */
15570 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
15571 o->op_targ = o->op_next->op_targ;
15572 o->op_next->op_targ = 0;
15573 o->op_private |= OPpTARGET_MY;
15576 op_null(o->op_next);
15580 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
15581 break; /* Scalar stub must produce undef. List stub is noop */
15585 if (o->op_targ == OP_NEXTSTATE
15586 || o->op_targ == OP_DBSTATE)
15588 PL_curcop = ((COP*)o);
15590 /* XXX: We avoid setting op_seq here to prevent later calls
15591 to rpeep() from mistakenly concluding that optimisation
15592 has already occurred. This doesn't fix the real problem,
15593 though (See 20010220.007 (#5874)). AMS 20010719 */
15594 /* op_seq functionality is now replaced by op_opt */
15602 oldop->op_next = o->op_next;
15616 convert repeat into a stub with no kids.
15618 if (o->op_next->op_type == OP_CONST
15619 || ( o->op_next->op_type == OP_PADSV
15620 && !(o->op_next->op_private & OPpLVAL_INTRO))
15621 || ( o->op_next->op_type == OP_GV
15622 && o->op_next->op_next->op_type == OP_RV2SV
15623 && !(o->op_next->op_next->op_private
15624 & (OPpLVAL_INTRO|OPpOUR_INTRO))))
15626 const OP *kid = o->op_next->op_next;
15627 if (o->op_next->op_type == OP_GV)
15628 kid = kid->op_next;
15629 /* kid is now the ex-list. */
15630 if (kid->op_type == OP_NULL
15631 && (kid = kid->op_next)->op_type == OP_CONST
15632 /* kid is now the repeat count. */
15633 && kid->op_next->op_type == OP_REPEAT
15634 && kid->op_next->op_private & OPpREPEAT_DOLIST
15635 && (kid->op_next->op_flags & OPf_WANT) == OPf_WANT_LIST
15636 && SvIOK(kSVOP_sv) && SvIVX(kSVOP_sv) == 0
15639 o = kid->op_next; /* repeat */
15640 oldop->op_next = o;
15641 op_free(cBINOPo->op_first);
15642 op_free(cBINOPo->op_last );
15643 o->op_flags &=~ OPf_KIDS;
15644 /* stub is a baseop; repeat is a binop */
15645 STATIC_ASSERT_STMT(sizeof(OP) <= sizeof(BINOP));
15646 OpTYPE_set(o, OP_STUB);
15652 /* Convert a series of PAD ops for my vars plus support into a
15653 * single padrange op. Basically
15655 * pushmark -> pad[ahs]v -> pad[ahs]?v -> ... -> (list) -> rest
15657 * becomes, depending on circumstances, one of
15659 * padrange ----------------------------------> (list) -> rest
15660 * padrange --------------------------------------------> rest
15662 * where all the pad indexes are sequential and of the same type
15664 * We convert the pushmark into a padrange op, then skip
15665 * any other pad ops, and possibly some trailing ops.
15666 * Note that we don't null() the skipped ops, to make it
15667 * easier for Deparse to undo this optimisation (and none of
15668 * the skipped ops are holding any resourses). It also makes
15669 * it easier for find_uninit_var(), as it can just ignore
15670 * padrange, and examine the original pad ops.
15674 OP *followop = NULL; /* the op that will follow the padrange op */
15677 PADOFFSET base = 0; /* init only to stop compiler whining */
15678 bool gvoid = 0; /* init only to stop compiler whining */
15679 bool defav = 0; /* seen (...) = @_ */
15680 bool reuse = 0; /* reuse an existing padrange op */
15682 /* look for a pushmark -> gv[_] -> rv2av */
15687 if ( p->op_type == OP_GV
15688 && cGVOPx_gv(p) == PL_defgv
15689 && (rv2av = p->op_next)
15690 && rv2av->op_type == OP_RV2AV
15691 && !(rv2av->op_flags & OPf_REF)
15692 && !(rv2av->op_private & (OPpLVAL_INTRO|OPpMAYBE_LVSUB))
15693 && ((rv2av->op_flags & OPf_WANT) == OPf_WANT_LIST)
15695 q = rv2av->op_next;
15696 if (q->op_type == OP_NULL)
15698 if (q->op_type == OP_PUSHMARK) {
15708 /* scan for PAD ops */
15710 for (p = p->op_next; p; p = p->op_next) {
15711 if (p->op_type == OP_NULL)
15714 if (( p->op_type != OP_PADSV
15715 && p->op_type != OP_PADAV
15716 && p->op_type != OP_PADHV
15718 /* any private flag other than INTRO? e.g. STATE */
15719 || (p->op_private & ~OPpLVAL_INTRO)
15723 /* let $a[N] potentially be optimised into AELEMFAST_LEX
15725 if ( p->op_type == OP_PADAV
15727 && p->op_next->op_type == OP_CONST
15728 && p->op_next->op_next
15729 && p->op_next->op_next->op_type == OP_AELEM
15733 /* for 1st padop, note what type it is and the range
15734 * start; for the others, check that it's the same type
15735 * and that the targs are contiguous */
15737 intro = (p->op_private & OPpLVAL_INTRO);
15739 gvoid = OP_GIMME(p,0) == G_VOID;
15742 if ((p->op_private & OPpLVAL_INTRO) != intro)
15744 /* Note that you'd normally expect targs to be
15745 * contiguous in my($a,$b,$c), but that's not the case
15746 * when external modules start doing things, e.g.
15747 * Function::Parameters */
15748 if (p->op_targ != base + count)
15750 assert(p->op_targ == base + count);
15751 /* Either all the padops or none of the padops should
15752 be in void context. Since we only do the optimisa-
15753 tion for av/hv when the aggregate itself is pushed
15754 on to the stack (one item), there is no need to dis-
15755 tinguish list from scalar context. */
15756 if (gvoid != (OP_GIMME(p,0) == G_VOID))
15760 /* for AV, HV, only when we're not flattening */
15761 if ( p->op_type != OP_PADSV
15763 && !(p->op_flags & OPf_REF)
15767 if (count >= OPpPADRANGE_COUNTMASK)
15770 /* there's a biggest base we can fit into a
15771 * SAVEt_CLEARPADRANGE in pp_padrange.
15772 * (The sizeof() stuff will be constant-folded, and is
15773 * intended to avoid getting "comparison is always false"
15774 * compiler warnings. See the comments above
15775 * MEM_WRAP_CHECK for more explanation on why we do this
15776 * in a weird way to avoid compiler warnings.)
15779 && (8*sizeof(base) >
15780 8*sizeof(UV)-OPpPADRANGE_COUNTSHIFT-SAVE_TIGHT_SHIFT
15782 : (UV_MAX >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT))
15784 (UV_MAX >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT))
15788 /* Success! We've got another valid pad op to optimise away */
15790 followop = p->op_next;
15793 if (count < 1 || (count == 1 && !defav))
15796 /* pp_padrange in specifically compile-time void context
15797 * skips pushing a mark and lexicals; in all other contexts
15798 * (including unknown till runtime) it pushes a mark and the
15799 * lexicals. We must be very careful then, that the ops we
15800 * optimise away would have exactly the same effect as the
15802 * In particular in void context, we can only optimise to
15803 * a padrange if we see the complete sequence
15804 * pushmark, pad*v, ...., list
15805 * which has the net effect of leaving the markstack as it
15806 * was. Not pushing onto the stack (whereas padsv does touch
15807 * the stack) makes no difference in void context.
15811 if (followop->op_type == OP_LIST
15812 && OP_GIMME(followop,0) == G_VOID
15815 followop = followop->op_next; /* skip OP_LIST */
15817 /* consolidate two successive my(...);'s */
15820 && oldoldop->op_type == OP_PADRANGE
15821 && (oldoldop->op_flags & OPf_WANT) == OPf_WANT_VOID
15822 && (oldoldop->op_private & OPpLVAL_INTRO) == intro
15823 && !(oldoldop->op_flags & OPf_SPECIAL)
15826 assert(oldoldop->op_next == oldop);
15827 assert( oldop->op_type == OP_NEXTSTATE
15828 || oldop->op_type == OP_DBSTATE);
15829 assert(oldop->op_next == o);
15832 = (oldoldop->op_private & OPpPADRANGE_COUNTMASK);
15834 /* Do not assume pad offsets for $c and $d are con-
15839 if ( oldoldop->op_targ + old_count == base
15840 && old_count < OPpPADRANGE_COUNTMASK - count) {
15841 base = oldoldop->op_targ;
15842 count += old_count;
15847 /* if there's any immediately following singleton
15848 * my var's; then swallow them and the associated
15850 * my ($a,$b); my $c; my $d;
15852 * my ($a,$b,$c,$d);
15855 while ( ((p = followop->op_next))
15856 && ( p->op_type == OP_PADSV
15857 || p->op_type == OP_PADAV
15858 || p->op_type == OP_PADHV)
15859 && (p->op_flags & OPf_WANT) == OPf_WANT_VOID
15860 && (p->op_private & OPpLVAL_INTRO) == intro
15861 && !(p->op_private & ~OPpLVAL_INTRO)
15863 && ( p->op_next->op_type == OP_NEXTSTATE
15864 || p->op_next->op_type == OP_DBSTATE)
15865 && count < OPpPADRANGE_COUNTMASK
15866 && base + count == p->op_targ
15869 followop = p->op_next;
15877 assert(oldoldop->op_type == OP_PADRANGE);
15878 oldoldop->op_next = followop;
15879 oldoldop->op_private = (intro | count);
15885 /* Convert the pushmark into a padrange.
15886 * To make Deparse easier, we guarantee that a padrange was
15887 * *always* formerly a pushmark */
15888 assert(o->op_type == OP_PUSHMARK);
15889 o->op_next = followop;
15890 OpTYPE_set(o, OP_PADRANGE);
15892 /* bit 7: INTRO; bit 6..0: count */
15893 o->op_private = (intro | count);
15894 o->op_flags = ((o->op_flags & ~(OPf_WANT|OPf_SPECIAL))
15895 | gvoid * OPf_WANT_VOID
15896 | (defav ? OPf_SPECIAL : 0));
15902 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
15903 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0);
15908 /*'keys %h' in void or scalar context: skip the OP_KEYS
15909 * and perform the functionality directly in the RV2HV/PADHV
15912 if (o->op_flags & OPf_REF) {
15913 OP *k = o->op_next;
15914 U8 want = (k->op_flags & OPf_WANT);
15916 && k->op_type == OP_KEYS
15917 && ( want == OPf_WANT_VOID
15918 || want == OPf_WANT_SCALAR)
15919 && !(k->op_private & OPpMAYBE_LVSUB)
15920 && !(k->op_flags & OPf_MOD)
15922 o->op_next = k->op_next;
15923 o->op_flags &= ~(OPf_REF|OPf_WANT);
15924 o->op_flags |= want;
15925 o->op_private |= (o->op_type == OP_PADHV ?
15926 OPpPADHV_ISKEYS : OPpRV2HV_ISKEYS);
15927 /* for keys(%lex), hold onto the OP_KEYS's targ
15928 * since padhv doesn't have its own targ to return
15930 if (!(o->op_type ==OP_PADHV && want == OPf_WANT_SCALAR))
15935 /* see if %h is used in boolean context */
15936 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
15937 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, OPpMAYBE_TRUEBOOL);
15940 if (o->op_type != OP_PADHV)
15944 if ( o->op_type == OP_PADAV
15945 && (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR
15947 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0);
15950 /* Skip over state($x) in void context. */
15951 if (oldop && o->op_private == (OPpPAD_STATE|OPpLVAL_INTRO)
15952 && (o->op_flags & OPf_WANT) == OPf_WANT_VOID)
15954 oldop->op_next = o->op_next;
15955 goto redo_nextstate;
15957 if (o->op_type != OP_PADAV)
15961 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
15962 OP* const pop = (o->op_type == OP_PADAV) ?
15963 o->op_next : o->op_next->op_next;
15965 if (pop && pop->op_type == OP_CONST &&
15966 ((PL_op = pop->op_next)) &&
15967 pop->op_next->op_type == OP_AELEM &&
15968 !(pop->op_next->op_private &
15969 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
15970 (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
15973 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
15974 no_bareword_allowed(pop);
15975 if (o->op_type == OP_GV)
15976 op_null(o->op_next);
15977 op_null(pop->op_next);
15979 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
15980 o->op_next = pop->op_next->op_next;
15981 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
15982 o->op_private = (U8)i;
15983 if (o->op_type == OP_GV) {
15986 o->op_type = OP_AELEMFAST;
15989 o->op_type = OP_AELEMFAST_LEX;
15991 if (o->op_type != OP_GV)
15995 /* Remove $foo from the op_next chain in void context. */
15997 && ( o->op_next->op_type == OP_RV2SV
15998 || o->op_next->op_type == OP_RV2AV
15999 || o->op_next->op_type == OP_RV2HV )
16000 && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID
16001 && !(o->op_next->op_private & OPpLVAL_INTRO))
16003 oldop->op_next = o->op_next->op_next;
16004 /* Reprocess the previous op if it is a nextstate, to
16005 allow double-nextstate optimisation. */
16007 if (oldop->op_type == OP_NEXTSTATE) {
16014 o = oldop->op_next;
16017 else if (o->op_next->op_type == OP_RV2SV) {
16018 if (!(o->op_next->op_private & OPpDEREF)) {
16019 op_null(o->op_next);
16020 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
16022 o->op_next = o->op_next->op_next;
16023 OpTYPE_set(o, OP_GVSV);
16026 else if (o->op_next->op_type == OP_READLINE
16027 && o->op_next->op_next->op_type == OP_CONCAT
16028 && (o->op_next->op_next->op_flags & OPf_STACKED))
16030 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
16031 OpTYPE_set(o, OP_RCATLINE);
16032 o->op_flags |= OPf_STACKED;
16033 op_null(o->op_next->op_next);
16034 op_null(o->op_next);
16045 while (cLOGOP->op_other->op_type == OP_NULL)
16046 cLOGOP->op_other = cLOGOP->op_other->op_next;
16047 while (o->op_next && ( o->op_type == o->op_next->op_type
16048 || o->op_next->op_type == OP_NULL))
16049 o->op_next = o->op_next->op_next;
16051 /* If we're an OR and our next is an AND in void context, we'll
16052 follow its op_other on short circuit, same for reverse.
16053 We can't do this with OP_DOR since if it's true, its return
16054 value is the underlying value which must be evaluated
16058 (IS_AND_OP(o) && IS_OR_OP(o->op_next))
16059 || (IS_OR_OP(o) && IS_AND_OP(o->op_next))
16061 && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID
16063 o->op_next = ((LOGOP*)o->op_next)->op_other;
16065 DEFER(cLOGOP->op_other);
16070 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
16071 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0);
16080 case OP_ARGDEFELEM:
16081 while (cLOGOP->op_other->op_type == OP_NULL)
16082 cLOGOP->op_other = cLOGOP->op_other->op_next;
16083 DEFER(cLOGOP->op_other);
16088 while (cLOOP->op_redoop->op_type == OP_NULL)
16089 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
16090 while (cLOOP->op_nextop->op_type == OP_NULL)
16091 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
16092 while (cLOOP->op_lastop->op_type == OP_NULL)
16093 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
16094 /* a while(1) loop doesn't have an op_next that escapes the
16095 * loop, so we have to explicitly follow the op_lastop to
16096 * process the rest of the code */
16097 DEFER(cLOOP->op_lastop);
16101 assert(cLOGOPo->op_other->op_type == OP_LEAVETRY);
16102 DEFER(cLOGOPo->op_other);
16106 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
16107 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0);
16108 assert(!(cPMOP->op_pmflags & PMf_ONCE));
16109 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
16110 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
16111 cPMOP->op_pmstashstartu.op_pmreplstart
16112 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
16113 DEFER(cPMOP->op_pmstashstartu.op_pmreplstart);
16119 if (o->op_flags & OPf_SPECIAL) {
16120 /* first arg is a code block */
16121 OP * const nullop = OpSIBLING(cLISTOP->op_first);
16122 OP * kid = cUNOPx(nullop)->op_first;
16124 assert(nullop->op_type == OP_NULL);
16125 assert(kid->op_type == OP_SCOPE
16126 || (kid->op_type == OP_NULL && kid->op_targ == OP_LEAVE));
16127 /* since OP_SORT doesn't have a handy op_other-style
16128 * field that can point directly to the start of the code
16129 * block, store it in the otherwise-unused op_next field
16130 * of the top-level OP_NULL. This will be quicker at
16131 * run-time, and it will also allow us to remove leading
16132 * OP_NULLs by just messing with op_nexts without
16133 * altering the basic op_first/op_sibling layout. */
16134 kid = kLISTOP->op_first;
16136 (kid->op_type == OP_NULL
16137 && ( kid->op_targ == OP_NEXTSTATE
16138 || kid->op_targ == OP_DBSTATE ))
16139 || kid->op_type == OP_STUB
16140 || kid->op_type == OP_ENTER
16141 || (PL_parser && PL_parser->error_count));
16142 nullop->op_next = kid->op_next;
16143 DEFER(nullop->op_next);
16146 /* check that RHS of sort is a single plain array */
16147 oright = cUNOPo->op_first;
16148 if (!oright || oright->op_type != OP_PUSHMARK)
16151 if (o->op_private & OPpSORT_INPLACE)
16154 /* reverse sort ... can be optimised. */
16155 if (!OpHAS_SIBLING(cUNOPo)) {
16156 /* Nothing follows us on the list. */
16157 OP * const reverse = o->op_next;
16159 if (reverse->op_type == OP_REVERSE &&
16160 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
16161 OP * const pushmark = cUNOPx(reverse)->op_first;
16162 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
16163 && (OpSIBLING(cUNOPx(pushmark)) == o)) {
16164 /* reverse -> pushmark -> sort */
16165 o->op_private |= OPpSORT_REVERSE;
16167 pushmark->op_next = oright->op_next;
16177 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
16179 LISTOP *enter, *exlist;
16181 if (o->op_private & OPpSORT_INPLACE)
16184 enter = (LISTOP *) o->op_next;
16187 if (enter->op_type == OP_NULL) {
16188 enter = (LISTOP *) enter->op_next;
16192 /* for $a (...) will have OP_GV then OP_RV2GV here.
16193 for (...) just has an OP_GV. */
16194 if (enter->op_type == OP_GV) {
16195 gvop = (OP *) enter;
16196 enter = (LISTOP *) enter->op_next;
16199 if (enter->op_type == OP_RV2GV) {
16200 enter = (LISTOP *) enter->op_next;
16206 if (enter->op_type != OP_ENTERITER)
16209 iter = enter->op_next;
16210 if (!iter || iter->op_type != OP_ITER)
16213 expushmark = enter->op_first;
16214 if (!expushmark || expushmark->op_type != OP_NULL
16215 || expushmark->op_targ != OP_PUSHMARK)
16218 exlist = (LISTOP *) OpSIBLING(expushmark);
16219 if (!exlist || exlist->op_type != OP_NULL
16220 || exlist->op_targ != OP_LIST)
16223 if (exlist->op_last != o) {
16224 /* Mmm. Was expecting to point back to this op. */
16227 theirmark = exlist->op_first;
16228 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
16231 if (OpSIBLING(theirmark) != o) {
16232 /* There's something between the mark and the reverse, eg
16233 for (1, reverse (...))
16238 ourmark = ((LISTOP *)o)->op_first;
16239 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
16242 ourlast = ((LISTOP *)o)->op_last;
16243 if (!ourlast || ourlast->op_next != o)
16246 rv2av = OpSIBLING(ourmark);
16247 if (rv2av && rv2av->op_type == OP_RV2AV && !OpHAS_SIBLING(rv2av)
16248 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
16249 /* We're just reversing a single array. */
16250 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
16251 enter->op_flags |= OPf_STACKED;
16254 /* We don't have control over who points to theirmark, so sacrifice
16256 theirmark->op_next = ourmark->op_next;
16257 theirmark->op_flags = ourmark->op_flags;
16258 ourlast->op_next = gvop ? gvop : (OP *) enter;
16261 enter->op_private |= OPpITER_REVERSED;
16262 iter->op_private |= OPpITER_REVERSED;
16266 o = oldop->op_next;
16268 NOT_REACHED; /* NOTREACHED */
16274 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
16275 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
16280 if (!(o->op_private & OPpOFFBYONE) && !CvCLONE(PL_compcv)
16281 && (!CvANON(PL_compcv) || (!PL_cv_has_eval && !PL_perldb)))
16284 if (CvEVAL(PL_compcv)) sv = &PL_sv_undef;
16286 sv = newRV((SV *)PL_compcv);
16290 OpTYPE_set(o, OP_CONST);
16291 o->op_flags |= OPf_SPECIAL;
16292 cSVOPo->op_sv = sv;
16297 if (OP_GIMME(o,0) == G_VOID
16298 || ( o->op_next->op_type == OP_LINESEQ
16299 && ( o->op_next->op_next->op_type == OP_LEAVESUB
16300 || ( o->op_next->op_next->op_type == OP_RETURN
16301 && !CvLVALUE(PL_compcv)))))
16303 OP *right = cBINOP->op_first;
16322 OP *left = OpSIBLING(right);
16323 if (left->op_type == OP_SUBSTR
16324 && (left->op_private & 7) < 4) {
16326 /* cut out right */
16327 op_sibling_splice(o, NULL, 1, NULL);
16328 /* and insert it as second child of OP_SUBSTR */
16329 op_sibling_splice(left, cBINOPx(left)->op_first, 0,
16331 left->op_private |= OPpSUBSTR_REPL_FIRST;
16333 (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
16340 int l, r, lr, lscalars, rscalars;
16342 /* handle common vars detection, e.g. ($a,$b) = ($b,$a).
16343 Note that we do this now rather than in newASSIGNOP(),
16344 since only by now are aliased lexicals flagged as such
16346 See the essay "Common vars in list assignment" above for
16347 the full details of the rationale behind all the conditions
16350 PL_generation sorcery:
16351 To detect whether there are common vars, the global var
16352 PL_generation is incremented for each assign op we scan.
16353 Then we run through all the lexical variables on the LHS,
16354 of the assignment, setting a spare slot in each of them to
16355 PL_generation. Then we scan the RHS, and if any lexicals
16356 already have that value, we know we've got commonality.
16357 Also, if the generation number is already set to
16358 PERL_INT_MAX, then the variable is involved in aliasing, so
16359 we also have potential commonality in that case.
16365 l = S_aassign_scan(aTHX_ cLISTOPo->op_last, FALSE, 1, &lscalars);
16368 r = S_aassign_scan(aTHX_ cLISTOPo->op_first, TRUE, 1, &rscalars);
16372 /* After looking for things which are *always* safe, this main
16373 * if/else chain selects primarily based on the type of the
16374 * LHS, gradually working its way down from the more dangerous
16375 * to the more restrictive and thus safer cases */
16377 if ( !l /* () = ....; */
16378 || !r /* .... = (); */
16379 || !(l & ~AAS_SAFE_SCALAR) /* (undef, pos()) = ...; */
16380 || !(r & ~AAS_SAFE_SCALAR) /* ... = (1,2,length,undef); */
16381 || (lscalars < 2) /* ($x, undef) = ... */
16383 NOOP; /* always safe */
16385 else if (l & AAS_DANGEROUS) {
16386 /* always dangerous */
16387 o->op_private |= OPpASSIGN_COMMON_SCALAR;
16388 o->op_private |= OPpASSIGN_COMMON_AGG;
16390 else if (l & (AAS_PKG_SCALAR|AAS_PKG_AGG)) {
16391 /* package vars are always dangerous - too many
16392 * aliasing possibilities */
16393 if (l & AAS_PKG_SCALAR)
16394 o->op_private |= OPpASSIGN_COMMON_SCALAR;
16395 if (l & AAS_PKG_AGG)
16396 o->op_private |= OPpASSIGN_COMMON_AGG;
16398 else if (l & ( AAS_MY_SCALAR|AAS_MY_AGG
16399 |AAS_LEX_SCALAR|AAS_LEX_AGG))
16401 /* LHS contains only lexicals and safe ops */
16403 if (l & (AAS_MY_AGG|AAS_LEX_AGG))
16404 o->op_private |= OPpASSIGN_COMMON_AGG;
16406 if (l & (AAS_MY_SCALAR|AAS_LEX_SCALAR)) {
16407 if (lr & AAS_LEX_SCALAR_COMM)
16408 o->op_private |= OPpASSIGN_COMMON_SCALAR;
16409 else if ( !(l & AAS_LEX_SCALAR)
16410 && (r & AAS_DEFAV))
16414 * as scalar-safe for performance reasons.
16415 * (it will still have been marked _AGG if necessary */
16418 else if (r & (AAS_PKG_SCALAR|AAS_PKG_AGG|AAS_DANGEROUS))
16419 /* if there are only lexicals on the LHS and no
16420 * common ones on the RHS, then we assume that the
16421 * only way those lexicals could also get
16422 * on the RHS is via some sort of dereffing or
16425 * ($lex, $x) = (1, $$r)
16426 * and in this case we assume the var must have
16427 * a bumped ref count. So if its ref count is 1,
16428 * it must only be on the LHS.
16430 o->op_private |= OPpASSIGN_COMMON_RC1;
16435 * may have to handle aggregate on LHS, but we can't
16436 * have common scalars. */
16439 ~(OPpASSIGN_COMMON_SCALAR|OPpASSIGN_COMMON_RC1);
16441 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
16442 S_check_for_bool_cxt(o, 1, OPpASSIGN_TRUEBOOL, 0);
16447 /* see if ref() is used in boolean context */
16448 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
16449 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, OPpMAYBE_TRUEBOOL);
16453 /* see if the op is used in known boolean context,
16454 * but not if OA_TARGLEX optimisation is enabled */
16455 if ( (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR
16456 && !(o->op_private & OPpTARGET_MY)
16458 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0);
16462 /* see if the op is used in known boolean context */
16463 if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
16464 S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0);
16468 Perl_cpeep_t cpeep =
16469 XopENTRYCUSTOM(o, xop_peep);
16471 cpeep(aTHX_ o, oldop);
16476 /* did we just null the current op? If so, re-process it to handle
16477 * eliding "empty" ops from the chain */
16478 if (o->op_type == OP_NULL && oldop && oldop->op_next == o) {
16491 Perl_peep(pTHX_ OP *o)
16497 =head1 Custom Operators
16499 =for apidoc Ao||custom_op_xop
16500 Return the XOP structure for a given custom op. This macro should be
16501 considered internal to C<OP_NAME> and the other access macros: use them instead.
16502 This macro does call a function. Prior
16503 to 5.19.6, this was implemented as a
16510 Perl_custom_op_get_field(pTHX_ const OP *o, const xop_flags_enum field)
16516 static const XOP xop_null = { 0, 0, 0, 0, 0 };
16518 PERL_ARGS_ASSERT_CUSTOM_OP_GET_FIELD;
16519 assert(o->op_type == OP_CUSTOM);
16521 /* This is wrong. It assumes a function pointer can be cast to IV,
16522 * which isn't guaranteed, but this is what the old custom OP code
16523 * did. In principle it should be safer to Copy the bytes of the
16524 * pointer into a PV: since the new interface is hidden behind
16525 * functions, this can be changed later if necessary. */
16526 /* Change custom_op_xop if this ever happens */
16527 keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
16530 he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0);
16532 /* assume noone will have just registered a desc */
16533 if (!he && PL_custom_op_names &&
16534 (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0))
16539 /* XXX does all this need to be shared mem? */
16540 Newxz(xop, 1, XOP);
16541 pv = SvPV(HeVAL(he), l);
16542 XopENTRY_set(xop, xop_name, savepvn(pv, l));
16543 if (PL_custom_op_descs &&
16544 (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0))
16546 pv = SvPV(HeVAL(he), l);
16547 XopENTRY_set(xop, xop_desc, savepvn(pv, l));
16549 Perl_custom_op_register(aTHX_ o->op_ppaddr, xop);
16553 xop = (XOP *)&xop_null;
16555 xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
16559 if(field == XOPe_xop_ptr) {
16562 const U32 flags = XopFLAGS(xop);
16563 if(flags & field) {
16565 case XOPe_xop_name:
16566 any.xop_name = xop->xop_name;
16568 case XOPe_xop_desc:
16569 any.xop_desc = xop->xop_desc;
16571 case XOPe_xop_class:
16572 any.xop_class = xop->xop_class;
16574 case XOPe_xop_peep:
16575 any.xop_peep = xop->xop_peep;
16578 NOT_REACHED; /* NOTREACHED */
16583 case XOPe_xop_name:
16584 any.xop_name = XOPd_xop_name;
16586 case XOPe_xop_desc:
16587 any.xop_desc = XOPd_xop_desc;
16589 case XOPe_xop_class:
16590 any.xop_class = XOPd_xop_class;
16592 case XOPe_xop_peep:
16593 any.xop_peep = XOPd_xop_peep;
16596 NOT_REACHED; /* NOTREACHED */
16601 /* On some platforms (HP-UX, IA64) gcc emits a warning for this function:
16602 * op.c: In function 'Perl_custom_op_get_field':
16603 * op.c:...: warning: 'any.xop_name' may be used uninitialized in this function [-Wmaybe-uninitialized]
16604 * This is because on those platforms (with -DEBUGGING) NOT_REACHED
16605 * expands to assert(0), which expands to ((0) ? (void)0 :
16606 * __assert(...)), and gcc doesn't know that __assert can never return. */
16612 =for apidoc Ao||custom_op_register
16613 Register a custom op. See L<perlguts/"Custom Operators">.
16619 Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
16623 PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER;
16625 /* see the comment in custom_op_xop */
16626 keysv = sv_2mortal(newSViv(PTR2IV(ppaddr)));
16628 if (!PL_custom_ops)
16629 PL_custom_ops = newHV();
16631 if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0))
16632 Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name);
16637 =for apidoc core_prototype
16639 This function assigns the prototype of the named core function to C<sv>, or
16640 to a new mortal SV if C<sv> is C<NULL>. It returns the modified C<sv>, or
16641 C<NULL> if the core function has no prototype. C<code> is a code as returned
16642 by C<keyword()>. It must not be equal to 0.
16648 Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code,
16651 int i = 0, n = 0, seen_question = 0, defgv = 0;
16653 #define MAX_ARGS_OP ((sizeof(I32) - 1) * 2)
16654 char str[ MAX_ARGS_OP * 2 + 2 ]; /* One ';', one '\0' */
16655 bool nullret = FALSE;
16657 PERL_ARGS_ASSERT_CORE_PROTOTYPE;
16661 if (!sv) sv = sv_newmortal();
16663 #define retsetpvs(x,y) sv_setpvs(sv, x); if(opnum) *opnum=(y); return sv
16665 switch (code < 0 ? -code : code) {
16666 case KEY_and : case KEY_chop: case KEY_chomp:
16667 case KEY_cmp : case KEY_defined: case KEY_delete: case KEY_exec :
16668 case KEY_exists: case KEY_eq : case KEY_ge : case KEY_goto :
16669 case KEY_grep : case KEY_gt : case KEY_last : case KEY_le :
16670 case KEY_lt : case KEY_map : case KEY_ne : case KEY_next :
16671 case KEY_or : case KEY_print : case KEY_printf: case KEY_qr :
16672 case KEY_redo : case KEY_require: case KEY_return: case KEY_say :
16673 case KEY_select: case KEY_sort : case KEY_split : case KEY_system:
16674 case KEY_x : case KEY_xor :
16675 if (!opnum) return NULL; nullret = TRUE; goto findopnum;
16676 case KEY_glob: retsetpvs("_;", OP_GLOB);
16677 case KEY_keys: retsetpvs("\\[%@]", OP_KEYS);
16678 case KEY_values: retsetpvs("\\[%@]", OP_VALUES);
16679 case KEY_each: retsetpvs("\\[%@]", OP_EACH);
16680 case KEY_pos: retsetpvs(";\\[$*]", OP_POS);
16681 case KEY___FILE__: case KEY___LINE__: case KEY___PACKAGE__:
16683 case KEY_evalbytes:
16684 name = "entereval"; break;
16692 while (i < MAXO) { /* The slow way. */
16693 if (strEQ(name, PL_op_name[i])
16694 || strEQ(name, PL_op_desc[i]))
16696 if (nullret) { assert(opnum); *opnum = i; return NULL; }
16703 defgv = PL_opargs[i] & OA_DEFGV;
16704 oa = PL_opargs[i] >> OASHIFT;
16706 if (oa & OA_OPTIONAL && !seen_question && (
16707 !defgv || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF
16712 if ((oa & (OA_OPTIONAL - 1)) >= OA_AVREF
16713 && (oa & (OA_OPTIONAL - 1)) <= OA_SCALARREF
16714 /* But globs are already references (kinda) */
16715 && (oa & (OA_OPTIONAL - 1)) != OA_FILEREF
16719 if ((oa & (OA_OPTIONAL - 1)) == OA_SCALARREF
16720 && !scalar_mod_type(NULL, i)) {
16725 if (i == OP_LOCK || i == OP_UNDEF) str[n++] = '&';
16729 else str[n++] = ("?$@@%&*$")[oa & (OA_OPTIONAL - 1)];
16730 if (oa & OA_OPTIONAL && defgv && str[n-1] == '$') {
16731 str[n-1] = '_'; defgv = 0;
16735 if (code == -KEY_not || code == -KEY_getprotobynumber) str[n++] = ';';
16737 sv_setpvn(sv, str, n - 1);
16738 if (opnum) *opnum = i;
16743 Perl_coresub_op(pTHX_ SV * const coreargssv, const int code,
16746 OP * const argop = newSVOP(OP_COREARGS,0,coreargssv);
16749 PERL_ARGS_ASSERT_CORESUB_OP;
16753 return op_append_elem(OP_LINESEQ,
16756 newSVOP(OP_CONST, 0, newSViv(-code % 3)),
16763 o = newUNOP(OP_AVHVSWITCH,0,argop);
16764 o->op_private = opnum-OP_EACH;
16766 case OP_SELECT: /* which represents OP_SSELECT as well */
16771 newAVREF(newGVOP(OP_GV, 0, PL_defgv)),
16772 newSVOP(OP_CONST, 0, newSVuv(1))
16774 coresub_op(newSVuv((UV)OP_SSELECT), 0,
16776 coresub_op(coreargssv, 0, OP_SELECT)
16780 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
16782 return op_append_elem(
16785 opnum == OP_WANTARRAY || opnum == OP_RUNCV
16786 ? OPpOFFBYONE << 8 : 0)
16788 case OA_BASEOP_OR_UNOP:
16789 if (opnum == OP_ENTEREVAL) {
16790 o = newUNOP(OP_ENTEREVAL,OPpEVAL_COPHH<<8,argop);
16791 if (code == -KEY_evalbytes) o->op_private |= OPpEVAL_BYTES;
16793 else o = newUNOP(opnum,0,argop);
16794 if (opnum == OP_CALLER) o->op_private |= OPpOFFBYONE;
16797 if (is_handle_constructor(o, 1))
16798 argop->op_private |= OPpCOREARGS_DEREF1;
16799 if (scalar_mod_type(NULL, opnum))
16800 argop->op_private |= OPpCOREARGS_SCALARMOD;
16804 o = op_convert_list(opnum,OPf_SPECIAL*(opnum == OP_GLOB),argop);
16805 if (is_handle_constructor(o, 2))
16806 argop->op_private |= OPpCOREARGS_DEREF2;
16807 if (opnum == OP_SUBSTR) {
16808 o->op_private |= OPpMAYBE_LVSUB;
16817 Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv,
16818 SV * const *new_const_svp)
16820 const char *hvname;
16821 bool is_const = !!CvCONST(old_cv);
16822 SV *old_const_sv = is_const ? cv_const_sv(old_cv) : NULL;
16824 PERL_ARGS_ASSERT_REPORT_REDEFINED_CV;
16826 if (is_const && new_const_svp && old_const_sv == *new_const_svp)
16828 /* They are 2 constant subroutines generated from
16829 the same constant. This probably means that
16830 they are really the "same" proxy subroutine
16831 instantiated in 2 places. Most likely this is
16832 when a constant is exported twice. Don't warn.
16835 (ckWARN(WARN_REDEFINE)
16837 CvGV(old_cv) && GvSTASH(CvGV(old_cv))
16838 && HvNAMELEN(GvSTASH(CvGV(old_cv))) == 7
16839 && (hvname = HvNAME(GvSTASH(CvGV(old_cv))),
16840 strEQ(hvname, "autouse"))
16844 && ckWARN_d(WARN_REDEFINE)
16845 && (!new_const_svp || sv_cmp(old_const_sv, *new_const_svp))
16848 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
16850 ? "Constant subroutine %" SVf " redefined"
16851 : "Subroutine %" SVf " redefined",
16856 =head1 Hook manipulation
16858 These functions provide convenient and thread-safe means of manipulating
16865 =for apidoc Am|void|wrap_op_checker|Optype opcode|Perl_check_t new_checker|Perl_check_t *old_checker_p
16867 Puts a C function into the chain of check functions for a specified op
16868 type. This is the preferred way to manipulate the L</PL_check> array.
16869 C<opcode> specifies which type of op is to be affected. C<new_checker>
16870 is a pointer to the C function that is to be added to that opcode's
16871 check chain, and C<old_checker_p> points to the storage location where a
16872 pointer to the next function in the chain will be stored. The value of
16873 C<new_checker> is written into the L</PL_check> array, while the value
16874 previously stored there is written to C<*old_checker_p>.
16876 L</PL_check> is global to an entire process, and a module wishing to
16877 hook op checking may find itself invoked more than once per process,
16878 typically in different threads. To handle that situation, this function
16879 is idempotent. The location C<*old_checker_p> must initially (once
16880 per process) contain a null pointer. A C variable of static duration
16881 (declared at file scope, typically also marked C<static> to give
16882 it internal linkage) will be implicitly initialised appropriately,
16883 if it does not have an explicit initialiser. This function will only
16884 actually modify the check chain if it finds C<*old_checker_p> to be null.
16885 This function is also thread safe on the small scale. It uses appropriate
16886 locking to avoid race conditions in accessing L</PL_check>.
16888 When this function is called, the function referenced by C<new_checker>
16889 must be ready to be called, except for C<*old_checker_p> being unfilled.
16890 In a threading situation, C<new_checker> may be called immediately,
16891 even before this function has returned. C<*old_checker_p> will always
16892 be appropriately set before C<new_checker> is called. If C<new_checker>
16893 decides not to do anything special with an op that it is given (which
16894 is the usual case for most uses of op check hooking), it must chain the
16895 check function referenced by C<*old_checker_p>.
16897 Taken all together, XS code to hook an op checker should typically look
16898 something like this:
16900 static Perl_check_t nxck_frob;
16901 static OP *myck_frob(pTHX_ OP *op) {
16903 op = nxck_frob(aTHX_ op);
16908 wrap_op_checker(OP_FROB, myck_frob, &nxck_frob);
16910 If you want to influence compilation of calls to a specific subroutine,
16911 then use L</cv_set_call_checker_flags> rather than hooking checking of
16912 all C<entersub> ops.
16918 Perl_wrap_op_checker(pTHX_ Optype opcode,
16919 Perl_check_t new_checker, Perl_check_t *old_checker_p)
16923 PERL_UNUSED_CONTEXT;
16924 PERL_ARGS_ASSERT_WRAP_OP_CHECKER;
16925 if (*old_checker_p) return;
16926 OP_CHECK_MUTEX_LOCK;
16927 if (!*old_checker_p) {
16928 *old_checker_p = PL_check[opcode];
16929 PL_check[opcode] = new_checker;
16931 OP_CHECK_MUTEX_UNLOCK;
16936 /* Efficient sub that returns a constant scalar value. */
16938 const_sv_xsub(pTHX_ CV* cv)
16941 SV *const sv = MUTABLE_SV(XSANY.any_ptr);
16942 PERL_UNUSED_ARG(items);
16952 const_av_xsub(pTHX_ CV* cv)
16955 AV * const av = MUTABLE_AV(XSANY.any_ptr);
16963 if (SvRMAGICAL(av))
16964 Perl_croak(aTHX_ "Magical list constants are not supported");
16965 if (GIMME_V != G_ARRAY) {
16967 ST(0) = sv_2mortal(newSViv((IV)AvFILLp(av)+1));
16970 EXTEND(SP, AvFILLp(av)+1);
16971 Copy(AvARRAY(av), &ST(0), AvFILLp(av)+1, SV *);
16972 XSRETURN(AvFILLp(av)+1);
16977 * ex: set ts=8 sts=4 sw=4 et: