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 OP *o, 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, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
552 /* remove flags var, its unused in all callers, move to to right end since gv
553 and kid are always the same */
555 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
557 SV * const namesv = cv_name((CV *)gv, NULL, 0);
558 PERL_ARGS_ASSERT_BAD_TYPE_GV;
560 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %"SVf" must be %s (not %s)",
561 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
565 S_no_bareword_allowed(pTHX_ OP *o)
567 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
569 qerror(Perl_mess(aTHX_
570 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
572 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
575 /* "register" allocation */
578 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
581 const bool is_our = (PL_parser->in_my == KEY_our);
583 PERL_ARGS_ASSERT_ALLOCMY;
585 if (flags & ~SVf_UTF8)
586 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
589 /* complain about "my $<special_var>" etc etc */
593 ((flags & SVf_UTF8) && isIDFIRST_utf8((U8 *)name+1)) ||
594 (name[1] == '_' && (*name == '$' || len > 2))))
596 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
598 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
599 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
600 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
601 PL_parser->in_my == KEY_state ? "state" : "my"));
603 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
604 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
607 else if (len == 2 && name[1] == '_' && !is_our)
608 /* diag_listed_as: Use of my $_ is experimental */
609 Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__LEXICAL_TOPIC),
610 "Use of %s $_ is experimental",
611 PL_parser->in_my == KEY_state
615 /* allocate a spare slot and store the name in that slot */
617 off = pad_add_name_pvn(name, len,
618 (is_our ? padadd_OUR :
619 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
620 PL_parser->in_my_stash,
622 /* $_ is always in main::, even with our */
623 ? (PL_curstash && !memEQs(name,len,"$_")
629 /* anon sub prototypes contains state vars should always be cloned,
630 * otherwise the state var would be shared between anon subs */
632 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
633 CvCLONE_on(PL_compcv);
639 =head1 Optree Manipulation Functions
641 =for apidoc alloccopstash
643 Available only under threaded builds, this function allocates an entry in
644 C<PL_stashpad> for the stash passed to it.
651 Perl_alloccopstash(pTHX_ HV *hv)
653 PADOFFSET off = 0, o = 1;
654 bool found_slot = FALSE;
656 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
658 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
660 for (; o < PL_stashpadmax; ++o) {
661 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
662 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
663 found_slot = TRUE, off = o;
666 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
667 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
668 off = PL_stashpadmax;
669 PL_stashpadmax += 10;
672 PL_stashpad[PL_stashpadix = off] = hv;
677 /* free the body of an op without examining its contents.
678 * Always use this rather than FreeOp directly */
681 S_op_destroy(pTHX_ OP *o)
689 =for apidoc Am|void|op_free|OP *o
691 Free an op. Only use this when an op is no longer linked to from any
698 Perl_op_free(pTHX_ OP *o)
702 SSize_t defer_ix = -1;
703 SSize_t defer_stack_alloc = 0;
704 OP **defer_stack = NULL;
708 /* Though ops may be freed twice, freeing the op after its slab is a
710 assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
711 /* During the forced freeing of ops after compilation failure, kidops
712 may be freed before their parents. */
713 if (!o || o->op_type == OP_FREED)
718 /* an op should only ever acquire op_private flags that we know about.
719 * If this fails, you may need to fix something in regen/op_private */
720 if (o->op_ppaddr == PL_ppaddr[o->op_type]) {
721 assert(!(o->op_private & ~PL_op_private_valid[type]));
724 if (o->op_private & OPpREFCOUNTED) {
735 refcnt = OpREFCNT_dec(o);
738 /* Need to find and remove any pattern match ops from the list
739 we maintain for reset(). */
740 find_and_forget_pmops(o);
750 /* Call the op_free hook if it has been set. Do it now so that it's called
751 * at the right time for refcounted ops, but still before all of the kids
755 if (o->op_flags & OPf_KIDS) {
757 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
758 nextkid = OpSIBLING(kid); /* Get before next freeing kid */
759 if (!kid || kid->op_type == OP_FREED)
760 /* During the forced freeing of ops after
761 compilation failure, kidops may be freed before
764 if (!(kid->op_flags & OPf_KIDS))
765 /* If it has no kids, just free it now */
772 type = (OPCODE)o->op_targ;
775 Slab_to_rw(OpSLAB(o));
777 /* COP* is not cleared by op_clear() so that we may track line
778 * numbers etc even after null() */
779 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
785 #ifdef DEBUG_LEAKING_SCALARS
789 } while ( (o = POP_DEFERRED_OP()) );
791 Safefree(defer_stack);
794 /* S_op_clear_gv(): free a GV attached to an OP */
797 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
799 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
803 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
804 || o->op_type == OP_MULTIDEREF)
807 ? ((GV*)PAD_SVl(*ixp)) : NULL;
809 ? (GV*)(*svp) : NULL;
811 /* It's possible during global destruction that the GV is freed
812 before the optree. Whilst the SvREFCNT_inc is happy to bump from
813 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
814 will trigger an assertion failure, because the entry to sv_clear
815 checks that the scalar is not already freed. A check of for
816 !SvIS_FREED(gv) turns out to be invalid, because during global
817 destruction the reference count can be forced down to zero
818 (with SVf_BREAK set). In which case raising to 1 and then
819 dropping to 0 triggers cleanup before it should happen. I
820 *think* that this might actually be a general, systematic,
821 weakness of the whole idea of SVf_BREAK, in that code *is*
822 allowed to raise and lower references during global destruction,
823 so any *valid* code that happens to do this during global
824 destruction might well trigger premature cleanup. */
825 bool still_valid = gv && SvREFCNT(gv);
828 SvREFCNT_inc_simple_void(gv);
831 pad_swipe(*ixp, TRUE);
839 int try_downgrade = SvREFCNT(gv) == 2;
842 gv_try_downgrade(gv);
848 Perl_op_clear(pTHX_ OP *o)
853 PERL_ARGS_ASSERT_OP_CLEAR;
855 switch (o->op_type) {
856 case OP_NULL: /* Was holding old type, if any. */
859 case OP_ENTEREVAL: /* Was holding hints. */
863 if (!(o->op_flags & OPf_REF)
864 || (PL_check[o->op_type] != Perl_ck_ftst))
871 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
873 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
876 case OP_METHOD_REDIR:
877 case OP_METHOD_REDIR_SUPER:
879 if (cMETHOPx(o)->op_rclass_targ) {
880 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
881 cMETHOPx(o)->op_rclass_targ = 0;
884 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
885 cMETHOPx(o)->op_rclass_sv = NULL;
887 case OP_METHOD_NAMED:
888 case OP_METHOD_SUPER:
889 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
890 cMETHOPx(o)->op_u.op_meth_sv = NULL;
893 pad_swipe(o->op_targ, 1);
900 SvREFCNT_dec(cSVOPo->op_sv);
901 cSVOPo->op_sv = NULL;
904 Even if op_clear does a pad_free for the target of the op,
905 pad_free doesn't actually remove the sv that exists in the pad;
906 instead it lives on. This results in that it could be reused as
907 a target later on when the pad was reallocated.
910 pad_swipe(o->op_targ,1);
920 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
925 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
926 assert(o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
928 if (cPADOPo->op_padix > 0) {
929 pad_swipe(cPADOPo->op_padix, TRUE);
930 cPADOPo->op_padix = 0;
933 SvREFCNT_dec(cSVOPo->op_sv);
934 cSVOPo->op_sv = NULL;
938 PerlMemShared_free(cPVOPo->op_pv);
939 cPVOPo->op_pv = NULL;
943 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
947 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
948 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
951 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
957 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
958 op_free(cPMOPo->op_code_list);
959 cPMOPo->op_code_list = NULL;
961 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
962 /* we use the same protection as the "SAFE" version of the PM_ macros
963 * here since sv_clean_all might release some PMOPs
964 * after PL_regex_padav has been cleared
965 * and the clearing of PL_regex_padav needs to
966 * happen before sv_clean_all
969 if(PL_regex_pad) { /* We could be in destruction */
970 const IV offset = (cPMOPo)->op_pmoffset;
971 ReREFCNT_dec(PM_GETRE(cPMOPo));
972 PL_regex_pad[offset] = &PL_sv_undef;
973 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
977 ReREFCNT_dec(PM_GETRE(cPMOPo));
978 PM_SETRE(cPMOPo, NULL);
985 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
986 UV actions = items->uv;
988 bool is_hash = FALSE;
991 switch (actions & MDEREF_ACTION_MASK) {
994 actions = (++items)->uv;
997 case MDEREF_HV_padhv_helem:
999 case MDEREF_AV_padav_aelem:
1000 pad_free((++items)->pad_offset);
1003 case MDEREF_HV_gvhv_helem:
1005 case MDEREF_AV_gvav_aelem:
1007 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1009 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1013 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1015 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1017 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1019 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1021 goto do_vivify_rv2xv_elem;
1023 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1025 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1026 pad_free((++items)->pad_offset);
1027 goto do_vivify_rv2xv_elem;
1029 case MDEREF_HV_pop_rv2hv_helem:
1030 case MDEREF_HV_vivify_rv2hv_helem:
1032 do_vivify_rv2xv_elem:
1033 case MDEREF_AV_pop_rv2av_aelem:
1034 case MDEREF_AV_vivify_rv2av_aelem:
1036 switch (actions & MDEREF_INDEX_MASK) {
1037 case MDEREF_INDEX_none:
1040 case MDEREF_INDEX_const:
1044 pad_swipe((++items)->pad_offset, 1);
1046 SvREFCNT_dec((++items)->sv);
1052 case MDEREF_INDEX_padsv:
1053 pad_free((++items)->pad_offset);
1055 case MDEREF_INDEX_gvsv:
1057 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1059 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1064 if (actions & MDEREF_FLAG_last)
1077 actions >>= MDEREF_SHIFT;
1080 /* start of malloc is at op_aux[-1], where the length is
1082 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1087 if (o->op_targ > 0) {
1088 pad_free(o->op_targ);
1094 S_cop_free(pTHX_ COP* cop)
1096 PERL_ARGS_ASSERT_COP_FREE;
1099 if (! specialWARN(cop->cop_warnings))
1100 PerlMemShared_free(cop->cop_warnings);
1101 cophh_free(CopHINTHASH_get(cop));
1102 if (PL_curcop == cop)
1107 S_forget_pmop(pTHX_ PMOP *const o
1110 HV * const pmstash = PmopSTASH(o);
1112 PERL_ARGS_ASSERT_FORGET_PMOP;
1114 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1115 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1117 PMOP **const array = (PMOP**) mg->mg_ptr;
1118 U32 count = mg->mg_len / sizeof(PMOP**);
1122 if (array[i] == o) {
1123 /* Found it. Move the entry at the end to overwrite it. */
1124 array[i] = array[--count];
1125 mg->mg_len = count * sizeof(PMOP**);
1126 /* Could realloc smaller at this point always, but probably
1127 not worth it. Probably worth free()ing if we're the
1130 Safefree(mg->mg_ptr);
1143 S_find_and_forget_pmops(pTHX_ OP *o)
1145 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1147 if (o->op_flags & OPf_KIDS) {
1148 OP *kid = cUNOPo->op_first;
1150 switch (kid->op_type) {
1155 forget_pmop((PMOP*)kid);
1157 find_and_forget_pmops(kid);
1158 kid = OpSIBLING(kid);
1164 =for apidoc Am|void|op_null|OP *o
1166 Neutralizes an op when it is no longer needed, but is still linked to from
1173 Perl_op_null(pTHX_ OP *o)
1177 PERL_ARGS_ASSERT_OP_NULL;
1179 if (o->op_type == OP_NULL)
1182 o->op_targ = o->op_type;
1183 CHANGE_TYPE(o, OP_NULL);
1187 Perl_op_refcnt_lock(pTHX)
1192 PERL_UNUSED_CONTEXT;
1197 Perl_op_refcnt_unlock(pTHX)
1202 PERL_UNUSED_CONTEXT;
1208 =for apidoc op_sibling_splice
1210 A general function for editing the structure of an existing chain of
1211 op_sibling nodes. By analogy with the perl-level splice() function, allows
1212 you to delete zero or more sequential nodes, replacing them with zero or
1213 more different nodes. Performs the necessary op_first/op_last
1214 housekeeping on the parent node and op_sibling manipulation on the
1215 children. The last deleted node will be marked as as the last node by
1216 updating the op_sibling or op_lastsib field as appropriate.
1218 Note that op_next is not manipulated, and nodes are not freed; that is the
1219 responsibility of the caller. It also won't create a new list op for an
1220 empty list etc; use higher-level functions like op_append_elem() for that.
1222 parent is the parent node of the sibling chain.
1224 start is the node preceding the first node to be spliced. Node(s)
1225 following it will be deleted, and ops will be inserted after it. If it is
1226 NULL, the first node onwards is deleted, and nodes are inserted at the
1229 del_count is the number of nodes to delete. If zero, no nodes are deleted.
1230 If -1 or greater than or equal to the number of remaining kids, all
1231 remaining kids are deleted.
1233 insert is the first of a chain of nodes to be inserted in place of the nodes.
1234 If NULL, no nodes are inserted.
1236 The head of the chain of deleted ops is returned, or NULL if no ops were
1241 action before after returns
1242 ------ ----- ----- -------
1245 splice(P, A, 2, X-Y-Z) | | B-C
1249 splice(P, NULL, 1, X-Y) | | A
1253 splice(P, NULL, 3, NULL) | | A-B-C
1257 splice(P, B, 0, X-Y) | | NULL
1264 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1266 OP *first = start ? OpSIBLING(start) : cLISTOPx(parent)->op_first;
1268 OP *last_del = NULL;
1269 OP *last_ins = NULL;
1271 PERL_ARGS_ASSERT_OP_SIBLING_SPLICE;
1273 assert(del_count >= -1);
1275 if (del_count && first) {
1277 while (--del_count && OpHAS_SIBLING(last_del))
1278 last_del = OpSIBLING(last_del);
1279 rest = OpSIBLING(last_del);
1280 OpSIBLING_set(last_del, NULL);
1281 last_del->op_lastsib = 1;
1288 while (OpHAS_SIBLING(last_ins))
1289 last_ins = OpSIBLING(last_ins);
1290 OpSIBLING_set(last_ins, rest);
1291 last_ins->op_lastsib = rest ? 0 : 1;
1297 OpSIBLING_set(start, insert);
1298 start->op_lastsib = insert ? 0 : 1;
1301 cLISTOPx(parent)->op_first = insert;
1303 parent->op_flags |= OPf_KIDS;
1305 parent->op_flags &= ~OPf_KIDS;
1309 /* update op_last etc */
1310 U32 type = parent->op_type;
1313 if (type == OP_NULL)
1314 type = parent->op_targ;
1315 type = PL_opargs[type] & OA_CLASS_MASK;
1317 lastop = last_ins ? last_ins : start ? start : NULL;
1318 if ( type == OA_BINOP
1319 || type == OA_LISTOP
1323 cLISTOPx(parent)->op_last = lastop;
1326 lastop->op_lastsib = 1;
1327 #ifdef PERL_OP_PARENT
1328 lastop->op_sibling = parent;
1332 return last_del ? first : NULL;
1336 =for apidoc op_parent
1338 returns the parent OP of o, if it has a parent. Returns NULL otherwise.
1339 (Currently perl must be built with C<-DPERL_OP_PARENT> for this feature to
1346 Perl_op_parent(OP *o)
1348 PERL_ARGS_ASSERT_OP_PARENT;
1349 #ifdef PERL_OP_PARENT
1350 while (OpHAS_SIBLING(o))
1352 return o->op_sibling;
1360 /* replace the sibling following start with a new UNOP, which becomes
1361 * the parent of the original sibling; e.g.
1363 * op_sibling_newUNOP(P, A, unop-args...)
1371 * where U is the new UNOP.
1373 * parent and start args are the same as for op_sibling_splice();
1374 * type and flags args are as newUNOP().
1376 * Returns the new UNOP.
1380 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1384 kid = op_sibling_splice(parent, start, 1, NULL);
1385 newop = newUNOP(type, flags, kid);
1386 op_sibling_splice(parent, start, 0, newop);
1391 /* lowest-level newLOGOP-style function - just allocates and populates
1392 * the struct. Higher-level stuff should be done by S_new_logop() /
1393 * newLOGOP(). This function exists mainly to avoid op_first assignment
1394 * being spread throughout this file.
1398 S_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1403 NewOp(1101, logop, 1, LOGOP);
1404 CHANGE_TYPE(logop, type);
1405 logop->op_first = first;
1406 logop->op_other = other;
1407 logop->op_flags = OPf_KIDS;
1408 while (kid && OpHAS_SIBLING(kid))
1409 kid = OpSIBLING(kid);
1411 kid->op_lastsib = 1;
1412 #ifdef PERL_OP_PARENT
1413 kid->op_sibling = (OP*)logop;
1420 /* Contextualizers */
1423 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1425 Applies a syntactic context to an op tree representing an expression.
1426 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
1427 or C<G_VOID> to specify the context to apply. The modified op tree
1434 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1436 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1438 case G_SCALAR: return scalar(o);
1439 case G_ARRAY: return list(o);
1440 case G_VOID: return scalarvoid(o);
1442 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1449 =for apidoc Am|OP*|op_linklist|OP *o
1450 This function is the implementation of the L</LINKLIST> macro. It should
1451 not be called directly.
1457 Perl_op_linklist(pTHX_ OP *o)
1461 PERL_ARGS_ASSERT_OP_LINKLIST;
1466 /* establish postfix order */
1467 first = cUNOPo->op_first;
1470 o->op_next = LINKLIST(first);
1473 OP *sibl = OpSIBLING(kid);
1475 kid->op_next = LINKLIST(sibl);
1490 S_scalarkids(pTHX_ OP *o)
1492 if (o && o->op_flags & OPf_KIDS) {
1494 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1501 S_scalarboolean(pTHX_ OP *o)
1503 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1505 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
1506 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
1507 if (ckWARN(WARN_SYNTAX)) {
1508 const line_t oldline = CopLINE(PL_curcop);
1510 if (PL_parser && PL_parser->copline != NOLINE) {
1511 /* This ensures that warnings are reported at the first line
1512 of the conditional, not the last. */
1513 CopLINE_set(PL_curcop, PL_parser->copline);
1515 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1516 CopLINE_set(PL_curcop, oldline);
1523 S_op_varname(pTHX_ const OP *o)
1526 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1527 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1529 const char funny = o->op_type == OP_PADAV
1530 || o->op_type == OP_RV2AV ? '@' : '%';
1531 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1533 if (cUNOPo->op_first->op_type != OP_GV
1534 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1536 return varname(gv, funny, 0, NULL, 0, 1);
1539 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, 1);
1544 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1545 { /* or not so pretty :-) */
1546 if (o->op_type == OP_CONST) {
1548 if (SvPOK(*retsv)) {
1550 *retsv = sv_newmortal();
1551 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1552 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1554 else if (!SvOK(*retsv))
1557 else *retpv = "...";
1561 S_scalar_slice_warning(pTHX_ const OP *o)
1565 o->op_type == OP_HSLICE ? '{' : '[';
1567 o->op_type == OP_HSLICE ? '}' : ']';
1569 SV *keysv = NULL; /* just to silence compiler warnings */
1570 const char *key = NULL;
1572 if (!(o->op_private & OPpSLICEWARNING))
1574 if (PL_parser && PL_parser->error_count)
1575 /* This warning can be nonsensical when there is a syntax error. */
1578 kid = cLISTOPo->op_first;
1579 kid = OpSIBLING(kid); /* get past pushmark */
1580 /* weed out false positives: any ops that can return lists */
1581 switch (kid->op_type) {
1610 /* Don't warn if we have a nulled list either. */
1611 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1614 assert(OpSIBLING(kid));
1615 name = S_op_varname(aTHX_ OpSIBLING(kid));
1616 if (!name) /* XS module fiddling with the op tree */
1618 S_op_pretty(aTHX_ kid, &keysv, &key);
1619 assert(SvPOK(name));
1620 sv_chop(name,SvPVX(name)+1);
1622 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1623 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1624 "Scalar value @%"SVf"%c%s%c better written as $%"SVf
1626 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1627 lbrack, key, rbrack);
1629 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1630 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1631 "Scalar value @%"SVf"%c%"SVf"%c better written as $%"
1633 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1634 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1638 Perl_scalar(pTHX_ OP *o)
1642 /* assumes no premature commitment */
1643 if (!o || (PL_parser && PL_parser->error_count)
1644 || (o->op_flags & OPf_WANT)
1645 || o->op_type == OP_RETURN)
1650 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1652 switch (o->op_type) {
1654 scalar(cBINOPo->op_first);
1655 if (o->op_private & OPpREPEAT_DOLIST) {
1656 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1657 assert(kid->op_type == OP_PUSHMARK);
1658 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1659 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1660 o->op_private &=~ OPpREPEAT_DOLIST;
1667 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
1677 if (o->op_flags & OPf_KIDS) {
1678 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
1684 kid = cLISTOPo->op_first;
1686 kid = OpSIBLING(kid);
1689 OP *sib = OpSIBLING(kid);
1690 if (sib && kid->op_type != OP_LEAVEWHEN
1691 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
1692 || ( sib->op_targ != OP_NEXTSTATE
1693 && sib->op_targ != OP_DBSTATE )))
1699 PL_curcop = &PL_compiling;
1704 kid = cLISTOPo->op_first;
1707 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1712 /* Warn about scalar context */
1713 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1714 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1717 const char *key = NULL;
1719 /* This warning can be nonsensical when there is a syntax error. */
1720 if (PL_parser && PL_parser->error_count)
1723 if (!ckWARN(WARN_SYNTAX)) break;
1725 kid = cLISTOPo->op_first;
1726 kid = OpSIBLING(kid); /* get past pushmark */
1727 assert(OpSIBLING(kid));
1728 name = S_op_varname(aTHX_ OpSIBLING(kid));
1729 if (!name) /* XS module fiddling with the op tree */
1731 S_op_pretty(aTHX_ kid, &keysv, &key);
1732 assert(SvPOK(name));
1733 sv_chop(name,SvPVX(name)+1);
1735 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1736 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1737 "%%%"SVf"%c%s%c in scalar context better written "
1739 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1740 lbrack, key, rbrack);
1742 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1743 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1744 "%%%"SVf"%c%"SVf"%c in scalar context better "
1745 "written as $%"SVf"%c%"SVf"%c",
1746 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1747 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1754 Perl_scalarvoid(pTHX_ OP *arg)
1760 SSize_t defer_stack_alloc = 0;
1761 SSize_t defer_ix = -1;
1762 OP **defer_stack = NULL;
1765 PERL_ARGS_ASSERT_SCALARVOID;
1768 SV *useless_sv = NULL;
1769 const char* useless = NULL;
1770 bool useless_is_grep = FALSE;
1772 if (o->op_type == OP_NEXTSTATE
1773 || o->op_type == OP_DBSTATE
1774 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1775 || o->op_targ == OP_DBSTATE)))
1776 PL_curcop = (COP*)o; /* for warning below */
1778 /* assumes no premature commitment */
1779 want = o->op_flags & OPf_WANT;
1780 if ((want && want != OPf_WANT_SCALAR)
1781 || (PL_parser && PL_parser->error_count)
1782 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1787 if ((o->op_private & OPpTARGET_MY)
1788 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1790 /* newASSIGNOP has already applied scalar context, which we
1791 leave, as if this op is inside SASSIGN. */
1795 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1797 switch (o->op_type) {
1799 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1803 if (o->op_flags & OPf_STACKED)
1805 if (o->op_type == OP_REPEAT)
1806 scalar(cBINOPo->op_first);
1809 if (o->op_private == 4)
1844 case OP_GETSOCKNAME:
1845 case OP_GETPEERNAME:
1850 case OP_GETPRIORITY:
1875 useless = OP_DESC(o);
1885 case OP_AELEMFAST_LEX:
1889 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1890 useless = OP_DESC(o);
1893 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO))) {
1894 /* Otherwise it's "Useless use of grep iterator" */
1896 useless_is_grep = TRUE;
1901 kid = cLISTOPo->op_first;
1902 if (kid && kid->op_type == OP_PUSHRE
1904 && !(o->op_flags & OPf_STACKED)
1906 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
1908 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
1911 useless = OP_DESC(o);
1915 kid = cUNOPo->op_first;
1916 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1917 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1920 useless = "negative pattern binding (!~)";
1924 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1925 useless = "non-destructive substitution (s///r)";
1929 useless = "non-destructive transliteration (tr///r)";
1936 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1937 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
1938 useless = "a variable";
1943 if (cSVOPo->op_private & OPpCONST_STRICT)
1944 no_bareword_allowed(o);
1946 if (ckWARN(WARN_VOID)) {
1948 /* don't warn on optimised away booleans, eg
1949 * use constant Foo, 5; Foo || print; */
1950 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1952 /* the constants 0 and 1 are permitted as they are
1953 conventionally used as dummies in constructs like
1954 1 while some_condition_with_side_effects; */
1955 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
1957 else if (SvPOK(sv)) {
1958 SV * const dsv = newSVpvs("");
1960 = Perl_newSVpvf(aTHX_
1962 pv_pretty(dsv, SvPVX_const(sv),
1963 SvCUR(sv), 32, NULL, NULL,
1965 | PERL_PV_ESCAPE_NOCLEAR
1966 | PERL_PV_ESCAPE_UNI_DETECT));
1967 SvREFCNT_dec_NN(dsv);
1969 else if (SvOK(sv)) {
1970 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%"SVf")", SVfARG(sv));
1973 useless = "a constant (undef)";
1976 op_null(o); /* don't execute or even remember it */
1980 CHANGE_TYPE(o, OP_PREINC); /* pre-increment is faster */
1984 CHANGE_TYPE(o, OP_PREDEC); /* pre-decrement is faster */
1988 CHANGE_TYPE(o, OP_I_PREINC); /* pre-increment is faster */
1992 CHANGE_TYPE(o, OP_I_PREDEC); /* pre-decrement is faster */
1997 UNOP *refgen, *rv2cv;
2000 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2003 rv2gv = ((BINOP *)o)->op_last;
2004 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2007 refgen = (UNOP *)((BINOP *)o)->op_first;
2009 if (!refgen || (refgen->op_type != OP_REFGEN
2010 && refgen->op_type != OP_SREFGEN))
2013 exlist = (LISTOP *)refgen->op_first;
2014 if (!exlist || exlist->op_type != OP_NULL
2015 || exlist->op_targ != OP_LIST)
2018 if (exlist->op_first->op_type != OP_PUSHMARK
2019 && exlist->op_first != exlist->op_last)
2022 rv2cv = (UNOP*)exlist->op_last;
2024 if (rv2cv->op_type != OP_RV2CV)
2027 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2028 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2029 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2031 o->op_private |= OPpASSIGN_CV_TO_GV;
2032 rv2gv->op_private |= OPpDONT_INIT_GV;
2033 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2045 kid = cLOGOPo->op_first;
2046 if (kid->op_type == OP_NOT
2047 && (kid->op_flags & OPf_KIDS)) {
2048 if (o->op_type == OP_AND) {
2049 CHANGE_TYPE(o, OP_OR);
2051 CHANGE_TYPE(o, OP_AND);
2061 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2062 if (!(kid->op_flags & OPf_KIDS))
2069 if (o->op_flags & OPf_STACKED)
2076 if (!(o->op_flags & OPf_KIDS))
2087 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2088 if (!(kid->op_flags & OPf_KIDS))
2094 /* If the first kid after pushmark is something that the padrange
2095 optimisation would reject, then null the list and the pushmark.
2097 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2098 && ( !(kid = OpSIBLING(kid))
2099 || ( kid->op_type != OP_PADSV
2100 && kid->op_type != OP_PADAV
2101 && kid->op_type != OP_PADHV)
2102 || kid->op_private & ~OPpLVAL_INTRO
2103 || !(kid = OpSIBLING(kid))
2104 || ( kid->op_type != OP_PADSV
2105 && kid->op_type != OP_PADAV
2106 && kid->op_type != OP_PADHV)
2107 || kid->op_private & ~OPpLVAL_INTRO)
2109 op_null(cUNOPo->op_first); /* NULL the pushmark */
2110 op_null(o); /* NULL the list */
2122 /* mortalise it, in case warnings are fatal. */
2123 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2124 "Useless use of %"SVf" in void context",
2125 SVfARG(sv_2mortal(useless_sv)));
2128 if (useless_is_grep) {
2129 Perl_ck_warner(aTHX_ packWARN(WARN_VOID_UNUSUAL),
2130 "Unusual use of %s in void context",
2133 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2134 "Useless use of %s in void context",
2138 } while ( (o = POP_DEFERRED_OP()) );
2140 Safefree(defer_stack);
2146 S_listkids(pTHX_ OP *o)
2148 if (o && o->op_flags & OPf_KIDS) {
2150 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2157 Perl_list(pTHX_ OP *o)
2161 /* assumes no premature commitment */
2162 if (!o || (o->op_flags & OPf_WANT)
2163 || (PL_parser && PL_parser->error_count)
2164 || o->op_type == OP_RETURN)
2169 if ((o->op_private & OPpTARGET_MY)
2170 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2172 return o; /* As if inside SASSIGN */
2175 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2177 switch (o->op_type) {
2179 list(cBINOPo->op_first);
2182 if (o->op_private & OPpREPEAT_DOLIST
2183 && !(o->op_flags & OPf_STACKED))
2185 list(cBINOPo->op_first);
2186 kid = cBINOPo->op_last;
2187 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2188 && SvIVX(kSVOP_sv) == 1)
2190 op_null(o); /* repeat */
2191 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2193 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2200 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2208 if (!(o->op_flags & OPf_KIDS))
2210 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2211 list(cBINOPo->op_first);
2212 return gen_constant_list(o);
2218 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2219 op_null(cUNOPo->op_first); /* NULL the pushmark */
2220 op_null(o); /* NULL the list */
2225 kid = cLISTOPo->op_first;
2227 kid = OpSIBLING(kid);
2230 OP *sib = OpSIBLING(kid);
2231 if (sib && kid->op_type != OP_LEAVEWHEN)
2237 PL_curcop = &PL_compiling;
2241 kid = cLISTOPo->op_first;
2248 S_scalarseq(pTHX_ OP *o)
2251 const OPCODE type = o->op_type;
2253 if (type == OP_LINESEQ || type == OP_SCOPE ||
2254 type == OP_LEAVE || type == OP_LEAVETRY)
2257 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2258 if ((sib = OpSIBLING(kid))
2259 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2260 || ( sib->op_targ != OP_NEXTSTATE
2261 && sib->op_targ != OP_DBSTATE )))
2266 PL_curcop = &PL_compiling;
2268 o->op_flags &= ~OPf_PARENS;
2269 if (PL_hints & HINT_BLOCK_SCOPE)
2270 o->op_flags |= OPf_PARENS;
2273 o = newOP(OP_STUB, 0);
2278 S_modkids(pTHX_ OP *o, I32 type)
2280 if (o && o->op_flags & OPf_KIDS) {
2282 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2283 op_lvalue(kid, type);
2289 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2290 * const fields. Also, convert CONST keys to HEK-in-SVs.
2291 * rop is the op that retrieves the hash;
2292 * key_op is the first key
2296 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op)
2302 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2304 if (rop->op_first->op_type == OP_PADSV)
2305 /* @$hash{qw(keys here)} */
2306 rop = (UNOP*)rop->op_first;
2308 /* @{$hash}{qw(keys here)} */
2309 if (rop->op_first->op_type == OP_SCOPE
2310 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2312 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2319 lexname = NULL; /* just to silence compiler warnings */
2320 fields = NULL; /* just to silence compiler warnings */
2324 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2325 SvPAD_TYPED(lexname))
2326 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2327 && isGV(*fields) && GvHV(*fields);
2329 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2331 if (key_op->op_type != OP_CONST)
2333 svp = cSVOPx_svp(key_op);
2335 /* Make the CONST have a shared SV */
2336 if ( !SvIsCOW_shared_hash(sv = *svp)
2337 && SvTYPE(sv) < SVt_PVMG
2342 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2343 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2344 SvREFCNT_dec_NN(sv);
2349 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2351 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
2352 "in variable %"PNf" of type %"HEKf,
2353 SVfARG(*svp), PNfARG(lexname),
2354 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2361 =for apidoc finalize_optree
2363 This function finalizes the optree. Should be called directly after
2364 the complete optree is built. It does some additional
2365 checking which can't be done in the normal ck_xxx functions and makes
2366 the tree thread-safe.
2371 Perl_finalize_optree(pTHX_ OP* o)
2373 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
2376 SAVEVPTR(PL_curcop);
2384 /* Relocate sv to the pad for thread safety.
2385 * Despite being a "constant", the SV is written to,
2386 * for reference counts, sv_upgrade() etc. */
2387 PERL_STATIC_INLINE void
2388 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
2391 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
2393 ix = pad_alloc(OP_CONST, SVf_READONLY);
2394 SvREFCNT_dec(PAD_SVl(ix));
2395 PAD_SETSV(ix, *svp);
2396 /* XXX I don't know how this isn't readonly already. */
2397 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
2405 S_finalize_op(pTHX_ OP* o)
2407 PERL_ARGS_ASSERT_FINALIZE_OP;
2410 switch (o->op_type) {
2413 PL_curcop = ((COP*)o); /* for warnings */
2416 if (OpHAS_SIBLING(o)) {
2417 OP *sib = OpSIBLING(o);
2418 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
2419 && ckWARN(WARN_EXEC)
2420 && OpHAS_SIBLING(sib))
2422 const OPCODE type = OpSIBLING(sib)->op_type;
2423 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
2424 const line_t oldline = CopLINE(PL_curcop);
2425 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
2426 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2427 "Statement unlikely to be reached");
2428 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2429 "\t(Maybe you meant system() when you said exec()?)\n");
2430 CopLINE_set(PL_curcop, oldline);
2437 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
2438 GV * const gv = cGVOPo_gv;
2439 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
2440 /* XXX could check prototype here instead of just carping */
2441 SV * const sv = sv_newmortal();
2442 gv_efullname3(sv, gv, NULL);
2443 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
2444 "%"SVf"() called too early to check prototype",
2451 if (cSVOPo->op_private & OPpCONST_STRICT)
2452 no_bareword_allowed(o);
2456 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
2461 /* Relocate all the METHOP's SVs to the pad for thread safety. */
2462 case OP_METHOD_NAMED:
2463 case OP_METHOD_SUPER:
2464 case OP_METHOD_REDIR:
2465 case OP_METHOD_REDIR_SUPER:
2466 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
2475 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
2478 rop = (UNOP*)((BINOP*)o)->op_first;
2483 S_scalar_slice_warning(aTHX_ o);
2487 kid = OpSIBLING(cLISTOPo->op_first);
2488 if (/* I bet there's always a pushmark... */
2489 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
2490 && OP_TYPE_ISNT_NN(kid, OP_CONST))
2495 key_op = (SVOP*)(kid->op_type == OP_CONST
2497 : OpSIBLING(kLISTOP->op_first));
2499 rop = (UNOP*)((LISTOP*)o)->op_last;
2502 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
2504 S_check_hash_fields_and_hekify(aTHX_ rop, key_op);
2508 S_scalar_slice_warning(aTHX_ o);
2512 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
2513 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
2520 if (o->op_flags & OPf_KIDS) {
2524 /* check that op_last points to the last sibling, and that
2525 * the last op_sibling field points back to the parent, and
2526 * that the only ops with KIDS are those which are entitled to
2528 U32 type = o->op_type;
2532 if (type == OP_NULL) {
2534 /* ck_glob creates a null UNOP with ex-type GLOB
2535 * (which is a list op. So pretend it wasn't a listop */
2536 if (type == OP_GLOB)
2539 family = PL_opargs[type] & OA_CLASS_MASK;
2541 has_last = ( family == OA_BINOP
2542 || family == OA_LISTOP
2543 || family == OA_PMOP
2544 || family == OA_LOOP
2546 assert( has_last /* has op_first and op_last, or ...
2547 ... has (or may have) op_first: */
2548 || family == OA_UNOP
2549 || family == OA_UNOP_AUX
2550 || family == OA_LOGOP
2551 || family == OA_BASEOP_OR_UNOP
2552 || family == OA_FILESTATOP
2553 || family == OA_LOOPEXOP
2554 || family == OA_METHOP
2555 /* I don't know why SASSIGN is tagged as OA_BASEOP - DAPM */
2556 || type == OP_SASSIGN
2557 || type == OP_CUSTOM
2558 || type == OP_NULL /* new_logop does this */
2561 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2562 # ifdef PERL_OP_PARENT
2563 if (!OpHAS_SIBLING(kid)) {
2565 assert(kid == cLISTOPo->op_last);
2566 assert(kid->op_sibling == o);
2569 if (OpHAS_SIBLING(kid)) {
2570 assert(!kid->op_lastsib);
2573 assert(kid->op_lastsib);
2575 assert(kid == cLISTOPo->op_last);
2581 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
2587 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
2589 Propagate lvalue ("modifiable") context to an op and its children.
2590 I<type> represents the context type, roughly based on the type of op that
2591 would do the modifying, although C<local()> is represented by OP_NULL,
2592 because it has no op type of its own (it is signalled by a flag on
2595 This function detects things that can't be modified, such as C<$x+1>, and
2596 generates errors for them. For example, C<$x+1 = 2> would cause it to be
2597 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
2599 It also flags things that need to behave specially in an lvalue context,
2600 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
2606 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
2609 PadnameLVALUE_on(pn);
2610 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
2613 assert(CvPADLIST(cv));
2615 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
2616 assert(PadnameLEN(pn));
2617 PadnameLVALUE_on(pn);
2622 S_vivifies(const OPCODE type)
2625 case OP_RV2AV: case OP_ASLICE:
2626 case OP_RV2HV: case OP_KVASLICE:
2627 case OP_RV2SV: case OP_HSLICE:
2628 case OP_AELEMFAST: case OP_KVHSLICE:
2637 S_lvref(pTHX_ OP *o, I32 type)
2641 switch (o->op_type) {
2643 for (kid = OpSIBLING(cUNOPo->op_first); kid;
2644 kid = OpSIBLING(kid))
2645 S_lvref(aTHX_ kid, type);
2650 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2651 o->op_flags |= OPf_STACKED;
2652 if (o->op_flags & OPf_PARENS) {
2653 if (o->op_private & OPpLVAL_INTRO) {
2654 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2655 "localized parenthesized array in list assignment"));
2659 CHANGE_TYPE(o, OP_LVAVREF);
2660 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
2661 o->op_flags |= OPf_MOD|OPf_REF;
2664 o->op_private |= OPpLVREF_AV;
2667 kid = cUNOPo->op_first;
2668 if (kid->op_type == OP_NULL)
2669 kid = cUNOPx(kUNOP->op_first->op_sibling)
2671 o->op_private = OPpLVREF_CV;
2672 if (kid->op_type == OP_GV)
2673 o->op_flags |= OPf_STACKED;
2674 else if (kid->op_type == OP_PADCV) {
2675 o->op_targ = kid->op_targ;
2677 op_free(cUNOPo->op_first);
2678 cUNOPo->op_first = NULL;
2679 o->op_flags &=~ OPf_KIDS;
2684 if (o->op_flags & OPf_PARENS) {
2686 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2687 "parenthesized hash in list assignment"));
2690 o->op_private |= OPpLVREF_HV;
2694 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2695 o->op_flags |= OPf_STACKED;
2698 if (o->op_flags & OPf_PARENS) goto parenhash;
2699 o->op_private |= OPpLVREF_HV;
2702 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2705 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2706 if (o->op_flags & OPf_PARENS) goto slurpy;
2707 o->op_private |= OPpLVREF_AV;
2711 o->op_private |= OPpLVREF_ELEM;
2712 o->op_flags |= OPf_STACKED;
2716 CHANGE_TYPE(o, OP_LVREFSLICE);
2717 o->op_private &= OPpLVAL_INTRO|OPpLVREF_ELEM;
2720 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2722 else if (!(o->op_flags & OPf_KIDS))
2724 if (o->op_targ != OP_LIST) {
2725 S_lvref(aTHX_ cBINOPo->op_first, type);
2730 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) {
2731 assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
2732 S_lvref(aTHX_ kid, type);
2736 if (o->op_flags & OPf_PARENS)
2741 /* diag_listed_as: Can't modify reference to %s in %s assignment */
2742 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
2743 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
2749 CHANGE_TYPE(o, OP_LVREF);
2751 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
2752 if (type == OP_ENTERLOOP)
2753 o->op_private |= OPpLVREF_ITER;
2757 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
2761 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
2764 if (!o || (PL_parser && PL_parser->error_count))
2767 if ((o->op_private & OPpTARGET_MY)
2768 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2773 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
2775 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
2777 switch (o->op_type) {
2782 if ((o->op_flags & OPf_PARENS))
2786 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
2787 !(o->op_flags & OPf_STACKED)) {
2788 CHANGE_TYPE(o, OP_RV2CV); /* entersub => rv2cv */
2789 assert(cUNOPo->op_first->op_type == OP_NULL);
2790 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
2793 else { /* lvalue subroutine call */
2794 o->op_private |= OPpLVAL_INTRO;
2795 PL_modcount = RETURN_UNLIMITED_NUMBER;
2796 if (type == OP_GREPSTART || type == OP_ENTERSUB
2797 || type == OP_REFGEN || type == OP_LEAVESUBLV) {
2798 /* Potential lvalue context: */
2799 o->op_private |= OPpENTERSUB_INARGS;
2802 else { /* Compile-time error message: */
2803 OP *kid = cUNOPo->op_first;
2807 if (kid->op_type != OP_PUSHMARK) {
2808 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
2810 "panic: unexpected lvalue entersub "
2811 "args: type/targ %ld:%"UVuf,
2812 (long)kid->op_type, (UV)kid->op_targ);
2813 kid = kLISTOP->op_first;
2815 while (OpHAS_SIBLING(kid))
2816 kid = OpSIBLING(kid);
2817 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
2818 break; /* Postpone until runtime */
2821 kid = kUNOP->op_first;
2822 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
2823 kid = kUNOP->op_first;
2824 if (kid->op_type == OP_NULL)
2826 "Unexpected constant lvalue entersub "
2827 "entry via type/targ %ld:%"UVuf,
2828 (long)kid->op_type, (UV)kid->op_targ);
2829 if (kid->op_type != OP_GV) {
2836 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
2837 ? MUTABLE_CV(SvRV(gv))
2848 if (flags & OP_LVALUE_NO_CROAK) return NULL;
2849 /* grep, foreach, subcalls, refgen */
2850 if (type == OP_GREPSTART || type == OP_ENTERSUB
2851 || type == OP_REFGEN || type == OP_LEAVESUBLV)
2853 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2854 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
2856 : (o->op_type == OP_ENTERSUB
2857 ? "non-lvalue subroutine call"
2859 type ? PL_op_desc[type] : "local"));
2872 case OP_RIGHT_SHIFT:
2881 if (!(o->op_flags & OPf_STACKED))
2887 if (o->op_flags & OPf_STACKED) {
2891 if (!(o->op_private & OPpREPEAT_DOLIST))
2894 const I32 mods = PL_modcount;
2895 modkids(cBINOPo->op_first, type);
2896 if (type != OP_AASSIGN)
2898 kid = cBINOPo->op_last;
2899 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
2900 const IV iv = SvIV(kSVOP_sv);
2901 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
2903 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
2906 PL_modcount = RETURN_UNLIMITED_NUMBER;
2912 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2913 op_lvalue(kid, type);
2918 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
2919 PL_modcount = RETURN_UNLIMITED_NUMBER;
2920 return o; /* Treat \(@foo) like ordinary list. */
2924 if (scalar_mod_type(o, type))
2926 ref(cUNOPo->op_first, o->op_type);
2933 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
2934 if (type == OP_LEAVESUBLV && (
2935 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
2936 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2938 o->op_private |= OPpMAYBE_LVSUB;
2942 PL_modcount = RETURN_UNLIMITED_NUMBER;
2946 if (type == OP_LEAVESUBLV)
2947 o->op_private |= OPpMAYBE_LVSUB;
2950 PL_hints |= HINT_BLOCK_SCOPE;
2951 if (type == OP_LEAVESUBLV)
2952 o->op_private |= OPpMAYBE_LVSUB;
2956 ref(cUNOPo->op_first, o->op_type);
2960 PL_hints |= HINT_BLOCK_SCOPE;
2970 case OP_AELEMFAST_LEX:
2977 PL_modcount = RETURN_UNLIMITED_NUMBER;
2978 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
2979 return o; /* Treat \(@foo) like ordinary list. */
2980 if (scalar_mod_type(o, type))
2982 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2983 && type == OP_LEAVESUBLV)
2984 o->op_private |= OPpMAYBE_LVSUB;
2988 if (!type) /* local() */
2989 Perl_croak(aTHX_ "Can't localize lexical variable %"PNf,
2990 PNfARG(PAD_COMPNAME(o->op_targ)));
2991 if (!(o->op_private & OPpLVAL_INTRO)
2992 || ( type != OP_SASSIGN && type != OP_AASSIGN
2993 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
2994 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
3003 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
3007 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
3013 if (type == OP_LEAVESUBLV)
3014 o->op_private |= OPpMAYBE_LVSUB;
3015 if (o->op_flags & OPf_KIDS)
3016 op_lvalue(OpSIBLING(cBINOPo->op_first), type);
3021 ref(cBINOPo->op_first, o->op_type);
3022 if (type == OP_ENTERSUB &&
3023 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
3024 o->op_private |= OPpLVAL_DEFER;
3025 if (type == OP_LEAVESUBLV)
3026 o->op_private |= OPpMAYBE_LVSUB;
3033 o->op_private |= OPpLVALUE;
3039 if (o->op_flags & OPf_KIDS)
3040 op_lvalue(cLISTOPo->op_last, type);
3045 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
3047 else if (!(o->op_flags & OPf_KIDS))
3049 if (o->op_targ != OP_LIST) {
3050 op_lvalue(cBINOPo->op_first, type);
3056 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3057 /* elements might be in void context because the list is
3058 in scalar context or because they are attribute sub calls */
3059 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
3060 op_lvalue(kid, type);
3068 if (type == OP_LEAVESUBLV
3069 || !S_vivifies(cLOGOPo->op_first->op_type))
3070 op_lvalue(cLOGOPo->op_first, type);
3071 if (type == OP_LEAVESUBLV
3072 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
3073 op_lvalue(OpSIBLING(cLOGOPo->op_first), type);
3077 if (type != OP_AASSIGN && type != OP_SASSIGN
3078 && type != OP_ENTERLOOP)
3080 /* Don’t bother applying lvalue context to the ex-list. */
3081 kid = cUNOPx(cUNOPo->op_first)->op_first;
3082 assert (!OpHAS_SIBLING(kid));
3085 if (type != OP_AASSIGN) goto nomod;
3086 kid = cUNOPo->op_first;
3089 const U8 ec = PL_parser ? PL_parser->error_count : 0;
3090 S_lvref(aTHX_ kid, type);
3091 if (!PL_parser || PL_parser->error_count == ec) {
3092 if (!FEATURE_REFALIASING_IS_ENABLED)
3094 "Experimental aliasing via reference not enabled");
3095 Perl_ck_warner_d(aTHX_
3096 packWARN(WARN_EXPERIMENTAL__REFALIASING),
3097 "Aliasing via reference is experimental");
3100 if (o->op_type == OP_REFGEN)
3101 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
3106 kid = cLISTOPo->op_first;
3107 if (kid && kid->op_type == OP_PUSHRE &&
3109 || o->op_flags & OPf_STACKED
3111 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
3113 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
3116 /* This is actually @array = split. */
3117 PL_modcount = RETURN_UNLIMITED_NUMBER;
3123 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
3127 /* [20011101.069] File test operators interpret OPf_REF to mean that
3128 their argument is a filehandle; thus \stat(".") should not set
3130 if (type == OP_REFGEN &&
3131 PL_check[o->op_type] == Perl_ck_ftst)
3134 if (type != OP_LEAVESUBLV)
3135 o->op_flags |= OPf_MOD;
3137 if (type == OP_AASSIGN || type == OP_SASSIGN)
3138 o->op_flags |= OPf_SPECIAL|OPf_REF;
3139 else if (!type) { /* local() */
3142 o->op_private |= OPpLVAL_INTRO;
3143 o->op_flags &= ~OPf_SPECIAL;
3144 PL_hints |= HINT_BLOCK_SCOPE;
3149 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
3150 "Useless localization of %s", OP_DESC(o));
3153 else if (type != OP_GREPSTART && type != OP_ENTERSUB
3154 && type != OP_LEAVESUBLV)
3155 o->op_flags |= OPf_REF;
3160 S_scalar_mod_type(const OP *o, I32 type)
3165 if (o && o->op_type == OP_RV2GV)
3189 case OP_RIGHT_SHIFT:
3210 S_is_handle_constructor(const OP *o, I32 numargs)
3212 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
3214 switch (o->op_type) {
3222 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
3235 S_refkids(pTHX_ OP *o, I32 type)
3237 if (o && o->op_flags & OPf_KIDS) {
3239 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3246 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
3251 PERL_ARGS_ASSERT_DOREF;
3253 if (!o || (PL_parser && PL_parser->error_count))
3256 switch (o->op_type) {
3258 if ((type == OP_EXISTS || type == OP_DEFINED) &&
3259 !(o->op_flags & OPf_STACKED)) {
3260 CHANGE_TYPE(o, OP_RV2CV); /* entersub => rv2cv */
3261 assert(cUNOPo->op_first->op_type == OP_NULL);
3262 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
3263 o->op_flags |= OPf_SPECIAL;
3265 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
3266 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3267 : type == OP_RV2HV ? OPpDEREF_HV
3269 o->op_flags |= OPf_MOD;
3275 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
3276 doref(kid, type, set_op_ref);
3279 if (type == OP_DEFINED)
3280 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3281 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3284 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3285 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3286 : type == OP_RV2HV ? OPpDEREF_HV
3288 o->op_flags |= OPf_MOD;
3295 o->op_flags |= OPf_REF;
3298 if (type == OP_DEFINED)
3299 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3300 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3306 o->op_flags |= OPf_REF;
3311 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
3313 doref(cBINOPo->op_first, type, set_op_ref);
3317 doref(cBINOPo->op_first, o->op_type, set_op_ref);
3318 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3319 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3320 : type == OP_RV2HV ? OPpDEREF_HV
3322 o->op_flags |= OPf_MOD;
3332 if (!(o->op_flags & OPf_KIDS))
3334 doref(cLISTOPo->op_last, type, set_op_ref);
3344 S_dup_attrlist(pTHX_ OP *o)
3348 PERL_ARGS_ASSERT_DUP_ATTRLIST;
3350 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
3351 * where the first kid is OP_PUSHMARK and the remaining ones
3352 * are OP_CONST. We need to push the OP_CONST values.
3354 if (o->op_type == OP_CONST)
3355 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
3357 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
3359 for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) {
3360 if (o->op_type == OP_CONST)
3361 rop = op_append_elem(OP_LIST, rop,
3362 newSVOP(OP_CONST, o->op_flags,
3363 SvREFCNT_inc_NN(cSVOPo->op_sv)));
3370 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
3372 SV * const stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
3374 PERL_ARGS_ASSERT_APPLY_ATTRS;
3376 /* fake up C<use attributes $pkg,$rv,@attrs> */
3378 #define ATTRSMODULE "attributes"
3379 #define ATTRSMODULE_PM "attributes.pm"
3381 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3382 newSVpvs(ATTRSMODULE),
3384 op_prepend_elem(OP_LIST,
3385 newSVOP(OP_CONST, 0, stashsv),
3386 op_prepend_elem(OP_LIST,
3387 newSVOP(OP_CONST, 0,
3389 dup_attrlist(attrs))));
3393 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
3395 OP *pack, *imop, *arg;
3396 SV *meth, *stashsv, **svp;
3398 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
3403 assert(target->op_type == OP_PADSV ||
3404 target->op_type == OP_PADHV ||
3405 target->op_type == OP_PADAV);
3407 /* Ensure that attributes.pm is loaded. */
3408 /* Don't force the C<use> if we don't need it. */
3409 svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
3410 if (svp && *svp != &PL_sv_undef)
3411 NOOP; /* already in %INC */
3413 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
3414 newSVpvs(ATTRSMODULE), NULL);
3416 /* Need package name for method call. */
3417 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
3419 /* Build up the real arg-list. */
3420 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
3422 arg = newOP(OP_PADSV, 0);
3423 arg->op_targ = target->op_targ;
3424 arg = op_prepend_elem(OP_LIST,
3425 newSVOP(OP_CONST, 0, stashsv),
3426 op_prepend_elem(OP_LIST,
3427 newUNOP(OP_REFGEN, 0,
3428 op_lvalue(arg, OP_REFGEN)),
3429 dup_attrlist(attrs)));
3431 /* Fake up a method call to import */
3432 meth = newSVpvs_share("import");
3433 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
3434 op_append_elem(OP_LIST,
3435 op_prepend_elem(OP_LIST, pack, arg),
3436 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
3438 /* Combine the ops. */
3439 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
3443 =notfor apidoc apply_attrs_string
3445 Attempts to apply a list of attributes specified by the C<attrstr> and
3446 C<len> arguments to the subroutine identified by the C<cv> argument which
3447 is expected to be associated with the package identified by the C<stashpv>
3448 argument (see L<attributes>). It gets this wrong, though, in that it
3449 does not correctly identify the boundaries of the individual attribute
3450 specifications within C<attrstr>. This is not really intended for the
3451 public API, but has to be listed here for systems such as AIX which
3452 need an explicit export list for symbols. (It's called from XS code
3453 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
3454 to respect attribute syntax properly would be welcome.
3460 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
3461 const char *attrstr, STRLEN len)
3465 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
3468 len = strlen(attrstr);
3472 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
3474 const char * const sstr = attrstr;
3475 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
3476 attrs = op_append_elem(OP_LIST, attrs,
3477 newSVOP(OP_CONST, 0,
3478 newSVpvn(sstr, attrstr-sstr)));
3482 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3483 newSVpvs(ATTRSMODULE),
3484 NULL, op_prepend_elem(OP_LIST,
3485 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
3486 op_prepend_elem(OP_LIST,
3487 newSVOP(OP_CONST, 0,
3488 newRV(MUTABLE_SV(cv))),
3493 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name)
3495 OP *new_proto = NULL;
3500 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
3506 if (o->op_type == OP_CONST) {
3507 pv = SvPV(cSVOPo_sv, pvlen);
3508 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3509 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3510 SV ** const tmpo = cSVOPx_svp(o);
3511 SvREFCNT_dec(cSVOPo_sv);
3516 } else if (o->op_type == OP_LIST) {
3518 assert(o->op_flags & OPf_KIDS);
3519 lasto = cLISTOPo->op_first;
3520 assert(lasto->op_type == OP_PUSHMARK);
3521 for (o = OpSIBLING(lasto); o; o = OpSIBLING(o)) {
3522 if (o->op_type == OP_CONST) {
3523 pv = SvPV(cSVOPo_sv, pvlen);
3524 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3525 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3526 SV ** const tmpo = cSVOPx_svp(o);
3527 SvREFCNT_dec(cSVOPo_sv);
3529 if (new_proto && ckWARN(WARN_MISC)) {
3531 const char * newp = SvPV(cSVOPo_sv, new_len);
3532 Perl_warner(aTHX_ packWARN(WARN_MISC),
3533 "Attribute prototype(%"UTF8f") discards earlier prototype attribute in same sub",
3534 UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
3540 /* excise new_proto from the list */
3541 op_sibling_splice(*attrs, lasto, 1, NULL);
3548 /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
3549 would get pulled in with no real need */
3550 if (!OpHAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
3559 svname = sv_newmortal();
3560 gv_efullname3(svname, name, NULL);
3562 else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
3563 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
3565 svname = (SV *)name;
3566 if (ckWARN(WARN_ILLEGALPROTO))
3567 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE);
3568 if (*proto && ckWARN(WARN_PROTOTYPE)) {
3569 STRLEN old_len, new_len;
3570 const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
3571 const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
3573 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3574 "Prototype '%"UTF8f"' overridden by attribute 'prototype(%"UTF8f")'"
3576 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
3577 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
3587 S_cant_declare(pTHX_ OP *o)
3589 if (o->op_type == OP_NULL
3590 && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
3591 o = cUNOPo->op_first;
3592 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
3593 o->op_type == OP_NULL
3594 && o->op_flags & OPf_SPECIAL
3597 PL_parser->in_my == KEY_our ? "our" :
3598 PL_parser->in_my == KEY_state ? "state" :
3603 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
3606 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
3608 PERL_ARGS_ASSERT_MY_KID;
3610 if (!o || (PL_parser && PL_parser->error_count))
3615 if (type == OP_LIST) {
3617 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3618 my_kid(kid, attrs, imopsp);
3620 } else if (type == OP_UNDEF || type == OP_STUB) {
3622 } else if (type == OP_RV2SV || /* "our" declaration */
3624 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
3625 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
3626 S_cant_declare(aTHX_ o);
3628 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
3630 PL_parser->in_my = FALSE;
3631 PL_parser->in_my_stash = NULL;
3632 apply_attrs(GvSTASH(gv),
3633 (type == OP_RV2SV ? GvSV(gv) :
3634 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
3635 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
3638 o->op_private |= OPpOUR_INTRO;
3641 else if (type != OP_PADSV &&
3644 type != OP_PUSHMARK)
3646 S_cant_declare(aTHX_ o);
3649 else if (attrs && type != OP_PUSHMARK) {
3653 PL_parser->in_my = FALSE;
3654 PL_parser->in_my_stash = NULL;
3656 /* check for C<my Dog $spot> when deciding package */
3657 stash = PAD_COMPNAME_TYPE(o->op_targ);
3659 stash = PL_curstash;
3660 apply_attrs_my(stash, o, attrs, imopsp);
3662 o->op_flags |= OPf_MOD;
3663 o->op_private |= OPpLVAL_INTRO;
3665 o->op_private |= OPpPAD_STATE;
3670 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
3673 int maybe_scalar = 0;
3675 PERL_ARGS_ASSERT_MY_ATTRS;
3677 /* [perl #17376]: this appears to be premature, and results in code such as
3678 C< our(%x); > executing in list mode rather than void mode */
3680 if (o->op_flags & OPf_PARENS)
3690 o = my_kid(o, attrs, &rops);
3692 if (maybe_scalar && o->op_type == OP_PADSV) {
3693 o = scalar(op_append_list(OP_LIST, rops, o));
3694 o->op_private |= OPpLVAL_INTRO;
3697 /* The listop in rops might have a pushmark at the beginning,
3698 which will mess up list assignment. */
3699 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
3700 if (rops->op_type == OP_LIST &&
3701 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
3703 OP * const pushmark = lrops->op_first;
3704 /* excise pushmark */
3705 op_sibling_splice(rops, NULL, 1, NULL);
3708 o = op_append_list(OP_LIST, o, rops);
3711 PL_parser->in_my = FALSE;
3712 PL_parser->in_my_stash = NULL;
3717 Perl_sawparens(pTHX_ OP *o)
3719 PERL_UNUSED_CONTEXT;
3721 o->op_flags |= OPf_PARENS;
3726 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
3730 const OPCODE ltype = left->op_type;
3731 const OPCODE rtype = right->op_type;
3733 PERL_ARGS_ASSERT_BIND_MATCH;
3735 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
3736 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
3738 const char * const desc
3740 rtype == OP_SUBST || rtype == OP_TRANS
3741 || rtype == OP_TRANSR
3743 ? (int)rtype : OP_MATCH];
3744 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
3746 S_op_varname(aTHX_ left);
3748 Perl_warner(aTHX_ packWARN(WARN_MISC),
3749 "Applying %s to %"SVf" will act on scalar(%"SVf")",
3750 desc, SVfARG(name), SVfARG(name));
3752 const char * const sample = (isary
3753 ? "@array" : "%hash");
3754 Perl_warner(aTHX_ packWARN(WARN_MISC),
3755 "Applying %s to %s will act on scalar(%s)",
3756 desc, sample, sample);
3760 if (rtype == OP_CONST &&
3761 cSVOPx(right)->op_private & OPpCONST_BARE &&
3762 cSVOPx(right)->op_private & OPpCONST_STRICT)
3764 no_bareword_allowed(right);
3767 /* !~ doesn't make sense with /r, so error on it for now */
3768 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
3770 /* diag_listed_as: Using !~ with %s doesn't make sense */
3771 yyerror("Using !~ with s///r doesn't make sense");
3772 if (rtype == OP_TRANSR && type == OP_NOT)
3773 /* diag_listed_as: Using !~ with %s doesn't make sense */
3774 yyerror("Using !~ with tr///r doesn't make sense");
3776 ismatchop = (rtype == OP_MATCH ||
3777 rtype == OP_SUBST ||
3778 rtype == OP_TRANS || rtype == OP_TRANSR)
3779 && !(right->op_flags & OPf_SPECIAL);
3780 if (ismatchop && right->op_private & OPpTARGET_MY) {
3782 right->op_private &= ~OPpTARGET_MY;
3784 if (!(right->op_flags & OPf_STACKED) && !right->op_targ && ismatchop) {
3785 if (left->op_type == OP_PADSV
3786 && !(left->op_private & OPpLVAL_INTRO))
3788 right->op_targ = left->op_targ;
3793 right->op_flags |= OPf_STACKED;
3794 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
3795 ! (rtype == OP_TRANS &&
3796 right->op_private & OPpTRANS_IDENTICAL) &&
3797 ! (rtype == OP_SUBST &&
3798 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
3799 left = op_lvalue(left, rtype);
3800 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
3801 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
3803 o = op_prepend_elem(rtype, scalar(left), right);
3806 return newUNOP(OP_NOT, 0, scalar(o));
3810 return bind_match(type, left,
3811 pmruntime(newPMOP(OP_MATCH, 0), right, NULL, 0, 0));
3815 Perl_invert(pTHX_ OP *o)
3819 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
3823 =for apidoc Amx|OP *|op_scope|OP *o
3825 Wraps up an op tree with some additional ops so that at runtime a dynamic
3826 scope will be created. The original ops run in the new dynamic scope,
3827 and then, provided that they exit normally, the scope will be unwound.
3828 The additional ops used to create and unwind the dynamic scope will
3829 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
3830 instead if the ops are simple enough to not need the full dynamic scope
3837 Perl_op_scope(pTHX_ OP *o)
3841 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
3842 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
3843 CHANGE_TYPE(o, OP_LEAVE);
3845 else if (o->op_type == OP_LINESEQ) {
3847 CHANGE_TYPE(o, OP_SCOPE);
3848 kid = ((LISTOP*)o)->op_first;
3849 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
3852 /* The following deals with things like 'do {1 for 1}' */
3853 kid = OpSIBLING(kid);
3855 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
3860 o = newLISTOP(OP_SCOPE, 0, o, NULL);
3866 Perl_op_unscope(pTHX_ OP *o)
3868 if (o && o->op_type == OP_LINESEQ) {
3869 OP *kid = cLISTOPo->op_first;
3870 for(; kid; kid = OpSIBLING(kid))
3871 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
3878 =for apidoc Am|int|block_start|int full
3880 Handles compile-time scope entry.
3881 Arranges for hints to be restored on block
3882 exit and also handles pad sequence numbers to make lexical variables scope
3883 right. Returns a savestack index for use with C<block_end>.
3889 Perl_block_start(pTHX_ int full)
3891 const int retval = PL_savestack_ix;
3893 PL_compiling.cop_seq = PL_cop_seqmax;
3895 pad_block_start(full);
3897 PL_hints &= ~HINT_BLOCK_SCOPE;
3898 SAVECOMPILEWARNINGS();
3899 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
3900 SAVEI32(PL_compiling.cop_seq);
3901 PL_compiling.cop_seq = 0;
3903 CALL_BLOCK_HOOKS(bhk_start, full);
3909 =for apidoc Am|OP *|block_end|I32 floor|OP *seq
3911 Handles compile-time scope exit. I<floor>
3912 is the savestack index returned by
3913 C<block_start>, and I<seq> is the body of the block. Returns the block,
3920 Perl_block_end(pTHX_ I32 floor, OP *seq)
3922 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
3923 OP* retval = scalarseq(seq);
3926 /* XXX Is the null PL_parser check necessary here? */
3927 assert(PL_parser); /* Let’s find out under debugging builds. */
3928 if (PL_parser && PL_parser->parsed_sub) {
3929 o = newSTATEOP(0, NULL, NULL);
3931 retval = op_append_elem(OP_LINESEQ, retval, o);
3934 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
3938 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
3942 /* pad_leavemy has created a sequence of introcv ops for all my
3943 subs declared in the block. We have to replicate that list with
3944 clonecv ops, to deal with this situation:
3949 sub s1 { state sub foo { \&s2 } }
3952 Originally, I was going to have introcv clone the CV and turn
3953 off the stale flag. Since &s1 is declared before &s2, the
3954 introcv op for &s1 is executed (on sub entry) before the one for
3955 &s2. But the &foo sub inside &s1 (which is cloned when &s1 is
3956 cloned, since it is a state sub) closes over &s2 and expects
3957 to see it in its outer CV’s pad. If the introcv op clones &s1,
3958 then &s2 is still marked stale. Since &s1 is not active, and
3959 &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia-
3960 ble will not stay shared’ warning. Because it is the same stub
3961 that will be used when the introcv op for &s2 is executed, clos-
3962 ing over it is safe. Hence, we have to turn off the stale flag
3963 on all lexical subs in the block before we clone any of them.
3964 Hence, having introcv clone the sub cannot work. So we create a
3965 list of ops like this:
3989 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
3990 OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
3991 for (;; kid = OpSIBLING(kid)) {
3992 OP *newkid = newOP(OP_CLONECV, 0);
3993 newkid->op_targ = kid->op_targ;
3994 o = op_append_elem(OP_LINESEQ, o, newkid);
3995 if (kid == last) break;
3997 retval = op_prepend_elem(OP_LINESEQ, o, retval);
4000 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
4006 =head1 Compile-time scope hooks
4008 =for apidoc Aox||blockhook_register
4010 Register a set of hooks to be called when the Perl lexical scope changes
4011 at compile time. See L<perlguts/"Compile-time scope hooks">.
4017 Perl_blockhook_register(pTHX_ BHK *hk)
4019 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
4021 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
4025 Perl_newPROG(pTHX_ OP *o)
4027 PERL_ARGS_ASSERT_NEWPROG;
4034 PL_eval_root = newUNOP(OP_LEAVEEVAL,
4035 ((PL_in_eval & EVAL_KEEPERR)
4036 ? OPf_SPECIAL : 0), o);
4038 cx = &cxstack[cxstack_ix];
4039 assert(CxTYPE(cx) == CXt_EVAL);
4041 if ((cx->blk_gimme & G_WANT) == G_VOID)
4042 scalarvoid(PL_eval_root);
4043 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
4046 scalar(PL_eval_root);
4048 PL_eval_start = op_linklist(PL_eval_root);
4049 PL_eval_root->op_private |= OPpREFCOUNTED;
4050 OpREFCNT_set(PL_eval_root, 1);
4051 PL_eval_root->op_next = 0;
4052 i = PL_savestack_ix;
4055 CALL_PEEP(PL_eval_start);
4056 finalize_optree(PL_eval_root);
4057 S_prune_chain_head(&PL_eval_start);
4059 PL_savestack_ix = i;
4062 if (o->op_type == OP_STUB) {
4063 /* This block is entered if nothing is compiled for the main
4064 program. This will be the case for an genuinely empty main
4065 program, or one which only has BEGIN blocks etc, so already
4068 Historically (5.000) the guard above was !o. However, commit
4069 f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
4070 c71fccf11fde0068, changed perly.y so that newPROG() is now
4071 called with the output of block_end(), which returns a new
4072 OP_STUB for the case of an empty optree. ByteLoader (and
4073 maybe other things) also take this path, because they set up
4074 PL_main_start and PL_main_root directly, without generating an
4077 If the parsing the main program aborts (due to parse errors,
4078 or due to BEGIN or similar calling exit), then newPROG()
4079 isn't even called, and hence this code path and its cleanups
4080 are skipped. This shouldn't make a make a difference:
4081 * a non-zero return from perl_parse is a failure, and
4082 perl_destruct() should be called immediately.
4083 * however, if exit(0) is called during the parse, then
4084 perl_parse() returns 0, and perl_run() is called. As
4085 PL_main_start will be NULL, perl_run() will return
4086 promptly, and the exit code will remain 0.
4089 PL_comppad_name = 0;
4091 S_op_destroy(aTHX_ o);
4094 PL_main_root = op_scope(sawparens(scalarvoid(o)));
4095 PL_curcop = &PL_compiling;
4096 PL_main_start = LINKLIST(PL_main_root);
4097 PL_main_root->op_private |= OPpREFCOUNTED;
4098 OpREFCNT_set(PL_main_root, 1);
4099 PL_main_root->op_next = 0;
4100 CALL_PEEP(PL_main_start);
4101 finalize_optree(PL_main_root);
4102 S_prune_chain_head(&PL_main_start);
4103 cv_forget_slab(PL_compcv);
4106 /* Register with debugger */
4108 CV * const cv = get_cvs("DB::postponed", 0);
4112 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
4114 call_sv(MUTABLE_SV(cv), G_DISCARD);
4121 Perl_localize(pTHX_ OP *o, I32 lex)
4123 PERL_ARGS_ASSERT_LOCALIZE;
4125 if (o->op_flags & OPf_PARENS)
4126 /* [perl #17376]: this appears to be premature, and results in code such as
4127 C< our(%x); > executing in list mode rather than void mode */
4134 if ( PL_parser->bufptr > PL_parser->oldbufptr
4135 && PL_parser->bufptr[-1] == ','
4136 && ckWARN(WARN_PARENTHESIS))
4138 char *s = PL_parser->bufptr;
4141 /* some heuristics to detect a potential error */
4142 while (*s && (strchr(", \t\n", *s)))
4146 if (*s && strchr("@$%*", *s) && *++s
4147 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
4150 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
4152 while (*s && (strchr(", \t\n", *s)))
4158 if (sigil && (*s == ';' || *s == '=')) {
4159 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
4160 "Parentheses missing around \"%s\" list",
4162 ? (PL_parser->in_my == KEY_our
4164 : PL_parser->in_my == KEY_state
4174 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
4175 PL_parser->in_my = FALSE;
4176 PL_parser->in_my_stash = NULL;
4181 Perl_jmaybe(pTHX_ OP *o)
4183 PERL_ARGS_ASSERT_JMAYBE;
4185 if (o->op_type == OP_LIST) {
4187 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
4188 o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
4193 PERL_STATIC_INLINE OP *
4194 S_op_std_init(pTHX_ OP *o)
4196 I32 type = o->op_type;
4198 PERL_ARGS_ASSERT_OP_STD_INIT;
4200 if (PL_opargs[type] & OA_RETSCALAR)
4202 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
4203 o->op_targ = pad_alloc(type, SVs_PADTMP);
4208 PERL_STATIC_INLINE OP *
4209 S_op_integerize(pTHX_ OP *o)
4211 I32 type = o->op_type;
4213 PERL_ARGS_ASSERT_OP_INTEGERIZE;
4215 /* integerize op. */
4216 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
4219 o->op_ppaddr = PL_ppaddr[++(o->op_type)];
4222 if (type == OP_NEGATE)
4223 /* XXX might want a ck_negate() for this */
4224 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
4230 S_fold_constants(pTHX_ OP *o)
4235 VOL I32 type = o->op_type;
4241 SV * const oldwarnhook = PL_warnhook;
4242 SV * const olddiehook = PL_diehook;
4244 U8 oldwarn = PL_dowarn;
4247 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
4249 if (!(PL_opargs[type] & OA_FOLDCONST))
4258 #ifdef USE_LOCALE_CTYPE
4259 if (IN_LC_COMPILETIME(LC_CTYPE))
4268 #ifdef USE_LOCALE_COLLATE
4269 if (IN_LC_COMPILETIME(LC_COLLATE))
4274 /* XXX what about the numeric ops? */
4275 #ifdef USE_LOCALE_NUMERIC
4276 if (IN_LC_COMPILETIME(LC_NUMERIC))
4281 if (!OpHAS_SIBLING(cLISTOPo->op_first)
4282 || OpSIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
4285 SV * const sv = cSVOPx_sv(OpSIBLING(cLISTOPo->op_first));
4286 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
4288 const char *s = SvPVX_const(sv);
4289 while (s < SvEND(sv)) {
4290 if (isALPHA_FOLD_EQ(*s, 'p')) goto nope;
4297 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
4300 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
4301 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
4305 if (PL_parser && PL_parser->error_count)
4306 goto nope; /* Don't try to run w/ errors */
4308 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4309 const OPCODE type = curop->op_type;
4310 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
4312 type != OP_SCALAR &&
4314 type != OP_PUSHMARK)
4320 curop = LINKLIST(o);
4321 old_next = o->op_next;
4325 oldscope = PL_scopestack_ix;
4326 create_eval_scope(G_FAKINGEVAL);
4328 /* Verify that we don't need to save it: */
4329 assert(PL_curcop == &PL_compiling);
4330 StructCopy(&PL_compiling, ¬_compiling, COP);
4331 PL_curcop = ¬_compiling;
4332 /* The above ensures that we run with all the correct hints of the
4333 currently compiling COP, but that IN_PERL_RUNTIME is true. */
4334 assert(IN_PERL_RUNTIME);
4335 PL_warnhook = PERL_WARNHOOK_FATAL;
4339 /* Effective $^W=1. */
4340 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
4341 PL_dowarn |= G_WARN_ON;
4346 sv = *(PL_stack_sp--);
4347 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
4348 pad_swipe(o->op_targ, FALSE);
4350 else if (SvTEMP(sv)) { /* grab mortal temp? */
4351 SvREFCNT_inc_simple_void(sv);
4354 else { assert(SvIMMORTAL(sv)); }
4357 /* Something tried to die. Abandon constant folding. */
4358 /* Pretend the error never happened. */
4360 o->op_next = old_next;
4364 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
4365 PL_warnhook = oldwarnhook;
4366 PL_diehook = olddiehook;
4367 /* XXX note that this croak may fail as we've already blown away
4368 * the stack - eg any nested evals */
4369 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
4372 PL_dowarn = oldwarn;
4373 PL_warnhook = oldwarnhook;
4374 PL_diehook = olddiehook;
4375 PL_curcop = &PL_compiling;
4377 if (PL_scopestack_ix > oldscope)
4378 delete_eval_scope();
4383 /* OP_STRINGIFY and constant folding are used to implement qq.
4384 Here the constant folding is an implementation detail that we
4385 want to hide. If the stringify op is itself already marked
4386 folded, however, then it is actually a folded join. */
4387 is_stringify = type == OP_STRINGIFY && !o->op_folded;
4392 else if (!SvIMMORTAL(sv)) {
4396 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
4397 if (!is_stringify) newop->op_folded = 1;
4405 S_gen_constant_list(pTHX_ OP *o)
4409 const SSize_t oldtmps_floor = PL_tmps_floor;
4414 if (PL_parser && PL_parser->error_count)
4415 return o; /* Don't attempt to run with errors */
4417 curop = LINKLIST(o);
4420 S_prune_chain_head(&curop);
4422 Perl_pp_pushmark(aTHX);
4425 assert (!(curop->op_flags & OPf_SPECIAL));
4426 assert(curop->op_type == OP_RANGE);
4427 Perl_pp_anonlist(aTHX);
4428 PL_tmps_floor = oldtmps_floor;
4430 CHANGE_TYPE(o, OP_RV2AV);
4431 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
4432 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
4433 o->op_opt = 0; /* needs to be revisited in rpeep() */
4434 av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
4436 /* replace subtree with an OP_CONST */
4437 curop = ((UNOP*)o)->op_first;
4438 op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
4441 if (AvFILLp(av) != -1)
4442 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
4445 SvREADONLY_on(*svp);
4452 =head1 Optree Manipulation Functions
4455 /* List constructors */
4458 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
4460 Append an item to the list of ops contained directly within a list-type
4461 op, returning the lengthened list. I<first> is the list-type op,
4462 and I<last> is the op to append to the list. I<optype> specifies the
4463 intended opcode for the list. If I<first> is not already a list of the
4464 right type, it will be upgraded into one. If either I<first> or I<last>
4465 is null, the other is returned unchanged.
4471 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
4479 if (first->op_type != (unsigned)type
4480 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
4482 return newLISTOP(type, 0, first, last);
4485 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
4486 first->op_flags |= OPf_KIDS;
4491 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
4493 Concatenate the lists of ops contained directly within two list-type ops,
4494 returning the combined list. I<first> and I<last> are the list-type ops
4495 to concatenate. I<optype> specifies the intended opcode for the list.
4496 If either I<first> or I<last> is not already a list of the right type,
4497 it will be upgraded into one. If either I<first> or I<last> is null,
4498 the other is returned unchanged.
4504 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
4512 if (first->op_type != (unsigned)type)
4513 return op_prepend_elem(type, first, last);
4515 if (last->op_type != (unsigned)type)
4516 return op_append_elem(type, first, last);
4518 ((LISTOP*)first)->op_last->op_lastsib = 0;
4519 OpSIBLING_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first);
4520 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
4521 ((LISTOP*)first)->op_last->op_lastsib = 1;
4522 #ifdef PERL_OP_PARENT
4523 ((LISTOP*)first)->op_last->op_sibling = first;
4525 first->op_flags |= (last->op_flags & OPf_KIDS);
4528 S_op_destroy(aTHX_ last);
4534 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
4536 Prepend an item to the list of ops contained directly within a list-type
4537 op, returning the lengthened list. I<first> is the op to prepend to the
4538 list, and I<last> is the list-type op. I<optype> specifies the intended
4539 opcode for the list. If I<last> is not already a list of the right type,
4540 it will be upgraded into one. If either I<first> or I<last> is null,
4541 the other is returned unchanged.
4547 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
4555 if (last->op_type == (unsigned)type) {
4556 if (type == OP_LIST) { /* already a PUSHMARK there */
4557 /* insert 'first' after pushmark */
4558 op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first);
4559 if (!(first->op_flags & OPf_PARENS))
4560 last->op_flags &= ~OPf_PARENS;
4563 op_sibling_splice(last, NULL, 0, first);
4564 last->op_flags |= OPf_KIDS;
4568 return newLISTOP(type, 0, first, last);
4572 =for apidoc Am|OP *|op_convert_list|I32 type|I32 flags|OP *o
4574 Converts I<o> into a list op if it is not one already, and then converts it
4575 into the specified I<type>, calling its check function, allocating a target if
4576 it needs one, and folding constants.
4578 A list-type op is usually constructed one kid at a time via C<newLISTOP>,
4579 C<op_prepend_elem> and C<op_append_elem>. Then finally it is passed to
4580 C<op_convert_list> to make it the right type.
4586 Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o)
4589 if (type < 0) type = -type, flags |= OPf_SPECIAL;
4590 if (!o || o->op_type != OP_LIST)
4591 o = force_list(o, 0);
4593 o->op_flags &= ~OPf_WANT;
4595 if (!(PL_opargs[type] & OA_MARK))
4596 op_null(cLISTOPo->op_first);
4598 OP * const kid2 = OpSIBLING(cLISTOPo->op_first);
4599 if (kid2 && kid2->op_type == OP_COREARGS) {
4600 op_null(cLISTOPo->op_first);
4601 kid2->op_private |= OPpCOREARGS_PUSHMARK;
4605 CHANGE_TYPE(o, type);
4606 o->op_flags |= flags;
4607 if (flags & OPf_FOLDED)
4610 o = CHECKOP(type, o);
4611 if (o->op_type != (unsigned)type)
4614 return fold_constants(op_integerize(op_std_init(o)));
4621 =head1 Optree construction
4623 =for apidoc Am|OP *|newNULLLIST
4625 Constructs, checks, and returns a new C<stub> op, which represents an
4626 empty list expression.
4632 Perl_newNULLLIST(pTHX)
4634 return newOP(OP_STUB, 0);
4637 /* promote o and any siblings to be a list if its not already; i.e.
4645 * pushmark - o - A - B
4647 * If nullit it true, the list op is nulled.
4651 S_force_list(pTHX_ OP *o, bool nullit)
4653 if (!o || o->op_type != OP_LIST) {
4656 /* manually detach any siblings then add them back later */
4657 rest = OpSIBLING(o);
4658 OpSIBLING_set(o, NULL);
4661 o = newLISTOP(OP_LIST, 0, o, NULL);
4663 op_sibling_splice(o, cLISTOPo->op_last, 0, rest);
4671 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
4673 Constructs, checks, and returns an op of any list type. I<type> is
4674 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4675 C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
4676 supply up to two ops to be direct children of the list op; they are
4677 consumed by this function and become part of the constructed op tree.
4679 For most list operators, the check function expects all the kid ops to be
4680 present already, so calling C<newLISTOP(OP_JOIN, ...)> (e.g.,) is not
4681 appropriate. What you want to do in that case is create an op of type
4682 OP_LIST, append more children to it, and then call L</op_convert_list>.
4683 See L</op_convert_list> for more information.
4690 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4695 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP
4696 || type == OP_CUSTOM);
4698 NewOp(1101, listop, 1, LISTOP);
4700 CHANGE_TYPE(listop, type);
4703 listop->op_flags = (U8)flags;
4707 else if (!first && last)
4710 OpSIBLING_set(first, last);
4711 listop->op_first = first;
4712 listop->op_last = last;
4713 if (type == OP_LIST) {
4714 OP* const pushop = newOP(OP_PUSHMARK, 0);
4715 pushop->op_lastsib = 0;
4716 OpSIBLING_set(pushop, first);
4717 listop->op_first = pushop;
4718 listop->op_flags |= OPf_KIDS;
4720 listop->op_last = pushop;
4723 first->op_lastsib = 0;
4724 if (listop->op_last) {
4725 listop->op_last->op_lastsib = 1;
4726 #ifdef PERL_OP_PARENT
4727 listop->op_last->op_sibling = (OP*)listop;
4731 return CHECKOP(type, listop);
4735 =for apidoc Am|OP *|newOP|I32 type|I32 flags
4737 Constructs, checks, and returns an op of any base type (any type that
4738 has no extra fields). I<type> is the opcode. I<flags> gives the
4739 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
4746 Perl_newOP(pTHX_ I32 type, I32 flags)
4751 if (type == -OP_ENTEREVAL) {
4752 type = OP_ENTEREVAL;
4753 flags |= OPpEVAL_BYTES<<8;
4756 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
4757 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4758 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4759 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4761 NewOp(1101, o, 1, OP);
4762 CHANGE_TYPE(o, type);
4763 o->op_flags = (U8)flags;
4766 o->op_private = (U8)(0 | (flags >> 8));
4767 if (PL_opargs[type] & OA_RETSCALAR)
4769 if (PL_opargs[type] & OA_TARGET)
4770 o->op_targ = pad_alloc(type, SVs_PADTMP);
4771 return CHECKOP(type, o);
4775 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
4777 Constructs, checks, and returns an op of any unary type. I<type> is
4778 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4779 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
4780 bits, the eight bits of C<op_private>, except that the bit with value 1
4781 is automatically set. I<first> supplies an optional op to be the direct
4782 child of the unary op; it is consumed by this function and become part
4783 of the constructed op tree.
4789 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
4794 if (type == -OP_ENTEREVAL) {
4795 type = OP_ENTEREVAL;
4796 flags |= OPpEVAL_BYTES<<8;
4799 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
4800 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4801 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4802 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
4803 || type == OP_SASSIGN
4804 || type == OP_ENTERTRY
4805 || type == OP_CUSTOM
4806 || type == OP_NULL );
4809 first = newOP(OP_STUB, 0);
4810 if (PL_opargs[type] & OA_MARK)
4811 first = force_list(first, 1);
4813 NewOp(1101, unop, 1, UNOP);
4814 CHANGE_TYPE(unop, type);
4815 unop->op_first = first;
4816 unop->op_flags = (U8)(flags | OPf_KIDS);
4817 unop->op_private = (U8)(1 | (flags >> 8));
4819 #ifdef PERL_OP_PARENT
4820 if (!OpHAS_SIBLING(first)) /* true unless weird syntax error */
4821 first->op_sibling = (OP*)unop;
4824 unop = (UNOP*) CHECKOP(type, unop);
4828 return fold_constants(op_integerize(op_std_init((OP *) unop)));
4832 =for apidoc newUNOP_AUX
4834 Similar to C<newUNOP>, but creates an UNOP_AUX struct instead, with op_aux
4841 Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags, OP *first, UNOP_AUX_item *aux)
4846 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP_AUX
4847 || type == OP_CUSTOM);