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 * A Perl program is compiled into a tree of OPs. Each op contains
26 * structural pointers (eg to its siblings and the next op in the
27 * execution sequence), a pointer to the function that would execute the
28 * op, plus any data specific to that op. For example, an OP_CONST op
29 * points to the pp_const() function and to an SV containing the constant
30 * value. When pp_const() is executed, its job is to push that SV onto the
33 * OPs are mainly created by the newFOO() functions, which are mainly
34 * called from the parser (in perly.y) as the code is parsed. For example
35 * the Perl code $a + $b * $c would cause the equivalent of the following
36 * to be called (oversimplifying a bit):
38 * newBINOP(OP_ADD, flags,
40 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
43 * Note that during the build of miniperl, a temporary copy of this file
44 * is made, called opmini.c.
48 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
52 An execution-order pass
54 The bottom-up pass is represented by all the "newOP" routines and
55 the ck_ routines. The bottom-upness is actually driven by yacc.
56 So at the point that a ck_ routine fires, we have no idea what the
57 context is, either upward in the syntax tree, or either forward or
58 backward in the execution order. (The bottom-up parser builds that
59 part of the execution order it knows about, but if you follow the "next"
60 links around, you'll find it's actually a closed loop through the
63 Whenever the bottom-up parser gets to a node that supplies context to
64 its components, it invokes that portion of the top-down pass that applies
65 to that part of the subtree (and marks the top node as processed, so
66 if a node further up supplies context, it doesn't have to take the
67 plunge again). As a particular subcase of this, as the new node is
68 built, it takes all the closed execution loops of its subcomponents
69 and links them into a new closed loop for the higher level node. But
70 it's still not the real execution order.
72 The actual execution order is not known till we get a grammar reduction
73 to a top-level unit like a subroutine or file that will be called by
74 "name" rather than via a "next" pointer. At that point, we can call
75 into peep() to do that code's portion of the 3rd pass. It has to be
76 recursive, but it's recursive on basic blocks, not on tree nodes.
79 /* To implement user lexical pragmas, there needs to be a way at run time to
80 get the compile time state of %^H for that block. Storing %^H in every
81 block (or even COP) would be very expensive, so a different approach is
82 taken. The (running) state of %^H is serialised into a tree of HE-like
83 structs. Stores into %^H are chained onto the current leaf as a struct
84 refcounted_he * with the key and the value. Deletes from %^H are saved
85 with a value of PL_sv_placeholder. The state of %^H at any point can be
86 turned back into a regular HV by walking back up the tree from that point's
87 leaf, ignoring any key you've already seen (placeholder or not), storing
88 the rest into the HV structure, then removing the placeholders. Hence
89 memory is only used to store the %^H deltas from the enclosing COP, rather
90 than the entire %^H on each COP.
92 To cause actions on %^H to write out the serialisation records, it has
93 magic type 'H'. This magic (itself) does nothing, but its presence causes
94 the values to gain magic type 'h', which has entries for set and clear.
95 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
96 record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
97 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
98 it will be correctly restored when any inner compiling scope is exited.
104 #include "keywords.h"
108 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
109 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
110 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
112 /* Used to avoid recursion through the op tree in scalarvoid() and
116 #define DEFERRED_OP_STEP 100
117 #define DEFER_OP(o) \
119 if (UNLIKELY(defer_ix == (defer_stack_alloc-1))) { \
120 defer_stack_alloc += DEFERRED_OP_STEP; \
121 assert(defer_stack_alloc > 0); \
122 Renew(defer_stack, defer_stack_alloc, OP *); \
124 defer_stack[++defer_ix] = o; \
127 #define POP_DEFERRED_OP() (defer_ix >= 0 ? defer_stack[defer_ix--] : (OP *)NULL)
129 /* remove any leading "empty" ops from the op_next chain whose first
130 * node's address is stored in op_p. Store the updated address of the
131 * first node in op_p.
135 S_prune_chain_head(OP** op_p)
138 && ( (*op_p)->op_type == OP_NULL
139 || (*op_p)->op_type == OP_SCOPE
140 || (*op_p)->op_type == OP_SCALAR
141 || (*op_p)->op_type == OP_LINESEQ)
143 *op_p = (*op_p)->op_next;
147 /* See the explanatory comments above struct opslab in op.h. */
149 #ifdef PERL_DEBUG_READONLY_OPS
150 # define PERL_SLAB_SIZE 128
151 # define PERL_MAX_SLAB_SIZE 4096
152 # include <sys/mman.h>
155 #ifndef PERL_SLAB_SIZE
156 # define PERL_SLAB_SIZE 64
158 #ifndef PERL_MAX_SLAB_SIZE
159 # define PERL_MAX_SLAB_SIZE 2048
162 /* rounds up to nearest pointer */
163 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
164 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
167 S_new_slab(pTHX_ size_t sz)
169 #ifdef PERL_DEBUG_READONLY_OPS
170 OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
171 PROT_READ|PROT_WRITE,
172 MAP_ANON|MAP_PRIVATE, -1, 0);
173 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
174 (unsigned long) sz, slab));
175 if (slab == MAP_FAILED) {
176 perror("mmap failed");
179 slab->opslab_size = (U16)sz;
181 OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
184 /* The context is unused in non-Windows */
187 slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
191 /* requires double parens and aTHX_ */
192 #define DEBUG_S_warn(args) \
194 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
198 Perl_Slab_Alloc(pTHX_ size_t sz)
206 /* We only allocate ops from the slab during subroutine compilation.
207 We find the slab via PL_compcv, hence that must be non-NULL. It could
208 also be pointing to a subroutine which is now fully set up (CvROOT()
209 pointing to the top of the optree for that sub), or a subroutine
210 which isn't using the slab allocator. If our sanity checks aren't met,
211 don't use a slab, but allocate the OP directly from the heap. */
212 if (!PL_compcv || CvROOT(PL_compcv)
213 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
215 o = (OP*)PerlMemShared_calloc(1, sz);
219 /* While the subroutine is under construction, the slabs are accessed via
220 CvSTART(), to avoid needing to expand PVCV by one pointer for something
221 unneeded at runtime. Once a subroutine is constructed, the slabs are
222 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
223 allocated yet. See the commit message for 8be227ab5eaa23f2 for more
225 if (!CvSTART(PL_compcv)) {
227 (OP *)(slab = S_new_slab(aTHX_ PERL_SLAB_SIZE));
228 CvSLABBED_on(PL_compcv);
229 slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
231 else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
233 opsz = SIZE_TO_PSIZE(sz);
234 sz = opsz + OPSLOT_HEADER_P;
236 /* The slabs maintain a free list of OPs. In particular, constant folding
237 will free up OPs, so it makes sense to re-use them where possible. A
238 freed up slot is used in preference to a new allocation. */
239 if (slab->opslab_freed) {
240 OP **too = &slab->opslab_freed;
242 DEBUG_S_warn((aTHX_ "found free op at %p, slab %p", (void*)o, (void*)slab));
243 while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
244 DEBUG_S_warn((aTHX_ "Alas! too small"));
245 o = *(too = &o->op_next);
246 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
250 Zero(o, opsz, I32 *);
256 #define INIT_OPSLOT \
257 slot->opslot_slab = slab; \
258 slot->opslot_next = slab2->opslab_first; \
259 slab2->opslab_first = slot; \
260 o = &slot->opslot_op; \
263 /* The partially-filled slab is next in the chain. */
264 slab2 = slab->opslab_next ? slab->opslab_next : slab;
265 if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) {
266 /* Remaining space is too small. */
268 /* If we can fit a BASEOP, add it to the free chain, so as not
270 if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
271 slot = &slab2->opslab_slots;
273 o->op_type = OP_FREED;
274 o->op_next = slab->opslab_freed;
275 slab->opslab_freed = o;
278 /* Create a new slab. Make this one twice as big. */
279 slot = slab2->opslab_first;
280 while (slot->opslot_next) slot = slot->opslot_next;
281 slab2 = S_new_slab(aTHX_
282 (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE
284 : (DIFF(slab2, slot)+1)*2);
285 slab2->opslab_next = slab->opslab_next;
286 slab->opslab_next = slab2;
288 assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
290 /* Create a new op slot */
291 slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz);
292 assert(slot >= &slab2->opslab_slots);
293 if (DIFF(&slab2->opslab_slots, slot)
294 < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
295 slot = &slab2->opslab_slots;
297 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", (void*)o, (void*)slab));
300 #ifdef PERL_OP_PARENT
301 /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
302 assert(!o->op_moresib);
303 assert(!o->op_sibparent);
311 #ifdef PERL_DEBUG_READONLY_OPS
313 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
315 PERL_ARGS_ASSERT_SLAB_TO_RO;
317 if (slab->opslab_readonly) return;
318 slab->opslab_readonly = 1;
319 for (; slab; slab = slab->opslab_next) {
320 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
321 (unsigned long) slab->opslab_size, slab));*/
322 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
323 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
324 (unsigned long)slab->opslab_size, errno);
329 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
333 PERL_ARGS_ASSERT_SLAB_TO_RW;
335 if (!slab->opslab_readonly) return;
337 for (; slab2; slab2 = slab2->opslab_next) {
338 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
339 (unsigned long) size, slab2));*/
340 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
341 PROT_READ|PROT_WRITE)) {
342 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
343 (unsigned long)slab2->opslab_size, errno);
346 slab->opslab_readonly = 0;
350 # define Slab_to_rw(op) NOOP
353 /* This cannot possibly be right, but it was copied from the old slab
354 allocator, to which it was originally added, without explanation, in
357 # define PerlMemShared PerlMem
361 Perl_Slab_Free(pTHX_ void *op)
363 OP * const o = (OP *)op;
366 PERL_ARGS_ASSERT_SLAB_FREE;
368 if (!o->op_slabbed) {
370 PerlMemShared_free(op);
375 /* If this op is already freed, our refcount will get screwy. */
376 assert(o->op_type != OP_FREED);
377 o->op_type = OP_FREED;
378 o->op_next = slab->opslab_freed;
379 slab->opslab_freed = o;
380 DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
381 OpslabREFCNT_dec_padok(slab);
385 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
387 const bool havepad = !!PL_comppad;
388 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
391 PAD_SAVE_SETNULLPAD();
398 Perl_opslab_free(pTHX_ OPSLAB *slab)
401 PERL_ARGS_ASSERT_OPSLAB_FREE;
403 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
404 assert(slab->opslab_refcnt == 1);
406 slab2 = slab->opslab_next;
408 slab->opslab_refcnt = ~(size_t)0;
410 #ifdef PERL_DEBUG_READONLY_OPS
411 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
413 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
414 perror("munmap failed");
418 PerlMemShared_free(slab);
425 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
430 size_t savestack_count = 0;
432 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
435 for (slot = slab2->opslab_first;
437 slot = slot->opslot_next) {
438 if (slot->opslot_op.op_type != OP_FREED
439 && !(slot->opslot_op.op_savefree
445 assert(slot->opslot_op.op_slabbed);
446 op_free(&slot->opslot_op);
447 if (slab->opslab_refcnt == 1) goto free;
450 } while ((slab2 = slab2->opslab_next));
451 /* > 1 because the CV still holds a reference count. */
452 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
454 assert(savestack_count == slab->opslab_refcnt-1);
456 /* Remove the CV’s reference count. */
457 slab->opslab_refcnt--;
464 #ifdef PERL_DEBUG_READONLY_OPS
466 Perl_op_refcnt_inc(pTHX_ OP *o)
469 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
470 if (slab && slab->opslab_readonly) {
483 Perl_op_refcnt_dec(pTHX_ OP *o)
486 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
488 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
490 if (slab && slab->opslab_readonly) {
492 result = --o->op_targ;
495 result = --o->op_targ;
501 * In the following definition, the ", (OP*)0" is just to make the compiler
502 * think the expression is of the right type: croak actually does a Siglongjmp.
504 #define CHECKOP(type,o) \
505 ((PL_op_mask && PL_op_mask[type]) \
506 ? ( op_free((OP*)o), \
507 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
509 : PL_check[type](aTHX_ (OP*)o))
511 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
513 #define OpTYPE_set(o,type) \
515 o->op_type = (OPCODE)type; \
516 o->op_ppaddr = PL_ppaddr[type]; \
520 S_no_fh_allowed(pTHX_ OP *o)
522 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
524 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
530 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
532 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
533 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
538 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
540 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
542 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
547 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
549 PERL_ARGS_ASSERT_BAD_TYPE_PV;
551 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
552 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
555 /* remove flags var, its unused in all callers, move to to right end since gv
556 and kid are always the same */
558 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
560 SV * const namesv = cv_name((CV *)gv, NULL, 0);
561 PERL_ARGS_ASSERT_BAD_TYPE_GV;
563 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %"SVf" must be %s (not %s)",
564 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
568 S_no_bareword_allowed(pTHX_ OP *o)
570 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
572 qerror(Perl_mess(aTHX_
573 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
575 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
578 /* "register" allocation */
581 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
584 const bool is_our = (PL_parser->in_my == KEY_our);
586 PERL_ARGS_ASSERT_ALLOCMY;
588 if (flags & ~SVf_UTF8)
589 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
592 /* complain about "my $<special_var>" etc etc */
596 ((flags & SVf_UTF8) && isIDFIRST_utf8((U8 *)name+1)) ||
597 (name[1] == '_' && len > 2)))
599 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
601 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
602 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
603 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
604 PL_parser->in_my == KEY_state ? "state" : "my"));
606 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
607 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
611 /* allocate a spare slot and store the name in that slot */
613 off = pad_add_name_pvn(name, len,
614 (is_our ? padadd_OUR :
615 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
616 PL_parser->in_my_stash,
618 /* $_ is always in main::, even with our */
619 ? (PL_curstash && !memEQs(name,len,"$_")
625 /* anon sub prototypes contains state vars should always be cloned,
626 * otherwise the state var would be shared between anon subs */
628 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
629 CvCLONE_on(PL_compcv);
635 =head1 Optree Manipulation Functions
637 =for apidoc alloccopstash
639 Available only under threaded builds, this function allocates an entry in
640 C<PL_stashpad> for the stash passed to it.
647 Perl_alloccopstash(pTHX_ HV *hv)
649 PADOFFSET off = 0, o = 1;
650 bool found_slot = FALSE;
652 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
654 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
656 for (; o < PL_stashpadmax; ++o) {
657 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
658 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
659 found_slot = TRUE, off = o;
662 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
663 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
664 off = PL_stashpadmax;
665 PL_stashpadmax += 10;
668 PL_stashpad[PL_stashpadix = off] = hv;
673 /* free the body of an op without examining its contents.
674 * Always use this rather than FreeOp directly */
677 S_op_destroy(pTHX_ OP *o)
685 =for apidoc Am|void|op_free|OP *o
687 Free an op. Only use this when an op is no longer linked to from any
694 Perl_op_free(pTHX_ OP *o)
698 SSize_t defer_ix = -1;
699 SSize_t defer_stack_alloc = 0;
700 OP **defer_stack = NULL;
704 /* Though ops may be freed twice, freeing the op after its slab is a
706 assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
707 /* During the forced freeing of ops after compilation failure, kidops
708 may be freed before their parents. */
709 if (!o || o->op_type == OP_FREED)
714 /* an op should only ever acquire op_private flags that we know about.
715 * If this fails, you may need to fix something in regen/op_private.
716 * Don't bother testing if:
717 * * the op_ppaddr doesn't match the op; someone may have
718 * overridden the op and be doing strange things with it;
719 * * we've errored, as op flags are often left in an
720 * inconsistent state then. Note that an error when
721 * compiling the main program leaves PL_parser NULL, so
722 * we can't spot faults in the main code, only
723 * evaled/required code */
725 if ( o->op_ppaddr == PL_ppaddr[o->op_type]
727 && !PL_parser->error_count)
729 assert(!(o->op_private & ~PL_op_private_valid[type]));
733 if (o->op_private & OPpREFCOUNTED) {
744 refcnt = OpREFCNT_dec(o);
747 /* Need to find and remove any pattern match ops from the list
748 we maintain for reset(). */
749 find_and_forget_pmops(o);
759 /* Call the op_free hook if it has been set. Do it now so that it's called
760 * at the right time for refcounted ops, but still before all of the kids
764 if (o->op_flags & OPf_KIDS) {
766 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
767 nextkid = OpSIBLING(kid); /* Get before next freeing kid */
768 if (!kid || kid->op_type == OP_FREED)
769 /* During the forced freeing of ops after
770 compilation failure, kidops may be freed before
773 if (!(kid->op_flags & OPf_KIDS))
774 /* If it has no kids, just free it now */
781 type = (OPCODE)o->op_targ;
784 Slab_to_rw(OpSLAB(o));
786 /* COP* is not cleared by op_clear() so that we may track line
787 * numbers etc even after null() */
788 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
794 #ifdef DEBUG_LEAKING_SCALARS
798 } while ( (o = POP_DEFERRED_OP()) );
800 Safefree(defer_stack);
803 /* S_op_clear_gv(): free a GV attached to an OP */
806 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
808 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
812 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
813 || o->op_type == OP_MULTIDEREF)
816 ? ((GV*)PAD_SVl(*ixp)) : NULL;
818 ? (GV*)(*svp) : NULL;
820 /* It's possible during global destruction that the GV is freed
821 before the optree. Whilst the SvREFCNT_inc is happy to bump from
822 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
823 will trigger an assertion failure, because the entry to sv_clear
824 checks that the scalar is not already freed. A check of for
825 !SvIS_FREED(gv) turns out to be invalid, because during global
826 destruction the reference count can be forced down to zero
827 (with SVf_BREAK set). In which case raising to 1 and then
828 dropping to 0 triggers cleanup before it should happen. I
829 *think* that this might actually be a general, systematic,
830 weakness of the whole idea of SVf_BREAK, in that code *is*
831 allowed to raise and lower references during global destruction,
832 so any *valid* code that happens to do this during global
833 destruction might well trigger premature cleanup. */
834 bool still_valid = gv && SvREFCNT(gv);
837 SvREFCNT_inc_simple_void(gv);
840 pad_swipe(*ixp, TRUE);
848 int try_downgrade = SvREFCNT(gv) == 2;
851 gv_try_downgrade(gv);
857 Perl_op_clear(pTHX_ OP *o)
862 PERL_ARGS_ASSERT_OP_CLEAR;
864 switch (o->op_type) {
865 case OP_NULL: /* Was holding old type, if any. */
868 case OP_ENTEREVAL: /* Was holding hints. */
872 if (!(o->op_flags & OPf_REF)
873 || (PL_check[o->op_type] != Perl_ck_ftst))
880 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
882 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
885 case OP_METHOD_REDIR:
886 case OP_METHOD_REDIR_SUPER:
888 if (cMETHOPx(o)->op_rclass_targ) {
889 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
890 cMETHOPx(o)->op_rclass_targ = 0;
893 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
894 cMETHOPx(o)->op_rclass_sv = NULL;
896 case OP_METHOD_NAMED:
897 case OP_METHOD_SUPER:
898 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
899 cMETHOPx(o)->op_u.op_meth_sv = NULL;
902 pad_swipe(o->op_targ, 1);
909 SvREFCNT_dec(cSVOPo->op_sv);
910 cSVOPo->op_sv = NULL;
913 Even if op_clear does a pad_free for the target of the op,
914 pad_free doesn't actually remove the sv that exists in the pad;
915 instead it lives on. This results in that it could be reused as
916 a target later on when the pad was reallocated.
919 pad_swipe(o->op_targ,1);
929 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
934 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
935 assert(o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
937 if (cPADOPo->op_padix > 0) {
938 pad_swipe(cPADOPo->op_padix, TRUE);
939 cPADOPo->op_padix = 0;
942 SvREFCNT_dec(cSVOPo->op_sv);
943 cSVOPo->op_sv = NULL;
947 PerlMemShared_free(cPVOPo->op_pv);
948 cPVOPo->op_pv = NULL;
952 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
956 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
957 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
960 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
966 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
967 op_free(cPMOPo->op_code_list);
968 cPMOPo->op_code_list = NULL;
970 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
971 /* we use the same protection as the "SAFE" version of the PM_ macros
972 * here since sv_clean_all might release some PMOPs
973 * after PL_regex_padav has been cleared
974 * and the clearing of PL_regex_padav needs to
975 * happen before sv_clean_all
978 if(PL_regex_pad) { /* We could be in destruction */
979 const IV offset = (cPMOPo)->op_pmoffset;
980 ReREFCNT_dec(PM_GETRE(cPMOPo));
981 PL_regex_pad[offset] = &PL_sv_undef;
982 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
986 ReREFCNT_dec(PM_GETRE(cPMOPo));
987 PM_SETRE(cPMOPo, NULL);
994 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
995 UV actions = items->uv;
997 bool is_hash = FALSE;
1000 switch (actions & MDEREF_ACTION_MASK) {
1003 actions = (++items)->uv;
1006 case MDEREF_HV_padhv_helem:
1008 case MDEREF_AV_padav_aelem:
1009 pad_free((++items)->pad_offset);
1012 case MDEREF_HV_gvhv_helem:
1014 case MDEREF_AV_gvav_aelem:
1016 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1018 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1022 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1024 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1026 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1028 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1030 goto do_vivify_rv2xv_elem;
1032 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1034 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1035 pad_free((++items)->pad_offset);
1036 goto do_vivify_rv2xv_elem;
1038 case MDEREF_HV_pop_rv2hv_helem:
1039 case MDEREF_HV_vivify_rv2hv_helem:
1041 do_vivify_rv2xv_elem:
1042 case MDEREF_AV_pop_rv2av_aelem:
1043 case MDEREF_AV_vivify_rv2av_aelem:
1045 switch (actions & MDEREF_INDEX_MASK) {
1046 case MDEREF_INDEX_none:
1049 case MDEREF_INDEX_const:
1053 pad_swipe((++items)->pad_offset, 1);
1055 SvREFCNT_dec((++items)->sv);
1061 case MDEREF_INDEX_padsv:
1062 pad_free((++items)->pad_offset);
1064 case MDEREF_INDEX_gvsv:
1066 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1068 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1073 if (actions & MDEREF_FLAG_last)
1086 actions >>= MDEREF_SHIFT;
1089 /* start of malloc is at op_aux[-1], where the length is
1091 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1096 if (o->op_targ > 0) {
1097 pad_free(o->op_targ);
1103 S_cop_free(pTHX_ COP* cop)
1105 PERL_ARGS_ASSERT_COP_FREE;
1108 if (! specialWARN(cop->cop_warnings))
1109 PerlMemShared_free(cop->cop_warnings);
1110 cophh_free(CopHINTHASH_get(cop));
1111 if (PL_curcop == cop)
1116 S_forget_pmop(pTHX_ PMOP *const o
1119 HV * const pmstash = PmopSTASH(o);
1121 PERL_ARGS_ASSERT_FORGET_PMOP;
1123 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1124 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1126 PMOP **const array = (PMOP**) mg->mg_ptr;
1127 U32 count = mg->mg_len / sizeof(PMOP**);
1131 if (array[i] == o) {
1132 /* Found it. Move the entry at the end to overwrite it. */
1133 array[i] = array[--count];
1134 mg->mg_len = count * sizeof(PMOP**);
1135 /* Could realloc smaller at this point always, but probably
1136 not worth it. Probably worth free()ing if we're the
1139 Safefree(mg->mg_ptr);
1152 S_find_and_forget_pmops(pTHX_ OP *o)
1154 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1156 if (o->op_flags & OPf_KIDS) {
1157 OP *kid = cUNOPo->op_first;
1159 switch (kid->op_type) {
1164 forget_pmop((PMOP*)kid);
1166 find_and_forget_pmops(kid);
1167 kid = OpSIBLING(kid);
1173 =for apidoc Am|void|op_null|OP *o
1175 Neutralizes an op when it is no longer needed, but is still linked to from
1182 Perl_op_null(pTHX_ OP *o)
1186 PERL_ARGS_ASSERT_OP_NULL;
1188 if (o->op_type == OP_NULL)
1191 o->op_targ = o->op_type;
1192 OpTYPE_set(o, OP_NULL);
1196 Perl_op_refcnt_lock(pTHX)
1197 PERL_TSA_ACQUIRE(PL_op_mutex)
1202 PERL_UNUSED_CONTEXT;
1207 Perl_op_refcnt_unlock(pTHX)
1208 PERL_TSA_RELEASE(PL_op_mutex)
1213 PERL_UNUSED_CONTEXT;
1219 =for apidoc op_sibling_splice
1221 A general function for editing the structure of an existing chain of
1222 op_sibling nodes. By analogy with the perl-level C<splice()> function, allows
1223 you to delete zero or more sequential nodes, replacing them with zero or
1224 more different nodes. Performs the necessary op_first/op_last
1225 housekeeping on the parent node and op_sibling manipulation on the
1226 children. The last deleted node will be marked as as the last node by
1227 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1229 Note that op_next is not manipulated, and nodes are not freed; that is the
1230 responsibility of the caller. It also won't create a new list op for an
1231 empty list etc; use higher-level functions like op_append_elem() for that.
1233 C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
1234 the splicing doesn't affect the first or last op in the chain.
1236 C<start> is the node preceding the first node to be spliced. Node(s)
1237 following it will be deleted, and ops will be inserted after it. If it is
1238 C<NULL>, the first node onwards is deleted, and nodes are inserted at the
1241 C<del_count> is the number of nodes to delete. If zero, no nodes are deleted.
1242 If -1 or greater than or equal to the number of remaining kids, all
1243 remaining kids are deleted.
1245 C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
1246 If C<NULL>, no nodes are inserted.
1248 The head of the chain of deleted ops is returned, or C<NULL> if no ops were
1253 action before after returns
1254 ------ ----- ----- -------
1257 splice(P, A, 2, X-Y-Z) | | B-C
1261 splice(P, NULL, 1, X-Y) | | A
1265 splice(P, NULL, 3, NULL) | | A-B-C
1269 splice(P, B, 0, X-Y) | | NULL
1273 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1274 see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
1280 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1284 OP *last_del = NULL;
1285 OP *last_ins = NULL;
1288 first = OpSIBLING(start);
1292 first = cLISTOPx(parent)->op_first;
1294 assert(del_count >= -1);
1296 if (del_count && first) {
1298 while (--del_count && OpHAS_SIBLING(last_del))
1299 last_del = OpSIBLING(last_del);
1300 rest = OpSIBLING(last_del);
1301 OpLASTSIB_set(last_del, NULL);
1308 while (OpHAS_SIBLING(last_ins))
1309 last_ins = OpSIBLING(last_ins);
1310 OpMAYBESIB_set(last_ins, rest, NULL);
1316 OpMAYBESIB_set(start, insert, NULL);
1321 cLISTOPx(parent)->op_first = insert;
1323 parent->op_flags |= OPf_KIDS;
1325 parent->op_flags &= ~OPf_KIDS;
1329 /* update op_last etc */
1336 /* ought to use OP_CLASS(parent) here, but that can't handle
1337 * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1339 type = parent->op_type;
1340 if (type == OP_CUSTOM) {
1342 type = XopENTRYCUSTOM(parent, xop_class);
1345 if (type == OP_NULL)
1346 type = parent->op_targ;
1347 type = PL_opargs[type] & OA_CLASS_MASK;
1350 lastop = last_ins ? last_ins : start ? start : NULL;
1351 if ( type == OA_BINOP
1352 || type == OA_LISTOP
1356 cLISTOPx(parent)->op_last = lastop;
1359 OpLASTSIB_set(lastop, parent);
1361 return last_del ? first : NULL;
1364 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1368 #ifdef PERL_OP_PARENT
1371 =for apidoc op_parent
1373 Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
1374 This function is only available on perls built with C<-DPERL_OP_PARENT>.
1380 Perl_op_parent(OP *o)
1382 PERL_ARGS_ASSERT_OP_PARENT;
1383 while (OpHAS_SIBLING(o))
1385 return o->op_sibparent;
1391 /* replace the sibling following start with a new UNOP, which becomes
1392 * the parent of the original sibling; e.g.
1394 * op_sibling_newUNOP(P, A, unop-args...)
1402 * where U is the new UNOP.
1404 * parent and start args are the same as for op_sibling_splice();
1405 * type and flags args are as newUNOP().
1407 * Returns the new UNOP.
1411 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1415 kid = op_sibling_splice(parent, start, 1, NULL);
1416 newop = newUNOP(type, flags, kid);
1417 op_sibling_splice(parent, start, 0, newop);
1422 /* lowest-level newLOGOP-style function - just allocates and populates
1423 * the struct. Higher-level stuff should be done by S_new_logop() /
1424 * newLOGOP(). This function exists mainly to avoid op_first assignment
1425 * being spread throughout this file.
1429 S_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1434 NewOp(1101, logop, 1, LOGOP);
1435 OpTYPE_set(logop, type);
1436 logop->op_first = first;
1437 logop->op_other = other;
1438 logop->op_flags = OPf_KIDS;
1439 while (kid && OpHAS_SIBLING(kid))
1440 kid = OpSIBLING(kid);
1442 OpLASTSIB_set(kid, (OP*)logop);
1447 /* Contextualizers */
1450 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1452 Applies a syntactic context to an op tree representing an expression.
1453 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1454 or C<G_VOID> to specify the context to apply. The modified op tree
1461 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1463 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1465 case G_SCALAR: return scalar(o);
1466 case G_ARRAY: return list(o);
1467 case G_VOID: return scalarvoid(o);
1469 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1476 =for apidoc Am|OP*|op_linklist|OP *o
1477 This function is the implementation of the L</LINKLIST> macro. It should
1478 not be called directly.
1484 Perl_op_linklist(pTHX_ OP *o)
1488 PERL_ARGS_ASSERT_OP_LINKLIST;
1493 /* establish postfix order */
1494 first = cUNOPo->op_first;
1497 o->op_next = LINKLIST(first);
1500 OP *sibl = OpSIBLING(kid);
1502 kid->op_next = LINKLIST(sibl);
1517 S_scalarkids(pTHX_ OP *o)
1519 if (o && o->op_flags & OPf_KIDS) {
1521 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1528 S_scalarboolean(pTHX_ OP *o)
1530 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1532 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
1533 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
1534 if (ckWARN(WARN_SYNTAX)) {
1535 const line_t oldline = CopLINE(PL_curcop);
1537 if (PL_parser && PL_parser->copline != NOLINE) {
1538 /* This ensures that warnings are reported at the first line
1539 of the conditional, not the last. */
1540 CopLINE_set(PL_curcop, PL_parser->copline);
1542 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1543 CopLINE_set(PL_curcop, oldline);
1550 S_op_varname(pTHX_ const OP *o)
1553 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1554 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1556 const char funny = o->op_type == OP_PADAV
1557 || o->op_type == OP_RV2AV ? '@' : '%';
1558 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1560 if (cUNOPo->op_first->op_type != OP_GV
1561 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1563 return varname(gv, funny, 0, NULL, 0, 1);
1566 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, 1);
1571 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1572 { /* or not so pretty :-) */
1573 if (o->op_type == OP_CONST) {
1575 if (SvPOK(*retsv)) {
1577 *retsv = sv_newmortal();
1578 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1579 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1581 else if (!SvOK(*retsv))
1584 else *retpv = "...";
1588 S_scalar_slice_warning(pTHX_ const OP *o)
1592 o->op_type == OP_HSLICE ? '{' : '[';
1594 o->op_type == OP_HSLICE ? '}' : ']';
1596 SV *keysv = NULL; /* just to silence compiler warnings */
1597 const char *key = NULL;
1599 if (!(o->op_private & OPpSLICEWARNING))
1601 if (PL_parser && PL_parser->error_count)
1602 /* This warning can be nonsensical when there is a syntax error. */
1605 kid = cLISTOPo->op_first;
1606 kid = OpSIBLING(kid); /* get past pushmark */
1607 /* weed out false positives: any ops that can return lists */
1608 switch (kid->op_type) {
1634 /* Don't warn if we have a nulled list either. */
1635 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1638 assert(OpSIBLING(kid));
1639 name = S_op_varname(aTHX_ OpSIBLING(kid));
1640 if (!name) /* XS module fiddling with the op tree */
1642 S_op_pretty(aTHX_ kid, &keysv, &key);
1643 assert(SvPOK(name));
1644 sv_chop(name,SvPVX(name)+1);
1646 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1647 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1648 "Scalar value @%"SVf"%c%s%c better written as $%"SVf
1650 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1651 lbrack, key, rbrack);
1653 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1654 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1655 "Scalar value @%"SVf"%c%"SVf"%c better written as $%"
1657 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1658 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1662 Perl_scalar(pTHX_ OP *o)
1666 /* assumes no premature commitment */
1667 if (!o || (PL_parser && PL_parser->error_count)
1668 || (o->op_flags & OPf_WANT)
1669 || o->op_type == OP_RETURN)
1674 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1676 switch (o->op_type) {
1678 scalar(cBINOPo->op_first);
1679 if (o->op_private & OPpREPEAT_DOLIST) {
1680 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1681 assert(kid->op_type == OP_PUSHMARK);
1682 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1683 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1684 o->op_private &=~ OPpREPEAT_DOLIST;
1691 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
1701 if (o->op_flags & OPf_KIDS) {
1702 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
1708 kid = cLISTOPo->op_first;
1710 kid = OpSIBLING(kid);
1713 OP *sib = OpSIBLING(kid);
1714 if (sib && kid->op_type != OP_LEAVEWHEN
1715 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
1716 || ( sib->op_targ != OP_NEXTSTATE
1717 && sib->op_targ != OP_DBSTATE )))
1723 PL_curcop = &PL_compiling;
1728 kid = cLISTOPo->op_first;
1731 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1736 /* Warn about scalar context */
1737 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1738 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1741 const char *key = NULL;
1743 /* This warning can be nonsensical when there is a syntax error. */
1744 if (PL_parser && PL_parser->error_count)
1747 if (!ckWARN(WARN_SYNTAX)) break;
1749 kid = cLISTOPo->op_first;
1750 kid = OpSIBLING(kid); /* get past pushmark */
1751 assert(OpSIBLING(kid));
1752 name = S_op_varname(aTHX_ OpSIBLING(kid));
1753 if (!name) /* XS module fiddling with the op tree */
1755 S_op_pretty(aTHX_ kid, &keysv, &key);
1756 assert(SvPOK(name));
1757 sv_chop(name,SvPVX(name)+1);
1759 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1760 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1761 "%%%"SVf"%c%s%c in scalar context better written "
1763 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1764 lbrack, key, rbrack);
1766 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1767 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1768 "%%%"SVf"%c%"SVf"%c in scalar context better "
1769 "written as $%"SVf"%c%"SVf"%c",
1770 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1771 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1778 Perl_scalarvoid(pTHX_ OP *arg)
1784 SSize_t defer_stack_alloc = 0;
1785 SSize_t defer_ix = -1;
1786 OP **defer_stack = NULL;
1789 PERL_ARGS_ASSERT_SCALARVOID;
1792 SV *useless_sv = NULL;
1793 const char* useless = NULL;
1795 if (o->op_type == OP_NEXTSTATE
1796 || o->op_type == OP_DBSTATE
1797 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1798 || o->op_targ == OP_DBSTATE)))
1799 PL_curcop = (COP*)o; /* for warning below */
1801 /* assumes no premature commitment */
1802 want = o->op_flags & OPf_WANT;
1803 if ((want && want != OPf_WANT_SCALAR)
1804 || (PL_parser && PL_parser->error_count)
1805 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1810 if ((o->op_private & OPpTARGET_MY)
1811 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1813 /* newASSIGNOP has already applied scalar context, which we
1814 leave, as if this op is inside SASSIGN. */
1818 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1820 switch (o->op_type) {
1822 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1826 if (o->op_flags & OPf_STACKED)
1828 if (o->op_type == OP_REPEAT)
1829 scalar(cBINOPo->op_first);
1832 if (o->op_private == 4)
1867 case OP_GETSOCKNAME:
1868 case OP_GETPEERNAME:
1873 case OP_GETPRIORITY:
1898 useless = OP_DESC(o);
1908 case OP_AELEMFAST_LEX:
1912 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1913 /* Otherwise it's "Useless use of grep iterator" */
1914 useless = OP_DESC(o);
1918 kid = cLISTOPo->op_first;
1919 if (kid && kid->op_type == OP_PUSHRE
1921 && !(o->op_flags & OPf_STACKED)
1923 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
1925 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
1928 useless = OP_DESC(o);
1932 kid = cUNOPo->op_first;
1933 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1934 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1937 useless = "negative pattern binding (!~)";
1941 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1942 useless = "non-destructive substitution (s///r)";
1946 useless = "non-destructive transliteration (tr///r)";
1953 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1954 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
1955 useless = "a variable";
1960 if (cSVOPo->op_private & OPpCONST_STRICT)
1961 no_bareword_allowed(o);
1963 if (ckWARN(WARN_VOID)) {
1965 /* don't warn on optimised away booleans, eg
1966 * use constant Foo, 5; Foo || print; */
1967 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1969 /* the constants 0 and 1 are permitted as they are
1970 conventionally used as dummies in constructs like
1971 1 while some_condition_with_side_effects; */
1972 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
1974 else if (SvPOK(sv)) {
1975 SV * const dsv = newSVpvs("");
1977 = Perl_newSVpvf(aTHX_
1979 pv_pretty(dsv, SvPVX_const(sv),
1980 SvCUR(sv), 32, NULL, NULL,
1982 | PERL_PV_ESCAPE_NOCLEAR
1983 | PERL_PV_ESCAPE_UNI_DETECT));
1984 SvREFCNT_dec_NN(dsv);
1986 else if (SvOK(sv)) {
1987 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%"SVf")", SVfARG(sv));
1990 useless = "a constant (undef)";
1993 op_null(o); /* don't execute or even remember it */
1997 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */
2001 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */
2005 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */
2009 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */
2014 UNOP *refgen, *rv2cv;
2017 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2020 rv2gv = ((BINOP *)o)->op_last;
2021 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2024 refgen = (UNOP *)((BINOP *)o)->op_first;
2026 if (!refgen || (refgen->op_type != OP_REFGEN
2027 && refgen->op_type != OP_SREFGEN))
2030 exlist = (LISTOP *)refgen->op_first;
2031 if (!exlist || exlist->op_type != OP_NULL
2032 || exlist->op_targ != OP_LIST)
2035 if (exlist->op_first->op_type != OP_PUSHMARK
2036 && exlist->op_first != exlist->op_last)
2039 rv2cv = (UNOP*)exlist->op_last;
2041 if (rv2cv->op_type != OP_RV2CV)
2044 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2045 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2046 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2048 o->op_private |= OPpASSIGN_CV_TO_GV;
2049 rv2gv->op_private |= OPpDONT_INIT_GV;
2050 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2062 kid = cLOGOPo->op_first;
2063 if (kid->op_type == OP_NOT
2064 && (kid->op_flags & OPf_KIDS)) {
2065 if (o->op_type == OP_AND) {
2066 OpTYPE_set(o, OP_OR);
2068 OpTYPE_set(o, OP_AND);
2078 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2079 if (!(kid->op_flags & OPf_KIDS))
2086 if (o->op_flags & OPf_STACKED)
2093 if (!(o->op_flags & OPf_KIDS))
2104 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2105 if (!(kid->op_flags & OPf_KIDS))
2111 /* If the first kid after pushmark is something that the padrange
2112 optimisation would reject, then null the list and the pushmark.
2114 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2115 && ( !(kid = OpSIBLING(kid))
2116 || ( kid->op_type != OP_PADSV
2117 && kid->op_type != OP_PADAV
2118 && kid->op_type != OP_PADHV)
2119 || kid->op_private & ~OPpLVAL_INTRO
2120 || !(kid = OpSIBLING(kid))
2121 || ( kid->op_type != OP_PADSV
2122 && kid->op_type != OP_PADAV
2123 && kid->op_type != OP_PADHV)
2124 || kid->op_private & ~OPpLVAL_INTRO)
2126 op_null(cUNOPo->op_first); /* NULL the pushmark */
2127 op_null(o); /* NULL the list */
2139 /* mortalise it, in case warnings are fatal. */
2140 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2141 "Useless use of %"SVf" in void context",
2142 SVfARG(sv_2mortal(useless_sv)));
2145 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2146 "Useless use of %s in void context",
2149 } while ( (o = POP_DEFERRED_OP()) );
2151 Safefree(defer_stack);
2157 S_listkids(pTHX_ OP *o)
2159 if (o && o->op_flags & OPf_KIDS) {
2161 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2168 Perl_list(pTHX_ OP *o)
2172 /* assumes no premature commitment */
2173 if (!o || (o->op_flags & OPf_WANT)
2174 || (PL_parser && PL_parser->error_count)
2175 || o->op_type == OP_RETURN)
2180 if ((o->op_private & OPpTARGET_MY)
2181 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2183 return o; /* As if inside SASSIGN */
2186 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2188 switch (o->op_type) {
2190 list(cBINOPo->op_first);
2193 if (o->op_private & OPpREPEAT_DOLIST
2194 && !(o->op_flags & OPf_STACKED))
2196 list(cBINOPo->op_first);
2197 kid = cBINOPo->op_last;
2198 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2199 && SvIVX(kSVOP_sv) == 1)
2201 op_null(o); /* repeat */
2202 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2204 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2211 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2219 if (!(o->op_flags & OPf_KIDS))
2221 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2222 list(cBINOPo->op_first);
2223 return gen_constant_list(o);
2229 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2230 op_null(cUNOPo->op_first); /* NULL the pushmark */
2231 op_null(o); /* NULL the list */
2236 kid = cLISTOPo->op_first;
2238 kid = OpSIBLING(kid);
2241 OP *sib = OpSIBLING(kid);
2242 if (sib && kid->op_type != OP_LEAVEWHEN)
2248 PL_curcop = &PL_compiling;
2252 kid = cLISTOPo->op_first;
2259 S_scalarseq(pTHX_ OP *o)
2262 const OPCODE type = o->op_type;
2264 if (type == OP_LINESEQ || type == OP_SCOPE ||
2265 type == OP_LEAVE || type == OP_LEAVETRY)
2268 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2269 if ((sib = OpSIBLING(kid))
2270 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2271 || ( sib->op_targ != OP_NEXTSTATE
2272 && sib->op_targ != OP_DBSTATE )))
2277 PL_curcop = &PL_compiling;
2279 o->op_flags &= ~OPf_PARENS;
2280 if (PL_hints & HINT_BLOCK_SCOPE)
2281 o->op_flags |= OPf_PARENS;
2284 o = newOP(OP_STUB, 0);
2289 S_modkids(pTHX_ OP *o, I32 type)
2291 if (o && o->op_flags & OPf_KIDS) {
2293 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2294 op_lvalue(kid, type);
2300 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2301 * const fields. Also, convert CONST keys to HEK-in-SVs.
2302 * rop is the op that retrieves the hash;
2303 * key_op is the first key
2307 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op)
2313 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2315 if (rop->op_first->op_type == OP_PADSV)
2316 /* @$hash{qw(keys here)} */
2317 rop = (UNOP*)rop->op_first;
2319 /* @{$hash}{qw(keys here)} */
2320 if (rop->op_first->op_type == OP_SCOPE
2321 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2323 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2330 lexname = NULL; /* just to silence compiler warnings */
2331 fields = NULL; /* just to silence compiler warnings */
2335 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2336 SvPAD_TYPED(lexname))
2337 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2338 && isGV(*fields) && GvHV(*fields);
2340 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2342 if (key_op->op_type != OP_CONST)
2344 svp = cSVOPx_svp(key_op);
2346 /* Make the CONST have a shared SV */
2347 if ( !SvIsCOW_shared_hash(sv = *svp)
2348 && SvTYPE(sv) < SVt_PVMG
2353 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2354 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2355 SvREFCNT_dec_NN(sv);
2360 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2362 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
2363 "in variable %"PNf" of type %"HEKf,
2364 SVfARG(*svp), PNfARG(lexname),
2365 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2372 =for apidoc finalize_optree
2374 This function finalizes the optree. Should be called directly after
2375 the complete optree is built. It does some additional
2376 checking which can't be done in the normal C<ck_>xxx functions and makes
2377 the tree thread-safe.
2382 Perl_finalize_optree(pTHX_ OP* o)
2384 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
2387 SAVEVPTR(PL_curcop);
2395 /* Relocate sv to the pad for thread safety.
2396 * Despite being a "constant", the SV is written to,
2397 * for reference counts, sv_upgrade() etc. */
2398 PERL_STATIC_INLINE void
2399 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
2402 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
2404 ix = pad_alloc(OP_CONST, SVf_READONLY);
2405 SvREFCNT_dec(PAD_SVl(ix));
2406 PAD_SETSV(ix, *svp);
2407 /* XXX I don't know how this isn't readonly already. */
2408 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
2416 S_finalize_op(pTHX_ OP* o)
2418 PERL_ARGS_ASSERT_FINALIZE_OP;
2421 switch (o->op_type) {
2424 PL_curcop = ((COP*)o); /* for warnings */
2427 if (OpHAS_SIBLING(o)) {
2428 OP *sib = OpSIBLING(o);
2429 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
2430 && ckWARN(WARN_EXEC)
2431 && OpHAS_SIBLING(sib))
2433 const OPCODE type = OpSIBLING(sib)->op_type;
2434 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
2435 const line_t oldline = CopLINE(PL_curcop);
2436 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
2437 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2438 "Statement unlikely to be reached");
2439 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2440 "\t(Maybe you meant system() when you said exec()?)\n");
2441 CopLINE_set(PL_curcop, oldline);
2448 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
2449 GV * const gv = cGVOPo_gv;
2450 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
2451 /* XXX could check prototype here instead of just carping */
2452 SV * const sv = sv_newmortal();
2453 gv_efullname3(sv, gv, NULL);
2454 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
2455 "%"SVf"() called too early to check prototype",
2462 if (cSVOPo->op_private & OPpCONST_STRICT)
2463 no_bareword_allowed(o);
2467 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
2472 /* Relocate all the METHOP's SVs to the pad for thread safety. */
2473 case OP_METHOD_NAMED:
2474 case OP_METHOD_SUPER:
2475 case OP_METHOD_REDIR:
2476 case OP_METHOD_REDIR_SUPER:
2477 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
2486 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
2489 rop = (UNOP*)((BINOP*)o)->op_first;
2494 S_scalar_slice_warning(aTHX_ o);
2498 kid = OpSIBLING(cLISTOPo->op_first);
2499 if (/* I bet there's always a pushmark... */
2500 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
2501 && OP_TYPE_ISNT_NN(kid, OP_CONST))
2506 key_op = (SVOP*)(kid->op_type == OP_CONST
2508 : OpSIBLING(kLISTOP->op_first));
2510 rop = (UNOP*)((LISTOP*)o)->op_last;
2513 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
2515 S_check_hash_fields_and_hekify(aTHX_ rop, key_op);
2519 S_scalar_slice_warning(aTHX_ o);
2523 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
2524 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
2531 if (o->op_flags & OPf_KIDS) {
2535 /* check that op_last points to the last sibling, and that
2536 * the last op_sibling/op_sibparent field points back to the
2537 * parent, and that the only ops with KIDS are those which are
2538 * entitled to them */
2539 U32 type = o->op_type;
2543 if (type == OP_NULL) {
2545 /* ck_glob creates a null UNOP with ex-type GLOB
2546 * (which is a list op. So pretend it wasn't a listop */
2547 if (type == OP_GLOB)
2550 family = PL_opargs[type] & OA_CLASS_MASK;
2552 has_last = ( family == OA_BINOP
2553 || family == OA_LISTOP
2554 || family == OA_PMOP
2555 || family == OA_LOOP
2557 assert( has_last /* has op_first and op_last, or ...
2558 ... has (or may have) op_first: */
2559 || family == OA_UNOP
2560 || family == OA_UNOP_AUX
2561 || family == OA_LOGOP
2562 || family == OA_BASEOP_OR_UNOP
2563 || family == OA_FILESTATOP
2564 || family == OA_LOOPEXOP
2565 || family == OA_METHOP
2566 /* I don't know why SASSIGN is tagged as OA_BASEOP - DAPM */
2567 || type == OP_SASSIGN
2568 || type == OP_CUSTOM
2569 || type == OP_NULL /* new_logop does this */
2572 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2573 # ifdef PERL_OP_PARENT
2574 if (!OpHAS_SIBLING(kid)) {
2576 assert(kid == cLISTOPo->op_last);
2577 assert(kid->op_sibparent == o);
2580 if (has_last && !OpHAS_SIBLING(kid))
2581 assert(kid == cLISTOPo->op_last);
2586 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
2592 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
2594 Propagate lvalue ("modifiable") context to an op and its children.
2595 C<type> represents the context type, roughly based on the type of op that
2596 would do the modifying, although C<local()> is represented by C<OP_NULL>,
2597 because it has no op type of its own (it is signalled by a flag on
2600 This function detects things that can't be modified, such as C<$x+1>, and
2601 generates errors for them. For example, C<$x+1 = 2> would cause it to be
2602 called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
2604 It also flags things that need to behave specially in an lvalue context,
2605 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
2611 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
2614 PadnameLVALUE_on(pn);
2615 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
2618 assert(CvPADLIST(cv));
2620 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
2621 assert(PadnameLEN(pn));
2622 PadnameLVALUE_on(pn);
2627 S_vivifies(const OPCODE type)
2630 case OP_RV2AV: case OP_ASLICE:
2631 case OP_RV2HV: case OP_KVASLICE:
2632 case OP_RV2SV: case OP_HSLICE:
2633 case OP_AELEMFAST: case OP_KVHSLICE:
2642 S_lvref(pTHX_ OP *o, I32 type)
2646 switch (o->op_type) {
2648 for (kid = OpSIBLING(cUNOPo->op_first); kid;
2649 kid = OpSIBLING(kid))
2650 S_lvref(aTHX_ kid, type);
2655 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2656 o->op_flags |= OPf_STACKED;
2657 if (o->op_flags & OPf_PARENS) {
2658 if (o->op_private & OPpLVAL_INTRO) {
2659 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2660 "localized parenthesized array in list assignment"));
2664 OpTYPE_set(o, OP_LVAVREF);
2665 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
2666 o->op_flags |= OPf_MOD|OPf_REF;
2669 o->op_private |= OPpLVREF_AV;
2672 kid = cUNOPo->op_first;
2673 if (kid->op_type == OP_NULL)
2674 kid = cUNOPx(OpSIBLING(kUNOP->op_first))
2676 o->op_private = OPpLVREF_CV;
2677 if (kid->op_type == OP_GV)
2678 o->op_flags |= OPf_STACKED;
2679 else if (kid->op_type == OP_PADCV) {
2680 o->op_targ = kid->op_targ;
2682 op_free(cUNOPo->op_first);
2683 cUNOPo->op_first = NULL;
2684 o->op_flags &=~ OPf_KIDS;
2689 if (o->op_flags & OPf_PARENS) {
2691 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2692 "parenthesized hash in list assignment"));
2695 o->op_private |= OPpLVREF_HV;
2699 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2700 o->op_flags |= OPf_STACKED;
2703 if (o->op_flags & OPf_PARENS) goto parenhash;
2704 o->op_private |= OPpLVREF_HV;
2707 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2710 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2711 if (o->op_flags & OPf_PARENS) goto slurpy;
2712 o->op_private |= OPpLVREF_AV;
2716 o->op_private |= OPpLVREF_ELEM;
2717 o->op_flags |= OPf_STACKED;
2721 OpTYPE_set(o, OP_LVREFSLICE);
2722 o->op_private &= OPpLVAL_INTRO|OPpLVREF_ELEM;
2725 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2727 else if (!(o->op_flags & OPf_KIDS))
2729 if (o->op_targ != OP_LIST) {
2730 S_lvref(aTHX_ cBINOPo->op_first, type);
2735 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) {
2736 assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
2737 S_lvref(aTHX_ kid, type);
2741 if (o->op_flags & OPf_PARENS)
2746 /* diag_listed_as: Can't modify reference to %s in %s assignment */
2747 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
2748 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
2753 OpTYPE_set(o, OP_LVREF);
2755 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
2756 if (type == OP_ENTERLOOP)
2757 o->op_private |= OPpLVREF_ITER;
2761 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
2765 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
2768 if (!o || (PL_parser && PL_parser->error_count))
2771 if ((o->op_private & OPpTARGET_MY)
2772 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2777 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
2779 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
2781 switch (o->op_type) {
2786 if ((o->op_flags & OPf_PARENS))
2790 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
2791 !(o->op_flags & OPf_STACKED)) {
2792 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
2793 assert(cUNOPo->op_first->op_type == OP_NULL);
2794 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
2797 else { /* lvalue subroutine call */
2798 o->op_private |= OPpLVAL_INTRO;
2799 PL_modcount = RETURN_UNLIMITED_NUMBER;
2800 if (type == OP_GREPSTART || type == OP_ENTERSUB
2801 || type == OP_REFGEN || type == OP_LEAVESUBLV) {
2802 /* Potential lvalue context: */
2803 o->op_private |= OPpENTERSUB_INARGS;
2806 else { /* Compile-time error message: */
2807 OP *kid = cUNOPo->op_first;
2812 if (kid->op_type != OP_PUSHMARK) {
2813 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
2815 "panic: unexpected lvalue entersub "
2816 "args: type/targ %ld:%"UVuf,
2817 (long)kid->op_type, (UV)kid->op_targ);
2818 kid = kLISTOP->op_first;
2820 while (OpHAS_SIBLING(kid))
2821 kid = OpSIBLING(kid);
2822 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
2823 break; /* Postpone until runtime */
2826 kid = kUNOP->op_first;
2827 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
2828 kid = kUNOP->op_first;
2829 if (kid->op_type == OP_NULL)
2831 "Unexpected constant lvalue entersub "
2832 "entry via type/targ %ld:%"UVuf,
2833 (long)kid->op_type, (UV)kid->op_targ);
2834 if (kid->op_type != OP_GV) {
2841 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
2842 ? MUTABLE_CV(SvRV(gv))
2848 if (flags & OP_LVALUE_NO_CROAK)
2851 namesv = cv_name(cv, NULL, 0);
2852 yyerror_pv(Perl_form(aTHX_ "Can't modify non-lvalue "
2853 "subroutine call of &%"SVf" in %s",
2854 SVfARG(namesv), PL_op_desc[type]),
2862 if (flags & OP_LVALUE_NO_CROAK) return NULL;
2863 /* grep, foreach, subcalls, refgen */
2864 if (type == OP_GREPSTART || type == OP_ENTERSUB
2865 || type == OP_REFGEN || type == OP_LEAVESUBLV)
2867 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2868 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
2871 type ? PL_op_desc[type] : "local"));
2884 case OP_RIGHT_SHIFT:
2893 if (!(o->op_flags & OPf_STACKED))
2899 if (o->op_flags & OPf_STACKED) {
2903 if (!(o->op_private & OPpREPEAT_DOLIST))
2906 const I32 mods = PL_modcount;
2907 modkids(cBINOPo->op_first, type);
2908 if (type != OP_AASSIGN)
2910 kid = cBINOPo->op_last;
2911 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
2912 const IV iv = SvIV(kSVOP_sv);
2913 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
2915 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
2918 PL_modcount = RETURN_UNLIMITED_NUMBER;
2924 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2925 op_lvalue(kid, type);
2930 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
2931 PL_modcount = RETURN_UNLIMITED_NUMBER;
2932 return o; /* Treat \(@foo) like ordinary list. */
2936 if (scalar_mod_type(o, type))
2938 ref(cUNOPo->op_first, o->op_type);
2945 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
2946 if (type == OP_LEAVESUBLV && (
2947 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
2948 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2950 o->op_private |= OPpMAYBE_LVSUB;
2954 PL_modcount = RETURN_UNLIMITED_NUMBER;
2958 if (type == OP_LEAVESUBLV)
2959 o->op_private |= OPpMAYBE_LVSUB;
2962 PL_hints |= HINT_BLOCK_SCOPE;
2963 if (type == OP_LEAVESUBLV)
2964 o->op_private |= OPpMAYBE_LVSUB;
2968 ref(cUNOPo->op_first, o->op_type);
2972 PL_hints |= HINT_BLOCK_SCOPE;
2982 case OP_AELEMFAST_LEX:
2989 PL_modcount = RETURN_UNLIMITED_NUMBER;
2990 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
2991 return o; /* Treat \(@foo) like ordinary list. */
2992 if (scalar_mod_type(o, type))
2994 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2995 && type == OP_LEAVESUBLV)
2996 o->op_private |= OPpMAYBE_LVSUB;
3000 if (!type) /* local() */
3001 Perl_croak(aTHX_ "Can't localize lexical variable %"PNf,
3002 PNfARG(PAD_COMPNAME(o->op_targ)));
3003 if (!(o->op_private & OPpLVAL_INTRO)
3004 || ( type != OP_SASSIGN && type != OP_AASSIGN
3005 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
3006 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
3014 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
3018 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
3024 if (type == OP_LEAVESUBLV)
3025 o->op_private |= OPpMAYBE_LVSUB;
3026 if (o->op_flags & OPf_KIDS)
3027 op_lvalue(OpSIBLING(cBINOPo->op_first), type);
3032 ref(cBINOPo->op_first, o->op_type);
3033 if (type == OP_ENTERSUB &&
3034 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
3035 o->op_private |= OPpLVAL_DEFER;
3036 if (type == OP_LEAVESUBLV)
3037 o->op_private |= OPpMAYBE_LVSUB;
3044 o->op_private |= OPpLVALUE;
3050 if (o->op_flags & OPf_KIDS)
3051 op_lvalue(cLISTOPo->op_last, type);
3056 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
3058 else if (!(o->op_flags & OPf_KIDS))
3060 if (o->op_targ != OP_LIST) {
3061 op_lvalue(cBINOPo->op_first, type);
3067 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3068 /* elements might be in void context because the list is
3069 in scalar context or because they are attribute sub calls */
3070 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
3071 op_lvalue(kid, type);
3079 if (type == OP_LEAVESUBLV
3080 || !S_vivifies(cLOGOPo->op_first->op_type))
3081 op_lvalue(cLOGOPo->op_first, type);
3082 if (type == OP_LEAVESUBLV
3083 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
3084 op_lvalue(OpSIBLING(cLOGOPo->op_first), type);
3088 if (type != OP_AASSIGN && type != OP_SASSIGN
3089 && type != OP_ENTERLOOP)
3091 /* Don’t bother applying lvalue context to the ex-list. */
3092 kid = cUNOPx(cUNOPo->op_first)->op_first;
3093 assert (!OpHAS_SIBLING(kid));
3096 if (type != OP_AASSIGN) goto nomod;
3097 kid = cUNOPo->op_first;
3100 const U8 ec = PL_parser ? PL_parser->error_count : 0;
3101 S_lvref(aTHX_ kid, type);
3102 if (!PL_parser || PL_parser->error_count == ec) {
3103 if (!FEATURE_REFALIASING_IS_ENABLED)
3105 "Experimental aliasing via reference not enabled");
3106 Perl_ck_warner_d(aTHX_
3107 packWARN(WARN_EXPERIMENTAL__REFALIASING),
3108 "Aliasing via reference is experimental");
3111 if (o->op_type == OP_REFGEN)
3112 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
3117 kid = cLISTOPo->op_first;
3118 if (kid && kid->op_type == OP_PUSHRE &&
3120 || o->op_flags & OPf_STACKED
3122 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
3124 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
3127 /* This is actually @array = split. */
3128 PL_modcount = RETURN_UNLIMITED_NUMBER;
3134 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
3138 /* [20011101.069] File test operators interpret OPf_REF to mean that
3139 their argument is a filehandle; thus \stat(".") should not set
3141 if (type == OP_REFGEN &&
3142 PL_check[o->op_type] == Perl_ck_ftst)
3145 if (type != OP_LEAVESUBLV)
3146 o->op_flags |= OPf_MOD;
3148 if (type == OP_AASSIGN || type == OP_SASSIGN)
3149 o->op_flags |= OPf_SPECIAL|OPf_REF;
3150 else if (!type) { /* local() */
3153 o->op_private |= OPpLVAL_INTRO;
3154 o->op_flags &= ~OPf_SPECIAL;
3155 PL_hints |= HINT_BLOCK_SCOPE;
3160 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
3161 "Useless localization of %s", OP_DESC(o));
3164 else if (type != OP_GREPSTART && type != OP_ENTERSUB
3165 && type != OP_LEAVESUBLV)
3166 o->op_flags |= OPf_REF;
3171 S_scalar_mod_type(const OP *o, I32 type)
3176 if (o && o->op_type == OP_RV2GV)
3200 case OP_RIGHT_SHIFT:
3221 S_is_handle_constructor(const OP *o, I32 numargs)
3223 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
3225 switch (o->op_type) {
3233 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
3246 S_refkids(pTHX_ OP *o, I32 type)
3248 if (o && o->op_flags & OPf_KIDS) {
3250 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3257 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
3262 PERL_ARGS_ASSERT_DOREF;
3264 if (PL_parser && PL_parser->error_count)
3267 switch (o->op_type) {
3269 if ((type == OP_EXISTS || type == OP_DEFINED) &&
3270 !(o->op_flags & OPf_STACKED)) {
3271 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
3272 assert(cUNOPo->op_first->op_type == OP_NULL);
3273 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
3274 o->op_flags |= OPf_SPECIAL;
3276 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
3277 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3278 : type == OP_RV2HV ? OPpDEREF_HV
3280 o->op_flags |= OPf_MOD;
3286 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
3287 doref(kid, type, set_op_ref);
3290 if (type == OP_DEFINED)
3291 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3292 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3295 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3296 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3297 : type == OP_RV2HV ? OPpDEREF_HV
3299 o->op_flags |= OPf_MOD;
3306 o->op_flags |= OPf_REF;
3309 if (type == OP_DEFINED)
3310 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3311 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3317 o->op_flags |= OPf_REF;
3322 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
3324 doref(cBINOPo->op_first, type, set_op_ref);
3328 doref(cBINOPo->op_first, o->op_type, set_op_ref);
3329 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3330 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3331 : type == OP_RV2HV ? OPpDEREF_HV
3333 o->op_flags |= OPf_MOD;
3343 if (!(o->op_flags & OPf_KIDS))
3345 doref(cLISTOPo->op_last, type, set_op_ref);
3355 S_dup_attrlist(pTHX_ OP *o)
3359 PERL_ARGS_ASSERT_DUP_ATTRLIST;
3361 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
3362 * where the first kid is OP_PUSHMARK and the remaining ones
3363 * are OP_CONST. We need to push the OP_CONST values.
3365 if (o->op_type == OP_CONST)
3366 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
3368 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
3370 for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) {
3371 if (o->op_type == OP_CONST)
3372 rop = op_append_elem(OP_LIST, rop,
3373 newSVOP(OP_CONST, o->op_flags,
3374 SvREFCNT_inc_NN(cSVOPo->op_sv)));
3381 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
3383 PERL_ARGS_ASSERT_APPLY_ATTRS;
3385 SV * const stashsv = newSVhek(HvNAME_HEK(stash));
3387 /* fake up C<use attributes $pkg,$rv,@attrs> */
3389 #define ATTRSMODULE "attributes"
3390 #define ATTRSMODULE_PM "attributes.pm"
3393 aTHX_ PERL_LOADMOD_IMPORT_OPS,
3394 newSVpvs(ATTRSMODULE),
3396 op_prepend_elem(OP_LIST,
3397 newSVOP(OP_CONST, 0, stashsv),
3398 op_prepend_elem(OP_LIST,
3399 newSVOP(OP_CONST, 0,
3401 dup_attrlist(attrs))));
3406 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
3408 OP *pack, *imop, *arg;
3409 SV *meth, *stashsv, **svp;
3411 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
3416 assert(target->op_type == OP_PADSV ||
3417 target->op_type == OP_PADHV ||
3418 target->op_type == OP_PADAV);
3420 /* Ensure that attributes.pm is loaded. */
3421 /* Don't force the C<use> if we don't need it. */
3422 svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
3423 if (svp && *svp != &PL_sv_undef)
3424 NOOP; /* already in %INC */
3426 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
3427 newSVpvs(ATTRSMODULE), NULL);
3429 /* Need package name for method call. */
3430 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
3432 /* Build up the real arg-list. */
3433 stashsv = newSVhek(HvNAME_HEK(stash));
3435 arg = newOP(OP_PADSV, 0);
3436 arg->op_targ = target->op_targ;
3437 arg = op_prepend_elem(OP_LIST,
3438 newSVOP(OP_CONST, 0, stashsv),
3439 op_prepend_elem(OP_LIST,
3440 newUNOP(OP_REFGEN, 0,
3442 dup_attrlist(attrs)));
3444 /* Fake up a method call to import */
3445 meth = newSVpvs_share("import");
3446 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
3447 op_append_elem(OP_LIST,
3448 op_prepend_elem(OP_LIST, pack, arg),
3449 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
3451 /* Combine the ops. */
3452 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
3456 =notfor apidoc apply_attrs_string
3458 Attempts to apply a list of attributes specified by the C<attrstr> and
3459 C<len> arguments to the subroutine identified by the C<cv> argument which
3460 is expected to be associated with the package identified by the C<stashpv>
3461 argument (see L<attributes>). It gets this wrong, though, in that it
3462 does not correctly identify the boundaries of the individual attribute
3463 specifications within C<attrstr>. This is not really intended for the
3464 public API, but has to be listed here for systems such as AIX which
3465 need an explicit export list for symbols. (It's called from XS code
3466 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
3467 to respect attribute syntax properly would be welcome.
3473 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
3474 const char *attrstr, STRLEN len)
3478 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
3481 len = strlen(attrstr);
3485 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
3487 const char * const sstr = attrstr;
3488 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
3489 attrs = op_append_elem(OP_LIST, attrs,
3490 newSVOP(OP_CONST, 0,
3491 newSVpvn(sstr, attrstr-sstr)));
3495 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3496 newSVpvs(ATTRSMODULE),
3497 NULL, op_prepend_elem(OP_LIST,
3498 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
3499 op_prepend_elem(OP_LIST,
3500 newSVOP(OP_CONST, 0,
3501 newRV(MUTABLE_SV(cv))),
3506 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name)
3508 OP *new_proto = NULL;
3513 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
3519 if (o->op_type == OP_CONST) {
3520 pv = SvPV(cSVOPo_sv, pvlen);
3521 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3522 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3523 SV ** const tmpo = cSVOPx_svp(o);
3524 SvREFCNT_dec(cSVOPo_sv);
3529 } else if (o->op_type == OP_LIST) {
3531 assert(o->op_flags & OPf_KIDS);
3532 lasto = cLISTOPo->op_first;
3533 assert(lasto->op_type == OP_PUSHMARK);
3534 for (o = OpSIBLING(lasto); o; o = OpSIBLING(o)) {
3535 if (o->op_type == OP_CONST) {
3536 pv = SvPV(cSVOPo_sv, pvlen);
3537 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3538 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3539 SV ** const tmpo = cSVOPx_svp(o);
3540 SvREFCNT_dec(cSVOPo_sv);
3542 if (new_proto && ckWARN(WARN_MISC)) {
3544 const char * newp = SvPV(cSVOPo_sv, new_len);
3545 Perl_warner(aTHX_ packWARN(WARN_MISC),
3546 "Attribute prototype(%"UTF8f") discards earlier prototype attribute in same sub",
3547 UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
3553 /* excise new_proto from the list */
3554 op_sibling_splice(*attrs, lasto, 1, NULL);
3561 /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
3562 would get pulled in with no real need */
3563 if (!OpHAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
3572 svname = sv_newmortal();
3573 gv_efullname3(svname, name, NULL);
3575 else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
3576 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
3578 svname = (SV *)name;
3579 if (ckWARN(WARN_ILLEGALPROTO))
3580 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE);
3581 if (*proto && ckWARN(WARN_PROTOTYPE)) {
3582 STRLEN old_len, new_len;
3583 const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
3584 const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
3586 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3587 "Prototype '%"UTF8f"' overridden by attribute 'prototype(%"UTF8f")'"
3589 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
3590 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
3600 S_cant_declare(pTHX_ OP *o)
3602 if (o->op_type == OP_NULL
3603 && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
3604 o = cUNOPo->op_first;
3605 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
3606 o->op_type == OP_NULL
3607 && o->op_flags & OPf_SPECIAL
3610 PL_parser->in_my == KEY_our ? "our" :
3611 PL_parser->in_my == KEY_state ? "state" :
3616 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
3619 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
3621 PERL_ARGS_ASSERT_MY_KID;
3623 if (!o || (PL_parser && PL_parser->error_count))
3628 if (type == OP_LIST) {
3630 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3631 my_kid(kid, attrs, imopsp);
3633 } else if (type == OP_UNDEF || type == OP_STUB) {
3635 } else if (type == OP_RV2SV || /* "our" declaration */
3637 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
3638 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
3639 S_cant_declare(aTHX_ o);
3641 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
3643 PL_parser->in_my = FALSE;
3644 PL_parser->in_my_stash = NULL;
3645 apply_attrs(GvSTASH(gv),
3646 (type == OP_RV2SV ? GvSV(gv) :
3647 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
3648 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
3651 o->op_private |= OPpOUR_INTRO;
3654 else if (type != OP_PADSV &&
3657 type != OP_PUSHMARK)
3659 S_cant_declare(aTHX_ o);
3662 else if (attrs && type != OP_PUSHMARK) {
3666 PL_parser->in_my = FALSE;
3667 PL_parser->in_my_stash = NULL;
3669 /* check for C<my Dog $spot> when deciding package */
3670 stash = PAD_COMPNAME_TYPE(o->op_targ);
3672 stash = PL_curstash;
3673 apply_attrs_my(stash, o, attrs, imopsp);
3675 o->op_flags |= OPf_MOD;
3676 o->op_private |= OPpLVAL_INTRO;
3678 o->op_private |= OPpPAD_STATE;
3683 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
3686 int maybe_scalar = 0;
3688 PERL_ARGS_ASSERT_MY_ATTRS;
3690 /* [perl #17376]: this appears to be premature, and results in code such as
3691 C< our(%x); > executing in list mode rather than void mode */
3693 if (o->op_flags & OPf_PARENS)
3703 o = my_kid(o, attrs, &rops);
3705 if (maybe_scalar && o->op_type == OP_PADSV) {
3706 o = scalar(op_append_list(OP_LIST, rops, o));
3707 o->op_private |= OPpLVAL_INTRO;
3710 /* The listop in rops might have a pushmark at the beginning,
3711 which will mess up list assignment. */
3712 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
3713 if (rops->op_type == OP_LIST &&
3714 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
3716 OP * const pushmark = lrops->op_first;
3717 /* excise pushmark */
3718 op_sibling_splice(rops, NULL, 1, NULL);
3721 o = op_append_list(OP_LIST, o, rops);
3724 PL_parser->in_my = FALSE;
3725 PL_parser->in_my_stash = NULL;
3730 Perl_sawparens(pTHX_ OP *o)
3732 PERL_UNUSED_CONTEXT;
3734 o->op_flags |= OPf_PARENS;
3739 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
3743 const OPCODE ltype = left->op_type;
3744 const OPCODE rtype = right->op_type;
3746 PERL_ARGS_ASSERT_BIND_MATCH;
3748 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
3749 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
3751 const char * const desc
3753 rtype == OP_SUBST || rtype == OP_TRANS
3754 || rtype == OP_TRANSR
3756 ? (int)rtype : OP_MATCH];
3757 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
3759 S_op_varname(aTHX_ left);
3761 Perl_warner(aTHX_ packWARN(WARN_MISC),
3762 "Applying %s to %"SVf" will act on scalar(%"SVf")",
3763 desc, SVfARG(name), SVfARG(name));
3765 const char * const sample = (isary
3766 ? "@array" : "%hash");
3767 Perl_warner(aTHX_ packWARN(WARN_MISC),
3768 "Applying %s to %s will act on scalar(%s)",
3769 desc, sample, sample);
3773 if (rtype == OP_CONST &&
3774 cSVOPx(right)->op_private & OPpCONST_BARE &&
3775 cSVOPx(right)->op_private & OPpCONST_STRICT)
3777 no_bareword_allowed(right);
3780 /* !~ doesn't make sense with /r, so error on it for now */
3781 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
3783 /* diag_listed_as: Using !~ with %s doesn't make sense */
3784 yyerror("Using !~ with s///r doesn't make sense");
3785 if (rtype == OP_TRANSR && type == OP_NOT)
3786 /* diag_listed_as: Using !~ with %s doesn't make sense */
3787 yyerror("Using !~ with tr///r doesn't make sense");
3789 ismatchop = (rtype == OP_MATCH ||
3790 rtype == OP_SUBST ||
3791 rtype == OP_TRANS || rtype == OP_TRANSR)
3792 && !(right->op_flags & OPf_SPECIAL);
3793 if (ismatchop && right->op_private & OPpTARGET_MY) {
3795 right->op_private &= ~OPpTARGET_MY;
3797 if (!(right->op_flags & OPf_STACKED) && !right->op_targ && ismatchop) {
3798 if (left->op_type == OP_PADSV
3799 && !(left->op_private & OPpLVAL_INTRO))
3801 right->op_targ = left->op_targ;
3806 right->op_flags |= OPf_STACKED;
3807 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
3808 ! (rtype == OP_TRANS &&
3809 right->op_private & OPpTRANS_IDENTICAL) &&
3810 ! (rtype == OP_SUBST &&
3811 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
3812 left = op_lvalue(left, rtype);
3813 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
3814 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
3816 o = op_prepend_elem(rtype, scalar(left), right);
3819 return newUNOP(OP_NOT, 0, scalar(o));
3823 return bind_match(type, left,
3824 pmruntime(newPMOP(OP_MATCH, 0), right, NULL, 0, 0));
3828 Perl_invert(pTHX_ OP *o)
3832 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
3836 =for apidoc Amx|OP *|op_scope|OP *o
3838 Wraps up an op tree with some additional ops so that at runtime a dynamic
3839 scope will be created. The original ops run in the new dynamic scope,
3840 and then, provided that they exit normally, the scope will be unwound.
3841 The additional ops used to create and unwind the dynamic scope will
3842 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
3843 instead if the ops are simple enough to not need the full dynamic scope
3850 Perl_op_scope(pTHX_ OP *o)
3854 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
3855 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
3856 OpTYPE_set(o, OP_LEAVE);
3858 else if (o->op_type == OP_LINESEQ) {
3860 OpTYPE_set(o, OP_SCOPE);
3861 kid = ((LISTOP*)o)->op_first;
3862 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
3865 /* The following deals with things like 'do {1 for 1}' */
3866 kid = OpSIBLING(kid);
3868 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
3873 o = newLISTOP(OP_SCOPE, 0, o, NULL);
3879 Perl_op_unscope(pTHX_ OP *o)
3881 if (o && o->op_type == OP_LINESEQ) {
3882 OP *kid = cLISTOPo->op_first;
3883 for(; kid; kid = OpSIBLING(kid))
3884 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
3891 =for apidoc Am|int|block_start|int full
3893 Handles compile-time scope entry.
3894 Arranges for hints to be restored on block
3895 exit and also handles pad sequence numbers to make lexical variables scope
3896 right. Returns a savestack index for use with C<block_end>.
3902 Perl_block_start(pTHX_ int full)
3904 const int retval = PL_savestack_ix;
3906 PL_compiling.cop_seq = PL_cop_seqmax;
3908 pad_block_start(full);
3910 PL_hints &= ~HINT_BLOCK_SCOPE;
3911 SAVECOMPILEWARNINGS();
3912 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
3913 SAVEI32(PL_compiling.cop_seq);
3914 PL_compiling.cop_seq = 0;
3916 CALL_BLOCK_HOOKS(bhk_start, full);
3922 =for apidoc Am|OP *|block_end|I32 floor|OP *seq
3924 Handles compile-time scope exit. C<floor>
3925 is the savestack index returned by
3926 C<block_start>, and C<seq> is the body of the block. Returns the block,
3933 Perl_block_end(pTHX_ I32 floor, OP *seq)
3935 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
3936 OP* retval = scalarseq(seq);
3939 /* XXX Is the null PL_parser check necessary here? */
3940 assert(PL_parser); /* Let’s find out under debugging builds. */
3941 if (PL_parser && PL_parser->parsed_sub) {
3942 o = newSTATEOP(0, NULL, NULL);
3944 retval = op_append_elem(OP_LINESEQ, retval, o);
3947 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
3951 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
3955 /* pad_leavemy has created a sequence of introcv ops for all my
3956 subs declared in the block. We have to replicate that list with
3957 clonecv ops, to deal with this situation:
3962 sub s1 { state sub foo { \&s2 } }
3965 Originally, I was going to have introcv clone the CV and turn
3966 off the stale flag. Since &s1 is declared before &s2, the
3967 introcv op for &s1 is executed (on sub entry) before the one for
3968 &s2. But the &foo sub inside &s1 (which is cloned when &s1 is
3969 cloned, since it is a state sub) closes over &s2 and expects
3970 to see it in its outer CV’s pad. If the introcv op clones &s1,
3971 then &s2 is still marked stale. Since &s1 is not active, and
3972 &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia-
3973 ble will not stay shared’ warning. Because it is the same stub
3974 that will be used when the introcv op for &s2 is executed, clos-
3975 ing over it is safe. Hence, we have to turn off the stale flag
3976 on all lexical subs in the block before we clone any of them.
3977 Hence, having introcv clone the sub cannot work. So we create a
3978 list of ops like this:
4002 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
4003 OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
4004 for (;; kid = OpSIBLING(kid)) {
4005 OP *newkid = newOP(OP_CLONECV, 0);
4006 newkid->op_targ = kid->op_targ;
4007 o = op_append_elem(OP_LINESEQ, o, newkid);
4008 if (kid == last) break;
4010 retval = op_prepend_elem(OP_LINESEQ, o, retval);
4013 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
4019 =head1 Compile-time scope hooks
4021 =for apidoc Aox||blockhook_register
4023 Register a set of hooks to be called when the Perl lexical scope changes
4024 at compile time. See L<perlguts/"Compile-time scope hooks">.
4030 Perl_blockhook_register(pTHX_ BHK *hk)
4032 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
4034 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
4038 Perl_newPROG(pTHX_ OP *o)
4040 PERL_ARGS_ASSERT_NEWPROG;
4047 PL_eval_root = newUNOP(OP_LEAVEEVAL,
4048 ((PL_in_eval & EVAL_KEEPERR)
4049 ? OPf_SPECIAL : 0), o);
4051 cx = &cxstack[cxstack_ix];
4052 assert(CxTYPE(cx) == CXt_EVAL);
4054 if ((cx->blk_gimme & G_WANT) == G_VOID)
4055 scalarvoid(PL_eval_root);
4056 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
4059 scalar(PL_eval_root);
4061 PL_eval_start = op_linklist(PL_eval_root);
4062 PL_eval_root->op_private |= OPpREFCOUNTED;
4063 OpREFCNT_set(PL_eval_root, 1);
4064 PL_eval_root->op_next = 0;
4065 i = PL_savestack_ix;
4068 CALL_PEEP(PL_eval_start);
4069 finalize_optree(PL_eval_root);
4070 S_prune_chain_head(&PL_eval_start);
4072 PL_savestack_ix = i;
4075 if (o->op_type == OP_STUB) {
4076 /* This block is entered if nothing is compiled for the main
4077 program. This will be the case for an genuinely empty main
4078 program, or one which only has BEGIN blocks etc, so already
4081 Historically (5.000) the guard above was !o. However, commit
4082 f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
4083 c71fccf11fde0068, changed perly.y so that newPROG() is now
4084 called with the output of block_end(), which returns a new
4085 OP_STUB for the case of an empty optree. ByteLoader (and
4086 maybe other things) also take this path, because they set up
4087 PL_main_start and PL_main_root directly, without generating an
4090 If the parsing the main program aborts (due to parse errors,
4091 or due to BEGIN or similar calling exit), then newPROG()
4092 isn't even called, and hence this code path and its cleanups
4093 are skipped. This shouldn't make a make a difference:
4094 * a non-zero return from perl_parse is a failure, and
4095 perl_destruct() should be called immediately.
4096 * however, if exit(0) is called during the parse, then
4097 perl_parse() returns 0, and perl_run() is called. As
4098 PL_main_start will be NULL, perl_run() will return
4099 promptly, and the exit code will remain 0.
4102 PL_comppad_name = 0;
4104 S_op_destroy(aTHX_ o);
4107 PL_main_root = op_scope(sawparens(scalarvoid(o)));
4108 PL_curcop = &PL_compiling;
4109 PL_main_start = LINKLIST(PL_main_root);
4110 PL_main_root->op_private |= OPpREFCOUNTED;
4111 OpREFCNT_set(PL_main_root, 1);
4112 PL_main_root->op_next = 0;
4113 CALL_PEEP(PL_main_start);
4114 finalize_optree(PL_main_root);
4115 S_prune_chain_head(&PL_main_start);
4116 cv_forget_slab(PL_compcv);
4119 /* Register with debugger */
4121 CV * const cv = get_cvs("DB::postponed", 0);
4125 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
4127 call_sv(MUTABLE_SV(cv), G_DISCARD);
4134 Perl_localize(pTHX_ OP *o, I32 lex)
4136 PERL_ARGS_ASSERT_LOCALIZE;
4138 if (o->op_flags & OPf_PARENS)
4139 /* [perl #17376]: this appears to be premature, and results in code such as
4140 C< our(%x); > executing in list mode rather than void mode */
4147 if ( PL_parser->bufptr > PL_parser->oldbufptr
4148 && PL_parser->bufptr[-1] == ','
4149 && ckWARN(WARN_PARENTHESIS))
4151 char *s = PL_parser->bufptr;
4154 /* some heuristics to detect a potential error */
4155 while (*s && (strchr(", \t\n", *s)))
4159 if (*s && (strchr("@$%", *s) || (!lex && *s == '*'))
4161 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
4164 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
4166 while (*s && (strchr(", \t\n", *s)))
4172 if (sigil && (*s == ';' || *s == '=')) {
4173 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
4174 "Parentheses missing around \"%s\" list",
4176 ? (PL_parser->in_my == KEY_our
4178 : PL_parser->in_my == KEY_state
4188 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
4189 PL_parser->in_my = FALSE;
4190 PL_parser->in_my_stash = NULL;
4195 Perl_jmaybe(pTHX_ OP *o)
4197 PERL_ARGS_ASSERT_JMAYBE;
4199 if (o->op_type == OP_LIST) {
4201 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
4202 o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
4207 PERL_STATIC_INLINE OP *
4208 S_op_std_init(pTHX_ OP *o)
4210 I32 type = o->op_type;
4212 PERL_ARGS_ASSERT_OP_STD_INIT;
4214 if (PL_opargs[type] & OA_RETSCALAR)
4216 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
4217 o->op_targ = pad_alloc(type, SVs_PADTMP);
4222 PERL_STATIC_INLINE OP *
4223 S_op_integerize(pTHX_ OP *o)
4225 I32 type = o->op_type;
4227 PERL_ARGS_ASSERT_OP_INTEGERIZE;
4229 /* integerize op. */
4230 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
4233 o->op_ppaddr = PL_ppaddr[++(o->op_type)];
4236 if (type == OP_NEGATE)
4237 /* XXX might want a ck_negate() for this */
4238 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
4244 S_fold_constants(pTHX_ OP *o)
4249 VOL I32 type = o->op_type;
4255 SV * const oldwarnhook = PL_warnhook;
4256 SV * const olddiehook = PL_diehook;
4258 U8 oldwarn = PL_dowarn;
4261 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
4263 if (!(PL_opargs[type] & OA_FOLDCONST))
4272 #ifdef USE_LOCALE_CTYPE
4273 if (IN_LC_COMPILETIME(LC_CTYPE))
4282 #ifdef USE_LOCALE_COLLATE
4283 if (IN_LC_COMPILETIME(LC_COLLATE))
4288 /* XXX what about the numeric ops? */
4289 #ifdef USE_LOCALE_NUMERIC
4290 if (IN_LC_COMPILETIME(LC_NUMERIC))
4295 if (!OpHAS_SIBLING(cLISTOPo->op_first)
4296 || OpSIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
4299 SV * const sv = cSVOPx_sv(OpSIBLING(cLISTOPo->op_first));
4300 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
4302 const char *s = SvPVX_const(sv);
4303 while (s < SvEND(sv)) {
4304 if (isALPHA_FOLD_EQ(*s, 'p')) goto nope;
4311 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
4314 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
4315 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
4319 if (PL_parser && PL_parser->error_count)
4320 goto nope; /* Don't try to run w/ errors */
4322 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4323 const OPCODE type = curop->op_type;
4324 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
4326 type != OP_SCALAR &&
4328 type != OP_PUSHMARK)
4334 curop = LINKLIST(o);
4335 old_next = o->op_next;
4339 oldscope = PL_scopestack_ix;
4340 create_eval_scope(G_FAKINGEVAL);
4342 /* Verify that we don't need to save it: */
4343 assert(PL_curcop == &PL_compiling);
4344 StructCopy(&PL_compiling, ¬_compiling, COP);
4345 PL_curcop = ¬_compiling;
4346 /* The above ensures that we run with all the correct hints of the
4347 currently compiling COP, but that IN_PERL_RUNTIME is true. */
4348 assert(IN_PERL_RUNTIME);
4349 PL_warnhook = PERL_WARNHOOK_FATAL;
4353 /* Effective $^W=1. */
4354 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
4355 PL_dowarn |= G_WARN_ON;
4360 sv = *(PL_stack_sp--);
4361 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
4362 pad_swipe(o->op_targ, FALSE);
4364 else if (SvTEMP(sv)) { /* grab mortal temp? */
4365 SvREFCNT_inc_simple_void(sv);
4368 else { assert(SvIMMORTAL(sv)); }
4371 /* Something tried to die. Abandon constant folding. */
4372 /* Pretend the error never happened. */
4374 o->op_next = old_next;
4378 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
4379 PL_warnhook = oldwarnhook;
4380 PL_diehook = olddiehook;
4381 /* XXX note that this croak may fail as we've already blown away
4382 * the stack - eg any nested evals */
4383 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
4386 PL_dowarn = oldwarn;
4387 PL_warnhook = oldwarnhook;
4388 PL_diehook = olddiehook;
4389 PL_curcop = &PL_compiling;
4391 if (PL_scopestack_ix > oldscope)
4392 delete_eval_scope();
4397 /* OP_STRINGIFY and constant folding are used to implement qq.
4398 Here the constant folding is an implementation detail that we
4399 want to hide. If the stringify op is itself already marked
4400 folded, however, then it is actually a folded join. */
4401 is_stringify = type == OP_STRINGIFY && !o->op_folded;
4406 else if (!SvIMMORTAL(sv)) {
4410 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
4411 if (!is_stringify) newop->op_folded = 1;
4419 S_gen_constant_list(pTHX_ OP *o)
4423 const SSize_t oldtmps_floor = PL_tmps_floor;
4428 if (PL_parser && PL_parser->error_count)
4429 return o; /* Don't attempt to run with errors */
4431 curop = LINKLIST(o);
4434 S_prune_chain_head(&curop);
4436 Perl_pp_pushmark(aTHX);
4439 assert (!(curop->op_flags & OPf_SPECIAL));
4440 assert(curop->op_type == OP_RANGE);
4441 Perl_pp_anonlist(aTHX);
4442 PL_tmps_floor = oldtmps_floor;
4444 OpTYPE_set(o, OP_RV2AV);
4445 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
4446 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
4447 o->op_opt = 0; /* needs to be revisited in rpeep() */
4448 av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
4450 /* replace subtree with an OP_CONST */
4451 curop = ((UNOP*)o)->op_first;
4452 op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
4455 if (AvFILLp(av) != -1)
4456 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
4459 SvREADONLY_on(*svp);
4466 =head1 Optree Manipulation Functions
4469 /* List constructors */
4472 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
4474 Append an item to the list of ops contained directly within a list-type
4475 op, returning the lengthened list. C<first> is the list-type op,
4476 and C<last> is the op to append to the list. C<optype> specifies the
4477 intended opcode for the list. If C<first> is not already a list of the
4478 right type, it will be upgraded into one. If either C<first> or C<last>
4479 is null, the other is returned unchanged.
4485 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
4493 if (first->op_type != (unsigned)type
4494 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
4496 return newLISTOP(type, 0, first, last);
4499 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
4500 first->op_flags |= OPf_KIDS;
4505 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
4507 Concatenate the lists of ops contained directly within two list-type ops,
4508 returning the combined list. C<first> and C<last> are the list-type ops
4509 to concatenate. C<optype> specifies the intended opcode for the list.
4510 If either C<first> or C<last> is not already a list of the right type,
4511 it will be upgraded into one. If either C<first> or C<last> is null,
4512 the other is returned unchanged.
4518 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
4526 if (first->op_type != (unsigned)type)
4527 return op_prepend_elem(type, first, last);
4529 if (last->op_type != (unsigned)type)
4530 return op_append_elem(type, first, last);
4532 OpMORESIB_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first);
4533 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
4534 OpLASTSIB_set(((LISTOP*)first)->op_last, first);
4535 first->op_flags |= (last->op_flags & OPf_KIDS);
4537 S_op_destroy(aTHX_ last);
4543 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
4545 Prepend an item to the list of ops contained directly within a list-type
4546 op, returning the lengthened list. C<first> is the op to prepend to the
4547 list, and C<last> is the list-type op. C<optype> specifies the intended
4548 opcode for the list. If C<last> is not already a list of the right type,
4549 it will be upgraded into one. If either C<first> or C<last> is null,
4550 the other is returned unchanged.
4556 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
4564 if (last->op_type == (unsigned)type) {
4565 if (type == OP_LIST) { /* already a PUSHMARK there */
4566 /* insert 'first' after pushmark */
4567 op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first);
4568 if (!(first->op_flags & OPf_PARENS))
4569 last->op_flags &= ~OPf_PARENS;
4572 op_sibling_splice(last, NULL, 0, first);
4573 last->op_flags |= OPf_KIDS;
4577 return newLISTOP(type, 0, first, last);
4581 =for apidoc Am|OP *|op_convert_list|I32 type|I32 flags|OP *o
4583 Converts C<o> into a list op if it is not one already, and then converts it
4584 into the specified C<type>, calling its check function, allocating a target if
4585 it needs one, and folding constants.
4587 A list-type op is usually constructed one kid at a time via C<newLISTOP>,
4588 C<op_prepend_elem> and C<op_append_elem>. Then finally it is passed to
4589 C<op_convert_list> to make it the right type.
4595 Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o)
4598 if (type < 0) type = -type, flags |= OPf_SPECIAL;
4599 if (!o || o->op_type != OP_LIST)
4600 o = force_list(o, 0);
4603 o->op_flags &= ~OPf_WANT;
4604 o->op_private &= ~OPpLVAL_INTRO;
4607 if (!(PL_opargs[type] & OA_MARK))
4608 op_null(cLISTOPo->op_first);
4610 OP * const kid2 = OpSIBLING(cLISTOPo->op_first);
4611 if (kid2 && kid2->op_type == OP_COREARGS) {
4612 op_null(cLISTOPo->op_first);
4613 kid2->op_private |= OPpCOREARGS_PUSHMARK;
4617 OpTYPE_set(o, type);
4618 o->op_flags |= flags;
4619 if (flags & OPf_FOLDED)
4622 o = CHECKOP(type, o);
4623 if (o->op_type != (unsigned)type)
4626 return fold_constants(op_integerize(op_std_init(o)));
4633 =head1 Optree construction
4635 =for apidoc Am|OP *|newNULLLIST
4637 Constructs, checks, and returns a new C<stub> op, which represents an
4638 empty list expression.
4644 Perl_newNULLLIST(pTHX)
4646 return newOP(OP_STUB, 0);
4649 /* promote o and any siblings to be a list if its not already; i.e.
4657 * pushmark - o - A - B
4659 * If nullit it true, the list op is nulled.
4663 S_force_list(pTHX_ OP *o, bool nullit)
4665 if (!o || o->op_type != OP_LIST) {
4668 /* manually detach any siblings then add them back later */
4669 rest = OpSIBLING(o);
4670 OpLASTSIB_set(o, NULL);
4672 o = newLISTOP(OP_LIST, 0, o, NULL);
4674 op_sibling_splice(o, cLISTOPo->op_last, 0, rest);
4682 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
4684 Constructs, checks, and returns an op of any list type. C<type> is
4685 the opcode. C<flags> gives the eight bits of C<op_flags>, except that
4686 C<OPf_KIDS> will be set automatically if required. C<first> and C<last>
4687 supply up to two ops to be direct children of the list op; they are
4688 consumed by this function and become part of the constructed op tree.
4690 For most list operators, the check function expects all the kid ops to be
4691 present already, so calling C<newLISTOP(OP_JOIN, ...)> (e.g.) is not
4692 appropriate. What you want to do in that case is create an op of type
4693 C<OP_LIST>, append more children to it, and then call L</op_convert_list>.
4694 See L</op_convert_list> for more information.
4701 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4706 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP
4707 || type == OP_CUSTOM);
4709 NewOp(1101, listop, 1, LISTOP);
4711 OpTYPE_set(listop, type);
4714 listop->op_flags = (U8)flags;
4718 else if (!first && last)
4721 OpMORESIB_set(first, last);
4722 listop->op_first = first;
4723 listop->op_last = last;
4724 if (type == OP_LIST) {
4725 OP* const pushop = newOP(OP_PUSHMARK, 0);
4726 OpMORESIB_set(pushop, first);
4727 listop->op_first = pushop;
4728 listop->op_flags |= OPf_KIDS;
4730 listop->op_last = pushop;
4732 if (listop->op_last)
4733 OpLASTSIB_set(listop->op_last, (OP*)listop);
4735 return CHECKOP(type, listop);
4739 =for apidoc Am|OP *|newOP|I32 type|I32 flags
4741 Constructs, checks, and returns an op of any base type (any type that
4742 has no extra fields). C<type> is the opcode. C<flags> gives the
4743 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
4750 Perl_newOP(pTHX_ I32 type, I32 flags)
4755 if (type == -OP_ENTEREVAL) {
4756 type = OP_ENTEREVAL;
4757 flags |= OPpEVAL_BYTES<<8;
4760 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
4761 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4762 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4763 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4765 NewOp(1101, o, 1, OP);
4766 OpTYPE_set(o, type);
4767 o->op_flags = (U8)flags;
4770 o->op_private = (U8)(0 | (flags >> 8));
4771 if (PL_opargs[type] & OA_RETSCALAR)
4773 if (PL_opargs[type] & OA_TARGET)
4774 o->op_targ = pad_alloc(type, SVs_PADTMP);
4775 return CHECKOP(type, o);
4779 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
4781 Constructs, checks, and returns an op of any unary type. C<type> is
4782 the opcode. C<flags> gives the eight bits of C<op_flags>, except that
4783 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
4784 bits, the eight bits of C<op_private>, except that the bit with value 1
4785 is automatically set. C<first> supplies an optional op to be the direct
4786 child of the unary op; it is consumed by this function and become part
4787 of the constructed op tree.
4793 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
4798 if (type == -OP_ENTEREVAL) {
4799 type = OP_ENTEREVAL;
4800 flags |= OPpEVAL_BYTES<<8;
4803 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
4804 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4805 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4806 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
4807 || type == OP_SASSIGN
4808 || type == OP_ENTERTRY
4809 || type == OP_CUSTOM
4810 || type == OP_NULL );
4813 first = newOP(OP_STUB, 0);
4814 if (PL_opargs[type] & OA_MARK)
4815 first = force_list(first, 1);
4817 NewOp(1101, unop, 1, UNOP);
4818 OpTYPE_set(unop, type);
4819 unop->op_first = first;
4820 unop->op_flags = (U8)(flags | OPf_KIDS);
4821 unop->op_private = (U8)(1 | (flags >> 8));
4823 if (!OpHAS_SIBLING(first)) /* true unless weird syntax error */
4824 OpLASTSIB_set(first, (OP*)unop);
4826 unop = (UNOP*) CHECKOP(type, unop);
4830 return fold_constants(op_integerize(op_std_init((OP *) unop)));
4834 =for apidoc newUNOP_AUX
4836 Similar to C<newUNOP>, but creates an C<UNOP_AUX> struct instead, with C<op_aux>
4837 initialised to C<aux>
4843 Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags, OP *first, UNOP_AUX_item *aux)
4848 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP_AUX
4849 || type == OP_CUSTOM);