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]))
596 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
597 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
598 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
599 PL_parser->in_my == KEY_state ? "state" : "my"));
601 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
602 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
605 else if (len == 2 && name[1] == '_' && !is_our)
606 /* diag_listed_as: Use of my $_ is experimental */
607 Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__LEXICAL_TOPIC),
608 "Use of %s $_ is experimental",
609 PL_parser->in_my == KEY_state
613 /* allocate a spare slot and store the name in that slot */
615 off = pad_add_name_pvn(name, len,
616 (is_our ? padadd_OUR :
617 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
618 PL_parser->in_my_stash,
620 /* $_ is always in main::, even with our */
621 ? (PL_curstash && !memEQs(name,len,"$_")
627 /* anon sub prototypes contains state vars should always be cloned,
628 * otherwise the state var would be shared between anon subs */
630 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
631 CvCLONE_on(PL_compcv);
637 =head1 Optree Manipulation Functions
639 =for apidoc alloccopstash
641 Available only under threaded builds, this function allocates an entry in
642 C<PL_stashpad> for the stash passed to it.
649 Perl_alloccopstash(pTHX_ HV *hv)
651 PADOFFSET off = 0, o = 1;
652 bool found_slot = FALSE;
654 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
656 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
658 for (; o < PL_stashpadmax; ++o) {
659 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
660 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
661 found_slot = TRUE, off = o;
664 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
665 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
666 off = PL_stashpadmax;
667 PL_stashpadmax += 10;
670 PL_stashpad[PL_stashpadix = off] = hv;
675 /* free the body of an op without examining its contents.
676 * Always use this rather than FreeOp directly */
679 S_op_destroy(pTHX_ OP *o)
687 =for apidoc Am|void|op_free|OP *o
689 Free an op. Only use this when an op is no longer linked to from any
696 Perl_op_free(pTHX_ OP *o)
700 SSize_t defer_ix = -1;
701 SSize_t defer_stack_alloc = 0;
702 OP **defer_stack = NULL;
706 /* Though ops may be freed twice, freeing the op after its slab is a
708 assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
709 /* During the forced freeing of ops after compilation failure, kidops
710 may be freed before their parents. */
711 if (!o || o->op_type == OP_FREED)
716 /* an op should only ever acquire op_private flags that we know about.
717 * If this fails, you may need to fix something in regen/op_private */
718 if (o->op_ppaddr == PL_ppaddr[o->op_type]) {
719 assert(!(o->op_private & ~PL_op_private_valid[type]));
722 if (o->op_private & OPpREFCOUNTED) {
733 refcnt = OpREFCNT_dec(o);
736 /* Need to find and remove any pattern match ops from the list
737 we maintain for reset(). */
738 find_and_forget_pmops(o);
748 /* Call the op_free hook if it has been set. Do it now so that it's called
749 * at the right time for refcounted ops, but still before all of the kids
753 if (o->op_flags & OPf_KIDS) {
755 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
756 nextkid = OpSIBLING(kid); /* Get before next freeing kid */
757 if (!kid || kid->op_type == OP_FREED)
758 /* During the forced freeing of ops after
759 compilation failure, kidops may be freed before
762 if (!(kid->op_flags & OPf_KIDS))
763 /* If it has no kids, just free it now */
770 type = (OPCODE)o->op_targ;
773 Slab_to_rw(OpSLAB(o));
775 /* COP* is not cleared by op_clear() so that we may track line
776 * numbers etc even after null() */
777 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
783 #ifdef DEBUG_LEAKING_SCALARS
787 } while ( (o = POP_DEFERRED_OP()) );
789 Safefree(defer_stack);
792 /* S_op_clear_gv(): free a GV attached to an OP */
795 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
797 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
801 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
802 || o->op_type == OP_MULTIDEREF)
805 ? ((GV*)PAD_SVl(*ixp)) : NULL;
807 ? (GV*)(*svp) : NULL;
809 /* It's possible during global destruction that the GV is freed
810 before the optree. Whilst the SvREFCNT_inc is happy to bump from
811 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
812 will trigger an assertion failure, because the entry to sv_clear
813 checks that the scalar is not already freed. A check of for
814 !SvIS_FREED(gv) turns out to be invalid, because during global
815 destruction the reference count can be forced down to zero
816 (with SVf_BREAK set). In which case raising to 1 and then
817 dropping to 0 triggers cleanup before it should happen. I
818 *think* that this might actually be a general, systematic,
819 weakness of the whole idea of SVf_BREAK, in that code *is*
820 allowed to raise and lower references during global destruction,
821 so any *valid* code that happens to do this during global
822 destruction might well trigger premature cleanup. */
823 bool still_valid = gv && SvREFCNT(gv);
826 SvREFCNT_inc_simple_void(gv);
829 pad_swipe(*ixp, TRUE);
837 int try_downgrade = SvREFCNT(gv) == 2;
840 gv_try_downgrade(gv);
846 Perl_op_clear(pTHX_ OP *o)
851 PERL_ARGS_ASSERT_OP_CLEAR;
853 switch (o->op_type) {
854 case OP_NULL: /* Was holding old type, if any. */
857 case OP_ENTEREVAL: /* Was holding hints. */
861 if (!(o->op_flags & OPf_REF)
862 || (PL_check[o->op_type] != Perl_ck_ftst))
869 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
871 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
874 case OP_METHOD_REDIR:
875 case OP_METHOD_REDIR_SUPER:
877 if (cMETHOPx(o)->op_rclass_targ) {
878 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
879 cMETHOPx(o)->op_rclass_targ = 0;
882 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
883 cMETHOPx(o)->op_rclass_sv = NULL;
885 case OP_METHOD_NAMED:
886 case OP_METHOD_SUPER:
887 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
888 cMETHOPx(o)->op_u.op_meth_sv = NULL;
891 pad_swipe(o->op_targ, 1);
898 SvREFCNT_dec(cSVOPo->op_sv);
899 cSVOPo->op_sv = NULL;
902 Even if op_clear does a pad_free for the target of the op,
903 pad_free doesn't actually remove the sv that exists in the pad;
904 instead it lives on. This results in that it could be reused as
905 a target later on when the pad was reallocated.
908 pad_swipe(o->op_targ,1);
918 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
923 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
924 assert(o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
926 if (cPADOPo->op_padix > 0) {
927 pad_swipe(cPADOPo->op_padix, TRUE);
928 cPADOPo->op_padix = 0;
931 SvREFCNT_dec(cSVOPo->op_sv);
932 cSVOPo->op_sv = NULL;
936 PerlMemShared_free(cPVOPo->op_pv);
937 cPVOPo->op_pv = NULL;
941 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
945 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
946 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
949 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
955 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
956 op_free(cPMOPo->op_code_list);
957 cPMOPo->op_code_list = NULL;
959 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
960 /* we use the same protection as the "SAFE" version of the PM_ macros
961 * here since sv_clean_all might release some PMOPs
962 * after PL_regex_padav has been cleared
963 * and the clearing of PL_regex_padav needs to
964 * happen before sv_clean_all
967 if(PL_regex_pad) { /* We could be in destruction */
968 const IV offset = (cPMOPo)->op_pmoffset;
969 ReREFCNT_dec(PM_GETRE(cPMOPo));
970 PL_regex_pad[offset] = &PL_sv_undef;
971 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
975 ReREFCNT_dec(PM_GETRE(cPMOPo));
976 PM_SETRE(cPMOPo, NULL);
983 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
984 UV actions = items->uv;
986 bool is_hash = FALSE;
989 switch (actions & MDEREF_ACTION_MASK) {
992 actions = (++items)->uv;
995 case MDEREF_HV_padhv_helem:
997 case MDEREF_AV_padav_aelem:
998 pad_free((++items)->pad_offset);
1001 case MDEREF_HV_gvhv_helem:
1003 case MDEREF_AV_gvav_aelem:
1005 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1007 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1011 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1013 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1015 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1017 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1019 goto do_vivify_rv2xv_elem;
1021 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1023 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1024 pad_free((++items)->pad_offset);
1025 goto do_vivify_rv2xv_elem;
1027 case MDEREF_HV_pop_rv2hv_helem:
1028 case MDEREF_HV_vivify_rv2hv_helem:
1030 do_vivify_rv2xv_elem:
1031 case MDEREF_AV_pop_rv2av_aelem:
1032 case MDEREF_AV_vivify_rv2av_aelem:
1034 switch (actions & MDEREF_INDEX_MASK) {
1035 case MDEREF_INDEX_none:
1038 case MDEREF_INDEX_const:
1042 pad_swipe((++items)->pad_offset, 1);
1044 SvREFCNT_dec((++items)->sv);
1050 case MDEREF_INDEX_padsv:
1051 pad_free((++items)->pad_offset);
1053 case MDEREF_INDEX_gvsv:
1055 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1057 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1062 if (actions & MDEREF_FLAG_last)
1075 actions >>= MDEREF_SHIFT;
1078 /* start of malloc is at op_aux[-1], where the length is
1080 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1085 if (o->op_targ > 0) {
1086 pad_free(o->op_targ);
1092 S_cop_free(pTHX_ COP* cop)
1094 PERL_ARGS_ASSERT_COP_FREE;
1097 if (! specialWARN(cop->cop_warnings))
1098 PerlMemShared_free(cop->cop_warnings);
1099 cophh_free(CopHINTHASH_get(cop));
1100 if (PL_curcop == cop)
1105 S_forget_pmop(pTHX_ PMOP *const o
1108 HV * const pmstash = PmopSTASH(o);
1110 PERL_ARGS_ASSERT_FORGET_PMOP;
1112 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1113 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1115 PMOP **const array = (PMOP**) mg->mg_ptr;
1116 U32 count = mg->mg_len / sizeof(PMOP**);
1120 if (array[i] == o) {
1121 /* Found it. Move the entry at the end to overwrite it. */
1122 array[i] = array[--count];
1123 mg->mg_len = count * sizeof(PMOP**);
1124 /* Could realloc smaller at this point always, but probably
1125 not worth it. Probably worth free()ing if we're the
1128 Safefree(mg->mg_ptr);
1141 S_find_and_forget_pmops(pTHX_ OP *o)
1143 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1145 if (o->op_flags & OPf_KIDS) {
1146 OP *kid = cUNOPo->op_first;
1148 switch (kid->op_type) {
1153 forget_pmop((PMOP*)kid);
1155 find_and_forget_pmops(kid);
1156 kid = OpSIBLING(kid);
1162 =for apidoc Am|void|op_null|OP *o
1164 Neutralizes an op when it is no longer needed, but is still linked to from
1171 Perl_op_null(pTHX_ OP *o)
1175 PERL_ARGS_ASSERT_OP_NULL;
1177 if (o->op_type == OP_NULL)
1180 o->op_targ = o->op_type;
1181 CHANGE_TYPE(o, OP_NULL);
1185 Perl_op_refcnt_lock(pTHX)
1190 PERL_UNUSED_CONTEXT;
1195 Perl_op_refcnt_unlock(pTHX)
1200 PERL_UNUSED_CONTEXT;
1206 =for apidoc op_sibling_splice
1208 A general function for editing the structure of an existing chain of
1209 op_sibling nodes. By analogy with the perl-level splice() function, allows
1210 you to delete zero or more sequential nodes, replacing them with zero or
1211 more different nodes. Performs the necessary op_first/op_last
1212 housekeeping on the parent node and op_sibling manipulation on the
1213 children. The last deleted node will be marked as as the last node by
1214 updating the op_sibling or op_lastsib field as appropriate.
1216 Note that op_next is not manipulated, and nodes are not freed; that is the
1217 responsibility of the caller. It also won't create a new list op for an
1218 empty list etc; use higher-level functions like op_append_elem() for that.
1220 parent is the parent node of the sibling chain.
1222 start is the node preceding the first node to be spliced. Node(s)
1223 following it will be deleted, and ops will be inserted after it. If it is
1224 NULL, the first node onwards is deleted, and nodes are inserted at the
1227 del_count is the number of nodes to delete. If zero, no nodes are deleted.
1228 If -1 or greater than or equal to the number of remaining kids, all
1229 remaining kids are deleted.
1231 insert is the first of a chain of nodes to be inserted in place of the nodes.
1232 If NULL, no nodes are inserted.
1234 The head of the chain of deleted ops is returned, or NULL if no ops were
1239 action before after returns
1240 ------ ----- ----- -------
1243 splice(P, A, 2, X-Y-Z) | | B-C
1247 splice(P, NULL, 1, X-Y) | | A
1251 splice(P, NULL, 3, NULL) | | A-B-C
1255 splice(P, B, 0, X-Y) | | NULL
1262 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1264 OP *first = start ? OpSIBLING(start) : cLISTOPx(parent)->op_first;
1266 OP *last_del = NULL;
1267 OP *last_ins = NULL;
1269 PERL_ARGS_ASSERT_OP_SIBLING_SPLICE;
1271 assert(del_count >= -1);
1273 if (del_count && first) {
1275 while (--del_count && OpHAS_SIBLING(last_del))
1276 last_del = OpSIBLING(last_del);
1277 rest = OpSIBLING(last_del);
1278 OpSIBLING_set(last_del, NULL);
1279 last_del->op_lastsib = 1;
1286 while (OpHAS_SIBLING(last_ins))
1287 last_ins = OpSIBLING(last_ins);
1288 OpSIBLING_set(last_ins, rest);
1289 last_ins->op_lastsib = rest ? 0 : 1;
1295 OpSIBLING_set(start, insert);
1296 start->op_lastsib = insert ? 0 : 1;
1299 cLISTOPx(parent)->op_first = insert;
1301 parent->op_flags |= OPf_KIDS;
1303 parent->op_flags &= ~OPf_KIDS;
1307 /* update op_last etc */
1308 U32 type = parent->op_type;
1311 if (type == OP_NULL)
1312 type = parent->op_targ;
1313 type = PL_opargs[type] & OA_CLASS_MASK;
1315 lastop = last_ins ? last_ins : start ? start : NULL;
1316 if ( type == OA_BINOP
1317 || type == OA_LISTOP
1321 cLISTOPx(parent)->op_last = lastop;
1324 lastop->op_lastsib = 1;
1325 #ifdef PERL_OP_PARENT
1326 lastop->op_sibling = parent;
1330 return last_del ? first : NULL;
1334 =for apidoc op_parent
1336 returns the parent OP of o, if it has a parent. Returns NULL otherwise.
1337 (Currently perl must be built with C<-DPERL_OP_PARENT> for this feature to
1344 Perl_op_parent(OP *o)
1346 PERL_ARGS_ASSERT_OP_PARENT;
1347 #ifdef PERL_OP_PARENT
1348 while (OpHAS_SIBLING(o))
1350 return o->op_sibling;
1358 /* replace the sibling following start with a new UNOP, which becomes
1359 * the parent of the original sibling; e.g.
1361 * op_sibling_newUNOP(P, A, unop-args...)
1369 * where U is the new UNOP.
1371 * parent and start args are the same as for op_sibling_splice();
1372 * type and flags args are as newUNOP().
1374 * Returns the new UNOP.
1378 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1382 kid = op_sibling_splice(parent, start, 1, NULL);
1383 newop = newUNOP(type, flags, kid);
1384 op_sibling_splice(parent, start, 0, newop);
1389 /* lowest-level newLOGOP-style function - just allocates and populates
1390 * the struct. Higher-level stuff should be done by S_new_logop() /
1391 * newLOGOP(). This function exists mainly to avoid op_first assignment
1392 * being spread throughout this file.
1396 S_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1401 NewOp(1101, logop, 1, LOGOP);
1402 CHANGE_TYPE(logop, type);
1403 logop->op_first = first;
1404 logop->op_other = other;
1405 logop->op_flags = OPf_KIDS;
1406 while (kid && OpHAS_SIBLING(kid))
1407 kid = OpSIBLING(kid);
1409 kid->op_lastsib = 1;
1410 #ifdef PERL_OP_PARENT
1411 kid->op_sibling = (OP*)logop;
1418 /* Contextualizers */
1421 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1423 Applies a syntactic context to an op tree representing an expression.
1424 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
1425 or C<G_VOID> to specify the context to apply. The modified op tree
1432 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1434 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1436 case G_SCALAR: return scalar(o);
1437 case G_ARRAY: return list(o);
1438 case G_VOID: return scalarvoid(o);
1440 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1447 =for apidoc Am|OP*|op_linklist|OP *o
1448 This function is the implementation of the L</LINKLIST> macro. It should
1449 not be called directly.
1455 Perl_op_linklist(pTHX_ OP *o)
1459 PERL_ARGS_ASSERT_OP_LINKLIST;
1464 /* establish postfix order */
1465 first = cUNOPo->op_first;
1468 o->op_next = LINKLIST(first);
1471 OP *sibl = OpSIBLING(kid);
1473 kid->op_next = LINKLIST(sibl);
1488 S_scalarkids(pTHX_ OP *o)
1490 if (o && o->op_flags & OPf_KIDS) {
1492 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1499 S_scalarboolean(pTHX_ OP *o)
1501 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1503 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
1504 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
1505 if (ckWARN(WARN_SYNTAX)) {
1506 const line_t oldline = CopLINE(PL_curcop);
1508 if (PL_parser && PL_parser->copline != NOLINE) {
1509 /* This ensures that warnings are reported at the first line
1510 of the conditional, not the last. */
1511 CopLINE_set(PL_curcop, PL_parser->copline);
1513 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1514 CopLINE_set(PL_curcop, oldline);
1521 S_op_varname(pTHX_ const OP *o)
1524 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1525 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1527 const char funny = o->op_type == OP_PADAV
1528 || o->op_type == OP_RV2AV ? '@' : '%';
1529 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1531 if (cUNOPo->op_first->op_type != OP_GV
1532 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1534 return varname(gv, funny, 0, NULL, 0, 1);
1537 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, 1);
1542 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1543 { /* or not so pretty :-) */
1544 if (o->op_type == OP_CONST) {
1546 if (SvPOK(*retsv)) {
1548 *retsv = sv_newmortal();
1549 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1550 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1552 else if (!SvOK(*retsv))
1555 else *retpv = "...";
1559 S_scalar_slice_warning(pTHX_ const OP *o)
1563 o->op_type == OP_HSLICE ? '{' : '[';
1565 o->op_type == OP_HSLICE ? '}' : ']';
1567 SV *keysv = NULL; /* just to silence compiler warnings */
1568 const char *key = NULL;
1570 if (!(o->op_private & OPpSLICEWARNING))
1572 if (PL_parser && PL_parser->error_count)
1573 /* This warning can be nonsensical when there is a syntax error. */
1576 kid = cLISTOPo->op_first;
1577 kid = OpSIBLING(kid); /* get past pushmark */
1578 /* weed out false positives: any ops that can return lists */
1579 switch (kid->op_type) {
1608 /* Don't warn if we have a nulled list either. */
1609 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1612 assert(OpSIBLING(kid));
1613 name = S_op_varname(aTHX_ OpSIBLING(kid));
1614 if (!name) /* XS module fiddling with the op tree */
1616 S_op_pretty(aTHX_ kid, &keysv, &key);
1617 assert(SvPOK(name));
1618 sv_chop(name,SvPVX(name)+1);
1620 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1621 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1622 "Scalar value @%"SVf"%c%s%c better written as $%"SVf
1624 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1625 lbrack, key, rbrack);
1627 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1628 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1629 "Scalar value @%"SVf"%c%"SVf"%c better written as $%"
1631 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1632 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1636 Perl_scalar(pTHX_ OP *o)
1640 /* assumes no premature commitment */
1641 if (!o || (PL_parser && PL_parser->error_count)
1642 || (o->op_flags & OPf_WANT)
1643 || o->op_type == OP_RETURN)
1648 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1650 switch (o->op_type) {
1652 scalar(cBINOPo->op_first);
1653 if (o->op_private & OPpREPEAT_DOLIST) {
1654 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1655 assert(kid->op_type == OP_PUSHMARK);
1656 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1657 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1658 o->op_private &=~ OPpREPEAT_DOLIST;
1665 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
1675 if (o->op_flags & OPf_KIDS) {
1676 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
1682 kid = cLISTOPo->op_first;
1684 kid = OpSIBLING(kid);
1687 OP *sib = OpSIBLING(kid);
1688 if (sib && kid->op_type != OP_LEAVEWHEN
1689 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
1690 || ( sib->op_targ != OP_NEXTSTATE
1691 && sib->op_targ != OP_DBSTATE )))
1697 PL_curcop = &PL_compiling;
1702 kid = cLISTOPo->op_first;
1705 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1710 /* Warn about scalar context */
1711 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1712 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1715 const char *key = NULL;
1717 /* This warning can be nonsensical when there is a syntax error. */
1718 if (PL_parser && PL_parser->error_count)
1721 if (!ckWARN(WARN_SYNTAX)) break;
1723 kid = cLISTOPo->op_first;
1724 kid = OpSIBLING(kid); /* get past pushmark */
1725 assert(OpSIBLING(kid));
1726 name = S_op_varname(aTHX_ OpSIBLING(kid));
1727 if (!name) /* XS module fiddling with the op tree */
1729 S_op_pretty(aTHX_ kid, &keysv, &key);
1730 assert(SvPOK(name));
1731 sv_chop(name,SvPVX(name)+1);
1733 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1734 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1735 "%%%"SVf"%c%s%c in scalar context better written "
1737 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1738 lbrack, key, rbrack);
1740 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1741 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1742 "%%%"SVf"%c%"SVf"%c in scalar context better "
1743 "written as $%"SVf"%c%"SVf"%c",
1744 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1745 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1752 Perl_scalarvoid(pTHX_ OP *arg)
1758 SSize_t defer_stack_alloc = 0;
1759 SSize_t defer_ix = -1;
1760 OP **defer_stack = NULL;
1763 PERL_ARGS_ASSERT_SCALARVOID;
1766 SV *useless_sv = NULL;
1767 const char* useless = NULL;
1768 bool useless_is_grep = FALSE;
1770 if (o->op_type == OP_NEXTSTATE
1771 || o->op_type == OP_DBSTATE
1772 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1773 || o->op_targ == OP_DBSTATE)))
1774 PL_curcop = (COP*)o; /* for warning below */
1776 /* assumes no premature commitment */
1777 want = o->op_flags & OPf_WANT;
1778 if ((want && want != OPf_WANT_SCALAR)
1779 || (PL_parser && PL_parser->error_count)
1780 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1785 if ((o->op_private & OPpTARGET_MY)
1786 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1788 /* newASSIGNOP has already applied scalar context, which we
1789 leave, as if this op is inside SASSIGN. */
1793 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1795 switch (o->op_type) {
1797 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1801 if (o->op_flags & OPf_STACKED)
1803 if (o->op_type == OP_REPEAT)
1804 scalar(cBINOPo->op_first);
1807 if (o->op_private == 4)
1842 case OP_GETSOCKNAME:
1843 case OP_GETPEERNAME:
1848 case OP_GETPRIORITY:
1873 useless = OP_DESC(o);
1883 case OP_AELEMFAST_LEX:
1887 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1888 useless = OP_DESC(o);
1891 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO))) {
1892 /* Otherwise it's "Useless use of grep iterator" */
1894 useless_is_grep = TRUE;
1899 kid = cLISTOPo->op_first;
1900 if (kid && kid->op_type == OP_PUSHRE
1902 && !(o->op_flags & OPf_STACKED)
1904 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
1906 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
1909 useless = OP_DESC(o);
1913 kid = cUNOPo->op_first;
1914 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1915 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1918 useless = "negative pattern binding (!~)";
1922 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1923 useless = "non-destructive substitution (s///r)";
1927 useless = "non-destructive transliteration (tr///r)";
1934 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1935 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
1936 useless = "a variable";
1941 if (cSVOPo->op_private & OPpCONST_STRICT)
1942 no_bareword_allowed(o);
1944 if (ckWARN(WARN_VOID)) {
1946 /* don't warn on optimised away booleans, eg
1947 * use constant Foo, 5; Foo || print; */
1948 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1950 /* the constants 0 and 1 are permitted as they are
1951 conventionally used as dummies in constructs like
1952 1 while some_condition_with_side_effects; */
1953 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
1955 else if (SvPOK(sv)) {
1956 SV * const dsv = newSVpvs("");
1958 = Perl_newSVpvf(aTHX_
1960 pv_pretty(dsv, SvPVX_const(sv),
1961 SvCUR(sv), 32, NULL, NULL,
1963 | PERL_PV_ESCAPE_NOCLEAR
1964 | PERL_PV_ESCAPE_UNI_DETECT));
1965 SvREFCNT_dec_NN(dsv);
1967 else if (SvOK(sv)) {
1968 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%"SVf")", SVfARG(sv));
1971 useless = "a constant (undef)";
1974 op_null(o); /* don't execute or even remember it */
1978 CHANGE_TYPE(o, OP_PREINC); /* pre-increment is faster */
1982 CHANGE_TYPE(o, OP_PREDEC); /* pre-decrement is faster */
1986 CHANGE_TYPE(o, OP_I_PREINC); /* pre-increment is faster */
1990 CHANGE_TYPE(o, OP_I_PREDEC); /* pre-decrement is faster */
1995 UNOP *refgen, *rv2cv;
1998 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2001 rv2gv = ((BINOP *)o)->op_last;
2002 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2005 refgen = (UNOP *)((BINOP *)o)->op_first;
2007 if (!refgen || (refgen->op_type != OP_REFGEN
2008 && refgen->op_type != OP_SREFGEN))
2011 exlist = (LISTOP *)refgen->op_first;
2012 if (!exlist || exlist->op_type != OP_NULL
2013 || exlist->op_targ != OP_LIST)
2016 if (exlist->op_first->op_type != OP_PUSHMARK
2017 && exlist->op_first != exlist->op_last)
2020 rv2cv = (UNOP*)exlist->op_last;
2022 if (rv2cv->op_type != OP_RV2CV)
2025 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2026 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2027 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2029 o->op_private |= OPpASSIGN_CV_TO_GV;
2030 rv2gv->op_private |= OPpDONT_INIT_GV;
2031 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2043 kid = cLOGOPo->op_first;
2044 if (kid->op_type == OP_NOT
2045 && (kid->op_flags & OPf_KIDS)) {
2046 if (o->op_type == OP_AND) {
2047 CHANGE_TYPE(o, OP_OR);
2049 CHANGE_TYPE(o, OP_AND);
2059 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2060 if (!(kid->op_flags & OPf_KIDS))
2067 if (o->op_flags & OPf_STACKED)
2074 if (!(o->op_flags & OPf_KIDS))
2085 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2086 if (!(kid->op_flags & OPf_KIDS))
2092 /* If the first kid after pushmark is something that the padrange
2093 optimisation would reject, then null the list and the pushmark.
2095 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2096 && ( !(kid = OpSIBLING(kid))
2097 || ( kid->op_type != OP_PADSV
2098 && kid->op_type != OP_PADAV
2099 && kid->op_type != OP_PADHV)
2100 || kid->op_private & ~OPpLVAL_INTRO
2101 || !(kid = OpSIBLING(kid))
2102 || ( kid->op_type != OP_PADSV
2103 && kid->op_type != OP_PADAV
2104 && kid->op_type != OP_PADHV)
2105 || kid->op_private & ~OPpLVAL_INTRO)
2107 op_null(cUNOPo->op_first); /* NULL the pushmark */
2108 op_null(o); /* NULL the list */
2120 /* mortalise it, in case warnings are fatal. */
2121 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2122 "Useless use of %"SVf" in void context",
2123 SVfARG(sv_2mortal(useless_sv)));
2126 if (useless_is_grep) {
2127 Perl_ck_warner(aTHX_ packWARN(WARN_VOID_UNUSUAL),
2128 "Unusual use of %s in void context",
2131 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2132 "Useless use of %s in void context",
2136 } while ( (o = POP_DEFERRED_OP()) );
2138 Safefree(defer_stack);
2144 S_listkids(pTHX_ OP *o)
2146 if (o && o->op_flags & OPf_KIDS) {
2148 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2155 Perl_list(pTHX_ OP *o)
2159 /* assumes no premature commitment */
2160 if (!o || (o->op_flags & OPf_WANT)
2161 || (PL_parser && PL_parser->error_count)
2162 || o->op_type == OP_RETURN)
2167 if ((o->op_private & OPpTARGET_MY)
2168 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2170 return o; /* As if inside SASSIGN */
2173 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2175 switch (o->op_type) {
2177 list(cBINOPo->op_first);
2180 if (o->op_private & OPpREPEAT_DOLIST
2181 && !(o->op_flags & OPf_STACKED))
2183 list(cBINOPo->op_first);
2184 kid = cBINOPo->op_last;
2185 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2186 && SvIVX(kSVOP_sv) == 1)
2188 op_null(o); /* repeat */
2189 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2191 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2198 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2206 if (!(o->op_flags & OPf_KIDS))
2208 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2209 list(cBINOPo->op_first);
2210 return gen_constant_list(o);
2216 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2217 op_null(cUNOPo->op_first); /* NULL the pushmark */
2218 op_null(o); /* NULL the list */
2223 kid = cLISTOPo->op_first;
2225 kid = OpSIBLING(kid);
2228 OP *sib = OpSIBLING(kid);
2229 if (sib && kid->op_type != OP_LEAVEWHEN)
2235 PL_curcop = &PL_compiling;
2239 kid = cLISTOPo->op_first;
2246 S_scalarseq(pTHX_ OP *o)
2249 const OPCODE type = o->op_type;
2251 if (type == OP_LINESEQ || type == OP_SCOPE ||
2252 type == OP_LEAVE || type == OP_LEAVETRY)
2255 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2256 if ((sib = OpSIBLING(kid))
2257 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2258 || ( sib->op_targ != OP_NEXTSTATE
2259 && sib->op_targ != OP_DBSTATE )))
2264 PL_curcop = &PL_compiling;
2266 o->op_flags &= ~OPf_PARENS;
2267 if (PL_hints & HINT_BLOCK_SCOPE)
2268 o->op_flags |= OPf_PARENS;
2271 o = newOP(OP_STUB, 0);
2276 S_modkids(pTHX_ OP *o, I32 type)
2278 if (o && o->op_flags & OPf_KIDS) {
2280 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2281 op_lvalue(kid, type);
2287 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2288 * const fields. Also, convert CONST keys to HEK-in-SVs.
2289 * rop is the op that retrieves the hash;
2290 * key_op is the first key
2294 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op)
2300 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2302 if (rop->op_first->op_type == OP_PADSV)
2303 /* @$hash{qw(keys here)} */
2304 rop = (UNOP*)rop->op_first;
2306 /* @{$hash}{qw(keys here)} */
2307 if (rop->op_first->op_type == OP_SCOPE
2308 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2310 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2317 lexname = NULL; /* just to silence compiler warnings */
2318 fields = NULL; /* just to silence compiler warnings */
2322 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2323 SvPAD_TYPED(lexname))
2324 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2325 && isGV(*fields) && GvHV(*fields);
2327 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2329 if (key_op->op_type != OP_CONST)
2331 svp = cSVOPx_svp(key_op);
2333 /* Make the CONST have a shared SV */
2334 if ( !SvIsCOW_shared_hash(sv = *svp)
2335 && SvTYPE(sv) < SVt_PVMG
2340 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2341 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2342 SvREFCNT_dec_NN(sv);
2347 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2349 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
2350 "in variable %"PNf" of type %"HEKf,
2351 SVfARG(*svp), PNfARG(lexname),
2352 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2359 =for apidoc finalize_optree
2361 This function finalizes the optree. Should be called directly after
2362 the complete optree is built. It does some additional
2363 checking which can't be done in the normal ck_xxx functions and makes
2364 the tree thread-safe.
2369 Perl_finalize_optree(pTHX_ OP* o)
2371 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
2374 SAVEVPTR(PL_curcop);
2382 /* Relocate sv to the pad for thread safety.
2383 * Despite being a "constant", the SV is written to,
2384 * for reference counts, sv_upgrade() etc. */
2385 PERL_STATIC_INLINE void
2386 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
2389 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
2391 ix = pad_alloc(OP_CONST, SVf_READONLY);
2392 SvREFCNT_dec(PAD_SVl(ix));
2393 PAD_SETSV(ix, *svp);
2394 /* XXX I don't know how this isn't readonly already. */
2395 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
2403 S_finalize_op(pTHX_ OP* o)
2405 PERL_ARGS_ASSERT_FINALIZE_OP;
2408 switch (o->op_type) {
2411 PL_curcop = ((COP*)o); /* for warnings */
2414 if (OpHAS_SIBLING(o)) {
2415 OP *sib = OpSIBLING(o);
2416 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
2417 && ckWARN(WARN_EXEC)
2418 && OpHAS_SIBLING(sib))
2420 const OPCODE type = OpSIBLING(sib)->op_type;
2421 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
2422 const line_t oldline = CopLINE(PL_curcop);
2423 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
2424 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2425 "Statement unlikely to be reached");
2426 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2427 "\t(Maybe you meant system() when you said exec()?)\n");
2428 CopLINE_set(PL_curcop, oldline);
2435 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
2436 GV * const gv = cGVOPo_gv;
2437 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
2438 /* XXX could check prototype here instead of just carping */
2439 SV * const sv = sv_newmortal();
2440 gv_efullname3(sv, gv, NULL);
2441 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
2442 "%"SVf"() called too early to check prototype",
2449 if (cSVOPo->op_private & OPpCONST_STRICT)
2450 no_bareword_allowed(o);
2454 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
2459 /* Relocate all the METHOP's SVs to the pad for thread safety. */
2460 case OP_METHOD_NAMED:
2461 case OP_METHOD_SUPER:
2462 case OP_METHOD_REDIR:
2463 case OP_METHOD_REDIR_SUPER:
2464 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
2473 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
2476 rop = (UNOP*)((BINOP*)o)->op_first;
2481 S_scalar_slice_warning(aTHX_ o);
2485 kid = OpSIBLING(cLISTOPo->op_first);
2486 if (/* I bet there's always a pushmark... */
2487 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
2488 && OP_TYPE_ISNT_NN(kid, OP_CONST))
2493 key_op = (SVOP*)(kid->op_type == OP_CONST
2495 : OpSIBLING(kLISTOP->op_first));
2497 rop = (UNOP*)((LISTOP*)o)->op_last;
2500 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
2502 S_check_hash_fields_and_hekify(aTHX_ rop, key_op);
2506 S_scalar_slice_warning(aTHX_ o);
2510 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
2511 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
2518 if (o->op_flags & OPf_KIDS) {
2522 /* check that op_last points to the last sibling, and that
2523 * the last op_sibling field points back to the parent, and
2524 * that the only ops with KIDS are those which are entitled to
2526 U32 type = o->op_type;
2530 if (type == OP_NULL) {
2532 /* ck_glob creates a null UNOP with ex-type GLOB
2533 * (which is a list op. So pretend it wasn't a listop */
2534 if (type == OP_GLOB)
2537 family = PL_opargs[type] & OA_CLASS_MASK;
2539 has_last = ( family == OA_BINOP
2540 || family == OA_LISTOP
2541 || family == OA_PMOP
2542 || family == OA_LOOP
2544 assert( has_last /* has op_first and op_last, or ...
2545 ... has (or may have) op_first: */
2546 || family == OA_UNOP
2547 || family == OA_UNOP_AUX
2548 || family == OA_LOGOP
2549 || family == OA_BASEOP_OR_UNOP
2550 || family == OA_FILESTATOP
2551 || family == OA_LOOPEXOP
2552 || family == OA_METHOP
2553 /* I don't know why SASSIGN is tagged as OA_BASEOP - DAPM */
2554 || type == OP_SASSIGN
2555 || type == OP_CUSTOM
2556 || type == OP_NULL /* new_logop does this */
2559 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2560 # ifdef PERL_OP_PARENT
2561 if (!OpHAS_SIBLING(kid)) {
2563 assert(kid == cLISTOPo->op_last);
2564 assert(kid->op_sibling == o);
2567 if (OpHAS_SIBLING(kid)) {
2568 assert(!kid->op_lastsib);
2571 assert(kid->op_lastsib);
2573 assert(kid == cLISTOPo->op_last);
2579 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
2585 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
2587 Propagate lvalue ("modifiable") context to an op and its children.
2588 I<type> represents the context type, roughly based on the type of op that
2589 would do the modifying, although C<local()> is represented by OP_NULL,
2590 because it has no op type of its own (it is signalled by a flag on
2593 This function detects things that can't be modified, such as C<$x+1>, and
2594 generates errors for them. For example, C<$x+1 = 2> would cause it to be
2595 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
2597 It also flags things that need to behave specially in an lvalue context,
2598 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
2604 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
2607 PadnameLVALUE_on(pn);
2608 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
2611 assert(CvPADLIST(cv));
2613 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
2614 assert(PadnameLEN(pn));
2615 PadnameLVALUE_on(pn);
2620 S_vivifies(const OPCODE type)
2623 case OP_RV2AV: case OP_ASLICE:
2624 case OP_RV2HV: case OP_KVASLICE:
2625 case OP_RV2SV: case OP_HSLICE:
2626 case OP_AELEMFAST: case OP_KVHSLICE:
2635 S_lvref(pTHX_ OP *o, I32 type)
2639 switch (o->op_type) {
2641 for (kid = OpSIBLING(cUNOPo->op_first); kid;
2642 kid = OpSIBLING(kid))
2643 S_lvref(aTHX_ kid, type);
2648 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2649 o->op_flags |= OPf_STACKED;
2650 if (o->op_flags & OPf_PARENS) {
2651 if (o->op_private & OPpLVAL_INTRO) {
2652 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2653 "localized parenthesized array in list assignment"));
2657 CHANGE_TYPE(o, OP_LVAVREF);
2658 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
2659 o->op_flags |= OPf_MOD|OPf_REF;
2662 o->op_private |= OPpLVREF_AV;
2665 kid = cUNOPo->op_first;
2666 if (kid->op_type == OP_NULL)
2667 kid = cUNOPx(kUNOP->op_first->op_sibling)
2669 o->op_private = OPpLVREF_CV;
2670 if (kid->op_type == OP_GV)
2671 o->op_flags |= OPf_STACKED;
2672 else if (kid->op_type == OP_PADCV) {
2673 o->op_targ = kid->op_targ;
2675 op_free(cUNOPo->op_first);
2676 cUNOPo->op_first = NULL;
2677 o->op_flags &=~ OPf_KIDS;
2682 if (o->op_flags & OPf_PARENS) {
2684 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2685 "parenthesized hash in list assignment"));
2688 o->op_private |= OPpLVREF_HV;
2692 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2693 o->op_flags |= OPf_STACKED;
2696 if (o->op_flags & OPf_PARENS) goto parenhash;
2697 o->op_private |= OPpLVREF_HV;
2700 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2703 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2704 if (o->op_flags & OPf_PARENS) goto slurpy;
2705 o->op_private |= OPpLVREF_AV;
2709 o->op_private |= OPpLVREF_ELEM;
2710 o->op_flags |= OPf_STACKED;
2714 CHANGE_TYPE(o, OP_LVREFSLICE);
2715 o->op_private &= OPpLVAL_INTRO|OPpLVREF_ELEM;
2718 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2720 else if (!(o->op_flags & OPf_KIDS))
2722 if (o->op_targ != OP_LIST) {
2723 S_lvref(aTHX_ cBINOPo->op_first, type);
2728 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) {
2729 assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
2730 S_lvref(aTHX_ kid, type);
2734 if (o->op_flags & OPf_PARENS)
2739 /* diag_listed_as: Can't modify reference to %s in %s assignment */
2740 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
2741 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
2747 CHANGE_TYPE(o, OP_LVREF);
2749 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
2750 if (type == OP_ENTERLOOP)
2751 o->op_private |= OPpLVREF_ITER;
2755 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
2759 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
2762 if (!o || (PL_parser && PL_parser->error_count))
2765 if ((o->op_private & OPpTARGET_MY)
2766 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2771 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
2773 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
2775 switch (o->op_type) {
2780 if ((o->op_flags & OPf_PARENS))
2784 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
2785 !(o->op_flags & OPf_STACKED)) {
2786 CHANGE_TYPE(o, OP_RV2CV); /* entersub => rv2cv */
2787 assert(cUNOPo->op_first->op_type == OP_NULL);
2788 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
2791 else { /* lvalue subroutine call */
2792 o->op_private |= OPpLVAL_INTRO;
2793 PL_modcount = RETURN_UNLIMITED_NUMBER;
2794 if (type == OP_GREPSTART || type == OP_ENTERSUB
2795 || type == OP_REFGEN || type == OP_LEAVESUBLV) {
2796 /* Potential lvalue context: */
2797 o->op_private |= OPpENTERSUB_INARGS;
2800 else { /* Compile-time error message: */
2801 OP *kid = cUNOPo->op_first;
2805 if (kid->op_type != OP_PUSHMARK) {
2806 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
2808 "panic: unexpected lvalue entersub "
2809 "args: type/targ %ld:%"UVuf,
2810 (long)kid->op_type, (UV)kid->op_targ);
2811 kid = kLISTOP->op_first;
2813 while (OpHAS_SIBLING(kid))
2814 kid = OpSIBLING(kid);
2815 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
2816 break; /* Postpone until runtime */
2819 kid = kUNOP->op_first;
2820 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
2821 kid = kUNOP->op_first;
2822 if (kid->op_type == OP_NULL)
2824 "Unexpected constant lvalue entersub "
2825 "entry via type/targ %ld:%"UVuf,
2826 (long)kid->op_type, (UV)kid->op_targ);
2827 if (kid->op_type != OP_GV) {
2834 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
2835 ? MUTABLE_CV(SvRV(gv))
2846 if (flags & OP_LVALUE_NO_CROAK) return NULL;
2847 /* grep, foreach, subcalls, refgen */
2848 if (type == OP_GREPSTART || type == OP_ENTERSUB
2849 || type == OP_REFGEN || type == OP_LEAVESUBLV)
2851 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2852 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
2854 : (o->op_type == OP_ENTERSUB
2855 ? "non-lvalue subroutine call"
2857 type ? PL_op_desc[type] : "local"));
2870 case OP_RIGHT_SHIFT:
2879 if (!(o->op_flags & OPf_STACKED))
2885 if (o->op_flags & OPf_STACKED) {
2889 if (!(o->op_private & OPpREPEAT_DOLIST))
2892 const I32 mods = PL_modcount;
2893 modkids(cBINOPo->op_first, type);
2894 if (type != OP_AASSIGN)
2896 kid = cBINOPo->op_last;
2897 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
2898 const IV iv = SvIV(kSVOP_sv);
2899 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
2901 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
2904 PL_modcount = RETURN_UNLIMITED_NUMBER;
2910 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2911 op_lvalue(kid, type);
2916 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
2917 PL_modcount = RETURN_UNLIMITED_NUMBER;
2918 return o; /* Treat \(@foo) like ordinary list. */
2922 if (scalar_mod_type(o, type))
2924 ref(cUNOPo->op_first, o->op_type);
2931 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
2932 if (type == OP_LEAVESUBLV && (
2933 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
2934 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2936 o->op_private |= OPpMAYBE_LVSUB;
2940 PL_modcount = RETURN_UNLIMITED_NUMBER;
2944 if (type == OP_LEAVESUBLV)
2945 o->op_private |= OPpMAYBE_LVSUB;
2948 PL_hints |= HINT_BLOCK_SCOPE;
2949 if (type == OP_LEAVESUBLV)
2950 o->op_private |= OPpMAYBE_LVSUB;
2954 ref(cUNOPo->op_first, o->op_type);
2958 PL_hints |= HINT_BLOCK_SCOPE;
2968 case OP_AELEMFAST_LEX:
2975 PL_modcount = RETURN_UNLIMITED_NUMBER;
2976 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
2977 return o; /* Treat \(@foo) like ordinary list. */
2978 if (scalar_mod_type(o, type))
2980 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2981 && type == OP_LEAVESUBLV)
2982 o->op_private |= OPpMAYBE_LVSUB;
2986 if (!type) /* local() */
2987 Perl_croak(aTHX_ "Can't localize lexical variable %"PNf,
2988 PNfARG(PAD_COMPNAME(o->op_targ)));
2989 if (!(o->op_private & OPpLVAL_INTRO)
2990 || ( type != OP_SASSIGN && type != OP_AASSIGN
2991 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
2992 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
3001 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
3005 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
3011 if (type == OP_LEAVESUBLV)
3012 o->op_private |= OPpMAYBE_LVSUB;
3013 if (o->op_flags & OPf_KIDS)
3014 op_lvalue(OpSIBLING(cBINOPo->op_first), type);
3019 ref(cBINOPo->op_first, o->op_type);
3020 if (type == OP_ENTERSUB &&
3021 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
3022 o->op_private |= OPpLVAL_DEFER;
3023 if (type == OP_LEAVESUBLV)
3024 o->op_private |= OPpMAYBE_LVSUB;
3031 o->op_private |= OPpLVALUE;
3037 if (o->op_flags & OPf_KIDS)
3038 op_lvalue(cLISTOPo->op_last, type);
3043 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
3045 else if (!(o->op_flags & OPf_KIDS))
3047 if (o->op_targ != OP_LIST) {
3048 op_lvalue(cBINOPo->op_first, type);
3054 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3055 /* elements might be in void context because the list is
3056 in scalar context or because they are attribute sub calls */
3057 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
3058 op_lvalue(kid, type);
3066 if (type == OP_LEAVESUBLV
3067 || !S_vivifies(cLOGOPo->op_first->op_type))
3068 op_lvalue(cLOGOPo->op_first, type);
3069 if (type == OP_LEAVESUBLV
3070 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
3071 op_lvalue(OpSIBLING(cLOGOPo->op_first), type);
3075 if (type != OP_AASSIGN && type != OP_SASSIGN
3076 && type != OP_ENTERLOOP)
3078 /* Don’t bother applying lvalue context to the ex-list. */
3079 kid = cUNOPx(cUNOPo->op_first)->op_first;
3080 assert (!OpHAS_SIBLING(kid));
3083 if (type != OP_AASSIGN) goto nomod;
3084 kid = cUNOPo->op_first;
3087 const U8 ec = PL_parser ? PL_parser->error_count : 0;
3088 S_lvref(aTHX_ kid, type);
3089 if (!PL_parser || PL_parser->error_count == ec) {
3090 if (!FEATURE_REFALIASING_IS_ENABLED)
3092 "Experimental aliasing via reference not enabled");
3093 Perl_ck_warner_d(aTHX_
3094 packWARN(WARN_EXPERIMENTAL__REFALIASING),
3095 "Aliasing via reference is experimental");
3098 if (o->op_type == OP_REFGEN)
3099 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
3104 kid = cLISTOPo->op_first;
3105 if (kid && kid->op_type == OP_PUSHRE &&
3107 || o->op_flags & OPf_STACKED
3109 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
3111 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
3114 /* This is actually @array = split. */
3115 PL_modcount = RETURN_UNLIMITED_NUMBER;
3121 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
3125 /* [20011101.069] File test operators interpret OPf_REF to mean that
3126 their argument is a filehandle; thus \stat(".") should not set
3128 if (type == OP_REFGEN &&
3129 PL_check[o->op_type] == Perl_ck_ftst)
3132 if (type != OP_LEAVESUBLV)
3133 o->op_flags |= OPf_MOD;
3135 if (type == OP_AASSIGN || type == OP_SASSIGN)
3136 o->op_flags |= OPf_SPECIAL|OPf_REF;
3137 else if (!type) { /* local() */
3140 o->op_private |= OPpLVAL_INTRO;
3141 o->op_flags &= ~OPf_SPECIAL;
3142 PL_hints |= HINT_BLOCK_SCOPE;
3147 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
3148 "Useless localization of %s", OP_DESC(o));
3151 else if (type != OP_GREPSTART && type != OP_ENTERSUB
3152 && type != OP_LEAVESUBLV)
3153 o->op_flags |= OPf_REF;
3158 S_scalar_mod_type(const OP *o, I32 type)
3163 if (o && o->op_type == OP_RV2GV)
3187 case OP_RIGHT_SHIFT:
3208 S_is_handle_constructor(const OP *o, I32 numargs)
3210 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
3212 switch (o->op_type) {
3220 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
3233 S_refkids(pTHX_ OP *o, I32 type)
3235 if (o && o->op_flags & OPf_KIDS) {
3237 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3244 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
3249 PERL_ARGS_ASSERT_DOREF;
3251 if (!o || (PL_parser && PL_parser->error_count))
3254 switch (o->op_type) {
3256 if ((type == OP_EXISTS || type == OP_DEFINED) &&
3257 !(o->op_flags & OPf_STACKED)) {
3258 CHANGE_TYPE(o, OP_RV2CV); /* entersub => rv2cv */
3259 assert(cUNOPo->op_first->op_type == OP_NULL);
3260 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
3261 o->op_flags |= OPf_SPECIAL;
3263 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
3264 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3265 : type == OP_RV2HV ? OPpDEREF_HV
3267 o->op_flags |= OPf_MOD;
3273 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
3274 doref(kid, type, set_op_ref);
3277 if (type == OP_DEFINED)
3278 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3279 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3282 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3283 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3284 : type == OP_RV2HV ? OPpDEREF_HV
3286 o->op_flags |= OPf_MOD;
3293 o->op_flags |= OPf_REF;
3296 if (type == OP_DEFINED)
3297 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3298 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3304 o->op_flags |= OPf_REF;
3309 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
3311 doref(cBINOPo->op_first, type, set_op_ref);
3315 doref(cBINOPo->op_first, o->op_type, set_op_ref);
3316 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3317 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3318 : type == OP_RV2HV ? OPpDEREF_HV
3320 o->op_flags |= OPf_MOD;
3330 if (!(o->op_flags & OPf_KIDS))
3332 doref(cLISTOPo->op_last, type, set_op_ref);
3342 S_dup_attrlist(pTHX_ OP *o)
3346 PERL_ARGS_ASSERT_DUP_ATTRLIST;
3348 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
3349 * where the first kid is OP_PUSHMARK and the remaining ones
3350 * are OP_CONST. We need to push the OP_CONST values.
3352 if (o->op_type == OP_CONST)
3353 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
3355 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
3357 for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) {
3358 if (o->op_type == OP_CONST)
3359 rop = op_append_elem(OP_LIST, rop,
3360 newSVOP(OP_CONST, o->op_flags,
3361 SvREFCNT_inc_NN(cSVOPo->op_sv)));
3368 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
3370 SV * const stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
3372 PERL_ARGS_ASSERT_APPLY_ATTRS;
3374 /* fake up C<use attributes $pkg,$rv,@attrs> */
3376 #define ATTRSMODULE "attributes"
3377 #define ATTRSMODULE_PM "attributes.pm"
3379 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3380 newSVpvs(ATTRSMODULE),
3382 op_prepend_elem(OP_LIST,
3383 newSVOP(OP_CONST, 0, stashsv),
3384 op_prepend_elem(OP_LIST,
3385 newSVOP(OP_CONST, 0,
3387 dup_attrlist(attrs))));
3391 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
3393 OP *pack, *imop, *arg;
3394 SV *meth, *stashsv, **svp;
3396 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
3401 assert(target->op_type == OP_PADSV ||
3402 target->op_type == OP_PADHV ||
3403 target->op_type == OP_PADAV);
3405 /* Ensure that attributes.pm is loaded. */
3406 /* Don't force the C<use> if we don't need it. */
3407 svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
3408 if (svp && *svp != &PL_sv_undef)
3409 NOOP; /* already in %INC */
3411 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
3412 newSVpvs(ATTRSMODULE), NULL);
3414 /* Need package name for method call. */
3415 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
3417 /* Build up the real arg-list. */
3418 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
3420 arg = newOP(OP_PADSV, 0);
3421 arg->op_targ = target->op_targ;
3422 arg = op_prepend_elem(OP_LIST,
3423 newSVOP(OP_CONST, 0, stashsv),
3424 op_prepend_elem(OP_LIST,
3425 newUNOP(OP_REFGEN, 0,
3426 op_lvalue(arg, OP_REFGEN)),
3427 dup_attrlist(attrs)));
3429 /* Fake up a method call to import */
3430 meth = newSVpvs_share("import");
3431 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
3432 op_append_elem(OP_LIST,
3433 op_prepend_elem(OP_LIST, pack, arg),
3434 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
3436 /* Combine the ops. */
3437 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
3441 =notfor apidoc apply_attrs_string
3443 Attempts to apply a list of attributes specified by the C<attrstr> and
3444 C<len> arguments to the subroutine identified by the C<cv> argument which
3445 is expected to be associated with the package identified by the C<stashpv>
3446 argument (see L<attributes>). It gets this wrong, though, in that it
3447 does not correctly identify the boundaries of the individual attribute
3448 specifications within C<attrstr>. This is not really intended for the
3449 public API, but has to be listed here for systems such as AIX which
3450 need an explicit export list for symbols. (It's called from XS code
3451 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
3452 to respect attribute syntax properly would be welcome.
3458 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
3459 const char *attrstr, STRLEN len)
3463 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
3466 len = strlen(attrstr);
3470 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
3472 const char * const sstr = attrstr;
3473 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
3474 attrs = op_append_elem(OP_LIST, attrs,
3475 newSVOP(OP_CONST, 0,
3476 newSVpvn(sstr, attrstr-sstr)));
3480 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3481 newSVpvs(ATTRSMODULE),
3482 NULL, op_prepend_elem(OP_LIST,
3483 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
3484 op_prepend_elem(OP_LIST,
3485 newSVOP(OP_CONST, 0,
3486 newRV(MUTABLE_SV(cv))),
3491 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name)
3493 OP *new_proto = NULL;
3498 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
3504 if (o->op_type == OP_CONST) {
3505 pv = SvPV(cSVOPo_sv, pvlen);
3506 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3507 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3508 SV ** const tmpo = cSVOPx_svp(o);
3509 SvREFCNT_dec(cSVOPo_sv);
3514 } else if (o->op_type == OP_LIST) {
3516 assert(o->op_flags & OPf_KIDS);
3517 lasto = cLISTOPo->op_first;
3518 assert(lasto->op_type == OP_PUSHMARK);
3519 for (o = OpSIBLING(lasto); o; o = OpSIBLING(o)) {
3520 if (o->op_type == OP_CONST) {
3521 pv = SvPV(cSVOPo_sv, pvlen);
3522 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3523 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3524 SV ** const tmpo = cSVOPx_svp(o);
3525 SvREFCNT_dec(cSVOPo_sv);
3527 if (new_proto && ckWARN(WARN_MISC)) {
3529 const char * newp = SvPV(cSVOPo_sv, new_len);
3530 Perl_warner(aTHX_ packWARN(WARN_MISC),
3531 "Attribute prototype(%"UTF8f") discards earlier prototype attribute in same sub",
3532 UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
3538 /* excise new_proto from the list */
3539 op_sibling_splice(*attrs, lasto, 1, NULL);
3546 /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
3547 would get pulled in with no real need */
3548 if (!OpHAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
3557 svname = sv_newmortal();
3558 gv_efullname3(svname, name, NULL);
3560 else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
3561 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
3563 svname = (SV *)name;
3564 if (ckWARN(WARN_ILLEGALPROTO))
3565 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE);
3566 if (*proto && ckWARN(WARN_PROTOTYPE)) {
3567 STRLEN old_len, new_len;
3568 const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
3569 const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
3571 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3572 "Prototype '%"UTF8f"' overridden by attribute 'prototype(%"UTF8f")'"
3574 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
3575 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
3585 S_cant_declare(pTHX_ OP *o)
3587 if (o->op_type == OP_NULL
3588 && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
3589 o = cUNOPo->op_first;
3590 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
3591 o->op_type == OP_NULL
3592 && o->op_flags & OPf_SPECIAL
3595 PL_parser->in_my == KEY_our ? "our" :
3596 PL_parser->in_my == KEY_state ? "state" :
3601 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
3604 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
3606 PERL_ARGS_ASSERT_MY_KID;
3608 if (!o || (PL_parser && PL_parser->error_count))
3613 if (type == OP_LIST) {
3615 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3616 my_kid(kid, attrs, imopsp);
3618 } else if (type == OP_UNDEF || type == OP_STUB) {
3620 } else if (type == OP_RV2SV || /* "our" declaration */
3622 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
3623 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
3624 S_cant_declare(aTHX_ o);
3626 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
3628 PL_parser->in_my = FALSE;
3629 PL_parser->in_my_stash = NULL;
3630 apply_attrs(GvSTASH(gv),
3631 (type == OP_RV2SV ? GvSV(gv) :
3632 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
3633 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
3636 o->op_private |= OPpOUR_INTRO;
3639 else if (type != OP_PADSV &&
3642 type != OP_PUSHMARK)
3644 S_cant_declare(aTHX_ o);
3647 else if (attrs && type != OP_PUSHMARK) {
3651 PL_parser->in_my = FALSE;
3652 PL_parser->in_my_stash = NULL;
3654 /* check for C<my Dog $spot> when deciding package */
3655 stash = PAD_COMPNAME_TYPE(o->op_targ);
3657 stash = PL_curstash;
3658 apply_attrs_my(stash, o, attrs, imopsp);
3660 o->op_flags |= OPf_MOD;
3661 o->op_private |= OPpLVAL_INTRO;
3663 o->op_private |= OPpPAD_STATE;
3668 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
3671 int maybe_scalar = 0;
3673 PERL_ARGS_ASSERT_MY_ATTRS;
3675 /* [perl #17376]: this appears to be premature, and results in code such as
3676 C< our(%x); > executing in list mode rather than void mode */
3678 if (o->op_flags & OPf_PARENS)
3688 o = my_kid(o, attrs, &rops);
3690 if (maybe_scalar && o->op_type == OP_PADSV) {
3691 o = scalar(op_append_list(OP_LIST, rops, o));
3692 o->op_private |= OPpLVAL_INTRO;
3695 /* The listop in rops might have a pushmark at the beginning,
3696 which will mess up list assignment. */
3697 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
3698 if (rops->op_type == OP_LIST &&
3699 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
3701 OP * const pushmark = lrops->op_first;
3702 /* excise pushmark */
3703 op_sibling_splice(rops, NULL, 1, NULL);
3706 o = op_append_list(OP_LIST, o, rops);
3709 PL_parser->in_my = FALSE;
3710 PL_parser->in_my_stash = NULL;
3715 Perl_sawparens(pTHX_ OP *o)
3717 PERL_UNUSED_CONTEXT;
3719 o->op_flags |= OPf_PARENS;
3724 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
3728 const OPCODE ltype = left->op_type;
3729 const OPCODE rtype = right->op_type;
3731 PERL_ARGS_ASSERT_BIND_MATCH;
3733 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
3734 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
3736 const char * const desc
3738 rtype == OP_SUBST || rtype == OP_TRANS
3739 || rtype == OP_TRANSR
3741 ? (int)rtype : OP_MATCH];
3742 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
3744 S_op_varname(aTHX_ left);
3746 Perl_warner(aTHX_ packWARN(WARN_MISC),
3747 "Applying %s to %"SVf" will act on scalar(%"SVf")",
3748 desc, SVfARG(name), SVfARG(name));
3750 const char * const sample = (isary
3751 ? "@array" : "%hash");
3752 Perl_warner(aTHX_ packWARN(WARN_MISC),
3753 "Applying %s to %s will act on scalar(%s)",
3754 desc, sample, sample);
3758 if (rtype == OP_CONST &&
3759 cSVOPx(right)->op_private & OPpCONST_BARE &&
3760 cSVOPx(right)->op_private & OPpCONST_STRICT)
3762 no_bareword_allowed(right);
3765 /* !~ doesn't make sense with /r, so error on it for now */
3766 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
3768 /* diag_listed_as: Using !~ with %s doesn't make sense */
3769 yyerror("Using !~ with s///r doesn't make sense");
3770 if (rtype == OP_TRANSR && type == OP_NOT)
3771 /* diag_listed_as: Using !~ with %s doesn't make sense */
3772 yyerror("Using !~ with tr///r doesn't make sense");
3774 ismatchop = (rtype == OP_MATCH ||
3775 rtype == OP_SUBST ||
3776 rtype == OP_TRANS || rtype == OP_TRANSR)
3777 && !(right->op_flags & OPf_SPECIAL);
3778 if (ismatchop && right->op_private & OPpTARGET_MY) {
3780 right->op_private &= ~OPpTARGET_MY;
3782 if (!(right->op_flags & OPf_STACKED) && !right->op_targ && ismatchop) {
3783 if (left->op_type == OP_PADSV
3784 && !(left->op_private & OPpLVAL_INTRO))
3786 right->op_targ = left->op_targ;
3791 right->op_flags |= OPf_STACKED;
3792 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
3793 ! (rtype == OP_TRANS &&
3794 right->op_private & OPpTRANS_IDENTICAL) &&
3795 ! (rtype == OP_SUBST &&
3796 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
3797 left = op_lvalue(left, rtype);
3798 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
3799 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
3801 o = op_prepend_elem(rtype, scalar(left), right);
3804 return newUNOP(OP_NOT, 0, scalar(o));
3808 return bind_match(type, left,
3809 pmruntime(newPMOP(OP_MATCH, 0), right, NULL, 0, 0));
3813 Perl_invert(pTHX_ OP *o)
3817 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
3821 =for apidoc Amx|OP *|op_scope|OP *o
3823 Wraps up an op tree with some additional ops so that at runtime a dynamic
3824 scope will be created. The original ops run in the new dynamic scope,
3825 and then, provided that they exit normally, the scope will be unwound.
3826 The additional ops used to create and unwind the dynamic scope will
3827 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
3828 instead if the ops are simple enough to not need the full dynamic scope
3835 Perl_op_scope(pTHX_ OP *o)
3839 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
3840 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
3841 CHANGE_TYPE(o, OP_LEAVE);
3843 else if (o->op_type == OP_LINESEQ) {
3845 CHANGE_TYPE(o, OP_SCOPE);
3846 kid = ((LISTOP*)o)->op_first;
3847 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
3850 /* The following deals with things like 'do {1 for 1}' */
3851 kid = OpSIBLING(kid);
3853 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
3858 o = newLISTOP(OP_SCOPE, 0, o, NULL);
3864 Perl_op_unscope(pTHX_ OP *o)
3866 if (o && o->op_type == OP_LINESEQ) {
3867 OP *kid = cLISTOPo->op_first;
3868 for(; kid; kid = OpSIBLING(kid))
3869 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
3876 =for apidoc Am|int|block_start|int full
3878 Handles compile-time scope entry.
3879 Arranges for hints to be restored on block
3880 exit and also handles pad sequence numbers to make lexical variables scope
3881 right. Returns a savestack index for use with C<block_end>.
3887 Perl_block_start(pTHX_ int full)
3889 const int retval = PL_savestack_ix;
3891 PL_compiling.cop_seq = PL_cop_seqmax;
3893 pad_block_start(full);
3895 PL_hints &= ~HINT_BLOCK_SCOPE;
3896 SAVECOMPILEWARNINGS();
3897 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
3898 SAVEI32(PL_compiling.cop_seq);
3899 PL_compiling.cop_seq = 0;
3901 CALL_BLOCK_HOOKS(bhk_start, full);
3907 =for apidoc Am|OP *|block_end|I32 floor|OP *seq
3909 Handles compile-time scope exit. I<floor>
3910 is the savestack index returned by
3911 C<block_start>, and I<seq> is the body of the block. Returns the block,
3918 Perl_block_end(pTHX_ I32 floor, OP *seq)
3920 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
3921 OP* retval = scalarseq(seq);
3924 /* XXX Is the null PL_parser check necessary here? */
3925 assert(PL_parser); /* Let’s find out under debugging builds. */
3926 if (PL_parser && PL_parser->parsed_sub) {
3927 o = newSTATEOP(0, NULL, NULL);
3929 retval = op_append_elem(OP_LINESEQ, retval, o);
3932 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
3936 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
3940 /* pad_leavemy has created a sequence of introcv ops for all my
3941 subs declared in the block. We have to replicate that list with
3942 clonecv ops, to deal with this situation:
3947 sub s1 { state sub foo { \&s2 } }
3950 Originally, I was going to have introcv clone the CV and turn
3951 off the stale flag. Since &s1 is declared before &s2, the
3952 introcv op for &s1 is executed (on sub entry) before the one for
3953 &s2. But the &foo sub inside &s1 (which is cloned when &s1 is
3954 cloned, since it is a state sub) closes over &s2 and expects
3955 to see it in its outer CV’s pad. If the introcv op clones &s1,
3956 then &s2 is still marked stale. Since &s1 is not active, and
3957 &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia-
3958 ble will not stay shared’ warning. Because it is the same stub
3959 that will be used when the introcv op for &s2 is executed, clos-
3960 ing over it is safe. Hence, we have to turn off the stale flag
3961 on all lexical subs in the block before we clone any of them.
3962 Hence, having introcv clone the sub cannot work. So we create a
3963 list of ops like this:
3987 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
3988 OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
3989 for (;; kid = OpSIBLING(kid)) {
3990 OP *newkid = newOP(OP_CLONECV, 0);
3991 newkid->op_targ = kid->op_targ;
3992 o = op_append_elem(OP_LINESEQ, o, newkid);
3993 if (kid == last) break;
3995 retval = op_prepend_elem(OP_LINESEQ, o, retval);
3998 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
4004 =head1 Compile-time scope hooks
4006 =for apidoc Aox||blockhook_register
4008 Register a set of hooks to be called when the Perl lexical scope changes
4009 at compile time. See L<perlguts/"Compile-time scope hooks">.
4015 Perl_blockhook_register(pTHX_ BHK *hk)
4017 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
4019 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
4023 Perl_newPROG(pTHX_ OP *o)
4025 PERL_ARGS_ASSERT_NEWPROG;
4032 PL_eval_root = newUNOP(OP_LEAVEEVAL,
4033 ((PL_in_eval & EVAL_KEEPERR)
4034 ? OPf_SPECIAL : 0), o);
4036 cx = &cxstack[cxstack_ix];
4037 assert(CxTYPE(cx) == CXt_EVAL);
4039 if ((cx->blk_gimme & G_WANT) == G_VOID)
4040 scalarvoid(PL_eval_root);
4041 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
4044 scalar(PL_eval_root);
4046 PL_eval_start = op_linklist(PL_eval_root);
4047 PL_eval_root->op_private |= OPpREFCOUNTED;
4048 OpREFCNT_set(PL_eval_root, 1);
4049 PL_eval_root->op_next = 0;
4050 i = PL_savestack_ix;
4053 CALL_PEEP(PL_eval_start);
4054 finalize_optree(PL_eval_root);
4055 S_prune_chain_head(&PL_eval_start);
4057 PL_savestack_ix = i;
4060 if (o->op_type == OP_STUB) {
4061 /* This block is entered if nothing is compiled for the main
4062 program. This will be the case for an genuinely empty main
4063 program, or one which only has BEGIN blocks etc, so already
4066 Historically (5.000) the guard above was !o. However, commit
4067 f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
4068 c71fccf11fde0068, changed perly.y so that newPROG() is now
4069 called with the output of block_end(), which returns a new
4070 OP_STUB for the case of an empty optree. ByteLoader (and
4071 maybe other things) also take this path, because they set up
4072 PL_main_start and PL_main_root directly, without generating an
4075 If the parsing the main program aborts (due to parse errors,
4076 or due to BEGIN or similar calling exit), then newPROG()
4077 isn't even called, and hence this code path and its cleanups
4078 are skipped. This shouldn't make a make a difference:
4079 * a non-zero return from perl_parse is a failure, and
4080 perl_destruct() should be called immediately.
4081 * however, if exit(0) is called during the parse, then
4082 perl_parse() returns 0, and perl_run() is called. As
4083 PL_main_start will be NULL, perl_run() will return
4084 promptly, and the exit code will remain 0.
4087 PL_comppad_name = 0;
4089 S_op_destroy(aTHX_ o);
4092 PL_main_root = op_scope(sawparens(scalarvoid(o)));
4093 PL_curcop = &PL_compiling;
4094 PL_main_start = LINKLIST(PL_main_root);
4095 PL_main_root->op_private |= OPpREFCOUNTED;
4096 OpREFCNT_set(PL_main_root, 1);
4097 PL_main_root->op_next = 0;
4098 CALL_PEEP(PL_main_start);
4099 finalize_optree(PL_main_root);
4100 S_prune_chain_head(&PL_main_start);
4101 cv_forget_slab(PL_compcv);
4104 /* Register with debugger */
4106 CV * const cv = get_cvs("DB::postponed", 0);
4110 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
4112 call_sv(MUTABLE_SV(cv), G_DISCARD);
4119 Perl_localize(pTHX_ OP *o, I32 lex)
4121 PERL_ARGS_ASSERT_LOCALIZE;
4123 if (o->op_flags & OPf_PARENS)
4124 /* [perl #17376]: this appears to be premature, and results in code such as
4125 C< our(%x); > executing in list mode rather than void mode */
4132 if ( PL_parser->bufptr > PL_parser->oldbufptr
4133 && PL_parser->bufptr[-1] == ','
4134 && ckWARN(WARN_PARENTHESIS))
4136 char *s = PL_parser->bufptr;
4139 /* some heuristics to detect a potential error */
4140 while (*s && (strchr(", \t\n", *s)))
4144 if (*s && strchr("@$%*", *s) && *++s
4145 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
4148 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
4150 while (*s && (strchr(", \t\n", *s)))
4156 if (sigil && (*s == ';' || *s == '=')) {
4157 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
4158 "Parentheses missing around \"%s\" list",
4160 ? (PL_parser->in_my == KEY_our
4162 : PL_parser->in_my == KEY_state
4172 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
4173 PL_parser->in_my = FALSE;
4174 PL_parser->in_my_stash = NULL;
4179 Perl_jmaybe(pTHX_ OP *o)
4181 PERL_ARGS_ASSERT_JMAYBE;
4183 if (o->op_type == OP_LIST) {
4185 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
4186 o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
4191 PERL_STATIC_INLINE OP *
4192 S_op_std_init(pTHX_ OP *o)
4194 I32 type = o->op_type;
4196 PERL_ARGS_ASSERT_OP_STD_INIT;
4198 if (PL_opargs[type] & OA_RETSCALAR)
4200 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
4201 o->op_targ = pad_alloc(type, SVs_PADTMP);
4206 PERL_STATIC_INLINE OP *
4207 S_op_integerize(pTHX_ OP *o)
4209 I32 type = o->op_type;
4211 PERL_ARGS_ASSERT_OP_INTEGERIZE;
4213 /* integerize op. */
4214 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
4217 o->op_ppaddr = PL_ppaddr[++(o->op_type)];
4220 if (type == OP_NEGATE)
4221 /* XXX might want a ck_negate() for this */
4222 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
4228 S_fold_constants(pTHX_ OP *o)
4233 VOL I32 type = o->op_type;
4239 SV * const oldwarnhook = PL_warnhook;
4240 SV * const olddiehook = PL_diehook;
4242 U8 oldwarn = PL_dowarn;
4245 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
4247 if (!(PL_opargs[type] & OA_FOLDCONST))
4256 #ifdef USE_LOCALE_CTYPE
4257 if (IN_LC_COMPILETIME(LC_CTYPE))
4266 #ifdef USE_LOCALE_COLLATE
4267 if (IN_LC_COMPILETIME(LC_COLLATE))
4272 /* XXX what about the numeric ops? */
4273 #ifdef USE_LOCALE_NUMERIC
4274 if (IN_LC_COMPILETIME(LC_NUMERIC))
4279 if (!OpHAS_SIBLING(cLISTOPo->op_first)
4280 || OpSIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
4283 SV * const sv = cSVOPx_sv(OpSIBLING(cLISTOPo->op_first));
4284 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
4286 const char *s = SvPVX_const(sv);
4287 while (s < SvEND(sv)) {
4288 if (isALPHA_FOLD_EQ(*s, 'p')) goto nope;
4295 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
4298 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
4299 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
4303 if (PL_parser && PL_parser->error_count)
4304 goto nope; /* Don't try to run w/ errors */
4306 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4307 const OPCODE type = curop->op_type;
4308 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
4310 type != OP_SCALAR &&
4312 type != OP_PUSHMARK)
4318 curop = LINKLIST(o);
4319 old_next = o->op_next;
4323 oldscope = PL_scopestack_ix;
4324 create_eval_scope(G_FAKINGEVAL);
4326 /* Verify that we don't need to save it: */
4327 assert(PL_curcop == &PL_compiling);
4328 StructCopy(&PL_compiling, ¬_compiling, COP);
4329 PL_curcop = ¬_compiling;
4330 /* The above ensures that we run with all the correct hints of the
4331 currently compiling COP, but that IN_PERL_RUNTIME is true. */
4332 assert(IN_PERL_RUNTIME);
4333 PL_warnhook = PERL_WARNHOOK_FATAL;
4337 /* Effective $^W=1. */
4338 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
4339 PL_dowarn |= G_WARN_ON;
4344 sv = *(PL_stack_sp--);
4345 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
4346 pad_swipe(o->op_targ, FALSE);
4348 else if (SvTEMP(sv)) { /* grab mortal temp? */
4349 SvREFCNT_inc_simple_void(sv);
4352 else { assert(SvIMMORTAL(sv)); }
4355 /* Something tried to die. Abandon constant folding. */
4356 /* Pretend the error never happened. */
4358 o->op_next = old_next;
4362 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
4363 PL_warnhook = oldwarnhook;
4364 PL_diehook = olddiehook;
4365 /* XXX note that this croak may fail as we've already blown away
4366 * the stack - eg any nested evals */
4367 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
4370 PL_dowarn = oldwarn;
4371 PL_warnhook = oldwarnhook;
4372 PL_diehook = olddiehook;
4373 PL_curcop = &PL_compiling;
4375 if (PL_scopestack_ix > oldscope)
4376 delete_eval_scope();
4381 /* OP_STRINGIFY and constant folding are used to implement qq.
4382 Here the constant folding is an implementation detail that we
4383 want to hide. If the stringify op is itself already marked
4384 folded, however, then it is actually a folded join. */
4385 is_stringify = type == OP_STRINGIFY && !o->op_folded;
4390 else if (!SvIMMORTAL(sv)) {
4394 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
4395 if (!is_stringify) newop->op_folded = 1;
4403 S_gen_constant_list(pTHX_ OP *o)
4407 const SSize_t oldtmps_floor = PL_tmps_floor;
4412 if (PL_parser && PL_parser->error_count)
4413 return o; /* Don't attempt to run with errors */
4415 curop = LINKLIST(o);
4418 S_prune_chain_head(&curop);
4420 Perl_pp_pushmark(aTHX);
4423 assert (!(curop->op_flags & OPf_SPECIAL));
4424 assert(curop->op_type == OP_RANGE);
4425 Perl_pp_anonlist(aTHX);
4426 PL_tmps_floor = oldtmps_floor;
4428 CHANGE_TYPE(o, OP_RV2AV);
4429 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
4430 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
4431 o->op_opt = 0; /* needs to be revisited in rpeep() */
4432 av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
4434 /* replace subtree with an OP_CONST */
4435 curop = ((UNOP*)o)->op_first;
4436 op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
4439 if (AvFILLp(av) != -1)
4440 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
4443 SvREADONLY_on(*svp);
4450 =head1 Optree Manipulation Functions
4453 /* List constructors */
4456 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
4458 Append an item to the list of ops contained directly within a list-type
4459 op, returning the lengthened list. I<first> is the list-type op,
4460 and I<last> is the op to append to the list. I<optype> specifies the
4461 intended opcode for the list. If I<first> is not already a list of the
4462 right type, it will be upgraded into one. If either I<first> or I<last>
4463 is null, the other is returned unchanged.
4469 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
4477 if (first->op_type != (unsigned)type
4478 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
4480 return newLISTOP(type, 0, first, last);
4483 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
4484 first->op_flags |= OPf_KIDS;
4489 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
4491 Concatenate the lists of ops contained directly within two list-type ops,
4492 returning the combined list. I<first> and I<last> are the list-type ops
4493 to concatenate. I<optype> specifies the intended opcode for the list.
4494 If either I<first> or I<last> is not already a list of the right type,
4495 it will be upgraded into one. If either I<first> or I<last> is null,
4496 the other is returned unchanged.
4502 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
4510 if (first->op_type != (unsigned)type)
4511 return op_prepend_elem(type, first, last);
4513 if (last->op_type != (unsigned)type)
4514 return op_append_elem(type, first, last);
4516 ((LISTOP*)first)->op_last->op_lastsib = 0;
4517 OpSIBLING_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first);
4518 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
4519 ((LISTOP*)first)->op_last->op_lastsib = 1;
4520 #ifdef PERL_OP_PARENT
4521 ((LISTOP*)first)->op_last->op_sibling = first;
4523 first->op_flags |= (last->op_flags & OPf_KIDS);
4526 S_op_destroy(aTHX_ last);
4532 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
4534 Prepend an item to the list of ops contained directly within a list-type
4535 op, returning the lengthened list. I<first> is the op to prepend to the
4536 list, and I<last> is the list-type op. I<optype> specifies the intended
4537 opcode for the list. If I<last> is not already a list of the right type,
4538 it will be upgraded into one. If either I<first> or I<last> is null,
4539 the other is returned unchanged.
4545 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
4553 if (last->op_type == (unsigned)type) {
4554 if (type == OP_LIST) { /* already a PUSHMARK there */
4555 /* insert 'first' after pushmark */
4556 op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first);
4557 if (!(first->op_flags & OPf_PARENS))
4558 last->op_flags &= ~OPf_PARENS;
4561 op_sibling_splice(last, NULL, 0, first);
4562 last->op_flags |= OPf_KIDS;
4566 return newLISTOP(type, 0, first, last);
4570 =for apidoc Am|OP *|op_convert_list|I32 type|I32 flags|OP *o
4572 Converts I<o> into a list op if it is not one already, and then converts it
4573 into the specified I<type>, calling its check function, allocating a target if
4574 it needs one, and folding constants.
4576 A list-type op is usually constructed one kid at a time via C<newLISTOP>,
4577 C<op_prepend_elem> and C<op_append_elem>. Then finally it is passed to
4578 C<op_convert_list> to make it the right type.
4584 Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o)
4587 if (type < 0) type = -type, flags |= OPf_SPECIAL;
4588 if (!o || o->op_type != OP_LIST)
4589 o = force_list(o, 0);
4591 o->op_flags &= ~OPf_WANT;
4593 if (!(PL_opargs[type] & OA_MARK))
4594 op_null(cLISTOPo->op_first);
4596 OP * const kid2 = OpSIBLING(cLISTOPo->op_first);
4597 if (kid2 && kid2->op_type == OP_COREARGS) {
4598 op_null(cLISTOPo->op_first);
4599 kid2->op_private |= OPpCOREARGS_PUSHMARK;
4603 CHANGE_TYPE(o, type);
4604 o->op_flags |= flags;
4605 if (flags & OPf_FOLDED)
4608 o = CHECKOP(type, o);
4609 if (o->op_type != (unsigned)type)
4612 return fold_constants(op_integerize(op_std_init(o)));
4619 =head1 Optree construction
4621 =for apidoc Am|OP *|newNULLLIST
4623 Constructs, checks, and returns a new C<stub> op, which represents an
4624 empty list expression.
4630 Perl_newNULLLIST(pTHX)
4632 return newOP(OP_STUB, 0);
4635 /* promote o and any siblings to be a list if its not already; i.e.
4643 * pushmark - o - A - B
4645 * If nullit it true, the list op is nulled.
4649 S_force_list(pTHX_ OP *o, bool nullit)
4651 if (!o || o->op_type != OP_LIST) {
4654 /* manually detach any siblings then add them back later */
4655 rest = OpSIBLING(o);
4656 OpSIBLING_set(o, NULL);
4659 o = newLISTOP(OP_LIST, 0, o, NULL);
4661 op_sibling_splice(o, cLISTOPo->op_last, 0, rest);
4669 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
4671 Constructs, checks, and returns an op of any list type. I<type> is
4672 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4673 C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
4674 supply up to two ops to be direct children of the list op; they are
4675 consumed by this function and become part of the constructed op tree.
4677 For most list operators, the check function expects all the kid ops to be
4678 present already, so calling C<newLISTOP(OP_JOIN, ...)> (e.g.,) is not
4679 appropriate. What you want to do in that case is create an op of type
4680 OP_LIST, append more children to it, and then call L</op_convert_list>.
4681 See L</op_convert_list> for more information.
4688 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4693 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP
4694 || type == OP_CUSTOM);
4696 NewOp(1101, listop, 1, LISTOP);
4698 CHANGE_TYPE(listop, type);
4701 listop->op_flags = (U8)flags;
4705 else if (!first && last)
4708 OpSIBLING_set(first, last);
4709 listop->op_first = first;
4710 listop->op_last = last;
4711 if (type == OP_LIST) {
4712 OP* const pushop = newOP(OP_PUSHMARK, 0);
4713 pushop->op_lastsib = 0;
4714 OpSIBLING_set(pushop, first);
4715 listop->op_first = pushop;
4716 listop->op_flags |= OPf_KIDS;
4718 listop->op_last = pushop;
4721 first->op_lastsib = 0;
4722 if (listop->op_last) {
4723 listop->op_last->op_lastsib = 1;
4724 #ifdef PERL_OP_PARENT
4725 listop->op_last->op_sibling = (OP*)listop;
4729 return CHECKOP(type, listop);
4733 =for apidoc Am|OP *|newOP|I32 type|I32 flags
4735 Constructs, checks, and returns an op of any base type (any type that
4736 has no extra fields). I<type> is the opcode. I<flags> gives the
4737 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
4744 Perl_newOP(pTHX_ I32 type, I32 flags)
4749 if (type == -OP_ENTEREVAL) {
4750 type = OP_ENTEREVAL;
4751 flags |= OPpEVAL_BYTES<<8;
4754 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
4755 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4756 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4757 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4759 NewOp(1101, o, 1, OP);
4760 CHANGE_TYPE(o, type);
4761 o->op_flags = (U8)flags;
4764 o->op_private = (U8)(0 | (flags >> 8));
4765 if (PL_opargs[type] & OA_RETSCALAR)
4767 if (PL_opargs[type] & OA_TARGET)
4768 o->op_targ = pad_alloc(type, SVs_PADTMP);
4769 return CHECKOP(type, o);
4773 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
4775 Constructs, checks, and returns an op of any unary type. I<type> is
4776 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4777 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
4778 bits, the eight bits of C<op_private>, except that the bit with value 1
4779 is automatically set. I<first> supplies an optional op to be the direct
4780 child of the unary op; it is consumed by this function and become part
4781 of the constructed op tree.
4787 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
4792 if (type == -OP_ENTEREVAL) {
4793 type = OP_ENTEREVAL;
4794 flags |= OPpEVAL_BYTES<<8;
4797 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
4798 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4799 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4800 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
4801 || type == OP_SASSIGN
4802 || type == OP_ENTERTRY
4803 || type == OP_CUSTOM
4804 || type == OP_NULL );
4807 first = newOP(OP_STUB, 0);
4808 if (PL_opargs[type] & OA_MARK)
4809 first = force_list(first, 1);
4811 NewOp(1101, unop, 1, UNOP);
4812 CHANGE_TYPE(unop, type);
4813 unop->op_first = first;
4814 unop->op_flags = (U8)(flags | OPf_KIDS);
4815 unop->op_private = (U8)(1 | (flags >> 8));
4817 #ifdef PERL_OP_PARENT
4818 if (!OpHAS_SIBLING(first)) /* true unless weird syntax error */
4819 first->op_sibling = (OP*)unop;
4822 unop = (UNOP*) CHECKOP(type, unop);