4 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
5 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
13 * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
14 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
15 * youngest of the Old Took's daughters); and Mr. Drogo was his second
16 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
17 * either way, as the saying is, if you follow me.' --the Gaffer
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
25 * A Perl program is compiled into a tree of OPs. Each op contains
26 * structural pointers (eg to its siblings and the next op in the
27 * execution sequence), a pointer to the function that would execute the
28 * op, plus any data specific to that op. For example, an OP_CONST op
29 * points to the pp_const() function and to an SV containing the constant
30 * value. When pp_const() is executed, its job is to push that SV onto the
33 * OPs are mainly created by the newFOO() functions, which are mainly
34 * called from the parser (in perly.y) as the code is parsed. For example
35 * the Perl code $a + $b * $c would cause the equivalent of the following
36 * to be called (oversimplifying a bit):
38 * newBINOP(OP_ADD, flags,
40 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
43 * Note that during the build of miniperl, a temporary copy of this file
44 * is made, called opmini.c.
48 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
52 An execution-order pass
54 The bottom-up pass is represented by all the "newOP" routines and
55 the ck_ routines. The bottom-upness is actually driven by yacc.
56 So at the point that a ck_ routine fires, we have no idea what the
57 context is, either upward in the syntax tree, or either forward or
58 backward in the execution order. (The bottom-up parser builds that
59 part of the execution order it knows about, but if you follow the "next"
60 links around, you'll find it's actually a closed loop through the
63 Whenever the bottom-up parser gets to a node that supplies context to
64 its components, it invokes that portion of the top-down pass that applies
65 to that part of the subtree (and marks the top node as processed, so
66 if a node further up supplies context, it doesn't have to take the
67 plunge again). As a particular subcase of this, as the new node is
68 built, it takes all the closed execution loops of its subcomponents
69 and links them into a new closed loop for the higher level node. But
70 it's still not the real execution order.
72 The actual execution order is not known till we get a grammar reduction
73 to a top-level unit like a subroutine or file that will be called by
74 "name" rather than via a "next" pointer. At that point, we can call
75 into peep() to do that code's portion of the 3rd pass. It has to be
76 recursive, but it's recursive on basic blocks, not on tree nodes.
79 /* To implement user lexical pragmas, there needs to be a way at run time to
80 get the compile time state of %^H for that block. Storing %^H in every
81 block (or even COP) would be very expensive, so a different approach is
82 taken. The (running) state of %^H is serialised into a tree of HE-like
83 structs. Stores into %^H are chained onto the current leaf as a struct
84 refcounted_he * with the key and the value. Deletes from %^H are saved
85 with a value of PL_sv_placeholder. The state of %^H at any point can be
86 turned back into a regular HV by walking back up the tree from that point's
87 leaf, ignoring any key you've already seen (placeholder or not), storing
88 the rest into the HV structure, then removing the placeholders. Hence
89 memory is only used to store the %^H deltas from the enclosing COP, rather
90 than the entire %^H on each COP.
92 To cause actions on %^H to write out the serialisation records, it has
93 magic type 'H'. This magic (itself) does nothing, but its presence causes
94 the values to gain magic type 'h', which has entries for set and clear.
95 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
96 record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
97 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
98 it will be correctly restored when any inner compiling scope is exited.
104 #include "keywords.h"
108 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
109 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
110 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
112 /* Used to avoid recursion through the op tree in scalarvoid() and
116 #define DEFERRED_OP_STEP 100
117 #define DEFER_OP(o) \
119 if (UNLIKELY(defer_ix == (defer_stack_alloc-1))) { \
120 defer_stack_alloc += DEFERRED_OP_STEP; \
121 assert(defer_stack_alloc > 0); \
122 Renew(defer_stack, defer_stack_alloc, OP *); \
124 defer_stack[++defer_ix] = o; \
127 #define POP_DEFERRED_OP() (defer_ix >= 0 ? defer_stack[defer_ix--] : (OP *)NULL)
129 /* remove any leading "empty" ops from the op_next chain whose first
130 * node's address is stored in op_p. Store the updated address of the
131 * first node in op_p.
135 S_prune_chain_head(OP** op_p)
138 && ( (*op_p)->op_type == OP_NULL
139 || (*op_p)->op_type == OP_SCOPE
140 || (*op_p)->op_type == OP_SCALAR
141 || (*op_p)->op_type == OP_LINESEQ)
143 *op_p = (*op_p)->op_next;
147 /* See the explanatory comments above struct opslab in op.h. */
149 #ifdef PERL_DEBUG_READONLY_OPS
150 # define PERL_SLAB_SIZE 128
151 # define PERL_MAX_SLAB_SIZE 4096
152 # include <sys/mman.h>
155 #ifndef PERL_SLAB_SIZE
156 # define PERL_SLAB_SIZE 64
158 #ifndef PERL_MAX_SLAB_SIZE
159 # define PERL_MAX_SLAB_SIZE 2048
162 /* rounds up to nearest pointer */
163 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
164 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
167 S_new_slab(pTHX_ size_t sz)
169 #ifdef PERL_DEBUG_READONLY_OPS
170 OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
171 PROT_READ|PROT_WRITE,
172 MAP_ANON|MAP_PRIVATE, -1, 0);
173 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
174 (unsigned long) sz, slab));
175 if (slab == MAP_FAILED) {
176 perror("mmap failed");
179 slab->opslab_size = (U16)sz;
181 OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
184 /* The context is unused in non-Windows */
187 slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
191 /* requires double parens and aTHX_ */
192 #define DEBUG_S_warn(args) \
194 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
198 Perl_Slab_Alloc(pTHX_ size_t sz)
206 /* We only allocate ops from the slab during subroutine compilation.
207 We find the slab via PL_compcv, hence that must be non-NULL. It could
208 also be pointing to a subroutine which is now fully set up (CvROOT()
209 pointing to the top of the optree for that sub), or a subroutine
210 which isn't using the slab allocator. If our sanity checks aren't met,
211 don't use a slab, but allocate the OP directly from the heap. */
212 if (!PL_compcv || CvROOT(PL_compcv)
213 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
215 o = (OP*)PerlMemShared_calloc(1, sz);
219 /* While the subroutine is under construction, the slabs are accessed via
220 CvSTART(), to avoid needing to expand PVCV by one pointer for something
221 unneeded at runtime. Once a subroutine is constructed, the slabs are
222 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
223 allocated yet. See the commit message for 8be227ab5eaa23f2 for more
225 if (!CvSTART(PL_compcv)) {
227 (OP *)(slab = S_new_slab(aTHX_ PERL_SLAB_SIZE));
228 CvSLABBED_on(PL_compcv);
229 slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
231 else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
233 opsz = SIZE_TO_PSIZE(sz);
234 sz = opsz + OPSLOT_HEADER_P;
236 /* The slabs maintain a free list of OPs. In particular, constant folding
237 will free up OPs, so it makes sense to re-use them where possible. A
238 freed up slot is used in preference to a new allocation. */
239 if (slab->opslab_freed) {
240 OP **too = &slab->opslab_freed;
242 DEBUG_S_warn((aTHX_ "found free op at %p, slab %p", (void*)o, (void*)slab));
243 while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
244 DEBUG_S_warn((aTHX_ "Alas! too small"));
245 o = *(too = &o->op_next);
246 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
250 Zero(o, opsz, I32 *);
256 #define INIT_OPSLOT \
257 slot->opslot_slab = slab; \
258 slot->opslot_next = slab2->opslab_first; \
259 slab2->opslab_first = slot; \
260 o = &slot->opslot_op; \
263 /* The partially-filled slab is next in the chain. */
264 slab2 = slab->opslab_next ? slab->opslab_next : slab;
265 if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) {
266 /* Remaining space is too small. */
268 /* If we can fit a BASEOP, add it to the free chain, so as not
270 if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
271 slot = &slab2->opslab_slots;
273 o->op_type = OP_FREED;
274 o->op_next = slab->opslab_freed;
275 slab->opslab_freed = o;
278 /* Create a new slab. Make this one twice as big. */
279 slot = slab2->opslab_first;
280 while (slot->opslot_next) slot = slot->opslot_next;
281 slab2 = S_new_slab(aTHX_
282 (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE
284 : (DIFF(slab2, slot)+1)*2);
285 slab2->opslab_next = slab->opslab_next;
286 slab->opslab_next = slab2;
288 assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
290 /* Create a new op slot */
291 slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz);
292 assert(slot >= &slab2->opslab_slots);
293 if (DIFF(&slab2->opslab_slots, slot)
294 < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
295 slot = &slab2->opslab_slots;
297 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", (void*)o, (void*)slab));
300 #ifdef PERL_OP_PARENT
301 /* moresib == 0, op_sibling == 0 implies a solitary unattached op */
302 assert(!o->op_moresib);
303 assert(!o->op_sibparent);
311 #ifdef PERL_DEBUG_READONLY_OPS
313 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
315 PERL_ARGS_ASSERT_SLAB_TO_RO;
317 if (slab->opslab_readonly) return;
318 slab->opslab_readonly = 1;
319 for (; slab; slab = slab->opslab_next) {
320 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
321 (unsigned long) slab->opslab_size, slab));*/
322 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
323 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
324 (unsigned long)slab->opslab_size, errno);
329 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
333 PERL_ARGS_ASSERT_SLAB_TO_RW;
335 if (!slab->opslab_readonly) return;
337 for (; slab2; slab2 = slab2->opslab_next) {
338 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
339 (unsigned long) size, slab2));*/
340 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
341 PROT_READ|PROT_WRITE)) {
342 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
343 (unsigned long)slab2->opslab_size, errno);
346 slab->opslab_readonly = 0;
350 # define Slab_to_rw(op) NOOP
353 /* This cannot possibly be right, but it was copied from the old slab
354 allocator, to which it was originally added, without explanation, in
357 # define PerlMemShared PerlMem
361 Perl_Slab_Free(pTHX_ void *op)
363 OP * const o = (OP *)op;
366 PERL_ARGS_ASSERT_SLAB_FREE;
368 if (!o->op_slabbed) {
370 PerlMemShared_free(op);
375 /* If this op is already freed, our refcount will get screwy. */
376 assert(o->op_type != OP_FREED);
377 o->op_type = OP_FREED;
378 o->op_next = slab->opslab_freed;
379 slab->opslab_freed = o;
380 DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
381 OpslabREFCNT_dec_padok(slab);
385 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
387 const bool havepad = !!PL_comppad;
388 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
391 PAD_SAVE_SETNULLPAD();
398 Perl_opslab_free(pTHX_ OPSLAB *slab)
401 PERL_ARGS_ASSERT_OPSLAB_FREE;
403 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
404 assert(slab->opslab_refcnt == 1);
406 slab2 = slab->opslab_next;
408 slab->opslab_refcnt = ~(size_t)0;
410 #ifdef PERL_DEBUG_READONLY_OPS
411 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
413 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
414 perror("munmap failed");
418 PerlMemShared_free(slab);
425 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
430 size_t savestack_count = 0;
432 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
435 for (slot = slab2->opslab_first;
437 slot = slot->opslot_next) {
438 if (slot->opslot_op.op_type != OP_FREED
439 && !(slot->opslot_op.op_savefree
445 assert(slot->opslot_op.op_slabbed);
446 op_free(&slot->opslot_op);
447 if (slab->opslab_refcnt == 1) goto free;
450 } while ((slab2 = slab2->opslab_next));
451 /* > 1 because the CV still holds a reference count. */
452 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
454 assert(savestack_count == slab->opslab_refcnt-1);
456 /* Remove the CV’s reference count. */
457 slab->opslab_refcnt--;
464 #ifdef PERL_DEBUG_READONLY_OPS
466 Perl_op_refcnt_inc(pTHX_ OP *o)
469 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
470 if (slab && slab->opslab_readonly) {
483 Perl_op_refcnt_dec(pTHX_ OP *o)
486 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
488 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
490 if (slab && slab->opslab_readonly) {
492 result = --o->op_targ;
495 result = --o->op_targ;
501 * In the following definition, the ", (OP*)0" is just to make the compiler
502 * think the expression is of the right type: croak actually does a Siglongjmp.
504 #define CHECKOP(type,o) \
505 ((PL_op_mask && PL_op_mask[type]) \
506 ? ( op_free((OP*)o), \
507 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
509 : PL_check[type](aTHX_ (OP*)o))
511 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
513 #define OpTYPE_set(o,type) \
515 o->op_type = (OPCODE)type; \
516 o->op_ppaddr = PL_ppaddr[type]; \
520 S_no_fh_allowed(pTHX_ OP *o)
522 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
524 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
530 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
532 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
533 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
538 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
540 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
542 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
547 S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
549 PERL_ARGS_ASSERT_BAD_TYPE_PV;
551 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
552 (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
555 /* remove flags var, its unused in all callers, move to to right end since gv
556 and kid are always the same */
558 S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
560 SV * const namesv = cv_name((CV *)gv, NULL, 0);
561 PERL_ARGS_ASSERT_BAD_TYPE_GV;
563 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %"SVf" must be %s (not %s)",
564 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
568 S_no_bareword_allowed(pTHX_ OP *o)
570 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
572 qerror(Perl_mess(aTHX_
573 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
575 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
578 /* "register" allocation */
581 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
584 const bool is_our = (PL_parser->in_my == KEY_our);
586 PERL_ARGS_ASSERT_ALLOCMY;
588 if (flags & ~SVf_UTF8)
589 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
592 /* complain about "my $<special_var>" etc etc */
596 ((flags & SVf_UTF8) && isIDFIRST_utf8((U8 *)name+1)) ||
597 (name[1] == '_' && (*name == '$' || len > 2))))
599 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
601 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
602 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
603 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
604 PL_parser->in_my == KEY_state ? "state" : "my"));
606 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
607 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
610 else if (len == 2 && name[1] == '_' && !is_our)
611 /* diag_listed_as: Use of my $_ is experimental */
612 Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__LEXICAL_TOPIC),
613 "Use of %s $_ is experimental",
614 PL_parser->in_my == KEY_state
618 /* allocate a spare slot and store the name in that slot */
620 off = pad_add_name_pvn(name, len,
621 (is_our ? padadd_OUR :
622 PL_parser->in_my == KEY_state ? padadd_STATE : 0),
623 PL_parser->in_my_stash,
625 /* $_ is always in main::, even with our */
626 ? (PL_curstash && !memEQs(name,len,"$_")
632 /* anon sub prototypes contains state vars should always be cloned,
633 * otherwise the state var would be shared between anon subs */
635 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
636 CvCLONE_on(PL_compcv);
642 =head1 Optree Manipulation Functions
644 =for apidoc alloccopstash
646 Available only under threaded builds, this function allocates an entry in
647 C<PL_stashpad> for the stash passed to it.
654 Perl_alloccopstash(pTHX_ HV *hv)
656 PADOFFSET off = 0, o = 1;
657 bool found_slot = FALSE;
659 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
661 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
663 for (; o < PL_stashpadmax; ++o) {
664 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
665 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
666 found_slot = TRUE, off = o;
669 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
670 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
671 off = PL_stashpadmax;
672 PL_stashpadmax += 10;
675 PL_stashpad[PL_stashpadix = off] = hv;
680 /* free the body of an op without examining its contents.
681 * Always use this rather than FreeOp directly */
684 S_op_destroy(pTHX_ OP *o)
692 =for apidoc Am|void|op_free|OP *o
694 Free an op. Only use this when an op is no longer linked to from any
701 Perl_op_free(pTHX_ OP *o)
705 SSize_t defer_ix = -1;
706 SSize_t defer_stack_alloc = 0;
707 OP **defer_stack = NULL;
711 /* Though ops may be freed twice, freeing the op after its slab is a
713 assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
714 /* During the forced freeing of ops after compilation failure, kidops
715 may be freed before their parents. */
716 if (!o || o->op_type == OP_FREED)
721 /* an op should only ever acquire op_private flags that we know about.
722 * If this fails, you may need to fix something in regen/op_private */
723 if (o->op_ppaddr == PL_ppaddr[o->op_type]) {
724 assert(!(o->op_private & ~PL_op_private_valid[type]));
727 if (o->op_private & OPpREFCOUNTED) {
738 refcnt = OpREFCNT_dec(o);
741 /* Need to find and remove any pattern match ops from the list
742 we maintain for reset(). */
743 find_and_forget_pmops(o);
753 /* Call the op_free hook if it has been set. Do it now so that it's called
754 * at the right time for refcounted ops, but still before all of the kids
758 if (o->op_flags & OPf_KIDS) {
760 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
761 nextkid = OpSIBLING(kid); /* Get before next freeing kid */
762 if (!kid || kid->op_type == OP_FREED)
763 /* During the forced freeing of ops after
764 compilation failure, kidops may be freed before
767 if (!(kid->op_flags & OPf_KIDS))
768 /* If it has no kids, just free it now */
775 type = (OPCODE)o->op_targ;
778 Slab_to_rw(OpSLAB(o));
780 /* COP* is not cleared by op_clear() so that we may track line
781 * numbers etc even after null() */
782 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
788 #ifdef DEBUG_LEAKING_SCALARS
792 } while ( (o = POP_DEFERRED_OP()) );
794 Safefree(defer_stack);
797 /* S_op_clear_gv(): free a GV attached to an OP */
800 void S_op_clear_gv(pTHX_ OP *o, PADOFFSET *ixp)
802 void S_op_clear_gv(pTHX_ OP *o, SV**svp)
806 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV
807 || o->op_type == OP_MULTIDEREF)
810 ? ((GV*)PAD_SVl(*ixp)) : NULL;
812 ? (GV*)(*svp) : NULL;
814 /* It's possible during global destruction that the GV is freed
815 before the optree. Whilst the SvREFCNT_inc is happy to bump from
816 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
817 will trigger an assertion failure, because the entry to sv_clear
818 checks that the scalar is not already freed. A check of for
819 !SvIS_FREED(gv) turns out to be invalid, because during global
820 destruction the reference count can be forced down to zero
821 (with SVf_BREAK set). In which case raising to 1 and then
822 dropping to 0 triggers cleanup before it should happen. I
823 *think* that this might actually be a general, systematic,
824 weakness of the whole idea of SVf_BREAK, in that code *is*
825 allowed to raise and lower references during global destruction,
826 so any *valid* code that happens to do this during global
827 destruction might well trigger premature cleanup. */
828 bool still_valid = gv && SvREFCNT(gv);
831 SvREFCNT_inc_simple_void(gv);
834 pad_swipe(*ixp, TRUE);
842 int try_downgrade = SvREFCNT(gv) == 2;
845 gv_try_downgrade(gv);
851 Perl_op_clear(pTHX_ OP *o)
856 PERL_ARGS_ASSERT_OP_CLEAR;
858 switch (o->op_type) {
859 case OP_NULL: /* Was holding old type, if any. */
862 case OP_ENTEREVAL: /* Was holding hints. */
866 if (!(o->op_flags & OPf_REF)
867 || (PL_check[o->op_type] != Perl_ck_ftst))
874 S_op_clear_gv(aTHX_ o, &(cPADOPx(o)->op_padix));
876 S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv));
879 case OP_METHOD_REDIR:
880 case OP_METHOD_REDIR_SUPER:
882 if (cMETHOPx(o)->op_rclass_targ) {
883 pad_swipe(cMETHOPx(o)->op_rclass_targ, 1);
884 cMETHOPx(o)->op_rclass_targ = 0;
887 SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv);
888 cMETHOPx(o)->op_rclass_sv = NULL;
890 case OP_METHOD_NAMED:
891 case OP_METHOD_SUPER:
892 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
893 cMETHOPx(o)->op_u.op_meth_sv = NULL;
896 pad_swipe(o->op_targ, 1);
903 SvREFCNT_dec(cSVOPo->op_sv);
904 cSVOPo->op_sv = NULL;
907 Even if op_clear does a pad_free for the target of the op,
908 pad_free doesn't actually remove the sv that exists in the pad;
909 instead it lives on. This results in that it could be reused as
910 a target later on when the pad was reallocated.
913 pad_swipe(o->op_targ,1);
923 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
928 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
929 assert(o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
931 if (cPADOPo->op_padix > 0) {
932 pad_swipe(cPADOPo->op_padix, TRUE);
933 cPADOPo->op_padix = 0;
936 SvREFCNT_dec(cSVOPo->op_sv);
937 cSVOPo->op_sv = NULL;
941 PerlMemShared_free(cPVOPo->op_pv);
942 cPVOPo->op_pv = NULL;
946 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
950 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
951 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
954 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
960 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
961 op_free(cPMOPo->op_code_list);
962 cPMOPo->op_code_list = NULL;
964 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
965 /* we use the same protection as the "SAFE" version of the PM_ macros
966 * here since sv_clean_all might release some PMOPs
967 * after PL_regex_padav has been cleared
968 * and the clearing of PL_regex_padav needs to
969 * happen before sv_clean_all
972 if(PL_regex_pad) { /* We could be in destruction */
973 const IV offset = (cPMOPo)->op_pmoffset;
974 ReREFCNT_dec(PM_GETRE(cPMOPo));
975 PL_regex_pad[offset] = &PL_sv_undef;
976 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
980 ReREFCNT_dec(PM_GETRE(cPMOPo));
981 PM_SETRE(cPMOPo, NULL);
988 UNOP_AUX_item *items = cUNOP_AUXo->op_aux;
989 UV actions = items->uv;
991 bool is_hash = FALSE;
994 switch (actions & MDEREF_ACTION_MASK) {
997 actions = (++items)->uv;
1000 case MDEREF_HV_padhv_helem:
1002 case MDEREF_AV_padav_aelem:
1003 pad_free((++items)->pad_offset);
1006 case MDEREF_HV_gvhv_helem:
1008 case MDEREF_AV_gvav_aelem:
1010 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1012 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1016 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
1018 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
1020 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1022 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1024 goto do_vivify_rv2xv_elem;
1026 case MDEREF_HV_padsv_vivify_rv2hv_helem:
1028 case MDEREF_AV_padsv_vivify_rv2av_aelem:
1029 pad_free((++items)->pad_offset);
1030 goto do_vivify_rv2xv_elem;
1032 case MDEREF_HV_pop_rv2hv_helem:
1033 case MDEREF_HV_vivify_rv2hv_helem:
1035 do_vivify_rv2xv_elem:
1036 case MDEREF_AV_pop_rv2av_aelem:
1037 case MDEREF_AV_vivify_rv2av_aelem:
1039 switch (actions & MDEREF_INDEX_MASK) {
1040 case MDEREF_INDEX_none:
1043 case MDEREF_INDEX_const:
1047 pad_swipe((++items)->pad_offset, 1);
1049 SvREFCNT_dec((++items)->sv);
1055 case MDEREF_INDEX_padsv:
1056 pad_free((++items)->pad_offset);
1058 case MDEREF_INDEX_gvsv:
1060 S_op_clear_gv(aTHX_ o, &((++items)->pad_offset));
1062 S_op_clear_gv(aTHX_ o, &((++items)->sv));
1067 if (actions & MDEREF_FLAG_last)
1080 actions >>= MDEREF_SHIFT;
1083 /* start of malloc is at op_aux[-1], where the length is
1085 PerlMemShared_free(cUNOP_AUXo->op_aux - 1);
1090 if (o->op_targ > 0) {
1091 pad_free(o->op_targ);
1097 S_cop_free(pTHX_ COP* cop)
1099 PERL_ARGS_ASSERT_COP_FREE;
1102 if (! specialWARN(cop->cop_warnings))
1103 PerlMemShared_free(cop->cop_warnings);
1104 cophh_free(CopHINTHASH_get(cop));
1105 if (PL_curcop == cop)
1110 S_forget_pmop(pTHX_ PMOP *const o
1113 HV * const pmstash = PmopSTASH(o);
1115 PERL_ARGS_ASSERT_FORGET_PMOP;
1117 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
1118 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
1120 PMOP **const array = (PMOP**) mg->mg_ptr;
1121 U32 count = mg->mg_len / sizeof(PMOP**);
1125 if (array[i] == o) {
1126 /* Found it. Move the entry at the end to overwrite it. */
1127 array[i] = array[--count];
1128 mg->mg_len = count * sizeof(PMOP**);
1129 /* Could realloc smaller at this point always, but probably
1130 not worth it. Probably worth free()ing if we're the
1133 Safefree(mg->mg_ptr);
1146 S_find_and_forget_pmops(pTHX_ OP *o)
1148 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1150 if (o->op_flags & OPf_KIDS) {
1151 OP *kid = cUNOPo->op_first;
1153 switch (kid->op_type) {
1158 forget_pmop((PMOP*)kid);
1160 find_and_forget_pmops(kid);
1161 kid = OpSIBLING(kid);
1167 =for apidoc Am|void|op_null|OP *o
1169 Neutralizes an op when it is no longer needed, but is still linked to from
1176 Perl_op_null(pTHX_ OP *o)
1180 PERL_ARGS_ASSERT_OP_NULL;
1182 if (o->op_type == OP_NULL)
1185 o->op_targ = o->op_type;
1186 OpTYPE_set(o, OP_NULL);
1190 Perl_op_refcnt_lock(pTHX)
1195 PERL_UNUSED_CONTEXT;
1200 Perl_op_refcnt_unlock(pTHX)
1205 PERL_UNUSED_CONTEXT;
1211 =for apidoc op_sibling_splice
1213 A general function for editing the structure of an existing chain of
1214 op_sibling nodes. By analogy with the perl-level splice() function, allows
1215 you to delete zero or more sequential nodes, replacing them with zero or
1216 more different nodes. Performs the necessary op_first/op_last
1217 housekeeping on the parent node and op_sibling manipulation on the
1218 children. The last deleted node will be marked as as the last node by
1219 updating the op_sibling/op_sibparent or op_moresib field as appropriate.
1221 Note that op_next is not manipulated, and nodes are not freed; that is the
1222 responsibility of the caller. It also won't create a new list op for an
1223 empty list etc; use higher-level functions like op_append_elem() for that.
1225 parent is the parent node of the sibling chain. It may passed as NULL if
1226 the splicing doesn't affect the first or last op in the chain.
1228 start is the node preceding the first node to be spliced. Node(s)
1229 following it will be deleted, and ops will be inserted after it. If it is
1230 NULL, the first node onwards is deleted, and nodes are inserted at the
1233 del_count is the number of nodes to delete. If zero, no nodes are deleted.
1234 If -1 or greater than or equal to the number of remaining kids, all
1235 remaining kids are deleted.
1237 insert is the first of a chain of nodes to be inserted in place of the nodes.
1238 If NULL, no nodes are inserted.
1240 The head of the chain of deleted ops is returned, or NULL if no ops were
1245 action before after returns
1246 ------ ----- ----- -------
1249 splice(P, A, 2, X-Y-Z) | | B-C
1253 splice(P, NULL, 1, X-Y) | | A
1257 splice(P, NULL, 3, NULL) | | A-B-C
1261 splice(P, B, 0, X-Y) | | NULL
1265 For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
1266 see C<OpMORESIB_set>, C<OpLASTSIB_set>, C<OpMAYBESIB_set>.
1272 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1276 OP *last_del = NULL;
1277 OP *last_ins = NULL;
1280 first = OpSIBLING(start);
1284 first = cLISTOPx(parent)->op_first;
1286 assert(del_count >= -1);
1288 if (del_count && first) {
1290 while (--del_count && OpHAS_SIBLING(last_del))
1291 last_del = OpSIBLING(last_del);
1292 rest = OpSIBLING(last_del);
1293 OpLASTSIB_set(last_del, NULL);
1300 while (OpHAS_SIBLING(last_ins))
1301 last_ins = OpSIBLING(last_ins);
1302 OpMAYBESIB_set(last_ins, rest, NULL);
1308 OpMAYBESIB_set(start, insert, NULL);
1313 cLISTOPx(parent)->op_first = insert;
1315 parent->op_flags |= OPf_KIDS;
1317 parent->op_flags &= ~OPf_KIDS;
1321 /* update op_last etc */
1328 /* ought to use OP_CLASS(parent) here, but that can't handle
1329 * ex-foo OP_NULL ops. Also note that XopENTRYCUSTOM() can't
1331 type = parent->op_type;
1332 if (type == OP_CUSTOM) {
1334 type = XopENTRYCUSTOM(parent, xop_class);
1337 if (type == OP_NULL)
1338 type = parent->op_targ;
1339 type = PL_opargs[type] & OA_CLASS_MASK;
1342 lastop = last_ins ? last_ins : start ? start : NULL;
1343 if ( type == OA_BINOP
1344 || type == OA_LISTOP
1348 cLISTOPx(parent)->op_last = lastop;
1351 OpLASTSIB_set(lastop, parent);
1353 return last_del ? first : NULL;
1356 Perl_croak_nocontext("panic: op_sibling_splice(): NULL parent");
1360 #ifdef PERL_OP_PARENT
1363 =for apidoc op_parent
1365 Returns the parent OP of o, if it has a parent. Returns NULL otherwise.
1366 This function is only available on perls built with C<-DPERL_OP_PARENT>.
1372 Perl_op_parent(OP *o)
1374 PERL_ARGS_ASSERT_OP_PARENT;
1375 while (OpHAS_SIBLING(o))
1377 return o->op_sibparent;
1383 /* replace the sibling following start with a new UNOP, which becomes
1384 * the parent of the original sibling; e.g.
1386 * op_sibling_newUNOP(P, A, unop-args...)
1394 * where U is the new UNOP.
1396 * parent and start args are the same as for op_sibling_splice();
1397 * type and flags args are as newUNOP().
1399 * Returns the new UNOP.
1403 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1407 kid = op_sibling_splice(parent, start, 1, NULL);
1408 newop = newUNOP(type, flags, kid);
1409 op_sibling_splice(parent, start, 0, newop);
1414 /* lowest-level newLOGOP-style function - just allocates and populates
1415 * the struct. Higher-level stuff should be done by S_new_logop() /
1416 * newLOGOP(). This function exists mainly to avoid op_first assignment
1417 * being spread throughout this file.
1421 S_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1426 NewOp(1101, logop, 1, LOGOP);
1427 OpTYPE_set(logop, type);
1428 logop->op_first = first;
1429 logop->op_other = other;
1430 logop->op_flags = OPf_KIDS;
1431 while (kid && OpHAS_SIBLING(kid))
1432 kid = OpSIBLING(kid);
1434 OpLASTSIB_set(kid, (OP*)logop);
1439 /* Contextualizers */
1442 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1444 Applies a syntactic context to an op tree representing an expression.
1445 C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
1446 or C<G_VOID> to specify the context to apply. The modified op tree
1453 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1455 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1457 case G_SCALAR: return scalar(o);
1458 case G_ARRAY: return list(o);
1459 case G_VOID: return scalarvoid(o);
1461 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1468 =for apidoc Am|OP*|op_linklist|OP *o
1469 This function is the implementation of the L</LINKLIST> macro. It should
1470 not be called directly.
1476 Perl_op_linklist(pTHX_ OP *o)
1480 PERL_ARGS_ASSERT_OP_LINKLIST;
1485 /* establish postfix order */
1486 first = cUNOPo->op_first;
1489 o->op_next = LINKLIST(first);
1492 OP *sibl = OpSIBLING(kid);
1494 kid->op_next = LINKLIST(sibl);
1509 S_scalarkids(pTHX_ OP *o)
1511 if (o && o->op_flags & OPf_KIDS) {
1513 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
1520 S_scalarboolean(pTHX_ OP *o)
1522 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1524 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
1525 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
1526 if (ckWARN(WARN_SYNTAX)) {
1527 const line_t oldline = CopLINE(PL_curcop);
1529 if (PL_parser && PL_parser->copline != NOLINE) {
1530 /* This ensures that warnings are reported at the first line
1531 of the conditional, not the last. */
1532 CopLINE_set(PL_curcop, PL_parser->copline);
1534 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1535 CopLINE_set(PL_curcop, oldline);
1542 S_op_varname(pTHX_ const OP *o)
1545 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1546 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1548 const char funny = o->op_type == OP_PADAV
1549 || o->op_type == OP_RV2AV ? '@' : '%';
1550 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1552 if (cUNOPo->op_first->op_type != OP_GV
1553 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1555 return varname(gv, funny, 0, NULL, 0, 1);
1558 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, 1);
1563 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1564 { /* or not so pretty :-) */
1565 if (o->op_type == OP_CONST) {
1567 if (SvPOK(*retsv)) {
1569 *retsv = sv_newmortal();
1570 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1571 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1573 else if (!SvOK(*retsv))
1576 else *retpv = "...";
1580 S_scalar_slice_warning(pTHX_ const OP *o)
1584 o->op_type == OP_HSLICE ? '{' : '[';
1586 o->op_type == OP_HSLICE ? '}' : ']';
1588 SV *keysv = NULL; /* just to silence compiler warnings */
1589 const char *key = NULL;
1591 if (!(o->op_private & OPpSLICEWARNING))
1593 if (PL_parser && PL_parser->error_count)
1594 /* This warning can be nonsensical when there is a syntax error. */
1597 kid = cLISTOPo->op_first;
1598 kid = OpSIBLING(kid); /* get past pushmark */
1599 /* weed out false positives: any ops that can return lists */
1600 switch (kid->op_type) {
1626 /* Don't warn if we have a nulled list either. */
1627 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1630 assert(OpSIBLING(kid));
1631 name = S_op_varname(aTHX_ OpSIBLING(kid));
1632 if (!name) /* XS module fiddling with the op tree */
1634 S_op_pretty(aTHX_ kid, &keysv, &key);
1635 assert(SvPOK(name));
1636 sv_chop(name,SvPVX(name)+1);
1638 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1639 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1640 "Scalar value @%"SVf"%c%s%c better written as $%"SVf
1642 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1643 lbrack, key, rbrack);
1645 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1646 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1647 "Scalar value @%"SVf"%c%"SVf"%c better written as $%"
1649 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1650 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1654 Perl_scalar(pTHX_ OP *o)
1658 /* assumes no premature commitment */
1659 if (!o || (PL_parser && PL_parser->error_count)
1660 || (o->op_flags & OPf_WANT)
1661 || o->op_type == OP_RETURN)
1666 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1668 switch (o->op_type) {
1670 scalar(cBINOPo->op_first);
1671 if (o->op_private & OPpREPEAT_DOLIST) {
1672 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1673 assert(kid->op_type == OP_PUSHMARK);
1674 if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
1675 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1676 o->op_private &=~ OPpREPEAT_DOLIST;
1683 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
1693 if (o->op_flags & OPf_KIDS) {
1694 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
1700 kid = cLISTOPo->op_first;
1702 kid = OpSIBLING(kid);
1705 OP *sib = OpSIBLING(kid);
1706 if (sib && kid->op_type != OP_LEAVEWHEN
1707 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
1708 || ( sib->op_targ != OP_NEXTSTATE
1709 && sib->op_targ != OP_DBSTATE )))
1715 PL_curcop = &PL_compiling;
1720 kid = cLISTOPo->op_first;
1723 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1728 /* Warn about scalar context */
1729 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1730 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1733 const char *key = NULL;
1735 /* This warning can be nonsensical when there is a syntax error. */
1736 if (PL_parser && PL_parser->error_count)
1739 if (!ckWARN(WARN_SYNTAX)) break;
1741 kid = cLISTOPo->op_first;
1742 kid = OpSIBLING(kid); /* get past pushmark */
1743 assert(OpSIBLING(kid));
1744 name = S_op_varname(aTHX_ OpSIBLING(kid));
1745 if (!name) /* XS module fiddling with the op tree */
1747 S_op_pretty(aTHX_ kid, &keysv, &key);
1748 assert(SvPOK(name));
1749 sv_chop(name,SvPVX(name)+1);
1751 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1752 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1753 "%%%"SVf"%c%s%c in scalar context better written "
1755 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1756 lbrack, key, rbrack);
1758 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1759 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1760 "%%%"SVf"%c%"SVf"%c in scalar context better "
1761 "written as $%"SVf"%c%"SVf"%c",
1762 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1763 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1770 Perl_scalarvoid(pTHX_ OP *arg)
1776 SSize_t defer_stack_alloc = 0;
1777 SSize_t defer_ix = -1;
1778 OP **defer_stack = NULL;
1781 PERL_ARGS_ASSERT_SCALARVOID;
1784 SV *useless_sv = NULL;
1785 const char* useless = NULL;
1787 if (o->op_type == OP_NEXTSTATE
1788 || o->op_type == OP_DBSTATE
1789 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1790 || o->op_targ == OP_DBSTATE)))
1791 PL_curcop = (COP*)o; /* for warning below */
1793 /* assumes no premature commitment */
1794 want = o->op_flags & OPf_WANT;
1795 if ((want && want != OPf_WANT_SCALAR)
1796 || (PL_parser && PL_parser->error_count)
1797 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1802 if ((o->op_private & OPpTARGET_MY)
1803 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1805 /* newASSIGNOP has already applied scalar context, which we
1806 leave, as if this op is inside SASSIGN. */
1810 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1812 switch (o->op_type) {
1814 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1818 if (o->op_flags & OPf_STACKED)
1820 if (o->op_type == OP_REPEAT)
1821 scalar(cBINOPo->op_first);
1824 if (o->op_private == 4)
1859 case OP_GETSOCKNAME:
1860 case OP_GETPEERNAME:
1865 case OP_GETPRIORITY:
1890 useless = OP_DESC(o);
1900 case OP_AELEMFAST_LEX:
1904 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1905 /* Otherwise it's "Useless use of grep iterator" */
1906 useless = OP_DESC(o);
1910 kid = cLISTOPo->op_first;
1911 if (kid && kid->op_type == OP_PUSHRE
1913 && !(o->op_flags & OPf_STACKED)
1915 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
1917 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
1920 useless = OP_DESC(o);
1924 kid = cUNOPo->op_first;
1925 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1926 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1929 useless = "negative pattern binding (!~)";
1933 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1934 useless = "non-destructive substitution (s///r)";
1938 useless = "non-destructive transliteration (tr///r)";
1945 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1946 (!OpHAS_SIBLING(o) || OpSIBLING(o)->op_type != OP_READLINE))
1947 useless = "a variable";
1952 if (cSVOPo->op_private & OPpCONST_STRICT)
1953 no_bareword_allowed(o);
1955 if (ckWARN(WARN_VOID)) {
1957 /* don't warn on optimised away booleans, eg
1958 * use constant Foo, 5; Foo || print; */
1959 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1961 /* the constants 0 and 1 are permitted as they are
1962 conventionally used as dummies in constructs like
1963 1 while some_condition_with_side_effects; */
1964 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
1966 else if (SvPOK(sv)) {
1967 SV * const dsv = newSVpvs("");
1969 = Perl_newSVpvf(aTHX_
1971 pv_pretty(dsv, SvPVX_const(sv),
1972 SvCUR(sv), 32, NULL, NULL,
1974 | PERL_PV_ESCAPE_NOCLEAR
1975 | PERL_PV_ESCAPE_UNI_DETECT));
1976 SvREFCNT_dec_NN(dsv);
1978 else if (SvOK(sv)) {
1979 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%"SVf")", SVfARG(sv));
1982 useless = "a constant (undef)";
1985 op_null(o); /* don't execute or even remember it */
1989 OpTYPE_set(o, OP_PREINC); /* pre-increment is faster */
1993 OpTYPE_set(o, OP_PREDEC); /* pre-decrement is faster */
1997 OpTYPE_set(o, OP_I_PREINC); /* pre-increment is faster */
2001 OpTYPE_set(o, OP_I_PREDEC); /* pre-decrement is faster */
2006 UNOP *refgen, *rv2cv;
2009 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
2012 rv2gv = ((BINOP *)o)->op_last;
2013 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
2016 refgen = (UNOP *)((BINOP *)o)->op_first;
2018 if (!refgen || (refgen->op_type != OP_REFGEN
2019 && refgen->op_type != OP_SREFGEN))
2022 exlist = (LISTOP *)refgen->op_first;
2023 if (!exlist || exlist->op_type != OP_NULL
2024 || exlist->op_targ != OP_LIST)
2027 if (exlist->op_first->op_type != OP_PUSHMARK
2028 && exlist->op_first != exlist->op_last)
2031 rv2cv = (UNOP*)exlist->op_last;
2033 if (rv2cv->op_type != OP_RV2CV)
2036 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
2037 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
2038 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
2040 o->op_private |= OPpASSIGN_CV_TO_GV;
2041 rv2gv->op_private |= OPpDONT_INIT_GV;
2042 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
2054 kid = cLOGOPo->op_first;
2055 if (kid->op_type == OP_NOT
2056 && (kid->op_flags & OPf_KIDS)) {
2057 if (o->op_type == OP_AND) {
2058 OpTYPE_set(o, OP_OR);
2060 OpTYPE_set(o, OP_AND);
2070 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2071 if (!(kid->op_flags & OPf_KIDS))
2078 if (o->op_flags & OPf_STACKED)
2085 if (!(o->op_flags & OPf_KIDS))
2096 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2097 if (!(kid->op_flags & OPf_KIDS))
2103 /* If the first kid after pushmark is something that the padrange
2104 optimisation would reject, then null the list and the pushmark.
2106 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
2107 && ( !(kid = OpSIBLING(kid))
2108 || ( kid->op_type != OP_PADSV
2109 && kid->op_type != OP_PADAV
2110 && kid->op_type != OP_PADHV)
2111 || kid->op_private & ~OPpLVAL_INTRO
2112 || !(kid = OpSIBLING(kid))
2113 || ( kid->op_type != OP_PADSV
2114 && kid->op_type != OP_PADAV
2115 && kid->op_type != OP_PADHV)
2116 || kid->op_private & ~OPpLVAL_INTRO)
2118 op_null(cUNOPo->op_first); /* NULL the pushmark */
2119 op_null(o); /* NULL the list */
2131 /* mortalise it, in case warnings are fatal. */
2132 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2133 "Useless use of %"SVf" in void context",
2134 SVfARG(sv_2mortal(useless_sv)));
2137 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
2138 "Useless use of %s in void context",
2141 } while ( (o = POP_DEFERRED_OP()) );
2143 Safefree(defer_stack);
2149 S_listkids(pTHX_ OP *o)
2151 if (o && o->op_flags & OPf_KIDS) {
2153 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2160 Perl_list(pTHX_ OP *o)
2164 /* assumes no premature commitment */
2165 if (!o || (o->op_flags & OPf_WANT)
2166 || (PL_parser && PL_parser->error_count)
2167 || o->op_type == OP_RETURN)
2172 if ((o->op_private & OPpTARGET_MY)
2173 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2175 return o; /* As if inside SASSIGN */
2178 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2180 switch (o->op_type) {
2182 list(cBINOPo->op_first);
2185 if (o->op_private & OPpREPEAT_DOLIST
2186 && !(o->op_flags & OPf_STACKED))
2188 list(cBINOPo->op_first);
2189 kid = cBINOPo->op_last;
2190 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2191 && SvIVX(kSVOP_sv) == 1)
2193 op_null(o); /* repeat */
2194 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2196 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2203 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2211 if (!(o->op_flags & OPf_KIDS))
2213 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2214 list(cBINOPo->op_first);
2215 return gen_constant_list(o);
2221 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2222 op_null(cUNOPo->op_first); /* NULL the pushmark */
2223 op_null(o); /* NULL the list */
2228 kid = cLISTOPo->op_first;
2230 kid = OpSIBLING(kid);
2233 OP *sib = OpSIBLING(kid);
2234 if (sib && kid->op_type != OP_LEAVEWHEN)
2240 PL_curcop = &PL_compiling;
2244 kid = cLISTOPo->op_first;
2251 S_scalarseq(pTHX_ OP *o)
2254 const OPCODE type = o->op_type;
2256 if (type == OP_LINESEQ || type == OP_SCOPE ||
2257 type == OP_LEAVE || type == OP_LEAVETRY)
2260 for (kid = cLISTOPo->op_first; kid; kid = sib) {
2261 if ((sib = OpSIBLING(kid))
2262 && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
2263 || ( sib->op_targ != OP_NEXTSTATE
2264 && sib->op_targ != OP_DBSTATE )))
2269 PL_curcop = &PL_compiling;
2271 o->op_flags &= ~OPf_PARENS;
2272 if (PL_hints & HINT_BLOCK_SCOPE)
2273 o->op_flags |= OPf_PARENS;
2276 o = newOP(OP_STUB, 0);
2281 S_modkids(pTHX_ OP *o, I32 type)
2283 if (o && o->op_flags & OPf_KIDS) {
2285 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
2286 op_lvalue(kid, type);
2292 /* for a helem/hslice/kvslice, if its a fixed hash, croak on invalid
2293 * const fields. Also, convert CONST keys to HEK-in-SVs.
2294 * rop is the op that retrieves the hash;
2295 * key_op is the first key
2299 S_check_hash_fields_and_hekify(pTHX_ UNOP *rop, SVOP *key_op)
2305 /* find the padsv corresponding to $lex->{} or @{$lex}{} */
2307 if (rop->op_first->op_type == OP_PADSV)
2308 /* @$hash{qw(keys here)} */
2309 rop = (UNOP*)rop->op_first;
2311 /* @{$hash}{qw(keys here)} */
2312 if (rop->op_first->op_type == OP_SCOPE
2313 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2315 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2322 lexname = NULL; /* just to silence compiler warnings */
2323 fields = NULL; /* just to silence compiler warnings */
2327 && (lexname = padnamelist_fetch(PL_comppad_name, rop->op_targ),
2328 SvPAD_TYPED(lexname))
2329 && (fields = (GV**)hv_fetchs(PadnameTYPE(lexname), "FIELDS", FALSE))
2330 && isGV(*fields) && GvHV(*fields);
2332 for (; key_op; key_op = (SVOP*)OpSIBLING(key_op)) {
2334 if (key_op->op_type != OP_CONST)
2336 svp = cSVOPx_svp(key_op);
2338 /* Make the CONST have a shared SV */
2339 if ( !SvIsCOW_shared_hash(sv = *svp)
2340 && SvTYPE(sv) < SVt_PVMG
2345 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2346 SV *nsv = newSVpvn_share(key, SvUTF8(sv) ? -keylen : keylen, 0);
2347 SvREFCNT_dec_NN(sv);
2352 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0))
2354 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
2355 "in variable %"PNf" of type %"HEKf,
2356 SVfARG(*svp), PNfARG(lexname),
2357 HEKfARG(HvNAME_HEK(PadnameTYPE(lexname))));
2364 =for apidoc finalize_optree
2366 This function finalizes the optree. Should be called directly after
2367 the complete optree is built. It does some additional
2368 checking which can't be done in the normal ck_xxx functions and makes
2369 the tree thread-safe.
2374 Perl_finalize_optree(pTHX_ OP* o)
2376 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
2379 SAVEVPTR(PL_curcop);
2387 /* Relocate sv to the pad for thread safety.
2388 * Despite being a "constant", the SV is written to,
2389 * for reference counts, sv_upgrade() etc. */
2390 PERL_STATIC_INLINE void
2391 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
2394 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
2396 ix = pad_alloc(OP_CONST, SVf_READONLY);
2397 SvREFCNT_dec(PAD_SVl(ix));
2398 PAD_SETSV(ix, *svp);
2399 /* XXX I don't know how this isn't readonly already. */
2400 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
2408 S_finalize_op(pTHX_ OP* o)
2410 PERL_ARGS_ASSERT_FINALIZE_OP;
2413 switch (o->op_type) {
2416 PL_curcop = ((COP*)o); /* for warnings */
2419 if (OpHAS_SIBLING(o)) {
2420 OP *sib = OpSIBLING(o);
2421 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
2422 && ckWARN(WARN_EXEC)
2423 && OpHAS_SIBLING(sib))
2425 const OPCODE type = OpSIBLING(sib)->op_type;
2426 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
2427 const line_t oldline = CopLINE(PL_curcop);
2428 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
2429 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2430 "Statement unlikely to be reached");
2431 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2432 "\t(Maybe you meant system() when you said exec()?)\n");
2433 CopLINE_set(PL_curcop, oldline);
2440 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
2441 GV * const gv = cGVOPo_gv;
2442 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
2443 /* XXX could check prototype here instead of just carping */
2444 SV * const sv = sv_newmortal();
2445 gv_efullname3(sv, gv, NULL);
2446 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
2447 "%"SVf"() called too early to check prototype",
2454 if (cSVOPo->op_private & OPpCONST_STRICT)
2455 no_bareword_allowed(o);
2459 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
2464 /* Relocate all the METHOP's SVs to the pad for thread safety. */
2465 case OP_METHOD_NAMED:
2466 case OP_METHOD_SUPER:
2467 case OP_METHOD_REDIR:
2468 case OP_METHOD_REDIR_SUPER:
2469 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
2478 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
2481 rop = (UNOP*)((BINOP*)o)->op_first;
2486 S_scalar_slice_warning(aTHX_ o);
2490 kid = OpSIBLING(cLISTOPo->op_first);
2491 if (/* I bet there's always a pushmark... */
2492 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
2493 && OP_TYPE_ISNT_NN(kid, OP_CONST))
2498 key_op = (SVOP*)(kid->op_type == OP_CONST
2500 : OpSIBLING(kLISTOP->op_first));
2502 rop = (UNOP*)((LISTOP*)o)->op_last;
2505 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
2507 S_check_hash_fields_and_hekify(aTHX_ rop, key_op);
2511 S_scalar_slice_warning(aTHX_ o);
2515 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
2516 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
2523 if (o->op_flags & OPf_KIDS) {
2527 /* check that op_last points to the last sibling, and that
2528 * the last op_sibling/op_sibparent field points back to the
2529 * parent, and that the only ops with KIDS are those which are
2530 * entitled to them */
2531 U32 type = o->op_type;
2535 if (type == OP_NULL) {
2537 /* ck_glob creates a null UNOP with ex-type GLOB
2538 * (which is a list op. So pretend it wasn't a listop */
2539 if (type == OP_GLOB)
2542 family = PL_opargs[type] & OA_CLASS_MASK;
2544 has_last = ( family == OA_BINOP
2545 || family == OA_LISTOP
2546 || family == OA_PMOP
2547 || family == OA_LOOP
2549 assert( has_last /* has op_first and op_last, or ...
2550 ... has (or may have) op_first: */
2551 || family == OA_UNOP
2552 || family == OA_UNOP_AUX
2553 || family == OA_LOGOP
2554 || family == OA_BASEOP_OR_UNOP
2555 || family == OA_FILESTATOP
2556 || family == OA_LOOPEXOP
2557 || family == OA_METHOP
2558 /* I don't know why SASSIGN is tagged as OA_BASEOP - DAPM */
2559 || type == OP_SASSIGN
2560 || type == OP_CUSTOM
2561 || type == OP_NULL /* new_logop does this */
2564 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
2565 # ifdef PERL_OP_PARENT
2566 if (!OpHAS_SIBLING(kid)) {
2568 assert(kid == cLISTOPo->op_last);
2569 assert(kid->op_sibparent == o);
2572 if (has_last && !OpHAS_SIBLING(kid))
2573 assert(kid == cLISTOPo->op_last);
2578 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
2584 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
2586 Propagate lvalue ("modifiable") context to an op and its children.
2587 C<type> represents the context type, roughly based on the type of op that
2588 would do the modifying, although C<local()> is represented by OP_NULL,
2589 because it has no op type of its own (it is signalled by a flag on
2592 This function detects things that can't be modified, such as C<$x+1>, and
2593 generates errors for them. For example, C<$x+1 = 2> would cause it to be
2594 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
2596 It also flags things that need to behave specially in an lvalue context,
2597 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
2603 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
2606 PadnameLVALUE_on(pn);
2607 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
2610 assert(CvPADLIST(cv));
2612 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
2613 assert(PadnameLEN(pn));
2614 PadnameLVALUE_on(pn);
2619 S_vivifies(const OPCODE type)
2622 case OP_RV2AV: case OP_ASLICE:
2623 case OP_RV2HV: case OP_KVASLICE:
2624 case OP_RV2SV: case OP_HSLICE:
2625 case OP_AELEMFAST: case OP_KVHSLICE:
2634 S_lvref(pTHX_ OP *o, I32 type)
2638 switch (o->op_type) {
2640 for (kid = OpSIBLING(cUNOPo->op_first); kid;
2641 kid = OpSIBLING(kid))
2642 S_lvref(aTHX_ kid, type);
2647 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2648 o->op_flags |= OPf_STACKED;
2649 if (o->op_flags & OPf_PARENS) {
2650 if (o->op_private & OPpLVAL_INTRO) {
2651 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2652 "localized parenthesized array in list assignment"));
2656 OpTYPE_set(o, OP_LVAVREF);
2657 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
2658 o->op_flags |= OPf_MOD|OPf_REF;
2661 o->op_private |= OPpLVREF_AV;
2664 kid = cUNOPo->op_first;
2665 if (kid->op_type == OP_NULL)
2666 kid = cUNOPx(OpSIBLING(kUNOP->op_first))
2668 o->op_private = OPpLVREF_CV;
2669 if (kid->op_type == OP_GV)
2670 o->op_flags |= OPf_STACKED;
2671 else if (kid->op_type == OP_PADCV) {
2672 o->op_targ = kid->op_targ;
2674 op_free(cUNOPo->op_first);
2675 cUNOPo->op_first = NULL;
2676 o->op_flags &=~ OPf_KIDS;
2681 if (o->op_flags & OPf_PARENS) {
2683 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2684 "parenthesized hash in list assignment"));
2687 o->op_private |= OPpLVREF_HV;
2691 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2692 o->op_flags |= OPf_STACKED;
2695 if (o->op_flags & OPf_PARENS) goto parenhash;
2696 o->op_private |= OPpLVREF_HV;
2699 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2702 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2703 if (o->op_flags & OPf_PARENS) goto slurpy;
2704 o->op_private |= OPpLVREF_AV;
2708 o->op_private |= OPpLVREF_ELEM;
2709 o->op_flags |= OPf_STACKED;
2713 OpTYPE_set(o, OP_LVREFSLICE);
2714 o->op_private &= OPpLVAL_INTRO|OPpLVREF_ELEM;
2717 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2719 else if (!(o->op_flags & OPf_KIDS))
2721 if (o->op_targ != OP_LIST) {
2722 S_lvref(aTHX_ cBINOPo->op_first, type);
2727 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) {
2728 assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
2729 S_lvref(aTHX_ kid, type);
2733 if (o->op_flags & OPf_PARENS)
2738 /* diag_listed_as: Can't modify reference to %s in %s assignment */
2739 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
2740 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
2745 OpTYPE_set(o, OP_LVREF);
2747 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
2748 if (type == OP_ENTERLOOP)
2749 o->op_private |= OPpLVREF_ITER;
2753 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
2757 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
2760 if (!o || (PL_parser && PL_parser->error_count))
2763 if ((o->op_private & OPpTARGET_MY)
2764 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2769 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
2771 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
2773 switch (o->op_type) {
2778 if ((o->op_flags & OPf_PARENS))
2782 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
2783 !(o->op_flags & OPf_STACKED)) {
2784 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
2785 assert(cUNOPo->op_first->op_type == OP_NULL);
2786 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
2789 else { /* lvalue subroutine call */
2790 o->op_private |= OPpLVAL_INTRO;
2791 PL_modcount = RETURN_UNLIMITED_NUMBER;
2792 if (type == OP_GREPSTART || type == OP_ENTERSUB
2793 || type == OP_REFGEN || type == OP_LEAVESUBLV) {
2794 /* Potential lvalue context: */
2795 o->op_private |= OPpENTERSUB_INARGS;
2798 else { /* Compile-time error message: */
2799 OP *kid = cUNOPo->op_first;
2803 if (kid->op_type != OP_PUSHMARK) {
2804 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
2806 "panic: unexpected lvalue entersub "
2807 "args: type/targ %ld:%"UVuf,
2808 (long)kid->op_type, (UV)kid->op_targ);
2809 kid = kLISTOP->op_first;
2811 while (OpHAS_SIBLING(kid))
2812 kid = OpSIBLING(kid);
2813 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
2814 break; /* Postpone until runtime */
2817 kid = kUNOP->op_first;
2818 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
2819 kid = kUNOP->op_first;
2820 if (kid->op_type == OP_NULL)
2822 "Unexpected constant lvalue entersub "
2823 "entry via type/targ %ld:%"UVuf,
2824 (long)kid->op_type, (UV)kid->op_targ);
2825 if (kid->op_type != OP_GV) {
2832 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
2833 ? MUTABLE_CV(SvRV(gv))
2844 if (flags & OP_LVALUE_NO_CROAK) return NULL;
2845 /* grep, foreach, subcalls, refgen */
2846 if (type == OP_GREPSTART || type == OP_ENTERSUB
2847 || type == OP_REFGEN || type == OP_LEAVESUBLV)
2849 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2850 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
2852 : (o->op_type == OP_ENTERSUB
2853 ? "non-lvalue subroutine call"
2855 type ? PL_op_desc[type] : "local"));
2868 case OP_RIGHT_SHIFT:
2877 if (!(o->op_flags & OPf_STACKED))
2883 if (o->op_flags & OPf_STACKED) {
2887 if (!(o->op_private & OPpREPEAT_DOLIST))
2890 const I32 mods = PL_modcount;
2891 modkids(cBINOPo->op_first, type);
2892 if (type != OP_AASSIGN)
2894 kid = cBINOPo->op_last;
2895 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
2896 const IV iv = SvIV(kSVOP_sv);
2897 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
2899 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
2902 PL_modcount = RETURN_UNLIMITED_NUMBER;
2908 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
2909 op_lvalue(kid, type);
2914 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
2915 PL_modcount = RETURN_UNLIMITED_NUMBER;
2916 return o; /* Treat \(@foo) like ordinary list. */
2920 if (scalar_mod_type(o, type))
2922 ref(cUNOPo->op_first, o->op_type);
2929 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
2930 if (type == OP_LEAVESUBLV && (
2931 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
2932 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2934 o->op_private |= OPpMAYBE_LVSUB;
2938 PL_modcount = RETURN_UNLIMITED_NUMBER;
2942 if (type == OP_LEAVESUBLV)
2943 o->op_private |= OPpMAYBE_LVSUB;
2946 PL_hints |= HINT_BLOCK_SCOPE;
2947 if (type == OP_LEAVESUBLV)
2948 o->op_private |= OPpMAYBE_LVSUB;
2952 ref(cUNOPo->op_first, o->op_type);
2956 PL_hints |= HINT_BLOCK_SCOPE;
2966 case OP_AELEMFAST_LEX:
2973 PL_modcount = RETURN_UNLIMITED_NUMBER;
2974 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
2975 return o; /* Treat \(@foo) like ordinary list. */
2976 if (scalar_mod_type(o, type))
2978 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2979 && type == OP_LEAVESUBLV)
2980 o->op_private |= OPpMAYBE_LVSUB;
2984 if (!type) /* local() */
2985 Perl_croak(aTHX_ "Can't localize lexical variable %"PNf,
2986 PNfARG(PAD_COMPNAME(o->op_targ)));
2987 if (!(o->op_private & OPpLVAL_INTRO)
2988 || ( type != OP_SASSIGN && type != OP_AASSIGN
2989 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
2990 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
2998 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
3002 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
3008 if (type == OP_LEAVESUBLV)
3009 o->op_private |= OPpMAYBE_LVSUB;
3010 if (o->op_flags & OPf_KIDS)
3011 op_lvalue(OpSIBLING(cBINOPo->op_first), type);
3016 ref(cBINOPo->op_first, o->op_type);
3017 if (type == OP_ENTERSUB &&
3018 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
3019 o->op_private |= OPpLVAL_DEFER;
3020 if (type == OP_LEAVESUBLV)
3021 o->op_private |= OPpMAYBE_LVSUB;
3028 o->op_private |= OPpLVALUE;
3034 if (o->op_flags & OPf_KIDS)
3035 op_lvalue(cLISTOPo->op_last, type);
3040 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
3042 else if (!(o->op_flags & OPf_KIDS))
3044 if (o->op_targ != OP_LIST) {
3045 op_lvalue(cBINOPo->op_first, type);
3051 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3052 /* elements might be in void context because the list is
3053 in scalar context or because they are attribute sub calls */
3054 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
3055 op_lvalue(kid, type);
3063 if (type == OP_LEAVESUBLV
3064 || !S_vivifies(cLOGOPo->op_first->op_type))
3065 op_lvalue(cLOGOPo->op_first, type);
3066 if (type == OP_LEAVESUBLV
3067 || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
3068 op_lvalue(OpSIBLING(cLOGOPo->op_first), type);
3072 if (type != OP_AASSIGN && type != OP_SASSIGN
3073 && type != OP_ENTERLOOP)
3075 /* Don’t bother applying lvalue context to the ex-list. */
3076 kid = cUNOPx(cUNOPo->op_first)->op_first;
3077 assert (!OpHAS_SIBLING(kid));
3080 if (type != OP_AASSIGN) goto nomod;
3081 kid = cUNOPo->op_first;
3084 const U8 ec = PL_parser ? PL_parser->error_count : 0;
3085 S_lvref(aTHX_ kid, type);
3086 if (!PL_parser || PL_parser->error_count == ec) {
3087 if (!FEATURE_REFALIASING_IS_ENABLED)
3089 "Experimental aliasing via reference not enabled");
3090 Perl_ck_warner_d(aTHX_
3091 packWARN(WARN_EXPERIMENTAL__REFALIASING),
3092 "Aliasing via reference is experimental");
3095 if (o->op_type == OP_REFGEN)
3096 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
3101 kid = cLISTOPo->op_first;
3102 if (kid && kid->op_type == OP_PUSHRE &&
3104 || o->op_flags & OPf_STACKED
3106 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
3108 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
3111 /* This is actually @array = split. */
3112 PL_modcount = RETURN_UNLIMITED_NUMBER;
3118 op_lvalue(cUNOPo->op_first, OP_ENTERSUB);
3122 /* [20011101.069] File test operators interpret OPf_REF to mean that
3123 their argument is a filehandle; thus \stat(".") should not set
3125 if (type == OP_REFGEN &&
3126 PL_check[o->op_type] == Perl_ck_ftst)
3129 if (type != OP_LEAVESUBLV)
3130 o->op_flags |= OPf_MOD;
3132 if (type == OP_AASSIGN || type == OP_SASSIGN)
3133 o->op_flags |= OPf_SPECIAL|OPf_REF;
3134 else if (!type) { /* local() */
3137 o->op_private |= OPpLVAL_INTRO;
3138 o->op_flags &= ~OPf_SPECIAL;
3139 PL_hints |= HINT_BLOCK_SCOPE;
3144 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
3145 "Useless localization of %s", OP_DESC(o));
3148 else if (type != OP_GREPSTART && type != OP_ENTERSUB
3149 && type != OP_LEAVESUBLV)
3150 o->op_flags |= OPf_REF;
3155 S_scalar_mod_type(const OP *o, I32 type)
3160 if (o && o->op_type == OP_RV2GV)
3184 case OP_RIGHT_SHIFT:
3205 S_is_handle_constructor(const OP *o, I32 numargs)
3207 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
3209 switch (o->op_type) {
3217 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
3230 S_refkids(pTHX_ OP *o, I32 type)
3232 if (o && o->op_flags & OPf_KIDS) {
3234 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3241 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
3246 PERL_ARGS_ASSERT_DOREF;
3248 if (PL_parser && PL_parser->error_count)
3251 switch (o->op_type) {
3253 if ((type == OP_EXISTS || type == OP_DEFINED) &&
3254 !(o->op_flags & OPf_STACKED)) {
3255 OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
3256 assert(cUNOPo->op_first->op_type == OP_NULL);
3257 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
3258 o->op_flags |= OPf_SPECIAL;
3260 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
3261 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3262 : type == OP_RV2HV ? OPpDEREF_HV
3264 o->op_flags |= OPf_MOD;
3270 for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
3271 doref(kid, type, set_op_ref);
3274 if (type == OP_DEFINED)
3275 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3276 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3279 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3280 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3281 : type == OP_RV2HV ? OPpDEREF_HV
3283 o->op_flags |= OPf_MOD;
3290 o->op_flags |= OPf_REF;
3293 if (type == OP_DEFINED)
3294 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3295 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3301 o->op_flags |= OPf_REF;
3306 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
3308 doref(cBINOPo->op_first, type, set_op_ref);
3312 doref(cBINOPo->op_first, o->op_type, set_op_ref);
3313 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3314 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3315 : type == OP_RV2HV ? OPpDEREF_HV
3317 o->op_flags |= OPf_MOD;
3327 if (!(o->op_flags & OPf_KIDS))
3329 doref(cLISTOPo->op_last, type, set_op_ref);
3339 S_dup_attrlist(pTHX_ OP *o)
3343 PERL_ARGS_ASSERT_DUP_ATTRLIST;
3345 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
3346 * where the first kid is OP_PUSHMARK and the remaining ones
3347 * are OP_CONST. We need to push the OP_CONST values.
3349 if (o->op_type == OP_CONST)
3350 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
3352 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
3354 for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) {
3355 if (o->op_type == OP_CONST)
3356 rop = op_append_elem(OP_LIST, rop,
3357 newSVOP(OP_CONST, o->op_flags,
3358 SvREFCNT_inc_NN(cSVOPo->op_sv)));
3365 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
3367 PERL_ARGS_ASSERT_APPLY_ATTRS;
3369 SV * const stashsv = newSVhek(HvNAME_HEK(stash));
3371 /* fake up C<use attributes $pkg,$rv,@attrs> */
3373 #define ATTRSMODULE "attributes"
3374 #define ATTRSMODULE_PM "attributes.pm"
3377 aTHX_ PERL_LOADMOD_IMPORT_OPS,
3378 newSVpvs(ATTRSMODULE),
3380 op_prepend_elem(OP_LIST,
3381 newSVOP(OP_CONST, 0, stashsv),
3382 op_prepend_elem(OP_LIST,
3383 newSVOP(OP_CONST, 0,
3385 dup_attrlist(attrs))));
3390 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
3392 OP *pack, *imop, *arg;
3393 SV *meth, *stashsv, **svp;
3395 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
3400 assert(target->op_type == OP_PADSV ||
3401 target->op_type == OP_PADHV ||
3402 target->op_type == OP_PADAV);
3404 /* Ensure that attributes.pm is loaded. */
3405 /* Don't force the C<use> if we don't need it. */
3406 svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
3407 if (svp && *svp != &PL_sv_undef)
3408 NOOP; /* already in %INC */
3410 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
3411 newSVpvs(ATTRSMODULE), NULL);
3413 /* Need package name for method call. */
3414 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
3416 /* Build up the real arg-list. */
3417 stashsv = newSVhek(HvNAME_HEK(stash));
3419 arg = newOP(OP_PADSV, 0);
3420 arg->op_targ = target->op_targ;
3421 arg = op_prepend_elem(OP_LIST,
3422 newSVOP(OP_CONST, 0, stashsv),
3423 op_prepend_elem(OP_LIST,
3424 newUNOP(OP_REFGEN, 0,
3426 dup_attrlist(attrs)));
3428 /* Fake up a method call to import */
3429 meth = newSVpvs_share("import");
3430 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
3431 op_append_elem(OP_LIST,
3432 op_prepend_elem(OP_LIST, pack, arg),
3433 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
3435 /* Combine the ops. */
3436 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
3440 =notfor apidoc apply_attrs_string
3442 Attempts to apply a list of attributes specified by the C<attrstr> and
3443 C<len> arguments to the subroutine identified by the C<cv> argument which
3444 is expected to be associated with the package identified by the C<stashpv>
3445 argument (see L<attributes>). It gets this wrong, though, in that it
3446 does not correctly identify the boundaries of the individual attribute
3447 specifications within C<attrstr>. This is not really intended for the
3448 public API, but has to be listed here for systems such as AIX which
3449 need an explicit export list for symbols. (It's called from XS code
3450 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
3451 to respect attribute syntax properly would be welcome.
3457 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
3458 const char *attrstr, STRLEN len)
3462 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
3465 len = strlen(attrstr);
3469 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
3471 const char * const sstr = attrstr;
3472 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
3473 attrs = op_append_elem(OP_LIST, attrs,
3474 newSVOP(OP_CONST, 0,
3475 newSVpvn(sstr, attrstr-sstr)));
3479 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3480 newSVpvs(ATTRSMODULE),
3481 NULL, op_prepend_elem(OP_LIST,
3482 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
3483 op_prepend_elem(OP_LIST,
3484 newSVOP(OP_CONST, 0,
3485 newRV(MUTABLE_SV(cv))),
3490 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name)
3492 OP *new_proto = NULL;
3497 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
3503 if (o->op_type == OP_CONST) {
3504 pv = SvPV(cSVOPo_sv, pvlen);
3505 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3506 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3507 SV ** const tmpo = cSVOPx_svp(o);
3508 SvREFCNT_dec(cSVOPo_sv);
3513 } else if (o->op_type == OP_LIST) {
3515 assert(o->op_flags & OPf_KIDS);
3516 lasto = cLISTOPo->op_first;
3517 assert(lasto->op_type == OP_PUSHMARK);
3518 for (o = OpSIBLING(lasto); o; o = OpSIBLING(o)) {
3519 if (o->op_type == OP_CONST) {
3520 pv = SvPV(cSVOPo_sv, pvlen);
3521 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3522 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3523 SV ** const tmpo = cSVOPx_svp(o);
3524 SvREFCNT_dec(cSVOPo_sv);
3526 if (new_proto && ckWARN(WARN_MISC)) {
3528 const char * newp = SvPV(cSVOPo_sv, new_len);
3529 Perl_warner(aTHX_ packWARN(WARN_MISC),
3530 "Attribute prototype(%"UTF8f") discards earlier prototype attribute in same sub",
3531 UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
3537 /* excise new_proto from the list */
3538 op_sibling_splice(*attrs, lasto, 1, NULL);
3545 /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
3546 would get pulled in with no real need */
3547 if (!OpHAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
3556 svname = sv_newmortal();
3557 gv_efullname3(svname, name, NULL);
3559 else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
3560 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
3562 svname = (SV *)name;
3563 if (ckWARN(WARN_ILLEGALPROTO))
3564 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE);
3565 if (*proto && ckWARN(WARN_PROTOTYPE)) {
3566 STRLEN old_len, new_len;
3567 const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
3568 const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
3570 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3571 "Prototype '%"UTF8f"' overridden by attribute 'prototype(%"UTF8f")'"
3573 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
3574 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
3584 S_cant_declare(pTHX_ OP *o)
3586 if (o->op_type == OP_NULL
3587 && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
3588 o = cUNOPo->op_first;
3589 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
3590 o->op_type == OP_NULL
3591 && o->op_flags & OPf_SPECIAL
3594 PL_parser->in_my == KEY_our ? "our" :
3595 PL_parser->in_my == KEY_state ? "state" :
3600 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
3603 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
3605 PERL_ARGS_ASSERT_MY_KID;
3607 if (!o || (PL_parser && PL_parser->error_count))
3612 if (type == OP_LIST) {
3614 for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
3615 my_kid(kid, attrs, imopsp);
3617 } else if (type == OP_UNDEF || type == OP_STUB) {
3619 } else if (type == OP_RV2SV || /* "our" declaration */
3621 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
3622 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
3623 S_cant_declare(aTHX_ o);
3625 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
3627 PL_parser->in_my = FALSE;
3628 PL_parser->in_my_stash = NULL;
3629 apply_attrs(GvSTASH(gv),
3630 (type == OP_RV2SV ? GvSV(gv) :
3631 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
3632 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
3635 o->op_private |= OPpOUR_INTRO;
3638 else if (type != OP_PADSV &&
3641 type != OP_PUSHMARK)
3643 S_cant_declare(aTHX_ o);
3646 else if (attrs && type != OP_PUSHMARK) {
3650 PL_parser->in_my = FALSE;
3651 PL_parser->in_my_stash = NULL;
3653 /* check for C<my Dog $spot> when deciding package */
3654 stash = PAD_COMPNAME_TYPE(o->op_targ);
3656 stash = PL_curstash;
3657 apply_attrs_my(stash, o, attrs, imopsp);
3659 o->op_flags |= OPf_MOD;
3660 o->op_private |= OPpLVAL_INTRO;
3662 o->op_private |= OPpPAD_STATE;
3667 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
3670 int maybe_scalar = 0;
3672 PERL_ARGS_ASSERT_MY_ATTRS;
3674 /* [perl #17376]: this appears to be premature, and results in code such as
3675 C< our(%x); > executing in list mode rather than void mode */
3677 if (o->op_flags & OPf_PARENS)
3687 o = my_kid(o, attrs, &rops);
3689 if (maybe_scalar && o->op_type == OP_PADSV) {
3690 o = scalar(op_append_list(OP_LIST, rops, o));
3691 o->op_private |= OPpLVAL_INTRO;
3694 /* The listop in rops might have a pushmark at the beginning,
3695 which will mess up list assignment. */
3696 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
3697 if (rops->op_type == OP_LIST &&
3698 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
3700 OP * const pushmark = lrops->op_first;
3701 /* excise pushmark */
3702 op_sibling_splice(rops, NULL, 1, NULL);
3705 o = op_append_list(OP_LIST, o, rops);
3708 PL_parser->in_my = FALSE;
3709 PL_parser->in_my_stash = NULL;
3714 Perl_sawparens(pTHX_ OP *o)
3716 PERL_UNUSED_CONTEXT;
3718 o->op_flags |= OPf_PARENS;
3723 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
3727 const OPCODE ltype = left->op_type;
3728 const OPCODE rtype = right->op_type;
3730 PERL_ARGS_ASSERT_BIND_MATCH;
3732 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
3733 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
3735 const char * const desc
3737 rtype == OP_SUBST || rtype == OP_TRANS
3738 || rtype == OP_TRANSR
3740 ? (int)rtype : OP_MATCH];
3741 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
3743 S_op_varname(aTHX_ left);
3745 Perl_warner(aTHX_ packWARN(WARN_MISC),
3746 "Applying %s to %"SVf" will act on scalar(%"SVf")",
3747 desc, SVfARG(name), SVfARG(name));
3749 const char * const sample = (isary
3750 ? "@array" : "%hash");
3751 Perl_warner(aTHX_ packWARN(WARN_MISC),
3752 "Applying %s to %s will act on scalar(%s)",
3753 desc, sample, sample);
3757 if (rtype == OP_CONST &&
3758 cSVOPx(right)->op_private & OPpCONST_BARE &&
3759 cSVOPx(right)->op_private & OPpCONST_STRICT)
3761 no_bareword_allowed(right);
3764 /* !~ doesn't make sense with /r, so error on it for now */
3765 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
3767 /* diag_listed_as: Using !~ with %s doesn't make sense */
3768 yyerror("Using !~ with s///r doesn't make sense");
3769 if (rtype == OP_TRANSR && type == OP_NOT)
3770 /* diag_listed_as: Using !~ with %s doesn't make sense */
3771 yyerror("Using !~ with tr///r doesn't make sense");
3773 ismatchop = (rtype == OP_MATCH ||
3774 rtype == OP_SUBST ||
3775 rtype == OP_TRANS || rtype == OP_TRANSR)
3776 && !(right->op_flags & OPf_SPECIAL);
3777 if (ismatchop && right->op_private & OPpTARGET_MY) {
3779 right->op_private &= ~OPpTARGET_MY;
3781 if (!(right->op_flags & OPf_STACKED) && !right->op_targ && ismatchop) {
3782 if (left->op_type == OP_PADSV
3783 && !(left->op_private & OPpLVAL_INTRO))
3785 right->op_targ = left->op_targ;
3790 right->op_flags |= OPf_STACKED;
3791 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
3792 ! (rtype == OP_TRANS &&
3793 right->op_private & OPpTRANS_IDENTICAL) &&
3794 ! (rtype == OP_SUBST &&
3795 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
3796 left = op_lvalue(left, rtype);
3797 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
3798 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
3800 o = op_prepend_elem(rtype, scalar(left), right);
3803 return newUNOP(OP_NOT, 0, scalar(o));
3807 return bind_match(type, left,
3808 pmruntime(newPMOP(OP_MATCH, 0), right, NULL, 0, 0));
3812 Perl_invert(pTHX_ OP *o)
3816 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
3820 =for apidoc Amx|OP *|op_scope|OP *o
3822 Wraps up an op tree with some additional ops so that at runtime a dynamic
3823 scope will be created. The original ops run in the new dynamic scope,
3824 and then, provided that they exit normally, the scope will be unwound.
3825 The additional ops used to create and unwind the dynamic scope will
3826 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
3827 instead if the ops are simple enough to not need the full dynamic scope
3834 Perl_op_scope(pTHX_ OP *o)
3838 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
3839 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
3840 OpTYPE_set(o, OP_LEAVE);
3842 else if (o->op_type == OP_LINESEQ) {
3844 OpTYPE_set(o, OP_SCOPE);
3845 kid = ((LISTOP*)o)->op_first;
3846 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
3849 /* The following deals with things like 'do {1 for 1}' */
3850 kid = OpSIBLING(kid);
3852 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
3857 o = newLISTOP(OP_SCOPE, 0, o, NULL);
3863 Perl_op_unscope(pTHX_ OP *o)
3865 if (o && o->op_type == OP_LINESEQ) {
3866 OP *kid = cLISTOPo->op_first;
3867 for(; kid; kid = OpSIBLING(kid))
3868 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
3875 =for apidoc Am|int|block_start|int full
3877 Handles compile-time scope entry.
3878 Arranges for hints to be restored on block
3879 exit and also handles pad sequence numbers to make lexical variables scope
3880 right. Returns a savestack index for use with C<block_end>.
3886 Perl_block_start(pTHX_ int full)
3888 const int retval = PL_savestack_ix;
3890 PL_compiling.cop_seq = PL_cop_seqmax;
3892 pad_block_start(full);
3894 PL_hints &= ~HINT_BLOCK_SCOPE;
3895 SAVECOMPILEWARNINGS();
3896 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
3897 SAVEI32(PL_compiling.cop_seq);
3898 PL_compiling.cop_seq = 0;
3900 CALL_BLOCK_HOOKS(bhk_start, full);
3906 =for apidoc Am|OP *|block_end|I32 floor|OP *seq
3908 Handles compile-time scope exit. C<floor>
3909 is the savestack index returned by
3910 C<block_start>, and C<seq> is the body of the block. Returns the block,
3917 Perl_block_end(pTHX_ I32 floor, OP *seq)
3919 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
3920 OP* retval = scalarseq(seq);
3923 /* XXX Is the null PL_parser check necessary here? */
3924 assert(PL_parser); /* Let’s find out under debugging builds. */
3925 if (PL_parser && PL_parser->parsed_sub) {
3926 o = newSTATEOP(0, NULL, NULL);
3928 retval = op_append_elem(OP_LINESEQ, retval, o);
3931 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
3935 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
3939 /* pad_leavemy has created a sequence of introcv ops for all my
3940 subs declared in the block. We have to replicate that list with
3941 clonecv ops, to deal with this situation:
3946 sub s1 { state sub foo { \&s2 } }
3949 Originally, I was going to have introcv clone the CV and turn
3950 off the stale flag. Since &s1 is declared before &s2, the
3951 introcv op for &s1 is executed (on sub entry) before the one for
3952 &s2. But the &foo sub inside &s1 (which is cloned when &s1 is
3953 cloned, since it is a state sub) closes over &s2 and expects
3954 to see it in its outer CV’s pad. If the introcv op clones &s1,
3955 then &s2 is still marked stale. Since &s1 is not active, and
3956 &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia-
3957 ble will not stay shared’ warning. Because it is the same stub
3958 that will be used when the introcv op for &s2 is executed, clos-
3959 ing over it is safe. Hence, we have to turn off the stale flag
3960 on all lexical subs in the block before we clone any of them.
3961 Hence, having introcv clone the sub cannot work. So we create a
3962 list of ops like this:
3986 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
3987 OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
3988 for (;; kid = OpSIBLING(kid)) {
3989 OP *newkid = newOP(OP_CLONECV, 0);
3990 newkid->op_targ = kid->op_targ;
3991 o = op_append_elem(OP_LINESEQ, o, newkid);
3992 if (kid == last) break;
3994 retval = op_prepend_elem(OP_LINESEQ, o, retval);
3997 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
4003 =head1 Compile-time scope hooks
4005 =for apidoc Aox||blockhook_register
4007 Register a set of hooks to be called when the Perl lexical scope changes
4008 at compile time. See L<perlguts/"Compile-time scope hooks">.
4014 Perl_blockhook_register(pTHX_ BHK *hk)
4016 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
4018 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
4022 Perl_newPROG(pTHX_ OP *o)
4024 PERL_ARGS_ASSERT_NEWPROG;
4031 PL_eval_root = newUNOP(OP_LEAVEEVAL,
4032 ((PL_in_eval & EVAL_KEEPERR)
4033 ? OPf_SPECIAL : 0), o);
4035 cx = &cxstack[cxstack_ix];
4036 assert(CxTYPE(cx) == CXt_EVAL);
4038 if ((cx->blk_gimme & G_WANT) == G_VOID)
4039 scalarvoid(PL_eval_root);
4040 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
4043 scalar(PL_eval_root);
4045 PL_eval_start = op_linklist(PL_eval_root);
4046 PL_eval_root->op_private |= OPpREFCOUNTED;
4047 OpREFCNT_set(PL_eval_root, 1);
4048 PL_eval_root->op_next = 0;
4049 i = PL_savestack_ix;
4052 CALL_PEEP(PL_eval_start);
4053 finalize_optree(PL_eval_root);
4054 S_prune_chain_head(&PL_eval_start);
4056 PL_savestack_ix = i;
4059 if (o->op_type == OP_STUB) {
4060 /* This block is entered if nothing is compiled for the main
4061 program. This will be the case for an genuinely empty main
4062 program, or one which only has BEGIN blocks etc, so already
4065 Historically (5.000) the guard above was !o. However, commit
4066 f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
4067 c71fccf11fde0068, changed perly.y so that newPROG() is now
4068 called with the output of block_end(), which returns a new
4069 OP_STUB for the case of an empty optree. ByteLoader (and
4070 maybe other things) also take this path, because they set up
4071 PL_main_start and PL_main_root directly, without generating an
4074 If the parsing the main program aborts (due to parse errors,
4075 or due to BEGIN or similar calling exit), then newPROG()
4076 isn't even called, and hence this code path and its cleanups
4077 are skipped. This shouldn't make a make a difference:
4078 * a non-zero return from perl_parse is a failure, and
4079 perl_destruct() should be called immediately.
4080 * however, if exit(0) is called during the parse, then
4081 perl_parse() returns 0, and perl_run() is called. As
4082 PL_main_start will be NULL, perl_run() will return
4083 promptly, and the exit code will remain 0.
4086 PL_comppad_name = 0;
4088 S_op_destroy(aTHX_ o);
4091 PL_main_root = op_scope(sawparens(scalarvoid(o)));
4092 PL_curcop = &PL_compiling;
4093 PL_main_start = LINKLIST(PL_main_root);
4094 PL_main_root->op_private |= OPpREFCOUNTED;
4095 OpREFCNT_set(PL_main_root, 1);
4096 PL_main_root->op_next = 0;
4097 CALL_PEEP(PL_main_start);
4098 finalize_optree(PL_main_root);
4099 S_prune_chain_head(&PL_main_start);
4100 cv_forget_slab(PL_compcv);
4103 /* Register with debugger */
4105 CV * const cv = get_cvs("DB::postponed", 0);
4109 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
4111 call_sv(MUTABLE_SV(cv), G_DISCARD);
4118 Perl_localize(pTHX_ OP *o, I32 lex)
4120 PERL_ARGS_ASSERT_LOCALIZE;
4122 if (o->op_flags & OPf_PARENS)
4123 /* [perl #17376]: this appears to be premature, and results in code such as
4124 C< our(%x); > executing in list mode rather than void mode */
4131 if ( PL_parser->bufptr > PL_parser->oldbufptr
4132 && PL_parser->bufptr[-1] == ','
4133 && ckWARN(WARN_PARENTHESIS))
4135 char *s = PL_parser->bufptr;
4138 /* some heuristics to detect a potential error */
4139 while (*s && (strchr(", \t\n", *s)))
4143 if (*s && strchr("@$%*", *s) && *++s
4144 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
4147 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
4149 while (*s && (strchr(", \t\n", *s)))
4155 if (sigil && (*s == ';' || *s == '=')) {
4156 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
4157 "Parentheses missing around \"%s\" list",
4159 ? (PL_parser->in_my == KEY_our
4161 : PL_parser->in_my == KEY_state
4171 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
4172 PL_parser->in_my = FALSE;
4173 PL_parser->in_my_stash = NULL;
4178 Perl_jmaybe(pTHX_ OP *o)
4180 PERL_ARGS_ASSERT_JMAYBE;
4182 if (o->op_type == OP_LIST) {
4184 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
4185 o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
4190 PERL_STATIC_INLINE OP *
4191 S_op_std_init(pTHX_ OP *o)
4193 I32 type = o->op_type;
4195 PERL_ARGS_ASSERT_OP_STD_INIT;
4197 if (PL_opargs[type] & OA_RETSCALAR)
4199 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
4200 o->op_targ = pad_alloc(type, SVs_PADTMP);
4205 PERL_STATIC_INLINE OP *
4206 S_op_integerize(pTHX_ OP *o)
4208 I32 type = o->op_type;
4210 PERL_ARGS_ASSERT_OP_INTEGERIZE;
4212 /* integerize op. */
4213 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
4216 o->op_ppaddr = PL_ppaddr[++(o->op_type)];
4219 if (type == OP_NEGATE)
4220 /* XXX might want a ck_negate() for this */
4221 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
4227 S_fold_constants(pTHX_ OP *o)
4232 VOL I32 type = o->op_type;
4238 SV * const oldwarnhook = PL_warnhook;
4239 SV * const olddiehook = PL_diehook;
4241 U8 oldwarn = PL_dowarn;
4244 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
4246 if (!(PL_opargs[type] & OA_FOLDCONST))
4255 #ifdef USE_LOCALE_CTYPE
4256 if (IN_LC_COMPILETIME(LC_CTYPE))
4265 #ifdef USE_LOCALE_COLLATE
4266 if (IN_LC_COMPILETIME(LC_COLLATE))
4271 /* XXX what about the numeric ops? */
4272 #ifdef USE_LOCALE_NUMERIC
4273 if (IN_LC_COMPILETIME(LC_NUMERIC))
4278 if (!OpHAS_SIBLING(cLISTOPo->op_first)
4279 || OpSIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
4282 SV * const sv = cSVOPx_sv(OpSIBLING(cLISTOPo->op_first));
4283 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
4285 const char *s = SvPVX_const(sv);
4286 while (s < SvEND(sv)) {
4287 if (isALPHA_FOLD_EQ(*s, 'p')) goto nope;
4294 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
4297 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
4298 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
4302 if (PL_parser && PL_parser->error_count)
4303 goto nope; /* Don't try to run w/ errors */
4305 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4306 const OPCODE type = curop->op_type;
4307 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
4309 type != OP_SCALAR &&
4311 type != OP_PUSHMARK)
4317 curop = LINKLIST(o);
4318 old_next = o->op_next;
4322 oldscope = PL_scopestack_ix;
4323 create_eval_scope(G_FAKINGEVAL);
4325 /* Verify that we don't need to save it: */
4326 assert(PL_curcop == &PL_compiling);
4327 StructCopy(&PL_compiling, ¬_compiling, COP);
4328 PL_curcop = ¬_compiling;
4329 /* The above ensures that we run with all the correct hints of the
4330 currently compiling COP, but that IN_PERL_RUNTIME is true. */
4331 assert(IN_PERL_RUNTIME);
4332 PL_warnhook = PERL_WARNHOOK_FATAL;
4336 /* Effective $^W=1. */
4337 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
4338 PL_dowarn |= G_WARN_ON;
4343 sv = *(PL_stack_sp--);
4344 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
4345 pad_swipe(o->op_targ, FALSE);
4347 else if (SvTEMP(sv)) { /* grab mortal temp? */
4348 SvREFCNT_inc_simple_void(sv);
4351 else { assert(SvIMMORTAL(sv)); }
4354 /* Something tried to die. Abandon constant folding. */
4355 /* Pretend the error never happened. */
4357 o->op_next = old_next;
4361 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
4362 PL_warnhook = oldwarnhook;
4363 PL_diehook = olddiehook;
4364 /* XXX note that this croak may fail as we've already blown away
4365 * the stack - eg any nested evals */
4366 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
4369 PL_dowarn = oldwarn;
4370 PL_warnhook = oldwarnhook;
4371 PL_diehook = olddiehook;
4372 PL_curcop = &PL_compiling;
4374 if (PL_scopestack_ix > oldscope)
4375 delete_eval_scope();
4380 /* OP_STRINGIFY and constant folding are used to implement qq.
4381 Here the constant folding is an implementation detail that we
4382 want to hide. If the stringify op is itself already marked
4383 folded, however, then it is actually a folded join. */
4384 is_stringify = type == OP_STRINGIFY && !o->op_folded;
4389 else if (!SvIMMORTAL(sv)) {
4393 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
4394 if (!is_stringify) newop->op_folded = 1;
4402 S_gen_constant_list(pTHX_ OP *o)
4406 const SSize_t oldtmps_floor = PL_tmps_floor;
4411 if (PL_parser && PL_parser->error_count)
4412 return o; /* Don't attempt to run with errors */
4414 curop = LINKLIST(o);
4417 S_prune_chain_head(&curop);
4419 Perl_pp_pushmark(aTHX);
4422 assert (!(curop->op_flags & OPf_SPECIAL));
4423 assert(curop->op_type == OP_RANGE);
4424 Perl_pp_anonlist(aTHX);
4425 PL_tmps_floor = oldtmps_floor;
4427 OpTYPE_set(o, OP_RV2AV);
4428 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
4429 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
4430 o->op_opt = 0; /* needs to be revisited in rpeep() */
4431 av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
4433 /* replace subtree with an OP_CONST */
4434 curop = ((UNOP*)o)->op_first;
4435 op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
4438 if (AvFILLp(av) != -1)
4439 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
4442 SvREADONLY_on(*svp);
4449 =head1 Optree Manipulation Functions
4452 /* List constructors */
4455 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
4457 Append an item to the list of ops contained directly within a list-type
4458 op, returning the lengthened list. C<first> is the list-type op,
4459 and C<last> is the op to append to the list. C<optype> specifies the
4460 intended opcode for the list. If C<first> is not already a list of the
4461 right type, it will be upgraded into one. If either C<first> or C<last>
4462 is null, the other is returned unchanged.
4468 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
4476 if (first->op_type != (unsigned)type
4477 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
4479 return newLISTOP(type, 0, first, last);
4482 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
4483 first->op_flags |= OPf_KIDS;
4488 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
4490 Concatenate the lists of ops contained directly within two list-type ops,
4491 returning the combined list. C<first> and C<last> are the list-type ops
4492 to concatenate. C<optype> specifies the intended opcode for the list.
4493 If either C<first> or C<last> is not already a list of the right type,
4494 it will be upgraded into one. If either C<first> or C<last> is null,
4495 the other is returned unchanged.
4501 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
4509 if (first->op_type != (unsigned)type)
4510 return op_prepend_elem(type, first, last);
4512 if (last->op_type != (unsigned)type)
4513 return op_append_elem(type, first, last);
4515 OpMORESIB_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first);
4516 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
4517 OpLASTSIB_set(((LISTOP*)first)->op_last, first);
4518 first->op_flags |= (last->op_flags & OPf_KIDS);
4520 S_op_destroy(aTHX_ last);
4526 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
4528 Prepend an item to the list of ops contained directly within a list-type
4529 op, returning the lengthened list. C<first> is the op to prepend to the
4530 list, and C<last> is the list-type op. C<optype> specifies the intended
4531 opcode for the list. If C<last> is not already a list of the right type,
4532 it will be upgraded into one. If either C<first> or C<last> is null,
4533 the other is returned unchanged.
4539 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
4547 if (last->op_type == (unsigned)type) {
4548 if (type == OP_LIST) { /* already a PUSHMARK there */
4549 /* insert 'first' after pushmark */
4550 op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first);
4551 if (!(first->op_flags & OPf_PARENS))
4552 last->op_flags &= ~OPf_PARENS;
4555 op_sibling_splice(last, NULL, 0, first);
4556 last->op_flags |= OPf_KIDS;
4560 return newLISTOP(type, 0, first, last);
4564 =for apidoc Am|OP *|op_convert_list|I32 type|I32 flags|OP *o
4566 Converts C<o> into a list op if it is not one already, and then converts it
4567 into the specified C<type>, calling its check function, allocating a target if
4568 it needs one, and folding constants.
4570 A list-type op is usually constructed one kid at a time via C<newLISTOP>,
4571 C<op_prepend_elem> and C<op_append_elem>. Then finally it is passed to
4572 C<op_convert_list> to make it the right type.
4578 Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o)
4581 if (type < 0) type = -type, flags |= OPf_SPECIAL;
4582 if (!o || o->op_type != OP_LIST)
4583 o = force_list(o, 0);
4586 o->op_flags &= ~OPf_WANT;
4587 o->op_private &= ~OPpLVAL_INTRO;
4590 if (!(PL_opargs[type] & OA_MARK))
4591 op_null(cLISTOPo->op_first);
4593 OP * const kid2 = OpSIBLING(cLISTOPo->op_first);
4594 if (kid2 && kid2->op_type == OP_COREARGS) {
4595 op_null(cLISTOPo->op_first);
4596 kid2->op_private |= OPpCOREARGS_PUSHMARK;
4600 OpTYPE_set(o, type);
4601 o->op_flags |= flags;
4602 if (flags & OPf_FOLDED)
4605 o = CHECKOP(type, o);
4606 if (o->op_type != (unsigned)type)
4609 return fold_constants(op_integerize(op_std_init(o)));
4616 =head1 Optree construction
4618 =for apidoc Am|OP *|newNULLLIST
4620 Constructs, checks, and returns a new C<stub> op, which represents an
4621 empty list expression.
4627 Perl_newNULLLIST(pTHX)
4629 return newOP(OP_STUB, 0);
4632 /* promote o and any siblings to be a list if its not already; i.e.
4640 * pushmark - o - A - B
4642 * If nullit it true, the list op is nulled.
4646 S_force_list(pTHX_ OP *o, bool nullit)
4648 if (!o || o->op_type != OP_LIST) {
4651 /* manually detach any siblings then add them back later */
4652 rest = OpSIBLING(o);
4653 OpLASTSIB_set(o, NULL);
4655 o = newLISTOP(OP_LIST, 0, o, NULL);
4657 op_sibling_splice(o, cLISTOPo->op_last, 0, rest);
4665 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
4667 Constructs, checks, and returns an op of any list type. C<type> is
4668 the opcode. C<flags> gives the eight bits of C<op_flags>, except that
4669 C<OPf_KIDS> will be set automatically if required. C<first> and C<last>
4670 supply up to two ops to be direct children of the list op; they are
4671 consumed by this function and become part of the constructed op tree.
4673 For most list operators, the check function expects all the kid ops to be
4674 present already, so calling C<newLISTOP(OP_JOIN, ...)> (e.g.) is not
4675 appropriate. What you want to do in that case is create an op of type
4676 OP_LIST, append more children to it, and then call L</op_convert_list>.
4677 See L</op_convert_list> for more information.
4684 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4689 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP
4690 || type == OP_CUSTOM);
4692 NewOp(1101, listop, 1, LISTOP);
4694 OpTYPE_set(listop, type);
4697 listop->op_flags = (U8)flags;
4701 else if (!first && last)
4704 OpMORESIB_set(first, last);
4705 listop->op_first = first;
4706 listop->op_last = last;
4707 if (type == OP_LIST) {
4708 OP* const pushop = newOP(OP_PUSHMARK, 0);
4709 OpMORESIB_set(pushop, first);
4710 listop->op_first = pushop;
4711 listop->op_flags |= OPf_KIDS;
4713 listop->op_last = pushop;
4715 if (listop->op_last)
4716 OpLASTSIB_set(listop->op_last, (OP*)listop);
4718 return CHECKOP(type, listop);
4722 =for apidoc Am|OP *|newOP|I32 type|I32 flags
4724 Constructs, checks, and returns an op of any base type (any type that
4725 has no extra fields). C<type> is the opcode. C<flags> gives the
4726 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
4733 Perl_newOP(pTHX_ I32 type, I32 flags)
4738 if (type == -OP_ENTEREVAL) {
4739 type = OP_ENTEREVAL;
4740 flags |= OPpEVAL_BYTES<<8;
4743 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
4744 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4745 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4746 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4748 NewOp(1101, o, 1, OP);
4749 OpTYPE_set(o, type);
4750 o->op_flags = (U8)flags;
4753 o->op_private = (U8)(0 | (flags >> 8));
4754 if (PL_opargs[type] & OA_RETSCALAR)
4756 if (PL_opargs[type] & OA_TARGET)
4757 o->op_targ = pad_alloc(type, SVs_PADTMP);
4758 return CHECKOP(type, o);
4762 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
4764 Constructs, checks, and returns an op of any unary type. C<type> is
4765 the opcode. C<flags> gives the eight bits of C<op_flags>, except that
4766 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
4767 bits, the eight bits of C<op_private>, except that the bit with value 1
4768 is automatically set. C<first> supplies an optional op to be the direct
4769 child of the unary op; it is consumed by this function and become part
4770 of the constructed op tree.
4776 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
4781 if (type == -OP_ENTEREVAL) {
4782 type = OP_ENTEREVAL;
4783 flags |= OPpEVAL_BYTES<<8;
4786 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
4787 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4788 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4789 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
4790 || type == OP_SASSIGN
4791 || type == OP_ENTERTRY
4792 || type == OP_CUSTOM
4793 || type == OP_NULL );
4796 first = newOP(OP_STUB, 0);
4797 if (PL_opargs[type] & OA_MARK)
4798 first = force_list(first, 1);
4800 NewOp(1101, unop, 1, UNOP);
4801 OpTYPE_set(unop, type);
4802 unop->op_first = first;
4803 unop->op_flags = (U8)(flags | OPf_KIDS);
4804 unop->op_private = (U8)(1 | (flags >> 8));
4806 if (!OpHAS_SIBLING(first)) /* true unless weird syntax error */
4807 OpLASTSIB_set(first, (OP*)unop);
4809 unop = (UNOP*) CHECKOP(type, unop);
4813 return fold_constants(op_integerize(op_std_init((OP *) unop)));
4817 =for apidoc newUNOP_AUX
4819 Similar to C<newUNOP>, but creates an UNOP_AUX struct instead, with op_aux
4826 Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags, OP *first, UNOP_AUX_item *aux)
4831 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP_AUX
4832 || type == OP_CUSTOM);
4834 NewOp(1101, unop, 1, UNOP_AUX);
4835 unop->op_type = (OPCODE)type;
4836 unop->op_ppaddr = PL_ppaddr[type];
4837 unop->op_first = first;
4838 unop->op_flags = (U8)(flags | (first ? OPf_KIDS : 0));
4839 unop->op_private = (U8)((first ? 1 : 0) | (flags >> 8));
4842 if (first && !OpHAS_SIBLING(first)) /* true unless weird syntax error */
4843 OpLASTSIB_set(first, (OP*)unop);
4845 unop = (UNOP_AUX*) CHECKOP(type, unop);
4847 return op_std_init((OP *) unop);
4851 =for apidoc Am|OP *|newMETHOP|I32 type|I32 flags|OP *first
4853 Constructs, checks, and returns an op of method type with a method name
4854 evaluated at runtime. C<type> is the opcode. C<flags> gives the eight
4855 bits of C<op_flags>, except that C<OPf_KIDS> will be set automatically,
4856 and, shifted up eight bits, the eight bits of C<op_private>, except that
4857 the bit with value 1 is automatically set. C<dynamic_meth> supplies an
4858 op which evaluates method name; it is consumed by this function and
4859 become part of the constructed op tree.
4860 Supported optypes: OP_METHOD.
4866 S_newMETHOP_internal(pTHX_ I32 type, I32 flags, OP* dynamic_meth, SV* const_meth) {
4870 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_METHOP
4871 || type == OP_CUSTOM);
4873 NewOp(1101, methop, 1, METHOP);
4875 if (PL_opargs[type] & OA_MARK) dynamic_meth = force_list(dynamic_meth, 1);
4876 methop->op_flags = (U8)(flags | OPf_KIDS);
4877 methop->op_u.op_first = dynamic_meth;
4878 methop->op_private = (U8)(1 | (flags >> 8));
4880 if (!OpHAS_SIBLING(dynamic_meth))
4881 OpLASTSIB_set(dynamic_meth, (OP*)methop);
4885 methop->op_flags = (U8)(flags & ~OPf_KIDS);
4886 methop->op_u.op_meth_sv = const_meth;
4887 methop->op_private = (U8)(0 | (flags >> 8));
4888 methop->op_next = (OP*)methop;
4892 methop->op_rclass_targ = 0;
4894 methop->op_rclass_sv = NULL;
4897 OpTYPE_set(methop, type);
4898 return CHECKOP(type, methop);
4902 Perl_newMETHOP (pTHX_ I32 type, I32 flags, OP* dynamic_meth) {
4903 PERL_ARGS_ASSERT_NEWMETHOP;
4904 return newMETHOP_internal(type, flags, dynamic_meth, NULL);
4908 =for apidoc Am|OP *|newMETHOP_named|I32 type|I32 flags|SV *const_meth
4910 Constructs, checks, and returns an op of method type with a constant
4911 method name. C<type> is the opcode. C<flags> gives the eight bits of
4912 C<op_flags>, and, shifted up eight bits, the eight bits of
4913 C<op_private>. C<const_meth> supplies a constant method name;
4914 it must be a shared COW string.
4915 Supported optypes: OP_METHOD_NAMED.
4921 Perl_newMETHOP_named (pTHX_ I32 type, I32 flags, SV* const_meth) {
4922 PERL_ARGS_ASSERT_NEWMETHOP_NAMED;
4923 return newMETHOP_internal(type, flags, NULL, const_meth);
4927 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
4929 Constructs, checks, and returns an op of any binary type. C<type>
4930 is the opcode. C<flags> gives the eight bits of C<op_flags>, except
4931 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
4932 the eight bits of C<op_private>, except that the bit with value 1 or
4933 2 is automatically set as required. C<first> and C<last> supply up to
4934 two ops to be the direct children of the binary op; they are consumed
4935 by this function and become part of the constructed op tree.
4941 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4946 ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
4947 || type == OP_SASSIGN || type == OP_NULL || type == OP_CUSTOM);
4949 NewOp(1101, binop, 1, BINOP);
4952 first = newOP(OP_NULL, 0);
4954 OpTYPE_set(binop, type);
4955 binop->op_first = first;
4956 binop->op_flags = (U8)(flags | OPf_KIDS);
4959 binop->op_private = (U8)(1 | (flags >> 8));
4962 binop->op_private = (U8)(2 | (flags >> 8));
4963 OpMORESIB_set(first, last);
4966 if (!OpHAS_SIBLING(last)) /* true unless weird syntax error */
4967 OpLASTSIB_set(last, (OP*)binop);
4969 binop->op_last = OpSIBLING(binop->op_first);
4971 OpLASTSIB_set(binop->op_last, (OP*)binop);
4973 binop = (BINOP*)CHECKOP(type, binop);
4974 if (binop->op_next || binop->op_type != (OPCODE)type)
4977 return fold_constants(op_integerize(op_std_init((OP *)binop)));
4980 static int uvcompare(const void *a, const void *b)
4981 __attribute__nonnull__(1)
4982 __attribute__nonnull__(2)
4983 __attribute__pure__;
4984 static int uvcompare(const void *a, const void *b)
4986 if (*((const UV *)a) < (*(const UV *)b))
4988 if (*((const UV *)a) > (*(const UV *)b))
4990 if (*((const UV *)a+1) < (*(const UV *)b+1))
4992 if (*((const UV *)a+1) > (*(const UV *)b+1))
4998 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
5000 SV * const tstr = ((SVOP*)expr)->op_sv;
5002 ((SVOP*)repl)->op_sv;
5005 const U8 *t = (U8*)SvPV_const(tstr, tlen);
5006 const U8 *r = (U8*)SvPV_const(rstr, rlen);
5012 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
5013 const I32 squash = o->op_private & OPpTRANS_SQUASH;
5014 I32 del = o->op_private & OPpTRANS_DELETE;
5017 PERL_ARGS_ASSERT_PMTRANS;
5019 PL_hints |= HINT_BLOCK_SCOPE;
5022 o->op_private |= OPpTRANS_FROM_UTF;
5025 o->op_private |= OPpTRANS_TO_UTF;
5027 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
5028 SV* const listsv = newSVpvs("# comment\n");
5030 const U8* tend = t + tlen;
5031 const U8* rend = r + rlen;
5047 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
5048 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
5051 const U32 flags = UTF8_ALLOW_DEFAULT;
5055 t = tsave = bytes_to_utf8(t, &len);
5058 if (!to_utf && rlen) {
5060 r = rsave = bytes_to_utf8(r, &len);
5064 /* There is a snag with this code on EBCDIC: scan_const() in toke.c has
5065 * encoded chars in native encoding which makes ranges in the EBCDIC 0..255
5069 U8 tmpbuf[UTF8_MAXBYTES+1];
5072 Newx(cp, 2*tlen, UV);
5074 transv = newSVpvs("");
5076 cp[2*i] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
5078 if (t < tend && *t == ILLEGAL_UTF8_BYTE) {
5080 cp[2*i+1] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
5084 cp[2*i+1] = cp[2*i];
5088 qsort(cp, i, 2*sizeof(UV), uvcompare);
5089 for (j = 0; j < i; j++) {
5091 diff = val - nextmin;
5093 t = uvchr_to_utf8(tmpbuf,nextmin);
5094 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
5096 U8 range_mark = ILLEGAL_UTF8_BYTE;
5097 t = uvchr_to_utf8(tmpbuf, val - 1);
5098 sv_catpvn(transv, (char *)&range_mark, 1);
5099 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
5106 t = uvchr_to_utf8(tmpbuf,nextmin);
5107 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
5109 U8 range_mark = ILLEGAL_UTF8_BYTE;
5110 sv_catpvn(transv, (char *)&range_mark, 1);
5112 t = uvchr_to_utf8(tmpbuf, 0x7fffffff);
5113 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
5114 t = (const U8*)SvPVX_const(transv);
5115 tlen = SvCUR(transv);
5119 else if (!rlen && !del) {
5120 r = t; rlen = tlen; rend = tend;
5123 if ((!rlen && !del) || t == r ||
5124 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
5126 o->op_private |= OPpTRANS_IDENTICAL;
5130 while (t < tend || tfirst <= tlast) {
5131 /* see if we need more "t" chars */
5132 if (tfirst > tlast) {
5133 tfirst = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
5135 if (t < tend && *t == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
5137 tlast = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
5144 /* now see if we need more "r" chars */
5145 if (rfirst > rlast) {
5147 rfirst = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
5149 if (r < rend && *r == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
5151 rlast = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
5160 rfirst = rlast = 0xffffffff;
5164 /* now see which range will peter out first, if either. */
5165 tdiff = tlast - tfirst;
5166 rdiff = rlast - rfirst;
5167 tcount += tdiff + 1;
5168 rcount += rdiff + 1;
5175 if (rfirst == 0xffffffff) {
5176 diff = tdiff; /* oops, pretend rdiff is infinite */
5178 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
5179 (long)tfirst, (long)tlast);
5181 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
5185 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
5186 (long)tfirst, (long)(tfirst + diff),
5189 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
5190 (long)tfirst, (long)rfirst);
5192 if (rfirst + diff > max)
5193 max = rfirst + diff;
5195 grows = (tfirst < rfirst &&
5196 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
5208 else if (max > 0xff)
5213 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
5215 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVf_READONLY);
5216 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
5217 PAD_SETSV(cPADOPo->op_padix, swash);
5219 SvREADONLY_on(swash);
5221 cSVOPo->op_sv = swash;
5223 SvREFCNT_dec(listsv);
5224 SvREFCNT_dec(transv);
5226 if (!del && havefinal && rlen)
5227 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
5228 newSVuv((UV)final), 0);
5237 else if (rlast == 0xffffffff)
5243 tbl = (short*)PerlMemShared_calloc(
5244 (o->op_private & OPpTRANS_COMPLEMENT) &&
5245 !(o->op_private & OPpTRANS_DELETE) ? 258 : 256,
5247 cPVOPo->op_pv = (char*)tbl;
5249 for (i = 0; i < (I32)tlen; i++)
5251 for (i = 0, j = 0; i < 256; i++) {
5253 if (j >= (I32)rlen) {
5262 if (i < 128 && r[j] >= 128)
5272 o->op_private |= OPpTRANS_IDENTICAL;
5274 else if (j >= (I32)rlen)
5279 PerlMemShared_realloc(tbl,
5280 (0x101+rlen-j) * sizeof(short));
5281 cPVOPo->op_pv = (char*)tbl;
5283 tbl[0x100] = (short)(rlen - j);
5284 for (i=0; i < (I32)rlen - j; i++)
5285 tbl[0x101+i] = r[j+i];
5289 if (!rlen && !del) {
5292 o->op_private |= OPpTRANS_IDENTICAL;
5294 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
5295 o->op_private |= OPpTRANS_IDENTICAL;
5297 for (i = 0; i < 256; i++)
5299 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
5300 if (j >= (I32)rlen) {
5302 if (tbl[t[i]] == -1)
5308 if (tbl[t[i]] == -1) {
5309 if (t[i] < 128 && r[j] >= 128)
5317 if(del && rlen == tlen) {
5318 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
5319 } else if(rlen > tlen && !complement) {
5320 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
5324 o->op_private |= OPpTRANS_GROWS;
5332 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
5334 Constructs, checks, and returns an op of any pattern matching type.
5335 C<type> is the opcode. C<flags> gives the eight bits of C<op_flags>
5336 and, shifted up eight bits, the eight bits of C<op_private>.
5342 Perl_newPMOP(pTHX_ I32 type, I32 flags)
5347 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP
5348 || type == OP_CUSTOM);
5350 NewOp(1101, pmop, 1, PMOP);
5351 OpTYPE_set(pmop, type);
5352 pmop->op_flags = (U8)flags;
5353 pmop->op_private = (U8)(0 | (flags >> 8));
5354 if (PL_opargs[type] & OA_RETSCALAR)
5357 if (PL_hints & HINT_RE_TAINT)
5358 pmop->op_pmflags |= PMf_RETAINT;
5359 #ifdef USE_LOCALE_CTYPE
5360 if (IN_LC_COMPILETIME(LC_CTYPE)) {
5361 set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET);
5366 set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
5368 if (PL_hints & HINT_RE_FLAGS) {
5369 SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
5370 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
5372 if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
5373 reflags = Perl_refcounted_he_fetch_pvn(aTHX_
5374 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0
5376 if (reflags && SvOK(reflags)) {
5377 set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
5383 assert(SvPOK(PL_regex_pad[0]));
5384 if (SvCUR(PL_regex_pad[0])) {
5385 /* Pop off the "packed" IV from the end. */
5386 SV *const repointer_list = PL_regex_pad[0];
5387 const char *p = SvEND(repointer_list) - sizeof(IV);
5388 const IV offset = *((IV*)p);
5390 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
5392 SvEND_set(repointer_list, p);
5394 pmop->op_pmoffset = offset;
5395 /* This slot should be free, so assert this: */
5396 assert(PL_regex_pad[offset] == &PL_sv_undef);
5398 SV * const repointer = &PL_sv_undef;
5399 av_push(PL_regex_padav, repointer);
5400 pmop->op_pmoffset = av_tindex(PL_regex_padav);
5401 PL_regex_pad = AvARRAY(PL_regex_padav);
5405 return CHECKOP(type, pmop);
5413 /* Any pad names in scope are potentially lvalues. */
5414 for (; i < PadnamelistMAXNAMED(PL_comppad_name); i++) {
5415 PADNAME *pn = PAD_COMPNAME_SV(i);
5416 if (!pn || !PadnameLEN(pn))
5418 if (PadnameOUTER(pn) || PadnameIN_SCOPE(pn, PL_cop_seqmax))
5419 S_mark_padname_lvalue(aTHX_ pn);
5423 /* Given some sort of match op o, and an expression expr containing a
5424 * pattern, either compile expr into a regex and attach it to o (if it's
5425 * constant), or convert expr into a runtime regcomp op sequence (if it's
5428 * isreg indicates that the pattern is part of a regex construct, eg
5429 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
5430 * split "pattern", which aren't. In the former case, expr will be a list
5431 * if the pattern contains more than one term (eg /a$b/).
5433 * When the pattern has been compiled within a new anon CV (for
5434 * qr/(?{...})/ ), then floor indicates the savestack level just before
5435 * the new sub was created
5439 Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, bool isreg, I32 floor)
5443 I32 repl_has_vars = 0;
5444 bool is_trans = (o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
5445 bool is_compiletime;
5448 PERL_ARGS_ASSERT_PMRUNTIME;
5451 return pmtrans(o, expr, repl);
5454 /* find whether we have any runtime or code elements;
5455 * at the same time, temporarily set the op_next of each DO block;
5456 * then when we LINKLIST, this will cause the DO blocks to be excluded
5457 * from the op_next chain (and from having LINKLIST recursively
5458 * applied to them). We fix up the DOs specially later */
5462 if (expr->op_type == OP_LIST) {
5464 for (o = cLISTOPx(expr)->op_first; o; o = OpSIBLING(o)) {
5465 if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)) {
5467 assert(!o->op_next);
5468 if (UNLIKELY(!OpHAS_SIBLING(o))) {
5469 assert(PL_parser && PL_parser->error_count);
5470 /* This can happen with qr/ (?{(^{})/. Just fake up
5471 the op we were expecting to see, to avoid crashing
5473 op_sibling_splice(expr, o, 0,
5474 newSVOP(OP_CONST, 0, &PL_sv_no));
5476 o->op_next = OpSIBLING(o);
5478 else if (o->op_type != OP_CONST && o->op_type != OP_PUSHMARK)
5482 else if (expr->op_type != OP_CONST)
5487 /* fix up DO blocks; treat each one as a separate little sub;
5488 * also, mark any arrays as LIST/REF */
5490 if (expr->op_type == OP_LIST) {
5492 for (o = cLISTOPx(expr)->op_first; o; o = OpSIBLING(o)) {
5494 if (o->op_type == OP_PADAV || o->op_type == OP_RV2AV) {
5495 assert( !(o->op_flags & OPf_WANT));
5496 /* push the array rather than its contents. The regex
5497 * engine will retrieve and join the elements later */
5498 o->op_flags |= (OPf_WANT_LIST | OPf_REF);
5502 if (!(o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)))
5504 o->op_next = NULL; /* undo temporary hack from above */
5507 if (cLISTOPo->op_first->op_type == OP_LEAVE) {
5508 LISTOP *leaveop = cLISTOPx(cLISTOPo->op_first);
5510 assert(leaveop->op_first->op_type == OP_ENTER);
5511 assert(OpHAS_SIBLING(leaveop->op_first));
5512 o->op_next = OpSIBLING(leaveop->op_first);
5514 assert(leaveop->op_flags & OPf_KIDS);
5515 assert(leaveop->op_last->op_next == (OP*)leaveop);
5516 leaveop->op_next = NULL; /* stop on last op */
5517 op_null((OP*)leaveop);
5521 OP *scope = cLISTOPo->op_first;
5522 assert(scope->op_type == OP_SCOPE);
5523 assert(scope->op_flags & OPf_KIDS);
5524 scope->op_next = NULL; /* stop on last op */
5527 /* have to peep the DOs individually as we've removed it from
5528 * the op_next chain */
5530 S_prune_chain_head(&(o->op_next));
5532 /* runtime finalizes as part of finalizing whole tree */
5536 else if (expr->op_type == OP_PADAV || expr->op_type == OP_RV2AV) {
5537 assert( !(expr->op_flags & OPf_WANT));
5538 /* push the array rather than its contents. The regex
5539 * engine will retrieve and join the elements later */
5540 expr->op_flags |= (OPf_WANT_LIST | OPf_REF);
5543 PL_hints |= HINT_BLOCK_SCOPE;
5545 assert(floor==0 || (pm->op_pmflags & PMf_HAS_CV));
5547 if (is_compiletime) {
5548 U32 rx_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
5549 regexp_engine const *eng = current_re_engine();
5551 if (o->op_flags & OPf_SPECIAL)
5552 rx_flags |= RXf_SPLIT;
5554 if (!has_code || !eng->op_comp) {
5555 /* compile-time simple constant pattern */
5557 if ((pm->op_pmflags & PMf_HAS_CV) && !has_code) {
5558 /* whoops! we guessed that a qr// had a code block, but we
5559 * were wrong (e.g. /[(?{}]/ ). Throw away the PL_compcv
5560 * that isn't required now. Note that we have to be pretty
5561 * confident that nothing used that CV's pad while the
5562 * regex was parsed, except maybe op targets for \Q etc.
5563 * If there were any op targets, though, they should have
5564 * been stolen by constant folding.
5568 assert(PadnamelistMAXNAMED(PL_comppad_name) == 0);
5569 while (++i <= AvFILLp(PL_comppad)) {
5570 assert(!PL_curpad[i]);
5573 /* But we know that one op is using this CV's slab. */
5574 cv_forget_slab(PL_compcv);
5576 pm->op_pmflags &= ~PMf_HAS_CV;
5581 ? eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
5582 rx_flags, pm->op_pmflags)
5583 : Perl_re_op_compile(aTHX_ NULL, 0, expr, eng, NULL, NULL,
5584 rx_flags, pm->op_pmflags)
5589 /* compile-time pattern that includes literal code blocks */
5590 REGEXP* re = eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
5593 ((PL_hints & HINT_RE_EVAL) ? PMf_USE_RE_EVAL : 0))
5596 if (pm->op_pmflags & PMf_HAS_CV) {
5598 /* this QR op (and the anon sub we embed it in) is never
5599 * actually executed. It's just a placeholder where we can
5600 * squirrel away expr in op_code_list without the peephole
5601 * optimiser etc processing it for a second time */
5602 OP *qr = newPMOP(OP_QR, 0);
5603 ((PMOP*)qr)->op_code_list = expr;
5605 /* handle the implicit sub{} wrapped round the qr/(?{..})/ */
5606 SvREFCNT_inc_simple_void(PL_compcv);
5607 cv = newATTRSUB(floor, 0, NULL, NULL, qr);
5608 ReANY(re)->qr_anoncv = cv;
5610 /* attach the anon CV to the pad so that
5611 * pad_fixup_inner_anons() can find it */
5612 (void)pad_add_anon(cv, o->op_type);
5613 SvREFCNT_inc_simple_void(cv);
5616 pm->op_code_list = expr;
5621 /* runtime pattern: build chain of regcomp etc ops */
5623 PADOFFSET cv_targ = 0;
5625 reglist = isreg && expr->op_type == OP_LIST;
5630 pm->op_code_list = expr;
5631 /* don't free op_code_list; its ops are embedded elsewhere too */
5632 pm->op_pmflags |= PMf_CODELIST_PRIVATE;
5635 if (o->op_flags & OPf_SPECIAL)
5636 pm->op_pmflags |= PMf_SPLIT;
5638 /* the OP_REGCMAYBE is a placeholder in the non-threaded case
5639 * to allow its op_next to be pointed past the regcomp and
5640 * preceding stacking ops;
5641 * OP_REGCRESET is there to reset taint before executing the
5643 if (pm->op_pmflags & PMf_KEEP || TAINTING_get)
5644 expr = newUNOP((TAINTING_get ? OP_REGCRESET : OP_REGCMAYBE),0,expr);
5646 if (pm->op_pmflags & PMf_HAS_CV) {
5647 /* we have a runtime qr with literal code. This means
5648 * that the qr// has been wrapped in a new CV, which
5649 * means that runtime consts, vars etc will have been compiled
5650 * against a new pad. So... we need to execute those ops
5651 * within the environment of the new CV. So wrap them in a call
5652 * to a new anon sub. i.e. for
5656 * we build an anon sub that looks like
5658 * sub { "a", $b, '(?{...})' }
5660 * and call it, passing the returned list to regcomp.
5661 * Or to put it another way, the list of ops that get executed
5665 * ------ -------------------
5666 * pushmark (for regcomp)
5667 * pushmark (for entersub)
5671 * regcreset regcreset
5673 * const("a") const("a")
5675 * const("(?{...})") const("(?{...})")
5680 SvREFCNT_inc_simple_void(PL_compcv);
5681 CvLVALUE_on(PL_compcv);
5682 /* these lines are just an unrolled newANONATTRSUB */
5683 expr = newSVOP(OP_ANONCODE, 0,
5684 MUTABLE_SV(newATTRSUB(floor, 0, NULL, NULL, expr)));
5685 cv_targ = expr->op_targ;
5686 expr = newUNOP(OP_REFGEN, 0, expr);
5688 expr = list(force_list(newUNOP(OP_ENTERSUB, 0, scalar(expr)), 1));
5691 rcop = S_alloc_LOGOP(aTHX_ OP_REGCOMP, scalar(expr), o);
5692 rcop->op_flags |= ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
5693 | (reglist ? OPf_STACKED : 0);
5694 rcop->op_targ = cv_targ;
5696 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
5697 if (PL_hints & HINT_RE_EVAL)
5698 S_set_haseval(aTHX);
5700 /* establish postfix order */
5701 if (expr->op_type == OP_REGCRESET || expr->op_type == OP_REGCMAYBE) {
5703 rcop->op_next = expr;
5704 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
5707 rcop->op_next = LINKLIST(expr);
5708 expr->op_next = (OP*)rcop;
5711 op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
5717 /* If we are looking at s//.../e with a single statement, get past
5718 the implicit do{}. */
5719 if (curop->op_type == OP_NULL && curop->op_flags & OPf_KIDS
5720 && cUNOPx(curop)->op_first->op_type == OP_SCOPE
5721 && cUNOPx(curop)->op_first->op_flags & OPf_KIDS)
5724 OP *kid = cUNOPx(cUNOPx(curop)->op_first)->op_first;
5725 if (kid->op_type == OP_NULL && (sib = OpSIBLING(kid))
5726 && !OpHAS_SIBLING(sib))
5729 if (curop->op_type == OP_CONST)
5731 else if (( (curop->op_type == OP_RV2SV ||
5732 curop->op_type == OP_RV2AV ||
5733 curop->op_type == OP_RV2HV ||
5734 curop->op_type == OP_RV2GV)
5735 && cUNOPx(curop)->op_first
5736 && cUNOPx(curop)->op_first->op_type == OP_GV )
5737 || curop->op_type == OP_PADSV
5738 || curop->op_type == OP_PADAV
5739 || curop->op_type == OP_PADHV
5740 || curop->op_type == OP_PADANY) {
5748 || !RX_PRELEN(PM_GETRE(pm))
5749 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
5751 pm->op_pmflags |= PMf_CONST; /* const for long enough */
5752 op_prepend_elem(o->op_type, scalar(repl), o);
5755 rcop = S_alloc_LOGOP(aTHX_ OP_SUBSTCONT, scalar(repl), o);
5756 rcop->op_private = 1;
5758 /* establish postfix order */
5759 rcop->op_next = LINKLIST(repl);
5760 repl->op_next = (OP*)rcop;
5762 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
5763 assert(!(pm->op_pmflags & PMf_ONCE));
5764 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
5773 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
5775 Constructs, checks, and returns an op of any type that involves an
5776 embedded SV. C<type> is the opcode. C<flags> gives the eight bits
5777 of C<op_flags>. C<sv> gives the SV to embed in the op; this function
5778 takes ownership of one reference to it.
5784 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
5789 PERL_ARGS_ASSERT_NEWSVOP;
5791 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
5792 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
5793 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
5794 || type == OP_CUSTOM);
5796 NewOp(1101, svop, 1, SVOP);
5797 OpTYPE_set(svop, type);
5799 svop->op_next = (OP*)svop;
5800 svop->op_flags = (U8)flags;
5801 svop->op_private = (U8)(0 | (flags >> 8));
5802 if (PL_opargs[type] & OA_RETSCALAR)
5804 if (PL_opargs[type] & OA_TARGET)
5805 svop->op_targ = pad_alloc(type, SVs_PADTMP);
5806 return CHECKOP(type, svop);
5810 =for apidoc Am|OP *|newDEFSVOP|
5812 Constructs and returns an op to access C<$_>, either as a lexical
5813 variable (if declared as C<my $_>) in the current scope, or the
5820 Perl_newDEFSVOP(pTHX)
5822 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
5823 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
5824 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
5827 OP * const o = newOP(OP_PADSV, 0);
5828 o->op_targ = offset;
5836 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
5838 Constructs, checks, and returns an op of any type that involves a
5839 reference to a pad element. C<type> is the opcode. C<flags> gives the
5840 eight bits of C<op_flags>. A pad slot is automatically allocated, and
5841 is populated with C<sv>; this function takes ownership of one reference
5844 This function only exists if Perl has been compiled to use ithreads.
5850 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
5855 PERL_ARGS_ASSERT_NEWPADOP;
5857 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
5858 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
5859 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
5860 || type == OP_CUSTOM);
5862 NewOp(1101, padop, 1, PADOP);
5863 OpTYPE_set(padop, type);
5865 pad_alloc(type, isGV(sv) ? SVf_READONLY : SVs_PADTMP);
5866 SvREFCNT_dec(PAD_SVl(padop->op_padix));
5867 PAD_SETSV(padop->op_padix, sv);
5869 padop->op_next = (OP*)padop;
5870 padop->op_flags = (U8)flags;
5871 if (PL_opargs[type] & OA_RETSCALAR)
5873 if (PL_opargs[type] & OA_TARGET)
5874 padop->op_targ = pad_alloc(type, SVs_PADTMP);
5875 return CHECKOP(type, padop);
5878 #endif /* USE_ITHREADS */
5881 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
5883 Constructs, checks, and returns an op of any type that involves an
5884 embedded reference to a GV. C<type> is the opcode. C<flags> gives the
5885 eight bits of C<op_flags>. C<gv> identifies the GV that the op should
5886 reference; calling this function does not transfer ownership of any
5893 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
5895 PERL_ARGS_ASSERT_NEWGVOP;
5898 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
5900 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
5905 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
5907 Constructs, checks, and returns an op of any type that involves an
5908 embedded C-level pointer (PV). C<type> is the opcode. C<flags> gives
5909 the eight bits of C<op_flags>. C<pv> supplies the C-level pointer, which
5910 must have been allocated using C<PerlMemShared_malloc>; the memory will
5911 be freed when the op is destroyed.
5917 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
5920 const bool utf8 = cBOOL(flags & SVf_UTF8);
5925 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
5926 || type == OP_RUNCV || type == OP_CUSTOM
5927 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
5929 NewOp(1101, pvop, 1, PVOP);
5930 OpTYPE_set(pvop, type);
5932 pvop->op_next = (OP*)pvop;
5933 pvop->op_flags = (U8)flags;
5934 pvop->op_private = utf8 ? OPpPV_IS_UTF8 : 0;
5935 if (PL_opargs[type] & OA_RETSCALAR)
5937 if (PL_opargs[type] & OA_TARGET)
5938 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
5939 return CHECKOP(type, pvop);
5943 Perl_package(pTHX_ OP *o)
5945 SV *const sv = cSVOPo->op_sv;
5947 PERL_ARGS_ASSERT_PACKAGE;
5949 SAVEGENERICSV(PL_curstash);
5950 save_item(PL_curstname);
5952 PL_curstash = (HV *)SvREFCNT_inc(gv_stashsv(sv, GV_ADD));
5954 sv_setsv(PL_curstname, sv);
5956 PL_hints |= HINT_BLOCK_SCOPE;
5957 PL_parser->copline = NOLINE;
5963 Perl_package_version( pTHX_ OP *v )
5965 U32 savehints = PL_hints;
5966 PERL_ARGS_ASSERT_PACKAGE_VERSION;
5967 PL_hints &= ~HINT_STRICT_VARS;
5968 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
5969 PL_hints = savehints;
5974 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
5979 SV *use_version = NULL;
5981 PERL_ARGS_ASSERT_UTILIZE;
5983 if (idop->op_type != OP_CONST)
5984 Perl_croak(aTHX_ "Module name must be constant");
5989 SV * const vesv = ((SVOP*)version)->op_sv;
5991 if (!arg && !SvNIOKp(vesv)) {
5998 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
5999 Perl_croak(aTHX_ "Version number must be a constant number");
6001 /* Make copy of idop so we don't free it twice */
6002 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
6004 /* Fake up a method call to VERSION */
6005 meth = newSVpvs_share("VERSION");
6006 veop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
6007 op_append_elem(OP_LIST,
6008 op_prepend_elem(OP_LIST, pack, version),
6009 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
6013 /* Fake up an import/unimport */
6014 if (arg && arg->op_type == OP_STUB) {
6015 imop = arg; /* no import on explicit () */
6017 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
6018 imop = NULL; /* use 5.0; */
6020 use_version = ((SVOP*)idop)->op_sv;
6022 idop->op_private |= OPpCONST_NOVER;
6027 /* Make copy of idop so we don't free it twice */
6028 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
6030 /* Fake up a method call to import/unimport */
6032 ? newSVpvs_share("import") : newSVpvs_share("unimport");
6033 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
6034 op_append_elem(OP_LIST,
6035 op_prepend_elem(OP_LIST, pack, arg),
6036 newMETHOP_named(OP_METHOD_NAMED, 0, meth)
6040 /* Fake up the BEGIN {}, which does its thing immediately. */
6042 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
6045 op_append_elem(OP_LINESEQ,
6046 op_append_elem(OP_LINESEQ,
6047 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
6048 newSTATEOP(0, NULL, veop)),
6049 newSTATEOP(0, NULL, imop) ));
6053 * feature bundle that corresponds to the required version. */
6054 use_version = sv_2mortal(new_version(use_version));
6055 S_enable_feature_bundle(aTHX_ use_version);
6057 /* If a version >= 5.11.0 is requested, strictures are on by default! */
6058 if (vcmp(use_version,
6059 sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
6060 if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS))
6061 PL_hints |= HINT_STRICT_REFS;
6062 if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS))
6063 PL_hints |= HINT_STRICT_SUBS;
6064 if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS))
6065 PL_hints |= HINT_STRICT_VARS;
6067 /* otherwise they are off */
6069 if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS))
6070 PL_hints &= ~HINT_STRICT_REFS;
6071 if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS))
6072 PL_hints &= ~HINT_STRICT_SUBS;
6073 if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS))
6074 PL_hints &= ~HINT_STRICT_VARS;
6078 /* The "did you use incorrect case?" warning used to be here.
6079 * The problem is that on case-insensitive filesystems one
6080 * might get false positives for "use" (and "require"):
6081 * "use Strict" or "require CARP" will work. This causes
6082 * portability problems for the script: in case-strict
6083 * filesystems the script will stop working.
6085 * The "incorrect case" warning checked whether "use Foo"
6086 * imported "Foo" to your namespace, but that is wrong, too:
6087 * there is no requirement nor promise in the language that
6088 * a Foo.pm should or would contain anything in package "Foo".
6090 * There is very little Configure-wise that can be done, either:
6091 * the case-sensitivity of the build filesystem of Perl does not
6092 * help in guessing the case-sensitivity of the runtime environment.
6095 PL_hints |= HINT_BLOCK_SCOPE;
6096 PL_parser->copline = NOLINE;
6097 COP_SEQMAX_INC; /* Purely for B::*'s benefit */
6101 =head1 Embedding Functions
6103 =for apidoc load_module
6105 Loads the module whose name is pointed to by the string part of name.
6106 Note that the actual module name, not its filename, should be given.
6107 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
6108 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
6109 (or 0 for no flags). ver, if specified
6110 and not NULL, provides version semantics
6111 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
6112 arguments can be used to specify arguments to the module's import()
6113 method, similar to C<use Foo::Bar VERSION LIST>. They must be
6114 terminated with a final NULL pointer. Note that this list can only
6115 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
6116 Otherwise at least a single NULL pointer to designate the default
6117 import list is required.
6119 The reference count for each specified C<SV*> parameter is decremented.
6124 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
6128 PERL_ARGS_ASSERT_LOAD_MODULE;
6130 va_start(args, ver);
6131 vload_module(flags, name, ver, &args);
6135 #ifdef PERL_IMPLICIT_CONTEXT
6137 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
6141 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
6142 va_start(args, ver);
6143 vload_module(flags, name, ver, &args);
6149 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
6152 OP * const modname = newSVOP(OP_CONST, 0, name);
6154 PERL_ARGS_ASSERT_VLOAD_MODULE;
6156 modname->op_private |= OPpCONST_BARE;
6158 veop = newSVOP(OP_CONST, 0, ver);
6162 if (flags & PERL_LOADMOD_NOIMPORT) {
6163 imop = sawparens(newNULLLIST());
6165 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
6166 imop = va_arg(*args, OP*);
6171 sv = va_arg(*args, SV*);
6173 imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
6174 sv = va_arg(*args, SV*);
6178 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
6179 * that it has a PL_parser to play with while doing that, and also
6180 * that it doesn't mess with any existing parser, by creating a tmp
6181 * new parser with lex_start(). This won't actually be used for much,
6182 * since pp_require() will create another parser for the real work.
6183 * The ENTER/LEAVE pair protect callers from any side effects of use. */
6186 SAVEVPTR(PL_curcop);
6187 lex_start(NULL, NULL, LEX_START_SAME_FILTER);
6188 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
6189 veop, modname, imop);
6193 PERL_STATIC_INLINE OP *
6194 S_new_entersubop(pTHX_ GV *gv, OP *arg)
6196 return newUNOP(OP_ENTERSUB, OPf_STACKED,
6197 newLISTOP(OP_LIST, 0, arg,
6198 newUNOP(OP_RV2CV, 0,
6199 newGVOP(OP_GV, 0, gv))));
6203 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
6208 PERL_ARGS_ASSERT_DOFILE;
6210 if (!force_builtin && (gv = gv_override("do", 2))) {
6211 doop = S_new_entersubop(aTHX_ gv, term);
6214 doop = newUNOP(OP_DOFILE, 0, scalar(term));
6220 =head1 Optree construction
6222 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
6224 Constructs, checks, and returns an C<lslice> (list slice) op. C<flags>
6225 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
6226 be set automatically, and, shifted up eight bits, the eight bits of
6227 C<op_private>, except that the bit with value 1 or 2 is automatically
6228 set as required. C<listval> and C<subscript> supply the parameters of
6229 the slice; they are consumed by this function and become part of the
6230 constructed op tree.
6236 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
6238 return newBINOP(OP_LSLICE, flags,
6239 list(force_list(subscript, 1)),
6240 list(force_list(listval, 1)) );
6243 #define ASSIGN_LIST 1
6244 #define ASSIGN_REF 2
6247 S_assignment_type(pTHX_ const OP *o)
6256 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
6257 o = cUNOPo->op_first;
6259 flags = o->op_flags;
6261 if (type == OP_COND_EXPR) {
6262 OP * const sib = OpSIBLING(cLOGOPo->op_first);
6263 const I32 t = assignment_type(sib);
6264 const I32 f = assignment_type(OpSIBLING(sib));
6266 if (t == ASSIGN_LIST && f == ASSIGN_LIST)
6268 if ((t == ASSIGN_LIST) ^ (f == ASSIGN_LIST))
6269 yyerror("Assignment to both a list and a scalar");
6273 if (type == OP_SREFGEN)
6275 OP * const kid = cUNOPx(cUNOPo->op_first)->op_first;
6276 type = kid->op_type;
6277 flags |= kid->op_flags;
6278 if (!(flags & OPf_PARENS)
6279 && (kid->op_type == OP_RV2AV || kid->op_type == OP_PADAV ||
6280 kid->op_type == OP_RV2HV || kid->op_type == OP_PADHV ))
6286 if (type == OP_LIST &&
6287 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
6288 o->op_private & OPpLVAL_INTRO)
6291 if (type == OP_LIST || flags & OPf_PARENS ||
6292 type == OP_RV2AV || type == OP_RV2HV ||
6293 type == OP_ASLICE || type == OP_HSLICE ||
6294 type == OP_KVASLICE || type == OP_KVHSLICE || type == OP_REFGEN)
6297 if (type == OP_PADAV || type == OP_PADHV)
6300 if (type == OP_RV2SV)
6308 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
6310 Constructs, checks, and returns an assignment op. C<left> and C<right>
6311 supply the parameters of the assignment; they are consumed by this
6312 function and become part of the constructed op tree.
6314 If C<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
6315 a suitable conditional optree is constructed. If C<optype> is the opcode
6316 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
6317 performs the binary operation and assigns the result to the left argument.
6318 Either way, if C<optype> is non-zero then C<flags> has no effect.
6320 If C<optype> is zero, then a plain scalar or list assignment is
6321 constructed. Which type of assignment it is is automatically determined.
6322 C<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
6323 will be set automatically, and, shifted up eight bits, the eight bits
6324 of C<op_private>, except that the bit with value 1 or 2 is automatically
6331 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
6337 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
6338 return newLOGOP(optype, 0,
6339 op_lvalue(scalar(left), optype),
6340 newUNOP(OP_SASSIGN, 0, scalar(right)));
6343 return newBINOP(optype, OPf_STACKED,
6344 op_lvalue(scalar(left), optype), scalar(right));
6348 if ((assign_type = assignment_type(left)) == ASSIGN_LIST) {
6349 static const char no_list_state[] = "Initialization of state variables"
6350 " in list context currently forbidden";
6353 if (left->op_type == OP_ASLICE || left->op_type == OP_HSLICE)
6354 left->op_private &= ~ OPpSLICEWARNING;
6357 left = op_lvalue(left, OP_AASSIGN);
6358 curop = list(force_list(left, 1));
6359 o = newBINOP(OP_AASSIGN, flags, list(force_list(right, 1)), curop);
6360 o->op_private = (U8)(0 | (flags >> 8));
6362 if (OP_TYPE_IS_OR_WAS(left, OP_LIST))
6364 OP* lop = ((LISTOP*)left)->op_first;
6366 if ((lop->op_type == OP_PADSV ||
6367 lop->op_type == OP_PADAV ||
6368 lop->op_type == OP_PADHV ||
6369 lop->op_type == OP_PADANY)
6370 && (lop->op_private & OPpPAD_STATE)
6372 yyerror(no_list_state);
6373 lop = OpSIBLING(lop);
6376 else if ( (left->op_private & OPpLVAL_INTRO)
6377 && (left->op_private & OPpPAD_STATE)
6378 && ( left->op_type == OP_PADSV
6379 || left->op_type == OP_PADAV
6380 || left->op_type == OP_PADHV
6381 || left->op_type == OP_PADANY)
6383 /* All single variable list context state assignments, hence
6393 yyerror(no_list_state);
6396 if (right && right->op_type == OP_SPLIT
6397 && !(right->op_flags & OPf_STACKED)) {
6398 OP* tmpop = ((LISTOP*)right)->op_first;
6399 PMOP * const pm = (PMOP*)tmpop;
6400 assert (tmpop && (tmpop->op_type == OP_PUSHRE));
6403 !pm->op_pmreplrootu.op_pmtargetoff
6405 !pm->op_pmreplrootu.op_pmtargetgv
6409 if (!(left->op_private & OPpLVAL_INTRO) &&
6410 ( (left->op_type == OP_RV2AV &&
6411 (tmpop=((UNOP*)left)->op_first)->op_type==OP_GV)
6412 || left->op_type == OP_PADAV )
6414 if (tmpop != (OP *)pm) {
6416 pm->op_pmreplrootu.op_pmtargetoff
6417 = cPADOPx(tmpop)->op_padix;
6418 cPADOPx(tmpop)->op_padix = 0; /* steal it */
6420 pm->op_pmreplrootu.op_pmtargetgv
6421 = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
6422 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
6424 right->op_private |=
6425 left->op_private & OPpOUR_INTRO;
6428 pm->op_targ = left->op_targ;
6429 left->op_targ = 0; /* filch it */
6432 tmpop = cUNOPo->op_first; /* to list (nulled) */
6433 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
6434 /* detach rest of siblings from o subtree,
6435 * and free subtree */
6436 op_sibling_splice(cUNOPo->op_first, tmpop, -1, NULL);
6437 op_free(o); /* blow off assign */
6438 right->op_flags &= ~OPf_WANT;
6439 /* "I don't know and I don't care." */
6442 else if (left->op_type == OP_RV2AV
6443 || left->op_type == OP_PADAV)
6445 /* Detach the array. */
6449 op_sibling_splice(cBINOPo->op_last,
6450 cUNOPx(cBINOPo->op_last)
6451 ->op_first, 1, NULL);
6452 assert(ary == left);
6453 /* Attach it to the split. */
6454 op_sibling_splice(right, cLISTOPx(right)->op_last,
6456 right->op_flags |= OPf_STACKED;
6457 /* Detach split and expunge aassign as above. */
6460 else if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
6461 ((LISTOP*)right)->op_last->op_type == OP_CONST)
6464 &((SVOP*)((LISTOP*)right)->op_last)->op_sv;
6465 SV * const sv = *svp;
6466 if (SvIOK(sv) && SvIVX(sv) == 0)
6468 if (right->op_private & OPpSPLIT_IMPLIM) {
6469 /* our own SV, created in ck_split */
6471 sv_setiv(sv, PL_modcount+1);
6474 /* SV may belong to someone else */
6476 *svp = newSViv(PL_modcount+1);
6484 if (assign_type == ASSIGN_REF)
6485 return newBINOP(OP_REFASSIGN, flags, scalar(right), left);
6487 right = newOP(OP_UNDEF, 0);
6488 if (right->op_type == OP_READLINE) {
6489 right->op_flags |= OPf_STACKED;
6490 return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN),
6494 o = newBINOP(OP_SASSIGN, flags,
6495 scalar(right), op_lvalue(scalar(left), OP_SASSIGN) );
6501 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
6503 Constructs a state op (COP). The state op is normally a C<nextstate> op,
6504 but will be a C<dbstate> op if debugging is enabled for currently-compiled
6505 code. The state op is populated from C<PL_curcop> (or C<PL_compiling>).
6506 If C<label> is non-null, it supplies the name of a label to attach to
6507 the state op; this function takes ownership of the memory pointed at by
6508 C<label>, and will free it. C<flags> gives the eight bits of C<op_flags>
6511 If C<o> is null, the state op is returned. Otherwise the state op is
6512 combined with C<o> into a C<lineseq> list op, which is returned. C<o>
6513 is consumed by this function and becomes part of the returned op tree.
6519 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
6522 const U32 seq = intro_my();
6523 const U32 utf8 = flags & SVf_UTF8;
6526 PL_parser->parsed_sub = 0;
6530 NewOp(1101, cop, 1, COP);
6531 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
6532 OpTYPE_set(cop, OP_DBSTATE);
6535 OpTYPE_set(cop, OP_NEXTSTATE);
6537 cop->op_flags = (U8)flags;
6538 CopHINTS_set(cop, PL_hints);
6540 if (VMSISH_HUSHED) cop->op_private |= OPpHUSH_VMSISH;
6542 cop->op_next = (OP*)cop;
6545 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
6546 CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop)));
6548 Perl_cop_store_label(aTHX_ cop, label, strlen(label), utf8);
6550 PL_hints |= HINT_BLOCK_SCOPE;
6551 /* It seems that we need to defer freeing this pointer, as other parts
6552 of the grammar end up wanting to copy it after this op has been
6557 if (PL_parser->preambling != NOLINE) {
6558 CopLINE_set(cop, PL_parser->preambling);
6559 PL_parser->copline = NOLINE;
6561 else if (PL_parser->copline == NOLINE)
6562 CopLINE_set(cop, CopLINE(PL_curcop));
6564 CopLINE_set(cop, PL_parser->copline);
6565 PL_parser->copline = NOLINE;
6568 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
6570 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
6572 CopSTASH_set(cop, PL_curstash);
6574 if (cop->op_type == OP_DBSTATE) {
6575 /* this line can have a breakpoint - store the cop in IV */
6576 AV *av = CopFILEAVx(PL_curcop);
6578 SV * const * const svp = av_fetch(av, CopLINE(cop), FALSE);
6579 if (svp && *svp != &PL_sv_undef ) {
6580 (void)SvIOK_on(*svp);
6581 SvIV_set(*svp, PTR2IV(cop));
6586 if (flags & OPf_SPECIAL)
6588 return op_prepend_elem(OP_LINESEQ, (OP*)cop, o);
6592 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
6594 Constructs, checks, and returns a logical (flow control) op. C<type>
6595 is the opcode. C<flags> gives the eight bits of C<op_flags>, except
6596 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
6597 the eight bits of C<op_private>, except that the bit with value 1 is
6598 automatically set. C<first> supplies the expression controlling the
6599 flow, and C<other> supplies the side (alternate) chain of ops; they are
6600 consumed by this function and become part of the constructed op tree.
6606 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
6608 PERL_ARGS_ASSERT_NEWLOGOP;
6610 return new_logop(type, flags, &first, &other);
6614 S_search_const(pTHX_ OP *o)
6616 PERL_ARGS_ASSERT_SEARCH_CONST;
6618 switch (o->op_type) {
6622 if (o->op_flags & OPf_KIDS)
6623 return search_const(cUNOPo->op_first);
6630 if (!(o->op_flags & OPf_KIDS))
6632 kid = cLISTOPo->op_first;
6634 switch (kid->op_type) {
6638 kid = OpSIBLING(kid);
6641 if (kid != cLISTOPo->op_last)
6647 kid = cLISTOPo->op_last;
6649 return search_const(kid);
6657 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
6665 int prepend_not = 0;
6667 PERL_ARGS_ASSERT_NEW_LOGOP;
6672 /* [perl #59802]: Warn about things like "return $a or $b", which
6673 is parsed as "(return $a) or $b" rather than "return ($a or
6674 $b)". NB: This also applies to xor, which is why we do it
6677 switch (first->op_type) {
6681 /* XXX: Perhaps we should emit a stronger warning for these.
6682 Even with the high-precedence operator they don't seem to do
6685 But until we do, fall through here.
6691 /* XXX: Currently we allow people to "shoot themselves in the
6692 foot" by explicitly writing "(return $a) or $b".
6694 Warn unless we are looking at the result from folding or if
6695 the programmer explicitly grouped the operators like this.
6696 The former can occur with e.g.
6698 use constant FEATURE => ( $] >= ... );
6699 sub { not FEATURE and return or do_stuff(); }
6701 if (!first->op_folded && !(first->op_flags & OPf_PARENS))
6702 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
6703 "Possible precedence issue with control flow operator");
6704 /* XXX: Should we optimze this to "return $a;" (i.e. remove
6710 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
6711 return newBINOP(type, flags, scalar(first), scalar(other));
6713 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP
6714 || type == OP_CUSTOM);
6716 scalarboolean(first);
6717 /* optimize AND and OR ops that have NOTs as children */
6718 if (first->op_type == OP_NOT
6719 && (first->op_flags & OPf_KIDS)
6720 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
6721 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
6723 if (type == OP_AND || type == OP_OR) {
6729 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
6731 prepend_not = 1; /* prepend a NOT op later */
6735 /* search for a constant op that could let us fold the test */
6736 if ((cstop = search_const(first))) {
6737 if (cstop->op_private & OPpCONST_STRICT)
6738 no_bareword_allowed(cstop);
6739 else if ((cstop->op_private & OPpCONST_BARE))
6740 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
6741 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
6742 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
6743 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
6745 if (other->op_type == OP_CONST)
6746 other->op_private |= OPpCONST_SHORTCIRCUIT;
6748 if (other->op_type == OP_LEAVE)
6749 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
6750 else if (other->op_type == OP_MATCH
6751 || other->op_type == OP_SUBST
6752 || other->op_type == OP_TRANSR
6753 || other->op_type == OP_TRANS)
6754 /* Mark the op as being unbindable with =~ */
6755 other->op_flags |= OPf_SPECIAL;
6757 other->op_folded = 1;
6761 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
6762 const OP *o2 = other;
6763 if ( ! (o2->op_type == OP_LIST
6764 && (( o2 = cUNOPx(o2)->op_first))
6765 && o2->op_type == OP_PUSHMARK
6766 && (( o2 = OpSIBLING(o2))) )
6769 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
6770 || o2->op_type == OP_PADHV)
6771 && o2->op_private & OPpLVAL_INTRO
6772 && !(o2->op_private & OPpPAD_STATE))
6774 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6775 "Deprecated use of my() in false conditional");
6779 if (cstop->op_type == OP_CONST)
6780 cstop->op_private |= OPpCONST_SHORTCIRCUIT;
6785 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
6786 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
6788 const OP * const k1 = ((UNOP*)first)->op_first;
6789 const OP * const k2 = OpSIBLING(k1);
6791 switch (first->op_type)
6794 if (k2 && k2->op_type == OP_READLINE
6795 && (k2->op_flags & OPf_STACKED)
6796 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
6798 warnop = k2->op_type;
6803 if (k1->op_type == OP_READDIR
6804 || k1->op_type == OP_GLOB
6805 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
6806 || k1->op_type == OP_EACH
6807 || k1->op_type == OP_AEACH)
6809 warnop = ((k1->op_type == OP_NULL)
6810 ? (OPCODE)k1->op_targ : k1->op_type);
6815 const line_t oldline = CopLINE(PL_curcop);
6816 /* This ensures that warnings are reported at the first line
6817 of the construction, not the last. */
6818 CopLINE_set(PL_curcop, PL_parser->copline);
6819 Perl_warner(aTHX_ packWARN(WARN_MISC),
6820 "Value of %s%s can be \"0\"; test with defined()",
6822 ((warnop == OP_READLINE || warnop == OP_GLOB)
6823 ? " construct" : "() operator"));
6824 CopLINE_set(PL_curcop, oldline);
6831 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
6832 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
6834 logop = S_alloc_LOGOP(aTHX_ type, first, LINKLIST(other));
6835 logop->op_flags |= (U8)flags;
6836 logop->op_private = (U8)(1 | (flags >> 8));
6838 /* establish postfix order */
6839 logop->op_next = LINKLIST(first);
6840 first->op_next = (OP*)logop;
6841 assert(!OpHAS_SIBLING(first));
6842 op_sibling_splice((OP*)logop, first, 0, other);
6844 CHECKOP(type,logop);
6846 o = newUNOP(prepend_not ? OP_NOT : OP_NULL,
6847 PL_opargs[type] & OA_RETSCALAR ? OPf_WANT_SCALAR : 0,
6855 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
6857 Constructs, checks, and returns a conditional-expression (C<cond_expr>)
6858 op. C<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
6859 will be set automatically, and, shifted up eight bits, the eight bits of
6860 C<op_private>, except that the bit with value 1 is automatically set.
6861 C<first> supplies the expression selecting between the two branches,
6862 and C<trueop> and C<falseop> supply the branches; they are consumed by
6863 this function and become part of the constructed op tree.
6869 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
6877 PERL_ARGS_ASSERT_NEWCONDOP;
6880 return newLOGOP(OP_AND, 0, first, trueop);
6882 return newLOGOP(OP_OR, 0, first, falseop);
6884 scalarboolean(first);
6885 if ((cstop = search_const(first))) {
6886 /* Left or right arm of the conditional? */
6887 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
6888 OP *live = left ? trueop : falseop;
6889 OP *const dead = left ? falseop : trueop;
6890 if (cstop->op_private & OPpCONST_BARE &&
6891 cstop->op_private & OPpCONST_STRICT) {
6892 no_bareword_allowed(cstop);
6896 if (live->op_type == OP_LEAVE)
6897 live = newUNOP(OP_NULL, OPf_SPECIAL, live);
6898 else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST
6899 || live->op_type == OP_TRANS || live->op_type == OP_TRANSR)
6900 /* Mark the op as being unbindable with =~ */
6901 live->op_flags |= OPf_SPECIAL;
6902 live->op_folded = 1;
6905 logop = S_alloc_LOGOP(aTHX_ OP_COND_EXPR, first, LINKLIST(trueop));
6906 logop->op_flags |= (U8)flags;
6907 logop->op_private = (U8)(1 | (flags >> 8));
6908 logop->op_next = LINKLIST(falseop);
6910 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
6913 /* establish postfix order */
6914 start = LINKLIST(first);
6915 first->op_next = (OP*)logop;
6917 /* make first, trueop, falseop siblings */
6918 op_sibling_splice((OP*)logop, first, 0, trueop);
6919 op_sibling_splice((OP*)logop, trueop, 0, falseop);
6921 o = newUNOP(OP_NULL, 0, (OP*)logop);
6923 trueop->op_next = falseop->op_next = o;
6930 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
6932 Constructs and returns a C<range> op, with subordinate C<flip> and
6933 C<flop> ops. C<flags> gives the eight bits of C<op_flags> for the
6934 C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
6935 for both the C<flip> and C<range> ops, except that the bit with value
6936 1 is automatically set. C<left> and C<right> supply the expressions
6937 controlling the endpoints of the range; they are consumed by this function
6938 and become part of the constructed op tree.
6944 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
6952 PERL_ARGS_ASSERT_NEWRANGE;
6954 range = S_alloc_LOGOP(aTHX_ OP_RANGE, left, LINKLIST(right));
6955 range->op_flags = OPf_KIDS;
6956 leftstart = LINKLIST(left);
6957 range->op_private = (U8)(1 | (flags >> 8));
6959 /* make left and right siblings */
6960 op_sibling_splice((OP*)range, left, 0, right);
6962 range->op_next = (OP*)range;
6963 flip = newUNOP(OP_FLIP, flags, (OP*)range);
6964 flop = newUNOP(OP_FLOP, 0, flip);
6965 o = newUNOP(OP_NULL, 0, flop);
6967 range->op_next = leftstart;
6969 left->op_next = flip;
6970 right->op_next = flop;
6973 pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0);
6974 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
6976 pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0);;
6977 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
6978 SvPADTMP_on(PAD_SV(flip->op_targ));
6980 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
6981 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
6983 /* check barewords before they might be optimized aways */
6984 if (flip->op_private && cSVOPx(left)->op_private & OPpCONST_STRICT)
6985 no_bareword_allowed(left);
6986 if (flop->op_private && cSVOPx(right)->op_private & OPpCONST_STRICT)
6987 no_bareword_allowed(right);
6990 if (!flip->op_private || !flop->op_private)
6991 LINKLIST(o); /* blow off optimizer unless constant */
6997 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
6999 Constructs, checks, and returns an op tree expressing a loop. This is
7000 only a loop in the control flow through the op tree; it does not have
7001 the heavyweight loop structure that allows exiting the loop by C<last>
7002 and suchlike. C<flags> gives the eight bits of C<op_flags> for the
7003 top-level op, except that some bits will be set automatically as required.
7004 C<expr> supplies the expression controlling loop iteration, and C<block>
7005 supplies the body of the loop; they are consumed by this function and
7006 become part of the constructed op tree. C<debuggable> is currently
7007 unused and should always be 1.
7013 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
7017 const bool once = block && block->op_flags & OPf_SPECIAL &&
7018 block->op_type == OP_NULL;
7020 PERL_UNUSED_ARG(debuggable);
7024 (expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
7025 || ( expr->op_type == OP_NOT
7026 && cUNOPx(expr)->op_first->op_type == OP_CONST
7027 && SvTRUE(cSVOPx_sv(cUNOPx(expr)->op_first))
7030 /* Return the block now, so that S_new_logop does not try to
7032 return block; /* do {} while 0 does once */
7033 if (expr->op_type == OP_READLINE
7034 || expr->op_type == OP_READDIR
7035 || expr->op_type == OP_GLOB
7036 || expr->op_type == OP_EACH || expr->op_type == OP_AEACH
7037 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
7038 expr = newUNOP(OP_DEFINED, 0,
7039 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
7040 } else if (expr->op_flags & OPf_KIDS) {
7041 const OP * const k1 = ((UNOP*)expr)->op_first;
7042 const OP * const k2 = k1 ? OpSIBLING(k1) : NULL;
7043 switch (expr->op_type) {
7045 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
7046 && (k2->op_flags & OPf_STACKED)
7047 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
7048 expr = newUNOP(OP_DEFINED, 0, expr);
7052 if (k1 && (k1->op_type == OP_READDIR
7053 || k1->op_type == OP_GLOB
7054 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
7055 || k1->op_type == OP_EACH
7056 || k1->op_type == OP_AEACH))
7057 expr = newUNOP(OP_DEFINED, 0, expr);
7063 /* if block is null, the next op_append_elem() would put UNSTACK, a scalar
7064 * op, in listop. This is wrong. [perl #27024] */
7066 block = newOP(OP_NULL, 0);
7067 listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
7068 o = new_logop(OP_AND, 0, &expr, &listop);
7075 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
7077 if (once && o != listop)
7079 assert(cUNOPo->op_first->op_type == OP_AND
7080 || cUNOPo->op_first->op_type == OP_OR);
7081 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
7085 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
7087 o->op_flags |= flags;
7089 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
7094 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my
7096 Constructs, checks, and returns an op tree expressing a C<while> loop.
7097 This is a heavyweight loop, with structure that allows exiting the loop
7098 by C<last> and suchlike.
7100 C<loop> is an optional preconstructed C<enterloop> op to use in the
7101 loop; if it is null then a suitable op will be constructed automatically.
7102 C<expr> supplies the loop's controlling expression. C<block> supplies the
7103 main body of the loop, and C<cont> optionally supplies a C<continue> block
7104 that operates as a second half of the body. All of these optree inputs
7105 are consumed by this function and become part of the constructed op tree.
7107 C<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
7108 op and, shifted up eight bits, the eight bits of C<op_private> for
7109 the C<leaveloop> op, except that (in both cases) some bits will be set
7110 automatically. C<debuggable> is currently unused and should always be 1.
7111 C<has_my> can be supplied as true to force the
7112 loop body to be enclosed in its own scope.
7118 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
7119 OP *expr, OP *block, OP *cont, I32 has_my)
7128 PERL_UNUSED_ARG(debuggable);
7131 if (expr->op_type == OP_READLINE
7132 || expr->op_type == OP_READDIR
7133 || expr->op_type == OP_GLOB
7134 || expr->op_type == OP_EACH || expr->op_type == OP_AEACH
7135 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
7136 expr = newUNOP(OP_DEFINED, 0,
7137 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
7138 } else if (expr->op_flags & OPf_KIDS) {
7139 const OP * const k1 = ((UNOP*)expr)->op_first;
7140 const OP * const k2 = (k1) ? OpSIBLING(k1) : NULL;
7141 switch (expr->op_type) {
7143 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
7144 && (k2->op_flags & OPf_STACKED)
7145 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
7146 expr = newUNOP(OP_DEFINED, 0, expr);
7150 if (k1 && (k1->op_type == OP_READDIR
7151 || k1->op_type == OP_GLOB
7152 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
7153 || k1->op_type == OP_EACH
7154 || k1->op_type == OP_AEACH))
7155 expr = newUNOP(OP_DEFINED, 0, expr);
7162 block = newOP(OP_NULL, 0);
7163 else if (cont || has_my) {
7164 block = op_scope(block);
7168 next = LINKLIST(cont);
7171 OP * const unstack = newOP(OP_UNSTACK, 0);
7174 cont = op_append_elem(OP_LINESEQ, cont, unstack);
7178 listop = op_append_list(OP_LINESEQ, block, cont);
7180 redo = LINKLIST(listop);
7184 o = new_logop(OP_AND, 0, &expr, &listop);
7185 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
7187 return expr; /* listop already freed by new_logop */
7190 ((LISTOP*)listop)->op_last->op_next =
7191 (o == listop ? redo : LINKLIST(o));
7197 NewOp(1101,loop,1,LOOP);
7198 OpTYPE_set(loop, OP_ENTERLOOP);
7199 loop->op_private = 0;
7200 loop->op_next = (OP*)loop;
7203 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
7205 loop->op_redoop = redo;
7206 loop->op_lastop = o;
7207 o->op_private |= loopflags;
7210 loop->op_nextop = next;
7212 loop->op_nextop = o;
7214 o->op_flags |= flags;
7215 o->op_private |= (flags >> 8);
7220 =for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont
7222 Constructs, checks, and returns an op tree expressing a C<foreach>
7223 loop (iteration through a list of values). This is a heavyweight loop,
7224 with structure that allows exiting the loop by C<last> and suchlike.
7226 C<sv> optionally supplies the variable that will be aliased to each
7227 item in turn; if null, it defaults to C<$_> (either lexical or global).
7228 C<expr> supplies the list of values to iterate over. C<block> supplies
7229 the main body of the loop, and C<cont> optionally supplies a C<continue>
7230 block that operates as a second half of the body. All of these optree
7231 inputs are consumed by this function and become part of the constructed
7234 C<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
7235 op and, shifted up eight bits, the eight bits of C<op_private> for
7236 the C<leaveloop> op, except that (in both cases) some bits will be set
7243 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
7248 PADOFFSET padoff = 0;
7252 PERL_ARGS_ASSERT_NEWFOROP;
7255 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
7256 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
7257 OpTYPE_set(sv, OP_RV2GV);
7259 /* The op_type check is needed to prevent a possible segfault
7260 * if the loop variable is undeclared and 'strict vars' is in
7261 * effect. This is illegal but is nonetheless parsed, so we
7262 * may reach this point with an OP_CONST where we're expecting
7265 if (cUNOPx(sv)->op_first->op_type == OP_GV
7266 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
7267 iterpflags |= OPpITER_DEF;
7269 else if (sv->op_type == OP_PADSV) { /* private variable */
7270 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
7271 padoff = sv->op_targ;
7275 PAD_COMPNAME_GEN_set(padoff, PERL_INT_MAX);
7277 else if (sv->op_type == OP_NULL && sv->op_targ == OP_SREFGEN)
7280 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
7282 PADNAME * const pn = PAD_COMPNAME(padoff);
7283 const char * const name = PadnamePV(pn);
7285 if (PadnameLEN(pn) == 2 && name[0] == '$' && name[1] == '_')
7286 iterpflags |= OPpITER_DEF;
7290 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
7291 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
7292 sv = newGVOP(OP_GV, 0, PL_defgv);
7297 iterpflags |= OPpITER_DEF;
7300 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
7301 expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER)), 1), OP_GREPSTART);
7302 iterflags |= OPf_STACKED;
7304 else if (expr->op_type == OP_NULL &&
7305 (expr->op_flags & OPf_KIDS) &&
7306 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
7308 /* Basically turn for($x..$y) into the same as for($x,$y), but we
7309 * set the STACKED flag to indicate that these values are to be
7310 * treated as min/max values by 'pp_enteriter'.
7312 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
7313 LOGOP* const range = (LOGOP*) flip->op_first;
7314 OP* const left = range->op_first;
7315 OP* const right = OpSIBLING(left);
7318 range->op_flags &= ~OPf_KIDS;
7319 /* detach range's children */
7320 op_sibling_splice((OP*)range, NULL, -1, NULL);
7322 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
7323 listop->op_first->op_next = range->op_next;
7324 left->op_next = range->op_other;
7325 right->op_next = (OP*)listop;
7326 listop->op_next = listop->op_first;
7329 expr = (OP*)(listop);
7331 iterflags |= OPf_STACKED;
7334 expr = op_lvalue(force_list(expr, 1), OP_GREPSTART);
7337 loop = (LOOP*)op_convert_list(OP_ENTERITER, iterflags,
7338 op_append_elem(OP_LIST, list(expr),
7340 assert(!loop->op_next);
7341 /* for my $x () sets OPpLVAL_INTRO;
7342 * for our $x () sets OPpOUR_INTRO */
7343 loop->op_private = (U8)iterpflags;
7344 if (loop->op_slabbed
7345 && DIFF(loop, OpSLOT(loop)->opslot_next)
7346 < SIZE_TO_PSIZE(sizeof(LOOP)))
7349 NewOp(1234,tmp,1,LOOP);
7350 Copy(loop,tmp,1,LISTOP);
7351 #ifdef PERL_OP_PARENT
7352 assert(loop->op_last->op_sibparent == (OP*)loop);
7353 OpLASTSIB_set(loop->op_last, (OP*)tmp); /*point back to new parent */
7355 S_op_destroy(aTHX_ (OP*)loop);
7358 else if (!loop->op_slabbed)
7360 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
7361 #ifdef PERL_OP_PARENT
7362 OpLASTSIB_set(loop->op_last, (OP*)loop);
7365 loop->op_targ = padoff;
7366 wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0);
7371 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
7373 Constructs, checks, and returns a loop-exiting op (such as C<goto>
7374 or C<last>). C<type> is the opcode. C<label> supplies the parameter
7375 determining the target of the op; it is consumed by this function and
7376 becomes part of the constructed op tree.
7382 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
7386 PERL_ARGS_ASSERT_NEWLOOPEX;
7388 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
7389 || type == OP_CUSTOM);
7391 if (type != OP_GOTO) {
7392 /* "last()" means "last" */
7393 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS)) {
7394 o = newOP(type, OPf_SPECIAL);
7398 /* Check whether it's going to be a goto &function */
7399 if (label->op_type == OP_ENTERSUB
7400 && !(label->op_flags & OPf_STACKED))
7401 label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN));
7404 /* Check for a constant argument */
7405 if (label->op_type == OP_CONST) {
7406 SV * const sv = ((SVOP *)label)->op_sv;
7408 const char *s = SvPV_const(sv,l);
7409 if (l == strlen(s)) {
7411 SvUTF8(((SVOP*)label)->op_sv),
7413 SvPV_nolen_const(((SVOP*)label)->op_sv)));
7417 /* If we have already created an op, we do not need the label. */
7420 else o = newUNOP(type, OPf_STACKED, label);
7422 PL_hints |= HINT_BLOCK_SCOPE;
7426 /* if the condition is a literal array or hash
7427 (or @{ ... } etc), make a reference to it.
7430 S_ref_array_or_hash(pTHX_ OP *cond)
7433 && (cond->op_type == OP_RV2AV
7434 || cond->op_type == OP_PADAV
7435 || cond->op_type == OP_RV2HV
7436 || cond->op_type == OP_PADHV))
7438 return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN));
7441 && (cond->op_type == OP_ASLICE
7442 || cond->op_type == OP_KVASLICE
7443 || cond->op_type == OP_HSLICE
7444 || cond->op_type == OP_KVHSLICE)) {
7446 /* anonlist now needs a list from this op, was previously used in
7448 cond->op_flags &= ~(OPf_WANT_SCALAR | OPf_REF);
7449 cond->op_flags |= OPf_WANT_LIST;
7451 return newANONLIST(op_lvalue(cond, OP_ANONLIST));
7458 /* These construct the optree fragments representing given()
7461 entergiven and enterwhen are LOGOPs; the op_other pointer
7462 points up to the associated leave op. We need this so we
7463 can put it in the context and make break/continue work.
7464 (Also, of course, pp_enterwhen will jump straight to
7465 op_other if the match fails.)
7469 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
7470 I32 enter_opcode, I32 leave_opcode,
7471 PADOFFSET entertarg)
7477 PERL_ARGS_ASSERT_NEWGIVWHENOP;
7479 enterop = S_alloc_LOGOP(aTHX_ enter_opcode, block, NULL);
7480 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
7481 enterop->op_private = 0;
7483 o = newUNOP(leave_opcode, 0, (OP *) enterop);
7486 /* prepend cond if we have one */
7487 op_sibling_splice((OP*)enterop, NULL, 0, scalar(cond));
7489 o->op_next = LINKLIST(cond);
7490 cond->op_next = (OP *) enterop;
7493 /* This is a default {} block */
7494 enterop->op_flags |= OPf_SPECIAL;
7495 o ->op_flags |= OPf_SPECIAL;
7497 o->op_next = (OP *) enterop;
7500 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
7501 entergiven and enterwhen both
7504 enterop->op_next = LINKLIST(block);
7505 block->op_next = enterop->op_other = o;
7510 /* Does this look like a boolean operation? For these purposes
7511 a boolean operation is:
7512 - a subroutine call [*]
7513 - a logical connective
7514 - a comparison operator
7515 - a filetest operator, with the exception of -s -M -A -C
7516 - defined(), exists() or eof()
7517 - /$re/ or $foo =~ /$re/
7519 [*] possibly surprising
7522 S_looks_like_bool(pTHX_ const OP *o)
7524 PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
7526 switch(o->op_type) {
7529 return looks_like_bool(cLOGOPo->op_first);
7533 OP* sibl = OpSIBLING(cLOGOPo->op_first);
7536 looks_like_bool(cLOGOPo->op_first)
7537 && looks_like_bool(sibl));
7543 o->op_flags & OPf_KIDS
7544 && looks_like_bool(cUNOPo->op_first));
7548 case OP_NOT: case OP_XOR:
7550 case OP_EQ: case OP_NE: case OP_LT:
7551 case OP_GT: case OP_LE: case OP_GE:
7553 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
7554 case OP_I_GT: case OP_I_LE: case OP_I_GE:
7556 case OP_SEQ: case OP_SNE: case OP_SLT:
7557 case OP_SGT: case OP_SLE: case OP_SGE:
7561 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
7562 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
7563 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
7564 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
7565 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
7566 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
7567 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
7568 case OP_FTTEXT: case OP_FTBINARY:
7570 case OP_DEFINED: case OP_EXISTS:
7571 case OP_MATCH: case OP_EOF:
7578 /* Detect comparisons that have been optimized away */
7579 if (cSVOPo->op_sv == &PL_sv_yes
7580 || cSVOPo->op_sv == &PL_sv_no)
7593 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
7595 Constructs, checks, and returns an op tree expressing a C<given> block.
7596 C<cond> supplies the expression that will be locally assigned to a lexical
7597 variable, and C<block> supplies the body of the C<given> construct; they
7598 are consumed by this function and become part of the constructed op tree.
7599 C<defsv_off> is the pad offset of the scalar lexical variable that will
7600 be affected. If it is 0, the global $_ will be used.
7606 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
7608 PERL_ARGS_ASSERT_NEWGIVENOP;
7609 return newGIVWHENOP(
7610 ref_array_or_hash(cond),
7612 OP_ENTERGIVEN, OP_LEAVEGIVEN,
7617 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
7619 Constructs, checks, and returns an op tree expressing a C<when> block.
7620 C<cond> supplies the test expression, and C<block> supplies the block
7621 that will be executed if the test evaluates to true; they are consumed
7622 by this function and become part of the constructed op tree. C<cond>
7623 will be interpreted DWIMically, often as a comparison against C<$_>,
7624 and may be null to generate a C<default> block.
7630 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
7632 const bool cond_llb = (!cond || looks_like_bool(cond));
7635 PERL_ARGS_ASSERT_NEWWHENOP;
7640 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
7642 scalar(ref_array_or_hash(cond)));
7645 return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0);
7648 /* must not conflict with SVf_UTF8 */
7649 #define CV_CKPROTO_CURSTASH 0x1
7652 Perl_cv_ckproto_len_flags(pTHX_ const CV *cv, const GV *gv, const char *p,
7653 const STRLEN len, const U32 flags)
7655 SV *name = NULL, *msg;
7656 const char * cvp = SvROK(cv)
7657 ? SvTYPE(SvRV_const(cv)) == SVt_PVCV
7658 ? (cv = (const CV *)SvRV_const(cv), CvPROTO(cv))
7661 STRLEN clen = CvPROTOLEN(cv), plen = len;
7663 PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS;
7665 if (p == NULL && cvp == NULL)
7668 if (!ckWARN_d(WARN_PROTOTYPE))
7672 p = S_strip_spaces(aTHX_ p, &plen);
7673 cvp = S_strip_spaces(aTHX_ cvp, &clen);
7674 if ((flags & SVf_UTF8) == SvUTF8(cv)) {
7675 if (plen == clen && memEQ(cvp, p, plen))
7678 if (flags & SVf_UTF8) {
7679 if (bytes_cmp_utf8((const U8 *)cvp, clen, (const U8 *)p, plen) == 0)
7683 if (bytes_cmp_utf8((const U8 *)p, plen, (const U8 *)cvp, clen) == 0)
7689 msg = sv_newmortal();
7694 gv_efullname3(name = sv_newmortal(), gv, NULL);
7695 else if (SvPOK(gv) && *SvPVX((SV *)gv) == '&')
7696 name = newSVpvn_flags(SvPVX((SV *)gv)+1, SvCUR(gv)-1, SvUTF8(gv)|SVs_TEMP);
7697 else if (flags & CV_CKPROTO_CURSTASH || SvROK(gv)) {
7698 name = sv_2mortal(newSVhek(HvNAME_HEK(PL_curstash)));
7699 sv_catpvs(name, "::");
7701 assert (SvTYPE(SvRV_const(gv)) == SVt_PVCV);
7702 assert (CvNAMED(SvRV_const(gv)));
7703 sv_cathek(name, CvNAME_HEK(MUTABLE_CV(SvRV_const(gv))));
7705 else sv_catsv(name, (SV *)gv);
7707 else name = (SV *)gv;
7709 sv_setpvs(msg, "Prototype mismatch:");
7711 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
7713 Perl_sv_catpvf(aTHX_ msg, " (%"UTF8f")",
7714 UTF8fARG(SvUTF8(cv),clen,cvp)
7717 sv_catpvs(msg, ": none");
7718 sv_catpvs(msg, " vs ");
7720 Perl_sv_catpvf(aTHX_ msg, "(%"UTF8f")", UTF8fARG(flags & SVf_UTF8,len,p));
7722 sv_catpvs(msg, "none");
7723 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
7726 static void const_sv_xsub(pTHX_ CV* cv);
7727 static void const_av_xsub(pTHX_ CV* cv);
7731 =head1 Optree Manipulation Functions
7733 =for apidoc cv_const_sv
7735 If C<cv> is a constant sub eligible for inlining, returns the constant
7736 value returned by the sub. Otherwise, returns NULL.
7738 Constant subs can be created with C<newCONSTSUB> or as described in
7739 L<perlsub/"Constant Functions">.
7744 Perl_cv_const_sv(const CV *const cv)
7749 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
7751 sv = CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
7752 if (sv && SvTYPE(sv) == SVt_PVAV) return NULL;
7757 Perl_cv_const_sv_or_av(const CV * const cv)
7761 if (SvROK(cv)) return SvRV((SV *)cv);
7762 assert (SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
7763 return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
7766 /* op_const_sv: examine an optree to determine whether it's in-lineable.
7767 * Can be called in 2 ways:
7770 * look for a single OP_CONST with attached value: return the value
7772 * allow_lex && !CvCONST(cv);
7774 * examine the clone prototype, and if contains only a single
7775 * OP_CONST, return the value; or if it contains a single PADSV ref-
7776 * erencing an outer lexical, turn on CvCONST to indicate the CV is
7777 * a candidate for "constizing" at clone time, and return NULL.
7781 S_op_const_sv(pTHX_ const OP *o, CV *cv, bool allow_lex)
7789 for (; o; o = o->op_next) {
7790 const OPCODE type = o->op_type;
7792 if (type == OP_NEXTSTATE || type == OP_LINESEQ
7794 || type == OP_PUSHMARK)
7796 if (type == OP_DBSTATE)
7798 if (type == OP_LEAVESUB)
7802 if (type == OP_CONST && cSVOPo->op_sv)
7804 else if (type == OP_UNDEF && !o->op_private) {
7808 else if (allow_lex && type == OP_PADSV) {
7809 if (PAD_COMPNAME_FLAGS(o->op_targ) & PADNAMEt_OUTER)
7811 sv = &PL_sv_undef; /* an arbitrary non-null value */
7829 S_already_defined(pTHX_ CV *const cv, OP * const block, OP * const o,
7830 PADNAME * const name, SV ** const const_svp)
7837 if (CvFLAGS(PL_compcv)) {
7838 /* might have had built-in attrs applied */
7839 const bool pureperl = !CvISXSUB(cv) && CvROOT(cv);
7840 if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && pureperl
7841 && ckWARN(WARN_MISC))
7843 /* protect against fatal warnings leaking compcv */
7844 SAVEFREESV(PL_compcv);
7845 Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
7846 SvREFCNT_inc_simple_void_NN(PL_compcv);
7849 (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS
7850 & ~(CVf_LVALUE * pureperl));
7855 /* redundant check for speed: */
7856 if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) {
7857 const line_t oldline = CopLINE(PL_curcop);
7860 : sv_2mortal(newSVpvn_utf8(
7861 PadnamePV(name)+1,PadnameLEN(name)-1, PadnameUTF8(name)
7863 if (PL_parser && PL_parser->copline != NOLINE)
7864 /* This ensures that warnings are reported at the first
7865 line of a redefinition, not the last. */
7866 CopLINE_set(PL_curcop, PL_parser->copline);
7867 /* protect against fatal warnings leaking compcv */
7868 SAVEFREESV(PL_compcv);
7869 report_redefined_cv(namesv, cv, const_svp);
7870 SvREFCNT_inc_simple_void_NN(PL_compcv);
7871 CopLINE_set(PL_curcop, oldline);
7878 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
7883 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
7886 CV *compcv = PL_compcv;
7889 PADOFFSET pax = o->op_targ;
7890 CV *outcv = CvOUTSIDE(PL_compcv);
7893 bool reusable = FALSE;
7895 #ifdef PERL_DEBUG_READONLY_OPS
7896 OPSLAB *slab = NULL;
7899 PERL_ARGS_ASSERT_NEWMYSUB;
7901 /* Find the pad slot for storing the new sub.
7902 We cannot use PL_comppad, as it is the pad owned by the new sub. We
7903 need to look in CvOUTSIDE and find the pad belonging to the enclos-
7904 ing sub. And then we need to dig deeper if this is a lexical from
7906 my sub foo; sub { sub foo { } }
7909 name = PadlistNAMESARRAY(CvPADLIST(outcv))[pax];
7910 if (PadnameOUTER(name) && PARENT_PAD_INDEX(name)) {
7911 pax = PARENT_PAD_INDEX(name);
7912 outcv = CvOUTSIDE(outcv);
7917 &PadARRAY(PadlistARRAY(CvPADLIST(outcv))
7918 [CvDEPTH(outcv) ? CvDEPTH(outcv) : 1])[pax];
7919 spot = (CV **)svspot;
7921 if (!(PL_parser && PL_parser->error_count))
7922 move_proto_attr(&proto, &attrs, (GV *)PadnameSV(name));
7925 assert(proto->op_type == OP_CONST);
7926 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
7927 ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv);
7937 if (PL_parser && PL_parser->error_count) {
7939 SvREFCNT_dec(PL_compcv);
7944 if (CvDEPTH(outcv) && CvCLONE(compcv)) {
7946 svspot = (SV **)(spot = &clonee);
7948 else if (PadnameIsSTATE(name) || CvDEPTH(outcv))
7951 assert (SvTYPE(*spot) == SVt_PVCV);
7953 hek = CvNAME_HEK(*spot);
7957 PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1);
7958 CvNAME_HEK_set(*spot, hek =
7961 (PadnameLEN(name)-1) * (PadnameUTF8(name) ? -1 : 1),
7965 CvLEXICAL_on(*spot);
7967 cv = PadnamePROTOCV(name);
7968 svspot = (SV **)(spot = &PadnamePROTOCV(name));
7972 /* This makes sub {}; work as expected. */
7973 if (block->op_type == OP_STUB) {
7974 const line_t l = PL_parser->copline;
7976 block = newSTATEOP(0, NULL, 0);
7977 PL_parser->copline = l;
7979 block = CvLVALUE(compcv)
7980 || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv))
7981 ? newUNOP(OP_LEAVESUBLV, 0,
7982 op_lvalue(scalarseq(block), OP_LEAVESUBLV))
7983 : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
7984 start = LINKLIST(block);
7986 if (ps && !*ps && !attrs && !CvLVALUE(compcv))
7987 const_sv = S_op_const_sv(aTHX_ start, compcv, FALSE);
7995 const bool exists = CvROOT(cv) || CvXSUB(cv);
7997 /* if the subroutine doesn't exist and wasn't pre-declared
7998 * with a prototype, assume it will be AUTOLOADed,
7999 * skipping the prototype check
8001 if (exists || SvPOK(cv))
8002 cv_ckproto_len_flags(cv, (GV *)PadnameSV(name), ps, ps_len,
8004 /* already defined? */
8006 if (S_already_defined(aTHX_ cv,block,NULL,name,&const_sv))
8009 if (attrs) goto attrs;
8010 /* just a "sub foo;" when &foo is already defined */
8015 else if (CvDEPTH(outcv) && CvCLONE(compcv)) {
8021 SvREFCNT_inc_simple_void_NN(const_sv);
8022 SvFLAGS(const_sv) |= SVs_PADTMP;
8024 assert(!CvROOT(cv) && !CvCONST(cv));
8028 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
8029 CvFILE_set_from_cop(cv, PL_curcop);
8030 CvSTASH_set(cv, PL_curstash);
8033 sv_setpvs(MUTABLE_SV(cv), ""); /* prototype is "" */
8034 CvXSUBANY(cv).any_ptr = const_sv;
8035 CvXSUB(cv) = const_sv_xsub;
8039 CvFLAGS(cv) |= CvMETHOD(compcv);
8041 SvREFCNT_dec(compcv);
8045 /* Checking whether outcv is CvOUTSIDE(compcv) is not sufficient to
8046 determine whether this sub definition is in the same scope as its
8047 declaration. If this sub definition is inside an inner named pack-
8048 age sub (my sub foo; sub bar { sub foo { ... } }), outcv points to
8049 the package sub. So check PadnameOUTER(name) too.
8051 if (outcv == CvOUTSIDE(compcv) && !PadnameOUTER(name)) {
8052 assert(!CvWEAKOUTSIDE(compcv));
8053 SvREFCNT_dec(CvOUTSIDE(compcv));
8054 CvWEAKOUTSIDE_on(compcv);
8056 /* XXX else do we have a circular reference? */
8057 if (cv) { /* must reuse cv in case stub is referenced elsewhere */
8058 /* transfer PL_compcv to cv */
8061 cv_flags_t preserved_flags =
8062 CvFLAGS(cv) & (CVf_BUILTIN_ATTRS|CVf_NAMED);
8063 PADLIST *const temp_padl = CvPADLIST(cv);
8064 CV *const temp_cv = CvOUTSIDE(cv);
8065 const cv_flags_t other_flags =
8066 CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE);
8067 OP * const cvstart = CvSTART(cv);
8071 CvFLAGS(compcv) | preserved_flags;
8072 CvOUTSIDE(cv) = CvOUTSIDE(compcv);
8073 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(compcv);
8074 CvPADLIST_set(cv, CvPADLIST(compcv));
8075 CvOUTSIDE(compcv) = temp_cv;
8076 CvPADLIST_set(compcv, temp_padl);
8077 CvSTART(cv) = CvSTART(compcv);
8078 CvSTART(compcv) = cvstart;
8079 CvFLAGS(compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE);
8080 CvFLAGS(compcv) |= other_flags;
8082 if (CvFILE(cv) && CvDYNFILE(cv)) {
8083 Safefree(CvFILE(cv));
8086 /* inner references to compcv must be fixed up ... */
8087 pad_fixup_inner_anons(CvPADLIST(cv), compcv, cv);
8088 if (PERLDB_INTER)/* Advice debugger on the new sub. */
8089 ++PL_sub_generation;
8092 /* Might have had built-in attributes applied -- propagate them. */
8093 CvFLAGS(cv) |= (CvFLAGS(compcv) & CVf_BUILTIN_ATTRS);
8095 /* ... before we throw it away */
8096 SvREFCNT_dec(compcv);
8097 PL_compcv = compcv = cv;
8105 if (!CvNAME_HEK(cv)) {
8106 if (hek) (void)share_hek_hek(hek);
8110 PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1);
8111 hek = share_hek(PadnamePV(name)+1,
8112 (PadnameLEN(name)-1) * (PadnameUTF8(name) ? -1 : 1),
8115 CvNAME_HEK_set(cv, hek);
8117 if (const_sv) goto clone;
8119 CvFILE_set_from_cop(cv, PL_curcop);
8120 CvSTASH_set(cv, PL_curstash);
8123 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
8124 if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
8130 /* If we assign an optree to a PVCV, then we've defined a subroutine that
8131 the debugger could be able to set a breakpoint in, so signal to
8132 pp_entereval that it should not throw away any saved lines at scope
8135 PL_breakable_sub_gen++;
8137 CvROOT(cv)->op_private |= OPpREFCOUNTED;
8138 OpREFCNT_set(CvROOT(cv), 1);
8139 /* The cv no longer needs to hold a refcount on the slab, as CvROOT
8140 itself has a refcount. */
8142 OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv));
8143 #ifdef PERL_DEBUG_READONLY_OPS
8144 slab = (OPSLAB *)CvSTART(cv);
8146 CvSTART(cv) = start;
8148 finalize_optree(CvROOT(cv));
8149 S_prune_chain_head(&CvSTART(cv));
8151 /* now that optimizer has done its work, adjust pad values */
8153 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
8157 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
8158 apply_attrs(PL_curstash, MUTABLE_SV(cv), attrs);
8162 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
8163 SV * const tmpstr = sv_newmortal();
8164 GV * const db_postponed = gv_fetchpvs("DB::postponed",
8165 GV_ADDMULTI, SVt_PVHV);
8167 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
8170 (long)CopLINE(PL_curcop));
8171 if (HvNAME_HEK(PL_curstash)) {
8172 sv_sethek(tmpstr, HvNAME_HEK(PL_curstash));
8173 sv_catpvs(tmpstr, "::");
8175 else sv_setpvs(tmpstr, "__ANON__::");
8176 sv_catpvn_flags(tmpstr, PadnamePV(name)+1, PadnameLEN(name)-1,
8177 PadnameUTF8(name) ? SV_CATUTF8 : SV_CATBYTES);
8178 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
8179 SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0);
8180 hv = GvHVn(db_postponed);
8181 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) {
8182 CV * const pcv = GvCV(db_postponed);
8188 call_sv(MUTABLE_SV(pcv), G_DISCARD);
8196 assert(CvDEPTH(outcv));
8198 &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[CvDEPTH(outcv)])[pax];
8199 if (reusable) cv_clone_into(clonee, *spot);
8200 else *spot = cv_clone(clonee);
8201 SvREFCNT_dec_NN(clonee);
8204 if (CvDEPTH(outcv) && !reusable && PadnameIsSTATE(name)) {
8205 PADOFFSET depth = CvDEPTH(outcv);
8208 svspot = &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[depth])[pax];
8210 *svspot = SvREFCNT_inc_simple_NN(cv);
8211 SvREFCNT_dec(oldcv);
8217 PL_parser->copline = NOLINE;
8219 #ifdef PERL_DEBUG_READONLY_OPS
8229 Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
8230 OP *block, bool o_is_gv)
8234 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
8238 const bool ec = PL_parser && PL_parser->error_count;
8239 /* If the subroutine has no body, no attributes, and no builtin attributes
8240 then it's just a sub declaration, and we may be able to get away with
8241 storing with a placeholder scalar in the symbol table, rather than a
8242 full CV. If anything is present then it will take a full CV to
8244 const I32 gv_fetch_flags
8245 = ec ? GV_NOADD_NOINIT :
8246 (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
8247 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
8249 const char * const name =
8250 o ? SvPV_const(o_is_gv ? (SV *)o : cSVOPo->op_sv, namlen) : NULL;
8252 bool name_is_utf8 = o && !o_is_gv && SvUTF8(cSVOPo->op_sv);
8253 bool evanescent = FALSE;
8255 #ifdef PERL_DEBUG_READONLY_OPS
8256 OPSLAB *slab = NULL;
8264 /* Try to optimise and avoid creating a GV. Instead, the CV’s name
8265 hek and CvSTASH pointer together can imply the GV. If the name
8266 contains a package name, then GvSTASH(CvGV(cv)) may differ from
8267 CvSTASH, so forego the optimisation if we find any.
8268 Also, we may be called from load_module at run time, so
8269 PL_curstash (which sets CvSTASH) may not point to the stash the
8270 sub is stored in. */
8272 ec ? GV_NOADD_NOINIT
8273 : PL_curstash != CopSTASH(PL_curcop)
8274 || memchr(name, ':', namlen) || memchr(name, '\'', namlen)
8276 : GV_ADDMULTI | GV_NOINIT | GV_NOTQUAL;
8277 gv = gv_fetchsv(cSVOPo->op_sv, flags, SVt_PVCV);
8279 } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
8280 SV * const sv = sv_newmortal();
8281 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
8282 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
8283 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
8284 gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
8286 } else if (PL_curstash) {
8287 gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
8290 gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
8295 move_proto_attr(&proto, &attrs, gv);
8298 move_proto_attr(&proto, &attrs, (GV *)cSVOPo->op_sv);
8303 assert(proto->op_type == OP_CONST);
8304 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
8305 ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv);
8319 if (name) SvREFCNT_dec(PL_compcv);
8320 else cv = PL_compcv;
8322 if (name && block) {
8323 const char *s = strrchr(name, ':');
8325 if (strEQ(s, "BEGIN")) {
8326 if (PL_in_eval & EVAL_KEEPERR)
8327 Perl_croak_nocontext("BEGIN not safe after errors--compilation aborted");
8329 SV * const errsv = ERRSV;
8330 /* force display of errors found but not reported */
8331 sv_catpvs(errsv, "BEGIN not safe after errors--compilation aborted");
8332 Perl_croak_nocontext("%"SVf, SVfARG(errsv));
8339 if (!block && SvTYPE(gv) != SVt_PVGV) {
8340 /* If we are not defining a new sub and the existing one is not a
8342 if (attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)) {
8343 /* We are applying attributes to an existing sub, so we need it
8344 upgraded if it is a constant. */
8345 if (SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVCV)
8346 gv_init_pvn(gv, PL_curstash, name, namlen,
8347 SVf_UTF8 * name_is_utf8);
8349 else { /* Maybe prototype now, and had at maximum
8350 a prototype or const/sub ref before. */
8351 if (SvTYPE(gv) > SVt_NULL) {
8352 cv_ckproto_len_flags((const CV *)gv,
8353 o ? (const GV *)cSVOPo->op_sv : NULL, ps,
8358 sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
8359 if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(gv));
8362 sv_setiv(MUTABLE_SV(gv), -1);
8365 SvREFCNT_dec(PL_compcv);
8366 cv = PL_compcv = NULL;
8371 cv = (!name || (isGV(gv) && GvCVGEN(gv)))
8375 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
8380 /* This makes sub {}; work as expected. */
8381 if (block->op_type == OP_STUB) {
8382 const line_t l = PL_parser->copline;
8384 block = newSTATEOP(0, NULL, 0);
8385 PL_parser->copline = l;
8387 block = CvLVALUE(PL_compcv)
8388 || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv)
8389 && (!isGV(gv) || !GvASSUMECV(gv)))
8390 ? newUNOP(OP_LEAVESUBLV, 0,
8391 op_lvalue(scalarseq(block), OP_LEAVESUBLV))
8392 : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
8393 start = LINKLIST(block);
8395 if (ps && !*ps && !attrs && !CvLVALUE(PL_compcv))
8397 S_op_const_sv(aTHX_ start, PL_compcv, CvCLONE(PL_compcv));
8404 if (SvPOK(gv) || (SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVCV)) {
8406 cv_ckproto_len_flags((const CV *)gv,
8407 o ? (const GV *)cSVOPo->op_sv : NULL, ps,
8408 ps_len, ps_utf8|CV_CKPROTO_CURSTASH);
8410 /* All the other code for sub redefinition warnings expects the
8411 clobbered sub to be a CV. Instead of making all those code
8412 paths more complex, just inline the RV version here. */
8413 const line_t oldline = CopLINE(PL_curcop);
8414 assert(IN_PERL_COMPILETIME);
8415 if (PL_parser && PL_parser->copline != NOLINE)
8416 /* This ensures that warnings are reported at the first
8417 line of a redefinition, not the last. */
8418 CopLINE_set(PL_curcop, PL_parser->copline);
8419 /* protect against fatal warnings leaking compcv */
8420 SAVEFREESV(PL_compcv);
8422 if (ckWARN(WARN_REDEFINE)
8423 || ( ckWARN_d(WARN_REDEFINE)
8424 && ( !const_sv || SvRV(gv) == const_sv
8425 || sv_cmp(SvRV(gv), const_sv) )))
8426 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
8427 "Constant subroutine %"SVf" redefined",
8428 SVfARG(cSVOPo->op_sv));
8430 SvREFCNT_inc_simple_void_NN(PL_compcv);
8431 CopLINE_set(PL_curcop, oldline);
8432 SvREFCNT_dec(SvRV(gv));
8437 const bool exists = CvROOT(cv) || CvXSUB(cv);
8439 /* if the subroutine doesn't exist and wasn't pre-declared
8440 * with a prototype, assume it will be AUTOLOADed,
8441 * skipping the prototype check
8443 if (exists || SvPOK(cv))
8444 cv_ckproto_len_flags(cv, gv, ps, ps_len, ps_utf8);
8445 /* already defined (or promised)? */
8446 if (exists || (isGV(gv) && GvASSUMECV(gv))) {
8447 if (S_already_defined(aTHX_ cv, block, o, NULL, &const_sv))
8450 if (attrs) goto attrs;
8451 /* just a "sub foo;" when &foo is already defined */
8452 SAVEFREESV(PL_compcv);
8458 SvREFCNT_inc_simple_void_NN(const_sv);
8459 SvFLAGS(const_sv) |= SVs_PADTMP;
8461 assert(!CvROOT(cv) && !CvCONST(cv));
8463 sv_setpvs(MUTABLE_SV(cv), ""); /* prototype is "" */
8464 CvXSUBANY(cv).any_ptr = const_sv;
8465 CvXSUB(cv) = const_sv_xsub;
8469 CvFLAGS(cv) |= CvMETHOD(PL_compcv);
8472 if (isGV(gv) || CvMETHOD(PL_compcv)) {
8473 if (name && isGV(gv))
8475 cv = newCONSTSUB_flags(
8476 NULL, name, namlen, name_is_utf8 ? SVf_UTF8 : 0,
8479 CvFLAGS(cv) |= CvMETHOD(PL_compcv);
8483 SV_CHECK_THINKFIRST_COW_DROP((SV *)gv);
8484 prepare_SV_for_RV((SV *)gv);
8488 SvRV_set(gv, const_sv);
8492 SvREFCNT_dec(PL_compcv);
8496 if (cv) { /* must reuse cv if autoloaded */
8497 /* transfer PL_compcv to cv */
8500 cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
8501 PADLIST *const temp_av = CvPADLIST(cv);
8502 CV *const temp_cv = CvOUTSIDE(cv);
8503 const cv_flags_t other_flags =
8504 CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE);
8505 OP * const cvstart = CvSTART(cv);
8509 assert(!CvCVGV_RC(cv));
8510 assert(CvGV(cv) == gv);
8515 PERL_HASH(hash, name, namlen);
8525 CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs
8527 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
8528 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
8529 CvPADLIST_set(cv,CvPADLIST(PL_compcv));
8530 CvOUTSIDE(PL_compcv) = temp_cv;
8531 CvPADLIST_set(PL_compcv, temp_av);
8532 CvSTART(cv) = CvSTART(PL_compcv);
8533 CvSTART(PL_compcv) = cvstart;
8534 CvFLAGS(PL_compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE);
8535 CvFLAGS(PL_compcv) |= other_flags;
8537 if (CvFILE(cv) && CvDYNFILE(cv)) {
8538 Safefree(CvFILE(cv));
8540 CvFILE_set_from_cop(cv, PL_curcop);
8541 CvSTASH_set(cv, PL_curstash);
8543 /* inner references to PL_compcv must be fixed up ... */
8544 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
8545 if (PERLDB_INTER)/* Advice debugger on the new sub. */
8546 ++PL_sub_generation;
8549 /* Might have had built-in attributes applied -- propagate them. */
8550 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
8552 /* ... before we throw it away */
8553 SvREFCNT_dec(PL_compcv);
8558 if (name && isGV(gv)) {
8561 if (HvENAME_HEK(GvSTASH(gv)))
8562 /* sub Foo::bar { (shift)+1 } */
8563 gv_method_changed(gv);
8567 SV_CHECK_THINKFIRST_COW_DROP((SV *)gv);
8568 prepare_SV_for_RV((SV *)gv);
8572 SvRV_set(gv, (SV *)cv);
8576 if (isGV(gv)) CvGV_set(cv, gv);
8580 PERL_HASH(hash, name, namlen);
8581 CvNAME_HEK_set(cv, share_hek(name,
8587 CvFILE_set_from_cop(cv, PL_curcop);
8588 CvSTASH_set(cv, PL_curstash);
8592 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
8593 if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
8599 /* If we assign an optree to a PVCV, then we've defined a subroutine that
8600 the debugger could be able to set a breakpoint in, so signal to
8601 pp_entereval that it should not throw away any saved lines at scope
8604 PL_breakable_sub_gen++;
8606 CvROOT(cv)->op_private |= OPpREFCOUNTED;
8607 OpREFCNT_set(CvROOT(cv), 1);
8608 /* The cv no longer needs to hold a refcount on the slab, as CvROOT
8609 itself has a refcount. */
8611 OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv));
8612 #ifdef PERL_DEBUG_READONLY_OPS
8613 slab = (OPSLAB *)CvSTART(cv);
8615 CvSTART(cv) = start;
8617 finalize_optree(CvROOT(cv));
8618 S_prune_chain_head(&CvSTART(cv));
8620 /* now that optimizer has done its work, adjust pad values */
8622 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
8626 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
8627 HV *stash = name && !CvNAMED(cv) && GvSTASH(CvGV(cv))
8630 if (!name) SAVEFREESV(cv);
8631 apply_attrs(stash, MUTABLE_SV(cv), attrs);
8632 if (!name) SvREFCNT_inc_simple_void_NN(cv);
8635 if (block && has_name) {
8636 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
8637 SV * const tmpstr = cv_name(cv,NULL,0);
8638 GV * const db_postponed = gv_fetchpvs("DB::postponed",
8639 GV_ADDMULTI, SVt_PVHV);
8641 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
8644 (long)CopLINE(PL_curcop));
8645 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
8646 SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0);
8647 hv = GvHVn(db_postponed);
8648 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) {
8649 CV * const pcv = GvCV(db_postponed);
8655 call_sv(MUTABLE_SV(pcv), G_DISCARD);
8661 if (PL_parser && PL_parser->error_count)
8662 clear_special_blocks(name, gv, cv);
8665 process_special_blocks(floor, name, gv, cv);
8671 PL_parser->copline = NOLINE;
8674 #ifdef PERL_DEBUG_READONLY_OPS
8678 if (cv && name && CvOUTSIDE(cv) && !CvEVAL(CvOUTSIDE(cv)))
8679 pad_add_weakref(cv);
8685 S_clear_special_blocks(pTHX_ const char *const fullname,
8686 GV *const gv, CV *const cv) {
8690 PERL_ARGS_ASSERT_CLEAR_SPECIAL_BLOCKS;
8692 colon = strrchr(fullname,':');
8693 name = colon ? colon + 1 : fullname;
8695 if ((*name == 'B' && strEQ(name, "BEGIN"))
8696 || (*name == 'E' && strEQ(name, "END"))
8697 || (*name == 'U' && strEQ(name, "UNITCHECK"))
8698 || (*name == 'C' && strEQ(name, "CHECK"))
8699 || (*name == 'I' && strEQ(name, "INIT"))) {
8705 SvREFCNT_dec_NN(MUTABLE_SV(cv));
8709 /* Returns true if the sub has been freed. */
8711 S_process_special_blocks(pTHX_ I32 floor, const char *const fullname,
8715 const char *const colon = strrchr(fullname,':');
8716 const char *const name = colon ? colon + 1 : fullname;
8718 PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
8721 if (strEQ(name, "BEGIN")) {
8722 const I32 oldscope = PL_scopestack_ix;
8725 if (floor) LEAVE_SCOPE(floor);
8727 PUSHSTACKi(PERLSI_REQUIRE);
8728 SAVECOPFILE(&PL_compiling);
8729 SAVECOPLINE(&PL_compiling);
8730 SAVEVPTR(PL_curcop);
8732 DEBUG_x( dump_sub(gv) );
8733 Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
8734 GvCV_set(gv,0); /* cv has been hijacked */
8735 call_list(oldscope, PL_beginav);
8739 return !PL_savebegin;
8745 if strEQ(name, "END") {
8746 DEBUG_x( dump_sub(gv) );
8747 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
8750 } else if (*name == 'U') {
8751 if (strEQ(name, "UNITCHECK")) {
8752 /* It's never too late to run a unitcheck block */
8753 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
8757 } else if (*name == 'C') {
8758 if (strEQ(name, "CHECK")) {
8760 /* diag_listed_as: Too late to run %s block */
8761 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
8762 "Too late to run CHECK block");
8763 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
8767 } else if (*name == 'I') {
8768 if (strEQ(name, "INIT")) {
8770 /* diag_listed_as: Too late to run %s block */
8771 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
8772 "Too late to run INIT block");
8773 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
8779 DEBUG_x( dump_sub(gv) );
8781 GvCV_set(gv,0); /* cv has been hijacked */
8787 =for apidoc newCONSTSUB
8789 See L</newCONSTSUB_flags>.
8795 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
8797 return newCONSTSUB_flags(stash, name, name ? strlen(name) : 0, 0, sv);
8801 =for apidoc newCONSTSUB_flags
8803 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
8804 eligible for inlining at compile-time.
8806 Currently, the only useful value for C<flags> is SVf_UTF8.
8808 The newly created subroutine takes ownership of a reference to the passed in
8811 Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
8812 which won't be called if used as a destructor, but will suppress the overhead
8813 of a call to C<AUTOLOAD>. (This form, however, isn't eligible for inlining at
8820 Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len,
8824 const char *const file = CopFILE(PL_curcop);
8828 if (IN_PERL_RUNTIME) {
8829 /* at runtime, it's not safe to manipulate PL_curcop: it may be
8830 * an op shared between threads. Use a non-shared COP for our
8832 SAVEVPTR(PL_curcop);
8833 SAVECOMPILEWARNINGS();
8834 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
8835 PL_curcop = &PL_compiling;
8837 SAVECOPLINE(PL_curcop);
8838 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
8841 PL_hints &= ~HINT_BLOCK_SCOPE;
8844 SAVEGENERICSV(PL_curstash);
8845 PL_curstash = (HV *)SvREFCNT_inc_simple_NN(stash);
8848 /* Protect sv against leakage caused by fatal warnings. */
8849 if (sv) SAVEFREESV(sv);
8851 /* file becomes the CvFILE. For an XS, it's usually static storage,
8852 and so doesn't get free()d. (It's expected to be from the C pre-
8853 processor __FILE__ directive). But we need a dynamically allocated one,
8854 and we need it to get freed. */
8855 cv = newXS_len_flags(name, len,
8856 sv && SvTYPE(sv) == SVt_PVAV
8859 file ? file : "", "",
8860 &sv, XS_DYNAMIC_FILENAME | flags);
8861 CvXSUBANY(cv).any_ptr = SvREFCNT_inc_simple(sv);
8870 =for apidoc U||newXS
8872 Used by C<xsubpp> to hook up XSUBs as Perl subs. C<filename> needs to be
8873 static storage, as it is used directly as CvFILE(), without a copy being made.
8879 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
8881 PERL_ARGS_ASSERT_NEWXS;
8882 return newXS_len_flags(
8883 name, name ? strlen(name) : 0, subaddr, filename, NULL, NULL, 0
8888 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
8889 const char *const filename, const char *const proto,
8892 PERL_ARGS_ASSERT_NEWXS_FLAGS;
8893 return newXS_len_flags(
8894 name, name ? strlen(name) : 0, subaddr, filename, proto, NULL, flags
8899 Perl_newXS_deffile(pTHX_ const char *name, XSUBADDR_t subaddr)
8901 PERL_ARGS_ASSERT_NEWXS_DEFFILE;
8902 return newXS_len_flags(
8903 name, strlen(name), subaddr, NULL, NULL, NULL, 0
8908 Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len,
8909 XSUBADDR_t subaddr, const char *const filename,
8910 const char *const proto, SV **const_svp,
8914 bool interleave = FALSE;
8916 PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS;
8919 GV * const gv = gv_fetchpvn(
8920 name ? name : PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
8921 name ? len : PL_curstash ? sizeof("__ANON__") - 1:
8922 sizeof("__ANON__::__ANON__") - 1,
8923 GV_ADDMULTI | flags, SVt_PVCV);
8925 if ((cv = (name ? GvCV(gv) : NULL))) {
8927 /* just a cached method */
8931 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
8932 /* already defined (or promised) */
8933 /* Redundant check that allows us to avoid creating an SV
8934 most of the time: */
8935 if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) {
8936 report_redefined_cv(newSVpvn_flags(
8937 name,len,(flags&SVf_UTF8)|SVs_TEMP
8948 if (cv) /* must reuse cv if autoloaded */
8951 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
8955 if (HvENAME_HEK(GvSTASH(gv)))
8956 gv_method_changed(gv); /* newXS */
8962 /* XSUBs can't be perl lang/perl5db.pl debugged
8963 if (PERLDB_LINE_OR_SAVESRC)
8964 (void)gv_fetchfile(filename); */
8965 assert(!CvDYNFILE(cv)); /* cv_undef should have turned it off */
8966 if (flags & XS_DYNAMIC_FILENAME) {
8968 CvFILE(cv) = savepv(filename);
8970 /* NOTE: not copied, as it is expected to be an external constant string */
8971 CvFILE(cv) = (char *)filename;
8974 assert((flags & XS_DYNAMIC_FILENAME) == 0 && PL_xsubfilename);
8975 CvFILE(cv) = (char*)PL_xsubfilename;
8978 CvXSUB(cv) = subaddr;
8979 #ifndef PERL_IMPLICIT_CONTEXT
8980 CvHSCXT(cv) = &PL_stack_sp;
8986 process_special_blocks(0, name, gv, cv);
8989 } /* <- not a conditional branch */
8992 sv_setpv(MUTABLE_SV(cv), proto);
8993 if (interleave) LEAVE;
8998 Perl_newSTUB(pTHX_ GV *gv, bool fake)
9000 CV *cv = MUTABLE_CV(newSV_type(SVt_PVCV));
9002 PERL_ARGS_ASSERT_NEWSTUB;
9006 if (!fake && HvENAME_HEK(GvSTASH(gv)))
9007 gv_method_changed(gv);
9009 cvgv = gv_fetchsv((SV *)gv, GV_ADDMULTI, SVt_PVCV);
9014 CvFILE_set_from_cop(cv, PL_curcop);
9015 CvSTASH_set(cv, PL_curstash);
9021 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
9027 if (PL_parser && PL_parser->error_count) {
9033 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
9034 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
9037 if ((cv = GvFORM(gv))) {
9038 if (ckWARN(WARN_REDEFINE)) {
9039 const line_t oldline = CopLINE(PL_curcop);
9040 if (PL_parser && PL_parser->copline != NOLINE)
9041 CopLINE_set(PL_curcop, PL_parser->copline);
9043 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
9044 "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
9046 /* diag_listed_as: Format %s redefined */
9047 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
9048 "Format STDOUT redefined");
9050 CopLINE_set(PL_curcop, oldline);
9055 GvFORM(gv) = (CV *)SvREFCNT_inc_simple_NN(cv);
9057 CvFILE_set_from_cop(cv, PL_curcop);
9060 pad_tidy(padtidy_FORMAT);
9061 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
9062 CvROOT(cv)->op_private |= OPpREFCOUNTED;
9063 OpREFCNT_set(CvROOT(cv), 1);
9064 CvSTART(cv) = LINKLIST(CvROOT(cv));
9065 CvROOT(cv)->op_next = 0;
9066 CALL_PEEP(CvSTART(cv));
9067 finalize_optree(CvROOT(cv));
9068 S_prune_chain_head(&CvSTART(cv));
9074 PL_parser->copline = NOLINE;
9076 PL_compiling.cop_seq = 0;
9080 Perl_newANONLIST(pTHX_ OP *o)
9082 return op_convert_list(OP_ANONLIST, OPf_SPECIAL, o);
9086 Perl_newANONHASH(pTHX_ OP *o)
9088 return op_convert_list(OP_ANONHASH, OPf_SPECIAL, o);
9092 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
9094 return newANONATTRSUB(floor, proto, NULL, block);
9098 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
9100 SV * const cv = MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block));
9102 newSVOP(OP_ANONCODE, 0,
9104 if (CvANONCONST(cv))
9105 anoncode = newUNOP(OP_ANONCONST, 0,
9106 op_convert_list(OP_ENTERSUB,
9107 OPf_STACKED|OPf_WANT_SCALAR,
9109 return newUNOP(OP_REFGEN, 0, anoncode);
9113 Perl_oopsAV(pTHX_ OP *o)
9117 PERL_ARGS_ASSERT_OOPSAV;
9119 switch (o->op_type) {
9122 OpTYPE_set(o, OP_PADAV);
9123 return ref(o, OP_RV2AV);
9127 OpTYPE_set(o, OP_RV2AV);
9132 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
9139 Perl_oopsHV(pTHX_ OP *o)
9143 PERL_ARGS_ASSERT_OOPSHV;
9145 switch (o->op_type) {
9148 OpTYPE_set(o, OP_PADHV);
9149 return ref(o, OP_RV2HV);
9153 OpTYPE_set(o, OP_RV2HV);
9158 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
9165 Perl_newAVREF(pTHX_ OP *o)
9169 PERL_ARGS_ASSERT_NEWAVREF;
9171 if (o->op_type == OP_PADANY) {
9172 OpTYPE_set(o, OP_PADAV);
9175 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
9176 Perl_croak(aTHX_ "Can't use an array as a reference");
9178 return newUNOP(OP_RV2AV, 0, scalar(o));
9182 Perl_newGVREF(pTHX_ I32 type, OP *o)
9184 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
9185 return newUNOP(OP_NULL, 0, o);
9186 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
9190 Perl_newHVREF(pTHX_ OP *o)
9194 PERL_ARGS_ASSERT_NEWHVREF;
9196 if (o->op_type == OP_PADANY) {
9197 OpTYPE_set(o, OP_PADHV);
9200 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
9201 Perl_croak(aTHX_ "Can't use a hash as a reference");
9203 return newUNOP(OP_RV2HV, 0, scalar(o));
9207 Perl_newCVREF(pTHX_ I32 flags, OP *o)
9209 if (o->op_type == OP_PADANY) {
9211 OpTYPE_set(o, OP_PADCV);
9213 return newUNOP(OP_RV2CV, flags, scalar(o));
9217 Perl_newSVREF(pTHX_ OP *o)
9221 PERL_ARGS_ASSERT_NEWSVREF;
9223 if (o->op_type == OP_PADANY) {
9224 OpTYPE_set(o, OP_PADSV);
9228 return newUNOP(OP_RV2SV, 0, scalar(o));
9231 /* Check routines. See the comments at the top of this file for details
9232 * on when these are called */
9235 Perl_ck_anoncode(pTHX_ OP *o)
9237 PERL_ARGS_ASSERT_CK_ANONCODE;
9239 cSVOPo->op_targ = pad_add_anon((CV*)cSVOPo->op_sv, o->op_type);
9240 cSVOPo->op_sv = NULL;
9245 S_io_hints(pTHX_ OP *o)
9247 #if O_BINARY != 0 || O_TEXT != 0
9249 PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;;
9251 SV **svp = hv_fetchs(table, "open_IN", FALSE);
9254 const char *d = SvPV_const(*svp, len);
9255 const I32 mode = mode_from_discipline(d, len);
9256 /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */
9258 if (mode & O_BINARY)
9259 o->op_private |= OPpOPEN_IN_RAW;
9263 o->op_private |= OPpOPEN_IN_CRLF;
9267 svp = hv_fetchs(table, "open_OUT", FALSE);
9270 const char *d = SvPV_const(*svp, len);
9271 const I32 mode = mode_from_discipline(d, len);
9272 /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */
9274 if (mode & O_BINARY)
9275 o->op_private |= OPpOPEN_OUT_RAW;
9279 o->op_private |= OPpOPEN_OUT_CRLF;
9284 PERL_UNUSED_CONTEXT;
9290 Perl_ck_backtick(pTHX_ OP *o)
9295 PERL_ARGS_ASSERT_CK_BACKTICK;
9296 /* qx and `` have a null pushmark; CORE::readpipe has only one kid. */
9297 if (o->op_flags & OPf_KIDS && (sibl = OpSIBLING(cUNOPo->op_first))
9298 && (gv = gv_override("readpipe",8)))
9300 /* detach rest of siblings from o and its first child */
9301 op_sibling_splice(o, cUNOPo->op_first, -1, NULL);
9302 newop = S_new_entersubop(aTHX_ gv, sibl);
9304 else if (!(o->op_flags & OPf_KIDS))
9305 newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
9310 S_io_hints(aTHX_ o);
9315 Perl_ck_bitop(pTHX_ OP *o)
9317 PERL_ARGS_ASSERT_CK_BITOP;
9319 o->op_private = (U8)(PL_hints & HINT_INTEGER);
9321 if (o->op_type == OP_NBIT_OR || o->op_type == OP_SBIT_OR
9322 || o->op_type == OP_NBIT_XOR || o->op_type == OP_SBIT_XOR
9323 || o->op_type == OP_NBIT_AND || o->op_type == OP_SBIT_AND
9324 || o->op_type == OP_NCOMPLEMENT || o->op_type == OP_SCOMPLEMENT)
9325 Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__BITWISE),
9326 "The bitwise feature is experimental");
9327 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
9328 && OP_IS_INFIX_BIT(o->op_type))
9330 const OP * const left = cBINOPo->op_first;
9331 const OP * const right = OpSIBLING(left);
9332 if ((OP_IS_NUMCOMPARE(left->op_type) &&
9333 (left->op_flags & OPf_PARENS) == 0) ||
9334 (OP_IS_NUMCOMPARE(right->op_type) &&
9335 (right->op_flags & OPf_PARENS) == 0))
9336 Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
9337 "Possible precedence problem on bitwise %s operator",
9338 o->op_type == OP_BIT_OR
9339 ||o->op_type == OP_NBIT_OR ? "|"
9340 : o->op_type == OP_BIT_AND
9341 ||o->op_type == OP_NBIT_AND ? "&"
9342 : o->op_type == OP_BIT_XOR
9343 ||o->op_type == OP_NBIT_XOR ? "^"
9344 : o->op_type == OP_SBIT_OR ? "|."
9345 : o->op_type == OP_SBIT_AND ? "&." : "^."
9351 PERL_STATIC_INLINE bool
9352 is_dollar_bracket(pTHX_ const OP * const o)
9355 PERL_UNUSED_CONTEXT;
9356 return o->op_type == OP_RV2SV && o->op_flags & OPf_KIDS
9357 && (kid = cUNOPx(o)->op_first)
9358 && kid->op_type == OP_GV
9359 && strEQ(GvNAME(cGVOPx_gv(kid)), "[");
9363 Perl_ck_cmp(pTHX_ OP *o)
9365 PERL_ARGS_ASSERT_CK_CMP;
9366 if (ckWARN(WARN_SYNTAX)) {
9367 const OP *kid = cUNOPo->op_first;
9370 ( is_dollar_bracket(aTHX_ kid)
9371 && OpSIBLING(kid) && OpSIBLING(kid)->op_type == OP_CONST
9373 || ( kid->op_type == OP_CONST
9374 && (kid = OpSIBLING(kid)) && is_dollar_bracket(aTHX_ kid)
9378 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
9379 "$[ used in %s (did you mean $] ?)", OP_DESC(o));
9385 Perl_ck_concat(pTHX_ OP *o)
9387 const OP * const kid = cUNOPo->op_first;
9389 PERL_ARGS_ASSERT_CK_CONCAT;
9390 PERL_UNUSED_CONTEXT;
9392 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
9393 !(kUNOP->op_first->op_flags & OPf_MOD))
9394 o->op_flags |= OPf_STACKED;
9399 Perl_ck_spair(pTHX_ OP *o)
9403 PERL_ARGS_ASSERT_CK_SPAIR;
9405 if (o->op_flags & OPf_KIDS) {
9409 const OPCODE type = o->op_type;
9410 o = modkids(ck_fun(o), type);
9411 kid = cUNOPo->op_first;
9412 kidkid = kUNOP->op_first;
9413 newop = OpSIBLING(kidkid);
9415 const OPCODE type = newop->op_type;
9416 if (OpHAS_SIBLING(newop))
9418 if (o->op_type == OP_REFGEN
9419 && ( type == OP_RV2CV
9420 || ( !(newop->op_flags & OPf_PARENS)
9421 && ( type == OP_RV2AV || type == OP_PADAV
9422 || type == OP_RV2HV || type == OP_PADHV))))
9423 NOOP; /* OK (allow srefgen for \@a and \%h) */
9424 else if (OP_GIMME(newop,0) != G_SCALAR)
9427 /* excise first sibling */
9428 op_sibling_splice(kid, NULL, 1, NULL);
9431 /* transforms OP_REFGEN into OP_SREFGEN, OP_CHOP into OP_SCHOP,
9432 * and OP_CHOMP into OP_SCHOMP */
9433 o->op_ppaddr = PL_ppaddr[++o->op_type];
9438 Perl_ck_delete(pTHX_ OP *o)
9440 PERL_ARGS_ASSERT_CK_DELETE;
9444 if (o->op_flags & OPf_KIDS) {
9445 OP * const kid = cUNOPo->op_first;
9446 switch (kid->op_type) {
9448 o->op_flags |= OPf_SPECIAL;
9451 o->op_private |= OPpSLICE;
9454 o->op_flags |= OPf_SPECIAL;
9459 Perl_croak(aTHX_ "delete argument is index/value array slice,"
9460 " use array slice");
9462 Perl_croak(aTHX_ "delete argument is key/value hash slice, use"
9465 Perl_croak(aTHX_ "delete argument is not a HASH or ARRAY "
9466 "element or slice");
9468 if (kid->op_private & OPpLVAL_INTRO)
9469 o->op_private |= OPpLVAL_INTRO;
9476 Perl_ck_eof(pTHX_ OP *o)
9478 PERL_ARGS_ASSERT_CK_EOF;
9480 if (o->op_flags & OPf_KIDS) {
9482 if (cLISTOPo->op_first->op_type == OP_STUB) {
9484 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
9489 kid = cLISTOPo->op_first;
9490 if (kid->op_type == OP_RV2GV)
9491 kid->op_private |= OPpALLOW_FAKE;
9497 Perl_ck_eval(pTHX_ OP *o)
9501 PERL_ARGS_ASSERT_CK_EVAL;
9503 PL_hints |= HINT_BLOCK_SCOPE;
9504 if (o->op_flags & OPf_KIDS) {
9505 SVOP * const kid = (SVOP*)cUNOPo->op_first;
9508 if (o->op_type == OP_ENTERTRY) {
9511 /* cut whole sibling chain free from o */
9512 op_sibling_splice(o, NULL, -1, NULL);
9515 enter = S_alloc_LOGOP(aTHX_ OP_ENTERTRY, NULL, NULL);
9517 /* establish postfix order */
9518 enter->op_next = (OP*)enter;
9520 o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
9521 OpTYPE_set(o, OP_LEAVETRY);
9522 enter->op_other = o;
9527 S_set_haseval(aTHX);
9531 const U8 priv = o->op_private;
9533 /* the newUNOP will recursively call ck_eval(), which will handle
9534 * all the stuff at the end of this function, like adding
9537 return newUNOP(OP_ENTEREVAL, priv <<8, newDEFSVOP());
9539 o->op_targ = (PADOFFSET)PL_hints;
9540 if (o->op_private & OPpEVAL_BYTES) o->op_targ &= ~HINT_UTF8;
9541 if ((PL_hints & HINT_LOCALIZE_HH) != 0
9542 && !(o->op_private & OPpEVAL_COPHH) && GvHV(PL_hintgv)) {
9543 /* Store a copy of %^H that pp_entereval can pick up. */
9544 OP *hhop = newSVOP(OP_HINTSEVAL, 0,
9545 MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv))));
9546 /* append hhop to only child */
9547 op_sibling_splice(o, cUNOPo->op_first, 0, hhop);
9549 o->op_private |= OPpEVAL_HAS_HH;
9551 if (!(o->op_private & OPpEVAL_BYTES)
9552 && FEATURE_UNIEVAL_IS_ENABLED)
9553 o->op_private |= OPpEVAL_UNICODE;
9558 Perl_ck_exec(pTHX_ OP *o)
9560 PERL_ARGS_ASSERT_CK_EXEC;
9562 if (o->op_flags & OPf_STACKED) {
9565 kid = OpSIBLING(cUNOPo->op_first);
9566 if (kid->op_type == OP_RV2GV)
9575 Perl_ck_exists(pTHX_ OP *o)
9577 PERL_ARGS_ASSERT_CK_EXISTS;
9580 if (o->op_flags & OPf_KIDS) {
9581 OP * const kid = cUNOPo->op_first;
9582 if (kid->op_type == OP_ENTERSUB) {
9583 (void) ref(kid, o->op_type);
9584 if (kid->op_type != OP_RV2CV
9585 && !(PL_parser && PL_parser->error_count))
9587 "exists argument is not a subroutine name");
9588 o->op_private |= OPpEXISTS_SUB;
9590 else if (kid->op_type == OP_AELEM)
9591 o->op_flags |= OPf_SPECIAL;
9592 else if (kid->op_type != OP_HELEM)
9593 Perl_croak(aTHX_ "exists argument is not a HASH or ARRAY "
9594 "element or a subroutine");
9601 Perl_ck_rvconst(pTHX_ OP *o)
9604 SVOP * const kid = (SVOP*)cUNOPo->op_first;
9606 PERL_ARGS_ASSERT_CK_RVCONST;
9608 o->op_private |= (PL_hints & HINT_STRICT_REFS);
9610 if (kid->op_type == OP_CONST) {
9613 SV * const kidsv = kid->op_sv;
9615 /* Is it a constant from cv_const_sv()? */
9616 if ((SvROK(kidsv) || isGV_with_GP(kidsv)) && SvREADONLY(kidsv)) {
9619 if (SvTYPE(kidsv) == SVt_PVAV) return o;
9620 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
9621 const char *badthing;
9622 switch (o->op_type) {
9624 badthing = "a SCALAR";
9627 badthing = "an ARRAY";
9630 badthing = "a HASH";
9638 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
9639 SVfARG(kidsv), badthing);
9642 * This is a little tricky. We only want to add the symbol if we
9643 * didn't add it in the lexer. Otherwise we get duplicate strict
9644 * warnings. But if we didn't add it in the lexer, we must at
9645 * least pretend like we wanted to add it even if it existed before,
9646 * or we get possible typo warnings. OPpCONST_ENTERED says
9647 * whether the lexer already added THIS instance of this symbol.
9649 iscv = o->op_type == OP_RV2CV ? GV_NOEXPAND|GV_ADDMULTI : 0;
9650 gv = gv_fetchsv(kidsv,
9651 o->op_type == OP_RV2CV
9652 && o->op_private & OPpMAY_RETURN_CONSTANT
9654 : iscv | !(kid->op_private & OPpCONST_ENTERED),
9657 : o->op_type == OP_RV2SV
9659 : o->op_type == OP_RV2AV
9661 : o->op_type == OP_RV2HV
9668 if (!(o->op_private & OPpMAY_RETURN_CONSTANT)
9669 && SvTYPE(SvRV(gv)) != SVt_PVCV)
9670 gv_fetchsv(kidsv, GV_ADDMULTI, SVt_PVCV);
9672 OpTYPE_set(kid, OP_GV);
9673 SvREFCNT_dec(kid->op_sv);
9675 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
9676 STATIC_ASSERT_STMT(sizeof(PADOP) <= sizeof(SVOP));
9677 kPADOP->op_padix = pad_alloc(OP_GV, SVf_READONLY);
9678 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
9679 PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
9681 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
9683 kid->op_private = 0;
9684 /* FAKE globs in the symbol table cause weird bugs (#77810) */
9692 Perl_ck_ftst(pTHX_ OP *o)
9695 const I32 type = o->op_type;
9697 PERL_ARGS_ASSERT_CK_FTST;
9699 if (o->op_flags & OPf_REF) {
9702 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
9703 SVOP * const kid = (SVOP*)cUNOPo->op_first;
9704 const OPCODE kidtype = kid->op_type;
9706 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)
9707 && !kid->op_folded) {
9708 OP * const newop = newGVOP(type, OPf_REF,
9709 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
9713 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
9714 o->op_private |= OPpFT_ACCESS;
9715 if (type != OP_STAT && type != OP_LSTAT
9716 && PL_check[kidtype] == Perl_ck_ftst
9717 && kidtype != OP_STAT && kidtype != OP_LSTAT
9719 o->op_private |= OPpFT_STACKED;
9720 kid->op_private |= OPpFT_STACKING;
9721 if (kidtype == OP_FTTTY && (
9722 !(kid->op_private & OPpFT_STACKED)
9723 || kid->op_private & OPpFT_AFTER_t
9725 o->op_private |= OPpFT_AFTER_t;
9730 if (type == OP_FTTTY)
9731 o = newGVOP(type, OPf_REF, PL_stdingv);
9733 o = newUNOP(type, 0, newDEFSVOP());
9739 Perl_ck_fun(pTHX_ OP *o)
9741 const int type = o->op_type;
9742 I32 oa = PL_opargs[type] >> OASHIFT;
9744 PERL_ARGS_ASSERT_CK_FUN;
9746 if (o->op_flags & OPf_STACKED) {
9747 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
9750 return no_fh_allowed(o);
9753 if (o->op_flags & OPf_KIDS) {
9754 OP *prev_kid = NULL;
9755 OP *kid = cLISTOPo->op_first;
9757 bool seen_optional = FALSE;
9759 if (kid->op_type == OP_PUSHMARK ||
9760 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
9763 kid = OpSIBLING(kid);
9765 if (kid && kid->op_type == OP_COREARGS) {
9766 bool optional = FALSE;
9769 if (oa & OA_OPTIONAL) optional = TRUE;
9772 if (optional) o->op_private |= numargs;
9777 if (oa & OA_OPTIONAL || (oa & 7) == OA_LIST) {
9778 if (!kid && !seen_optional && PL_opargs[type] & OA_DEFGV) {
9780 /* append kid to chain */
9781 op_sibling_splice(o, prev_kid, 0, kid);
9783 seen_optional = TRUE;
9790 /* list seen where single (scalar) arg expected? */
9791 if (numargs == 1 && !(oa >> 4)
9792 && kid->op_type == OP_LIST && type != OP_SCALAR)
9794 return too_many_arguments_pv(o,PL_op_desc[type], 0);
9796 if (type != OP_DELETE) scalar(kid);
9807 if ((type == OP_PUSH || type == OP_UNSHIFT)
9808 && !OpHAS_SIBLING(kid))
9809 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
9810 "Useless use of %s with no values",
9813 if (kid->op_type == OP_CONST
9814 && ( !SvROK(cSVOPx_sv(kid))
9815 || SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV )
9817 bad_type_pv(numargs, "array", o, kid);
9818 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV) {
9819 yyerror_pv(Perl_form(aTHX_ "Experimental %s on scalar is now forbidden",
9820 PL_op_desc[type]), 0);
9823 op_lvalue(kid, type);
9827 if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
9828 bad_type_pv(numargs, "hash", o, kid);
9829 op_lvalue(kid, type);
9833 /* replace kid with newop in chain */
9835 S_op_sibling_newUNOP(aTHX_ o, prev_kid, OP_NULL, 0);
9836 newop->op_next = newop;
9841 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
9842 if (kid->op_type == OP_CONST &&
9843 (kid->op_private & OPpCONST_BARE))
9845 OP * const newop = newGVOP(OP_GV, 0,
9846 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
9847 /* replace kid with newop in chain */
9848 op_sibling_splice(o, prev_kid, 1, newop);
9852 else if (kid->op_type == OP_READLINE) {
9853 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
9854 bad_type_pv(numargs, "HANDLE", o, kid);
9857 I32 flags = OPf_SPECIAL;
9861 /* is this op a FH constructor? */
9862 if (is_handle_constructor(o,numargs)) {
9863 const char *name = NULL;
9866 bool want_dollar = TRUE;
9869 /* Set a flag to tell rv2gv to vivify
9870 * need to "prove" flag does not mean something
9871 * else already - NI-S 1999/05/07
9874 if (kid->op_type == OP_PADSV) {
9876 = PAD_COMPNAME_SV(kid->op_targ);
9877 name = PadnamePV (pn);
9878 len = PadnameLEN(pn);
9879 name_utf8 = PadnameUTF8(pn);
9881 else if (kid->op_type == OP_RV2SV
9882 && kUNOP->op_first->op_type == OP_GV)
9884 GV * const gv = cGVOPx_gv(kUNOP->op_first);
9886 len = GvNAMELEN(gv);
9887 name_utf8 = GvNAMEUTF8(gv) ? SVf_UTF8 : 0;
9889 else if (kid->op_type == OP_AELEM
9890 || kid->op_type == OP_HELEM)
9893 OP *op = ((BINOP*)kid)->op_first;
9897 const char * const a =
9898 kid->op_type == OP_AELEM ?
9900 if (((op->op_type == OP_RV2AV) ||
9901 (op->op_type == OP_RV2HV)) &&
9902 (firstop = ((UNOP*)op)->op_first) &&
9903 (firstop->op_type == OP_GV)) {
9904 /* packagevar $a[] or $h{} */
9905 GV * const gv = cGVOPx_gv(firstop);
9913 else if (op->op_type == OP_PADAV
9914 || op->op_type == OP_PADHV) {
9915 /* lexicalvar $a[] or $h{} */
9916 const char * const padname =
9917 PAD_COMPNAME_PV(op->op_targ);
9926 name = SvPV_const(tmpstr, len);
9927 name_utf8 = SvUTF8(tmpstr);
9932 name = "__ANONIO__";
9934 want_dollar = FALSE;
9936 op_lvalue(kid, type);
9940 targ = pad_alloc(OP_RV2GV, SVf_READONLY);
9941 namesv = PAD_SVl(targ);
9942 if (want_dollar && *name != '$')
9943 sv_setpvs(namesv, "$");
9945 sv_setpvs(namesv, "");
9946 sv_catpvn(namesv, name, len);
9947 if ( name_utf8 ) SvUTF8_on(namesv);
9951 kid = S_op_sibling_newUNOP(aTHX_ o, prev_kid,
9953 kid->op_targ = targ;
9954 kid->op_private |= priv;
9960 if ((type == OP_UNDEF || type == OP_POS)
9961 && numargs == 1 && !(oa >> 4)
9962 && kid->op_type == OP_LIST)
9963 return too_many_arguments_pv(o,PL_op_desc[type], 0);
9964 op_lvalue(scalar(kid), type);
9969 kid = OpSIBLING(kid);
9971 /* FIXME - should the numargs or-ing move after the too many
9972 * arguments check? */
9973 o->op_private |= numargs;
9975 return too_many_arguments_pv(o,OP_DESC(o), 0);
9978 else if (PL_opargs[type] & OA_DEFGV) {
9979 /* Ordering of these two is important to keep f_map.t passing. */
9981 return newUNOP(type, 0, newDEFSVOP());
9985 while (oa & OA_OPTIONAL)
9987 if (oa && oa != OA_LIST)
9988 return too_few_arguments_pv(o,OP_DESC(o), 0);
9994 Perl_ck_glob(pTHX_ OP *o)
9998 PERL_ARGS_ASSERT_CK_GLOB;
10001 if ((o->op_flags & OPf_KIDS) && !OpHAS_SIBLING(cLISTOPo->op_first))
10002 op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */
10004 if (!(o->op_flags & OPf_SPECIAL) && (gv = gv_override("glob", 4)))
10008 * \ null - const(wildcard)
10013 * \ mark - glob - rv2cv
10014 * | \ gv(CORE::GLOBAL::glob)
10016 * \ null - const(wildcard)
10018 o->op_flags |= OPf_SPECIAL;
10019 o->op_targ = pad_alloc(OP_GLOB, SVs_PADTMP);
10020 o = S_new_entersubop(aTHX_ gv, o);
10021 o = newUNOP(OP_NULL, 0, o);
10022 o->op_targ = OP_GLOB; /* hint at what it used to be: eg in newWHILEOP */
10025 else o->op_flags &= ~OPf_SPECIAL;
10026 #if !defined(PERL_EXTERNAL_GLOB)
10027 if (!PL_globhook) {
10029 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
10030 newSVpvs("File::Glob"), NULL, NULL, NULL);
10033 #endif /* !PERL_EXTERNAL_GLOB */
10034 gv = (GV *)newSV(0);
10035 gv_init(gv, 0, "", 0, 0);
10037 op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
10038 SvREFCNT_dec_NN(gv); /* newGVOP increased it */
10044 Perl_ck_grep(pTHX_ OP *o)
10048 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
10051 PERL_ARGS_ASSERT_CK_GREP;
10053 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
10055 if (o->op_flags & OPf_STACKED) {
10056 kid = cUNOPx(OpSIBLING(cLISTOPo->op_first))->op_first;
10057 if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
10058 return no_fh_allowed(o);
10059 o->op_flags &= ~OPf_STACKED;
10061 kid = OpSIBLING(cLISTOPo->op_first);
10062 if (type == OP_MAPWHILE)
10067 if (PL_parser && PL_parser->error_count)
10069 kid = OpSIBLING(cLISTOPo->op_first);
10070 if (kid->op_type != OP_NULL)
10071 Perl_croak(aTHX_ "panic: ck_grep, type=%u", (unsigned) kid->op_type);
10072 kid = kUNOP->op_first;
10074 gwop = S_alloc_LOGOP(aTHX_ type, o, LINKLIST(kid));
10075 kid->op_next = (OP*)gwop;
10076 offset = pad_findmy_pvs("$_", 0);
10077 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
10078 o->op_private = gwop->op_private = 0;
10079 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
10082 o->op_private = gwop->op_private = OPpGREP_LEX;
10083 gwop->op_targ = o->op_targ = offset;
10086 kid = OpSIBLING(cLISTOPo->op_first);
10087 for (kid = OpSIBLING(kid); kid; kid = OpSIBLING(kid))
10088 op_lvalue(kid, OP_GREPSTART);
10094 Perl_ck_index(pTHX_ OP *o)
10096 PERL_ARGS_ASSERT_CK_INDEX;
10098 if (o->op_flags & OPf_KIDS) {
10099 OP *kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
10101 kid = OpSIBLING(kid); /* get past "big" */
10102 if (kid && kid->op_type == OP_CONST) {
10103 const bool save_taint = TAINT_get;
10104 SV *sv = kSVOP->op_sv;
10105 if ((!SvPOK(sv) || SvNIOKp(sv)) && SvOK(sv) && !SvROK(sv)) {
10107 sv_copypv(sv, kSVOP->op_sv);
10108 SvREFCNT_dec_NN(kSVOP->op_sv);
10111 if (SvOK(sv)) fbm_compile(sv, 0);
10112 TAINT_set(save_taint);
10113 #ifdef NO_TAINT_SUPPORT
10114 PERL_UNUSED_VAR(save_taint);
10122 Perl_ck_lfun(pTHX_ OP *o)
10124 const OPCODE type = o->op_type;
10126 PERL_ARGS_ASSERT_CK_LFUN;
10128 return modkids(ck_fun(o), type);
10132 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
10134 PERL_ARGS_ASSERT_CK_DEFINED;
10136 if ((o->op_flags & OPf_KIDS)) {
10137 switch (cUNOPo->op_first->op_type) {
10140 Perl_croak(aTHX_ "Can't use 'defined(@array)'"
10141 " (Maybe you should just omit the defined()?)");
10145 Perl_croak(aTHX_ "Can't use 'defined(%%hash)'"
10146 " (Maybe you should just omit the defined()?)");
10157 Perl_ck_readline(pTHX_ OP *o)
10159 PERL_ARGS_ASSERT_CK_READLINE;
10161 if (o->op_flags & OPf_KIDS) {
10162 OP *kid = cLISTOPo->op_first;
10163 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
10167 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
10175 Perl_ck_rfun(pTHX_ OP *o)
10177 const OPCODE type = o->op_type;
10179 PERL_ARGS_ASSERT_CK_RFUN;
10181 return refkids(ck_fun(o), type);
10185 Perl_ck_listiob(pTHX_ OP *o)
10189 PERL_ARGS_ASSERT_CK_LISTIOB;
10191 kid = cLISTOPo->op_first;
10193 o = force_list(o, 1);
10194 kid = cLISTOPo->op_first;
10196 if (kid->op_type == OP_PUSHMARK)
10197 kid = OpSIBLING(kid);
10198 if (kid && o->op_flags & OPf_STACKED)
10199 kid = OpSIBLING(kid);
10200 else if (kid && !OpHAS_SIBLING(kid)) { /* print HANDLE; */
10201 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE
10202 && !kid->op_folded) {
10203 o->op_flags |= OPf_STACKED; /* make it a filehandle */
10205 /* replace old const op with new OP_RV2GV parent */
10206 kid = S_op_sibling_newUNOP(aTHX_ o, cLISTOPo->op_first,
10207 OP_RV2GV, OPf_REF);
10208 kid = OpSIBLING(kid);
10213 op_append_elem(o->op_type, o, newDEFSVOP());
10215 if (o->op_type == OP_PRTF) return modkids(listkids(o), OP_PRTF);
10216 return listkids(o);
10220 Perl_ck_smartmatch(pTHX_ OP *o)
10223 PERL_ARGS_ASSERT_CK_SMARTMATCH;
10224 if (0 == (o->op_flags & OPf_SPECIAL)) {
10225 OP *first = cBINOPo->op_first;
10226 OP *second = OpSIBLING(first);
10228 /* Implicitly take a reference to an array or hash */
10230 /* remove the original two siblings, then add back the
10231 * (possibly different) first and second sibs.
10233 op_sibling_splice(o, NULL, 1, NULL);
10234 op_sibling_splice(o, NULL, 1, NULL);
10235 first = ref_array_or_hash(first);
10236 second = ref_array_or_hash(second);
10237 op_sibling_splice(o, NULL, 0, second);
10238 op_sibling_splice(o, NULL, 0, first);
10240 /* Implicitly take a reference to a regular expression */
10241 if (first->op_type == OP_MATCH) {
10242 OpTYPE_set(first, OP_QR);
10244 if (second->op_type == OP_MATCH) {
10245 OpTYPE_set(second, OP_QR);
10254 S_maybe_targlex(pTHX_ OP *o)
10256 OP * const kid = cLISTOPo->op_first;
10257 /* has a disposable target? */
10258 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
10259 && !(kid->op_flags & OPf_STACKED)
10260 /* Cannot steal the second time! */
10261 && !(kid->op_private & OPpTARGET_MY)
10264 OP * const kkid = OpSIBLING(kid);
10266 /* Can just relocate the target. */
10267 if (kkid && kkid->op_type == OP_PADSV
10268 && (!(kkid->op_private & OPpLVAL_INTRO)
10269 || kkid->op_private & OPpPAD_STATE))
10271 kid->op_targ = kkid->op_targ;
10273 /* Now we do not need PADSV and SASSIGN.
10274 * Detach kid and free the rest. */
10275 op_sibling_splice(o, NULL, 1, NULL);
10277 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
10285 Perl_ck_sassign(pTHX_ OP *o)
10288 OP * const kid = cLISTOPo->op_first;
10290 PERL_ARGS_ASSERT_CK_SASSIGN;
10292 if (OpHAS_SIBLING(kid)) {
10293 OP *kkid = OpSIBLING(kid);
10294 /* For state variable assignment with attributes, kkid is a list op
10295 whose op_last is a padsv. */
10296 if ((kkid->op_type == OP_PADSV ||
10297 (OP_TYPE_IS_OR_WAS(kkid, OP_LIST) &&
10298 (kkid = cLISTOPx(kkid)->op_last)->op_type == OP_PADSV
10301 && (kkid->op_private & (OPpLVAL_INTRO|OPpPAD_STATE))
10302 == (OPpLVAL_INTRO|OPpPAD_STATE)) {
10303 const PADOFFSET target = kkid->op_targ;
10304 OP *const other = newOP(OP_PADSV,
10306 | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
10307 OP *const first = newOP(OP_NULL, 0);
10309 newCONDOP(0, first, o, other);
10310 /* XXX targlex disabled for now; see ticket #124160
10311 newCONDOP(0, first, S_maybe_targlex(aTHX_ o), other);
10313 OP *const condop = first->op_next;
10315 OpTYPE_set(condop, OP_ONCE);
10316 other->op_targ = target;
10317 nullop->op_flags |= OPf_WANT_SCALAR;
10319 /* Store the initializedness of state vars in a separate
10322 pad_add_name_pvn("$",1,padadd_NO_DUP_CHECK|padadd_STATE,0,0);
10323 /* hijacking PADSTALE for uninitialized state variables */
10324 SvPADSTALE_on(PAD_SVl(condop->op_targ));
10329 return S_maybe_targlex(aTHX_ o);
10333 Perl_ck_match(pTHX_ OP *o)
10335 PERL_ARGS_ASSERT_CK_MATCH;
10337 if (o->op_type != OP_QR && PL_compcv) {
10338 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
10339 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
10340 o->op_targ = offset;
10341 o->op_private |= OPpTARGET_MY;
10344 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
10345 o->op_private |= OPpRUNTIME;
10350 Perl_ck_method(pTHX_ OP *o)
10352 SV *sv, *methsv, *rclass;
10353 const char* method;
10356 STRLEN len, nsplit = 0, i;
10358 OP * const kid = cUNOPo->op_first;
10360 PERL_ARGS_ASSERT_CK_METHOD;
10361 if (kid->op_type != OP_CONST) return o;
10365 /* replace ' with :: */
10366 while ((compatptr = strchr(SvPVX(sv), '\''))) {
10368 sv_insert(sv, compatptr - SvPVX_const(sv), 0, ":", 1);
10371 method = SvPVX_const(sv);
10373 utf8 = SvUTF8(sv) ? -1 : 1;
10375 for (i = len - 1; i > 0; --i) if (method[i] == ':') {
10380 methsv = newSVpvn_share(method+nsplit, utf8*(len - nsplit), 0);
10382 if (!nsplit) { /* $proto->method() */
10384 return newMETHOP_named(OP_METHOD_NAMED, 0, methsv);
10387 if (nsplit == 7 && memEQ(method, "SUPER::", nsplit)) { /* $proto->SUPER::method() */
10389 return newMETHOP_named(OP_METHOD_SUPER, 0, methsv);
10392 /* $proto->MyClass::method() and $proto->MyClass::SUPER::method() */
10393 if (nsplit >= 9 && strnEQ(method+nsplit-9, "::SUPER::", 9)) {
10394 rclass = newSVpvn_share(method, utf8*(nsplit-9), 0);
10395 new_op = newMETHOP_named(OP_METHOD_REDIR_SUPER, 0, methsv);
10397 rclass = newSVpvn_share(method, utf8*(nsplit-2), 0);
10398 new_op = newMETHOP_named(OP_METHOD_REDIR, 0, methsv);
10400 #ifdef USE_ITHREADS
10401 op_relocate_sv(&rclass, &cMETHOPx(new_op)->op_rclass_targ);
10403 cMETHOPx(new_op)->op_rclass_sv = rclass;
10410 Perl_ck_null(pTHX_ OP *o)
10412 PERL_ARGS_ASSERT_CK_NULL;
10413 PERL_UNUSED_CONTEXT;
10418 Perl_ck_open(pTHX_ OP *o)
10420 PERL_ARGS_ASSERT_CK_OPEN;
10422 S_io_hints(aTHX_ o);
10424 /* In case of three-arg dup open remove strictness
10425 * from the last arg if it is a bareword. */
10426 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
10427 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
10431 if ((last->op_type == OP_CONST) && /* The bareword. */
10432 (last->op_private & OPpCONST_BARE) &&
10433 (last->op_private & OPpCONST_STRICT) &&
10434 (oa = OpSIBLING(first)) && /* The fh. */
10435 (oa = OpSIBLING(oa)) && /* The mode. */
10436 (oa->op_type == OP_CONST) &&
10437 SvPOK(((SVOP*)oa)->op_sv) &&
10438 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
10439 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
10440 (last == OpSIBLING(oa))) /* The bareword. */
10441 last->op_private &= ~OPpCONST_STRICT;
10447 Perl_ck_prototype(pTHX_ OP *o)
10449 PERL_ARGS_ASSERT_CK_PROTOTYPE;
10450 if (!(o->op_flags & OPf_KIDS)) {
10452 return newUNOP(OP_PROTOTYPE, 0, newDEFSVOP());
10458 Perl_ck_refassign(pTHX_ OP *o)
10460 OP * const right = cLISTOPo->op_first;
10461 OP * const left = OpSIBLING(right);
10462 OP *varop = cUNOPx(cUNOPx(left)->op_first)->op_first;
10465 PERL_ARGS_ASSERT_CK_REFASSIGN;
10467 assert (left->op_type == OP_SREFGEN);
10470 /* we use OPpPAD_STATE in refassign to mean either of those things,
10471 * and the code assumes the two flags occupy the same bit position
10472 * in the various ops below */
10473 assert(OPpPAD_STATE == OPpOUR_INTRO);
10475 switch (varop->op_type) {
10477 o->op_private |= OPpLVREF_AV;
10480 o->op_private |= OPpLVREF_HV;
10484 o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpPAD_STATE));
10485 o->op_targ = varop->op_targ;
10486 varop->op_targ = 0;
10487 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
10491 o->op_private |= OPpLVREF_AV;
10493 NOT_REACHED; /* NOTREACHED */
10495 o->op_private |= OPpLVREF_HV;
10499 o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO));
10500 if (cUNOPx(varop)->op_first->op_type != OP_GV) goto bad;
10502 /* Point varop to its GV kid, detached. */
10503 varop = op_sibling_splice(varop, NULL, -1, NULL);
10507 OP * const kidparent =
10508 OpSIBLING(cUNOPx(cUNOPx(varop)->op_first)->op_first);
10509 OP * const kid = cUNOPx(kidparent)->op_first;
10510 o->op_private |= OPpLVREF_CV;
10511 if (kid->op_type == OP_GV) {
10513 goto detach_and_stack;
10515 if (kid->op_type != OP_PADCV) goto bad;
10516 o->op_targ = kid->op_targ;
10522 o->op_private |= (varop->op_private & OPpLVAL_INTRO);
10523 o->op_private |= OPpLVREF_ELEM;
10526 /* Detach varop. */
10527 op_sibling_splice(cUNOPx(left)->op_first, NULL, -1, NULL);
10531 /* diag_listed_as: Can't modify reference to %s in %s assignment */
10532 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in scalar "
10537 if (!FEATURE_REFALIASING_IS_ENABLED)
10539 "Experimental aliasing via reference not enabled");
10540 Perl_ck_warner_d(aTHX_
10541 packWARN(WARN_EXPERIMENTAL__REFALIASING),
10542 "Aliasing via reference is experimental");
10544 o->op_flags |= OPf_STACKED;
10545 op_sibling_splice(o, right, 1, varop);
10548 o->op_flags &=~ OPf_STACKED;
10549 op_sibling_splice(o, right, 1, NULL);
10556 Perl_ck_repeat(pTHX_ OP *o)
10558 PERL_ARGS_ASSERT_CK_REPEAT;
10560 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
10562 o->op_private |= OPpREPEAT_DOLIST;
10563 kids = op_sibling_splice(o, NULL, 1, NULL); /* detach first kid */
10564 kids = force_list(kids, 1); /* promote it to a list */
10565 op_sibling_splice(o, NULL, 0, kids); /* and add back */
10573 Perl_ck_require(pTHX_ OP *o)
10577 PERL_ARGS_ASSERT_CK_REQUIRE;
10579 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
10580 SVOP * const kid = (SVOP*)cUNOPo->op_first;
10585 if (kid->op_type == OP_CONST) {
10586 SV * const sv = kid->op_sv;
10587 U32 const was_readonly = SvREADONLY(sv);
10588 if (kid->op_private & OPpCONST_BARE) {
10592 if (was_readonly) {
10593 SvREADONLY_off(sv);
10595 if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0);
10600 for (; s < end; s++) {
10601 if (*s == ':' && s[1] == ':') {
10603 Move(s+2, s+1, end - s - 1, char);
10607 SvEND_set(sv, end);
10608 sv_catpvs(sv, ".pm");
10609 PERL_HASH(hash, SvPVX(sv), SvCUR(sv));
10610 hek = share_hek(SvPVX(sv),
10611 (SSize_t)SvCUR(sv) * (SvUTF8(sv) ? -1 : 1),
10613 sv_sethek(sv, hek);
10615 SvFLAGS(sv) |= was_readonly;
10617 else if (SvPOK(sv) && !SvNIOK(sv) && !SvGMAGICAL(sv)
10620 if (SvREFCNT(sv) > 1) {
10621 kid->op_sv = newSVpvn_share(
10622 s, SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len, 0);
10623 SvREFCNT_dec_NN(sv);
10627 if (was_readonly) SvREADONLY_off(sv);
10628 PERL_HASH(hash, s, len);
10630 SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len,
10632 sv_sethek(sv, hek);
10634 SvFLAGS(sv) |= was_readonly;
10640 if (!(o->op_flags & OPf_SPECIAL) /* Wasn't written as CORE::require */
10641 /* handle override, if any */
10642 && (gv = gv_override("require", 7))) {
10644 if (o->op_flags & OPf_KIDS) {
10645 kid = cUNOPo->op_first;
10646 op_sibling_splice(o, NULL, -1, NULL);
10649 kid = newDEFSVOP();
10652 newop = S_new_entersubop(aTHX_ gv, kid);
10660 Perl_ck_return(pTHX_ OP *o)
10664 PERL_ARGS_ASSERT_CK_RETURN;
10666 kid = OpSIBLING(cLISTOPo->op_first);
10667 if (CvLVALUE(PL_compcv)) {
10668 for (; kid; kid = OpSIBLING(kid))
10669 op_lvalue(kid, OP_LEAVESUBLV);
10676 Perl_ck_select(pTHX_ OP *o)
10681 PERL_ARGS_ASSERT_CK_SELECT;
10683 if (o->op_flags & OPf_KIDS) {
10684 kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
10685 if (kid && OpHAS_SIBLING(kid)) {
10686 OpTYPE_set(o, OP_SSELECT);
10688 return fold_constants(op_integerize(op_std_init(o)));
10692 kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
10693 if (kid && kid->op_type == OP_RV2GV)
10694 kid->op_private &= ~HINT_STRICT_REFS;
10699 Perl_ck_shift(pTHX_ OP *o)
10701 const I32 type = o->op_type;
10703 PERL_ARGS_ASSERT_CK_SHIFT;
10705 if (!(o->op_flags & OPf_KIDS)) {
10708 if (!CvUNIQUE(PL_compcv)) {
10709 o->op_flags |= OPf_SPECIAL;
10713 argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
10715 return newUNOP(type, 0, scalar(argop));
10717 return scalar(ck_fun(o));
10721 Perl_ck_sort(pTHX_ OP *o)
10725 HV * const hinthv =
10726 PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;
10729 PERL_ARGS_ASSERT_CK_SORT;
10732 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
10734 const I32 sorthints = (I32)SvIV(*svp);
10735 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
10736 o->op_private |= OPpSORT_QSORT;
10737 if ((sorthints & HINT_SORT_STABLE) != 0)
10738 o->op_private |= OPpSORT_STABLE;
10742 if (o->op_flags & OPf_STACKED)
10744 firstkid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
10746 if ((stacked = o->op_flags & OPf_STACKED)) { /* may have been cleared */
10747 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
10749 /* if the first arg is a code block, process it and mark sort as
10751 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
10753 if (kid->op_type == OP_LEAVE)
10754 op_null(kid); /* wipe out leave */
10755 /* Prevent execution from escaping out of the sort block. */
10758 /* provide scalar context for comparison function/block */
10759 kid = scalar(firstkid);
10760 kid->op_next = kid;
10761 o->op_flags |= OPf_SPECIAL;
10763 else if (kid->op_type == OP_CONST
10764 && kid->op_private & OPpCONST_BARE) {
10768 const char * const name = SvPV(kSVOP_sv, len);
10770 assert (len < 256);
10771 Copy(name, tmpbuf+1, len, char);
10772 off = pad_findmy_pvn(tmpbuf, len+1, SvUTF8(kSVOP_sv));
10773 if (off != NOT_IN_PAD) {
10774 if (PAD_COMPNAME_FLAGS_isOUR(off)) {
10776 newSVhek(HvNAME_HEK(PAD_COMPNAME_OURSTASH(off)));
10777 sv_catpvs(fq, "::");
10778 sv_catsv(fq, kSVOP_sv);
10779 SvREFCNT_dec_NN(kSVOP_sv);
10783 OP * const padop = newOP(OP_PADCV, 0);
10784 padop->op_targ = off;
10785 /* replace the const op with the pad op */
10786 op_sibling_splice(firstkid, NULL, 1, padop);
10792 firstkid = OpSIBLING(firstkid);
10795 for (kid = firstkid; kid; kid = OpSIBLING(kid)) {
10796 /* provide list context for arguments */
10799 op_lvalue(kid, OP_GREPSTART);
10805 /* for sort { X } ..., where X is one of
10806 * $a <=> $b, $b <= $a, $a cmp $b, $b cmp $a
10807 * elide the second child of the sort (the one containing X),
10808 * and set these flags as appropriate
10812 * Also, check and warn on lexical $a, $b.
10816 S_simplify_sort(pTHX_ OP *o)
10818 OP *kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */
10822 const char *gvname;
10825 PERL_ARGS_ASSERT_SIMPLIFY_SORT;
10827 kid = kUNOP->op_first; /* get past null */
10828 if (!(have_scopeop = kid->op_type == OP_SCOPE)
10829 && kid->op_type != OP_LEAVE)
10831 kid = kLISTOP->op_last; /* get past scope */
10832 switch(kid->op_type) {
10836 if (!have_scopeop) goto padkids;
10841 k = kid; /* remember this node*/
10842 if (kBINOP->op_first->op_type != OP_RV2SV
10843 || kBINOP->op_last ->op_type != OP_RV2SV)
10846 Warn about my($a) or my($b) in a sort block, *if* $a or $b is
10847 then used in a comparison. This catches most, but not
10848 all cases. For instance, it catches
10849 sort { my($a); $a <=> $b }
10851 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
10852 (although why you'd do that is anyone's guess).
10856 if (!ckWARN(WARN_SYNTAX)) return;
10857 kid = kBINOP->op_first;
10859 if (kid->op_type == OP_PADSV) {
10860 PADNAME * const name = PAD_COMPNAME(kid->op_targ);
10861 if (PadnameLEN(name) == 2 && *PadnamePV(name) == '$'
10862 && ( PadnamePV(name)[1] == 'a'
10863 || PadnamePV(name)[1] == 'b' ))
10864 /* diag_listed_as: "my %s" used in sort comparison */
10865 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
10866 "\"%s %s\" used in sort comparison",
10867 PadnameIsSTATE(name)
10872 } while ((kid = OpSIBLING(kid)));
10875 kid = kBINOP->op_first; /* get past cmp */
10876 if (kUNOP->op_first->op_type != OP_GV)
10878 kid = kUNOP->op_first; /* get past rv2sv */
10880 if (GvSTASH(gv) != PL_curstash)
10882 gvname = GvNAME(gv);
10883 if (*gvname == 'a' && gvname[1] == '\0')
10885 else if (*gvname == 'b' && gvname[1] == '\0')
10890 kid = k; /* back to cmp */
10891 /* already checked above that it is rv2sv */
10892 kid = kBINOP->op_last; /* down to 2nd arg */
10893 if (kUNOP->op_first->op_type != OP_GV)
10895 kid = kUNOP->op_first; /* get past rv2sv */
10897 if (GvSTASH(gv) != PL_curstash)
10899 gvname = GvNAME(gv);
10901 ? !(*gvname == 'a' && gvname[1] == '\0')
10902 : !(*gvname == 'b' && gvname[1] == '\0'))
10904 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
10906 o->op_private |= OPpSORT_DESCEND;
10907 if (k->op_type == OP_NCMP)
10908 o->op_private |= OPpSORT_NUMERIC;
10909 if (k->op_type == OP_I_NCMP)
10910 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
10911 kid = OpSIBLING(cLISTOPo->op_first);
10912 /* cut out and delete old block (second sibling) */
10913 op_sibling_splice(o, cLISTOPo->op_first, 1, NULL);
10918 Perl_ck_split(pTHX_ OP *o)
10923 PERL_ARGS_ASSERT_CK_SPLIT;
10925 if (o->op_flags & OPf_STACKED)
10926 return no_fh_allowed(o);
10928 kid = cLISTOPo->op_first;
10929 if (kid->op_type != OP_NULL)
10930 Perl_croak(aTHX_ "panic: ck_split, type=%u", (unsigned) kid->op_type);
10931 /* delete leading NULL node, then add a CONST if no other nodes */
10932 op_sibling_splice(o, NULL, 1,
10933 OpHAS_SIBLING(kid) ? NULL : newSVOP(OP_CONST, 0, newSVpvs(" ")));
10935 kid = cLISTOPo->op_first;
10937 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
10938 /* remove kid, and replace with new optree */
10939 op_sibling_splice(o, NULL, 1, NULL);
10940 /* OPf_SPECIAL is used to trigger split " " behavior */
10941 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, NULL, 0, 0);
10942 op_sibling_splice(o, NULL, 0, kid);
10944 OpTYPE_set(kid, OP_PUSHRE);
10945 /* target implies @ary=..., so wipe it */
10948 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
10949 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
10950 "Use of /g modifier is meaningless in split");
10953 if (!OpHAS_SIBLING(kid))
10954 op_append_elem(OP_SPLIT, o, newDEFSVOP());
10956 kid = OpSIBLING(kid);
10960 if (!OpHAS_SIBLING(kid))
10962 op_append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
10963 o->op_private |= OPpSPLIT_IMPLIM;
10965 assert(OpHAS_SIBLING(kid));
10967 kid = OpSIBLING(kid);
10970 if (OpHAS_SIBLING(kid))
10971 return too_many_arguments_pv(o,OP_DESC(o), 0);
10977 Perl_ck_stringify(pTHX_ OP *o)
10979 OP * const kid = OpSIBLING(cUNOPo->op_first);
10980 PERL_ARGS_ASSERT_CK_STRINGIFY;
10981 if (( kid->op_type == OP_JOIN || kid->op_type == OP_QUOTEMETA
10982 || kid->op_type == OP_LC || kid->op_type == OP_LCFIRST
10983 || kid->op_type == OP_UC || kid->op_type == OP_UCFIRST)
10984 && !OpHAS_SIBLING(kid)) /* syntax errs can leave extra children */
10986 op_sibling_splice(o, cUNOPo->op_first, -1, NULL);
10994 Perl_ck_join(pTHX_ OP *o)
10996 OP * const kid = OpSIBLING(cLISTOPo->op_first);
10998 PERL_ARGS_ASSERT_CK_JOIN;
11000 if (kid && kid->op_type == OP_MATCH) {
11001 if (ckWARN(WARN_SYNTAX)) {
11002 const REGEXP *re = PM_GETRE(kPMOP);
11004 ? newSVpvn_flags( RX_PRECOMP_const(re), RX_PRELEN(re),
11005 SVs_TEMP | ( RX_UTF8(re) ? SVf_UTF8 : 0 ) )
11006 : newSVpvs_flags( "STRING", SVs_TEMP );
11007 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
11008 "/%"SVf"/ should probably be written as \"%"SVf"\"",
11009 SVfARG(msg), SVfARG(msg));
11013 && (kid->op_type == OP_CONST /* an innocent, unsuspicious separator */
11014 || (kid->op_type == OP_PADSV && !(kid->op_private & OPpLVAL_INTRO))
11015 || ( kid->op_type==OP_RV2SV && kUNOP->op_first->op_type == OP_GV
11016 && !(kid->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))))
11018 const OP * const bairn = OpSIBLING(kid); /* the list */
11019 if (bairn && !OpHAS_SIBLING(bairn) /* single-item list */
11020 && OP_GIMME(bairn,0) == G_SCALAR)
11022 OP * const ret = op_convert_list(OP_STRINGIFY, OPf_FOLDED,
11023 op_sibling_splice(o, kid, 1, NULL));
11033 =for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
11035 Examines an op, which is expected to identify a subroutine at runtime,
11036 and attempts to determine at compile time which subroutine it identifies.
11037 This is normally used during Perl compilation to determine whether
11038 a prototype can be applied to a function call. C<cvop> is the op
11039 being considered, normally an C<rv2cv> op. A pointer to the identified
11040 subroutine is returned, if it could be determined statically, and a null
11041 pointer is returned if it was not possible to determine statically.
11043 Currently, the subroutine can be identified statically if the RV that the
11044 C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
11045 A C<gv> op is suitable if the GV's CV slot is populated. A C<const> op is
11046 suitable if the constant value must be an RV pointing to a CV. Details of
11047 this process may change in future versions of Perl. If the C<rv2cv> op
11048 has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
11049 the subroutine statically: this flag is used to suppress compile-time
11050 magic on a subroutine call, forcing it to use default runtime behaviour.
11052 If C<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
11053 of a GV reference is modified. If a GV was examined and its CV slot was
11054 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
11055 If the op is not optimised away, and the CV slot is later populated with
11056 a subroutine having a prototype, that flag eventually triggers the warning
11057 "called too early to check prototype".
11059 If C<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
11060 of returning a pointer to the subroutine it returns a pointer to the
11061 GV giving the most appropriate name for the subroutine in this context.
11062 Normally this is just the C<CvGV> of the subroutine, but for an anonymous
11063 (C<CvANON>) subroutine that is referenced through a GV it will be the
11064 referencing GV. The resulting C<GV*> is cast to C<CV*> to be returned.
11065 A null pointer is returned as usual if there is no statically-determinable
11071 /* shared by toke.c:yylex */
11073 Perl_find_lexical_cv(pTHX_ PADOFFSET off)
11075 PADNAME *name = PAD_COMPNAME(off);
11076 CV *compcv = PL_compcv;
11077 while (PadnameOUTER(name)) {
11078 assert(PARENT_PAD_INDEX(name));
11079 compcv = CvOUTSIDE(compcv);
11080 name = PadlistNAMESARRAY(CvPADLIST(compcv))
11081 [off = PARENT_PAD_INDEX(name)];
11083 assert(!PadnameIsOUR(name));
11084 if (!PadnameIsSTATE(name) && PadnamePROTOCV(name)) {
11085 return PadnamePROTOCV(name);
11087 return (CV *)AvARRAY(PadlistARRAY(CvPADLIST(compcv))[1])[off];
11091 Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
11096 PERL_ARGS_ASSERT_RV2CV_OP_CV;
11097 if (flags & ~RV2CVOPCV_FLAG_MASK)
11098 Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags);
11099 if (cvop->op_type != OP_RV2CV)
11101 if (cvop->op_private & OPpENTERSUB_AMPER)
11103 if (!(cvop->op_flags & OPf_KIDS))
11105 rvop = cUNOPx(cvop)->op_first;
11106 switch (rvop->op_type) {
11108 gv = cGVOPx_gv(rvop);
11110 if (SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV) {
11111 cv = MUTABLE_CV(SvRV(gv));
11115 if (flags & RV2CVOPCV_RETURN_STUB)
11121 if (flags & RV2CVOPCV_MARK_EARLY)
11122 rvop->op_private |= OPpEARLY_CV;
11127 SV *rv = cSVOPx_sv(rvop);
11130 cv = (CV*)SvRV(rv);
11134 cv = find_lexical_cv(rvop->op_targ);
11139 } NOT_REACHED; /* NOTREACHED */
11141 if (SvTYPE((SV*)cv) != SVt_PVCV)
11143 if (flags & (RV2CVOPCV_RETURN_NAME_GV|RV2CVOPCV_MAYBE_NAME_GV)) {
11144 if ((!CvANON(cv) || !gv) && !CvLEXICAL(cv)
11145 && ((flags & RV2CVOPCV_RETURN_NAME_GV) || !CvNAMED(cv)))
11154 =for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
11156 Performs the default fixup of the arguments part of an C<entersub>
11157 op tree. This consists of applying list context to each of the
11158 argument ops. This is the standard treatment used on a call marked
11159 with C<&>, or a method call, or a call through a subroutine reference,
11160 or any other call where the callee can't be identified at compile time,
11161 or a call where the callee has no prototype.
11167 Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
11170 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
11171 aop = cUNOPx(entersubop)->op_first;
11172 if (!OpHAS_SIBLING(aop))
11173 aop = cUNOPx(aop)->op_first;
11174 for (aop = OpSIBLING(aop); OpHAS_SIBLING(aop); aop = OpSIBLING(aop)) {
11176 op_lvalue(aop, OP_ENTERSUB);
11182 =for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
11184 Performs the fixup of the arguments part of an C<entersub> op tree
11185 based on a subroutine prototype. This makes various modifications to
11186 the argument ops, from applying context up to inserting C<refgen> ops,
11187 and checking the number and syntactic types of arguments, as directed by
11188 the prototype. This is the standard treatment used on a subroutine call,
11189 not marked with C<&>, where the callee can be identified at compile time
11190 and has a prototype.
11192 C<protosv> supplies the subroutine prototype to be applied to the call.
11193 It may be a normal defined scalar, of which the string value will be used.
11194 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
11195 that has been cast to C<SV*>) which has a prototype. The prototype
11196 supplied, in whichever form, does not need to match the actual callee
11197 referenced by the op tree.
11199 If the argument ops disagree with the prototype, for example by having
11200 an unacceptable number of arguments, a valid op tree is returned anyway.
11201 The error is reflected in the parser state, normally resulting in a single
11202 exception at the top level of parsing which covers all the compilation
11203 errors that occurred. In the error message, the callee is referred to
11204 by the name defined by the C<namegv> parameter.
11210 Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
11213 const char *proto, *proto_end;
11214 OP *aop, *prev, *cvop, *parent;
11217 I32 contextclass = 0;
11218 const char *e = NULL;
11219 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO;
11220 if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv))
11221 Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto, "
11222 "flags=%lx", (unsigned long) SvFLAGS(protosv));
11223 if (SvTYPE(protosv) == SVt_PVCV)
11224 proto = CvPROTO(protosv), proto_len = CvPROTOLEN(protosv);
11225 else proto = SvPV(protosv, proto_len);
11226 proto = S_strip_spaces(aTHX_ proto, &proto_len);
11227 proto_end = proto + proto_len;
11228 parent = entersubop;
11229 aop = cUNOPx(entersubop)->op_first;
11230 if (!OpHAS_SIBLING(aop)) {
11232 aop = cUNOPx(aop)->op_first;
11235 aop = OpSIBLING(aop);
11236 for (cvop = aop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ;
11237 while (aop != cvop) {
11240 if (proto >= proto_end)
11242 SV * const namesv = cv_name((CV *)namegv, NULL, 0);
11243 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %"SVf,
11244 SVfARG(namesv)), SvUTF8(namesv));
11254 /* _ must be at the end */
11255 if (proto[1] && !strchr(";@%", proto[1]))
11271 if ( o3->op_type != OP_UNDEF
11272 && (o3->op_type != OP_SREFGEN
11273 || ( cUNOPx(cUNOPx(o3)->op_first)->op_first->op_type
11275 && cUNOPx(cUNOPx(o3)->op_first)->op_first->op_type
11277 bad_type_gv(arg, namegv, o3,
11278 arg == 1 ? "block or sub {}" : "sub {}");
11281 /* '*' allows any scalar type, including bareword */
11284 if (o3->op_type == OP_RV2GV)
11285 goto wrapref; /* autoconvert GLOB -> GLOBref */
11286 else if (o3->op_type == OP_CONST)
11287 o3->op_private &= ~OPpCONST_STRICT;
11293 if (o3->op_type == OP_RV2AV ||
11294 o3->op_type == OP_PADAV ||
11295 o3->op_type == OP_RV2HV ||
11296 o3->op_type == OP_PADHV
11302 case '[': case ']':
11309 switch (*proto++) {
11311 if (contextclass++ == 0) {
11312 e = strchr(proto, ']');
11313 if (!e || e == proto)
11321 if (contextclass) {
11322 const char *p = proto;
11323 const char *const end = proto;
11325 while (*--p != '[')
11326 /* \[$] accepts any scalar lvalue */
11328 && Perl_op_lvalue_flags(aTHX_
11330 OP_READ, /* not entersub */
11333 bad_type_gv(arg, namegv, o3,
11334 Perl_form(aTHX_ "one of %.*s",(int)(end - p), p));
11339 if (o3->op_type == OP_RV2GV)
11342 bad_type_gv(arg, namegv, o3, "symbol");
11345 if (o3->op_type == OP_ENTERSUB
11346 && !(o3->op_flags & OPf_STACKED))
11349 bad_type_gv(arg, namegv, o3, "subroutine");
11352 if (o3->op_type == OP_RV2SV ||
11353 o3->op_type == OP_PADSV ||
11354 o3->op_type == OP_HELEM ||
11355 o3->op_type == OP_AELEM)
11357 if (!contextclass) {
11358 /* \$ accepts any scalar lvalue */
11359 if (Perl_op_lvalue_flags(aTHX_
11361 OP_READ, /* not entersub */
11364 bad_type_gv(arg, namegv, o3, "scalar");
11368 if (o3->op_type == OP_RV2AV ||
11369 o3->op_type == OP_PADAV)
11371 o3->op_flags &=~ OPf_PARENS;
11375 bad_type_gv(arg, namegv, o3, "array");
11378 if (o3->op_type == OP_RV2HV ||
11379 o3->op_type == OP_PADHV)
11381 o3->op_flags &=~ OPf_PARENS;
11385 bad_type_gv(arg, namegv, o3, "hash");
11388 aop = S_op_sibling_newUNOP(aTHX_ parent, prev,
11390 if (contextclass && e) {
11395 default: goto oops;
11405 Perl_croak(aTHX_ "Malformed prototype for %"SVf": %"SVf,
11406 SVfARG(cv_name((CV *)namegv, NULL, 0)),
11411 op_lvalue(aop, OP_ENTERSUB);
11413 aop = OpSIBLING(aop);
11415 if (aop == cvop && *proto == '_') {
11416 /* generate an access to $_ */
11417 op_sibling_splice(parent, prev, 0, newDEFSVOP());
11419 if (!optional && proto_end > proto &&
11420 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
11422 SV * const namesv = cv_name((CV *)namegv, NULL, 0);
11423 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %"SVf,
11424 SVfARG(namesv)), SvUTF8(namesv));
11430 =for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
11432 Performs the fixup of the arguments part of an C<entersub> op tree either
11433 based on a subroutine prototype or using default list-context processing.
11434 This is the standard treatment used on a subroutine call, not marked
11435 with C<&>, where the callee can be identified at compile time.
11437 C<protosv> supplies the subroutine prototype to be applied to the call,
11438 or indicates that there is no prototype. It may be a normal scalar,
11439 in which case if it is defined then the string value will be used
11440 as a prototype, and if it is undefined then there is no prototype.
11441 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
11442 that has been cast to C<SV*>), of which the prototype will be used if it
11443 has one. The prototype (or lack thereof) supplied, in whichever form,
11444 does not need to match the actual callee referenced by the op tree.
11446 If the argument ops disagree with the prototype, for example by having
11447 an unacceptable number of arguments, a valid op tree is returned anyway.
11448 The error is reflected in the parser state, normally resulting in a single
11449 exception at the top level of parsing which covers all the compilation
11450 errors that occurred. In the error message, the callee is referred to
11451 by the name defined by the C<namegv> parameter.
11457 Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
11458 GV *namegv, SV *protosv)
11460 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST;
11461 if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv))
11462 return ck_entersub_args_proto(entersubop, namegv, protosv);
11464 return ck_entersub_args_list(entersubop);
11468 Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
11470 int opnum = SvTYPE(protosv) == SVt_PVCV ? 0 : (int)SvUV(protosv);
11471 OP *aop = cUNOPx(entersubop)->op_first;
11473 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE;
11477 if (!OpHAS_SIBLING(aop))
11478 aop = cUNOPx(aop)->op_first;
11479 aop = OpSIBLING(aop);
11480 for (cvop = aop; OpSIBLING(cvop); cvop = OpSIBLING(cvop)) ;
11482 (void)too_many_arguments_pv(entersubop, GvNAME(namegv), 0);
11484 op_free(entersubop);
11485 switch(GvNAME(namegv)[2]) {
11486 case 'F': return newSVOP(OP_CONST, 0,
11487 newSVpv(CopFILE(PL_curcop),0));
11488 case 'L': return newSVOP(
11490 Perl_newSVpvf(aTHX_
11491 "%"IVdf, (IV)CopLINE(PL_curcop)
11494 case 'P': return newSVOP(OP_CONST, 0,
11496 ? newSVhek(HvNAME_HEK(PL_curstash))
11501 NOT_REACHED; /* NOTREACHED */
11504 OP *prev, *cvop, *first, *parent;
11507 parent = entersubop;
11508 if (!OpHAS_SIBLING(aop)) {
11510 aop = cUNOPx(aop)->op_first;
11513 first = prev = aop;
11514 aop = OpSIBLING(aop);
11515 /* find last sibling */
11517 OpHAS_SIBLING(cvop);
11518 prev = cvop, cvop = OpSIBLING(cvop))
11520 if (!(cvop->op_private & OPpENTERSUB_NOPAREN)
11521 /* Usually, OPf_SPECIAL on an op with no args means that it had
11522 * parens, but these have their own meaning for that flag: */
11523 && opnum != OP_VALUES && opnum != OP_KEYS && opnum != OP_EACH
11524 && opnum != OP_DELETE && opnum != OP_EXISTS)
11525 flags |= OPf_SPECIAL;
11526 /* excise cvop from end of sibling chain */
11527 op_sibling_splice(parent, prev, 1, NULL);
11529 if (aop == cvop) aop = NULL;
11531 /* detach remaining siblings from the first sibling, then
11532 * dispose of original optree */
11535 op_sibling_splice(parent, first, -1, NULL);
11536 op_free(entersubop);
11538 if (opnum == OP_ENTEREVAL
11539 && GvNAMELEN(namegv)==9 && strnEQ(GvNAME(namegv), "evalbytes", 9))
11540 flags |= OPpEVAL_BYTES <<8;
11542 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
11544 case OA_BASEOP_OR_UNOP:
11545 case OA_FILESTATOP:
11546 return aop ? newUNOP(opnum,flags,aop) : newOP(opnum,flags);
11549 (void)too_many_arguments_pv(aop, GvNAME(namegv), 0);
11552 return opnum == OP_RUNCV
11553 ? newPVOP(OP_RUNCV,0,NULL)
11556 return op_convert_list(opnum,0,aop);
11559 NOT_REACHED; /* NOTREACHED */
11564 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
11566 Retrieves the function that will be used to fix up a call to C<cv>.
11567 Specifically, the function is applied to an C<entersub> op tree for a
11568 subroutine call, not marked with C<&>, where the callee can be identified
11569 at compile time as C<cv>.
11571 The C-level function pointer is returned in C<*ckfun_p>, and an SV
11572 argument for it is returned in C<*ckobj_p>. The function is intended
11573 to be called in this manner:
11575 entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
11577 In this call, C<entersubop> is a pointer to the C<entersub> op,
11578 which may be replaced by the check function, and C<namegv> is a GV
11579 supplying the name that should be used by the check function to refer
11580 to the callee of the C<entersub> op if it needs to emit any diagnostics.
11581 It is permitted to apply the check function in non-standard situations,
11582 such as to a call to a different subroutine or to a method call.
11584 By default, the function is
11585 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
11586 and the SV parameter is C<cv> itself. This implements standard
11587 prototype processing. It can be changed, for a particular subroutine,
11588 by L</cv_set_call_checker>.
11594 S_cv_get_call_checker(CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p,
11598 callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL;
11600 *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr);
11601 *ckobj_p = callmg->mg_obj;
11602 if (flagsp) *flagsp = callmg->mg_flags;
11604 *ckfun_p = Perl_ck_entersub_args_proto_or_list;
11605 *ckobj_p = (SV*)cv;
11606 if (flagsp) *flagsp = 0;
11611 Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
11613 PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER;
11614 PERL_UNUSED_CONTEXT;
11615 S_cv_get_call_checker(cv, ckfun_p, ckobj_p, NULL);
11619 =for apidoc Am|void|cv_set_call_checker_flags|CV *cv|Perl_call_checker ckfun|SV *ckobj|U32 flags
11621 Sets the function that will be used to fix up a call to C<cv>.
11622 Specifically, the function is applied to an C<entersub> op tree for a
11623 subroutine call, not marked with C<&>, where the callee can be identified
11624 at compile time as C<cv>.
11626 The C-level function pointer is supplied in C<ckfun>, and an SV argument
11627 for it is supplied in C<ckobj>. The function should be defined like this:
11629 STATIC OP * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj)
11631 It is intended to be called in this manner:
11633 entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
11635 In this call, C<entersubop> is a pointer to the C<entersub> op,
11636 which may be replaced by the check function, and C<namegv> supplies
11637 the name that should be used by the check function to refer
11638 to the callee of the C<entersub> op if it needs to emit any diagnostics.
11639 It is permitted to apply the check function in non-standard situations,
11640 such as to a call to a different subroutine or to a method call.
11642 C<namegv> may not actually be a GV. For efficiency, perl may pass a
11643 CV or other SV instead. Whatever is passed can be used as the first
11644 argument to L</cv_name>. You can force perl to pass a GV by including
11645 C<CALL_CHECKER_REQUIRE_GV> in the C<flags>.
11647 The current setting for a particular CV can be retrieved by
11648 L</cv_get_call_checker>.
11650 =for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
11652 The original form of L</cv_set_call_checker_flags>, which passes it the
11653 C<CALL_CHECKER_REQUIRE_GV> flag for backward-compatibility.
11659 Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
11661 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER;
11662 cv_set_call_checker_flags(cv, ckfun, ckobj, CALL_CHECKER_REQUIRE_GV);
11666 Perl_cv_set_call_checker_flags(pTHX_ CV *cv, Perl_call_checker ckfun,
11667 SV *ckobj, U32 flags)
11669 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER_FLAGS;
11670 if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) {
11671 if (SvMAGICAL((SV*)cv))
11672 mg_free_type((SV*)cv, PERL_MAGIC_checkcall);
11675 sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0);
11676 callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall);
11678 if (callmg->mg_flags & MGf_REFCOUNTED) {
11679 SvREFCNT_dec(callmg->mg_obj);
11680 callmg->mg_flags &= ~MGf_REFCOUNTED;
11682 callmg->mg_ptr = FPTR2DPTR(char *, ckfun);
11683 callmg->mg_obj = ckobj;
11684 if (ckobj != (SV*)cv) {
11685 SvREFCNT_inc_simple_void_NN(ckobj);
11686 callmg->mg_flags |= MGf_REFCOUNTED;
11688 callmg->mg_flags = (callmg->mg_flags &~ MGf_REQUIRE_GV)
11689 | (U8)(flags & MGf_REQUIRE_GV) | MGf_COPY;
11694 S_entersub_alloc_targ(pTHX_ OP * const o)
11696 o->op_targ = pad_alloc(OP_ENTERSUB, SVs_PADTMP);
11697 o->op_private |= OPpENTERSUB_HASTARG;
11701 Perl_ck_subr(pTHX_ OP *o)
11706 SV **const_class = NULL;
11708 PERL_ARGS_ASSERT_CK_SUBR;
11710 aop = cUNOPx(o)->op_first;
11711 if (!OpHAS_SIBLING(aop))
11712 aop = cUNOPx(aop)->op_first;
11713 aop = OpSIBLING(aop);
11714 for (cvop = aop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ;
11715 cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY);
11716 namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_MAYBE_NAME_GV) : NULL;
11718 o->op_private &= ~1;
11719 o->op_private |= (PL_hints & HINT_STRICT_REFS);
11720 if (PERLDB_SUB && PL_curstash != PL_debstash)
11721 o->op_private |= OPpENTERSUB_DB;
11722 switch (cvop->op_type) {
11724 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
11728 case OP_METHOD_NAMED:
11729 case OP_METHOD_SUPER:
11730 case OP_METHOD_REDIR:
11731 case OP_METHOD_REDIR_SUPER:
11732 if (aop->op_type == OP_CONST) {
11733 aop->op_private &= ~OPpCONST_STRICT;
11734 const_class = &cSVOPx(aop)->op_sv;
11736 else if (aop->op_type == OP_LIST) {
11737 OP * const sib = OpSIBLING(((UNOP*)aop)->op_first);
11738 if (sib && sib->op_type == OP_CONST) {
11739 sib->op_private &= ~OPpCONST_STRICT;
11740 const_class = &cSVOPx(sib)->op_sv;
11743 /* make class name a shared cow string to speedup method calls */
11744 /* constant string might be replaced with object, f.e. bigint */
11745 if (const_class && SvPOK(*const_class)) {
11747 const char* str = SvPV(*const_class, len);
11749 SV* const shared = newSVpvn_share(
11750 str, SvUTF8(*const_class)
11751 ? -(SSize_t)len : (SSize_t)len,
11754 if (SvREADONLY(*const_class))
11755 SvREADONLY_on(shared);
11756 SvREFCNT_dec(*const_class);
11757 *const_class = shared;
11764 S_entersub_alloc_targ(aTHX_ o);
11765 return ck_entersub_args_list(o);
11767 Perl_call_checker ckfun;
11770 S_cv_get_call_checker(cv, &ckfun, &ckobj, &flags);
11771 if (CvISXSUB(cv) || !CvROOT(cv))
11772 S_entersub_alloc_targ(aTHX_ o);
11774 /* The original call checker API guarantees that a GV will be
11775 be provided with the right name. So, if the old API was
11776 used (or the REQUIRE_GV flag was passed), we have to reify
11777 the CV’s GV, unless this is an anonymous sub. This is not
11778 ideal for lexical subs, as its stringification will include
11779 the package. But it is the best we can do. */
11780 if (flags & MGf_REQUIRE_GV) {
11781 if (!CvANON(cv) && (!CvNAMED(cv) || CvNAME_HEK(cv)))
11784 else namegv = MUTABLE_GV(cv);
11785 /* After a syntax error in a lexical sub, the cv that
11786 rv2cv_op_cv returns may be a nameless stub. */
11787 if (!namegv) return ck_entersub_args_list(o);
11790 return ckfun(aTHX_ o, namegv, ckobj);
11795 Perl_ck_svconst(pTHX_ OP *o)
11797 SV * const sv = cSVOPo->op_sv;
11798 PERL_ARGS_ASSERT_CK_SVCONST;
11799 PERL_UNUSED_CONTEXT;
11800 #ifdef PERL_COPY_ON_WRITE
11801 /* Since the read-only flag may be used to protect a string buffer, we
11802 cannot do copy-on-write with existing read-only scalars that are not
11803 already copy-on-write scalars. To allow $_ = "hello" to do COW with
11804 that constant, mark the constant as COWable here, if it is not
11805 already read-only. */
11806 if (!SvREADONLY(sv) && !SvIsCOW(sv) && SvCANCOW(sv)) {
11809 # ifdef PERL_DEBUG_READONLY_COW
11819 Perl_ck_trunc(pTHX_ OP *o)
11821 PERL_ARGS_ASSERT_CK_TRUNC;
11823 if (o->op_flags & OPf_KIDS) {
11824 SVOP *kid = (SVOP*)cUNOPo->op_first;
11826 if (kid->op_type == OP_NULL)
11827 kid = (SVOP*)OpSIBLING(kid);
11828 if (kid && kid->op_type == OP_CONST &&
11829 (kid->op_private & OPpCONST_BARE) &&
11832 o->op_flags |= OPf_SPECIAL;
11833 kid->op_private &= ~OPpCONST_STRICT;
11840 Perl_ck_substr(pTHX_ OP *o)
11842 PERL_ARGS_ASSERT_CK_SUBSTR;
11845 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
11846 OP *kid = cLISTOPo->op_first;
11848 if (kid->op_type == OP_NULL)
11849 kid = OpSIBLING(kid);
11851 kid->op_flags |= OPf_MOD;
11858 Perl_ck_tell(pTHX_ OP *o)
11860 PERL_ARGS_ASSERT_CK_TELL;
11862 if (o->op_flags & OPf_KIDS) {
11863 OP *kid = cLISTOPo->op_first;
11864 if (kid->op_type == OP_NULL && OpHAS_SIBLING(kid)) kid = OpSIBLING(kid);
11865 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
11871 Perl_ck_each(pTHX_ OP *o)
11874 OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL;
11875 const unsigned orig_type = o->op_type;
11877 PERL_ARGS_ASSERT_CK_EACH;
11880 switch (kid->op_type) {
11886 OpTYPE_set(o, orig_type == OP_EACH ? OP_AEACH
11887 : orig_type == OP_KEYS ? OP_AKEYS
11891 if (kid->op_private == OPpCONST_BARE
11892 || !SvROK(cSVOPx_sv(kid))
11893 || ( SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV
11894 && SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVHV )
11896 /* we let ck_fun handle it */
11899 Perl_croak_nocontext(
11900 "Experimental %s on scalar is now forbidden",
11901 PL_op_desc[orig_type]);
11909 Perl_ck_length(pTHX_ OP *o)
11911 PERL_ARGS_ASSERT_CK_LENGTH;
11915 if (ckWARN(WARN_SYNTAX)) {
11916 const OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
11920 const bool hash = kid->op_type == OP_PADHV
11921 || kid->op_type == OP_RV2HV;
11922 switch (kid->op_type) {
11927 name = S_op_varname(aTHX_ kid);
11933 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
11934 "length() used on %"SVf" (did you mean \"scalar(%s%"SVf
11936 SVfARG(name), hash ? "keys " : "", SVfARG(name)
11939 /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */
11940 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
11941 "length() used on %%hash (did you mean \"scalar(keys %%hash)\"?)");
11943 /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */
11944 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
11945 "length() used on @array (did you mean \"scalar(@array)\"?)");
11955 ---------------------------------------------------------
11957 Common vars in list assignment
11959 There now follows some enums and static functions for detecting
11960 common variables in list assignments. Here is a little essay I wrote
11961 for myself when trying to get my head around this. DAPM.
11965 First some random observations:
11967 * If a lexical var is an alias of something else, e.g.
11968 for my $x ($lex, $pkg, $a[0]) {...}
11969 then the act of aliasing will increase the reference count of the SV
11971 * If a package var is an alias of something else, it may still have a
11972 reference count of 1, depending on how the alias was created, e.g.
11973 in *a = *b, $a may have a refcount of 1 since the GP is shared
11974 with a single GvSV pointer to the SV. So If it's an alias of another
11975 package var, then RC may be 1; if it's an alias of another scalar, e.g.
11976 a lexical var or an array element, then it will have RC > 1.
11978 * There are many ways to create a package alias; ultimately, XS code
11979 may quite legally do GvSV(gv) = SvREFCNT_inc(sv) for example, so
11980 run-time tracing mechanisms are unlikely to be able to catch all cases.
11982 * When the LHS is all my declarations, the same vars can't appear directly
11983 on the RHS, but they can indirectly via closures, aliasing and lvalue
11984 subs. But those techniques all involve an increase in the lexical
11985 scalar's ref count.
11987 * When the LHS is all lexical vars (but not necessarily my declarations),
11988 it is possible for the same lexicals to appear directly on the RHS, and
11989 without an increased ref count, since the stack isn't refcounted.
11990 This case can be detected at compile time by scanning for common lex
11991 vars with PL_generation.
11993 * lvalue subs defeat common var detection, but they do at least
11994 return vars with a temporary ref count increment. Also, you can't
11995 tell at compile time whether a sub call is lvalue.
12000 A: There are a few circumstances where there definitely can't be any
12003 LHS empty: () = (...);
12004 RHS empty: (....) = ();
12005 RHS contains only constants or other 'can't possibly be shared'
12006 elements (e.g. ops that return PADTMPs): (...) = (1,2, length)
12007 i.e. they only contain ops not marked as dangerous, whose children
12008 are also not dangerous;
12010 LHS contains a single scalar element: e.g. ($x) = (....); because
12011 after $x has been modified, it won't be used again on the RHS;
12012 RHS contains a single element with no aggregate on LHS: e.g.
12013 ($a,$b,$c) = ($x); again, once $a has been modified, its value
12014 won't be used again.
12016 B: If LHS are all 'my' lexical var declarations (or safe ops, which
12019 my ($a, $b, @c) = ...;
12021 Due to closure and goto tricks, these vars may already have content.
12022 For the same reason, an element on the RHS may be a lexical or package
12023 alias of one of the vars on the left, or share common elements, for
12026 my ($x,$y) = f(); # $x and $y on both sides
12027 sub f : lvalue { ($x,$y) = (1,2); $y, $x }
12032 my @a = @$ra; # elements of @a on both sides
12033 sub f { @a = 1..4; \@a }
12036 First, just consider scalar vars on LHS:
12038 RHS is safe only if (A), or in addition,
12039 * contains only lexical *scalar* vars, where neither side's
12040 lexicals have been flagged as aliases
12042 If RHS is not safe, then it's always legal to check LHS vars for
12043 RC==1, since the only RHS aliases will always be associated
12046 Note that in particular, RHS is not safe if:
12048 * it contains package scalar vars; e.g.:
12051 my ($x, $y) = (2, $x_alias);
12052 sub f { $x = 1; *x_alias = \$x; }
12054 * It contains other general elements, such as flattened or
12055 * spliced or single array or hash elements, e.g.
12058 my ($x,$y) = @a; # or $a[0] or @a{@b} etc
12062 use feature 'refaliasing';
12063 \($a[0], $a[1]) = \($y,$x);
12066 It doesn't matter if the array/hash is lexical or package.
12068 * it contains a function call that happens to be an lvalue
12069 sub which returns one or more of the above, e.g.
12080 (so a sub call on the RHS should be treated the same
12081 as having a package var on the RHS).
12083 * any other "dangerous" thing, such an op or built-in that
12084 returns one of the above, e.g. pp_preinc
12087 If RHS is not safe, what we can do however is at compile time flag
12088 that the LHS are all my declarations, and at run time check whether
12089 all the LHS have RC == 1, and if so skip the full scan.
12091 Now consider array and hash vars on LHS: e.g. my (...,@a) = ...;
12093 Here the issue is whether there can be elements of @a on the RHS
12094 which will get prematurely freed when @a is cleared prior to
12095 assignment. This is only a problem if the aliasing mechanism
12096 is one which doesn't increase the refcount - only if RC == 1
12097 will the RHS element be prematurely freed.
12099 Because the array/hash is being INTROed, it or its elements
12100 can't directly appear on the RHS:
12102 my (@a) = ($a[0], @a, etc) # NOT POSSIBLE
12104 but can indirectly, e.g.:
12108 sub f { @a = 1..3; \@a }
12110 So if the RHS isn't safe as defined by (A), we must always
12111 mortalise and bump the ref count of any remaining RHS elements
12112 when assigning to a non-empty LHS aggregate.
12114 Lexical scalars on the RHS aren't safe if they've been involved in
12117 use feature 'refaliasing';
12120 \(my $lex) = \$pkg;
12121 my @a = ($lex,3); # equivalent to ($a[0],3)
12128 Similarly with lexical arrays and hashes on the RHS:
12142 C: As (B), but in addition the LHS may contain non-intro lexicals, e.g.
12143 my $a; ($a, my $b) = (....);
12145 The difference between (B) and (C) is that it is now physically
12146 possible for the LHS vars to appear on the RHS too, where they
12147 are not reference counted; but in this case, the compile-time
12148 PL_generation sweep will detect such common vars.
12150 So the rules for (C) differ from (B) in that if common vars are
12151 detected, the runtime "test RC==1" optimisation can no longer be used,
12152 and a full mark and sweep is required
12154 D: As (C), but in addition the LHS may contain package vars.
12156 Since package vars can be aliased without a corresponding refcount
12157 increase, all bets are off. It's only safe if (A). E.g.
12159 my ($x, $y) = (1,2);
12161 for $x_alias ($x) {
12162 ($x_alias, $y) = (3, $x); # whoops
12165 Ditto for LHS aggregate package vars.
12167 E: Any other dangerous ops on LHS, e.g.
12168 (f(), $a[0], @$r) = (...);
12170 this is similar to (E) in that all bets are off. In addition, it's
12171 impossible to determine at compile time whether the LHS
12172 contains a scalar or an aggregate, e.g.
12174 sub f : lvalue { @a }
12177 * ---------------------------------------------------------
12181 /* A set of bit flags returned by S_aassign_scan(). Each flag indicates
12182 * that at least one of the things flagged was seen.
12186 AAS_MY_SCALAR = 0x001, /* my $scalar */
12187 AAS_MY_AGG = 0x002, /* aggregate: my @array or my %hash */
12188 AAS_LEX_SCALAR = 0x004, /* $lexical */
12189 AAS_LEX_AGG = 0x008, /* @lexical or %lexical aggregate */
12190 AAS_LEX_SCALAR_COMM = 0x010, /* $lexical seen on both sides */
12191 AAS_PKG_SCALAR = 0x020, /* $scalar (where $scalar is pkg var) */
12192 AAS_PKG_AGG = 0x040, /* package @array or %hash aggregate */
12193 AAS_DANGEROUS = 0x080, /* an op (other than the above)
12194 that's flagged OA_DANGEROUS */
12195 AAS_SAFE_SCALAR = 0x100, /* produces at least one scalar SV that's
12196 not in any of the categories above */
12197 AAS_DEFAV = 0x200, /* contains just a single '@_' on RHS */
12202 /* helper function for S_aassign_scan().
12203 * check a PAD-related op for commonality and/or set its generation number.
12204 * Returns a boolean indicating whether its shared */
12207 S_aassign_padcheck(pTHX_ OP* o, bool rhs)
12209 if (PAD_COMPNAME_GEN(o->op_targ) == PERL_INT_MAX)
12210 /* lexical used in aliasing */
12214 return cBOOL(PAD_COMPNAME_GEN(o->op_targ) == (STRLEN)PL_generation);
12216 PAD_COMPNAME_GEN_set(o->op_targ, PL_generation);
12223 Helper function for OPpASSIGN_COMMON* detection in rpeep().
12224 It scans the left or right hand subtree of the aassign op, and returns a
12225 set of flags indicating what sorts of things it found there.
12226 'rhs' indicates whether we're scanning the LHS or RHS. If the former, we
12227 set PL_generation on lexical vars; if the latter, we see if
12228 PL_generation matches.
12229 'top' indicates whether we're recursing or at the top level.
12230 'scalars_p' is a pointer to a counter of the number of scalar SVs seen.
12231 This fn will increment it by the number seen. It's not intended to
12232 be an accurate count (especially as many ops can push a variable
12233 number of SVs onto the stack); rather it's used as to test whether there
12234 can be at most 1 SV pushed; so it's only meanings are "0, 1, many".
12238 S_aassign_scan(pTHX_ OP* o, bool rhs, bool top, int *scalars_p)
12241 bool kid_top = FALSE;
12243 /* first, look for a solitary @_ on the RHS */
12246 && (o->op_flags & OPf_KIDS)
12247 && OP_TYPE_IS_OR_WAS(o, OP_LIST)
12249 OP *kid = cUNOPo->op_first;
12250 if ( ( kid->op_type == OP_PUSHMARK
12251 || kid->op_type == OP_PADRANGE) /* ex-pushmark */
12252 && ((kid = OpSIBLING(kid)))
12253 && !OpHAS_SIBLING(kid)
12254 && kid->op_type == OP_RV2AV
12255 && !(kid->op_flags & OPf_REF)
12256 && !(kid->op_private & (OPpLVAL_INTRO|OPpMAYBE_LVSUB))
12257 && ((kid->op_flags & OPf_WANT) == OPf_WANT_LIST)
12258 && ((kid = cUNOPx(kid)->op_first))
12259 && kid->op_type == OP_GV
12260 && cGVOPx_gv(kid) == PL_defgv
12262 flags |= AAS_DEFAV;
12265 switch (o->op_type) {
12268 return AAS_PKG_SCALAR;
12273 if (top && (o->op_flags & OPf_REF))
12274 return (o->op_private & OPpLVAL_INTRO)
12275 ? AAS_MY_AGG : AAS_LEX_AGG;
12276 return AAS_DANGEROUS;
12280 int comm = S_aassign_padcheck(aTHX_ o, rhs)
12281 ? AAS_LEX_SCALAR_COMM : 0;
12283 return (o->op_private & OPpLVAL_INTRO)
12284 ? (AAS_MY_SCALAR|comm) : (AAS_LEX_SCALAR|comm);
12290 if (cUNOPx(o)->op_first->op_type != OP_GV)
12291 return AAS_DANGEROUS; /* @{expr}, %{expr} */
12293 if (top && (o->op_flags & OPf_REF))
12294 return AAS_PKG_AGG;
12295 return AAS_DANGEROUS;
12299 if (cUNOPx(o)->op_first->op_type != OP_GV) {
12301 return AAS_DANGEROUS; /* ${expr} */
12303 return AAS_PKG_SCALAR; /* $pkg */
12306 if (cLISTOPo->op_first->op_type == OP_PUSHRE) {
12307 /* "@foo = split... " optimises away the aassign and stores its
12308 * destination array in the OP_PUSHRE that precedes it.
12309 * A flattened array is always dangerous.
12312 return AAS_DANGEROUS;
12319 /* these are all no-ops; they don't push a potentially common SV
12320 * onto the stack, so they are neither AAS_DANGEROUS nor
12321 * AAS_SAFE_SCALAR */
12324 case OP_PADRANGE: /* Ignore padrange; checking its siblings is enough */
12329 /* these do nothing but may have children; but their children
12330 * should also be treated as top-level */
12335 if (PL_opargs[o->op_type] & OA_DANGEROUS) {
12337 return AAS_DANGEROUS;
12340 if ( (PL_opargs[o->op_type] & OA_TARGLEX)
12341 && (o->op_private & OPpTARGET_MY))
12344 return S_aassign_padcheck(aTHX_ o, rhs)
12345 ? AAS_LEX_SCALAR_COMM : AAS_LEX_SCALAR;
12348 /* if its an unrecognised, non-dangerous op, assume that it
12349 * it the cause of at least one safe scalar */
12351 flags = AAS_SAFE_SCALAR;
12355 if (o->op_flags & OPf_KIDS) {
12357 for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
12358 flags |= S_aassign_scan(aTHX_ kid, rhs, kid_top, scalars_p);
12364 /* Check for in place reverse and sort assignments like "@a = reverse @a"
12365 and modify the optree to make them work inplace */
12368 S_inplace_aassign(pTHX_ OP *o) {
12370 OP *modop, *modop_pushmark;
12372 OP *oleft, *oleft_pushmark;
12374 PERL_ARGS_ASSERT_INPLACE_AASSIGN;
12376 assert((o->op_flags & OPf_WANT) == OPf_WANT_VOID);
12378 assert(cUNOPo->op_first->op_type == OP_NULL);
12379 modop_pushmark = cUNOPx(cUNOPo->op_first)->op_first;
12380 assert(modop_pushmark->op_type == OP_PUSHMARK);
12381 modop = OpSIBLING(modop_pushmark);
12383 if (modop->op_type != OP_SORT && modop->op_type != OP_REVERSE)
12386 /* no other operation except sort/reverse */
12387 if (OpHAS_SIBLING(modop))
12390 assert(cUNOPx(modop)->op_first->op_type == OP_PUSHMARK);
12391 if (!(oright = OpSIBLING(cUNOPx(modop)->op_first))) return;
12393 if (modop->op_flags & OPf_STACKED) {
12394 /* skip sort subroutine/block */
12395 assert(oright->op_type == OP_NULL);
12396 oright = OpSIBLING(oright);
12399 assert(OpSIBLING(cUNOPo->op_first)->op_type == OP_NULL);
12400 oleft_pushmark = cUNOPx(OpSIBLING(cUNOPo->op_first))->op_first;
12401 assert(oleft_pushmark->op_type == OP_PUSHMARK);
12402 oleft = OpSIBLING(oleft_pushmark);
12404 /* Check the lhs is an array */
12406 (oleft->op_type != OP_RV2AV && oleft->op_type != OP_PADAV)
12407 || OpHAS_SIBLING(oleft)
12408 || (oleft->op_private & OPpLVAL_INTRO)
12412 /* Only one thing on the rhs */
12413 if (OpHAS_SIBLING(oright))
12416 /* check the array is the same on both sides */
12417 if (oleft->op_type == OP_RV2AV) {
12418 if (oright->op_type != OP_RV2AV
12419 || !cUNOPx(oright)->op_first
12420 || cUNOPx(oright)->op_first->op_type != OP_GV
12421 || cUNOPx(oleft )->op_first->op_type != OP_GV
12422 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
12423 cGVOPx_gv(cUNOPx(oright)->op_first)
12427 else if (oright->op_type != OP_PADAV
12428 || oright->op_targ != oleft->op_targ
12432 /* This actually is an inplace assignment */
12434 modop->op_private |= OPpSORT_INPLACE;
12436 /* transfer MODishness etc from LHS arg to RHS arg */
12437 oright->op_flags = oleft->op_flags;
12439 /* remove the aassign op and the lhs */
12441 op_null(oleft_pushmark);
12442 if (oleft->op_type == OP_RV2AV && cUNOPx(oleft)->op_first)
12443 op_null(cUNOPx(oleft)->op_first);
12449 /* S_maybe_multideref(): given an op_next chain of ops beginning at 'start'
12450 * that potentially represent a series of one or more aggregate derefs
12451 * (such as $a->[1]{$key}), examine the chain, and if appropriate, convert
12452 * the whole chain to a single OP_MULTIDEREF op (maybe with a few
12453 * additional ops left in too).
12455 * The caller will have already verified that the first few ops in the
12456 * chain following 'start' indicate a multideref candidate, and will have
12457 * set 'orig_o' to the point further on in the chain where the first index
12458 * expression (if any) begins. 'orig_action' specifies what type of
12459 * beginning has already been determined by the ops between start..orig_o
12460 * (e.g. $lex_ary[], $pkg_ary->{}, expr->[], etc).
12462 * 'hints' contains any hints flags that need adding (currently just
12463 * OPpHINT_STRICT_REFS) as found in any rv2av/hv skipped by the caller.
12467 S_maybe_multideref(pTHX_ OP *start, OP *orig_o, UV orig_action, U8 hints)
12471 UNOP_AUX_item *arg_buf = NULL;
12472 bool reset_start_targ = FALSE; /* start->op_targ needs zeroing */
12473 int index_skip = -1; /* don't output index arg on this action */
12475 /* similar to regex compiling, do two passes; the first pass
12476 * determines whether the op chain is convertible and calculates the
12477 * buffer size; the second pass populates the buffer and makes any
12478 * changes necessary to ops (such as moving consts to the pad on
12479 * threaded builds).
12481 * NB: for things like Coverity, note that both passes take the same
12482 * path through the logic tree (except for 'if (pass)' bits), since
12483 * both passes are following the same op_next chain; and in
12484 * particular, if it would return early on the second pass, it would
12485 * already have returned early on the first pass.
12487 for (pass = 0; pass < 2; pass++) {
12489 UV action = orig_action;
12490 OP *first_elem_op = NULL; /* first seen aelem/helem */
12491 OP *top_op = NULL; /* highest [ah]elem/exists/del/rv2[ah]v */
12492 int action_count = 0; /* number of actions seen so far */
12493 int action_ix = 0; /* action_count % (actions per IV) */
12494 bool next_is_hash = FALSE; /* is the next lookup to be a hash? */
12495 bool is_last = FALSE; /* no more derefs to follow */
12496 bool maybe_aelemfast = FALSE; /* we can replace with aelemfast? */
12497 UNOP_AUX_item *arg = arg_buf;
12498 UNOP_AUX_item *action_ptr = arg_buf;
12501 action_ptr->uv = 0;
12505 case MDEREF_HV_gvsv_vivify_rv2hv_helem:
12506 case MDEREF_HV_gvhv_helem:
12507 next_is_hash = TRUE;
12509 case MDEREF_AV_gvsv_vivify_rv2av_aelem:
12510 case MDEREF_AV_gvav_aelem:
12512 #ifdef USE_ITHREADS
12513 arg->pad_offset = cPADOPx(start)->op_padix;
12514 /* stop it being swiped when nulled */
12515 cPADOPx(start)->op_padix = 0;
12517 arg->sv = cSVOPx(start)->op_sv;
12518 cSVOPx(start)->op_sv = NULL;
12524 case MDEREF_HV_padhv_helem:
12525 case MDEREF_HV_padsv_vivify_rv2hv_helem:
12526 next_is_hash = TRUE;
12528 case MDEREF_AV_padav_aelem:
12529 case MDEREF_AV_padsv_vivify_rv2av_aelem:
12531 arg->pad_offset = start->op_targ;
12532 /* we skip setting op_targ = 0 for now, since the intact
12533 * OP_PADXV is needed by S_check_hash_fields_and_hekify */
12534 reset_start_targ = TRUE;
12539 case MDEREF_HV_pop_rv2hv_helem:
12540 next_is_hash = TRUE;
12542 case MDEREF_AV_pop_rv2av_aelem:
12546 NOT_REACHED; /* NOTREACHED */
12551 /* look for another (rv2av/hv; get index;
12552 * aelem/helem/exists/delele) sequence */
12557 UV index_type = MDEREF_INDEX_none;
12559 if (action_count) {
12560 /* if this is not the first lookup, consume the rv2av/hv */
12562 /* for N levels of aggregate lookup, we normally expect
12563 * that the first N-1 [ah]elem ops will be flagged as
12564 * /DEREF (so they autovivifiy if necessary), and the last
12565 * lookup op not to be.
12566 * For other things (like @{$h{k1}{k2}}) extra scope or
12567 * leave ops can appear, so abandon the effort in that
12569 if (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
12572 /* rv2av or rv2hv sKR/1 */
12574 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
12575 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
12576 if (o->op_flags != (OPf_WANT_SCALAR|OPf_KIDS|OPf_REF))
12579 /* at this point, we wouldn't expect any of these
12580 * possible private flags:
12581 * OPpMAYBE_LVSUB, OPpOUR_INTRO, OPpLVAL_INTRO
12582 * OPpTRUEBOOL, OPpMAYBE_TRUEBOOL (rv2hv only)
12584 ASSUME(!(o->op_private &
12585 ~(OPpHINT_STRICT_REFS|OPpARG1_MASK|OPpSLICEWARNING)));
12587 hints = (o->op_private & OPpHINT_STRICT_REFS);
12589 /* make sure the type of the previous /DEREF matches the
12590 * type of the next lookup */
12591 ASSUME(o->op_type == (next_is_hash ? OP_RV2HV : OP_RV2AV));
12594 action = next_is_hash
12595 ? MDEREF_HV_vivify_rv2hv_helem
12596 : MDEREF_AV_vivify_rv2av_aelem;
12600 /* if this is the second pass, and we're at the depth where
12601 * previously we encountered a non-simple index expression,
12602 * stop processing the index at this point */
12603 if (action_count != index_skip) {
12605 /* look for one or more simple ops that return an array
12606 * index or hash key */
12608 switch (o->op_type) {
12610 /* it may be a lexical var index */
12611 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_PARENS
12612 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
12613 ASSUME(!(o->op_private &
12614 ~(OPpPAD_STATE|OPpDEREF|OPpLVAL_INTRO)));
12616 if ( OP_GIMME(o,0) == G_SCALAR
12617 && !(o->op_flags & (OPf_REF|OPf_MOD))
12618 && o->op_private == 0)
12621 arg->pad_offset = o->op_targ;
12623 index_type = MDEREF_INDEX_padsv;
12629 if (next_is_hash) {
12630 /* it's a constant hash index */
12631 if (!(SvFLAGS(cSVOPo_sv) & (SVf_IOK|SVf_NOK|SVf_POK)))
12632 /* "use constant foo => FOO; $h{+foo}" for
12633 * some weird FOO, can leave you with constants
12634 * that aren't simple strings. It's not worth
12635 * the extra hassle for those edge cases */
12640 OP * helem_op = o->op_next;
12642 ASSUME( helem_op->op_type == OP_HELEM
12643 || helem_op->op_type == OP_NULL);
12644 if (helem_op->op_type == OP_HELEM) {
12645 rop = (UNOP*)(((BINOP*)helem_op)->op_first);
12646 if ( helem_op->op_private & OPpLVAL_INTRO
12647 || rop->op_type != OP_RV2HV
12651 S_check_hash_fields_and_hekify(aTHX_ rop, cSVOPo);
12653 #ifdef USE_ITHREADS
12654 /* Relocate sv to the pad for thread safety */
12655 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
12656 arg->pad_offset = o->op_targ;
12659 arg->sv = cSVOPx_sv(o);
12664 /* it's a constant array index */
12666 SV *ix_sv = cSVOPo->op_sv;
12671 if ( action_count == 0
12674 && ( action == MDEREF_AV_padav_aelem
12675 || action == MDEREF_AV_gvav_aelem)
12677 maybe_aelemfast = TRUE;
12681 SvREFCNT_dec_NN(cSVOPo->op_sv);
12685 /* we've taken ownership of the SV */
12686 cSVOPo->op_sv = NULL;
12688 index_type = MDEREF_INDEX_const;
12693 /* it may be a package var index */
12695 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_SPECIAL)));
12696 ASSUME(!(o->op_private & ~(OPpEARLY_CV)));
12697 if ( (o->op_flags &~ OPf_SPECIAL) != OPf_WANT_SCALAR
12698 || o->op_private != 0
12703 if (kid->op_type != OP_RV2SV)
12706 ASSUME(!(kid->op_flags &
12707 ~(OPf_WANT|OPf_KIDS|OPf_MOD|OPf_REF
12708 |OPf_SPECIAL|OPf_PARENS)));
12709 ASSUME(!(kid->op_private &
12711 |OPpHINT_STRICT_REFS|OPpOUR_INTRO
12712 |OPpDEREF|OPpLVAL_INTRO)));
12713 if( (kid->op_flags &~ OPf_PARENS)
12714 != (OPf_WANT_SCALAR|OPf_KIDS)
12715 || (kid->op_private & ~(OPpARG1_MASK|HINT_STRICT_REFS))
12720 #ifdef USE_ITHREADS
12721 arg->pad_offset = cPADOPx(o)->op_padix;
12722 /* stop it being swiped when nulled */
12723 cPADOPx(o)->op_padix = 0;
12725 arg->sv = cSVOPx(o)->op_sv;
12726 cSVOPo->op_sv = NULL;
12730 index_type = MDEREF_INDEX_gvsv;
12735 } /* action_count != index_skip */
12737 action |= index_type;
12740 /* at this point we have either:
12741 * * detected what looks like a simple index expression,
12742 * and expect the next op to be an [ah]elem, or
12743 * an nulled [ah]elem followed by a delete or exists;
12744 * * found a more complex expression, so something other
12745 * than the above follows.
12748 /* possibly an optimised away [ah]elem (where op_next is
12749 * exists or delete) */
12750 if (o->op_type == OP_NULL)
12753 /* at this point we're looking for an OP_AELEM, OP_HELEM,
12754 * OP_EXISTS or OP_DELETE */
12756 /* if something like arybase (a.k.a $[ ) is in scope,
12757 * abandon optimisation attempt */
12758 if ( (o->op_type == OP_AELEM || o->op_type == OP_HELEM)
12759 && PL_check[o->op_type] != Perl_ck_null)
12762 if ( o->op_type != OP_AELEM
12763 || (o->op_private &
12764 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB))
12766 maybe_aelemfast = FALSE;
12768 /* look for aelem/helem/exists/delete. If it's not the last elem
12769 * lookup, it *must* have OPpDEREF_AV/HV, but not many other
12770 * flags; if it's the last, then it mustn't have
12771 * OPpDEREF_AV/HV, but may have lots of other flags, like
12772 * OPpLVAL_INTRO etc
12775 if ( index_type == MDEREF_INDEX_none
12776 || ( o->op_type != OP_AELEM && o->op_type != OP_HELEM
12777 && o->op_type != OP_EXISTS && o->op_type != OP_DELETE)
12781 /* we have aelem/helem/exists/delete with valid simple index */
12783 is_deref = (o->op_type == OP_AELEM || o->op_type == OP_HELEM)
12784 && ( (o->op_private & OPpDEREF) == OPpDEREF_AV
12785 || (o->op_private & OPpDEREF) == OPpDEREF_HV);
12788 ASSUME(!(o->op_flags &
12789 ~(OPf_WANT|OPf_KIDS|OPf_MOD|OPf_PARENS)));
12790 ASSUME(!(o->op_private & ~(OPpARG2_MASK|OPpDEREF)));
12792 ok = (o->op_flags &~ OPf_PARENS)
12793 == (OPf_WANT_SCALAR|OPf_KIDS|OPf_MOD)
12794 && !(o->op_private & ~(OPpDEREF|OPpARG2_MASK));
12796 else if (o->op_type == OP_EXISTS) {
12797 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
12798 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
12799 ASSUME(!(o->op_private & ~(OPpARG1_MASK|OPpEXISTS_SUB)));
12800 ok = !(o->op_private & ~OPpARG1_MASK);
12802 else if (o->op_type == OP_DELETE) {
12803 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
12804 |OPf_REF|OPf_MOD|OPf_SPECIAL)));
12805 ASSUME(!(o->op_private &
12806 ~(OPpARG1_MASK|OPpSLICE|OPpLVAL_INTRO)));
12807 /* don't handle slices or 'local delete'; the latter
12808 * is fairly rare, and has a complex runtime */
12809 ok = !(o->op_private & ~OPpARG1_MASK);
12810 if (OP_TYPE_IS_OR_WAS(cUNOPo->op_first, OP_AELEM))
12811 /* skip handling run-tome error */
12812 ok = (ok && cBOOL(o->op_flags & OPf_SPECIAL));
12815 ASSUME(o->op_type == OP_AELEM || o->op_type == OP_HELEM);
12816 ASSUME(!(o->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_MOD
12817 |OPf_PARENS|OPf_REF|OPf_SPECIAL)));
12818 ASSUME(!(o->op_private & ~(OPpARG2_MASK|OPpMAYBE_LVSUB
12819 |OPpLVAL_DEFER|OPpDEREF|OPpLVAL_INTRO)));
12820 ok = (o->op_private & OPpDEREF) != OPpDEREF_SV;
12825 if (!first_elem_op)
12829 next_is_hash = cBOOL((o->op_private & OPpDEREF) == OPpDEREF_HV);
12834 action |= MDEREF_FLAG_last;
12838 /* at this point we have something that started
12839 * promisingly enough (with rv2av or whatever), but failed
12840 * to find a simple index followed by an
12841 * aelem/helem/exists/delete. If this is the first action,
12842 * give up; but if we've already seen at least one
12843 * aelem/helem, then keep them and add a new action with
12844 * MDEREF_INDEX_none, which causes it to do the vivify
12845 * from the end of the previous lookup, and do the deref,
12846 * but stop at that point. So $a[0][expr] will do one
12847 * av_fetch, vivify and deref, then continue executing at
12852 index_skip = action_count;
12853 action |= MDEREF_FLAG_last;
12857 action_ptr->uv |= (action << (action_ix * MDEREF_SHIFT));
12860 /* if there's no space for the next action, create a new slot
12861 * for it *before* we start adding args for that action */
12862 if ((action_ix + 1) * MDEREF_SHIFT > UVSIZE*8) {
12869 } /* while !is_last */
12877 mderef = newUNOP_AUX(OP_MULTIDEREF, 0, NULL, arg_buf);
12878 if (index_skip == -1) {
12879 mderef->op_flags = o->op_flags
12880 & (OPf_WANT|OPf_MOD|(next_is_hash ? OPf_SPECIAL : 0));
12881 if (o->op_type == OP_EXISTS)
12882 mderef->op_private = OPpMULTIDEREF_EXISTS;
12883 else if (o->op_type == OP_DELETE)
12884 mderef->op_private = OPpMULTIDEREF_DELETE;
12886 mderef->op_private = o->op_private
12887 & (OPpMAYBE_LVSUB|OPpLVAL_DEFER|OPpLVAL_INTRO);
12889 /* accumulate strictness from every level (although I don't think
12890 * they can actually vary) */
12891 mderef->op_private |= hints;
12893 /* integrate the new multideref op into the optree and the
12896 * In general an op like aelem or helem has two child
12897 * sub-trees: the aggregate expression (a_expr) and the
12898 * index expression (i_expr):
12904 * The a_expr returns an AV or HV, while the i-expr returns an
12905 * index. In general a multideref replaces most or all of a
12906 * multi-level tree, e.g.
12922 * With multideref, all the i_exprs will be simple vars or
12923 * constants, except that i_expr1 may be arbitrary in the case
12924 * of MDEREF_INDEX_none.
12926 * The bottom-most a_expr will be either:
12927 * 1) a simple var (so padXv or gv+rv2Xv);
12928 * 2) a simple scalar var dereferenced (e.g. $r->[0]):
12929 * so a simple var with an extra rv2Xv;
12930 * 3) or an arbitrary expression.
12932 * 'start', the first op in the execution chain, will point to
12933 * 1),2): the padXv or gv op;
12934 * 3): the rv2Xv which forms the last op in the a_expr
12935 * execution chain, and the top-most op in the a_expr
12938 * For all cases, the 'start' node is no longer required,
12939 * but we can't free it since one or more external nodes
12940 * may point to it. E.g. consider
12941 * $h{foo} = $a ? $b : $c
12942 * Here, both the op_next and op_other branches of the
12943 * cond_expr point to the gv[*h] of the hash expression, so
12944 * we can't free the 'start' op.
12946 * For expr->[...], we need to save the subtree containing the
12947 * expression; for the other cases, we just need to save the
12949 * So in all cases, we null the start op and keep it around by
12950 * making it the child of the multideref op; for the expr->
12951 * case, the expr will be a subtree of the start node.
12953 * So in the simple 1,2 case the optree above changes to
12959 * ex-gv (or ex-padxv)
12961 * with the op_next chain being
12963 * -> ex-gv -> multideref -> op-following-ex-exists ->
12965 * In the 3 case, we have
12978 * -> rest-of-a_expr subtree ->
12979 * ex-rv2xv -> multideref -> op-following-ex-exists ->
12982 * Where the last i_expr is non-simple (i.e. MDEREF_INDEX_none,
12983 * e.g. $a[0]{foo}[$x+1], the next rv2xv is nulled and the
12984 * multideref attached as the child, e.g.
12990 * ex-rv2av - i_expr1
12998 /* if we free this op, don't free the pad entry */
12999 if (reset_start_targ)
13000 start->op_targ = 0;
13003 /* Cut the bit we need to save out of the tree and attach to
13004 * the multideref op, then free the rest of the tree */
13006 /* find parent of node to be detached (for use by splice) */
13008 if ( orig_action == MDEREF_AV_pop_rv2av_aelem
13009 || orig_action == MDEREF_HV_pop_rv2hv_helem)
13011 /* there is an arbitrary expression preceding us, e.g.
13012 * expr->[..]? so we need to save the 'expr' subtree */
13013 if (p->op_type == OP_EXISTS || p->op_type == OP_DELETE)
13014 p = cUNOPx(p)->op_first;
13015 ASSUME( start->op_type == OP_RV2AV
13016 || start->op_type == OP_RV2HV);
13019 /* either a padXv or rv2Xv+gv, maybe with an ex-Xelem
13020 * above for exists/delete. */
13021 while ( (p->op_flags & OPf_KIDS)
13022 && cUNOPx(p)->op_first != start
13024 p = cUNOPx(p)->op_first;
13026 ASSUME(cUNOPx(p)->op_first == start);
13028 /* detach from main tree, and re-attach under the multideref */
13029 op_sibling_splice(mderef, NULL, 0,
13030 op_sibling_splice(p, NULL, 1, NULL));
13033 start->op_next = mderef;
13035 mderef->op_next = index_skip == -1 ? o->op_next : o;
13037 /* excise and free the original tree, and replace with
13038 * the multideref op */
13039 p = op_sibling_splice(top_op, NULL, -1, mderef);
13048 Size_t size = arg - arg_buf;
13050 if (maybe_aelemfast && action_count == 1)
13053 arg_buf = (UNOP_AUX_item*)PerlMemShared_malloc(
13054 sizeof(UNOP_AUX_item) * (size + 1));
13055 /* for dumping etc: store the length in a hidden first slot;
13056 * we set the op_aux pointer to the second slot */
13057 arg_buf->uv = size;
13060 } /* for (pass = ...) */
13065 /* mechanism for deferring recursion in rpeep() */
13067 #define MAX_DEFERRED 4
13071 if (defer_ix == (MAX_DEFERRED-1)) { \
13072 OP **defer = defer_queue[defer_base]; \
13073 CALL_RPEEP(*defer); \
13074 S_prune_chain_head(defer); \
13075 defer_base = (defer_base + 1) % MAX_DEFERRED; \
13078 defer_queue[(defer_base + ++defer_ix) % MAX_DEFERRED] = &(o); \
13081 #define IS_AND_OP(o) (o->op_type == OP_AND)
13082 #define IS_OR_OP(o) (o->op_type == OP_OR)
13085 /* A peephole optimizer. We visit the ops in the order they're to execute.
13086 * See the comments at the top of this file for more details about when
13087 * peep() is called */
13090 Perl_rpeep(pTHX_ OP *o)
13094 OP* oldoldop = NULL;
13095 OP** defer_queue[MAX_DEFERRED]; /* small queue of deferred branches */
13096 int defer_base = 0;
13101 if (!o || o->op_opt)
13105 SAVEVPTR(PL_curcop);
13106 for (;; o = o->op_next) {
13107 if (o && o->op_opt)
13110 while (defer_ix >= 0) {
13112 defer_queue[(defer_base + defer_ix--) % MAX_DEFERRED];
13113 CALL_RPEEP(*defer);
13114 S_prune_chain_head(defer);
13120 /* By default, this op has now been optimised. A couple of cases below
13121 clear this again. */
13125 /* look for a series of 1 or more aggregate derefs, e.g.
13126 * $a[1]{foo}[$i]{$k}
13127 * and replace with a single OP_MULTIDEREF op.
13128 * Each index must be either a const, or a simple variable,
13130 * First, look for likely combinations of starting ops,
13131 * corresponding to (global and lexical variants of)
13133 * $r->[...] $r->{...}
13134 * (preceding expression)->[...]
13135 * (preceding expression)->{...}
13136 * and if so, call maybe_multideref() to do a full inspection
13137 * of the op chain and if appropriate, replace with an
13145 switch (o2->op_type) {
13147 /* $pkg[..] : gv[*pkg]
13148 * $pkg->[...]: gv[*pkg]; rv2sv sKM/DREFAV */
13150 /* Fail if there are new op flag combinations that we're
13151 * not aware of, rather than:
13152 * * silently failing to optimise, or
13153 * * silently optimising the flag away.
13154 * If this ASSUME starts failing, examine what new flag
13155 * has been added to the op, and decide whether the
13156 * optimisation should still occur with that flag, then
13157 * update the code accordingly. This applies to all the
13158 * other ASSUMEs in the block of code too.
13160 ASSUME(!(o2->op_flags &
13161 ~(OPf_WANT|OPf_MOD|OPf_PARENS|OPf_SPECIAL)));
13162 ASSUME(!(o2->op_private & ~OPpEARLY_CV));
13166 if (o2->op_type == OP_RV2AV) {
13167 action = MDEREF_AV_gvav_aelem;
13171 if (o2->op_type == OP_RV2HV) {
13172 action = MDEREF_HV_gvhv_helem;
13176 if (o2->op_type != OP_RV2SV)
13179 /* at this point we've seen gv,rv2sv, so the only valid
13180 * construct left is $pkg->[] or $pkg->{} */
13182 ASSUME(!(o2->op_flags & OPf_STACKED));
13183 if ((o2->op_flags & (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL))
13184 != (OPf_WANT_SCALAR|OPf_MOD))
13187 ASSUME(!(o2->op_private & ~(OPpARG1_MASK|HINT_STRICT_REFS
13188 |OPpOUR_INTRO|OPpDEREF|OPpLVAL_INTRO)));
13189 if (o2->op_private & (OPpOUR_INTRO|OPpLVAL_INTRO))
13191 if ( (o2->op_private & OPpDEREF) != OPpDEREF_AV
13192 && (o2->op_private & OPpDEREF) != OPpDEREF_HV)
13196 if (o2->op_type == OP_RV2AV) {
13197 action = MDEREF_AV_gvsv_vivify_rv2av_aelem;
13200 if (o2->op_type == OP_RV2HV) {
13201 action = MDEREF_HV_gvsv_vivify_rv2hv_helem;
13207 /* $lex->[...]: padsv[$lex] sM/DREFAV */
13209 ASSUME(!(o2->op_flags &
13210 ~(OPf_WANT|OPf_PARENS|OPf_REF|OPf_MOD|OPf_SPECIAL)));
13211 if ((o2->op_flags &
13212 (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL))
13213 != (OPf_WANT_SCALAR|OPf_MOD))
13216 ASSUME(!(o2->op_private &
13217 ~(OPpPAD_STATE|OPpDEREF|OPpLVAL_INTRO)));
13218 /* skip if state or intro, or not a deref */
13219 if ( o2->op_private != OPpDEREF_AV
13220 && o2->op_private != OPpDEREF_HV)
13224 if (o2->op_type == OP_RV2AV) {
13225 action = MDEREF_AV_padsv_vivify_rv2av_aelem;
13228 if (o2->op_type == OP_RV2HV) {
13229 action = MDEREF_HV_padsv_vivify_rv2hv_helem;
13236 /* $lex[..]: padav[@lex:1,2] sR *
13237 * or $lex{..}: padhv[%lex:1,2] sR */
13238 ASSUME(!(o2->op_flags & ~(OPf_WANT|OPf_MOD|OPf_PARENS|
13239 OPf_REF|OPf_SPECIAL)));
13240 if ((o2->op_flags &
13241 (OPf_WANT|OPf_REF|OPf_MOD|OPf_SPECIAL))
13242 != (OPf_WANT_SCALAR|OPf_REF))
13244 if (o2->op_flags != (OPf_WANT_SCALAR|OPf_REF))
13246 /* OPf_PARENS isn't currently used in this case;
13247 * if that changes, let us know! */
13248 ASSUME(!(o2->op_flags & OPf_PARENS));
13250 /* at this point, we wouldn't expect any of the remaining
13251 * possible private flags:
13252 * OPpPAD_STATE, OPpLVAL_INTRO, OPpTRUEBOOL,
13253 * OPpMAYBE_TRUEBOOL, OPpMAYBE_LVSUB
13255 * OPpSLICEWARNING shouldn't affect runtime
13257 ASSUME(!(o2->op_private & ~(OPpSLICEWARNING)));
13259 action = o2->op_type == OP_PADAV
13260 ? MDEREF_AV_padav_aelem
13261 : MDEREF_HV_padhv_helem;
13263 S_maybe_multideref(aTHX_ o, o2, action, 0);
13269 action = o2->op_type == OP_RV2AV
13270 ? MDEREF_AV_pop_rv2av_aelem
13271 : MDEREF_HV_pop_rv2hv_helem;
13274 /* (expr)->[...]: rv2av sKR/1;
13275 * (expr)->{...}: rv2hv sKR/1; */
13277 ASSUME(o2->op_type == OP_RV2AV || o2->op_type == OP_RV2HV);
13279 ASSUME(!(o2->op_flags & ~(OPf_WANT|OPf_KIDS|OPf_PARENS
13280 |OPf_REF|OPf_MOD|OPf_STACKED|OPf_SPECIAL)));
13281 if (o2->op_flags != (OPf_WANT_SCALAR|OPf_KIDS|OPf_REF))
13284 /* at this point, we wouldn't expect any of these
13285 * possible private flags:
13286 * OPpMAYBE_LVSUB, OPpLVAL_INTRO
13287 * OPpTRUEBOOL, OPpMAYBE_TRUEBOOL, (rv2hv only)
13289 ASSUME(!(o2->op_private &
13290 ~(OPpHINT_STRICT_REFS|OPpARG1_MASK|OPpSLICEWARNING
13292 hints |= (o2->op_private & OPpHINT_STRICT_REFS);
13296 S_maybe_multideref(aTHX_ o, o2, action, hints);
13305 switch (o->op_type) {
13307 PL_curcop = ((COP*)o); /* for warnings */
13310 PL_curcop = ((COP*)o); /* for warnings */
13312 /* Optimise a "return ..." at the end of a sub to just be "...".
13313 * This saves 2 ops. Before:
13314 * 1 <;> nextstate(main 1 -e:1) v ->2
13315 * 4 <@> return K ->5
13316 * 2 <0> pushmark s ->3
13317 * - <1> ex-rv2sv sK/1 ->4
13318 * 3 <#> gvsv[*cat] s ->4
13321 * - <@> return K ->-
13322 * - <0> pushmark s ->2
13323 * - <1> ex-rv2sv sK/1 ->-
13324 * 2 <$> gvsv(*cat) s ->3
13327 OP *next = o->op_next;
13328 OP *sibling = OpSIBLING(o);
13329 if ( OP_TYPE_IS(next, OP_PUSHMARK)
13330 && OP_TYPE_IS(sibling, OP_RETURN)
13331 && OP_TYPE_IS(sibling->op_next, OP_LINESEQ)
13332 && ( OP_TYPE_IS(sibling->op_next->op_next, OP_LEAVESUB)
13333 ||OP_TYPE_IS(sibling->op_next->op_next,
13335 && cUNOPx(sibling)->op_first == next
13336 && OpHAS_SIBLING(next) && OpSIBLING(next)->op_next
13339 /* Look through the PUSHMARK's siblings for one that
13340 * points to the RETURN */
13341 OP *top = OpSIBLING(next);
13342 while (top && top->op_next) {
13343 if (top->op_next == sibling) {
13344 top->op_next = sibling->op_next;
13345 o->op_next = next->op_next;
13348 top = OpSIBLING(top);
13353 /* Optimise 'my $x; my $y;' into 'my ($x, $y);'
13355 * This latter form is then suitable for conversion into padrange
13356 * later on. Convert:
13358 * nextstate1 -> padop1 -> nextstate2 -> padop2 -> nextstate3
13362 * nextstate1 -> listop -> nextstate3
13364 * pushmark -> padop1 -> padop2
13366 if (o->op_next && (
13367 o->op_next->op_type == OP_PADSV
13368 || o->op_next->op_type == OP_PADAV
13369 || o->op_next->op_type == OP_PADHV
13371 && !(o->op_next->op_private & ~OPpLVAL_INTRO)
13372 && o->op_next->op_next && o->op_next->op_next->op_type == OP_NEXTSTATE
13373 && o->op_next->op_next->op_next && (
13374 o->op_next->op_next->op_next->op_type == OP_PADSV
13375 || o->op_next->op_next->op_next->op_type == OP_PADAV
13376 || o->op_next->op_next->op_next->op_type == OP_PADHV
13378 && !(o->op_next->op_next->op_next->op_private & ~OPpLVAL_INTRO)
13379 && o->op_next->op_next->op_next->op_next && o->op_next->op_next->op_next->op_next->op_type == OP_NEXTSTATE
13380 && (!CopLABEL((COP*)o)) /* Don't mess with labels */
13381 && (!CopLABEL((COP*)o->op_next->op_next)) /* ... */
13383 OP *pad1, *ns2, *pad2, *ns3, *newop, *newpm;
13386 ns2 = pad1->op_next;
13387 pad2 = ns2->op_next;
13388 ns3 = pad2->op_next;
13390 /* we assume here that the op_next chain is the same as
13391 * the op_sibling chain */
13392 assert(OpSIBLING(o) == pad1);
13393 assert(OpSIBLING(pad1) == ns2);
13394 assert(OpSIBLING(ns2) == pad2);
13395 assert(OpSIBLING(pad2) == ns3);
13397 /* excise and delete ns2 */
13398 op_sibling_splice(NULL, pad1, 1, NULL);
13401 /* excise pad1 and pad2 */
13402 op_sibling_splice(NULL, o, 2, NULL);
13404 /* create new listop, with children consisting of:
13405 * a new pushmark, pad1, pad2. */
13406 newop = newLISTOP(OP_LIST, 0, pad1, pad2);
13407 newop->op_flags |= OPf_PARENS;
13408 newop->op_flags = (newop->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
13410 /* insert newop between o and ns3 */
13411 op_sibling_splice(NULL, o, 0, newop);
13413 /*fixup op_next chain */
13414 newpm = cUNOPx(newop)->op_first; /* pushmark */
13415 o ->op_next = newpm;
13416 newpm->op_next = pad1;
13417 pad1 ->op_next = pad2;
13418 pad2 ->op_next = newop; /* listop */
13419 newop->op_next = ns3;
13421 /* Ensure pushmark has this flag if padops do */
13422 if (pad1->op_flags & OPf_MOD && pad2->op_flags & OPf_MOD) {
13423 newpm->op_flags |= OPf_MOD;
13429 /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
13430 to carry two labels. For now, take the easier option, and skip
13431 this optimisation if the first NEXTSTATE has a label. */
13432 if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) {
13433 OP *nextop = o->op_next;
13434 while (nextop && nextop->op_type == OP_NULL)
13435 nextop = nextop->op_next;
13437 if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
13440 oldop->op_next = nextop;
13441 /* Skip (old)oldop assignment since the current oldop's
13442 op_next already points to the next op. */
13449 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
13450 if (o->op_next->op_private & OPpTARGET_MY) {
13451 if (o->op_flags & OPf_STACKED) /* chained concats */
13452 break; /* ignore_optimization */
13454 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
13455 o->op_targ = o->op_next->op_targ;
13456 o->op_next->op_targ = 0;
13457 o->op_private |= OPpTARGET_MY;
13460 op_null(o->op_next);
13464 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
13465 break; /* Scalar stub must produce undef. List stub is noop */
13469 if (o->op_targ == OP_NEXTSTATE
13470 || o->op_targ == OP_DBSTATE)
13472 PL_curcop = ((COP*)o);
13474 /* XXX: We avoid setting op_seq here to prevent later calls
13475 to rpeep() from mistakenly concluding that optimisation
13476 has already occurred. This doesn't fix the real problem,
13477 though (See 20010220.007). AMS 20010719 */
13478 /* op_seq functionality is now replaced by op_opt */
13486 oldop->op_next = o->op_next;
13500 convert repeat into a stub with no kids.
13502 if (o->op_next->op_type == OP_CONST
13503 || ( o->op_next->op_type == OP_PADSV
13504 && !(o->op_next->op_private & OPpLVAL_INTRO))
13505 || ( o->op_next->op_type == OP_GV
13506 && o->op_next->op_next->op_type == OP_RV2SV
13507 && !(o->op_next->op_next->op_private
13508 & (OPpLVAL_INTRO|OPpOUR_INTRO))))
13510 const OP *kid = o->op_next->op_next;
13511 if (o->op_next->op_type == OP_GV)
13512 kid = kid->op_next;
13513 /* kid is now the ex-list. */
13514 if (kid->op_type == OP_NULL
13515 && (kid = kid->op_next)->op_type == OP_CONST
13516 /* kid is now the repeat count. */
13517 && kid->op_next->op_type == OP_REPEAT
13518 && kid->op_next->op_private & OPpREPEAT_DOLIST
13519 && (kid->op_next->op_flags & OPf_WANT) == OPf_WANT_LIST
13520 && SvIOK(kSVOP_sv) && SvIVX(kSVOP_sv) == 0)
13522 o = kid->op_next; /* repeat */
13524 oldop->op_next = o;
13525 op_free(cBINOPo->op_first);
13526 op_free(cBINOPo->op_last );
13527 o->op_flags &=~ OPf_KIDS;
13528 /* stub is a baseop; repeat is a binop */
13529 STATIC_ASSERT_STMT(sizeof(OP) <= sizeof(BINOP));
13530 OpTYPE_set(o, OP_STUB);
13536 /* Convert a series of PAD ops for my vars plus support into a
13537 * single padrange op. Basically
13539 * pushmark -> pad[ahs]v -> pad[ahs]?v -> ... -> (list) -> rest
13541 * becomes, depending on circumstances, one of
13543 * padrange ----------------------------------> (list) -> rest
13544 * padrange --------------------------------------------> rest
13546 * where all the pad indexes are sequential and of the same type
13548 * We convert the pushmark into a padrange op, then skip
13549 * any other pad ops, and possibly some trailing ops.
13550 * Note that we don't null() the skipped ops, to make it
13551 * easier for Deparse to undo this optimisation (and none of
13552 * the skipped ops are holding any resourses). It also makes
13553 * it easier for find_uninit_var(), as it can just ignore
13554 * padrange, and examine the original pad ops.
13558 OP *followop = NULL; /* the op that will follow the padrange op */
13561 PADOFFSET base = 0; /* init only to stop compiler whining */
13562 bool gvoid = 0; /* init only to stop compiler whining */
13563 bool defav = 0; /* seen (...) = @_ */
13564 bool reuse = 0; /* reuse an existing padrange op */
13566 /* look for a pushmark -> gv[_] -> rv2av */
13571 if ( p->op_type == OP_GV
13572 && cGVOPx_gv(p) == PL_defgv
13573 && (rv2av = p->op_next)
13574 && rv2av->op_type == OP_RV2AV
13575 && !(rv2av->op_flags & OPf_REF)
13576 && !(rv2av->op_private & (OPpLVAL_INTRO|OPpMAYBE_LVSUB))
13577 && ((rv2av->op_flags & OPf_WANT) == OPf_WANT_LIST)
13579 q = rv2av->op_next;
13580 if (q->op_type == OP_NULL)
13582 if (q->op_type == OP_PUSHMARK) {
13592 /* scan for PAD ops */
13594 for (p = p->op_next; p; p = p->op_next) {
13595 if (p->op_type == OP_NULL)
13598 if (( p->op_type != OP_PADSV
13599 && p->op_type != OP_PADAV
13600 && p->op_type != OP_PADHV
13602 /* any private flag other than INTRO? e.g. STATE */
13603 || (p->op_private & ~OPpLVAL_INTRO)
13607 /* let $a[N] potentially be optimised into AELEMFAST_LEX
13609 if ( p->op_type == OP_PADAV
13611 && p->op_next->op_type == OP_CONST
13612 && p->op_next->op_next
13613 && p->op_next->op_next->op_type == OP_AELEM
13617 /* for 1st padop, note what type it is and the range
13618 * start; for the others, check that it's the same type
13619 * and that the targs are contiguous */
13621 intro = (p->op_private & OPpLVAL_INTRO);
13623 gvoid = OP_GIMME(p,0) == G_VOID;
13626 if ((p->op_private & OPpLVAL_INTRO) != intro)
13628 /* Note that you'd normally expect targs to be
13629 * contiguous in my($a,$b,$c), but that's not the case
13630 * when external modules start doing things, e.g.
13631 i* Function::Parameters */
13632 if (p->op_targ != base + count)
13634 assert(p->op_targ == base + count);
13635 /* Either all the padops or none of the padops should
13636 be in void context. Since we only do the optimisa-
13637 tion for av/hv when the aggregate itself is pushed
13638 on to the stack (one item), there is no need to dis-
13639 tinguish list from scalar context. */
13640 if (gvoid != (OP_GIMME(p,0) == G_VOID))
13644 /* for AV, HV, only when we're not flattening */
13645 if ( p->op_type != OP_PADSV
13647 && !(p->op_flags & OPf_REF)
13651 if (count >= OPpPADRANGE_COUNTMASK)
13654 /* there's a biggest base we can fit into a
13655 * SAVEt_CLEARPADRANGE in pp_padrange */
13656 if (intro && base >
13657 (UV_MAX >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT)))
13660 /* Success! We've got another valid pad op to optimise away */
13662 followop = p->op_next;
13665 if (count < 1 || (count == 1 && !defav))
13668 /* pp_padrange in specifically compile-time void context
13669 * skips pushing a mark and lexicals; in all other contexts
13670 * (including unknown till runtime) it pushes a mark and the
13671 * lexicals. We must be very careful then, that the ops we
13672 * optimise away would have exactly the same effect as the
13674 * In particular in void context, we can only optimise to
13675 * a padrange if see see the complete sequence
13676 * pushmark, pad*v, ...., list
13677 * which has the net effect of of leaving the markstack as it
13678 * was. Not pushing on to the stack (whereas padsv does touch
13679 * the stack) makes no difference in void context.
13683 if (followop->op_type == OP_LIST
13684 && OP_GIMME(followop,0) == G_VOID
13687 followop = followop->op_next; /* skip OP_LIST */
13689 /* consolidate two successive my(...);'s */
13692 && oldoldop->op_type == OP_PADRANGE
13693 && (oldoldop->op_flags & OPf_WANT) == OPf_WANT_VOID
13694 && (oldoldop->op_private & OPpLVAL_INTRO) == intro
13695 && !(oldoldop->op_flags & OPf_SPECIAL)
13698 assert(oldoldop->op_next == oldop);
13699 assert( oldop->op_type == OP_NEXTSTATE
13700 || oldop->op_type == OP_DBSTATE);
13701 assert(oldop->op_next == o);
13704 = (oldoldop->op_private & OPpPADRANGE_COUNTMASK);
13706 /* Do not assume pad offsets for $c and $d are con-
13711 if ( oldoldop->op_targ + old_count == base
13712 && old_count < OPpPADRANGE_COUNTMASK - count) {
13713 base = oldoldop->op_targ;
13714 count += old_count;
13719 /* if there's any immediately following singleton
13720 * my var's; then swallow them and the associated
13722 * my ($a,$b); my $c; my $d;
13724 * my ($a,$b,$c,$d);
13727 while ( ((p = followop->op_next))
13728 && ( p->op_type == OP_PADSV
13729 || p->op_type == OP_PADAV
13730 || p->op_type == OP_PADHV)
13731 && (p->op_flags & OPf_WANT) == OPf_WANT_VOID
13732 && (p->op_private & OPpLVAL_INTRO) == intro
13733 && !(p->op_private & ~OPpLVAL_INTRO)
13735 && ( p->op_next->op_type == OP_NEXTSTATE
13736 || p->op_next->op_type == OP_DBSTATE)
13737 && count < OPpPADRANGE_COUNTMASK
13738 && base + count == p->op_targ
13741 followop = p->op_next;
13749 assert(oldoldop->op_type == OP_PADRANGE);
13750 oldoldop->op_next = followop;
13751 oldoldop->op_private = (intro | count);
13757 /* Convert the pushmark into a padrange.
13758 * To make Deparse easier, we guarantee that a padrange was
13759 * *always* formerly a pushmark */
13760 assert(o->op_type == OP_PUSHMARK);
13761 o->op_next = followop;
13762 OpTYPE_set(o, OP_PADRANGE);
13764 /* bit 7: INTRO; bit 6..0: count */
13765 o->op_private = (intro | count);
13766 o->op_flags = ((o->op_flags & ~(OPf_WANT|OPf_SPECIAL))
13767 | gvoid * OPf_WANT_VOID
13768 | (defav ? OPf_SPECIAL : 0));
13776 /* Skip over state($x) in void context. */
13777 if (oldop && o->op_private == (OPpPAD_STATE|OPpLVAL_INTRO)
13778 && (o->op_flags & OPf_WANT) == OPf_WANT_VOID)
13780 oldop->op_next = o->op_next;
13781 goto redo_nextstate;
13783 if (o->op_type != OP_PADAV)
13787 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
13788 OP* const pop = (o->op_type == OP_PADAV) ?
13789 o->op_next : o->op_next->op_next;
13791 if (pop && pop->op_type == OP_CONST &&
13792 ((PL_op = pop->op_next)) &&
13793 pop->op_next->op_type == OP_AELEM &&
13794 !(pop->op_next->op_private &
13795 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
13796 (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
13799 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
13800 no_bareword_allowed(pop);
13801 if (o->op_type == OP_GV)
13802 op_null(o->op_next);
13803 op_null(pop->op_next);
13805 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
13806 o->op_next = pop->op_next->op_next;
13807 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
13808 o->op_private = (U8)i;
13809 if (o->op_type == OP_GV) {
13812 o->op_type = OP_AELEMFAST;
13815 o->op_type = OP_AELEMFAST_LEX;
13817 if (o->op_type != OP_GV)
13821 /* Remove $foo from the op_next chain in void context. */
13823 && ( o->op_next->op_type == OP_RV2SV
13824 || o->op_next->op_type == OP_RV2AV
13825 || o->op_next->op_type == OP_RV2HV )
13826 && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID
13827 && !(o->op_next->op_private & OPpLVAL_INTRO))
13829 oldop->op_next = o->op_next->op_next;
13830 /* Reprocess the previous op if it is a nextstate, to
13831 allow double-nextstate optimisation. */
13833 if (oldop->op_type == OP_NEXTSTATE) {
13842 else if (o->op_next->op_type == OP_RV2SV) {
13843 if (!(o->op_next->op_private & OPpDEREF)) {
13844 op_null(o->op_next);
13845 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
13847 o->op_next = o->op_next->op_next;
13848 OpTYPE_set(o, OP_GVSV);
13851 else if (o->op_next->op_type == OP_READLINE
13852 && o->op_next->op_next->op_type == OP_CONCAT
13853 && (o->op_next->op_next->op_flags & OPf_STACKED))
13855 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
13856 OpTYPE_set(o, OP_RCATLINE);
13857 o->op_flags |= OPf_STACKED;
13858 op_null(o->op_next->op_next);
13859 op_null(o->op_next);
13864 #define HV_OR_SCALARHV(op) \
13865 ( (op)->op_type == OP_PADHV || (op)->op_type == OP_RV2HV \
13867 : (op)->op_type == OP_SCALAR && (op)->op_flags & OPf_KIDS \
13868 && ( cUNOPx(op)->op_first->op_type == OP_PADHV \
13869 || cUNOPx(op)->op_first->op_type == OP_RV2HV) \
13870 ? cUNOPx(op)->op_first \
13874 if ((fop = HV_OR_SCALARHV(cUNOP->op_first)))
13875 fop->op_private |= OPpTRUEBOOL;
13881 fop = cLOGOP->op_first;
13882 sop = OpSIBLING(fop);
13883 while (cLOGOP->op_other->op_type == OP_NULL)
13884 cLOGOP->op_other = cLOGOP->op_other->op_next;
13885 while (o->op_next && ( o->op_type == o->op_next->op_type
13886 || o->op_next->op_type == OP_NULL))
13887 o->op_next = o->op_next->op_next;
13889 /* if we're an OR and our next is a AND in void context, we'll
13890 follow it's op_other on short circuit, same for reverse.
13891 We can't do this with OP_DOR since if it's true, its return
13892 value is the underlying value which must be evaluated
13896 (IS_AND_OP(o) && IS_OR_OP(o->op_next))
13897 || (IS_OR_OP(o) && IS_AND_OP(o->op_next))
13899 && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID
13901 o->op_next = ((LOGOP*)o->op_next)->op_other;
13903 DEFER(cLOGOP->op_other);
13906 fop = HV_OR_SCALARHV(fop);
13907 if (sop) sop = HV_OR_SCALARHV(sop);
13912 if (!((nop->op_flags & OPf_WANT) == OPf_WANT_VOID)) {
13913 while (nop && nop->op_next) {
13914 switch (nop->op_next->op_type) {
13919 lop = nop = nop->op_next;
13922 nop = nop->op_next;
13931 if ( (lop->op_flags & OPf_WANT) == OPf_WANT_VOID
13932 || o->op_type == OP_AND )
13933 fop->op_private |= OPpTRUEBOOL;
13934 else if (!(lop->op_flags & OPf_WANT))
13935 fop->op_private |= OPpMAYBE_TRUEBOOL;
13937 if ( (lop->op_flags & OPf_WANT) == OPf_WANT_VOID
13939 sop->op_private |= OPpTRUEBOOL;
13946 if ((fop = HV_OR_SCALARHV(cLOGOP->op_first)))
13947 fop->op_private |= OPpTRUEBOOL;
13948 #undef HV_OR_SCALARHV
13949 /* GERONIMO! */ /* FALLTHROUGH */
13958 while (cLOGOP->op_other->op_type == OP_NULL)
13959 cLOGOP->op_other = cLOGOP->op_other->op_next;
13960 DEFER(cLOGOP->op_other);
13965 while (cLOOP->op_redoop->op_type == OP_NULL)
13966 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
13967 while (cLOOP->op_nextop->op_type == OP_NULL)
13968 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
13969 while (cLOOP->op_lastop->op_type == OP_NULL)
13970 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
13971 /* a while(1) loop doesn't have an op_next that escapes the
13972 * loop, so we have to explicitly follow the op_lastop to
13973 * process the rest of the code */
13974 DEFER(cLOOP->op_lastop);
13978 assert(cLOGOPo->op_other->op_type == OP_LEAVETRY);
13979 DEFER(cLOGOPo->op_other);
13983 assert(!(cPMOP->op_pmflags & PMf_ONCE));
13984 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
13985 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
13986 cPMOP->op_pmstashstartu.op_pmreplstart
13987 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
13988 DEFER(cPMOP->op_pmstashstartu.op_pmreplstart);
13994 if (o->op_flags & OPf_SPECIAL) {
13995 /* first arg is a code block */
13996 OP * const nullop = OpSIBLING(cLISTOP->op_first);
13997 OP * kid = cUNOPx(nullop)->op_first;
13999 assert(nullop->op_type == OP_NULL);
14000 assert(kid->op_type == OP_SCOPE
14001 || (kid->op_type == OP_NULL && kid->op_targ == OP_LEAVE));
14002 /* since OP_SORT doesn't have a handy op_other-style
14003 * field that can point directly to the start of the code
14004 * block, store it in the otherwise-unused op_next field
14005 * of the top-level OP_NULL. This will be quicker at
14006 * run-time, and it will also allow us to remove leading
14007 * OP_NULLs by just messing with op_nexts without
14008 * altering the basic op_first/op_sibling layout. */
14009 kid = kLISTOP->op_first;
14011 (kid->op_type == OP_NULL
14012 && ( kid->op_targ == OP_NEXTSTATE
14013 || kid->op_targ == OP_DBSTATE ))
14014 || kid->op_type == OP_STUB
14015 || kid->op_type == OP_ENTER);
14016 nullop->op_next = kLISTOP->op_next;
14017 DEFER(nullop->op_next);
14020 /* check that RHS of sort is a single plain array */
14021 oright = cUNOPo->op_first;
14022 if (!oright || oright->op_type != OP_PUSHMARK)
14025 if (o->op_private & OPpSORT_INPLACE)
14028 /* reverse sort ... can be optimised. */
14029 if (!OpHAS_SIBLING(cUNOPo)) {
14030 /* Nothing follows us on the list. */
14031 OP * const reverse = o->op_next;
14033 if (reverse->op_type == OP_REVERSE &&
14034 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
14035 OP * const pushmark = cUNOPx(reverse)->op_first;
14036 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
14037 && (OpSIBLING(cUNOPx(pushmark)) == o)) {
14038 /* reverse -> pushmark -> sort */
14039 o->op_private |= OPpSORT_REVERSE;
14041 pushmark->op_next = oright->op_next;
14051 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
14053 LISTOP *enter, *exlist;
14055 if (o->op_private & OPpSORT_INPLACE)
14058 enter = (LISTOP *) o->op_next;
14061 if (enter->op_type == OP_NULL) {
14062 enter = (LISTOP *) enter->op_next;
14066 /* for $a (...) will have OP_GV then OP_RV2GV here.
14067 for (...) just has an OP_GV. */
14068 if (enter->op_type == OP_GV) {
14069 gvop = (OP *) enter;
14070 enter = (LISTOP *) enter->op_next;
14073 if (enter->op_type == OP_RV2GV) {
14074 enter = (LISTOP *) enter->op_next;
14080 if (enter->op_type != OP_ENTERITER)
14083 iter = enter->op_next;
14084 if (!iter || iter->op_type != OP_ITER)
14087 expushmark = enter->op_first;
14088 if (!expushmark || expushmark->op_type != OP_NULL
14089 || expushmark->op_targ != OP_PUSHMARK)
14092 exlist = (LISTOP *) OpSIBLING(expushmark);
14093 if (!exlist || exlist->op_type != OP_NULL
14094 || exlist->op_targ != OP_LIST)
14097 if (exlist->op_last != o) {
14098 /* Mmm. Was expecting to point back to this op. */
14101 theirmark = exlist->op_first;
14102 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
14105 if (OpSIBLING(theirmark) != o) {
14106 /* There's something between the mark and the reverse, eg
14107 for (1, reverse (...))
14112 ourmark = ((LISTOP *)o)->op_first;
14113 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
14116 ourlast = ((LISTOP *)o)->op_last;
14117 if (!ourlast || ourlast->op_next != o)
14120 rv2av = OpSIBLING(ourmark);
14121 if (rv2av && rv2av->op_type == OP_RV2AV && !OpHAS_SIBLING(rv2av)
14122 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
14123 /* We're just reversing a single array. */
14124 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
14125 enter->op_flags |= OPf_STACKED;
14128 /* We don't have control over who points to theirmark, so sacrifice
14130 theirmark->op_next = ourmark->op_next;
14131 theirmark->op_flags = ourmark->op_flags;
14132 ourlast->op_next = gvop ? gvop : (OP *) enter;
14135 enter->op_private |= OPpITER_REVERSED;
14136 iter->op_private |= OPpITER_REVERSED;
14143 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
14144 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
14149 if (!(o->op_private & OPpOFFBYONE) && !CvCLONE(PL_compcv)
14150 && (!CvANON(PL_compcv) || (!PL_cv_has_eval && !PL_perldb)))
14153 if (CvEVAL(PL_compcv)) sv = &PL_sv_undef;
14155 sv = newRV((SV *)PL_compcv);
14159 OpTYPE_set(o, OP_CONST);
14160 o->op_flags |= OPf_SPECIAL;
14161 cSVOPo->op_sv = sv;
14166 if (OP_GIMME(o,0) == G_VOID
14167 || ( o->op_next->op_type == OP_LINESEQ
14168 && ( o->op_next->op_next->op_type == OP_LEAVESUB
14169 || ( o->op_next->op_next->op_type == OP_RETURN
14170 && !CvLVALUE(PL_compcv)))))
14172 OP *right = cBINOP->op_first;
14191 OP *left = OpSIBLING(right);
14192 if (left->op_type == OP_SUBSTR
14193 && (left->op_private & 7) < 4) {
14195 /* cut out right */
14196 op_sibling_splice(o, NULL, 1, NULL);
14197 /* and insert it as second child of OP_SUBSTR */
14198 op_sibling_splice(left, cBINOPx(left)->op_first, 0,
14200 left->op_private |= OPpSUBSTR_REPL_FIRST;
14202 (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
14209 int l, r, lr, lscalars, rscalars;
14211 /* handle common vars detection, e.g. ($a,$b) = ($b,$a).
14212 Note that we do this now rather than in newASSIGNOP(),
14213 since only by now are aliased lexicals flagged as such
14215 See the essay "Common vars in list assignment" above for
14216 the full details of the rationale behind all the conditions
14219 PL_generation sorcery:
14220 To detect whether there are common vars, the global var
14221 PL_generation is incremented for each assign op we scan.
14222 Then we run through all the lexical variables on the LHS,
14223 of the assignment, setting a spare slot in each of them to
14224 PL_generation. Then we scan the RHS, and if any lexicals
14225 already have that value, we know we've got commonality.
14226 Also, if the generation number is already set to
14227 PERL_INT_MAX, then the variable is involved in aliasing, so
14228 we also have potential commonality in that case.
14234 l = S_aassign_scan(aTHX_ cLISTOPo->op_last, FALSE, 1, &lscalars);
14237 r = S_aassign_scan(aTHX_ cLISTOPo->op_first, TRUE, 1, &rscalars);
14241 /* After looking for things which are *always* safe, this main
14242 * if/else chain selects primarily based on the type of the
14243 * LHS, gradually working its way down from the more dangerous
14244 * to the more restrictive and thus safer cases */
14246 if ( !l /* () = ....; */
14247 || !r /* .... = (); */
14248 || !(l & ~AAS_SAFE_SCALAR) /* (undef, pos()) = ...; */
14249 || !(r & ~AAS_SAFE_SCALAR) /* ... = (1,2,length,undef); */
14250 || (lscalars < 2) /* ($x) = ... */
14252 NOOP; /* always safe */
14254 else if (l & AAS_DANGEROUS) {
14255 /* always dangerous */
14256 o->op_private |= OPpASSIGN_COMMON_SCALAR;
14257 o->op_private |= OPpASSIGN_COMMON_AGG;
14259 else if (l & (AAS_PKG_SCALAR|AAS_PKG_AGG)) {
14260 /* package vars are always dangerous - too many
14261 * aliasing possibilities */
14262 if (l & AAS_PKG_SCALAR)
14263 o->op_private |= OPpASSIGN_COMMON_SCALAR;
14264 if (l & AAS_PKG_AGG)
14265 o->op_private |= OPpASSIGN_COMMON_AGG;
14267 else if (l & ( AAS_MY_SCALAR|AAS_MY_AGG
14268 |AAS_LEX_SCALAR|AAS_LEX_AGG))
14270 /* LHS contains only lexicals and safe ops */
14272 if (l & (AAS_MY_AGG|AAS_LEX_AGG))
14273 o->op_private |= OPpASSIGN_COMMON_AGG;
14275 if (l & (AAS_MY_SCALAR|AAS_LEX_SCALAR)) {
14276 if (lr & AAS_LEX_SCALAR_COMM)
14277 o->op_private |= OPpASSIGN_COMMON_SCALAR;
14278 else if ( !(l & AAS_LEX_SCALAR)
14279 && (r & AAS_DEFAV))
14283 * as scalar-safe for performance reasons.
14284 * (it will still have been marked _AGG if necessary */
14287 else if (r & (AAS_PKG_SCALAR|AAS_PKG_AGG|AAS_DANGEROUS))
14288 o->op_private |= OPpASSIGN_COMMON_RC1;
14293 * may have to handle aggregate on LHS, but we can't
14294 * have common scalars*/
14297 ~(OPpASSIGN_COMMON_SCALAR|OPpASSIGN_COMMON_RC1);
14303 Perl_cpeep_t cpeep =
14304 XopENTRYCUSTOM(o, xop_peep);
14306 cpeep(aTHX_ o, oldop);
14311 /* did we just null the current op? If so, re-process it to handle
14312 * eliding "empty" ops from the chain */
14313 if (o->op_type == OP_NULL && oldop && oldop->op_next == o) {
14326 Perl_peep(pTHX_ OP *o)
14332 =head1 Custom Operators
14334 =for apidoc Ao||custom_op_xop
14335 Return the XOP structure for a given custom op. This macro should be
14336 considered internal to OP_NAME and the other access macros: use them instead.
14337 This macro does call a function. Prior
14338 to 5.19.6, this was implemented as a
14345 Perl_custom_op_get_field(pTHX_ const OP *o, const xop_flags_enum field)
14351 static const XOP xop_null = { 0, 0, 0, 0, 0 };
14353 PERL_ARGS_ASSERT_CUSTOM_OP_GET_FIELD;
14354 assert(o->op_type == OP_CUSTOM);
14356 /* This is wrong. It assumes a function pointer can be cast to IV,
14357 * which isn't guaranteed, but this is what the old custom OP code
14358 * did. In principle it should be safer to Copy the bytes of the
14359 * pointer into a PV: since the new interface is hidden behind
14360 * functions, this can be changed later if necessary. */
14361 /* Change custom_op_xop if this ever happens */
14362 keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
14365 he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0);
14367 /* assume noone will have just registered a desc */
14368 if (!he && PL_custom_op_names &&
14369 (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0))
14374 /* XXX does all this need to be shared mem? */
14375 Newxz(xop, 1, XOP);
14376 pv = SvPV(HeVAL(he), l);
14377 XopENTRY_set(xop, xop_name, savepvn(pv, l));
14378 if (PL_custom_op_descs &&
14379 (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0))
14381 pv = SvPV(HeVAL(he), l);
14382 XopENTRY_set(xop, xop_desc, savepvn(pv, l));
14384 Perl_custom_op_register(aTHX_ o->op_ppaddr, xop);
14388 xop = (XOP *)&xop_null;
14390 xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
14394 if(field == XOPe_xop_ptr) {
14397 const U32 flags = XopFLAGS(xop);
14398 if(flags & field) {
14400 case XOPe_xop_name:
14401 any.xop_name = xop->xop_name;
14403 case XOPe_xop_desc:
14404 any.xop_desc = xop->xop_desc;
14406 case XOPe_xop_class:
14407 any.xop_class = xop->xop_class;
14409 case XOPe_xop_peep:
14410 any.xop_peep = xop->xop_peep;
14413 NOT_REACHED; /* NOTREACHED */
14418 case XOPe_xop_name:
14419 any.xop_name = XOPd_xop_name;
14421 case XOPe_xop_desc:
14422 any.xop_desc = XOPd_xop_desc;
14424 case XOPe_xop_class:
14425 any.xop_class = XOPd_xop_class;
14427 case XOPe_xop_peep:
14428 any.xop_peep = XOPd_xop_peep;
14431 NOT_REACHED; /* NOTREACHED */
14436 /* Some gcc releases emit a warning for this function:
14437 * op.c: In function 'Perl_custom_op_get_field':
14438 * op.c:...: warning: 'any.xop_name' may be used uninitialized in this function [-Wmaybe-uninitialized]
14439 * Whether this is true, is currently unknown. */
14445 =for apidoc Ao||custom_op_register
14446 Register a custom op. See L<perlguts/"Custom Operators">.
14452 Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
14456 PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER;
14458 /* see the comment in custom_op_xop */
14459 keysv = sv_2mortal(newSViv(PTR2IV(ppaddr)));
14461 if (!PL_custom_ops)
14462 PL_custom_ops = newHV();
14464 if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0))
14465 Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name);
14470 =for apidoc core_prototype
14472 This function assigns the prototype of the named core function to C<sv>, or
14473 to a new mortal SV if C<sv> is NULL. It returns the modified C<sv>, or
14474 NULL if the core function has no prototype. C<code> is a code as returned
14475 by C<keyword()>. It must not be equal to 0.
14481 Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code,
14484 int i = 0, n = 0, seen_question = 0, defgv = 0;
14486 #define MAX_ARGS_OP ((sizeof(I32) - 1) * 2)
14487 char str[ MAX_ARGS_OP * 2 + 2 ]; /* One ';', one '\0' */
14488 bool nullret = FALSE;
14490 PERL_ARGS_ASSERT_CORE_PROTOTYPE;
14494 if (!sv) sv = sv_newmortal();
14496 #define retsetpvs(x,y) sv_setpvs(sv, x); if(opnum) *opnum=(y); return sv
14498 switch (code < 0 ? -code : code) {
14499 case KEY_and : case KEY_chop: case KEY_chomp:
14500 case KEY_cmp : case KEY_defined: case KEY_delete: case KEY_exec :
14501 case KEY_exists: case KEY_eq : case KEY_ge : case KEY_goto :
14502 case KEY_grep : case KEY_gt : case KEY_last : case KEY_le :
14503 case KEY_lt : case KEY_map : case KEY_ne : case KEY_next :
14504 case KEY_or : case KEY_print : case KEY_printf: case KEY_qr :
14505 case KEY_redo : case KEY_require: case KEY_return: case KEY_say :
14506 case KEY_select: case KEY_sort : case KEY_split : case KEY_system:
14507 case KEY_x : case KEY_xor :
14508 if (!opnum) return NULL; nullret = TRUE; goto findopnum;
14509 case KEY_glob: retsetpvs("_;", OP_GLOB);
14510 case KEY_keys: retsetpvs("\\[%@]", OP_KEYS);
14511 case KEY_values: retsetpvs("\\[%@]", OP_VALUES);
14512 case KEY_each: retsetpvs("\\[%@]", OP_EACH);
14513 case KEY_push: retsetpvs("\\@@", OP_PUSH);
14514 case KEY_unshift: retsetpvs("\\@@", OP_UNSHIFT);
14515 case KEY_pop: retsetpvs(";\\@", OP_POP);
14516 case KEY_shift: retsetpvs(";\\@", OP_SHIFT);
14517 case KEY_pos: retsetpvs(";\\[$*]", OP_POS);
14519 retsetpvs("\\@;$$@", OP_SPLICE);
14520 case KEY___FILE__: case KEY___LINE__: case KEY___PACKAGE__:
14522 case KEY_evalbytes:
14523 name = "entereval"; break;
14531 while (i < MAXO) { /* The slow way. */
14532 if (strEQ(name, PL_op_name[i])
14533 || strEQ(name, PL_op_desc[i]))
14535 if (nullret) { assert(opnum); *opnum = i; return NULL; }
14542 defgv = PL_opargs[i] & OA_DEFGV;
14543 oa = PL_opargs[i] >> OASHIFT;
14545 if (oa & OA_OPTIONAL && !seen_question && (
14546 !defgv || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF
14551 if ((oa & (OA_OPTIONAL - 1)) >= OA_AVREF
14552 && (oa & (OA_OPTIONAL - 1)) <= OA_SCALARREF
14553 /* But globs are already references (kinda) */
14554 && (oa & (OA_OPTIONAL - 1)) != OA_FILEREF
14558 if ((oa & (OA_OPTIONAL - 1)) == OA_SCALARREF
14559 && !scalar_mod_type(NULL, i)) {
14564 if (i == OP_LOCK || i == OP_UNDEF) str[n++] = '&';
14568 else str[n++] = ("?$@@%&*$")[oa & (OA_OPTIONAL - 1)];
14569 if (oa & OA_OPTIONAL && defgv && str[n-1] == '$') {
14570 str[n-1] = '_'; defgv = 0;
14574 if (code == -KEY_not || code == -KEY_getprotobynumber) str[n++] = ';';
14576 sv_setpvn(sv, str, n - 1);
14577 if (opnum) *opnum = i;
14582 Perl_coresub_op(pTHX_ SV * const coreargssv, const int code,
14585 OP * const argop = newSVOP(OP_COREARGS,0,coreargssv);
14588 PERL_ARGS_ASSERT_CORESUB_OP;
14592 return op_append_elem(OP_LINESEQ,
14595 newSVOP(OP_CONST, 0, newSViv(-code % 3)),
14599 case OP_SELECT: /* which represents OP_SSELECT as well */
14604 newAVREF(newGVOP(OP_GV, 0, PL_defgv)),
14605 newSVOP(OP_CONST, 0, newSVuv(1))
14607 coresub_op(newSVuv((UV)OP_SSELECT), 0,
14609 coresub_op(coreargssv, 0, OP_SELECT)
14613 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
14615 return op_append_elem(
14618 opnum == OP_WANTARRAY || opnum == OP_RUNCV
14619 ? OPpOFFBYONE << 8 : 0)
14621 case OA_BASEOP_OR_UNOP:
14622 if (opnum == OP_ENTEREVAL) {
14623 o = newUNOP(OP_ENTEREVAL,OPpEVAL_COPHH<<8,argop);
14624 if (code == -KEY_evalbytes) o->op_private |= OPpEVAL_BYTES;
14626 else o = newUNOP(opnum,0,argop);
14627 if (opnum == OP_CALLER) o->op_private |= OPpOFFBYONE;
14630 if (is_handle_constructor(o, 1))
14631 argop->op_private |= OPpCOREARGS_DEREF1;
14632 if (scalar_mod_type(NULL, opnum))
14633 argop->op_private |= OPpCOREARGS_SCALARMOD;
14637 o = op_convert_list(opnum,OPf_SPECIAL*(opnum == OP_GLOB),argop);
14638 if (is_handle_constructor(o, 2))
14639 argop->op_private |= OPpCOREARGS_DEREF2;
14640 if (opnum == OP_SUBSTR) {
14641 o->op_private |= OPpMAYBE_LVSUB;
14650 Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv,
14651 SV * const *new_const_svp)
14653 const char *hvname;
14654 bool is_const = !!CvCONST(old_cv);
14655 SV *old_const_sv = is_const ? cv_const_sv(old_cv) : NULL;
14657 PERL_ARGS_ASSERT_REPORT_REDEFINED_CV;
14659 if (is_const && new_const_svp && old_const_sv == *new_const_svp)
14661 /* They are 2 constant subroutines generated from
14662 the same constant. This probably means that
14663 they are really the "same" proxy subroutine
14664 instantiated in 2 places. Most likely this is
14665 when a constant is exported twice. Don't warn.
14668 (ckWARN(WARN_REDEFINE)
14670 CvGV(old_cv) && GvSTASH(CvGV(old_cv))
14671 && HvNAMELEN(GvSTASH(CvGV(old_cv))) == 7
14672 && (hvname = HvNAME(GvSTASH(CvGV(old_cv))),
14673 strEQ(hvname, "autouse"))
14677 && ckWARN_d(WARN_REDEFINE)
14678 && (!new_const_svp || sv_cmp(old_const_sv, *new_const_svp))
14681 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
14683 ? "Constant subroutine %"SVf" redefined"
14684 : "Subroutine %"SVf" redefined",
14689 =head1 Hook manipulation
14691 These functions provide convenient and thread-safe means of manipulating
14698 =for apidoc Am|void|wrap_op_checker|Optype opcode|Perl_check_t new_checker|Perl_check_t *old_checker_p
14700 Puts a C function into the chain of check functions for a specified op
14701 type. This is the preferred way to manipulate the L</PL_check> array.
14702 C<opcode> specifies which type of op is to be affected. C<new_checker>
14703 is a pointer to the C function that is to be added to that opcode's
14704 check chain, and C<old_checker_p> points to the storage location where a
14705 pointer to the next function in the chain will be stored. The value of
14706 C<new_pointer> is written into the L</PL_check> array, while the value
14707 previously stored there is written to C<*old_checker_p>.
14709 The function should be defined like this:
14711 static OP *new_checker(pTHX_ OP *op) { ... }
14713 It is intended to be called in this manner:
14715 new_checker(aTHX_ op)
14717 C<old_checker_p> should be defined like this:
14719 static Perl_check_t old_checker_p;
14721 L</PL_check> is global to an entire process, and a module wishing to
14722 hook op checking may find itself invoked more than once per process,
14723 typically in different threads. To handle that situation, this function
14724 is idempotent. The location C<*old_checker_p> must initially (once
14725 per process) contain a null pointer. A C variable of static duration
14726 (declared at file scope, typically also marked C<static> to give
14727 it internal linkage) will be implicitly initialised appropriately,
14728 if it does not have an explicit initialiser. This function will only
14729 actually modify the check chain if it finds C<*old_checker_p> to be null.
14730 This function is also thread safe on the small scale. It uses appropriate
14731 locking to avoid race conditions in accessing L</PL_check>.
14733 When this function is called, the function referenced by C<new_checker>
14734 must be ready to be called, except for C<*old_checker_p> being unfilled.
14735 In a threading situation, C<new_checker> may be called immediately,
14736 even before this function has returned. C<*old_checker_p> will always
14737 be appropriately set before C<new_checker> is called. If C<new_checker>
14738 decides not to do anything special with an op that it is given (which
14739 is the usual case for most uses of op check hooking), it must chain the
14740 check function referenced by C<*old_checker_p>.
14742 If you want to influence compilation of calls to a specific subroutine,
14743 then use L</cv_set_call_checker> rather than hooking checking of all
14750 Perl_wrap_op_checker(pTHX_ Optype opcode,
14751 Perl_check_t new_checker, Perl_check_t *old_checker_p)
14755 PERL_UNUSED_CONTEXT;
14756 PERL_ARGS_ASSERT_WRAP_OP_CHECKER;
14757 if (*old_checker_p) return;
14758 OP_CHECK_MUTEX_LOCK;
14759 if (!*old_checker_p) {
14760 *old_checker_p = PL_check[opcode];
14761 PL_check[opcode] = new_checker;
14763 OP_CHECK_MUTEX_UNLOCK;
14768 /* Efficient sub that returns a constant scalar value. */
14770 const_sv_xsub(pTHX_ CV* cv)
14773 SV *const sv = MUTABLE_SV(XSANY.any_ptr);
14774 PERL_UNUSED_ARG(items);
14784 const_av_xsub(pTHX_ CV* cv)
14787 AV * const av = MUTABLE_AV(XSANY.any_ptr);
14795 if (SvRMAGICAL(av))
14796 Perl_croak(aTHX_ "Magical list constants are not supported");
14797 if (GIMME_V != G_ARRAY) {
14799 ST(0) = sv_2mortal(newSViv((IV)AvFILLp(av)+1));
14802 EXTEND(SP, AvFILLp(av)+1);
14803 Copy(AvARRAY(av), &ST(0), AvFILLp(av)+1, SV *);
14804 XSRETURN(AvFILLp(av)+1);
14808 * ex: set ts=8 sts=4 sw=4 et: