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
423 Perl_Slab_Free(pTHX_ void *op)
425 OP * const o = (OP *)op;
428 PERL_ARGS_ASSERT_SLAB_FREE;
430 if (!o->op_slabbed) {
432 PerlMemShared_free(op);
437 /* If this op is already freed, our refcount will get screwy. */
438 assert(o->op_type != OP_FREED);
439 o->op_type = OP_FREED;
440 o->op_next = slab->opslab_freed;
441 slab->opslab_freed = o;
442 DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
443 OpslabREFCNT_dec_padok(slab);
447 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
449 const bool havepad = !!PL_comppad;
450 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
453 PAD_SAVE_SETNULLPAD();
460 Perl_opslab_free(pTHX_ OPSLAB *slab)
463 PERL_ARGS_ASSERT_OPSLAB_FREE;
465 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
466 assert(slab->opslab_refcnt == 1);
468 slab2 = slab->opslab_next;
470 slab->opslab_refcnt = ~(size_t)0;
472 #ifdef PERL_DEBUG_READONLY_OPS
473 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
475 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
476 perror("munmap failed");
480 PerlMemShared_free(slab);
487 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
492 size_t savestack_count = 0;
494 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
497 for (slot = slab2->opslab_first;
499 slot = slot->opslot_next) {
500 if (slot->opslot_op.op_type != OP_FREED
501 && !(slot->opslot_op.op_savefree
507 assert(slot->opslot_op.op_slabbed);
508 op_free(&slot->opslot_op);
509 if (slab->opslab_refcnt == 1) goto free;
512 } while ((slab2 = slab2->opslab_next));
513 /* > 1 because the CV still holds a reference count. */
514 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
516 assert(savestack_count == slab->opslab_refcnt-1);
518 /* Remove the CV’s reference count. */
519 slab->opslab_refcnt--;
526 #ifdef PERL_DEBUG_READONLY_OPS
528 Perl_op_refcnt_inc(pTHX_ OP *o)
531 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
532 if (slab && slab->opslab_readonly) {
545 Perl_op_refcnt_dec(pTHX_ OP *o)
548 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
550 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
552 if (slab && slab->opslab_readonly) {
554 result = --o->op_targ;
557 result = --o->op_targ;
563 * In the following definition, the ", (OP*)0" is just to make the compiler
564 * think the expression is of the right type: croak actually does a Siglongjmp.
566 #define CHECKOP(type,o) \
567 ((PL_op_mask && PL_op_mask[type]) \
568 ? ( op_free((OP*)o), \
569 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
571 : PL_check[type](aTHX_ (OP*)o))
573 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
575 #define OpTYPE_set(o,type) \
577 o->op_type = (OPCODE)type; \
578 o->op_ppaddr = PL_ppaddr[type]; \
582 S_no_fh_allowed(pTHX_ OP *o)
584 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
586 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
592 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
594 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
595 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
600 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
602 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
604 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
609 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
611 PERL_ARGS_ASSERT_BAD_TYPE_PV;
613 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
614 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
617 /* remove flags var, its unused in all callers, move to to right end since gv
618 and kid are always the same */
620 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
622 SV * const namesv = cv_name((CV *)gv, NULL, 0);
623 PERL_ARGS_ASSERT_BAD_TYPE_GV;
625 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %" SVf " must be %s (not %s)",
626 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
630 S_no_bareword_allowed(pTHX_ OP *o)
632 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
634 qerror(Perl_mess(aTHX_
635 "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use",
637 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
640 /* "register" allocation */
643 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
646 const bool is_our = (PL_parser->in_my == KEY_our);
648 PERL_ARGS_ASSERT_ALLOCMY;
650 if (flags & ~SVf_UTF8)
651 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
654 /* complain about "my $<special_var>" etc etc */
658 || ( (flags & SVf_UTF8)
659 && isIDFIRST_utf8_safe((U8 *)name+1, name + len))
660 || (name[1] == '_' && len > 2)))
662 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
664 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
665 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
666 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
667 PL_parser->in_my == KEY_state ? "state" : "my"));
669 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
670 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
674 /* allocate a spare slot and store the name in that slot */
676 off = pad_add_name_pvn(name, len,
677 (is_our ? padadd_OUR :
678 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
679 PL_parser->in_my_stash,
681 /* $_ is always in main::, even with our */
682 ? (PL_curstash && !memEQs(name,len,"$_")
688 /* anon sub prototypes contains state vars should always be cloned,
689 * otherwise the state var would be shared between anon subs */
691 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
692 CvCLONE_on(PL_compcv);
698 =head1 Optree Manipulation Functions
700 =for apidoc alloccopstash
702 Available only under threaded builds, this function allocates an entry in
703 C<PL_stashpad> for the stash passed to it.
710 Perl_alloccopstash(pTHX_ HV *hv)
712 PADOFFSET off = 0, o = 1;
713 bool found_slot = FALSE;
715 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
717 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
719 for (; o < PL_stashpadmax; ++o) {
720 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
721 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
722 found_slot = TRUE, off = o;
725 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
726 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
727 off = PL_stashpadmax;
728 PL_stashpadmax += 10;
731 PL_stashpad[PL_stashpadix = off] = hv;
736 /* free the body of an op without examining its contents.
737 * Always use this rather than FreeOp directly */
740 S_op_destroy(pTHX_ OP *o)
748 =for apidoc Am|void|op_free|OP *o
750 Free an op. Only use this when an op is no longer linked to from any
757 Perl_op_free(pTHX_ OP *o)
761 SSize_t defer_ix = -1;
762 SSize_t defer_stack_alloc = 0;
763 OP **defer_stack = NULL;
767 /* Though ops may be freed twice, freeing the op after its slab is a
769 assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
770 /* During the forced freeing of ops after compilation failure, kidops
771 may be freed before their parents. */
772 if (!o || o->op_type == OP_FREED)
777 /* an op should only ever acquire op_private flags that we know about.
778 * If this fails, you may need to fix something in regen/op_private.
779 * Don't bother testing if:
780 * * the op_ppaddr doesn't match the op; someone may have
781 * overridden the op and be doing strange things with it;
782 * * we've errored, as op flags are often left in an
783 * inconsistent state then. Note that an error when
784 * compiling the main program leaves PL_parser NULL, so
785 * we can't spot faults in the main code, only
786 * evaled/required code */
788 if ( o->op_ppaddr == PL_ppaddr[o->op_type]
790 && !PL_parser->error_count)
792 assert(!(o->op_private & ~PL_op_private_valid[type]));
796 if (o->op_private & OPpREFCOUNTED) {
807 refcnt = OpREFCNT_dec(o);
810 /* Need to find and remove any pattern match ops from the list
811 we maintain for reset(). */
812 find_and_forget_pmops(o);
822 /* Call the op_free hook if it has been set. Do it now so that it's called
823 * at the right time for refcounted ops, but still before all of the kids
827 if (o->op_flags & OPf_KIDS) {
829 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
830 nextkid = OpSIBLING(kid); /* Get before next freeing kid */
831 if (!kid || kid->op_type == OP_FREED)
832 /* During the forced freeing of ops after
833 compilation failure, kidops may be freed before
836 if (!(kid->op_flags & OPf_KIDS))
837 /* If it has no kids, just free it now */
844 type = (OPCODE)o->op_targ;
847 Slab_to_rw(OpSLAB(o));
849 /* COP* is not cleared by op_clear() so that we may track line
850 * numbers etc even after null() */
851 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
859 } while ( (o = POP_DEFERRED_OP()) );
861 Safefree(defer_stack);
864 /* S_op_clear_gv(): free a GV attached to an OP */
868 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
870 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
874 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
875 || o->op_type == OP_MULTIDEREF)
878 ? ((GV*)PAD_SVl(*ixp)) : NULL;
880 ? (GV*)(*svp) : NULL;
882 /* It's possible during global destruction that the GV is freed
883 before the optree. Whilst the SvREFCNT_inc is happy to bump from
884 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
885 will trigger an assertion failure, because the entry to sv_clear
886 checks that the scalar is not already freed. A check of for
887 !SvIS_FREED(gv) turns out to be invalid, because during global
888 destruction the reference count can be forced down to zero
889 (with SVf_BREAK set). In which case raising to 1 and then
890 dropping to 0 triggers cleanup before it should happen. I
891 *think* that this might actually be a general, systematic,
892 weakness of the whole idea of SVf_BREAK, in that code *is*
893 allowed to raise and lower references during global destruction,
894 so any *valid* code that happens to do this during global
895 destruction might well trigger premature cleanup. */
896 bool still_valid = gv && SvREFCNT(gv);
899 SvREFCNT_inc_simple_void(gv);
902 pad_swipe(*ixp, TRUE);
910 int try_downgrade = SvREFCNT(gv) == 2;
913 gv_try_downgrade(gv);
919 Perl_op_clear(pTHX_ OP *o)
924 PERL_ARGS_ASSERT_OP_CLEAR;
926 switch (o->op_type) {
927 case OP_NULL: /* Was holding old type, if any. */
930 case OP_ENTEREVAL: /* Was holding hints. */
931 case OP_ARGDEFELEM: /* Was holding signature index. */
935 if (!(o->op_flags & OPf_REF)
936 || (PL_check[o->op_type] != Perl_ck_ftst))
943 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
945 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
948 case OP_METHOD_REDIR:
949 case OP_METHOD_REDIR_SUPER:
951 if (cMETHOPx(o)->op_rclass_targ) {
952 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
953 cMETHOPx(o)->op_rclass_targ = 0;
956 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
957 cMETHOPx(o)->op_rclass_sv = NULL;
959 case OP_METHOD_NAMED:
960 case OP_METHOD_SUPER:
961 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
962 cMETHOPx(o)->op_u.op_meth_sv = NULL;
965 pad_swipe(o->op_targ, 1);
972 SvREFCNT_dec(cSVOPo->op_sv);
973 cSVOPo->op_sv = NULL;
976 Even if op_clear does a pad_free for the target of the op,
977 pad_free doesn't actually remove the sv that exists in the pad;
978 instead it lives on. This results in that it could be reused as
979 a target later on when the pad was reallocated.
982 pad_swipe(o->op_targ,1);
992 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
997 if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR)
998 && (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)))
1001 if (cPADOPo->op_padix > 0) {
1002 pad_swipe(cPADOPo->op_padix, TRUE);
1003 cPADOPo->op_padix = 0;
1006 SvREFCNT_dec(cSVOPo->op_sv);
1007 cSVOPo->op_sv = NULL;
1011 PerlMemShared_free(cPVOPo->op_pv);
1012 cPVOPo->op_pv = NULL;
1016 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
1020 if ( (o->op_private & OPpSPLIT_ASSIGN) /* @array = split */
1021 && !(o->op_flags & OPf_STACKED)) /* @{expr} = split */
1023 if (o->op_private & OPpSPLIT_LEX)
1024 pad_free(cPMOPo->op_pmreplrootu.op_pmtargetoff);
1027 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
1029 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
1036 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
1037 op_free(cPMOPo->op_code_list);
1038 cPMOPo->op_code_list = NULL;
1039 forget_pmop(cPMOPo);
1040 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
1041 /* we use the same protection as the "SAFE" version of the PM_ macros
1042 * here since sv_clean_all might release some PMOPs
1043 * after PL_regex_padav has been cleared
1044 * and the clearing of PL_regex_padav needs to
1045 * happen before sv_clean_all
1048 if(PL_regex_pad) { /* We could be in destruction */
1049 const IV offset = (cPMOPo)->op_pmoffset;
1050 ReREFCNT_dec(PM_GETRE(cPMOPo));
1051 PL_regex_pad[offset] = &PL_sv_undef;
1052 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
1056 ReREFCNT_dec(PM_GETRE(cPMOPo));
1057 PM_SETRE(cPMOPo, NULL);
1063 PerlMemShared_free(cUNOP_AUXo->op_aux);
1068 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
1069 UV actions = items->uv;
1071 bool is_hash = FALSE;
1074 switch (actions & MDEREF_ACTION_MASK) {
1077 actions = (++items)->uv;
1080 case MDEREF_HV_padhv_helem:
1082 case MDEREF_AV_padav_aelem:
1083 pad_free((++items)->pad_offset);
1086 case MDEREF_HV_gvhv_helem:
1088 case MDEREF_AV_gvav_aelem:
1090 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1092 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1096 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1098 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1100 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1102 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1104 goto do_vivify_rv2xv_elem;
1106 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1108 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1109 pad_free((++items)->pad_offset);
1110 goto do_vivify_rv2xv_elem;
1112 case MDEREF_HV_pop_rv2hv_helem:
1113 case MDEREF_HV_vivify_rv2hv_helem:
1115 do_vivify_rv2xv_elem:
1116 case MDEREF_AV_pop_rv2av_aelem:
1117 case MDEREF_AV_vivify_rv2av_aelem:
1119 switch (actions & MDEREF_INDEX_MASK) {
1120 case MDEREF_INDEX_none:
1123 case MDEREF_INDEX_const:
1127 pad_swipe((++items)->pad_offset, 1);
1129 SvREFCNT_dec((++items)->sv);
1135 case MDEREF_INDEX_padsv:
1136 pad_free((++items)->pad_offset);
1138 case MDEREF_INDEX_gvsv:
1140 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1142 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1147 if (actions & MDEREF_FLAG_last)
1160 actions >>= MDEREF_SHIFT;
1163 /* start of malloc is at op_aux[-1], where the length is
1165 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1170 if (o->op_targ > 0) {
1171 pad_free(o->op_targ);
1177 S_cop_free(pTHX_ COP* cop)
1179 PERL_ARGS_ASSERT_COP_FREE;
1182 if (! specialWARN(cop->cop_warnings))
1183 PerlMemShared_free(cop->cop_warnings);
1184 cophh_free(CopHINTHASH_get(cop));
1185 if (PL_curcop == cop)
1190 S_forget_pmop(pTHX_ PMOP *const o
1193 HV * const pmstash = PmopSTASH(o);
1195 PERL_ARGS_ASSERT_FORGET_PMOP;
1197 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1198 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1200 PMOP **const array = (PMOP**) mg->mg_ptr;
1201 U32 count = mg->mg_len / sizeof(PMOP**);
1205 if (array[i] == o) {
1206 /* Found it. Move the entry at the end to overwrite it. */
1207 array[i] = array[--count];
1208 mg->mg_len = count * sizeof(PMOP**);
1209 /* Could realloc smaller at this point always, but probably
1210 not worth it. Probably worth free()ing if we're the
1213 Safefree(mg->mg_ptr);
1226 S_find_and_forget_pmops(pTHX_ OP *o)
1228 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1230 if (o->op_flags & OPf_KIDS) {
1231 OP *kid = cUNOPo->op_first;
1233 switch (kid->op_type) {
1238 forget_pmop((PMOP*)kid);
1240 find_and_forget_pmops(kid);
1241 kid = OpSIBLING(kid);
1247 =for apidoc Am|void|op_null|OP *o
1249 Neutralizes an op when it is no longer needed, but is still linked to from
1256 Perl_op_null(pTHX_ OP *o)
1260 PERL_ARGS_ASSERT_OP_NULL;
1262 if (o->op_type == OP_NULL)
1265 o->op_targ = o->op_type;
1266 OpTYPE_set(o, OP_NULL);
1270 Perl_op_refcnt_lock(pTHX)
1271 PERL_TSA_ACQUIRE(PL_op_mutex)
1276 PERL_UNUSED_CONTEXT;
1281 Perl_op_refcnt_unlock(pTHX)
1282 PERL_TSA_RELEASE(PL_op_mutex)
1287 PERL_UNUSED_CONTEXT;
1293 =for apidoc op_sibling_splice
1295 A general function for editing the structure of an existing chain of
1296 op_sibling nodes. By analogy with the perl-level C<splice()> function, allows
1297 you to delete zero or more sequential nodes, replacing them with zero or
1298 more different nodes. Performs the necessary op_first/op_last
1299 housekeeping on the parent node and op_sibling manipulation on the
1300 children. The last deleted node will be marked as as the last node by
1301 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1303 Note that op_next is not manipulated, and nodes are not freed; that is the
1304 responsibility of the caller. It also won't create a new list op for an
1305 empty list etc; use higher-level functions like op_append_elem() for that.
1307 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
1308 the splicing doesn't affect the first or last op in the chain.
1310 C<start> is the node preceding the first node to be spliced. Node(s)
1311 following it will be deleted, and ops will be inserted after it. If it is
1312 C<NULL>, the first node onwards is deleted, and nodes are inserted at the
1315 C<del_count> is the number of nodes to delete. If zero, no nodes are deleted.
1316 If -1 or greater than or equal to the number of remaining kids, all
1317 remaining kids are deleted.
1319 C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
1320 If C<NULL>, no nodes are inserted.
1322 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1327 action before after returns
1328 ------ ----- ----- -------
1331 splice(P, A, 2, X-Y-Z) | | B-C
1335 splice(P, NULL, 1, X-Y) | | A
1339 splice(P, NULL, 3, NULL) | | A-B-C
1343 splice(P, B, 0, X-Y) | | NULL
1347 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1348 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
1354 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1358 OP *last_del = NULL;
1359 OP *last_ins = NULL;
1362 first = OpSIBLING(start);
1366 first = cLISTOPx(parent)->op_first;
1368 assert(del_count >= -1);
1370 if (del_count && first) {
1372 while (--del_count && OpHAS_SIBLING(last_del))
1373 last_del = OpSIBLING(last_del);
1374 rest = OpSIBLING(last_del);
1375 OpLASTSIB_set(last_del, NULL);
1382 while (OpHAS_SIBLING(last_ins))
1383 last_ins = OpSIBLING(last_ins);
1384 OpMAYBESIB_set(last_ins, rest, NULL);
1390 OpMAYBESIB_set(start, insert, NULL);
1395 cLISTOPx(parent)->op_first = insert;
1397 parent->op_flags |= OPf_KIDS;
1399 parent->op_flags &= ~OPf_KIDS;
1403 /* update op_last etc */
1410 /* ought to use OP_CLASS(parent) here, but that can't handle
1411 * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1413 type = parent->op_type;
1414 if (type == OP_CUSTOM) {
1416 type = XopENTRYCUSTOM(parent, xop_class);
1419 if (type == OP_NULL)
1420 type = parent->op_targ;
1421 type = PL_opargs[type] & OA_CLASS_MASK;
1424 lastop = last_ins ? last_ins : start ? start : NULL;
1425 if ( type == OA_BINOP
1426 || type == OA_LISTOP
1430 cLISTOPx(parent)->op_last = lastop;
1433 OpLASTSIB_set(lastop, parent);
1435 return last_del ? first : NULL;
1438 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1442 #ifdef PERL_OP_PARENT
1445 =for apidoc op_parent
1447 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1448 This function is only available on perls built with C<-DPERL_OP_PARENT>.
1454 Perl_op_parent(OP *o)
1456 PERL_ARGS_ASSERT_OP_PARENT;
1457 while (OpHAS_SIBLING(o))
1459 return o->op_sibparent;
1465 /* replace the sibling following start with a new UNOP, which becomes
1466 * the parent of the original sibling; e.g.
1468 * op_sibling_newUNOP(P, A, unop-args...)
1476 * where U is the new UNOP.
1478 * parent and start args are the same as for op_sibling_splice();
1479 * type and flags args are as newUNOP().
1481 * Returns the new UNOP.
1485 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1489 kid = op_sibling_splice(parent, start, 1, NULL);
1490 newop = newUNOP(type, flags, kid);
1491 op_sibling_splice(parent, start, 0, newop);
1496 /* lowest-level newLOGOP-style function - just allocates and populates
1497 * the struct. Higher-level stuff should be done by S_new_logop() /
1498 * newLOGOP(). This function exists mainly to avoid op_first assignment
1499 * being spread throughout this file.
1503 Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1508 NewOp(1101, logop, 1, LOGOP);
1509 OpTYPE_set(logop, type);
1510 logop->op_first = first;
1511 logop->op_other = other;
1512 logop->op_flags = OPf_KIDS;
1513 while (kid && OpHAS_SIBLING(kid))
1514 kid = OpSIBLING(kid);
1516 OpLASTSIB_set(kid, (OP*)logop);
1521 /* Contextualizers */
1524 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1526 Applies a syntactic context to an op tree representing an expression.
1527 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1528 or C<G_VOID> to specify the context to apply. The modified op tree
1535 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1537 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1539 case G_SCALAR: return scalar(o);
1540 case G_ARRAY: return list(o);
1541 case G_VOID: return scalarvoid(o);
1543 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1550 =for apidoc Am|OP*|op_linklist|OP *o
1551 This function is the implementation of the L</LINKLIST> macro. It should
1552 not be called directly.
1558 Perl_op_linklist(pTHX_ OP *o)
1562 PERL_ARGS_ASSERT_OP_LINKLIST;
1567 /* establish postfix order */
1568 first = cUNOPo->op_first;
1571 o->op_next = LINKLIST(first);
1574 OP *sibl = OpSIBLING(kid);
1576 kid->op_next = LINKLIST(sibl);
1591 S_scalarkids(pTHX_ OP *o)
1593 if (o && o->op_flags & OPf_KIDS) {
1595 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1602 S_scalarboolean(pTHX_ OP *o)
1604 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1606 if ((o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST &&
1607 !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) ||
1608 (o->op_type == OP_NOT && cUNOPo->op_first->op_type == OP_SASSIGN &&
1609 cBINOPx(cUNOPo->op_first)->op_first->op_type == OP_CONST &&
1610 !(cBINOPx(cUNOPo->op_first)->op_first->op_flags & OPf_SPECIAL))) {
1611 if (ckWARN(WARN_SYNTAX)) {
1612 const line_t oldline = CopLINE(PL_curcop);
1614 if (PL_parser && PL_parser->copline != NOLINE) {
1615 /* This ensures that warnings are reported at the first line
1616 of the conditional, not the last. */
1617 CopLINE_set(PL_curcop, PL_parser->copline);
1619 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1620 CopLINE_set(PL_curcop, oldline);
1627 S_op_varname_subscript(pTHX_ const OP *o, int subscript_type)
1630 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1631 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1633 const char funny = o->op_type == OP_PADAV
1634 || o->op_type == OP_RV2AV ? '@' : '%';
1635 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1637 if (cUNOPo->op_first->op_type != OP_GV
1638 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1640 return varname(gv, funny, 0, NULL, 0, subscript_type);
1643 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type);
1648 S_op_varname(pTHX_ const OP *o)
1650 return S_op_varname_subscript(aTHX_ o, 1);
1654 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1655 { /* or not so pretty :-) */
1656 if (o->op_type == OP_CONST) {
1658 if (SvPOK(*retsv)) {
1660 *retsv = sv_newmortal();
1661 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1662 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1664 else if (!SvOK(*retsv))
1667 else *retpv = "...";
1671 S_scalar_slice_warning(pTHX_ const OP *o)
1674 const bool h = o->op_type == OP_HSLICE
1675 || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE);
1681 SV *keysv = NULL; /* just to silence compiler warnings */
1682 const char *key = NULL;
1684 if (!(o->op_private & OPpSLICEWARNING))
1686 if (PL_parser && PL_parser->error_count)
1687 /* This warning can be nonsensical when there is a syntax error. */
1690 kid = cLISTOPo->op_first;
1691 kid = OpSIBLING(kid); /* get past pushmark */
1692 /* weed out false positives: any ops that can return lists */
1693 switch (kid->op_type) {
1719 /* Don't warn if we have a nulled list either. */
1720 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1723 assert(OpSIBLING(kid));
1724 name = S_op_varname(aTHX_ OpSIBLING(kid));
1725 if (!name) /* XS module fiddling with the op tree */
1727 S_op_pretty(aTHX_ kid, &keysv, &key);
1728 assert(SvPOK(name));
1729 sv_chop(name,SvPVX(name)+1);
1731 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1732 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1733 "Scalar value @%" SVf "%c%s%c better written as $%" SVf
1735 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1736 lbrack, key, rbrack);
1738 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1739 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1740 "Scalar value @%" SVf "%c%" SVf "%c better written as $%"
1742 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1743 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1747 Perl_scalar(pTHX_ OP *o)
1751 /* assumes no premature commitment */
1752 if (!o || (PL_parser && PL_parser->error_count)
1753 || (o->op_flags & OPf_WANT)
1754 || o->op_type == OP_RETURN)
1759 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1761 switch (o->op_type) {
1763 scalar(cBINOPo->op_first);
1764 if (o->op_private & OPpREPEAT_DOLIST) {
1765 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1766 assert(kid->op_type == OP_PUSHMARK);
1767 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1768 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1769 o->op_private &=~ OPpREPEAT_DOLIST;
1776 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
1786 if (o->op_flags & OPf_KIDS) {
1787 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
1793 kid = cLISTOPo->op_first;
1795 kid = OpSIBLING(kid);
1798 OP *sib = OpSIBLING(kid);
1799 if (sib && kid->op_type != OP_LEAVEWHEN
1800 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
1801 || ( sib->op_targ != OP_NEXTSTATE
1802 && sib->op_targ != OP_DBSTATE )))
1808 PL_curcop = &PL_compiling;
1813 kid = cLISTOPo->op_first;
1816 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1821 /* Warn about scalar context */
1822 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1823 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1826 const char *key = NULL;
1828 /* This warning can be nonsensical when there is a syntax error. */
1829 if (PL_parser && PL_parser->error_count)
1832 if (!ckWARN(WARN_SYNTAX)) break;
1834 kid = cLISTOPo->op_first;
1835 kid = OpSIBLING(kid); /* get past pushmark */
1836 assert(OpSIBLING(kid));
1837 name = S_op_varname(aTHX_ OpSIBLING(kid));
1838 if (!name) /* XS module fiddling with the op tree */
1840 S_op_pretty(aTHX_ kid, &keysv, &key);
1841 assert(SvPOK(name));
1842 sv_chop(name,SvPVX(name)+1);
1844 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1845 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1846 "%%%" SVf "%c%s%c in scalar context better written "
1847 "as $%" SVf "%c%s%c",
1848 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1849 lbrack, key, rbrack);
1851 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1852 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1853 "%%%" SVf "%c%" SVf "%c in scalar context better "
1854 "written as $%" SVf "%c%" SVf "%c",
1855 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1856 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1863 Perl_scalarvoid(pTHX_ OP *arg)
1869 SSize_t defer_stack_alloc = 0;
1870 SSize_t defer_ix = -1;
1871 OP **defer_stack = NULL;
1874 PERL_ARGS_ASSERT_SCALARVOID;
1877 SV *useless_sv = NULL;
1878 const char* useless = NULL;
1880 if (o->op_type == OP_NEXTSTATE
1881 || o->op_type == OP_DBSTATE
1882 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1883 || o->op_targ == OP_DBSTATE)))
1884 PL_curcop = (COP*)o; /* for warning below */
1886 /* assumes no premature commitment */
1887 want = o->op_flags & OPf_WANT;
1888 if ((want && want != OPf_WANT_SCALAR)
1889 || (PL_parser && PL_parser->error_count)
1890 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1895 if ((o->op_private & OPpTARGET_MY)
1896 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1898 /* newASSIGNOP has already applied scalar context, which we
1899 leave, as if this op is inside SASSIGN. */
1903 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1905 switch (o->op_type) {
1907 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1911 if (o->op_flags & OPf_STACKED)
1913 if (o->op_type == OP_REPEAT)
1914 scalar(cBINOPo->op_first);
1917 if (o->op_private == 4)
1952 case OP_GETSOCKNAME:
1953 case OP_GETPEERNAME:
1958 case OP_GETPRIORITY:
1983 useless = OP_DESC(o);
1993 case OP_AELEMFAST_LEX:
1997 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1998 /* Otherwise it's "Useless use of grep iterator" */
1999 useless = OP_DESC(o);
2003 if (!(o->op_private & OPpSPLIT_ASSIGN))
2004 useless = OP_DESC(o);
2008 kid = cUNOPo->op_first;
2009 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
2010 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
2013 useless = "negative pattern binding (!~)";
2017 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
2018 useless = "non-destructive substitution (s///r)";
2022 useless = "non-destructive transliteration (tr///r)";
2029 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
2030 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
2031 useless = "a variable";
2036 if (cSVOPo->op_private & OPpCONST_STRICT)
2037 no_bareword_allowed(o);
2039 if (ckWARN(WARN_VOID)) {
2041 /* don't warn on optimised away booleans, eg
2042 * use constant Foo, 5; Foo || print; */
2043 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
2045 /* the constants 0 and 1 are permitted as they are
2046 conventionally used as dummies in constructs like
2047 1 while some_condition_with_side_effects; */
2048 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
2050 else if (SvPOK(sv)) {
2051 SV * const dsv = newSVpvs("");
2053 = Perl_newSVpvf(aTHX_
2055 pv_pretty(dsv, SvPVX_const(sv),
2056 SvCUR(sv), 32, NULL, NULL,
2058 | PERL_PV_ESCAPE_NOCLEAR
2059 | PERL_PV_ESCAPE_UNI_DETECT));
2060 SvREFCNT_dec_NN(dsv);
2062 else if (SvOK(sv)) {
2063 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%" SVf ")", SVfARG(sv));
2066 useless = "a constant (undef)";
2069 op_null(o); /* don't execute or even remember it */
2073 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */
2077 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */
2081 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */
2085 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */
2090 UNOP *refgen, *rv2cv;
2093 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2096 rv2gv = ((BINOP *)o)->op_last;
2097 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2100 refgen = (UNOP *)((BINOP *)o)->op_first;
2102 if (!refgen || (refgen->op_type != OP_REFGEN
2103 && refgen->op_type != OP_SREFGEN))
2106 exlist = (LISTOP *)refgen->op_first;
2107 if (!exlist || exlist->op_type != OP_NULL
2108 || exlist->op_targ != OP_LIST)
2111 if (exlist->op_first->op_type != OP_PUSHMARK
2112 && exlist->op_first != exlist->op_last)
2115 rv2cv = (UNOP*)exlist->op_last;
2117 if (rv2cv->op_type != OP_RV2CV)
2120 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2121 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2122 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2124 o->op_private |= OPpASSIGN_CV_TO_GV;
2125 rv2gv->op_private |= OPpDONT_INIT_GV;
2126 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2138 kid = cLOGOPo->op_first;
2139 if (kid->op_type == OP_NOT
2140 && (kid->op_flags & OPf_KIDS)) {
2141 if (o->op_type == OP_AND) {
2142 OpTYPE_set(o, OP_OR);
2144 OpTYPE_set(o, OP_AND);
2154 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2155 if (!(kid->op_flags & OPf_KIDS))
2162 if (o->op_flags & OPf_STACKED)
2169 if (!(o->op_flags & OPf_KIDS))
2180 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2181 if (!(kid->op_flags & OPf_KIDS))
2187 /* If the first kid after pushmark is something that the padrange
2188 optimisation would reject, then null the list and the pushmark.
2190 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2191 && ( !(kid = OpSIBLING(kid))
2192 || ( kid->op_type != OP_PADSV
2193 && kid->op_type != OP_PADAV
2194 && kid->op_type != OP_PADHV)
2195 || kid->op_private & ~OPpLVAL_INTRO
2196 || !(kid = OpSIBLING(kid))
2197 || ( kid->op_type != OP_PADSV
2198 && kid->op_type != OP_PADAV
2199 && kid->op_type != OP_PADHV)
2200 || kid->op_private & ~OPpLVAL_INTRO)
2202 op_null(cUNOPo->op_first); /* NULL the pushmark */
2203 op_null(o); /* NULL the list */
2215 /* mortalise it, in case warnings are fatal. */
2216 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2217 "Useless use of %" SVf " in void context",
2218 SVfARG(sv_2mortal(useless_sv)));
2221 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2222 "Useless use of %s in void context",
2225 } while ( (o = POP_DEFERRED_OP()) );
2227 Safefree(defer_stack);
2233 S_listkids(pTHX_ OP *o)
2235 if (o && o->op_flags & OPf_KIDS) {
2237 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2244 Perl_list(pTHX_ OP *o)
2248 /* assumes no premature commitment */
2249 if (!o || (o->op_flags & OPf_WANT)
2250 || (PL_parser && PL_parser->error_count)
2251 || o->op_type == OP_RETURN)
2256 if ((o->op_private & OPpTARGET_MY)
2257 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2259 return o; /* As if inside SASSIGN */
2262 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2264 switch (o->op_type) {
2266 list(cBINOPo->op_first);
2269 if (o->op_private & OPpREPEAT_DOLIST
2270 && !(o->op_flags & OPf_STACKED))
2272 list(cBINOPo->op_first);
2273 kid = cBINOPo->op_last;
2274 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2275 && SvIVX(kSVOP_sv) == 1)
2277 op_null(o); /* repeat */
2278 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2280 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2287 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2295 if (!(o->op_flags & OPf_KIDS))
2297 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2298 list(cBINOPo->op_first);
2299 return gen_constant_list(o);
2305 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2306 op_null(cUNOPo->op_first); /* NULL the pushmark */
2307 op_null(o); /* NULL the list */
2312 kid = cLISTOPo->op_first;
2314 kid = OpSIBLING(kid);
2317 OP *sib = OpSIBLING(kid);
2318 if (sib && kid->op_type != OP_LEAVEWHEN)
2324 PL_curcop = &PL_compiling;
2328 kid = cLISTOPo->op_first;
2335 S_scalarseq(pTHX_ OP *o)
2338 const OPCODE type = o->op_type;
2340 if (type == OP_LINESEQ || type == OP_SCOPE ||
2341 type == OP_LEAVE || type == OP_LEAVETRY)
2344 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2345 if ((sib = OpSIBLING(kid))
2346 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2347 || ( sib->op_targ != OP_NEXTSTATE
2348 && sib->op_targ != OP_DBSTATE )))
2353 PL_curcop = &PL_compiling;
2355 o->op_flags &= ~OPf_PARENS;
2356 if (PL_hints & HINT_BLOCK_SCOPE)
2357 o->op_flags |= OPf_PARENS;
2360 o = newOP(OP_STUB, 0);
2365 S_modkids(pTHX_ OP *o, I32 type)
2367 if (o && o->op_flags & OPf_KIDS) {
2369 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2370 op_lvalue(kid, type);
2376 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2377 * const fields. Also, convert CONST keys to HEK-in-SVs.
2378 * rop is the op that retrieves the hash;
2379 * key_op is the first key
2383 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op)
2389 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2391 if (rop->op_first->op_type == OP_PADSV)
2392 /* @$hash{qw(keys here)} */
2393 rop = (UNOP*)rop->op_first;
2395 /* @{$hash}{qw(keys here)} */
2396 if (rop->op_first->op_type == OP_SCOPE
2397 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2399 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2406 lexname = NULL; /* just to silence compiler warnings */
2407 fields = NULL; /* just to silence compiler warnings */
2411 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2412 SvPAD_TYPED(lexname))
2413 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2414 && isGV(*fields) && GvHV(*fields);
2416 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2418 if (key_op->op_type != OP_CONST)
2420 svp = cSVOPx_svp(key_op);
2422 /* make sure it's not a bareword under strict subs */
2423 if (key_op->op_private & OPpCONST_BARE &&
2424 key_op->op_private & OPpCONST_STRICT)
2426 no_bareword_allowed((OP*)key_op);
2429 /* Make the CONST have a shared SV */
2430 if ( !SvIsCOW_shared_hash(sv = *svp)
2431 && SvTYPE(sv) < SVt_PVMG
2436 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2437 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2438 SvREFCNT_dec_NN(sv);
2443 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2445 Perl_croak(aTHX_ "No such class field \"%" SVf "\" "
2446 "in variable %" PNf " of type %" HEKf,
2447 SVfARG(*svp), PNfARG(lexname),
2448 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2454 /* do all the final processing on an optree (e.g. running the peephole
2455 * optimiser on it), then attach it to cv (if cv is non-null)
2459 S_process_optree(pTHX_ CV *cv, OP *optree, OP* start)
2463 /* XXX for some reason, evals, require and main optrees are
2464 * never attached to their CV; instead they just hang off
2465 * PL_main_root + PL_main_start or PL_eval_root + PL_eval_start
2466 * and get manually freed when appropriate */
2468 startp = &CvSTART(cv);
2470 startp = PL_in_eval? &PL_eval_start : &PL_main_start;
2473 optree->op_private |= OPpREFCOUNTED;
2474 OpREFCNT_set(optree, 1);
2476 finalize_optree(optree);
2477 S_prune_chain_head(startp);
2480 /* now that optimizer has done its work, adjust pad values */
2481 pad_tidy(optree->op_type == OP_LEAVEWRITE ? padtidy_FORMAT
2482 : CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
2488 =for apidoc finalize_optree
2490 This function finalizes the optree. Should be called directly after
2491 the complete optree is built. It does some additional
2492 checking which can't be done in the normal C<ck_>xxx functions and makes
2493 the tree thread-safe.
2498 Perl_finalize_optree(pTHX_ OP* o)
2500 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
2503 SAVEVPTR(PL_curcop);
2511 /* Relocate sv to the pad for thread safety.
2512 * Despite being a "constant", the SV is written to,
2513 * for reference counts, sv_upgrade() etc. */
2514 PERL_STATIC_INLINE void
2515 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
2518 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
2520 ix = pad_alloc(OP_CONST, SVf_READONLY);
2521 SvREFCNT_dec(PAD_SVl(ix));
2522 PAD_SETSV(ix, *svp);
2523 /* XXX I don't know how this isn't readonly already. */
2524 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
2532 S_finalize_op(pTHX_ OP* o)
2534 PERL_ARGS_ASSERT_FINALIZE_OP;
2536 assert(o->op_type != OP_FREED);
2538 switch (o->op_type) {
2541 PL_curcop = ((COP*)o); /* for warnings */
2544 if (OpHAS_SIBLING(o)) {
2545 OP *sib = OpSIBLING(o);
2546 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
2547 && ckWARN(WARN_EXEC)
2548 && OpHAS_SIBLING(sib))
2550 const OPCODE type = OpSIBLING(sib)->op_type;
2551 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
2552 const line_t oldline = CopLINE(PL_curcop);
2553 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
2554 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2555 "Statement unlikely to be reached");
2556 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2557 "\t(Maybe you meant system() when you said exec()?)\n");
2558 CopLINE_set(PL_curcop, oldline);
2565 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
2566 GV * const gv = cGVOPo_gv;
2567 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
2568 /* XXX could check prototype here instead of just carping */
2569 SV * const sv = sv_newmortal();
2570 gv_efullname3(sv, gv, NULL);
2571 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
2572 "%" SVf "() called too early to check prototype",
2579 if (cSVOPo->op_private & OPpCONST_STRICT)
2580 no_bareword_allowed(o);
2584 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
2589 /* Relocate all the METHOP's SVs to the pad for thread safety. */
2590 case OP_METHOD_NAMED:
2591 case OP_METHOD_SUPER:
2592 case OP_METHOD_REDIR:
2593 case OP_METHOD_REDIR_SUPER:
2594 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
2603 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
2606 rop = (UNOP*)((BINOP*)o)->op_first;
2611 S_scalar_slice_warning(aTHX_ o);
2615 kid = OpSIBLING(cLISTOPo->op_first);
2616 if (/* I bet there's always a pushmark... */
2617 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
2618 && OP_TYPE_ISNT_NN(kid, OP_CONST))
2623 key_op = (SVOP*)(kid->op_type == OP_CONST
2625 : OpSIBLING(kLISTOP->op_first));
2627 rop = (UNOP*)((LISTOP*)o)->op_last;
2630 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
2632 S_check_hash_fields_and_hekify(aTHX_ rop, key_op);
2636 if (o->op_targ != OP_HSLICE && o->op_targ != OP_ASLICE)
2640 S_scalar_slice_warning(aTHX_ o);
2644 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
2645 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
2652 if (o->op_flags & OPf_KIDS) {
2656 /* check that op_last points to the last sibling, and that
2657 * the last op_sibling/op_sibparent field points back to the
2658 * parent, and that the only ops with KIDS are those which are
2659 * entitled to them */
2660 U32 type = o->op_type;
2664 if (type == OP_NULL) {
2666 /* ck_glob creates a null UNOP with ex-type GLOB
2667 * (which is a list op. So pretend it wasn't a listop */
2668 if (type == OP_GLOB)
2671 family = PL_opargs[type] & OA_CLASS_MASK;
2673 has_last = ( family == OA_BINOP
2674 || family == OA_LISTOP
2675 || family == OA_PMOP
2676 || family == OA_LOOP
2678 assert( has_last /* has op_first and op_last, or ...
2679 ... has (or may have) op_first: */
2680 || family == OA_UNOP
2681 || family == OA_UNOP_AUX
2682 || family == OA_LOGOP
2683 || family == OA_BASEOP_OR_UNOP
2684 || family == OA_FILESTATOP
2685 || family == OA_LOOPEXOP
2686 || family == OA_METHOP
2687 || type == OP_CUSTOM
2688 || type == OP_NULL /* new_logop does this */
2691 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2692 # ifdef PERL_OP_PARENT
2693 if (!OpHAS_SIBLING(kid)) {
2695 assert(kid == cLISTOPo->op_last);
2696 assert(kid->op_sibparent == o);
2699 if (has_last && !OpHAS_SIBLING(kid))
2700 assert(kid == cLISTOPo->op_last);
2705 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
2711 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
2713 Propagate lvalue ("modifiable") context to an op and its children.
2714 C<type> represents the context type, roughly based on the type of op that
2715 would do the modifying, although C<local()> is represented by C<OP_NULL>,
2716 because it has no op type of its own (it is signalled by a flag on
2719 This function detects things that can't be modified, such as C<$x+1>, and
2720 generates errors for them. For example, C<$x+1 = 2> would cause it to be
2721 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
2723 It also flags things that need to behave specially in an lvalue context,
2724 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
2730 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
2733 PadnameLVALUE_on(pn);
2734 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
2736 /* RT #127786: cv can be NULL due to an eval within the DB package
2737 * called from an anon sub - anon subs don't have CvOUTSIDE() set
2738 * unless they contain an eval, but calling eval within DB
2739 * pretends the eval was done in the caller's scope.
2743 assert(CvPADLIST(cv));
2745 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
2746 assert(PadnameLEN(pn));
2747 PadnameLVALUE_on(pn);
2752 S_vivifies(const OPCODE type)
2755 case OP_RV2AV: case OP_ASLICE:
2756 case OP_RV2HV: case OP_KVASLICE:
2757 case OP_RV2SV: case OP_HSLICE:
2758 case OP_AELEMFAST: case OP_KVHSLICE:
2767 S_lvref(pTHX_ OP *o, I32 type)
2771 switch (o->op_type) {
2773 for (kid = OpSIBLING(cUNOPo->op_first); kid;
2774 kid = OpSIBLING(kid))
2775 S_lvref(aTHX_ kid, type);
2780 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2781 o->op_flags |= OPf_STACKED;
2782 if (o->op_flags & OPf_PARENS) {
2783 if (o->op_private & OPpLVAL_INTRO) {
2784 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2785 "localized parenthesized array in list assignment"));
2789 OpTYPE_set(o, OP_LVAVREF);
2790 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
2791 o->op_flags |= OPf_MOD|OPf_REF;
2794 o->op_private |= OPpLVREF_AV;
2797 kid = cUNOPo->op_first;
2798 if (kid->op_type == OP_NULL)
2799 kid = cUNOPx(OpSIBLING(kUNOP->op_first))
2801 o->op_private = OPpLVREF_CV;
2802 if (kid->op_type == OP_GV)
2803 o->op_flags |= OPf_STACKED;
2804 else if (kid->op_type == OP_PADCV) {
2805 o->op_targ = kid->op_targ;
2807 op_free(cUNOPo->op_first);
2808 cUNOPo->op_first = NULL;
2809 o->op_flags &=~ OPf_KIDS;
2814 if (o->op_flags & OPf_PARENS) {
2816 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2817 "parenthesized hash in list assignment"));
2820 o->op_private |= OPpLVREF_HV;
2824 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2825 o->op_flags |= OPf_STACKED;
2828 if (o->op_flags & OPf_PARENS) goto parenhash;
2829 o->op_private |= OPpLVREF_HV;
2832 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2835 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2836 if (o->op_flags & OPf_PARENS) goto slurpy;
2837 o->op_private |= OPpLVREF_AV;
2841 o->op_private |= OPpLVREF_ELEM;
2842 o->op_flags |= OPf_STACKED;
2846 OpTYPE_set(o, OP_LVREFSLICE);
2847 o->op_private &= OPpLVAL_INTRO;
2850 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2852 else if (!(o->op_flags & OPf_KIDS))
2854 if (o->op_targ != OP_LIST) {
2855 S_lvref(aTHX_ cBINOPo->op_first, type);
2860 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) {
2861 assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
2862 S_lvref(aTHX_ kid, type);
2866 if (o->op_flags & OPf_PARENS)
2871 /* diag_listed_as: Can't modify reference to %s in %s assignment */
2872 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
2873 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
2879 OpTYPE_set(o, OP_LVREF);
2881 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
2882 if (type == OP_ENTERLOOP)
2883 o->op_private |= OPpLVREF_ITER;
2886 PERL_STATIC_INLINE bool
2887 S_potential_mod_type(I32 type)
2889 /* Types that only potentially result in modification. */
2890 return type == OP_GREPSTART || type == OP_ENTERSUB
2891 || type == OP_REFGEN || type == OP_LEAVESUBLV;
2895 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
2899 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
2902 if (!o || (PL_parser && PL_parser->error_count))
2905 if ((o->op_private & OPpTARGET_MY)
2906 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2911 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
2913 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
2915 switch (o->op_type) {
2920 if ((o->op_flags & OPf_PARENS))
2924 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
2925 !(o->op_flags & OPf_STACKED)) {
2926 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
2927 assert(cUNOPo->op_first->op_type == OP_NULL);
2928 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
2931 else { /* lvalue subroutine call */
2932 o->op_private |= OPpLVAL_INTRO;
2933 PL_modcount = RETURN_UNLIMITED_NUMBER;
2934 if (S_potential_mod_type(type)) {
2935 o->op_private |= OPpENTERSUB_INARGS;
2938 else { /* Compile-time error message: */
2939 OP *kid = cUNOPo->op_first;
2944 if (kid->op_type != OP_PUSHMARK) {
2945 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
2947 "panic: unexpected lvalue entersub "
2948 "args: type/targ %ld:%" UVuf,
2949 (long)kid->op_type, (UV)kid->op_targ);
2950 kid = kLISTOP->op_first;
2952 while (OpHAS_SIBLING(kid))
2953 kid = OpSIBLING(kid);
2954 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
2955 break; /* Postpone until runtime */
2958 kid = kUNOP->op_first;
2959 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
2960 kid = kUNOP->op_first;
2961 if (kid->op_type == OP_NULL)
2963 "Unexpected constant lvalue entersub "
2964 "entry via type/targ %ld:%" UVuf,
2965 (long)kid->op_type, (UV)kid->op_targ);
2966 if (kid->op_type != OP_GV) {
2973 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
2974 ? MUTABLE_CV(SvRV(gv))
2980 if (flags & OP_LVALUE_NO_CROAK)
2983 namesv = cv_name(cv, NULL, 0);
2984 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
2985 "subroutine call of &%" SVf " in %s",
2986 SVfARG(namesv), PL_op_desc[type]),
2994 if (flags & OP_LVALUE_NO_CROAK) return NULL;
2995 /* grep, foreach, subcalls, refgen */
2996 if (S_potential_mod_type(type))
2998 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2999 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
3002 type ? PL_op_desc[type] : "local"));
3015 case OP_RIGHT_SHIFT:
3024 if (!(o->op_flags & OPf_STACKED))
3030 if (o->op_flags & OPf_STACKED) {
3034 if (!(o->op_private & OPpREPEAT_DOLIST))
3037 const I32 mods = PL_modcount;
3038 modkids(cBINOPo->op_first, type);
3039 if (type != OP_AASSIGN)
3041 kid = cBINOPo->op_last;
3042 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
3043 const IV iv = SvIV(kSVOP_sv);
3044 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
3046 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
3049 PL_modcount = RETURN_UNLIMITED_NUMBER;
3055 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
3056 op_lvalue(kid, type);
3061 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
3062 PL_modcount = RETURN_UNLIMITED_NUMBER;
3063 return o; /* Treat \(@foo) like ordinary list. */
3067 if (scalar_mod_type(o, type))
3069 ref(cUNOPo->op_first, o->op_type);
3076 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
3077 if (type == OP_LEAVESUBLV && (
3078 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
3079 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
3081 o->op_private |= OPpMAYBE_LVSUB;
3085 PL_modcount = RETURN_UNLIMITED_NUMBER;
3090 if (type == OP_LEAVESUBLV)
3091 o->op_private |= OPpMAYBE_LVSUB;
3094 if (type == OP_LEAVESUBLV
3095 && (o->op_private & 3) + OP_EACH == OP_KEYS)
3096 o->op_private |= OPpMAYBE_LVSUB;
3099 PL_hints |= HINT_BLOCK_SCOPE;
3100 if (type == OP_LEAVESUBLV)
3101 o->op_private |= OPpMAYBE_LVSUB;
3105 ref(cUNOPo->op_first, o->op_type);
3109 PL_hints |= HINT_BLOCK_SCOPE;
3119 case OP_AELEMFAST_LEX:
3126 PL_modcount = RETURN_UNLIMITED_NUMBER;
3127 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
3128 return o; /* Treat \(@foo) like ordinary list. */
3129 if (scalar_mod_type(o, type))
3131 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
3132 && type == OP_LEAVESUBLV)
3133 o->op_private |= OPpMAYBE_LVSUB;
3137 if (!type) /* local() */
3138 Perl_croak(aTHX_ "Can't localize lexical variable %" PNf,
3139 PNfARG(PAD_COMPNAME(o->op_targ)));
3140 if (!(o->op_private & OPpLVAL_INTRO)
3141 || ( type != OP_SASSIGN && type != OP_AASSIGN
3142 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
3143 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
3151 if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type))
3155 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
3161 if (type == OP_LEAVESUBLV)
3162 o->op_private |= OPpMAYBE_LVSUB;
3163 if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) {
3164 /* substr and vec */
3165 /* If this op is in merely potential (non-fatal) modifiable
3166 context, then apply OP_ENTERSUB context to
3167 the kid op (to avoid croaking). Other-
3168 wise pass this op’s own type so the correct op is mentioned
3169 in error messages. */
3170 op_lvalue(OpSIBLING(cBINOPo->op_first),
3171 S_potential_mod_type(type)
3179 ref(cBINOPo->op_first, o->op_type);
3180 if (type == OP_ENTERSUB &&
3181 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
3182 o->op_private |= OPpLVAL_DEFER;
3183 if (type == OP_LEAVESUBLV)
3184 o->op_private |= OPpMAYBE_LVSUB;
3191 o->op_private |= OPpLVALUE;
3197 if (o->op_flags & OPf_KIDS)
3198 op_lvalue(cLISTOPo->op_last, type);
3203 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
3205 else if (!(o->op_flags & OPf_KIDS))
3208 if (o->op_targ != OP_LIST) {
3209 OP *sib = OpSIBLING(cLISTOPo->op_first);
3210 /* OP_TRANS and OP_TRANSR with argument have a weird optree
3217 * compared with things like OP_MATCH which have the argument
3223 * so handle specially to correctly get "Can't modify" croaks etc
3226 if (sib && (sib->op_type == OP_TRANS || sib->op_type == OP_TRANSR))
3228 /* this should trigger a "Can't modify transliteration" err */
3229 op_lvalue(sib, type);
3231 op_lvalue(cBINOPo->op_first, type);
3237 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3238 /* elements might be in void context because the list is
3239 in scalar context or because they are attribute sub calls */
3240 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
3241 op_lvalue(kid, type);
3249 if (type == OP_LEAVESUBLV
3250 || !S_vivifies(cLOGOPo->op_first->op_type))
3251 op_lvalue(cLOGOPo->op_first, type);
3252 if (type == OP_LEAVESUBLV
3253 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
3254 op_lvalue(OpSIBLING(cLOGOPo->op_first), type);
3258 if (type == OP_NULL) { /* local */
3260 if (!FEATURE_MYREF_IS_ENABLED)
3261 Perl_croak(aTHX_ "The experimental declared_refs "
3262 "feature is not enabled");
3263 Perl_ck_warner_d(aTHX_
3264 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
3265 "Declaring references is experimental");
3266 op_lvalue(cUNOPo->op_first, OP_NULL);
3269 if (type != OP_AASSIGN && type != OP_SASSIGN
3270 && type != OP_ENTERLOOP)
3272 /* Don’t bother applying lvalue context to the ex-list. */
3273 kid = cUNOPx(cUNOPo->op_first)->op_first;
3274 assert (!OpHAS_SIBLING(kid));
3277 if (type == OP_NULL) /* local */
3279 if (type != OP_AASSIGN) goto nomod;
3280 kid = cUNOPo->op_first;
3283 const U8 ec = PL_parser ? PL_parser->error_count : 0;
3284 S_lvref(aTHX_ kid, type);
3285 if (!PL_parser || PL_parser->error_count == ec) {
3286 if (!FEATURE_REFALIASING_IS_ENABLED)
3288 "Experimental aliasing via reference not enabled");
3289 Perl_ck_warner_d(aTHX_
3290 packWARN(WARN_EXPERIMENTAL__REFALIASING),
3291 "Aliasing via reference is experimental");
3294 if (o->op_type == OP_REFGEN)
3295 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
3300 if ((o->op_private & OPpSPLIT_ASSIGN)) {
3301 /* This is actually @array = split. */
3302 PL_modcount = RETURN_UNLIMITED_NUMBER;
3308 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
3312 /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that
3313 their argument is a filehandle; thus \stat(".") should not set
3315 if (type == OP_REFGEN &&
3316 PL_check[o->op_type] == Perl_ck_ftst)
3319 if (type != OP_LEAVESUBLV)
3320 o->op_flags |= OPf_MOD;
3322 if (type == OP_AASSIGN || type == OP_SASSIGN)
3323 o->op_flags |= OPf_SPECIAL
3324 |(o->op_type == OP_ENTERSUB ? 0 : OPf_REF);
3325 else if (!type) { /* local() */
3328 o->op_private |= OPpLVAL_INTRO;
3329 o->op_flags &= ~OPf_SPECIAL;
3330 PL_hints |= HINT_BLOCK_SCOPE;
3335 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
3336 "Useless localization of %s", OP_DESC(o));
3339 else if (type != OP_GREPSTART && type != OP_ENTERSUB
3340 && type != OP_LEAVESUBLV && o->op_type != OP_ENTERSUB)
3341 o->op_flags |= OPf_REF;
3346 S_scalar_mod_type(const OP *o, I32 type)
3351 if (o && o->op_type == OP_RV2GV)
3375 case OP_RIGHT_SHIFT:
3404 S_is_handle_constructor(const OP *o, I32 numargs)
3406 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
3408 switch (o->op_type) {
3416 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
3429 S_refkids(pTHX_ OP *o, I32 type)
3431 if (o && o->op_flags & OPf_KIDS) {
3433 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3440 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
3445 PERL_ARGS_ASSERT_DOREF;
3447 if (PL_parser && PL_parser->error_count)
3450 switch (o->op_type) {
3452 if ((type == OP_EXISTS || type == OP_DEFINED) &&
3453 !(o->op_flags & OPf_STACKED)) {
3454 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
3455 assert(cUNOPo->op_first->op_type == OP_NULL);
3456 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
3457 o->op_flags |= OPf_SPECIAL;
3459 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
3460 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3461 : type == OP_RV2HV ? OPpDEREF_HV
3463 o->op_flags |= OPf_MOD;
3469 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
3470 doref(kid, type, set_op_ref);
3473 if (type == OP_DEFINED)
3474 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3475 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3478 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3479 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3480 : type == OP_RV2HV ? OPpDEREF_HV
3482 o->op_flags |= OPf_MOD;
3489 o->op_flags |= OPf_REF;
3492 if (type == OP_DEFINED)
3493 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3494 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3500 o->op_flags |= OPf_REF;
3505 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
3507 doref(cBINOPo->op_first, type, set_op_ref);
3511 doref(cBINOPo->op_first, o->op_type, set_op_ref);
3512 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3513 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3514 : type == OP_RV2HV ? OPpDEREF_HV
3516 o->op_flags |= OPf_MOD;
3526 if (!(o->op_flags & OPf_KIDS))
3528 doref(cLISTOPo->op_last, type, set_op_ref);
3538 S_dup_attrlist(pTHX_ OP *o)
3542 PERL_ARGS_ASSERT_DUP_ATTRLIST;
3544 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
3545 * where the first kid is OP_PUSHMARK and the remaining ones
3546 * are OP_CONST. We need to push the OP_CONST values.
3548 if (o->op_type == OP_CONST)
3549 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
3551 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
3553 for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) {
3554 if (o->op_type == OP_CONST)
3555 rop = op_append_elem(OP_LIST, rop,
3556 newSVOP(OP_CONST, o->op_flags,
3557 SvREFCNT_inc_NN(cSVOPo->op_sv)));
3564 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
3566 PERL_ARGS_ASSERT_APPLY_ATTRS;
3568 SV * const stashsv = newSVhek(HvNAME_HEK(stash));
3570 /* fake up C<use attributes $pkg,$rv,@attrs> */
3572 #define ATTRSMODULE "attributes"
3573 #define ATTRSMODULE_PM "attributes.pm"
3576 aTHX_ PERL_LOADMOD_IMPORT_OPS,
3577 newSVpvs(ATTRSMODULE),
3579 op_prepend_elem(OP_LIST,
3580 newSVOP(OP_CONST, 0, stashsv),
3581 op_prepend_elem(OP_LIST,
3582 newSVOP(OP_CONST, 0,
3584 dup_attrlist(attrs))));
3589 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
3591 OP *pack, *imop, *arg;
3592 SV *meth, *stashsv, **svp;
3594 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
3599 assert(target->op_type == OP_PADSV ||
3600 target->op_type == OP_PADHV ||
3601 target->op_type == OP_PADAV);
3603 /* Ensure that attributes.pm is loaded. */
3604 /* Don't force the C<use> if we don't need it. */
3605 svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
3606 if (svp && *svp != &PL_sv_undef)
3607 NOOP; /* already in %INC */
3609 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
3610 newSVpvs(ATTRSMODULE), NULL);
3612 /* Need package name for method call. */
3613 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
3615 /* Build up the real arg-list. */
3616 stashsv = newSVhek(HvNAME_HEK(stash));
3618 arg = newOP(OP_PADSV, 0);
3619 arg->op_targ = target->op_targ;
3620 arg = op_prepend_elem(OP_LIST,
3621 newSVOP(OP_CONST, 0, stashsv),
3622 op_prepend_elem(OP_LIST,
3623 newUNOP(OP_REFGEN, 0,
3625 dup_attrlist(attrs)));
3627 /* Fake up a method call to import */
3628 meth = newSVpvs_share("import");
3629 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
3630 op_append_elem(OP_LIST,
3631 op_prepend_elem(OP_LIST, pack, arg),
3632 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
3634 /* Combine the ops. */
3635 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
3639 =notfor apidoc apply_attrs_string
3641 Attempts to apply a list of attributes specified by the C<attrstr> and
3642 C<len> arguments to the subroutine identified by the C<cv> argument which
3643 is expected to be associated with the package identified by the C<stashpv>
3644 argument (see L<attributes>). It gets this wrong, though, in that it
3645 does not correctly identify the boundaries of the individual attribute
3646 specifications within C<attrstr>. This is not really intended for the
3647 public API, but has to be listed here for systems such as AIX which
3648 need an explicit export list for symbols. (It's called from XS code
3649 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
3650 to respect attribute syntax properly would be welcome.
3656 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
3657 const char *attrstr, STRLEN len)
3661 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
3664 len = strlen(attrstr);
3668 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
3670 const char * const sstr = attrstr;
3671 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
3672 attrs = op_append_elem(OP_LIST, attrs,
3673 newSVOP(OP_CONST, 0,
3674 newSVpvn(sstr, attrstr-sstr)));
3678 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3679 newSVpvs(ATTRSMODULE),
3680 NULL, op_prepend_elem(OP_LIST,
3681 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
3682 op_prepend_elem(OP_LIST,
3683 newSVOP(OP_CONST, 0,
3684 newRV(MUTABLE_SV(cv))),
3689 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name)
3691 OP *new_proto = NULL;
3696 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
3702 if (o->op_type == OP_CONST) {
3703 pv = SvPV(cSVOPo_sv, pvlen);
3704 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3705 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3706 SV ** const tmpo = cSVOPx_svp(o);
3707 SvREFCNT_dec(cSVOPo_sv);
3712 } else if (o->op_type == OP_LIST) {
3714 assert(o->op_flags & OPf_KIDS);
3715 lasto = cLISTOPo->op_first;
3716 assert(lasto->op_type == OP_PUSHMARK);
3717 for (o = OpSIBLING(lasto); o; o = OpSIBLING(o)) {
3718 if (o->op_type == OP_CONST) {
3719 pv = SvPV(cSVOPo_sv, pvlen);
3720 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3721 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3722 SV ** const tmpo = cSVOPx_svp(o);
3723 SvREFCNT_dec(cSVOPo_sv);
3725 if (new_proto && ckWARN(WARN_MISC)) {
3727 const char * newp = SvPV(cSVOPo_sv, new_len);
3728 Perl_warner(aTHX_ packWARN(WARN_MISC),
3729 "Attribute prototype(%" UTF8f ") discards earlier prototype attribute in same sub",
3730 UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
3736 /* excise new_proto from the list */
3737 op_sibling_splice(*attrs, lasto, 1, NULL);
3744 /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
3745 would get pulled in with no real need */
3746 if (!OpHAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
3755 svname = sv_newmortal();
3756 gv_efullname3(svname, name, NULL);
3758 else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
3759 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
3761 svname = (SV *)name;
3762 if (ckWARN(WARN_ILLEGALPROTO))
3763 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE);
3764 if (*proto && ckWARN(WARN_PROTOTYPE)) {
3765 STRLEN old_len, new_len;
3766 const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
3767 const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
3769 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3770 "Prototype '%" UTF8f "' overridden by attribute 'prototype(%" UTF8f ")'"
3772 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
3773 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
3783 S_cant_declare(pTHX_ OP *o)
3785 if (o->op_type == OP_NULL
3786 && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
3787 o = cUNOPo->op_first;
3788 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
3789 o->op_type == OP_NULL
3790 && o->op_flags & OPf_SPECIAL
3793 PL_parser->in_my == KEY_our ? "our" :
3794 PL_parser->in_my == KEY_state ? "state" :
3799 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
3802 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
3804 PERL_ARGS_ASSERT_MY_KID;
3806 if (!o || (PL_parser && PL_parser->error_count))
3811 if (OP_TYPE_IS_OR_WAS(o, OP_LIST)) {
3813 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3814 my_kid(kid, attrs, imopsp);
3816 } else if (type == OP_UNDEF || type == OP_STUB) {
3818 } else if (type == OP_RV2SV || /* "our" declaration */
3821 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
3822 S_cant_declare(aTHX_ o);
3824 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
3826 PL_parser->in_my = FALSE;
3827 PL_parser->in_my_stash = NULL;
3828 apply_attrs(GvSTASH(gv),
3829 (type == OP_RV2SV ? GvSV(gv) :
3830 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
3831 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
3834 o->op_private |= OPpOUR_INTRO;
3837 else if (type == OP_REFGEN || type == OP_SREFGEN) {
3838 if (!FEATURE_MYREF_IS_ENABLED)
3839 Perl_croak(aTHX_ "The experimental declared_refs "
3840 "feature is not enabled");
3841 Perl_ck_warner_d(aTHX_
3842 packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
3843 "Declaring references is experimental");
3844 /* Kid is a nulled OP_LIST, handled above. */
3845 my_kid(cUNOPo->op_first, attrs, imopsp);
3848 else if (type != OP_PADSV &&
3851 type != OP_PUSHMARK)
3853 S_cant_declare(aTHX_ o);
3856 else if (attrs && type != OP_PUSHMARK) {
3860 PL_parser->in_my = FALSE;
3861 PL_parser->in_my_stash = NULL;
3863 /* check for C<my Dog $spot> when deciding package */
3864 stash = PAD_COMPNAME_TYPE(o->op_targ);
3866 stash = PL_curstash;
3867 apply_attrs_my(stash, o, attrs, imopsp);
3869 o->op_flags |= OPf_MOD;
3870 o->op_private |= OPpLVAL_INTRO;
3872 o->op_private |= OPpPAD_STATE;
3877 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
3880 int maybe_scalar = 0;
3882 PERL_ARGS_ASSERT_MY_ATTRS;
3884 /* [perl #17376]: this appears to be premature, and results in code such as
3885 C< our(%x); > executing in list mode rather than void mode */
3887 if (o->op_flags & OPf_PARENS)
3897 o = my_kid(o, attrs, &rops);
3899 if (maybe_scalar && o->op_type == OP_PADSV) {
3900 o = scalar(op_append_list(OP_LIST, rops, o));
3901 o->op_private |= OPpLVAL_INTRO;
3904 /* The listop in rops might have a pushmark at the beginning,
3905 which will mess up list assignment. */
3906 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
3907 if (rops->op_type == OP_LIST &&
3908 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
3910 OP * const pushmark = lrops->op_first;
3911 /* excise pushmark */
3912 op_sibling_splice(rops, NULL, 1, NULL);
3915 o = op_append_list(OP_LIST, o, rops);
3918 PL_parser->in_my = FALSE;
3919 PL_parser->in_my_stash = NULL;
3924 Perl_sawparens(pTHX_ OP *o)
3926 PERL_UNUSED_CONTEXT;
3928 o->op_flags |= OPf_PARENS;
3933 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
3937 const OPCODE ltype = left->op_type;
3938 const OPCODE rtype = right->op_type;
3940 PERL_ARGS_ASSERT_BIND_MATCH;
3942 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
3943 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
3945 const char * const desc
3947 rtype == OP_SUBST || rtype == OP_TRANS
3948 || rtype == OP_TRANSR
3950 ? (int)rtype : OP_MATCH];
3951 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
3953 S_op_varname(aTHX_ left);
3955 Perl_warner(aTHX_ packWARN(WARN_MISC),
3956 "Applying %s to %" SVf " will act on scalar(%" SVf ")",
3957 desc, SVfARG(name), SVfARG(name));
3959 const char * const sample = (isary
3960 ? "@array" : "%hash");
3961 Perl_warner(aTHX_ packWARN(WARN_MISC),
3962 "Applying %s to %s will act on scalar(%s)",
3963 desc, sample, sample);
3967 if (rtype == OP_CONST &&
3968 cSVOPx(right)->op_private & OPpCONST_BARE &&
3969 cSVOPx(right)->op_private & OPpCONST_STRICT)
3971 no_bareword_allowed(right);
3974 /* !~ doesn't make sense with /r, so error on it for now */
3975 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
3977 /* diag_listed_as: Using !~ with %s doesn't make sense */
3978 yyerror("Using !~ with s///r doesn't make sense");
3979 if (rtype == OP_TRANSR && type == OP_NOT)
3980 /* diag_listed_as: Using !~ with %s doesn't make sense */
3981 yyerror("Using !~ with tr///r doesn't make sense");
3983 ismatchop = (rtype == OP_MATCH ||
3984 rtype == OP_SUBST ||
3985 rtype == OP_TRANS || rtype == OP_TRANSR)
3986 && !(right->op_flags & OPf_SPECIAL);
3987 if (ismatchop && right->op_private & OPpTARGET_MY) {
3989 right->op_private &= ~OPpTARGET_MY;
3991 if (!(right->op_flags & OPf_STACKED) && !right->op_targ && ismatchop) {
3992 if (left->op_type == OP_PADSV
3993 && !(left->op_private & OPpLVAL_INTRO))
3995 right->op_targ = left->op_targ;
4000 right->op_flags |= OPf_STACKED;
4001 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
4002 ! (rtype == OP_TRANS &&
4003 right->op_private & OPpTRANS_IDENTICAL) &&
4004 ! (rtype == OP_SUBST &&
4005 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
4006 left = op_lvalue(left, rtype);
4007 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
4008 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
4010 o = op_prepend_elem(rtype, scalar(left), right);
4013 return newUNOP(OP_NOT, 0, scalar(o));
4017 return bind_match(type, left,
4018 pmruntime(newPMOP(OP_MATCH, 0), right, NULL, 0, 0));
4022 Perl_invert(pTHX_ OP *o)
4026 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
4030 =for apidoc Amx|OP *|op_scope|OP *o
4032 Wraps up an op tree with some additional ops so that at runtime a dynamic
4033 scope will be created. The original ops run in the new dynamic scope,
4034 and then, provided that they exit normally, the scope will be unwound.
4035 The additional ops used to create and unwind the dynamic scope will
4036 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
4037 instead if the ops are simple enough to not need the full dynamic scope
4044 Perl_op_scope(pTHX_ OP *o)
4048 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
4049 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
4050 OpTYPE_set(o, OP_LEAVE);
4052 else if (o->op_type == OP_LINESEQ) {
4054 OpTYPE_set(o, OP_SCOPE);
4055 kid = ((LISTOP*)o)->op_first;
4056 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
4059 /* The following deals with things like 'do {1 for 1}' */
4060 kid = OpSIBLING(kid);
4062 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
4067 o = newLISTOP(OP_SCOPE, 0, o, NULL);
4073 Perl_op_unscope(pTHX_ OP *o)
4075 if (o && o->op_type == OP_LINESEQ) {
4076 OP *kid = cLISTOPo->op_first;
4077 for(; kid; kid = OpSIBLING(kid))
4078 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
4085 =for apidoc Am|int|block_start|int full
4087 Handles compile-time scope entry.
4088 Arranges for hints to be restored on block
4089 exit and also handles pad sequence numbers to make lexical variables scope
4090 right. Returns a savestack index for use with C<block_end>.
4096 Perl_block_start(pTHX_ int full)
4098 const int retval = PL_savestack_ix;
4100 PL_compiling.cop_seq = PL_cop_seqmax;
4102 pad_block_start(full);
4104 PL_hints &= ~HINT_BLOCK_SCOPE;
4105 SAVECOMPILEWARNINGS();
4106 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
4107 SAVEI32(PL_compiling.cop_seq);
4108 PL_compiling.cop_seq = 0;
4110 CALL_BLOCK_HOOKS(bhk_start, full);
4116 =for apidoc Am|OP *|block_end|I32 floor|OP *seq
4118 Handles compile-time scope exit. C<floor>
4119 is the savestack index returned by
4120 C<block_start>, and C<seq> is the body of the block. Returns the block,
4127 Perl_block_end(pTHX_ I32 floor, OP *seq)
4129 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
4130 OP* retval = scalarseq(seq);
4133 /* XXX Is the null PL_parser check necessary here? */
4134 assert(PL_parser); /* Let’s find out under debugging builds. */
4135 if (PL_parser && PL_parser->parsed_sub) {
4136 o = newSTATEOP(0, NULL, NULL);
4138 retval = op_append_elem(OP_LINESEQ, retval, o);
4141 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
4145 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
4149 /* pad_leavemy has created a sequence of introcv ops for all my
4150 subs declared in the block. We have to replicate that list with
4151 clonecv ops, to deal with this situation:
4156 sub s1 { state sub foo { \&s2 } }
4159 Originally, I was going to have introcv clone the CV and turn
4160 off the stale flag. Since &s1 is declared before &s2, the
4161 introcv op for &s1 is executed (on sub entry) before the one for
4162 &s2. But the &foo sub inside &s1 (which is cloned when &s1 is
4163 cloned, since it is a state sub) closes over &s2 and expects
4164 to see it in its outer CV’s pad. If the introcv op clones &s1,
4165 then &s2 is still marked stale. Since &s1 is not active, and
4166 &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia-
4167 ble will not stay shared’ warning. Because it is the same stub
4168 that will be used when the introcv op for &s2 is executed, clos-
4169 ing over it is safe. Hence, we have to turn off the stale flag
4170 on all lexical subs in the block before we clone any of them.
4171 Hence, having introcv clone the sub cannot work. So we create a
4172 list of ops like this:
4196 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
4197 OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
4198 for (;; kid = OpSIBLING(kid)) {
4199 OP *newkid = newOP(OP_CLONECV, 0);
4200 newkid->op_targ = kid->op_targ;
4201 o = op_append_elem(OP_LINESEQ, o, newkid);
4202 if (kid == last) break;
4204 retval = op_prepend_elem(OP_LINESEQ, o, retval);
4207 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
4213 =head1 Compile-time scope hooks
4215 =for apidoc Aox||blockhook_register
4217 Register a set of hooks to be called when the Perl lexical scope changes
4218 at compile time. See L<perlguts/"Compile-time scope hooks">.
4224 Perl_blockhook_register(pTHX_ BHK *hk)
4226 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
4228 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
4232 Perl_newPROG(pTHX_ OP *o)
4236 PERL_ARGS_ASSERT_NEWPROG;
4243 PL_eval_root = newUNOP(OP_LEAVEEVAL,
4244 ((PL_in_eval & EVAL_KEEPERR)
4245 ? OPf_SPECIAL : 0), o);
4248 assert(CxTYPE(cx) == CXt_EVAL);
4250 if ((cx->blk_gimme & G_WANT) == G_VOID)
4251 scalarvoid(PL_eval_root);
4252 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
4255 scalar(PL_eval_root);
4257 start = op_linklist(PL_eval_root);
4258 PL_eval_root->op_next = 0;
4259 i = PL_savestack_ix;
4262 S_process_optree(aTHX_ NULL, PL_eval_root, start);
4264 PL_savestack_ix = i;
4267 if (o->op_type == OP_STUB) {
4268 /* This block is entered if nothing is compiled for the main
4269 program. This will be the case for an genuinely empty main
4270 program, or one which only has BEGIN blocks etc, so already
4273 Historically (5.000) the guard above was !o. However, commit
4274 f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
4275 c71fccf11fde0068, changed perly.y so that newPROG() is now
4276 called with the output of block_end(), which returns a new
4277 OP_STUB for the case of an empty optree. ByteLoader (and
4278 maybe other things) also take this path, because they set up
4279 PL_main_start and PL_main_root directly, without generating an
4282 If the parsing the main program aborts (due to parse errors,
4283 or due to BEGIN or similar calling exit), then newPROG()
4284 isn't even called, and hence this code path and its cleanups
4285 are skipped. This shouldn't make a make a difference:
4286 * a non-zero return from perl_parse is a failure, and
4287 perl_destruct() should be called immediately.
4288 * however, if exit(0) is called during the parse, then
4289 perl_parse() returns 0, and perl_run() is called. As
4290 PL_main_start will be NULL, perl_run() will return
4291 promptly, and the exit code will remain 0.
4294 PL_comppad_name = 0;
4296 S_op_destroy(aTHX_ o);
4299 PL_main_root = op_scope(sawparens(scalarvoid(o)));
4300 PL_curcop = &PL_compiling;
4301 start = LINKLIST(PL_main_root);
4302 PL_main_root->op_next = 0;
4303 S_process_optree(aTHX_ NULL, PL_main_root, start);
4304 cv_forget_slab(PL_compcv);
4307 /* Register with debugger */
4309 CV * const cv = get_cvs("DB::postponed", 0);
4313 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
4315 call_sv(MUTABLE_SV(cv), G_DISCARD);
4322 Perl_localize(pTHX_ OP *o, I32 lex)
4324 PERL_ARGS_ASSERT_LOCALIZE;
4326 if (o->op_flags & OPf_PARENS)
4327 /* [perl #17376]: this appears to be premature, and results in code such as
4328 C< our(%x); > executing in list mode rather than void mode */
4335 if ( PL_parser->bufptr > PL_parser->oldbufptr
4336 && PL_parser->bufptr[-1] == ','
4337 && ckWARN(WARN_PARENTHESIS))
4339 char *s = PL_parser->bufptr;
4342 /* some heuristics to detect a potential error */
4343 while (*s && (strchr(", \t\n", *s)))
4347 if (*s && (strchr("@$%", *s) || (!lex && *s == '*'))
4349 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
4352 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
4354 while (*s && (strchr(", \t\n", *s)))
4360 if (sigil && (*s == ';' || *s == '=')) {
4361 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
4362 "Parentheses missing around \"%s\" list",
4364 ? (PL_parser->in_my == KEY_our
4366 : PL_parser->in_my == KEY_state
4376 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
4377 PL_parser->in_my = FALSE;
4378 PL_parser->in_my_stash = NULL;
4383 Perl_jmaybe(pTHX_ OP *o)
4385 PERL_ARGS_ASSERT_JMAYBE;
4387 if (o->op_type == OP_LIST) {
4389 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
4390 o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
4395 PERL_STATIC_INLINE OP *
4396 S_op_std_init(pTHX_ OP *o)
4398 I32 type = o->op_type;
4400 PERL_ARGS_ASSERT_OP_STD_INIT;
4402 if (PL_opargs[type] & OA_RETSCALAR)
4404 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
4405 o->op_targ = pad_alloc(type, SVs_PADTMP);
4410 PERL_STATIC_INLINE OP *
4411 S_op_integerize(pTHX_ OP *o)
4413 I32 type = o->op_type;
4415 PERL_ARGS_ASSERT_OP_INTEGERIZE;
4417 /* integerize op. */
4418 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
4421 o->op_ppaddr = PL_ppaddr[++(o->op_type)];
4424 if (type == OP_NEGATE)
4425 /* XXX might want a ck_negate() for this */
4426 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
4432 S_fold_constants(pTHX_ OP *const o)
4437 VOL I32 type = o->op_type;
4442 SV * const oldwarnhook = PL_warnhook;
4443 SV * const olddiehook = PL_diehook;
4445 U8 oldwarn = PL_dowarn;
4449 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
4451 if (!(PL_opargs[type] & OA_FOLDCONST))
4460 #ifdef USE_LOCALE_CTYPE
4461 if (IN_LC_COMPILETIME(LC_CTYPE))
4470 #ifdef USE_LOCALE_COLLATE
4471 if (IN_LC_COMPILETIME(LC_COLLATE))
4476 /* XXX what about the numeric ops? */
4477 #ifdef USE_LOCALE_NUMERIC
4478 if (IN_LC_COMPILETIME(LC_NUMERIC))
4483 if (!OpHAS_SIBLING(cLISTOPo->op_first)
4484 || OpSIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
4487 SV * const sv = cSVOPx_sv(OpSIBLING(cLISTOPo->op_first));
4488 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
4490 const char *s = SvPVX_const(sv);
4491 while (s < SvEND(sv)) {
4492 if (isALPHA_FOLD_EQ(*s, 'p')) goto nope;
4499 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
4502 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
4503 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
4507 if (PL_parser && PL_parser->error_count)
4508 goto nope; /* Don't try to run w/ errors */
4510 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4511 switch (curop->op_type) {
4513 if ( (curop->op_private & OPpCONST_BARE)
4514 && (curop->op_private & OPpCONST_STRICT)) {
4515 no_bareword_allowed(curop);
4523 /* Foldable; move to next op in list */
4527 /* No other op types are considered foldable */
4532 curop = LINKLIST(o);
4533 old_next = o->op_next;
4537 old_cxix = cxstack_ix;
4538 create_eval_scope(NULL, G_FAKINGEVAL);
4540 /* Verify that we don't need to save it: */
4541 assert(PL_curcop == &PL_compiling);
4542 StructCopy(&PL_compiling, ¬_compiling, COP);
4543 PL_curcop = ¬_compiling;
4544 /* The above ensures that we run with all the correct hints of the
4545 currently compiling COP, but that IN_PERL_RUNTIME is true. */
4546 assert(IN_PERL_RUNTIME);
4547 PL_warnhook = PERL_WARNHOOK_FATAL;
4551 /* Effective $^W=1. */
4552 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
4553 PL_dowarn |= G_WARN_ON;
4558 sv = *(PL_stack_sp--);
4559 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
4560 pad_swipe(o->op_targ, FALSE);
4562 else if (SvTEMP(sv)) { /* grab mortal temp? */
4563 SvREFCNT_inc_simple_void(sv);
4566 else { assert(SvIMMORTAL(sv)); }
4569 /* Something tried to die. Abandon constant folding. */
4570 /* Pretend the error never happened. */
4572 o->op_next = old_next;
4576 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
4577 PL_warnhook = oldwarnhook;
4578 PL_diehook = olddiehook;
4579 /* XXX note that this croak may fail as we've already blown away
4580 * the stack - eg any nested evals */
4581 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
4584 PL_dowarn = oldwarn;
4585 PL_warnhook = oldwarnhook;
4586 PL_diehook = olddiehook;
4587 PL_curcop = &PL_compiling;
4589 /* if we croaked, depending on how we croaked the eval scope
4590 * may or may not have already been popped */
4591 if (cxstack_ix > old_cxix) {
4592 assert(cxstack_ix == old_cxix + 1);
4593 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
4594 delete_eval_scope();
4599 /* OP_STRINGIFY and constant folding are used to implement qq.
4600 Here the constant folding is an implementation detail that we
4601 want to hide. If the stringify op is itself already marked
4602 folded, however, then it is actually a folded join. */
4603 is_stringify = type == OP_STRINGIFY && !o->op_folded;
4608 else if (!SvIMMORTAL(sv)) {
4612 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
4613 if (!is_stringify) newop->op_folded = 1;
4621 S_gen_constant_list(pTHX_ OP *o)
4624 OP *curop, *old_next;
4625 SV * const oldwarnhook = PL_warnhook;
4626 SV * const olddiehook = PL_diehook;
4628 U8 oldwarn = PL_dowarn;
4638 if (PL_parser && PL_parser->error_count)
4639 return o; /* Don't attempt to run with errors */
4641 curop = LINKLIST(o);
4642 old_next = o->op_next;
4644 op_was_null = o->op_type == OP_NULL;
4646 o->op_type = OP_CUSTOM;
4649 o->op_type = OP_NULL;
4650 S_prune_chain_head(&curop);
4653 old_cxix = cxstack_ix;
4654 create_eval_scope(NULL, G_FAKINGEVAL);
4656 old_curcop = PL_curcop;
4657 StructCopy(old_curcop, ¬_compiling, COP);
4658 PL_curcop = ¬_compiling;
4659 /* The above ensures that we run with all the correct hints of the
4660 current COP, but that IN_PERL_RUNTIME is true. */
4661 assert(IN_PERL_RUNTIME);
4662 PL_warnhook = PERL_WARNHOOK_FATAL;
4666 /* Effective $^W=1. */
4667 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
4668 PL_dowarn |= G_WARN_ON;
4672 Perl_pp_pushmark(aTHX);
4675 assert (!(curop->op_flags & OPf_SPECIAL));
4676 assert(curop->op_type == OP_RANGE);
4677 Perl_pp_anonlist(aTHX);
4681 o->op_next = old_next;
4685 PL_warnhook = oldwarnhook;
4686 PL_diehook = olddiehook;
4687 Perl_croak(aTHX_ "panic: gen_constant_list JMPENV_PUSH returned %d",
4692 PL_dowarn = oldwarn;
4693 PL_warnhook = oldwarnhook;
4694 PL_diehook = olddiehook;
4695 PL_curcop = old_curcop;
4697 if (cxstack_ix > old_cxix) {
4698 assert(cxstack_ix == old_cxix + 1);
4699 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
4700 delete_eval_scope();
4705 OpTYPE_set(o, OP_RV2AV);
4706 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
4707 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
4708 o->op_opt = 0; /* needs to be revisited in rpeep() */
4709 av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
4711 /* replace subtree with an OP_CONST */
4712 curop = ((UNOP*)o)->op_first;
4713 op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
4716 if (AvFILLp(av) != -1)
4717 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
4720 SvREADONLY_on(*svp);
4727 =head1 Optree Manipulation Functions
4730 /* List constructors */
4733 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
4735 Append an item to the list of ops contained directly within a list-type
4736 op, returning the lengthened list. C<first> is the list-type op,
4737 and C<last> is the op to append to the list. C<optype> specifies the
4738 intended opcode for the list. If C<first> is not already a list of the
4739 right type, it will be upgraded into one. If either C<first> or C<last>
4740 is null, the other is returned unchanged.
4746 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
4754 if (first->op_type != (unsigned)type
4755 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
4757 return newLISTOP(type, 0, first, last);
4760 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
4761 first->op_flags |= OPf_KIDS;
4766 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
4768 Concatenate the lists of ops contained directly within two list-type ops,
4769 returning the combined list. C<first> and C<last> are the list-type ops
4770 to concatenate. C<optype> specifies the intended opcode for the list.
4771 If either C<first> or C<last> is not already a list of the right type,
4772 it will be upgraded into one. If either C<first> or C<last> is null,
4773 the other is returned unchanged.
4779 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)