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 /* lastsib == 1, op_sibling == 0 implies a solitary unattached op */
302 assert(!o->op_sibling);
309 #ifdef PERL_DEBUG_READONLY_OPS
311 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
313 PERL_ARGS_ASSERT_SLAB_TO_RO;
315 if (slab->opslab_readonly) return;
316 slab->opslab_readonly = 1;
317 for (; slab; slab = slab->opslab_next) {
318 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
319 (unsigned long) slab->opslab_size, slab));*/
320 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
321 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
322 (unsigned long)slab->opslab_size, errno);
327 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
331 PERL_ARGS_ASSERT_SLAB_TO_RW;
333 if (!slab->opslab_readonly) return;
335 for (; slab2; slab2 = slab2->opslab_next) {
336 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
337 (unsigned long) size, slab2));*/
338 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
339 PROT_READ|PROT_WRITE)) {
340 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
341 (unsigned long)slab2->opslab_size, errno);
344 slab->opslab_readonly = 0;
348 # define Slab_to_rw(op) NOOP
351 /* This cannot possibly be right, but it was copied from the old slab
352 allocator, to which it was originally added, without explanation, in
355 # define PerlMemShared PerlMem
359 Perl_Slab_Free(pTHX_ void *op)
361 OP * const o = (OP *)op;
364 PERL_ARGS_ASSERT_SLAB_FREE;
366 if (!o->op_slabbed) {
368 PerlMemShared_free(op);
373 /* If this op is already freed, our refcount will get screwy. */
374 assert(o->op_type != OP_FREED);
375 o->op_type = OP_FREED;
376 o->op_next = slab->opslab_freed;
377 slab->opslab_freed = o;
378 DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
379 OpslabREFCNT_dec_padok(slab);
383 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
385 const bool havepad = !!PL_comppad;
386 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
389 PAD_SAVE_SETNULLPAD();
396 Perl_opslab_free(pTHX_ OPSLAB *slab)
399 PERL_ARGS_ASSERT_OPSLAB_FREE;
401 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
402 assert(slab->opslab_refcnt == 1);
403 for (; slab; slab = slab2) {
404 slab2 = slab->opslab_next;
406 slab->opslab_refcnt = ~(size_t)0;
408 #ifdef PERL_DEBUG_READONLY_OPS
409 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
411 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
412 perror("munmap failed");
416 PerlMemShared_free(slab);
422 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
427 size_t savestack_count = 0;
429 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
432 for (slot = slab2->opslab_first;
434 slot = slot->opslot_next) {
435 if (slot->opslot_op.op_type != OP_FREED
436 && !(slot->opslot_op.op_savefree
442 assert(slot->opslot_op.op_slabbed);
443 op_free(&slot->opslot_op);
444 if (slab->opslab_refcnt == 1) goto free;
447 } while ((slab2 = slab2->opslab_next));
448 /* > 1 because the CV still holds a reference count. */
449 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
451 assert(savestack_count == slab->opslab_refcnt-1);
453 /* Remove the CV’s reference count. */
454 slab->opslab_refcnt--;
461 #ifdef PERL_DEBUG_READONLY_OPS
463 Perl_op_refcnt_inc(pTHX_ OP *o)
466 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
467 if (slab && slab->opslab_readonly) {
480 Perl_op_refcnt_dec(pTHX_ OP *o)
483 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
485 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
487 if (slab && slab->opslab_readonly) {
489 result = --o->op_targ;
492 result = --o->op_targ;
498 * In the following definition, the ", (OP*)0" is just to make the compiler
499 * think the expression is of the right type: croak actually does a Siglongjmp.
501 #define CHECKOP(type,o) \
502 ((PL_op_mask && PL_op_mask[type]) \
503 ? ( op_free((OP*)o), \
504 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
506 : PL_check[type](aTHX_ (OP*)o))
508 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
510 #define CHANGE_TYPE(o,type) \
512 o->op_type = (OPCODE)type; \
513 o->op_ppaddr = PL_ppaddr[type]; \
517 S_no_fh_allowed(pTHX_ OP *o)
519 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
521 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
527 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
529 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
530 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
535 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
537 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
539 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
544 S_bad_type_pv(pTHX_ I32 n, const char *t, const char *name, U32 flags, const OP *kid)
546 PERL_ARGS_ASSERT_BAD_TYPE_PV;
548 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
549 (int)n, name, t, OP_DESC(kid)), flags);
553 S_bad_type_gv(pTHX_ I32 n, const char *t, GV *gv, U32 flags, const OP *kid)
555 SV * const namesv = cv_name((CV *)gv, NULL, 0);
556 PERL_ARGS_ASSERT_BAD_TYPE_GV;
558 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %"SVf" must be %s (not %s)",
559 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv) | flags);
563 S_no_bareword_allowed(pTHX_ OP *o)
565 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
567 qerror(Perl_mess(aTHX_
568 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
570 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
573 /* "register" allocation */
576 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
579 const bool is_our = (PL_parser->in_my == KEY_our);
581 PERL_ARGS_ASSERT_ALLOCMY;
583 if (flags & ~SVf_UTF8)
584 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
587 /* complain about "my $<special_var>" etc etc */
591 ((flags & SVf_UTF8) && isIDFIRST_utf8((U8 *)name+1)) ||
592 (name[1] == '_' && (*name == '$' || len > 2))))
594 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
595 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
596 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
597 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
598 PL_parser->in_my == KEY_state ? "state" : "my"));
600 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
601 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
604 else if (len == 2 && name[1] == '_' && !is_our)
605 /* diag_listed_as: Use of my $_ is experimental */
606 Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__LEXICAL_TOPIC),
607 "Use of %s $_ is experimental",
608 PL_parser->in_my == KEY_state
612 /* allocate a spare slot and store the name in that slot */
614 off = pad_add_name_pvn(name, len,
615 (is_our ? padadd_OUR :
616 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
617 PL_parser->in_my_stash,
619 /* $_ is always in main::, even with our */
620 ? (PL_curstash && !memEQs(name,len,"$_")
626 /* anon sub prototypes contains state vars should always be cloned,
627 * otherwise the state var would be shared between anon subs */
629 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
630 CvCLONE_on(PL_compcv);
636 =head1 Optree Manipulation Functions
638 =for apidoc alloccopstash
640 Available only under threaded builds, this function allocates an entry in
641 C<PL_stashpad> for the stash passed to it.
648 Perl_alloccopstash(pTHX_ HV *hv)
650 PADOFFSET off = 0, o = 1;
651 bool found_slot = FALSE;
653 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
655 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
657 for (; o < PL_stashpadmax; ++o) {
658 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
659 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
660 found_slot = TRUE, off = o;
663 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
664 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
665 off = PL_stashpadmax;
666 PL_stashpadmax += 10;
669 PL_stashpad[PL_stashpadix = off] = hv;
674 /* free the body of an op without examining its contents.
675 * Always use this rather than FreeOp directly */
678 S_op_destroy(pTHX_ OP *o)
686 =for apidoc Am|void|op_free|OP *o
688 Free an op. Only use this when an op is no longer linked to from any
695 Perl_op_free(pTHX_ OP *o)
699 SSize_t defer_ix = -1;
700 SSize_t defer_stack_alloc = 0;
701 OP **defer_stack = NULL;
705 /* Though ops may be freed twice, freeing the op after its slab is a
707 assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
708 /* During the forced freeing of ops after compilation failure, kidops
709 may be freed before their parents. */
710 if (!o || o->op_type == OP_FREED)
715 /* an op should only ever acquire op_private flags that we know about.
716 * If this fails, you may need to fix something in regen/op_private */
717 if (o->op_ppaddr == PL_ppaddr[o->op_type]) {
718 assert(!(o->op_private & ~PL_op_private_valid[type]));
721 if (o->op_private & OPpREFCOUNTED) {
732 refcnt = OpREFCNT_dec(o);
735 /* Need to find and remove any pattern match ops from the list
736 we maintain for reset(). */
737 find_and_forget_pmops(o);
747 /* Call the op_free hook if it has been set. Do it now so that it's called
748 * at the right time for refcounted ops, but still before all of the kids
752 if (o->op_flags & OPf_KIDS) {
754 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
755 nextkid = OP_SIBLING(kid); /* Get before next freeing kid */
756 if (!kid || kid->op_type == OP_FREED)
757 /* During the forced freeing of ops after
758 compilation failure, kidops may be freed before
761 if (!(kid->op_flags & OPf_KIDS))
762 /* If it has no kids, just free it now */
769 type = (OPCODE)o->op_targ;
772 Slab_to_rw(OpSLAB(o));
774 /* COP* is not cleared by op_clear() so that we may track line
775 * numbers etc even after null() */
776 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
782 #ifdef DEBUG_LEAKING_SCALARS
786 } while ( (o = POP_DEFERRED_OP()) );
788 Safefree(defer_stack);
791 /* S_op_clear_gv(): free a GV attached to an OP */
794 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
796 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
800 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
801 || o->op_type == OP_MULTIDEREF)
804 ? ((GV*)PAD_SVl(*ixp)) : NULL;
806 ? (GV*)(*svp) : NULL;
808 /* It's possible during global destruction that the GV is freed
809 before the optree. Whilst the SvREFCNT_inc is happy to bump from
810 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
811 will trigger an assertion failure, because the entry to sv_clear
812 checks that the scalar is not already freed. A check of for
813 !SvIS_FREED(gv) turns out to be invalid, because during global
814 destruction the reference count can be forced down to zero
815 (with SVf_BREAK set). In which case raising to 1 and then
816 dropping to 0 triggers cleanup before it should happen. I
817 *think* that this might actually be a general, systematic,
818 weakness of the whole idea of SVf_BREAK, in that code *is*
819 allowed to raise and lower references during global destruction,
820 so any *valid* code that happens to do this during global
821 destruction might well trigger premature cleanup. */
822 bool still_valid = gv && SvREFCNT(gv);
825 SvREFCNT_inc_simple_void(gv);
828 pad_swipe(*ixp, TRUE);
836 int try_downgrade = SvREFCNT(gv) == 2;
839 gv_try_downgrade(gv);
845 Perl_op_clear(pTHX_ OP *o)
850 PERL_ARGS_ASSERT_OP_CLEAR;
852 switch (o->op_type) {
853 case OP_NULL: /* Was holding old type, if any. */
856 case OP_ENTEREVAL: /* Was holding hints. */
860 if (!(o->op_flags & OPf_REF)
861 || (PL_check[o->op_type] != Perl_ck_ftst))
868 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
870 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
873 case OP_METHOD_REDIR:
874 case OP_METHOD_REDIR_SUPER:
876 if (cMETHOPx(o)->op_rclass_targ) {
877 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
878 cMETHOPx(o)->op_rclass_targ = 0;
881 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
882 cMETHOPx(o)->op_rclass_sv = NULL;
884 case OP_METHOD_NAMED:
885 case OP_METHOD_SUPER:
886 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
887 cMETHOPx(o)->op_u.op_meth_sv = NULL;
890 pad_swipe(o->op_targ, 1);
897 SvREFCNT_dec(cSVOPo->op_sv);
898 cSVOPo->op_sv = NULL;
901 Even if op_clear does a pad_free for the target of the op,
902 pad_free doesn't actually remove the sv that exists in the pad;
903 instead it lives on. This results in that it could be reused as
904 a target later on when the pad was reallocated.
907 pad_swipe(o->op_targ,1);
917 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
922 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
923 assert(o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
925 if (cPADOPo->op_padix > 0) {
926 pad_swipe(cPADOPo->op_padix, TRUE);
927 cPADOPo->op_padix = 0;
930 SvREFCNT_dec(cSVOPo->op_sv);
931 cSVOPo->op_sv = NULL;
935 PerlMemShared_free(cPVOPo->op_pv);
936 cPVOPo->op_pv = NULL;
940 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
944 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
945 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
948 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
954 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
955 op_free(cPMOPo->op_code_list);
956 cPMOPo->op_code_list = NULL;
958 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
959 /* we use the same protection as the "SAFE" version of the PM_ macros
960 * here since sv_clean_all might release some PMOPs
961 * after PL_regex_padav has been cleared
962 * and the clearing of PL_regex_padav needs to
963 * happen before sv_clean_all
966 if(PL_regex_pad) { /* We could be in destruction */
967 const IV offset = (cPMOPo)->op_pmoffset;
968 ReREFCNT_dec(PM_GETRE(cPMOPo));
969 PL_regex_pad[offset] = &PL_sv_undef;
970 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
974 ReREFCNT_dec(PM_GETRE(cPMOPo));
975 PM_SETRE(cPMOPo, NULL);
982 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
983 UV actions = items->uv;
985 bool is_hash = FALSE;
988 switch (actions & MDEREF_ACTION_MASK) {
991 actions = (++items)->uv;
994 case MDEREF_HV_padhv_helem:
996 case MDEREF_AV_padav_aelem:
997 pad_free((++items)->pad_offset);
1000 case MDEREF_HV_gvhv_helem:
1002 case MDEREF_AV_gvav_aelem:
1004 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1006 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1010 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1012 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1014 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1016 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1018 goto do_vivify_rv2xv_elem;
1020 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1022 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1023 pad_free((++items)->pad_offset);
1024 goto do_vivify_rv2xv_elem;
1026 case MDEREF_HV_pop_rv2hv_helem:
1027 case MDEREF_HV_vivify_rv2hv_helem:
1029 do_vivify_rv2xv_elem:
1030 case MDEREF_AV_pop_rv2av_aelem:
1031 case MDEREF_AV_vivify_rv2av_aelem:
1033 switch (actions & MDEREF_INDEX_MASK) {
1034 case MDEREF_INDEX_none:
1037 case MDEREF_INDEX_const:
1041 pad_swipe((++items)->pad_offset, 1);
1043 SvREFCNT_dec((++items)->sv);
1049 case MDEREF_INDEX_padsv:
1050 pad_free((++items)->pad_offset);
1052 case MDEREF_INDEX_gvsv:
1054 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1056 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1061 if (actions & MDEREF_FLAG_last)
1074 actions >>= MDEREF_SHIFT;
1077 /* start of malloc is at op_aux[-1], where the length is
1079 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1084 if (o->op_targ > 0) {
1085 pad_free(o->op_targ);
1091 S_cop_free(pTHX_ COP* cop)
1093 PERL_ARGS_ASSERT_COP_FREE;
1096 if (! specialWARN(cop->cop_warnings))
1097 PerlMemShared_free(cop->cop_warnings);
1098 cophh_free(CopHINTHASH_get(cop));
1099 if (PL_curcop == cop)
1104 S_forget_pmop(pTHX_ PMOP *const o
1107 HV * const pmstash = PmopSTASH(o);
1109 PERL_ARGS_ASSERT_FORGET_PMOP;
1111 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1112 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1114 PMOP **const array = (PMOP**) mg->mg_ptr;
1115 U32 count = mg->mg_len / sizeof(PMOP**);
1119 if (array[i] == o) {
1120 /* Found it. Move the entry at the end to overwrite it. */
1121 array[i] = array[--count];
1122 mg->mg_len = count * sizeof(PMOP**);
1123 /* Could realloc smaller at this point always, but probably
1124 not worth it. Probably worth free()ing if we're the
1127 Safefree(mg->mg_ptr);
1140 S_find_and_forget_pmops(pTHX_ OP *o)
1142 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1144 if (o->op_flags & OPf_KIDS) {
1145 OP *kid = cUNOPo->op_first;
1147 switch (kid->op_type) {
1152 forget_pmop((PMOP*)kid);
1154 find_and_forget_pmops(kid);
1155 kid = OP_SIBLING(kid);
1161 =for apidoc Am|void|op_null|OP *o
1163 Neutralizes an op when it is no longer needed, but is still linked to from
1170 Perl_op_null(pTHX_ OP *o)
1174 PERL_ARGS_ASSERT_OP_NULL;
1176 if (o->op_type == OP_NULL)
1179 o->op_targ = o->op_type;
1180 CHANGE_TYPE(o, OP_NULL);
1184 Perl_op_refcnt_lock(pTHX)
1189 PERL_UNUSED_CONTEXT;
1194 Perl_op_refcnt_unlock(pTHX)
1199 PERL_UNUSED_CONTEXT;
1205 =for apidoc op_sibling_splice
1207 A general function for editing the structure of an existing chain of
1208 op_sibling nodes. By analogy with the perl-level splice() function, allows
1209 you to delete zero or more sequential nodes, replacing them with zero or
1210 more different nodes. Performs the necessary op_first/op_last
1211 housekeeping on the parent node and op_sibling manipulation on the
1212 children. The last deleted node will be marked as as the last node by
1213 updating the op_sibling or op_lastsib field as appropriate.
1215 Note that op_next is not manipulated, and nodes are not freed; that is the
1216 responsibility of the caller. It also won't create a new list op for an
1217 empty list etc; use higher-level functions like op_append_elem() for that.
1219 parent is the parent node of the sibling chain.
1221 start is the node preceding the first node to be spliced. Node(s)
1222 following it will be deleted, and ops will be inserted after it. If it is
1223 NULL, the first node onwards is deleted, and nodes are inserted at the
1226 del_count is the number of nodes to delete. If zero, no nodes are deleted.
1227 If -1 or greater than or equal to the number of remaining kids, all
1228 remaining kids are deleted.
1230 insert is the first of a chain of nodes to be inserted in place of the nodes.
1231 If NULL, no nodes are inserted.
1233 The head of the chain of deleted ops is returned, or NULL if no ops were
1238 action before after returns
1239 ------ ----- ----- -------
1242 splice(P, A, 2, X-Y-Z) | | B-C
1246 splice(P, NULL, 1, X-Y) | | A
1250 splice(P, NULL, 3, NULL) | | A-B-C
1254 splice(P, B, 0, X-Y) | | NULL
1261 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1263 OP *first = start ? OP_SIBLING(start) : cLISTOPx(parent)->op_first;
1265 OP *last_del = NULL;
1266 OP *last_ins = NULL;
1268 PERL_ARGS_ASSERT_OP_SIBLING_SPLICE;
1270 assert(del_count >= -1);
1272 if (del_count && first) {
1274 while (--del_count && OP_HAS_SIBLING(last_del))
1275 last_del = OP_SIBLING(last_del);
1276 rest = OP_SIBLING(last_del);
1277 OP_SIBLING_set(last_del, NULL);
1278 last_del->op_lastsib = 1;
1285 while (OP_HAS_SIBLING(last_ins))
1286 last_ins = OP_SIBLING(last_ins);
1287 OP_SIBLING_set(last_ins, rest);
1288 last_ins->op_lastsib = rest ? 0 : 1;
1294 OP_SIBLING_set(start, insert);
1295 start->op_lastsib = insert ? 0 : 1;
1298 cLISTOPx(parent)->op_first = insert;
1300 parent->op_flags |= OPf_KIDS;
1302 parent->op_flags &= ~OPf_KIDS;
1306 /* update op_last etc */
1307 U32 type = parent->op_type;
1310 if (type == OP_NULL)
1311 type = parent->op_targ;
1312 type = PL_opargs[type] & OA_CLASS_MASK;
1314 lastop = last_ins ? last_ins : start ? start : NULL;
1315 if ( type == OA_BINOP
1316 || type == OA_LISTOP
1320 cLISTOPx(parent)->op_last = lastop;
1323 lastop->op_lastsib = 1;
1324 #ifdef PERL_OP_PARENT
1325 lastop->op_sibling = parent;
1329 return last_del ? first : NULL;
1333 =for apidoc op_parent
1335 returns the parent OP of o, if it has a parent. Returns NULL otherwise.
1336 (Currently perl must be built with C<-DPERL_OP_PARENT> for this feature to
1343 Perl_op_parent(OP *o)
1345 PERL_ARGS_ASSERT_OP_PARENT;
1346 #ifdef PERL_OP_PARENT
1347 while (OP_HAS_SIBLING(o))
1349 return o->op_sibling;
1357 /* replace the sibling following start with a new UNOP, which becomes
1358 * the parent of the original sibling; e.g.
1360 * op_sibling_newUNOP(P, A, unop-args...)
1368 * where U is the new UNOP.
1370 * parent and start args are the same as for op_sibling_splice();
1371 * type and flags args are as newUNOP().
1373 * Returns the new UNOP.
1377 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1381 kid = op_sibling_splice(parent, start, 1, NULL);
1382 newop = newUNOP(type, flags, kid);
1383 op_sibling_splice(parent, start, 0, newop);
1388 /* lowest-level newLOGOP-style function - just allocates and populates
1389 * the struct. Higher-level stuff should be done by S_new_logop() /
1390 * newLOGOP(). This function exists mainly to avoid op_first assignment
1391 * being spread throughout this file.
1395 S_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1400 NewOp(1101, logop, 1, LOGOP);
1401 CHANGE_TYPE(logop, type);
1402 logop->op_first = first;
1403 logop->op_other = other;
1404 logop->op_flags = OPf_KIDS;
1405 while (kid && OP_HAS_SIBLING(kid))
1406 kid = OP_SIBLING(kid);
1408 kid->op_lastsib = 1;
1409 #ifdef PERL_OP_PARENT
1410 kid->op_sibling = (OP*)logop;
1417 /* Contextualizers */
1420 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1422 Applies a syntactic context to an op tree representing an expression.
1423 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
1424 or C<G_VOID> to specify the context to apply. The modified op tree
1431 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1433 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1435 case G_SCALAR: return scalar(o);
1436 case G_ARRAY: return list(o);
1437 case G_VOID: return scalarvoid(o);
1439 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1446 =for apidoc Am|OP*|op_linklist|OP *o
1447 This function is the implementation of the L</LINKLIST> macro. It should
1448 not be called directly.
1454 Perl_op_linklist(pTHX_ OP *o)
1458 PERL_ARGS_ASSERT_OP_LINKLIST;
1463 /* establish postfix order */
1464 first = cUNOPo->op_first;
1467 o->op_next = LINKLIST(first);
1470 OP *sibl = OP_SIBLING(kid);
1472 kid->op_next = LINKLIST(sibl);
1487 S_scalarkids(pTHX_ OP *o)
1489 if (o && o->op_flags & OPf_KIDS) {
1491 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1498 S_scalarboolean(pTHX_ OP *o)
1500 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1502 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
1503 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
1504 if (ckWARN(WARN_SYNTAX)) {
1505 const line_t oldline = CopLINE(PL_curcop);
1507 if (PL_parser && PL_parser->copline != NOLINE) {
1508 /* This ensures that warnings are reported at the first line
1509 of the conditional, not the last. */
1510 CopLINE_set(PL_curcop, PL_parser->copline);
1512 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1513 CopLINE_set(PL_curcop, oldline);
1520 S_op_varname(pTHX_ const OP *o)
1523 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1524 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1526 const char funny = o->op_type == OP_PADAV
1527 || o->op_type == OP_RV2AV ? '@' : '%';
1528 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1530 if (cUNOPo->op_first->op_type != OP_GV
1531 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1533 return varname(gv, funny, 0, NULL, 0, 1);
1536 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, 1);
1541 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1542 { /* or not so pretty :-) */
1543 if (o->op_type == OP_CONST) {
1545 if (SvPOK(*retsv)) {
1547 *retsv = sv_newmortal();
1548 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1549 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1551 else if (!SvOK(*retsv))
1554 else *retpv = "...";
1558 S_scalar_slice_warning(pTHX_ const OP *o)
1562 o->op_type == OP_HSLICE ? '{' : '[';
1564 o->op_type == OP_HSLICE ? '}' : ']';
1566 SV *keysv = NULL; /* just to silence compiler warnings */
1567 const char *key = NULL;
1569 if (!(o->op_private & OPpSLICEWARNING))
1571 if (PL_parser && PL_parser->error_count)
1572 /* This warning can be nonsensical when there is a syntax error. */
1575 kid = cLISTOPo->op_first;
1576 kid = OP_SIBLING(kid); /* get past pushmark */
1577 /* weed out false positives: any ops that can return lists */
1578 switch (kid->op_type) {
1607 /* Don't warn if we have a nulled list either. */
1608 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1611 assert(OP_SIBLING(kid));
1612 name = S_op_varname(aTHX_ OP_SIBLING(kid));
1613 if (!name) /* XS module fiddling with the op tree */
1615 S_op_pretty(aTHX_ kid, &keysv, &key);
1616 assert(SvPOK(name));
1617 sv_chop(name,SvPVX(name)+1);
1619 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1620 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1621 "Scalar value @%"SVf"%c%s%c better written as $%"SVf
1623 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1624 lbrack, key, rbrack);
1626 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1627 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1628 "Scalar value @%"SVf"%c%"SVf"%c better written as $%"
1630 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1631 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1635 Perl_scalar(pTHX_ OP *o)
1639 /* assumes no premature commitment */
1640 if (!o || (PL_parser && PL_parser->error_count)
1641 || (o->op_flags & OPf_WANT)
1642 || o->op_type == OP_RETURN)
1647 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1649 switch (o->op_type) {
1651 scalar(cBINOPo->op_first);
1652 if (o->op_private & OPpREPEAT_DOLIST) {
1653 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1654 assert(kid->op_type == OP_PUSHMARK);
1655 if (OP_HAS_SIBLING(kid) && !OP_HAS_SIBLING(OP_SIBLING(kid))) {
1656 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1657 o->op_private &=~ OPpREPEAT_DOLIST;
1664 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1674 if (o->op_flags & OPf_KIDS) {
1675 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid))
1681 kid = cLISTOPo->op_first;
1683 kid = OP_SIBLING(kid);
1686 OP *sib = OP_SIBLING(kid);
1687 if (sib && kid->op_type != OP_LEAVEWHEN
1688 && ( OP_HAS_SIBLING(sib) || sib->op_type != OP_NULL
1689 || ( sib->op_targ != OP_NEXTSTATE
1690 && sib->op_targ != OP_DBSTATE )))
1696 PL_curcop = &PL_compiling;
1701 kid = cLISTOPo->op_first;
1704 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1709 /* Warn about scalar context */
1710 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1711 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1714 const char *key = NULL;
1716 /* This warning can be nonsensical when there is a syntax error. */
1717 if (PL_parser && PL_parser->error_count)
1720 if (!ckWARN(WARN_SYNTAX)) break;
1722 kid = cLISTOPo->op_first;
1723 kid = OP_SIBLING(kid); /* get past pushmark */
1724 assert(OP_SIBLING(kid));
1725 name = S_op_varname(aTHX_ OP_SIBLING(kid));
1726 if (!name) /* XS module fiddling with the op tree */
1728 S_op_pretty(aTHX_ kid, &keysv, &key);
1729 assert(SvPOK(name));
1730 sv_chop(name,SvPVX(name)+1);
1732 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1733 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1734 "%%%"SVf"%c%s%c in scalar context better written "
1736 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1737 lbrack, key, rbrack);
1739 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1740 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1741 "%%%"SVf"%c%"SVf"%c in scalar context better "
1742 "written as $%"SVf"%c%"SVf"%c",
1743 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1744 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1751 Perl_scalarvoid(pTHX_ OP *arg)
1757 SSize_t defer_stack_alloc = 0;
1758 SSize_t defer_ix = -1;
1759 OP **defer_stack = NULL;
1762 PERL_ARGS_ASSERT_SCALARVOID;
1765 SV *useless_sv = NULL;
1766 const char* useless = NULL;
1768 if (o->op_type == OP_NEXTSTATE
1769 || o->op_type == OP_DBSTATE
1770 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1771 || o->op_targ == OP_DBSTATE)))
1772 PL_curcop = (COP*)o; /* for warning below */
1774 /* assumes no premature commitment */
1775 want = o->op_flags & OPf_WANT;
1776 if ((want && want != OPf_WANT_SCALAR)
1777 || (PL_parser && PL_parser->error_count)
1778 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1783 if ((o->op_private & OPpTARGET_MY)
1784 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1786 /* newASSIGNOP has already applied scalar context, which we
1787 leave, as if this op is inside SASSIGN. */
1791 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1793 switch (o->op_type) {
1795 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1799 if (o->op_flags & OPf_STACKED)
1803 if (o->op_private == 4)
1838 case OP_GETSOCKNAME:
1839 case OP_GETPEERNAME:
1844 case OP_GETPRIORITY:
1869 useless = OP_DESC(o);
1879 case OP_AELEMFAST_LEX:
1883 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1884 /* Otherwise it's "Useless use of grep iterator" */
1885 useless = OP_DESC(o);
1889 kid = cLISTOPo->op_first;
1890 if (kid && kid->op_type == OP_PUSHRE
1892 && !(o->op_flags & OPf_STACKED)
1894 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
1896 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
1899 useless = OP_DESC(o);
1903 kid = cUNOPo->op_first;
1904 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1905 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1908 useless = "negative pattern binding (!~)";
1912 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1913 useless = "non-destructive substitution (s///r)";
1917 useless = "non-destructive transliteration (tr///r)";
1924 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1925 (!OP_HAS_SIBLING(o) || OP_SIBLING(o)->op_type != OP_READLINE))
1926 useless = "a variable";
1931 if (cSVOPo->op_private & OPpCONST_STRICT)
1932 no_bareword_allowed(o);
1934 if (ckWARN(WARN_VOID)) {
1936 /* don't warn on optimised away booleans, eg
1937 * use constant Foo, 5; Foo || print; */
1938 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1940 /* the constants 0 and 1 are permitted as they are
1941 conventionally used as dummies in constructs like
1942 1 while some_condition_with_side_effects; */
1943 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
1945 else if (SvPOK(sv)) {
1946 SV * const dsv = newSVpvs("");
1948 = Perl_newSVpvf(aTHX_
1950 pv_pretty(dsv, SvPVX_const(sv),
1951 SvCUR(sv), 32, NULL, NULL,
1953 | PERL_PV_ESCAPE_NOCLEAR
1954 | PERL_PV_ESCAPE_UNI_DETECT));
1955 SvREFCNT_dec_NN(dsv);
1957 else if (SvOK(sv)) {
1958 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%"SVf")", SVfARG(sv));
1961 useless = "a constant (undef)";
1964 op_null(o); /* don't execute or even remember it */
1968 CHANGE_TYPE(o, OP_PREINC); /* pre-increment is faster */
1972 CHANGE_TYPE(o, OP_PREDEC); /* pre-decrement is faster */
1976 CHANGE_TYPE(o, OP_I_PREINC); /* pre-increment is faster */
1980 CHANGE_TYPE(o, OP_I_PREDEC); /* pre-decrement is faster */
1985 UNOP *refgen, *rv2cv;
1988 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
1991 rv2gv = ((BINOP *)o)->op_last;
1992 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
1995 refgen = (UNOP *)((BINOP *)o)->op_first;
1997 if (!refgen || (refgen->op_type != OP_REFGEN
1998 && refgen->op_type != OP_SREFGEN))
2001 exlist = (LISTOP *)refgen->op_first;
2002 if (!exlist || exlist->op_type != OP_NULL
2003 || exlist->op_targ != OP_LIST)
2006 if (exlist->op_first->op_type != OP_PUSHMARK
2007 && exlist->op_first != exlist->op_last)
2010 rv2cv = (UNOP*)exlist->op_last;
2012 if (rv2cv->op_type != OP_RV2CV)
2015 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2016 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2017 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2019 o->op_private |= OPpASSIGN_CV_TO_GV;
2020 rv2gv->op_private |= OPpDONT_INIT_GV;
2021 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2033 kid = cLOGOPo->op_first;
2034 if (kid->op_type == OP_NOT
2035 && (kid->op_flags & OPf_KIDS)) {
2036 if (o->op_type == OP_AND) {
2037 CHANGE_TYPE(o, OP_OR);
2039 CHANGE_TYPE(o, OP_AND);
2049 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
2050 if (!(kid->op_flags & OPf_KIDS))
2057 if (o->op_flags & OPf_STACKED)
2064 if (!(o->op_flags & OPf_KIDS))
2075 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2076 if (!(kid->op_flags & OPf_KIDS))
2082 /* If the first kid after pushmark is something that the padrange
2083 optimisation would reject, then null the list and the pushmark.
2085 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2086 && ( !(kid = OP_SIBLING(kid))
2087 || ( kid->op_type != OP_PADSV
2088 && kid->op_type != OP_PADAV
2089 && kid->op_type != OP_PADHV)
2090 || kid->op_private & ~OPpLVAL_INTRO
2091 || !(kid = OP_SIBLING(kid))
2092 || ( kid->op_type != OP_PADSV
2093 && kid->op_type != OP_PADAV
2094 && kid->op_type != OP_PADHV)
2095 || kid->op_private & ~OPpLVAL_INTRO)
2097 op_null(cUNOPo->op_first); /* NULL the pushmark */
2098 op_null(o); /* NULL the list */
2110 /* mortalise it, in case warnings are fatal. */
2111 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2112 "Useless use of %"SVf" in void context",
2113 SVfARG(sv_2mortal(useless_sv)));
2116 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2117 "Useless use of %s in void context",
2120 } while ( (o = POP_DEFERRED_OP()) );
2122 Safefree(defer_stack);
2128 S_listkids(pTHX_ OP *o)
2130 if (o && o->op_flags & OPf_KIDS) {
2132 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2139 Perl_list(pTHX_ OP *o)
2143 /* assumes no premature commitment */
2144 if (!o || (o->op_flags & OPf_WANT)
2145 || (PL_parser && PL_parser->error_count)
2146 || o->op_type == OP_RETURN)
2151 if ((o->op_private & OPpTARGET_MY)
2152 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2154 return o; /* As if inside SASSIGN */
2157 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2159 switch (o->op_type) {
2161 list(cBINOPo->op_first);
2164 if (o->op_private & OPpREPEAT_DOLIST
2165 && !(o->op_flags & OPf_STACKED))
2167 list(cBINOPo->op_first);
2168 kid = cBINOPo->op_last;
2169 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2170 && SvIVX(kSVOP_sv) == 1)
2172 op_null(o); /* repeat */
2173 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2175 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2182 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
2190 if (!(o->op_flags & OPf_KIDS))
2192 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2193 list(cBINOPo->op_first);
2194 return gen_constant_list(o);
2200 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2201 op_null(cUNOPo->op_first); /* NULL the pushmark */
2202 op_null(o); /* NULL the list */
2207 kid = cLISTOPo->op_first;
2209 kid = OP_SIBLING(kid);
2212 OP *sib = OP_SIBLING(kid);
2213 if (sib && kid->op_type != OP_LEAVEWHEN)
2219 PL_curcop = &PL_compiling;
2223 kid = cLISTOPo->op_first;
2230 S_scalarseq(pTHX_ OP *o)
2233 const OPCODE type = o->op_type;
2235 if (type == OP_LINESEQ || type == OP_SCOPE ||
2236 type == OP_LEAVE || type == OP_LEAVETRY)
2239 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2240 if ((sib = OP_SIBLING(kid))
2241 && ( OP_HAS_SIBLING(sib) || sib->op_type != OP_NULL
2242 || ( sib->op_targ != OP_NEXTSTATE
2243 && sib->op_targ != OP_DBSTATE )))
2248 PL_curcop = &PL_compiling;
2250 o->op_flags &= ~OPf_PARENS;
2251 if (PL_hints & HINT_BLOCK_SCOPE)
2252 o->op_flags |= OPf_PARENS;
2255 o = newOP(OP_STUB, 0);
2260 S_modkids(pTHX_ OP *o, I32 type)
2262 if (o && o->op_flags & OPf_KIDS) {
2264 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2265 op_lvalue(kid, type);
2271 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2272 * const fields. Also, convert CONST keys to HEK-in-SVs.
2273 * rop is the op that retrieves the hash;
2274 * key_op is the first key
2278 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op)
2284 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2286 if (rop->op_first->op_type == OP_PADSV)
2287 /* @$hash{qw(keys here)} */
2288 rop = (UNOP*)rop->op_first;
2290 /* @{$hash}{qw(keys here)} */
2291 if (rop->op_first->op_type == OP_SCOPE
2292 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2294 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2301 lexname = NULL; /* just to silence compiler warnings */
2302 fields = NULL; /* just to silence compiler warnings */
2306 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2307 SvPAD_TYPED(lexname))
2308 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2309 && isGV(*fields) && GvHV(*fields);
2311 for (; key_op; key_op = (SVOP*)OP_SIBLING(key_op)) {
2313 if (key_op->op_type != OP_CONST)
2315 svp = cSVOPx_svp(key_op);
2317 /* Make the CONST have a shared SV */
2318 if ( !SvIsCOW_shared_hash(sv = *svp)
2319 && SvTYPE(sv) < SVt_PVMG
2324 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2325 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2326 SvREFCNT_dec_NN(sv);
2331 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2333 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
2334 "in variable %"PNf" of type %"HEKf,
2335 SVfARG(*svp), PNfARG(lexname),
2336 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2343 =for apidoc finalize_optree
2345 This function finalizes the optree. Should be called directly after
2346 the complete optree is built. It does some additional
2347 checking which can't be done in the normal ck_xxx functions and makes
2348 the tree thread-safe.
2353 Perl_finalize_optree(pTHX_ OP* o)
2355 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
2358 SAVEVPTR(PL_curcop);
2366 /* Relocate sv to the pad for thread safety.
2367 * Despite being a "constant", the SV is written to,
2368 * for reference counts, sv_upgrade() etc. */
2369 PERL_STATIC_INLINE void
2370 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
2373 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
2375 ix = pad_alloc(OP_CONST, SVf_READONLY);
2376 SvREFCNT_dec(PAD_SVl(ix));
2377 PAD_SETSV(ix, *svp);
2378 /* XXX I don't know how this isn't readonly already. */
2379 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
2387 S_finalize_op(pTHX_ OP* o)
2389 PERL_ARGS_ASSERT_FINALIZE_OP;
2392 switch (o->op_type) {
2395 PL_curcop = ((COP*)o); /* for warnings */
2398 if (OP_HAS_SIBLING(o)) {
2399 OP *sib = OP_SIBLING(o);
2400 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
2401 && ckWARN(WARN_EXEC)
2402 && OP_HAS_SIBLING(sib))
2404 const OPCODE type = OP_SIBLING(sib)->op_type;
2405 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
2406 const line_t oldline = CopLINE(PL_curcop);
2407 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
2408 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2409 "Statement unlikely to be reached");
2410 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2411 "\t(Maybe you meant system() when you said exec()?)\n");
2412 CopLINE_set(PL_curcop, oldline);
2419 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
2420 GV * const gv = cGVOPo_gv;
2421 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
2422 /* XXX could check prototype here instead of just carping */
2423 SV * const sv = sv_newmortal();
2424 gv_efullname3(sv, gv, NULL);
2425 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
2426 "%"SVf"() called too early to check prototype",
2433 if (cSVOPo->op_private & OPpCONST_STRICT)
2434 no_bareword_allowed(o);
2438 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
2443 /* Relocate all the METHOP's SVs to the pad for thread safety. */
2444 case OP_METHOD_NAMED:
2445 case OP_METHOD_SUPER:
2446 case OP_METHOD_REDIR:
2447 case OP_METHOD_REDIR_SUPER:
2448 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
2457 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
2460 rop = (UNOP*)((BINOP*)o)->op_first;
2465 S_scalar_slice_warning(aTHX_ o);
2469 kid = OP_SIBLING(cLISTOPo->op_first);
2470 if (/* I bet there's always a pushmark... */
2471 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
2472 && OP_TYPE_ISNT_NN(kid, OP_CONST))
2477 key_op = (SVOP*)(kid->op_type == OP_CONST
2479 : OP_SIBLING(kLISTOP->op_first));
2481 rop = (UNOP*)((LISTOP*)o)->op_last;
2484 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
2486 S_check_hash_fields_and_hekify(aTHX_ rop, key_op);
2490 S_scalar_slice_warning(aTHX_ o);
2494 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
2495 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
2502 if (o->op_flags & OPf_KIDS) {
2506 /* check that op_last points to the last sibling, and that
2507 * the last op_sibling field points back to the parent, and
2508 * that the only ops with KIDS are those which are entitled to
2510 U32 type = o->op_type;
2514 if (type == OP_NULL) {
2516 /* ck_glob creates a null UNOP with ex-type GLOB
2517 * (which is a list op. So pretend it wasn't a listop */
2518 if (type == OP_GLOB)
2521 family = PL_opargs[type] & OA_CLASS_MASK;
2523 has_last = ( family == OA_BINOP
2524 || family == OA_LISTOP
2525 || family == OA_PMOP
2526 || family == OA_LOOP
2528 assert( has_last /* has op_first and op_last, or ...
2529 ... has (or may have) op_first: */
2530 || family == OA_UNOP
2531 || family == OA_UNOP_AUX
2532 || family == OA_LOGOP
2533 || family == OA_BASEOP_OR_UNOP
2534 || family == OA_FILESTATOP
2535 || family == OA_LOOPEXOP
2536 || family == OA_METHOP
2537 /* I don't know why SASSIGN is tagged as OA_BASEOP - DAPM */
2538 || type == OP_SASSIGN
2539 || type == OP_CUSTOM
2540 || type == OP_NULL /* new_logop does this */
2542 /* XXX list form of 'x' is has a null op_last. This is wrong,
2543 * but requires too much hacking (e.g. in Deparse) to fix for
2545 if (type == OP_REPEAT && (o->op_private & OPpREPEAT_DOLIST)) {
2550 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2551 # ifdef PERL_OP_PARENT
2552 if (!OP_HAS_SIBLING(kid)) {
2554 assert(kid == cLISTOPo->op_last);
2555 assert(kid->op_sibling == o);
2558 if (OP_HAS_SIBLING(kid)) {
2559 assert(!kid->op_lastsib);
2562 assert(kid->op_lastsib);
2564 assert(kid == cLISTOPo->op_last);
2570 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid))
2576 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
2578 Propagate lvalue ("modifiable") context to an op and its children.
2579 I<type> represents the context type, roughly based on the type of op that
2580 would do the modifying, although C<local()> is represented by OP_NULL,
2581 because it has no op type of its own (it is signalled by a flag on
2584 This function detects things that can't be modified, such as C<$x+1>, and
2585 generates errors for them. For example, C<$x+1 = 2> would cause it to be
2586 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
2588 It also flags things that need to behave specially in an lvalue context,
2589 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
2595 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
2598 PadnameLVALUE_on(pn);
2599 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
2602 assert(CvPADLIST(cv));
2604 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
2605 assert(PadnameLEN(pn));
2606 PadnameLVALUE_on(pn);
2611 S_vivifies(const OPCODE type)
2614 case OP_RV2AV: case OP_ASLICE:
2615 case OP_RV2HV: case OP_KVASLICE:
2616 case OP_RV2SV: case OP_HSLICE:
2617 case OP_AELEMFAST: case OP_KVHSLICE:
2626 S_lvref(pTHX_ OP *o, I32 type)
2630 switch (o->op_type) {
2632 for (kid = OP_SIBLING(cUNOPo->op_first); kid;
2633 kid = OP_SIBLING(kid))
2634 S_lvref(aTHX_ kid, type);
2639 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2640 o->op_flags |= OPf_STACKED;
2641 if (o->op_flags & OPf_PARENS) {
2642 if (o->op_private & OPpLVAL_INTRO) {
2643 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2644 "localized parenthesized array in list assignment"));
2648 CHANGE_TYPE(o, OP_LVAVREF);
2649 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
2650 o->op_flags |= OPf_MOD|OPf_REF;
2653 o->op_private |= OPpLVREF_AV;
2656 kid = cUNOPo->op_first;
2657 if (kid->op_type == OP_NULL)
2658 kid = cUNOPx(kUNOP->op_first->op_sibling)
2660 o->op_private = OPpLVREF_CV;
2661 if (kid->op_type == OP_GV)
2662 o->op_flags |= OPf_STACKED;
2663 else if (kid->op_type == OP_PADCV) {
2664 o->op_targ = kid->op_targ;
2666 op_free(cUNOPo->op_first);
2667 cUNOPo->op_first = NULL;
2668 o->op_flags &=~ OPf_KIDS;
2673 if (o->op_flags & OPf_PARENS) {
2675 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2676 "parenthesized hash in list assignment"));
2679 o->op_private |= OPpLVREF_HV;
2683 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2684 o->op_flags |= OPf_STACKED;
2687 if (o->op_flags & OPf_PARENS) goto parenhash;
2688 o->op_private |= OPpLVREF_HV;
2691 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2694 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2695 if (o->op_flags & OPf_PARENS) goto slurpy;
2696 o->op_private |= OPpLVREF_AV;
2700 o->op_private |= OPpLVREF_ELEM;
2701 o->op_flags |= OPf_STACKED;
2705 CHANGE_TYPE(o, OP_LVREFSLICE);
2706 o->op_private &= OPpLVAL_INTRO|OPpLVREF_ELEM;
2709 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2711 else if (!(o->op_flags & OPf_KIDS))
2713 if (o->op_targ != OP_LIST) {
2714 S_lvref(aTHX_ cBINOPo->op_first, type);
2719 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2720 assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
2721 S_lvref(aTHX_ kid, type);
2725 if (o->op_flags & OPf_PARENS)
2730 /* diag_listed_as: Can't modify reference to %s in %s assignment */
2731 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
2732 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
2738 CHANGE_TYPE(o, OP_LVREF);
2740 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
2741 if (type == OP_ENTERLOOP)
2742 o->op_private |= OPpLVREF_ITER;
2746 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
2750 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
2753 if (!o || (PL_parser && PL_parser->error_count))
2756 if ((o->op_private & OPpTARGET_MY)
2757 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2762 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
2764 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
2766 switch (o->op_type) {
2771 if ((o->op_flags & OPf_PARENS))
2775 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
2776 !(o->op_flags & OPf_STACKED)) {
2777 CHANGE_TYPE(o, OP_RV2CV); /* entersub => rv2cv */
2778 assert(cUNOPo->op_first->op_type == OP_NULL);
2779 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
2782 else { /* lvalue subroutine call */
2783 o->op_private |= OPpLVAL_INTRO;
2784 PL_modcount = RETURN_UNLIMITED_NUMBER;
2785 if (type == OP_GREPSTART || type == OP_ENTERSUB
2786 || type == OP_REFGEN || type == OP_LEAVESUBLV) {
2787 /* Potential lvalue context: */
2788 o->op_private |= OPpENTERSUB_INARGS;
2791 else { /* Compile-time error message: */
2792 OP *kid = cUNOPo->op_first;
2796 if (kid->op_type != OP_PUSHMARK) {
2797 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
2799 "panic: unexpected lvalue entersub "
2800 "args: type/targ %ld:%"UVuf,
2801 (long)kid->op_type, (UV)kid->op_targ);
2802 kid = kLISTOP->op_first;
2804 while (OP_HAS_SIBLING(kid))
2805 kid = OP_SIBLING(kid);
2806 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
2807 break; /* Postpone until runtime */
2810 kid = kUNOP->op_first;
2811 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
2812 kid = kUNOP->op_first;
2813 if (kid->op_type == OP_NULL)
2815 "Unexpected constant lvalue entersub "
2816 "entry via type/targ %ld:%"UVuf,
2817 (long)kid->op_type, (UV)kid->op_targ);
2818 if (kid->op_type != OP_GV) {
2825 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
2826 ? MUTABLE_CV(SvRV(gv))
2837 if (flags & OP_LVALUE_NO_CROAK) return NULL;
2838 /* grep, foreach, subcalls, refgen */
2839 if (type == OP_GREPSTART || type == OP_ENTERSUB
2840 || type == OP_REFGEN || type == OP_LEAVESUBLV)
2842 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2843 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
2845 : (o->op_type == OP_ENTERSUB
2846 ? "non-lvalue subroutine call"
2848 type ? PL_op_desc[type] : "local"));
2861 case OP_RIGHT_SHIFT:
2870 if (!(o->op_flags & OPf_STACKED))
2876 if (o->op_flags & OPf_STACKED) {
2880 if (!(o->op_private & OPpREPEAT_DOLIST))
2883 const I32 mods = PL_modcount;
2884 modkids(cBINOPo->op_first, type);
2885 if (type != OP_AASSIGN)
2887 kid = cBINOPo->op_last;
2888 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
2889 const IV iv = SvIV(kSVOP_sv);
2890 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
2892 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
2895 PL_modcount = RETURN_UNLIMITED_NUMBER;
2901 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
2902 op_lvalue(kid, type);
2907 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
2908 PL_modcount = RETURN_UNLIMITED_NUMBER;
2909 return o; /* Treat \(@foo) like ordinary list. */
2913 if (scalar_mod_type(o, type))
2915 ref(cUNOPo->op_first, o->op_type);
2922 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
2923 if (type == OP_LEAVESUBLV && (
2924 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
2925 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2927 o->op_private |= OPpMAYBE_LVSUB;
2931 PL_modcount = RETURN_UNLIMITED_NUMBER;
2935 if (type == OP_LEAVESUBLV)
2936 o->op_private |= OPpMAYBE_LVSUB;
2939 PL_hints |= HINT_BLOCK_SCOPE;
2940 if (type == OP_LEAVESUBLV)
2941 o->op_private |= OPpMAYBE_LVSUB;
2945 ref(cUNOPo->op_first, o->op_type);
2949 PL_hints |= HINT_BLOCK_SCOPE;
2959 case OP_AELEMFAST_LEX:
2966 PL_modcount = RETURN_UNLIMITED_NUMBER;
2967 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
2968 return o; /* Treat \(@foo) like ordinary list. */
2969 if (scalar_mod_type(o, type))
2971 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2972 && type == OP_LEAVESUBLV)
2973 o->op_private |= OPpMAYBE_LVSUB;
2977 if (!type) /* local() */
2978 Perl_croak(aTHX_ "Can't localize lexical variable %"PNf,
2979 PNfARG(PAD_COMPNAME(o->op_targ)));
2980 if (!(o->op_private & OPpLVAL_INTRO)
2981 || ( type != OP_SASSIGN && type != OP_AASSIGN
2982 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
2983 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
2992 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
2996 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
3002 if (type == OP_LEAVESUBLV)
3003 o->op_private |= OPpMAYBE_LVSUB;
3004 if (o->op_flags & OPf_KIDS)
3005 op_lvalue(OP_SIBLING(cBINOPo->op_first), type);
3010 ref(cBINOPo->op_first, o->op_type);
3011 if (type == OP_ENTERSUB &&
3012 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
3013 o->op_private |= OPpLVAL_DEFER;
3014 if (type == OP_LEAVESUBLV)
3015 o->op_private |= OPpMAYBE_LVSUB;
3022 o->op_private |= OPpLVALUE;
3028 if (o->op_flags & OPf_KIDS)
3029 op_lvalue(cLISTOPo->op_last, type);
3034 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
3036 else if (!(o->op_flags & OPf_KIDS))
3038 if (o->op_targ != OP_LIST) {
3039 op_lvalue(cBINOPo->op_first, type);
3045 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
3046 /* elements might be in void context because the list is
3047 in scalar context or because they are attribute sub calls */
3048 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
3049 op_lvalue(kid, type);
3057 if (type == OP_LEAVESUBLV
3058 || !S_vivifies(cLOGOPo->op_first->op_type))
3059 op_lvalue(cLOGOPo->op_first, type);
3060 if (type == OP_LEAVESUBLV
3061 || !S_vivifies(OP_SIBLING(cLOGOPo->op_first)->op_type))
3062 op_lvalue(OP_SIBLING(cLOGOPo->op_first), type);
3066 if (type != OP_AASSIGN && type != OP_SASSIGN
3067 && type != OP_ENTERLOOP)
3069 /* Don’t bother applying lvalue context to the ex-list. */
3070 kid = cUNOPx(cUNOPo->op_first)->op_first;
3071 assert (!OP_HAS_SIBLING(kid));
3074 if (type != OP_AASSIGN) goto nomod;
3075 kid = cUNOPo->op_first;
3078 const U8 ec = PL_parser ? PL_parser->error_count : 0;
3079 S_lvref(aTHX_ kid, type);
3080 if (!PL_parser || PL_parser->error_count == ec) {
3081 if (!FEATURE_REFALIASING_IS_ENABLED)
3083 "Experimental aliasing via reference not enabled");
3084 Perl_ck_warner_d(aTHX_
3085 packWARN(WARN_EXPERIMENTAL__REFALIASING),
3086 "Aliasing via reference is experimental");
3089 if (o->op_type == OP_REFGEN)
3090 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
3095 kid = cLISTOPo->op_first;
3096 if (kid && kid->op_type == OP_PUSHRE &&
3098 || o->op_flags & OPf_STACKED
3100 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
3102 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
3105 /* This is actually @array = split. */
3106 PL_modcount = RETURN_UNLIMITED_NUMBER;
3112 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
3116 /* [20011101.069] File test operators interpret OPf_REF to mean that
3117 their argument is a filehandle; thus \stat(".") should not set
3119 if (type == OP_REFGEN &&
3120 PL_check[o->op_type] == Perl_ck_ftst)
3123 if (type != OP_LEAVESUBLV)
3124 o->op_flags |= OPf_MOD;
3126 if (type == OP_AASSIGN || type == OP_SASSIGN)
3127 o->op_flags |= OPf_SPECIAL|OPf_REF;
3128 else if (!type) { /* local() */
3131 o->op_private |= OPpLVAL_INTRO;
3132 o->op_flags &= ~OPf_SPECIAL;
3133 PL_hints |= HINT_BLOCK_SCOPE;
3138 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
3139 "Useless localization of %s", OP_DESC(o));
3142 else if (type != OP_GREPSTART && type != OP_ENTERSUB
3143 && type != OP_LEAVESUBLV)
3144 o->op_flags |= OPf_REF;
3149 S_scalar_mod_type(const OP *o, I32 type)
3154 if (o && o->op_type == OP_RV2GV)
3178 case OP_RIGHT_SHIFT:
3199 S_is_handle_constructor(const OP *o, I32 numargs)
3201 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
3203 switch (o->op_type) {
3211 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
3224 S_refkids(pTHX_ OP *o, I32 type)
3226 if (o && o->op_flags & OPf_KIDS) {
3228 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
3235 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
3240 PERL_ARGS_ASSERT_DOREF;
3242 if (!o || (PL_parser && PL_parser->error_count))
3245 switch (o->op_type) {
3247 if ((type == OP_EXISTS || type == OP_DEFINED) &&
3248 !(o->op_flags & OPf_STACKED)) {
3249 CHANGE_TYPE(o, OP_RV2CV); /* entersub => rv2cv */
3250 assert(cUNOPo->op_first->op_type == OP_NULL);
3251 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
3252 o->op_flags |= OPf_SPECIAL;
3254 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
3255 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3256 : type == OP_RV2HV ? OPpDEREF_HV
3258 o->op_flags |= OPf_MOD;
3264 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
3265 doref(kid, type, set_op_ref);
3268 if (type == OP_DEFINED)
3269 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3270 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3273 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3274 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3275 : type == OP_RV2HV ? OPpDEREF_HV
3277 o->op_flags |= OPf_MOD;
3284 o->op_flags |= OPf_REF;
3287 if (type == OP_DEFINED)
3288 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3289 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3295 o->op_flags |= OPf_REF;
3300 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
3302 doref(cBINOPo->op_first, type, set_op_ref);
3306 doref(cBINOPo->op_first, o->op_type, set_op_ref);
3307 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3308 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3309 : type == OP_RV2HV ? OPpDEREF_HV
3311 o->op_flags |= OPf_MOD;
3321 if (!(o->op_flags & OPf_KIDS))
3323 doref(cLISTOPo->op_last, type, set_op_ref);
3333 S_dup_attrlist(pTHX_ OP *o)
3337 PERL_ARGS_ASSERT_DUP_ATTRLIST;
3339 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
3340 * where the first kid is OP_PUSHMARK and the remaining ones
3341 * are OP_CONST. We need to push the OP_CONST values.
3343 if (o->op_type == OP_CONST)
3344 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
3346 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
3348 for (o = cLISTOPo->op_first; o; o = OP_SIBLING(o)) {
3349 if (o->op_type == OP_CONST)
3350 rop = op_append_elem(OP_LIST, rop,
3351 newSVOP(OP_CONST, o->op_flags,
3352 SvREFCNT_inc_NN(cSVOPo->op_sv)));
3359 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
3361 SV * const stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
3363 PERL_ARGS_ASSERT_APPLY_ATTRS;
3365 /* fake up C<use attributes $pkg,$rv,@attrs> */
3367 #define ATTRSMODULE "attributes"
3368 #define ATTRSMODULE_PM "attributes.pm"
3370 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3371 newSVpvs(ATTRSMODULE),
3373 op_prepend_elem(OP_LIST,
3374 newSVOP(OP_CONST, 0, stashsv),
3375 op_prepend_elem(OP_LIST,
3376 newSVOP(OP_CONST, 0,
3378 dup_attrlist(attrs))));
3382 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
3384 OP *pack, *imop, *arg;
3385 SV *meth, *stashsv, **svp;
3387 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
3392 assert(target->op_type == OP_PADSV ||
3393 target->op_type == OP_PADHV ||
3394 target->op_type == OP_PADAV);
3396 /* Ensure that attributes.pm is loaded. */
3397 /* Don't force the C<use> if we don't need it. */
3398 svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
3399 if (svp && *svp != &PL_sv_undef)
3400 NOOP; /* already in %INC */
3402 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
3403 newSVpvs(ATTRSMODULE), NULL);
3405 /* Need package name for method call. */
3406 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
3408 /* Build up the real arg-list. */
3409 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
3411 arg = newOP(OP_PADSV, 0);
3412 arg->op_targ = target->op_targ;
3413 arg = op_prepend_elem(OP_LIST,
3414 newSVOP(OP_CONST, 0, stashsv),
3415 op_prepend_elem(OP_LIST,
3416 newUNOP(OP_REFGEN, 0,
3417 op_lvalue(arg, OP_REFGEN)),
3418 dup_attrlist(attrs)));
3420 /* Fake up a method call to import */
3421 meth = newSVpvs_share("import");
3422 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
3423 op_append_elem(OP_LIST,
3424 op_prepend_elem(OP_LIST, pack, arg),
3425 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
3427 /* Combine the ops. */
3428 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
3432 =notfor apidoc apply_attrs_string
3434 Attempts to apply a list of attributes specified by the C<attrstr> and
3435 C<len> arguments to the subroutine identified by the C<cv> argument which
3436 is expected to be associated with the package identified by the C<stashpv>
3437 argument (see L<attributes>). It gets this wrong, though, in that it
3438 does not correctly identify the boundaries of the individual attribute
3439 specifications within C<attrstr>. This is not really intended for the
3440 public API, but has to be listed here for systems such as AIX which
3441 need an explicit export list for symbols. (It's called from XS code
3442 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
3443 to respect attribute syntax properly would be welcome.
3449 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
3450 const char *attrstr, STRLEN len)
3454 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
3457 len = strlen(attrstr);
3461 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
3463 const char * const sstr = attrstr;
3464 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
3465 attrs = op_append_elem(OP_LIST, attrs,
3466 newSVOP(OP_CONST, 0,
3467 newSVpvn(sstr, attrstr-sstr)));
3471 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3472 newSVpvs(ATTRSMODULE),
3473 NULL, op_prepend_elem(OP_LIST,
3474 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
3475 op_prepend_elem(OP_LIST,
3476 newSVOP(OP_CONST, 0,
3477 newRV(MUTABLE_SV(cv))),
3482 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name)
3484 OP *new_proto = NULL;
3489 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
3495 if (o->op_type == OP_CONST) {
3496 pv = SvPV(cSVOPo_sv, pvlen);
3497 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3498 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3499 SV ** const tmpo = cSVOPx_svp(o);
3500 SvREFCNT_dec(cSVOPo_sv);
3505 } else if (o->op_type == OP_LIST) {
3507 assert(o->op_flags & OPf_KIDS);
3508 lasto = cLISTOPo->op_first;
3509 assert(lasto->op_type == OP_PUSHMARK);
3510 for (o = OP_SIBLING(lasto); o; o = OP_SIBLING(o)) {
3511 if (o->op_type == OP_CONST) {
3512 pv = SvPV(cSVOPo_sv, pvlen);
3513 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3514 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3515 SV ** const tmpo = cSVOPx_svp(o);
3516 SvREFCNT_dec(cSVOPo_sv);
3518 if (new_proto && ckWARN(WARN_MISC)) {
3520 const char * newp = SvPV(cSVOPo_sv, new_len);
3521 Perl_warner(aTHX_ packWARN(WARN_MISC),
3522 "Attribute prototype(%"UTF8f") discards earlier prototype attribute in same sub",
3523 UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
3529 /* excise new_proto from the list */
3530 op_sibling_splice(*attrs, lasto, 1, NULL);
3537 /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
3538 would get pulled in with no real need */
3539 if (!OP_HAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
3548 svname = sv_newmortal();
3549 gv_efullname3(svname, name, NULL);
3551 else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
3552 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
3554 svname = (SV *)name;
3555 if (ckWARN(WARN_ILLEGALPROTO))
3556 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE);
3557 if (*proto && ckWARN(WARN_PROTOTYPE)) {
3558 STRLEN old_len, new_len;
3559 const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
3560 const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
3562 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3563 "Prototype '%"UTF8f"' overridden by attribute 'prototype(%"UTF8f")'"
3565 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
3566 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
3576 S_cant_declare(pTHX_ OP *o)
3578 if (o->op_type == OP_NULL
3579 && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
3580 o = cUNOPo->op_first;
3581 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
3582 o->op_type == OP_NULL
3583 && o->op_flags & OPf_SPECIAL
3586 PL_parser->in_my == KEY_our ? "our" :
3587 PL_parser->in_my == KEY_state ? "state" :
3592 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
3595 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
3597 PERL_ARGS_ASSERT_MY_KID;
3599 if (!o || (PL_parser && PL_parser->error_count))
3604 if (type == OP_LIST) {
3606 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
3607 my_kid(kid, attrs, imopsp);
3609 } else if (type == OP_UNDEF || type == OP_STUB) {
3611 } else if (type == OP_RV2SV || /* "our" declaration */
3613 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
3614 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
3615 S_cant_declare(aTHX_ o);
3617 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
3619 PL_parser->in_my = FALSE;
3620 PL_parser->in_my_stash = NULL;
3621 apply_attrs(GvSTASH(gv),
3622 (type == OP_RV2SV ? GvSV(gv) :
3623 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
3624 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
3627 o->op_private |= OPpOUR_INTRO;
3630 else if (type != OP_PADSV &&
3633 type != OP_PUSHMARK)
3635 S_cant_declare(aTHX_ o);
3638 else if (attrs && type != OP_PUSHMARK) {
3642 PL_parser->in_my = FALSE;
3643 PL_parser->in_my_stash = NULL;
3645 /* check for C<my Dog $spot> when deciding package */
3646 stash = PAD_COMPNAME_TYPE(o->op_targ);
3648 stash = PL_curstash;
3649 apply_attrs_my(stash, o, attrs, imopsp);
3651 o->op_flags |= OPf_MOD;
3652 o->op_private |= OPpLVAL_INTRO;
3654 o->op_private |= OPpPAD_STATE;
3659 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
3662 int maybe_scalar = 0;
3664 PERL_ARGS_ASSERT_MY_ATTRS;
3666 /* [perl #17376]: this appears to be premature, and results in code such as
3667 C< our(%x); > executing in list mode rather than void mode */
3669 if (o->op_flags & OPf_PARENS)
3679 o = my_kid(o, attrs, &rops);
3681 if (maybe_scalar && o->op_type == OP_PADSV) {
3682 o = scalar(op_append_list(OP_LIST, rops, o));
3683 o->op_private |= OPpLVAL_INTRO;
3686 /* The listop in rops might have a pushmark at the beginning,
3687 which will mess up list assignment. */
3688 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
3689 if (rops->op_type == OP_LIST &&
3690 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
3692 OP * const pushmark = lrops->op_first;
3693 /* excise pushmark */
3694 op_sibling_splice(rops, NULL, 1, NULL);
3697 o = op_append_list(OP_LIST, o, rops);
3700 PL_parser->in_my = FALSE;
3701 PL_parser->in_my_stash = NULL;
3706 Perl_sawparens(pTHX_ OP *o)
3708 PERL_UNUSED_CONTEXT;
3710 o->op_flags |= OPf_PARENS;
3715 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
3719 const OPCODE ltype = left->op_type;
3720 const OPCODE rtype = right->op_type;
3722 PERL_ARGS_ASSERT_BIND_MATCH;
3724 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
3725 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
3727 const char * const desc
3729 rtype == OP_SUBST || rtype == OP_TRANS
3730 || rtype == OP_TRANSR
3732 ? (int)rtype : OP_MATCH];
3733 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
3735 S_op_varname(aTHX_ left);
3737 Perl_warner(aTHX_ packWARN(WARN_MISC),
3738 "Applying %s to %"SVf" will act on scalar(%"SVf")",
3739 desc, SVfARG(name), SVfARG(name));
3741 const char * const sample = (isary
3742 ? "@array" : "%hash");
3743 Perl_warner(aTHX_ packWARN(WARN_MISC),
3744 "Applying %s to %s will act on scalar(%s)",
3745 desc, sample, sample);
3749 if (rtype == OP_CONST &&
3750 cSVOPx(right)->op_private & OPpCONST_BARE &&
3751 cSVOPx(right)->op_private & OPpCONST_STRICT)
3753 no_bareword_allowed(right);
3756 /* !~ doesn't make sense with /r, so error on it for now */
3757 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
3759 /* diag_listed_as: Using !~ with %s doesn't make sense */
3760 yyerror("Using !~ with s///r doesn't make sense");
3761 if (rtype == OP_TRANSR && type == OP_NOT)
3762 /* diag_listed_as: Using !~ with %s doesn't make sense */
3763 yyerror("Using !~ with tr///r doesn't make sense");
3765 ismatchop = (rtype == OP_MATCH ||
3766 rtype == OP_SUBST ||
3767 rtype == OP_TRANS || rtype == OP_TRANSR)
3768 && !(right->op_flags & OPf_SPECIAL);
3769 if (ismatchop && right->op_private & OPpTARGET_MY) {
3771 right->op_private &= ~OPpTARGET_MY;
3773 if (!(right->op_flags & OPf_STACKED) && !right->op_targ && ismatchop) {
3774 if (left->op_type == OP_PADSV
3775 && !(left->op_private & OPpLVAL_INTRO))
3777 right->op_targ = left->op_targ;
3782 right->op_flags |= OPf_STACKED;
3783 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
3784 ! (rtype == OP_TRANS &&
3785 right->op_private & OPpTRANS_IDENTICAL) &&
3786 ! (rtype == OP_SUBST &&
3787 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
3788 left = op_lvalue(left, rtype);
3789 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
3790 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
3792 o = op_prepend_elem(rtype, scalar(left), right);
3795 return newUNOP(OP_NOT, 0, scalar(o));
3799 return bind_match(type, left,
3800 pmruntime(newPMOP(OP_MATCH, 0), right, 0, 0));
3804 Perl_invert(pTHX_ OP *o)
3808 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
3812 =for apidoc Amx|OP *|op_scope|OP *o
3814 Wraps up an op tree with some additional ops so that at runtime a dynamic
3815 scope will be created. The original ops run in the new dynamic scope,
3816 and then, provided that they exit normally, the scope will be unwound.
3817 The additional ops used to create and unwind the dynamic scope will
3818 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
3819 instead if the ops are simple enough to not need the full dynamic scope
3826 Perl_op_scope(pTHX_ OP *o)
3830 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
3831 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
3832 CHANGE_TYPE(o, OP_LEAVE);
3834 else if (o->op_type == OP_LINESEQ) {
3836 CHANGE_TYPE(o, OP_SCOPE);
3837 kid = ((LISTOP*)o)->op_first;
3838 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
3841 /* The following deals with things like 'do {1 for 1}' */
3842 kid = OP_SIBLING(kid);
3844 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
3849 o = newLISTOP(OP_SCOPE, 0, o, NULL);
3855 Perl_op_unscope(pTHX_ OP *o)
3857 if (o && o->op_type == OP_LINESEQ) {
3858 OP *kid = cLISTOPo->op_first;
3859 for(; kid; kid = OP_SIBLING(kid))
3860 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
3867 =for apidoc Am|int|block_start|int full
3869 Handles compile-time scope entry.
3870 Arranges for hints to be restored on block
3871 exit and also handles pad sequence numbers to make lexical variables scope
3872 right. Returns a savestack index for use with C<block_end>.
3878 Perl_block_start(pTHX_ int full)
3880 const int retval = PL_savestack_ix;
3882 PL_compiling.cop_seq = PL_cop_seqmax;
3884 pad_block_start(full);
3886 PL_hints &= ~HINT_BLOCK_SCOPE;
3887 SAVECOMPILEWARNINGS();
3888 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
3889 SAVEI32(PL_compiling.cop_seq);
3890 PL_compiling.cop_seq = 0;
3892 CALL_BLOCK_HOOKS(bhk_start, full);
3898 =for apidoc Am|OP *|block_end|I32 floor|OP *seq
3900 Handles compile-time scope exit. I<floor>
3901 is the savestack index returned by
3902 C<block_start>, and I<seq> is the body of the block. Returns the block,
3909 Perl_block_end(pTHX_ I32 floor, OP *seq)
3911 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
3912 OP* retval = scalarseq(seq);
3915 /* XXX Is the null PL_parser check necessary here? */
3916 assert(PL_parser); /* Let’s find out under debugging builds. */
3917 if (PL_parser && PL_parser->parsed_sub) {
3918 o = newSTATEOP(0, NULL, NULL);
3920 retval = op_append_elem(OP_LINESEQ, retval, o);
3923 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
3927 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
3931 /* pad_leavemy has created a sequence of introcv ops for all my
3932 subs declared in the block. We have to replicate that list with
3933 clonecv ops, to deal with this situation:
3938 sub s1 { state sub foo { \&s2 } }
3941 Originally, I was going to have introcv clone the CV and turn
3942 off the stale flag. Since &s1 is declared before &s2, the
3943 introcv op for &s1 is executed (on sub entry) before the one for
3944 &s2. But the &foo sub inside &s1 (which is cloned when &s1 is
3945 cloned, since it is a state sub) closes over &s2 and expects
3946 to see it in its outer CV’s pad. If the introcv op clones &s1,
3947 then &s2 is still marked stale. Since &s1 is not active, and
3948 &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia-
3949 ble will not stay shared’ warning. Because it is the same stub
3950 that will be used when the introcv op for &s2 is executed, clos-
3951 ing over it is safe. Hence, we have to turn off the stale flag
3952 on all lexical subs in the block before we clone any of them.
3953 Hence, having introcv clone the sub cannot work. So we create a
3954 list of ops like this:
3978 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
3979 OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
3980 for (;; kid = OP_SIBLING(kid)) {
3981 OP *newkid = newOP(OP_CLONECV, 0);
3982 newkid->op_targ = kid->op_targ;
3983 o = op_append_elem(OP_LINESEQ, o, newkid);
3984 if (kid == last) break;
3986 retval = op_prepend_elem(OP_LINESEQ, o, retval);
3989 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
3995 =head1 Compile-time scope hooks
3997 =for apidoc Aox||blockhook_register
3999 Register a set of hooks to be called when the Perl lexical scope changes
4000 at compile time. See L<perlguts/"Compile-time scope hooks">.
4006 Perl_blockhook_register(pTHX_ BHK *hk)
4008 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
4010 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
4014 Perl_newPROG(pTHX_ OP *o)
4016 PERL_ARGS_ASSERT_NEWPROG;
4023 PL_eval_root = newUNOP(OP_LEAVEEVAL,
4024 ((PL_in_eval & EVAL_KEEPERR)
4025 ? OPf_SPECIAL : 0), o);
4027 cx = &cxstack[cxstack_ix];
4028 assert(CxTYPE(cx) == CXt_EVAL);
4030 if ((cx->blk_gimme & G_WANT) == G_VOID)
4031 scalarvoid(PL_eval_root);
4032 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
4035 scalar(PL_eval_root);
4037 PL_eval_start = op_linklist(PL_eval_root);
4038 PL_eval_root->op_private |= OPpREFCOUNTED;
4039 OpREFCNT_set(PL_eval_root, 1);
4040 PL_eval_root->op_next = 0;
4041 i = PL_savestack_ix;
4044 CALL_PEEP(PL_eval_start);
4045 finalize_optree(PL_eval_root);
4046 S_prune_chain_head(&PL_eval_start);
4048 PL_savestack_ix = i;
4051 if (o->op_type == OP_STUB) {
4052 /* This block is entered if nothing is compiled for the main
4053 program. This will be the case for an genuinely empty main
4054 program, or one which only has BEGIN blocks etc, so already
4057 Historically (5.000) the guard above was !o. However, commit
4058 f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
4059 c71fccf11fde0068, changed perly.y so that newPROG() is now
4060 called with the output of block_end(), which returns a new
4061 OP_STUB for the case of an empty optree. ByteLoader (and
4062 maybe other things) also take this path, because they set up
4063 PL_main_start and PL_main_root directly, without generating an
4066 If the parsing the main program aborts (due to parse errors,
4067 or due to BEGIN or similar calling exit), then newPROG()
4068 isn't even called, and hence this code path and its cleanups
4069 are skipped. This shouldn't make a make a difference:
4070 * a non-zero return from perl_parse is a failure, and
4071 perl_destruct() should be called immediately.
4072 * however, if exit(0) is called during the parse, then
4073 perl_parse() returns 0, and perl_run() is called. As
4074 PL_main_start will be NULL, perl_run() will return
4075 promptly, and the exit code will remain 0.
4078 PL_comppad_name = 0;
4080 S_op_destroy(aTHX_ o);
4083 PL_main_root = op_scope(sawparens(scalarvoid(o)));
4084 PL_curcop = &PL_compiling;
4085 PL_main_start = LINKLIST(PL_main_root);
4086 PL_main_root->op_private |= OPpREFCOUNTED;
4087 OpREFCNT_set(PL_main_root, 1);
4088 PL_main_root->op_next = 0;
4089 CALL_PEEP(PL_main_start);
4090 finalize_optree(PL_main_root);
4091 S_prune_chain_head(&PL_main_start);
4092 cv_forget_slab(PL_compcv);
4095 /* Register with debugger */
4097 CV * const cv = get_cvs("DB::postponed", 0);
4101 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
4103 call_sv(MUTABLE_SV(cv), G_DISCARD);
4110 Perl_localize(pTHX_ OP *o, I32 lex)
4112 PERL_ARGS_ASSERT_LOCALIZE;
4114 if (o->op_flags & OPf_PARENS)
4115 /* [perl #17376]: this appears to be premature, and results in code such as
4116 C< our(%x); > executing in list mode rather than void mode */
4123 if ( PL_parser->bufptr > PL_parser->oldbufptr
4124 && PL_parser->bufptr[-1] == ','
4125 && ckWARN(WARN_PARENTHESIS))
4127 char *s = PL_parser->bufptr;
4130 /* some heuristics to detect a potential error */
4131 while (*s && (strchr(", \t\n", *s)))
4135 if (*s && strchr("@$%*", *s) && *++s
4136 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
4139 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
4141 while (*s && (strchr(", \t\n", *s)))
4147 if (sigil && (*s == ';' || *s == '=')) {
4148 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
4149 "Parentheses missing around \"%s\" list",
4151 ? (PL_parser->in_my == KEY_our
4153 : PL_parser->in_my == KEY_state
4163 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
4164 PL_parser->in_my = FALSE;
4165 PL_parser->in_my_stash = NULL;
4170 Perl_jmaybe(pTHX_ OP *o)
4172 PERL_ARGS_ASSERT_JMAYBE;
4174 if (o->op_type == OP_LIST) {
4176 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
4177 o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
4182 PERL_STATIC_INLINE OP *
4183 S_op_std_init(pTHX_ OP *o)
4185 I32 type = o->op_type;
4187 PERL_ARGS_ASSERT_OP_STD_INIT;
4189 if (PL_opargs[type] & OA_RETSCALAR)
4191 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
4192 o->op_targ = pad_alloc(type, SVs_PADTMP);
4197 PERL_STATIC_INLINE OP *
4198 S_op_integerize(pTHX_ OP *o)
4200 I32 type = o->op_type;
4202 PERL_ARGS_ASSERT_OP_INTEGERIZE;
4204 /* integerize op. */
4205 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
4208 o->op_ppaddr = PL_ppaddr[++(o->op_type)];
4211 if (type == OP_NEGATE)
4212 /* XXX might want a ck_negate() for this */
4213 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
4219 S_fold_constants(pTHX_ OP *o)
4224 VOL I32 type = o->op_type;
4230 SV * const oldwarnhook = PL_warnhook;
4231 SV * const olddiehook = PL_diehook;
4233 U8 oldwarn = PL_dowarn;
4236 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
4238 if (!(PL_opargs[type] & OA_FOLDCONST))
4247 #ifdef USE_LOCALE_CTYPE
4248 if (IN_LC_COMPILETIME(LC_CTYPE))
4257 #ifdef USE_LOCALE_COLLATE
4258 if (IN_LC_COMPILETIME(LC_COLLATE))
4263 /* XXX what about the numeric ops? */
4264 #ifdef USE_LOCALE_NUMERIC
4265 if (IN_LC_COMPILETIME(LC_NUMERIC))
4270 if (!OP_HAS_SIBLING(cLISTOPo->op_first)
4271 || OP_SIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
4274 SV * const sv = cSVOPx_sv(OP_SIBLING(cLISTOPo->op_first));
4275 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
4277 const char *s = SvPVX_const(sv);
4278 while (s < SvEND(sv)) {
4279 if (isALPHA_FOLD_EQ(*s, 'p')) goto nope;
4286 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
4289 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
4290 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
4294 if (PL_parser && PL_parser->error_count)
4295 goto nope; /* Don't try to run w/ errors */
4297 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4298 const OPCODE type = curop->op_type;
4299 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
4301 type != OP_SCALAR &&
4303 type != OP_PUSHMARK)
4309 curop = LINKLIST(o);
4310 old_next = o->op_next;
4314 oldscope = PL_scopestack_ix;
4315 create_eval_scope(G_FAKINGEVAL);
4317 /* Verify that we don't need to save it: */
4318 assert(PL_curcop == &PL_compiling);
4319 StructCopy(&PL_compiling, ¬_compiling, COP);
4320 PL_curcop = ¬_compiling;
4321 /* The above ensures that we run with all the correct hints of the
4322 currently compiling COP, but that IN_PERL_RUNTIME is true. */
4323 assert(IN_PERL_RUNTIME);
4324 PL_warnhook = PERL_WARNHOOK_FATAL;
4328 /* Effective $^W=1. */
4329 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
4330 PL_dowarn |= G_WARN_ON;
4335 sv = *(PL_stack_sp--);
4336 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
4337 pad_swipe(o->op_targ, FALSE);
4339 else if (SvTEMP(sv)) { /* grab mortal temp? */
4340 SvREFCNT_inc_simple_void(sv);
4343 else { assert(SvIMMORTAL(sv)); }
4346 /* Something tried to die. Abandon constant folding. */
4347 /* Pretend the error never happened. */
4349 o->op_next = old_next;
4353 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
4354 PL_warnhook = oldwarnhook;
4355 PL_diehook = olddiehook;
4356 /* XXX note that this croak may fail as we've already blown away
4357 * the stack - eg any nested evals */
4358 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
4361 PL_dowarn = oldwarn;
4362 PL_warnhook = oldwarnhook;
4363 PL_diehook = olddiehook;
4364 PL_curcop = &PL_compiling;
4366 if (PL_scopestack_ix > oldscope)
4367 delete_eval_scope();
4372 /* OP_STRINGIFY and constant folding are used to implement qq.
4373 Here the constant folding is an implementation detail that we
4374 want to hide. If the stringify op is itself already marked
4375 folded, however, then it is actually a folded join. */
4376 is_stringify = type == OP_STRINGIFY && !o->op_folded;
4381 else if (!SvIMMORTAL(sv)) {
4385 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
4386 if (!is_stringify) newop->op_folded = 1;
4394 S_gen_constant_list(pTHX_ OP *o)
4398 const SSize_t oldtmps_floor = PL_tmps_floor;
4403 if (PL_parser && PL_parser->error_count)
4404 return o; /* Don't attempt to run with errors */
4406 curop = LINKLIST(o);
4409 S_prune_chain_head(&curop);
4411 Perl_pp_pushmark(aTHX);
4414 assert (!(curop->op_flags & OPf_SPECIAL));
4415 assert(curop->op_type == OP_RANGE);
4416 Perl_pp_anonlist(aTHX);
4417 PL_tmps_floor = oldtmps_floor;
4419 CHANGE_TYPE(o, OP_RV2AV);
4420 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
4421 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
4422 o->op_opt = 0; /* needs to be revisited in rpeep() */
4423 av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
4425 /* replace subtree with an OP_CONST */
4426 curop = ((UNOP*)o)->op_first;
4427 op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
4430 if (AvFILLp(av) != -1)
4431 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
4434 SvREADONLY_on(*svp);
4441 =head1 Optree Manipulation Functions
4444 /* List constructors */
4447 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
4449 Append an item to the list of ops contained directly within a list-type
4450 op, returning the lengthened list. I<first> is the list-type op,
4451 and I<last> is the op to append to the list. I<optype> specifies the
4452 intended opcode for the list. If I<first> is not already a list of the
4453 right type, it will be upgraded into one. If either I<first> or I<last>
4454 is null, the other is returned unchanged.
4460 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
4468 if (first->op_type != (unsigned)type
4469 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
4471 return newLISTOP(type, 0, first, last);
4474 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
4475 first->op_flags |= OPf_KIDS;
4480 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
4482 Concatenate the lists of ops contained directly within two list-type ops,
4483 returning the combined list. I<first> and I<last> are the list-type ops
4484 to concatenate. I<optype> specifies the intended opcode for the list.
4485 If either I<first> or I<last> is not already a list of the right type,
4486 it will be upgraded into one. If either I<first> or I<last> is null,
4487 the other is returned unchanged.
4493 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
4501 if (first->op_type != (unsigned)type)
4502 return op_prepend_elem(type, first, last);
4504 if (last->op_type != (unsigned)type)
4505 return op_append_elem(type, first, last);
4507 ((LISTOP*)first)->op_last->op_lastsib = 0;
4508 OP_SIBLING_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first);
4509 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
4510 ((LISTOP*)first)->op_last->op_lastsib = 1;
4511 #ifdef PERL_OP_PARENT
4512 ((LISTOP*)first)->op_last->op_sibling = first;
4514 first->op_flags |= (last->op_flags & OPf_KIDS);
4517 S_op_destroy(aTHX_ last);
4523 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
4525 Prepend an item to the list of ops contained directly within a list-type
4526 op, returning the lengthened list. I<first> is the op to prepend to the
4527 list, and I<last> is the list-type op. I<optype> specifies the intended
4528 opcode for the list. If I<last> is not already a list of the right type,
4529 it will be upgraded into one. If either I<first> or I<last> is null,
4530 the other is returned unchanged.
4536 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
4544 if (last->op_type == (unsigned)type) {
4545 if (type == OP_LIST) { /* already a PUSHMARK there */
4546 /* insert 'first' after pushmark */
4547 op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first);
4548 if (!(first->op_flags & OPf_PARENS))
4549 last->op_flags &= ~OPf_PARENS;
4552 op_sibling_splice(last, NULL, 0, first);
4553 last->op_flags |= OPf_KIDS;
4557 return newLISTOP(type, 0, first, last);
4561 =for apidoc Am|OP *|op_convert_list|I32 type|I32 flags|OP *o
4563 Converts I<o> into a list op if it is not one already, and then converts it
4564 into the specified I<type>, calling its check function, allocating a target if
4565 it needs one, and folding constants.
4567 A list-type op is usually constructed one kid at a time via C<newLISTOP>,
4568 C<op_prepend_elem> and C<op_append_elem>. Then finally it is passed to
4569 C<op_convert_list> to make it the right type.
4575 Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o)
4578 if (type < 0) type = -type, flags |= OPf_SPECIAL;
4579 if (!o || o->op_type != OP_LIST)
4580 o = force_list(o, 0);
4582 o->op_flags &= ~OPf_WANT;
4584 if (!(PL_opargs[type] & OA_MARK))
4585 op_null(cLISTOPo->op_first);
4587 OP * const kid2 = OP_SIBLING(cLISTOPo->op_first);
4588 if (kid2 && kid2->op_type == OP_COREARGS) {
4589 op_null(cLISTOPo->op_first);
4590 kid2->op_private |= OPpCOREARGS_PUSHMARK;
4594 CHANGE_TYPE(o, type);
4595 o->op_flags |= flags;
4596 if (flags & OPf_FOLDED)
4599 o = CHECKOP(type, o);
4600 if (o->op_type != (unsigned)type)
4603 return fold_constants(op_integerize(op_std_init(o)));
4610 =head1 Optree construction
4612 =for apidoc Am|OP *|newNULLLIST
4614 Constructs, checks, and returns a new C<stub> op, which represents an
4615 empty list expression.
4621 Perl_newNULLLIST(pTHX)
4623 return newOP(OP_STUB, 0);
4626 /* promote o and any siblings to be a list if its not already; i.e.
4634 * pushmark - o - A - B
4636 * If nullit it true, the list op is nulled.
4640 S_force_list(pTHX_ OP *o, bool nullit)
4642 if (!o || o->op_type != OP_LIST) {
4645 /* manually detach any siblings then add them back later */
4646 rest = OP_SIBLING(o);
4647 OP_SIBLING_set(o, NULL);
4650 o = newLISTOP(OP_LIST, 0, o, NULL);
4652 op_sibling_splice(o, cLISTOPo->op_last, 0, rest);
4660 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
4662 Constructs, checks, and returns an op of any list type. I<type> is
4663 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4664 C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
4665 supply up to two ops to be direct children of the list op; they are
4666 consumed by this function and become part of the constructed op tree.
4668 For most list operators, the check function expects all the kid ops to be
4669 present already, so calling C<newLISTOP(OP_JOIN, ...)> (e.g.,) is not
4670 appropriate. What you want to do in that case is create an op of type
4671 OP_LIST, append more children to it, and then call L</op_convert_list>.
4672 See L</op_convert_list> for more information.
4679 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4684 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP
4685 || type == OP_CUSTOM);
4687 NewOp(1101, listop, 1, LISTOP);
4689 CHANGE_TYPE(listop, type);
4692 listop->op_flags = (U8)flags;
4696 else if (!first && last)
4699 OP_SIBLING_set(first, last);
4700 listop->op_first = first;
4701 listop->op_last = last;
4702 if (type == OP_LIST) {
4703 OP* const pushop = newOP(OP_PUSHMARK, 0);
4704 pushop->op_lastsib = 0;
4705 OP_SIBLING_set(pushop, first);
4706 listop->op_first = pushop;
4707 listop->op_flags |= OPf_KIDS;
4709 listop->op_last = pushop;
4712 first->op_lastsib = 0;
4713 if (listop->op_last) {
4714 listop->op_last->op_lastsib = 1;
4715 #ifdef PERL_OP_PARENT
4716 listop->op_last->op_sibling = (OP*)listop;
4720 return CHECKOP(type, listop);
4724 =for apidoc Am|OP *|newOP|I32 type|I32 flags
4726 Constructs, checks, and returns an op of any base type (any type that
4727 has no extra fields). I<type> is the opcode. I<flags> gives the
4728 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
4735 Perl_newOP(pTHX_ I32 type, I32 flags)
4740 if (type == -OP_ENTEREVAL) {
4741 type = OP_ENTEREVAL;
4742 flags |= OPpEVAL_BYTES<<8;
4745 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
4746 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4747 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4748 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4750 NewOp(1101, o, 1, OP);
4751 CHANGE_TYPE(o, type);
4752 o->op_flags = (U8)flags;
4755 o->op_private = (U8)(0 | (flags >> 8));
4756 if (PL_opargs[type] & OA_RETSCALAR)
4758 if (PL_opargs[type] & OA_TARGET)
4759 o->op_targ = pad_alloc(type, SVs_PADTMP);
4760 return CHECKOP(type, o);
4764 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
4766 Constructs, checks, and returns an op of any unary type. I<type> is
4767 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4768 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
4769 bits, the eight bits of C<op_private>, except that the bit with value 1
4770 is automatically set. I<first> supplies an optional op to be the direct
4771 child of the unary op; it is consumed by this function and become part
4772 of the constructed op tree.
4778 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
4783 if (type == -OP_ENTEREVAL) {
4784 type = OP_ENTEREVAL;
4785 flags |= OPpEVAL_BYTES<<8;
4788 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
4789 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4790 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4791 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
4792 || type == OP_SASSIGN
4793 || type == OP_ENTERTRY
4794 || type == OP_CUSTOM
4795 || type == OP_NULL );
4798 first = newOP(OP_STUB, 0);
4799 if (PL_opargs[type] & OA_MARK)
4800 first = force_list(first, 1);
4802 NewOp(1101, unop, 1, UNOP);
4803 CHANGE_TYPE(unop, type);
4804 unop->op_first = first;
4805 unop->op_flags = (U8)(flags | OPf_KIDS);
4806 unop->op_private = (U8)(1 | (flags >> 8));
4808 #ifdef PERL_OP_PARENT
4809 if (!OP_HAS_SIBLING(first)) /* true unless weird syntax error */
4810 first->op_sibling = (OP*)unop;
4813 unop = (UNOP*) CHECKOP(type, unop);
4817 return fold_constants(op_integerize(op_std_init((OP *) unop)));
4821 =for apidoc newUNOP_AUX
4823 Similar to C<newUNOP>, but creates an UNOP_AUX struct instead, with op_aux
4830 Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags,&nbs