4 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
5 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
13 * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
14 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
15 * youngest of the Old Took's daughters); and Mr. Drogo was his second
16 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
17 * either way, as the saying is, if you follow me.' --the Gaffer
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
25 * A Perl program is compiled into a tree of OPs. Each op contains
26 * structural pointers (eg to its siblings and the next op in the
27 * execution sequence), a pointer to the function that would execute the
28 * op, plus any data specific to that op. For example, an OP_CONST op
29 * points to the pp_const() function and to an SV containing the constant
30 * value. When pp_const() is executed, its job is to push that SV onto the
33 * OPs are mainly created by the newFOO() functions, which are mainly
34 * called from the parser (in perly.y) as the code is parsed. For example
35 * the Perl code $a + $b * $c would cause the equivalent of the following
36 * to be called (oversimplifying a bit):
38 * newBINOP(OP_ADD, flags,
40 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
43 * Note that during the build of miniperl, a temporary copy of this file
44 * is made, called opmini.c.
48 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
52 An execution-order pass
54 The bottom-up pass is represented by all the "newOP" routines and
55 the ck_ routines. The bottom-upness is actually driven by yacc.
56 So at the point that a ck_ routine fires, we have no idea what the
57 context is, either upward in the syntax tree, or either forward or
58 backward in the execution order. (The bottom-up parser builds that
59 part of the execution order it knows about, but if you follow the "next"
60 links around, you'll find it's actually a closed loop through the
63 Whenever the bottom-up parser gets to a node that supplies context to
64 its components, it invokes that portion of the top-down pass that applies
65 to that part of the subtree (and marks the top node as processed, so
66 if a node further up supplies context, it doesn't have to take the
67 plunge again). As a particular subcase of this, as the new node is
68 built, it takes all the closed execution loops of its subcomponents
69 and links them into a new closed loop for the higher level node. But
70 it's still not the real execution order.
72 The actual execution order is not known till we get a grammar reduction
73 to a top-level unit like a subroutine or file that will be called by
74 "name" rather than via a "next" pointer. At that point, we can call
75 into peep() to do that code's portion of the 3rd pass. It has to be
76 recursive, but it's recursive on basic blocks, not on tree nodes.
79 /* To implement user lexical pragmas, there needs to be a way at run time to
80 get the compile time state of %^H for that block. Storing %^H in every
81 block (or even COP) would be very expensive, so a different approach is
82 taken. The (running) state of %^H is serialised into a tree of HE-like
83 structs. Stores into %^H are chained onto the current leaf as a struct
84 refcounted_he * with the key and the value. Deletes from %^H are saved
85 with a value of PL_sv_placeholder. The state of %^H at any point can be
86 turned back into a regular HV by walking back up the tree from that point's
87 leaf, ignoring any key you've already seen (placeholder or not), storing
88 the rest into the HV structure, then removing the placeholders. Hence
89 memory is only used to store the %^H deltas from the enclosing COP, rather
90 than the entire %^H on each COP.
92 To cause actions on %^H to write out the serialisation records, it has
93 magic type 'H'. This magic (itself) does nothing, but its presence causes
94 the values to gain magic type 'h', which has entries for set and clear.
95 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
96 record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
97 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
98 it will be correctly restored when any inner compiling scope is exited.
104 #include "keywords.h"
108 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
109 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
110 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
112 /* Used to avoid recursion through the op tree in scalarvoid() and
116 #define DEFERRED_OP_STEP 100
117 #define DEFER_OP(o) \
119 if (UNLIKELY(defer_ix == (defer_stack_alloc-1))) { \
120 defer_stack_alloc += DEFERRED_OP_STEP; \
121 assert(defer_stack_alloc > 0); \
122 Renew(defer_stack, defer_stack_alloc, OP *); \
124 defer_stack[++defer_ix] = o; \
127 #define POP_DEFERRED_OP() (defer_ix >= 0 ? defer_stack[defer_ix--] : (OP *)NULL)
129 /* remove any leading "empty" ops from the op_next chain whose first
130 * node's address is stored in op_p. Store the updated address of the
131 * first node in op_p.
135 S_prune_chain_head(OP** op_p)
138 && ( (*op_p)->op_type == OP_NULL
139 || (*op_p)->op_type == OP_SCOPE
140 || (*op_p)->op_type == OP_SCALAR
141 || (*op_p)->op_type == OP_LINESEQ)
143 *op_p = (*op_p)->op_next;
147 /* See the explanatory comments above struct opslab in op.h. */
149 #ifdef PERL_DEBUG_READONLY_OPS
150 # define PERL_SLAB_SIZE 128
151 # define PERL_MAX_SLAB_SIZE 4096
152 # include <sys/mman.h>
155 #ifndef PERL_SLAB_SIZE
156 # define PERL_SLAB_SIZE 64
158 #ifndef PERL_MAX_SLAB_SIZE
159 # define PERL_MAX_SLAB_SIZE 2048
162 /* rounds up to nearest pointer */
163 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
164 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
167 S_new_slab(pTHX_ size_t sz)
169 #ifdef PERL_DEBUG_READONLY_OPS
170 OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
171 PROT_READ|PROT_WRITE,
172 MAP_ANON|MAP_PRIVATE, -1, 0);
173 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
174 (unsigned long) sz, slab));
175 if (slab == MAP_FAILED) {
176 perror("mmap failed");
179 slab->opslab_size = (U16)sz;
181 OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
184 /* The context is unused in non-Windows */
187 slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
191 /* requires double parens and aTHX_ */
192 #define DEBUG_S_warn(args) \
194 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
198 Perl_Slab_Alloc(pTHX_ size_t sz)
206 /* We only allocate ops from the slab during subroutine compilation.
207 We find the slab via PL_compcv, hence that must be non-NULL. It could
208 also be pointing to a subroutine which is now fully set up (CvROOT()
209 pointing to the top of the optree for that sub), or a subroutine
210 which isn't using the slab allocator. If our sanity checks aren't met,
211 don't use a slab, but allocate the OP directly from the heap. */
212 if (!PL_compcv || CvROOT(PL_compcv)
213 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
215 o = (OP*)PerlMemShared_calloc(1, sz);
219 /* While the subroutine is under construction, the slabs are accessed via
220 CvSTART(), to avoid needing to expand PVCV by one pointer for something
221 unneeded at runtime. Once a subroutine is constructed, the slabs are
222 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
223 allocated yet. See the commit message for 8be227ab5eaa23f2 for more
225 if (!CvSTART(PL_compcv)) {
227 (OP *)(slab = S_new_slab(aTHX_ PERL_SLAB_SIZE));
228 CvSLABBED_on(PL_compcv);
229 slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
231 else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
233 opsz = SIZE_TO_PSIZE(sz);
234 sz = opsz + OPSLOT_HEADER_P;
236 /* The slabs maintain a free list of OPs. In particular, constant folding
237 will free up OPs, so it makes sense to re-use them where possible. A
238 freed up slot is used in preference to a new allocation. */
239 if (slab->opslab_freed) {
240 OP **too = &slab->opslab_freed;
242 DEBUG_S_warn((aTHX_ "found free op at %p, slab %p", (void*)o, (void*)slab));
243 while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
244 DEBUG_S_warn((aTHX_ "Alas! too small"));
245 o = *(too = &o->op_next);
246 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
250 Zero(o, opsz, I32 *);
256 #define INIT_OPSLOT \
257 slot->opslot_slab = slab; \
258 slot->opslot_next = slab2->opslab_first; \
259 slab2->opslab_first = slot; \
260 o = &slot->opslot_op; \
263 /* The partially-filled slab is next in the chain. */
264 slab2 = slab->opslab_next ? slab->opslab_next : slab;
265 if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) {
266 /* Remaining space is too small. */
268 /* If we can fit a BASEOP, add it to the free chain, so as not
270 if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
271 slot = &slab2->opslab_slots;
273 o->op_type = OP_FREED;
274 o->op_next = slab->opslab_freed;
275 slab->opslab_freed = o;
278 /* Create a new slab. Make this one twice as big. */
279 slot = slab2->opslab_first;
280 while (slot->opslot_next) slot = slot->opslot_next;
281 slab2 = S_new_slab(aTHX_
282 (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE
284 : (DIFF(slab2, slot)+1)*2);
285 slab2->opslab_next = slab->opslab_next;
286 slab->opslab_next = slab2;
288 assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
290 /* Create a new op slot */
291 slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz);
292 assert(slot >= &slab2->opslab_slots);
293 if (DIFF(&slab2->opslab_slots, slot)
294 < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
295 slot = &slab2->opslab_slots;
297 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", (void*)o, (void*)slab));
300 /* lastsib == 1, op_sibling == 0 implies a solitary unattached op */
302 assert(!o->op_sibling);
309 #ifdef PERL_DEBUG_READONLY_OPS
311 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
313 PERL_ARGS_ASSERT_SLAB_TO_RO;
315 if (slab->opslab_readonly) return;
316 slab->opslab_readonly = 1;
317 for (; slab; slab = slab->opslab_next) {
318 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
319 (unsigned long) slab->opslab_size, slab));*/
320 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
321 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
322 (unsigned long)slab->opslab_size, errno);
327 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
331 PERL_ARGS_ASSERT_SLAB_TO_RW;
333 if (!slab->opslab_readonly) return;
335 for (; slab2; slab2 = slab2->opslab_next) {
336 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
337 (unsigned long) size, slab2));*/
338 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
339 PROT_READ|PROT_WRITE)) {
340 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
341 (unsigned long)slab2->opslab_size, errno);
344 slab->opslab_readonly = 0;
348 # define Slab_to_rw(op) NOOP
351 /* This cannot possibly be right, but it was copied from the old slab
352 allocator, to which it was originally added, without explanation, in
355 # define PerlMemShared PerlMem
359 Perl_Slab_Free(pTHX_ void *op)
361 OP * const o = (OP *)op;
364 PERL_ARGS_ASSERT_SLAB_FREE;
366 if (!o->op_slabbed) {
368 PerlMemShared_free(op);
373 /* If this op is already freed, our refcount will get screwy. */
374 assert(o->op_type != OP_FREED);
375 o->op_type = OP_FREED;
376 o->op_next = slab->opslab_freed;
377 slab->opslab_freed = o;
378 DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
379 OpslabREFCNT_dec_padok(slab);
383 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
385 const bool havepad = !!PL_comppad;
386 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
389 PAD_SAVE_SETNULLPAD();
396 Perl_opslab_free(pTHX_ OPSLAB *slab)
399 PERL_ARGS_ASSERT_OPSLAB_FREE;
401 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
402 assert(slab->opslab_refcnt == 1);
403 for (; slab; slab = slab2) {
404 slab2 = slab->opslab_next;
406 slab->opslab_refcnt = ~(size_t)0;
408 #ifdef PERL_DEBUG_READONLY_OPS
409 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
411 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
412 perror("munmap failed");
416 PerlMemShared_free(slab);
422 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
427 size_t savestack_count = 0;
429 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
432 for (slot = slab2->opslab_first;
434 slot = slot->opslot_next) {
435 if (slot->opslot_op.op_type != OP_FREED
436 && !(slot->opslot_op.op_savefree
442 assert(slot->opslot_op.op_slabbed);
443 op_free(&slot->opslot_op);
444 if (slab->opslab_refcnt == 1) goto free;
447 } while ((slab2 = slab2->opslab_next));
448 /* > 1 because the CV still holds a reference count. */
449 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
451 assert(savestack_count == slab->opslab_refcnt-1);
453 /* Remove the CV’s reference count. */
454 slab->opslab_refcnt--;
461 #ifdef PERL_DEBUG_READONLY_OPS
463 Perl_op_refcnt_inc(pTHX_ OP *o)
466 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
467 if (slab && slab->opslab_readonly) {
480 Perl_op_refcnt_dec(pTHX_ OP *o)
483 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
485 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
487 if (slab && slab->opslab_readonly) {
489 result = --o->op_targ;
492 result = --o->op_targ;
498 * In the following definition, the ", (OP*)0" is just to make the compiler
499 * think the expression is of the right type: croak actually does a Siglongjmp.
501 #define CHECKOP(type,o) \
502 ((PL_op_mask && PL_op_mask[type]) \
503 ? ( op_free((OP*)o), \
504 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
506 : PL_check[type](aTHX_ (OP*)o))
508 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
510 #define CHANGE_TYPE(o,type) \
512 o->op_type = (OPCODE)type; \
513 o->op_ppaddr = PL_ppaddr[type]; \
517 S_no_fh_allowed(pTHX_ OP *o)
519 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
521 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
527 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
529 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
530 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
535 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
537 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
539 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
544 S_bad_type_pv(pTHX_ I32 n, const char *t, const char *name, U32 flags, const OP *kid)
546 PERL_ARGS_ASSERT_BAD_TYPE_PV;
548 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
549 (int)n, name, t, OP_DESC(kid)), flags);
553 S_bad_type_gv(pTHX_ I32 n, const char *t, GV *gv, U32 flags, const OP *kid)
555 SV * const namesv = cv_name((CV *)gv, NULL, 0);
556 PERL_ARGS_ASSERT_BAD_TYPE_GV;
558 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %"SVf" must be %s (not %s)",
559 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv) | flags);
563 S_no_bareword_allowed(pTHX_ OP *o)
565 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
567 qerror(Perl_mess(aTHX_
568 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
570 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
573 /* "register" allocation */
576 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
579 const bool is_our = (PL_parser->in_my == KEY_our);
581 PERL_ARGS_ASSERT_ALLOCMY;
583 if (flags & ~SVf_UTF8)
584 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
587 /* complain about "my $<special_var>" etc etc */
591 ((flags & SVf_UTF8) && isIDFIRST_utf8((U8 *)name+1)) ||
592 (name[1] == '_' && (*name == '$' || len > 2))))
594 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
595 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
596 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
597 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
598 PL_parser->in_my == KEY_state ? "state" : "my"));
600 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
601 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
604 else if (len == 2 && name[1] == '_' && !is_our)
605 /* diag_listed_as: Use of my $_ is experimental */
606 Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__LEXICAL_TOPIC),
607 "Use of %s $_ is experimental",
608 PL_parser->in_my == KEY_state
612 /* allocate a spare slot and store the name in that slot */
614 off = pad_add_name_pvn(name, len,
615 (is_our ? padadd_OUR :
616 PL_parser->in_my == KEY_state ? padadd_STATE : 0)
617 | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ),
618 PL_parser->in_my_stash,
620 /* $_ is always in main::, even with our */
621 ? (PL_curstash && !memEQs(name,len,"$_")
627 /* anon sub prototypes contains state vars should always be cloned,
628 * otherwise the state var would be shared between anon subs */
630 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
631 CvCLONE_on(PL_compcv);
637 =head1 Optree Manipulation Functions
639 =for apidoc alloccopstash
641 Available only under threaded builds, this function allocates an entry in
642 C<PL_stashpad> for the stash passed to it.
649 Perl_alloccopstash(pTHX_ HV *hv)
651 PADOFFSET off = 0, o = 1;
652 bool found_slot = FALSE;
654 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
656 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
658 for (; o < PL_stashpadmax; ++o) {
659 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
660 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
661 found_slot = TRUE, off = o;
664 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
665 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
666 off = PL_stashpadmax;
667 PL_stashpadmax += 10;
670 PL_stashpad[PL_stashpadix = off] = hv;
675 /* free the body of an op without examining its contents.
676 * Always use this rather than FreeOp directly */
679 S_op_destroy(pTHX_ OP *o)
687 =for apidoc Am|void|op_free|OP *o
689 Free an op. Only use this when an op is no longer linked to from any
696 Perl_op_free(pTHX_ OP *o)
700 SSize_t defer_ix = -1;
701 SSize_t defer_stack_alloc = 0;
702 OP **defer_stack = NULL;
706 /* Though ops may be freed twice, freeing the op after its slab is a
708 assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
709 /* During the forced freeing of ops after compilation failure, kidops
710 may be freed before their parents. */
711 if (!o || o->op_type == OP_FREED)
716 /* an op should only ever acquire op_private flags that we know about.
717 * If this fails, you may need to fix something in regen/op_private */
718 if (o->op_ppaddr == PL_ppaddr[o->op_type]) {
719 assert(!(o->op_private & ~PL_op_private_valid[type]));
722 if (o->op_private & OPpREFCOUNTED) {
733 refcnt = OpREFCNT_dec(o);
736 /* Need to find and remove any pattern match ops from the list
737 we maintain for reset(). */
738 find_and_forget_pmops(o);
748 /* Call the op_free hook if it has been set. Do it now so that it's called
749 * at the right time for refcounted ops, but still before all of the kids
753 if (o->op_flags & OPf_KIDS) {
755 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
756 nextkid = OP_SIBLING(kid); /* Get before next freeing kid */
757 if (!kid || kid->op_type == OP_FREED)
758 /* During the forced freeing of ops after
759 compilation failure, kidops may be freed before
762 if (!(kid->op_flags & OPf_KIDS))
763 /* If it has no kids, just free it now */
770 type = (OPCODE)o->op_targ;
773 Slab_to_rw(OpSLAB(o));
775 /* COP* is not cleared by op_clear() so that we may track line
776 * numbers etc even after null() */
777 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
783 #ifdef DEBUG_LEAKING_SCALARS
787 } while ( (o = POP_DEFERRED_OP()) );
789 Safefree(defer_stack);
793 Perl_op_clear(pTHX_ OP *o)
798 PERL_ARGS_ASSERT_OP_CLEAR;
800 switch (o->op_type) {
801 case OP_NULL: /* Was holding old type, if any. */
804 case OP_ENTEREVAL: /* Was holding hints. */
808 if (!(o->op_flags & OPf_REF)
809 || (PL_check[o->op_type] != Perl_ck_ftst))
816 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
821 /* It's possible during global destruction that the GV is freed
822 before the optree. Whilst the SvREFCNT_inc is happy to bump from
823 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
824 will trigger an assertion failure, because the entry to sv_clear
825 checks that the scalar is not already freed. A check of for
826 !SvIS_FREED(gv) turns out to be invalid, because during global
827 destruction the reference count can be forced down to zero
828 (with SVf_BREAK set). In which case raising to 1 and then
829 dropping to 0 triggers cleanup before it should happen. I
830 *think* that this might actually be a general, systematic,
831 weakness of the whole idea of SVf_BREAK, in that code *is*
832 allowed to raise and lower references during global destruction,
833 so any *valid* code that happens to do this during global
834 destruction might well trigger premature cleanup. */
835 bool still_valid = gv && SvREFCNT(gv);
838 SvREFCNT_inc_simple_void(gv);
840 if (cPADOPo->op_padix > 0) {
841 pad_swipe(cPADOPo->op_padix, TRUE);
842 cPADOPo->op_padix = 0;
845 SvREFCNT_dec(cSVOPo->op_sv);
846 cSVOPo->op_sv = NULL;
849 int try_downgrade = SvREFCNT(gv) == 2;
852 gv_try_downgrade(gv);
856 case OP_METHOD_NAMED:
857 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
858 cMETHOPx(o)->op_u.op_meth_sv = NULL;
861 pad_swipe(o->op_targ, 1);
868 SvREFCNT_dec(cSVOPo->op_sv);
869 cSVOPo->op_sv = NULL;
872 Even if op_clear does a pad_free for the target of the op,
873 pad_free doesn't actually remove the sv that exists in the pad;
874 instead it lives on. This results in that it could be reused as
875 a target later on when the pad was reallocated.
878 pad_swipe(o->op_targ,1);
888 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
893 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
894 assert(o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
896 if (cPADOPo->op_padix > 0) {
897 pad_swipe(cPADOPo->op_padix, TRUE);
898 cPADOPo->op_padix = 0;
901 SvREFCNT_dec(cSVOPo->op_sv);
902 cSVOPo->op_sv = NULL;
906 PerlMemShared_free(cPVOPo->op_pv);
907 cPVOPo->op_pv = NULL;
911 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
915 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
916 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
919 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
925 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
926 op_free(cPMOPo->op_code_list);
927 cPMOPo->op_code_list = NULL;
929 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
930 /* we use the same protection as the "SAFE" version of the PM_ macros
931 * here since sv_clean_all might release some PMOPs
932 * after PL_regex_padav has been cleared
933 * and the clearing of PL_regex_padav needs to
934 * happen before sv_clean_all
937 if(PL_regex_pad) { /* We could be in destruction */
938 const IV offset = (cPMOPo)->op_pmoffset;
939 ReREFCNT_dec(PM_GETRE(cPMOPo));
940 PL_regex_pad[offset] = &PL_sv_undef;
941 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
945 ReREFCNT_dec(PM_GETRE(cPMOPo));
946 PM_SETRE(cPMOPo, NULL);
952 if (o->op_targ > 0) {
953 pad_free(o->op_targ);
959 S_cop_free(pTHX_ COP* cop)
961 PERL_ARGS_ASSERT_COP_FREE;
964 if (! specialWARN(cop->cop_warnings))
965 PerlMemShared_free(cop->cop_warnings);
966 cophh_free(CopHINTHASH_get(cop));
967 if (PL_curcop == cop)
972 S_forget_pmop(pTHX_ PMOP *const o
975 HV * const pmstash = PmopSTASH(o);
977 PERL_ARGS_ASSERT_FORGET_PMOP;
979 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
980 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
982 PMOP **const array = (PMOP**) mg->mg_ptr;
983 U32 count = mg->mg_len / sizeof(PMOP**);
988 /* Found it. Move the entry at the end to overwrite it. */
989 array[i] = array[--count];
990 mg->mg_len = count * sizeof(PMOP**);
991 /* Could realloc smaller at this point always, but probably
992 not worth it. Probably worth free()ing if we're the
995 Safefree(mg->mg_ptr);
1008 S_find_and_forget_pmops(pTHX_ OP *o)
1010 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1012 if (o->op_flags & OPf_KIDS) {
1013 OP *kid = cUNOPo->op_first;
1015 switch (kid->op_type) {
1020 forget_pmop((PMOP*)kid);
1022 find_and_forget_pmops(kid);
1023 kid = OP_SIBLING(kid);
1029 =for apidoc Am|void|op_null|OP *o
1031 Neutralizes an op when it is no longer needed, but is still linked to from
1038 Perl_op_null(pTHX_ OP *o)
1042 PERL_ARGS_ASSERT_OP_NULL;
1044 if (o->op_type == OP_NULL)
1047 o->op_targ = o->op_type;
1048 CHANGE_TYPE(o, OP_NULL);
1052 Perl_op_refcnt_lock(pTHX)
1057 PERL_UNUSED_CONTEXT;
1062 Perl_op_refcnt_unlock(pTHX)
1067 PERL_UNUSED_CONTEXT;
1073 =for apidoc op_sibling_splice
1075 A general function for editing the structure of an existing chain of
1076 op_sibling nodes. By analogy with the perl-level splice() function, allows
1077 you to delete zero or more sequential nodes, replacing them with zero or
1078 more different nodes. Performs the necessary op_first/op_last
1079 housekeeping on the parent node and op_sibling manipulation on the
1080 children. The last deleted node will be marked as as the last node by
1081 updating the op_sibling or op_lastsib field as appropriate.
1083 Note that op_next is not manipulated, and nodes are not freed; that is the
1084 responsibility of the caller. It also won't create a new list op for an
1085 empty list etc; use higher-level functions like op_append_elem() for that.
1087 parent is the parent node of the sibling chain.
1089 start is the node preceding the first node to be spliced. Node(s)
1090 following it will be deleted, and ops will be inserted after it. If it is
1091 NULL, the first node onwards is deleted, and nodes are inserted at the
1094 del_count is the number of nodes to delete. If zero, no nodes are deleted.
1095 If -1 or greater than or equal to the number of remaining kids, all
1096 remaining kids are deleted.
1098 insert is the first of a chain of nodes to be inserted in place of the nodes.
1099 If NULL, no nodes are inserted.
1101 The head of the chain of deleted ops is returned, or NULL if no ops were
1106 action before after returns
1107 ------ ----- ----- -------
1110 splice(P, A, 2, X-Y-Z) | | B-C
1114 splice(P, NULL, 1, X-Y) | | A
1118 splice(P, NULL, 3, NULL) | | A-B-C
1122 splice(P, B, 0, X-Y) | | NULL
1129 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1131 OP *first = start ? OP_SIBLING(start) : cLISTOPx(parent)->op_first;
1133 OP *last_del = NULL;
1134 OP *last_ins = NULL;
1136 PERL_ARGS_ASSERT_OP_SIBLING_SPLICE;
1138 assert(del_count >= -1);
1140 if (del_count && first) {
1142 while (--del_count && OP_HAS_SIBLING(last_del))
1143 last_del = OP_SIBLING(last_del);
1144 rest = OP_SIBLING(last_del);
1145 OP_SIBLING_set(last_del, NULL);
1146 last_del->op_lastsib = 1;
1153 while (OP_HAS_SIBLING(last_ins))
1154 last_ins = OP_SIBLING(last_ins);
1155 OP_SIBLING_set(last_ins, rest);
1156 last_ins->op_lastsib = rest ? 0 : 1;
1162 OP_SIBLING_set(start, insert);
1163 start->op_lastsib = insert ? 0 : 1;
1166 cLISTOPx(parent)->op_first = insert;
1169 /* update op_last etc */
1170 U32 type = parent->op_type;
1173 if (type == OP_NULL)
1174 type = parent->op_targ;
1175 type = PL_opargs[type] & OA_CLASS_MASK;
1177 lastop = last_ins ? last_ins : start ? start : NULL;
1178 if ( type == OA_BINOP
1179 || type == OA_LISTOP
1183 cLISTOPx(parent)->op_last = lastop;
1186 lastop->op_lastsib = 1;
1187 #ifdef PERL_OP_PARENT
1188 lastop->op_sibling = parent;
1192 return last_del ? first : NULL;
1196 =for apidoc op_parent
1198 returns the parent OP of o, if it has a parent. Returns NULL otherwise.
1199 (Currently perl must be built with C<-DPERL_OP_PARENT> for this feature to
1206 Perl_op_parent(OP *o)
1208 PERL_ARGS_ASSERT_OP_PARENT;
1209 #ifdef PERL_OP_PARENT
1210 while (OP_HAS_SIBLING(o))
1212 return o->op_sibling;
1220 /* replace the sibling following start with a new UNOP, which becomes
1221 * the parent of the original sibling; e.g.
1223 * op_sibling_newUNOP(P, A, unop-args...)
1231 * where U is the new UNOP.
1233 * parent and start args are the same as for op_sibling_splice();
1234 * type and flags args are as newUNOP().
1236 * Returns the new UNOP.
1240 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1244 kid = op_sibling_splice(parent, start, 1, NULL);
1245 newop = newUNOP(type, flags, kid);
1246 op_sibling_splice(parent, start, 0, newop);
1251 /* lowest-level newLOGOP-style function - just allocates and populates
1252 * the struct. Higher-level stuff should be done by S_new_logop() /
1253 * newLOGOP(). This function exists mainly to avoid op_first assignment
1254 * being spread throughout this file.
1258 S_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1263 NewOp(1101, logop, 1, LOGOP);
1264 CHANGE_TYPE(logop, type);
1265 logop->op_first = first;
1266 logop->op_other = other;
1267 logop->op_flags = OPf_KIDS;
1268 while (kid && OP_HAS_SIBLING(kid))
1269 kid = OP_SIBLING(kid);
1271 kid->op_lastsib = 1;
1272 #ifdef PERL_OP_PARENT
1273 kid->op_sibling = (OP*)logop;
1280 /* Contextualizers */
1283 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1285 Applies a syntactic context to an op tree representing an expression.
1286 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
1287 or C<G_VOID> to specify the context to apply. The modified op tree
1294 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1296 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1298 case G_SCALAR: return scalar(o);
1299 case G_ARRAY: return list(o);
1300 case G_VOID: return scalarvoid(o);
1302 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1309 =for apidoc Am|OP*|op_linklist|OP *o
1310 This function is the implementation of the L</LINKLIST> macro. It should
1311 not be called directly.
1317 Perl_op_linklist(pTHX_ OP *o)
1321 PERL_ARGS_ASSERT_OP_LINKLIST;
1326 /* establish postfix order */
1327 first = cUNOPo->op_first;
1330 o->op_next = LINKLIST(first);
1333 OP *sibl = OP_SIBLING(kid);
1335 kid->op_next = LINKLIST(sibl);
1350 S_scalarkids(pTHX_ OP *o)
1352 if (o && o->op_flags & OPf_KIDS) {
1354 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1361 S_scalarboolean(pTHX_ OP *o)
1363 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1365 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
1366 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
1367 if (ckWARN(WARN_SYNTAX)) {
1368 const line_t oldline = CopLINE(PL_curcop);
1370 if (PL_parser && PL_parser->copline != NOLINE) {
1371 /* This ensures that warnings are reported at the first line
1372 of the conditional, not the last. */
1373 CopLINE_set(PL_curcop, PL_parser->copline);
1375 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1376 CopLINE_set(PL_curcop, oldline);
1383 S_op_varname(pTHX_ const OP *o)
1386 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1387 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1389 const char funny = o->op_type == OP_PADAV
1390 || o->op_type == OP_RV2AV ? '@' : '%';
1391 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1393 if (cUNOPo->op_first->op_type != OP_GV
1394 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1396 return varname(gv, funny, 0, NULL, 0, 1);
1399 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, 1);
1404 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1405 { /* or not so pretty :-) */
1406 if (o->op_type == OP_CONST) {
1408 if (SvPOK(*retsv)) {
1410 *retsv = sv_newmortal();
1411 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1412 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1414 else if (!SvOK(*retsv))
1417 else *retpv = "...";
1421 S_scalar_slice_warning(pTHX_ const OP *o)
1425 o->op_type == OP_HSLICE ? '{' : '[';
1427 o->op_type == OP_HSLICE ? '}' : ']';
1429 SV *keysv = NULL; /* just to silence compiler warnings */
1430 const char *key = NULL;
1432 if (!(o->op_private & OPpSLICEWARNING))
1434 if (PL_parser && PL_parser->error_count)
1435 /* This warning can be nonsensical when there is a syntax error. */
1438 kid = cLISTOPo->op_first;
1439 kid = OP_SIBLING(kid); /* get past pushmark */
1440 /* weed out false positives: any ops that can return lists */
1441 switch (kid->op_type) {
1470 /* Don't warn if we have a nulled list either. */
1471 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1474 assert(OP_SIBLING(kid));
1475 name = S_op_varname(aTHX_ OP_SIBLING(kid));
1476 if (!name) /* XS module fiddling with the op tree */
1478 S_op_pretty(aTHX_ kid, &keysv, &key);
1479 assert(SvPOK(name));
1480 sv_chop(name,SvPVX(name)+1);
1482 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1483 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1484 "Scalar value @%"SVf"%c%s%c better written as $%"SVf
1486 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1487 lbrack, key, rbrack);
1489 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1490 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1491 "Scalar value @%"SVf"%c%"SVf"%c better written as $%"
1493 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1494 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1498 Perl_scalar(pTHX_ OP *o)
1502 /* assumes no premature commitment */
1503 if (!o || (PL_parser && PL_parser->error_count)
1504 || (o->op_flags & OPf_WANT)
1505 || o->op_type == OP_RETURN)
1510 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1512 switch (o->op_type) {
1514 scalar(cBINOPo->op_first);
1515 if (o->op_private & OPpREPEAT_DOLIST) {
1516 kid = cLISTOPx(cUNOPo->op_first)->op_first;
1517 assert(kid->op_type == OP_PUSHMARK);
1518 if (OP_HAS_SIBLING(kid) && !OP_HAS_SIBLING(OP_SIBLING(kid))) {
1519 op_null(cLISTOPx(cUNOPo->op_first)->op_first);
1520 o->op_private &=~ OPpREPEAT_DOLIST;
1527 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1537 if (o->op_flags & OPf_KIDS) {
1538 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid))
1544 kid = cLISTOPo->op_first;
1546 kid = OP_SIBLING(kid);
1549 OP *sib = OP_SIBLING(kid);
1550 if (sib && kid->op_type != OP_LEAVEWHEN)
1556 PL_curcop = &PL_compiling;
1561 kid = cLISTOPo->op_first;
1564 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1569 /* Warn about scalar context */
1570 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1571 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1574 const char *key = NULL;
1576 /* This warning can be nonsensical when there is a syntax error. */
1577 if (PL_parser && PL_parser->error_count)
1580 if (!ckWARN(WARN_SYNTAX)) break;
1582 kid = cLISTOPo->op_first;
1583 kid = OP_SIBLING(kid); /* get past pushmark */
1584 assert(OP_SIBLING(kid));
1585 name = S_op_varname(aTHX_ OP_SIBLING(kid));
1586 if (!name) /* XS module fiddling with the op tree */
1588 S_op_pretty(aTHX_ kid, &keysv, &key);
1589 assert(SvPOK(name));
1590 sv_chop(name,SvPVX(name)+1);
1592 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1593 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1594 "%%%"SVf"%c%s%c in scalar context better written "
1596 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1597 lbrack, key, rbrack);
1599 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1600 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1601 "%%%"SVf"%c%"SVf"%c in scalar context better "
1602 "written as $%"SVf"%c%"SVf"%c",
1603 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1604 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1611 Perl_scalarvoid(pTHX_ OP *arg)
1617 SSize_t defer_stack_alloc = 0;
1618 SSize_t defer_ix = -1;
1619 OP **defer_stack = NULL;
1622 PERL_ARGS_ASSERT_SCALARVOID;
1625 SV *useless_sv = NULL;
1626 const char* useless = NULL;
1628 if (o->op_type == OP_NEXTSTATE
1629 || o->op_type == OP_DBSTATE
1630 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1631 || o->op_targ == OP_DBSTATE)))
1632 PL_curcop = (COP*)o; /* for warning below */
1634 /* assumes no premature commitment */
1635 want = o->op_flags & OPf_WANT;
1636 if ((want && want != OPf_WANT_SCALAR)
1637 || (PL_parser && PL_parser->error_count)
1638 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1643 if ((o->op_private & OPpTARGET_MY)
1644 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1646 /* newASSIGNOP has already applied scalar context, which we
1647 leave, as if this op is inside SASSIGN. */
1651 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1653 switch (o->op_type) {
1655 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1659 if (o->op_flags & OPf_STACKED)
1663 if (o->op_private == 4)
1698 case OP_GETSOCKNAME:
1699 case OP_GETPEERNAME:
1704 case OP_GETPRIORITY:
1729 useless = OP_DESC(o);
1739 case OP_AELEMFAST_LEX:
1743 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1744 /* Otherwise it's "Useless use of grep iterator" */
1745 useless = OP_DESC(o);
1749 kid = cLISTOPo->op_first;
1750 if (kid && kid->op_type == OP_PUSHRE
1752 && !(o->op_flags & OPf_STACKED)
1754 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
1756 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
1759 useless = OP_DESC(o);
1763 kid = cUNOPo->op_first;
1764 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1765 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1768 useless = "negative pattern binding (!~)";
1772 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1773 useless = "non-destructive substitution (s///r)";
1777 useless = "non-destructive transliteration (tr///r)";
1784 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1785 (!OP_HAS_SIBLING(o) || OP_SIBLING(o)->op_type != OP_READLINE))
1786 useless = "a variable";
1791 if (cSVOPo->op_private & OPpCONST_STRICT)
1792 no_bareword_allowed(o);
1794 if (ckWARN(WARN_VOID)) {
1796 /* don't warn on optimised away booleans, eg
1797 * use constant Foo, 5; Foo || print; */
1798 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1800 /* the constants 0 and 1 are permitted as they are
1801 conventionally used as dummies in constructs like
1802 1 while some_condition_with_side_effects; */
1803 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
1805 else if (SvPOK(sv)) {
1806 SV * const dsv = newSVpvs("");
1808 = Perl_newSVpvf(aTHX_
1810 pv_pretty(dsv, SvPVX_const(sv),
1811 SvCUR(sv), 32, NULL, NULL,
1813 | PERL_PV_ESCAPE_NOCLEAR
1814 | PERL_PV_ESCAPE_UNI_DETECT));
1815 SvREFCNT_dec_NN(dsv);
1817 else if (SvOK(sv)) {
1818 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%"SVf")", SVfARG(sv));
1821 useless = "a constant (undef)";
1824 op_null(o); /* don't execute or even remember it */
1828 CHANGE_TYPE(o, OP_PREINC); /* pre-increment is faster */
1832 CHANGE_TYPE(o, OP_PREDEC); /* pre-decrement is faster */
1836 CHANGE_TYPE(o, OP_I_PREINC); /* pre-increment is faster */
1840 CHANGE_TYPE(o, OP_I_PREDEC); /* pre-decrement is faster */
1845 UNOP *refgen, *rv2cv;
1848 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
1851 rv2gv = ((BINOP *)o)->op_last;
1852 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
1855 refgen = (UNOP *)((BINOP *)o)->op_first;
1857 if (!refgen || (refgen->op_type != OP_REFGEN
1858 && refgen->op_type != OP_SREFGEN))
1861 exlist = (LISTOP *)refgen->op_first;
1862 if (!exlist || exlist->op_type != OP_NULL
1863 || exlist->op_targ != OP_LIST)
1866 if (exlist->op_first->op_type != OP_PUSHMARK
1867 && exlist->op_first != exlist->op_last)
1870 rv2cv = (UNOP*)exlist->op_last;
1872 if (rv2cv->op_type != OP_RV2CV)
1875 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
1876 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
1877 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
1879 o->op_private |= OPpASSIGN_CV_TO_GV;
1880 rv2gv->op_private |= OPpDONT_INIT_GV;
1881 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
1893 kid = cLOGOPo->op_first;
1894 if (kid->op_type == OP_NOT
1895 && (kid->op_flags & OPf_KIDS)) {
1896 if (o->op_type == OP_AND) {
1897 CHANGE_TYPE(o, OP_OR);
1899 CHANGE_TYPE(o, OP_AND);
1909 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1910 if (!(kid->op_flags & OPf_KIDS))
1917 if (o->op_flags & OPf_STACKED)
1924 if (!(o->op_flags & OPf_KIDS))
1935 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1936 if (!(kid->op_flags & OPf_KIDS))
1942 /* If the first kid after pushmark is something that the padrange
1943 optimisation would reject, then null the list and the pushmark.
1945 if ((kid = cLISTOPo->op_first)->op_type == OP_PUSHMARK
1946 && ( !(kid = OP_SIBLING(kid))
1947 || ( kid->op_type != OP_PADSV
1948 && kid->op_type != OP_PADAV
1949 && kid->op_type != OP_PADHV)
1950 || kid->op_private & ~OPpLVAL_INTRO
1951 || !(kid = OP_SIBLING(kid))
1952 || ( kid->op_type != OP_PADSV
1953 && kid->op_type != OP_PADAV
1954 && kid->op_type != OP_PADHV)
1955 || kid->op_private & ~OPpLVAL_INTRO)
1957 op_null(cUNOPo->op_first); /* NULL the pushmark */
1958 op_null(o); /* NULL the list */
1970 /* mortalise it, in case warnings are fatal. */
1971 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
1972 "Useless use of %"SVf" in void context",
1973 SVfARG(sv_2mortal(useless_sv)));
1976 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
1977 "Useless use of %s in void context",
1980 } while ( (o = POP_DEFERRED_OP()) );
1982 Safefree(defer_stack);
1988 S_listkids(pTHX_ OP *o)
1990 if (o && o->op_flags & OPf_KIDS) {
1992 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1999 Perl_list(pTHX_ OP *o)
2003 /* assumes no premature commitment */
2004 if (!o || (o->op_flags & OPf_WANT)
2005 || (PL_parser && PL_parser->error_count)
2006 || o->op_type == OP_RETURN)
2011 if ((o->op_private & OPpTARGET_MY)
2012 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2014 return o; /* As if inside SASSIGN */
2017 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
2019 switch (o->op_type) {
2021 list(cBINOPo->op_first);
2024 if (o->op_private & OPpREPEAT_DOLIST
2025 && !(o->op_flags & OPf_STACKED))
2027 list(cBINOPo->op_first);
2028 kid = cBINOPo->op_last;
2029 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
2030 && SvIVX(kSVOP_sv) == 1)
2032 op_null(o); /* repeat */
2033 op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
2035 op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
2042 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
2050 if (!(o->op_flags & OPf_KIDS))
2052 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
2053 list(cBINOPo->op_first);
2054 return gen_constant_list(o);
2060 if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
2061 op_null(cUNOPo->op_first); /* NULL the pushmark */
2062 op_null(o); /* NULL the list */
2067 kid = cLISTOPo->op_first;
2069 kid = OP_SIBLING(kid);
2072 OP *sib = OP_SIBLING(kid);
2073 if (sib && kid->op_type != OP_LEAVEWHEN)
2079 PL_curcop = &PL_compiling;
2083 kid = cLISTOPo->op_first;
2090 S_scalarseq(pTHX_ OP *o)
2093 const OPCODE type = o->op_type;
2095 if (type == OP_LINESEQ || type == OP_SCOPE ||
2096 type == OP_LEAVE || type == OP_LEAVETRY)
2099 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2100 if (OP_HAS_SIBLING(kid)) {
2104 PL_curcop = &PL_compiling;
2106 o->op_flags &= ~OPf_PARENS;
2107 if (PL_hints & HINT_BLOCK_SCOPE)
2108 o->op_flags |= OPf_PARENS;
2111 o = newOP(OP_STUB, 0);
2116 S_modkids(pTHX_ OP *o, I32 type)
2118 if (o && o->op_flags & OPf_KIDS) {
2120 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2121 op_lvalue(kid, type);
2127 =for apidoc finalize_optree
2129 This function finalizes the optree. Should be called directly after
2130 the complete optree is built. It does some additional
2131 checking which can't be done in the normal ck_xxx functions and makes
2132 the tree thread-safe.
2137 Perl_finalize_optree(pTHX_ OP* o)
2139 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
2142 SAVEVPTR(PL_curcop);
2150 /* Relocate sv to the pad for thread safety.
2151 * Despite being a "constant", the SV is written to,
2152 * for reference counts, sv_upgrade() etc. */
2153 PERL_STATIC_INLINE void
2154 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
2157 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
2159 ix = pad_alloc(OP_CONST, SVf_READONLY);
2160 SvREFCNT_dec(PAD_SVl(ix));
2161 PAD_SETSV(ix, *svp);
2162 /* XXX I don't know how this isn't readonly already. */
2163 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
2171 S_finalize_op(pTHX_ OP* o)
2173 PERL_ARGS_ASSERT_FINALIZE_OP;
2176 switch (o->op_type) {
2179 PL_curcop = ((COP*)o); /* for warnings */
2182 if (OP_HAS_SIBLING(o)) {
2183 OP *sib = OP_SIBLING(o);
2184 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
2185 && ckWARN(WARN_EXEC)
2186 && OP_HAS_SIBLING(sib))
2188 const OPCODE type = OP_SIBLING(sib)->op_type;
2189 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
2190 const line_t oldline = CopLINE(PL_curcop);
2191 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
2192 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2193 "Statement unlikely to be reached");
2194 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2195 "\t(Maybe you meant system() when you said exec()?)\n");
2196 CopLINE_set(PL_curcop, oldline);
2203 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
2204 GV * const gv = cGVOPo_gv;
2205 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
2206 /* XXX could check prototype here instead of just carping */
2207 SV * const sv = sv_newmortal();
2208 gv_efullname3(sv, gv, NULL);
2209 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
2210 "%"SVf"() called too early to check prototype",
2217 if (cSVOPo->op_private & OPpCONST_STRICT)
2218 no_bareword_allowed(o);
2222 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
2227 /* Relocate all the METHOP's SVs to the pad for thread safety. */
2228 case OP_METHOD_NAMED:
2229 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
2241 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
2244 rop = (UNOP*)((BINOP*)o)->op_first;
2249 S_scalar_slice_warning(aTHX_ o);
2253 kid = OP_SIBLING(cLISTOPo->op_first);
2254 if (/* I bet there's always a pushmark... */
2255 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
2256 && OP_TYPE_ISNT_NN(kid, OP_CONST))
2261 key_op = (SVOP*)(kid->op_type == OP_CONST
2263 : OP_SIBLING(kLISTOP->op_first));
2265 rop = (UNOP*)((LISTOP*)o)->op_last;
2268 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
2270 else if (rop->op_first->op_type == OP_PADSV)
2271 /* @$hash{qw(keys here)} */
2272 rop = (UNOP*)rop->op_first;
2274 /* @{$hash}{qw(keys here)} */
2275 if (rop->op_first->op_type == OP_SCOPE
2276 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2278 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2284 lexname = NULL; /* just to silence compiler warnings */
2285 fields = NULL; /* just to silence compiler warnings */
2289 && (lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE),
2290 SvPAD_TYPED(lexname))
2291 && (fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE))
2292 && isGV(*fields) && GvHV(*fields);
2294 key_op = (SVOP*)OP_SIBLING(key_op)) {
2296 if (key_op->op_type != OP_CONST)
2298 svp = cSVOPx_svp(key_op);
2300 /* Make the CONST have a shared SV */
2301 if ((!SvIsCOW_shared_hash(sv = *svp))
2302 && SvTYPE(sv) < SVt_PVMG && SvOK(sv) && !SvROK(sv)) {
2304 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2305 SV *nsv = newSVpvn_share(key,
2306 SvUTF8(sv) ? -keylen : keylen, 0);
2307 SvREFCNT_dec_NN(sv);
2312 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0)) {
2313 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
2314 "in variable %"SVf" of type %"HEKf,
2315 SVfARG(*svp), SVfARG(lexname),
2316 HEKfARG(HvNAME_HEK(SvSTASH(lexname))));
2322 S_scalar_slice_warning(aTHX_ o);
2326 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
2327 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
2334 if (o->op_flags & OPf_KIDS) {
2338 /* check that op_last points to the last sibling, and that
2339 * the last op_sibling field points back to the parent, and
2340 * that the only ops with KIDS are those which are entitled to
2342 U32 type = o->op_type;
2346 if (type == OP_NULL) {
2348 /* ck_glob creates a null UNOP with ex-type GLOB
2349 * (which is a list op. So pretend it wasn't a listop */
2350 if (type == OP_GLOB)
2353 family = PL_opargs[type] & OA_CLASS_MASK;
2355 has_last = ( family == OA_BINOP
2356 || family == OA_LISTOP
2357 || family == OA_PMOP
2358 || family == OA_LOOP
2360 assert( has_last /* has op_first and op_last, or ...
2361 ... has (or may have) op_first: */
2362 || family == OA_UNOP
2363 || family == OA_LOGOP
2364 || family == OA_BASEOP_OR_UNOP
2365 || family == OA_FILESTATOP
2366 || family == OA_LOOPEXOP
2367 || family == OA_METHOP
2368 /* I don't know why SASSIGN is tagged as OA_BASEOP - DAPM */
2369 || type == OP_SASSIGN
2370 || type == OP_CUSTOM
2371 || type == OP_NULL /* new_logop does this */
2373 /* XXX list form of 'x' is has a null op_last. This is wrong,
2374 * but requires too much hacking (e.g. in Deparse) to fix for
2376 if (type == OP_REPEAT && (o->op_private & OPpREPEAT_DOLIST)) {
2381 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2382 # ifdef PERL_OP_PARENT
2383 if (!OP_HAS_SIBLING(kid)) {
2385 assert(kid == cLISTOPo->op_last);
2386 assert(kid->op_sibling == o);
2389 if (OP_HAS_SIBLING(kid)) {
2390 assert(!kid->op_lastsib);
2393 assert(kid->op_lastsib);
2395 assert(kid == cLISTOPo->op_last);
2401 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid))
2407 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
2409 Propagate lvalue ("modifiable") context to an op and its children.
2410 I<type> represents the context type, roughly based on the type of op that
2411 would do the modifying, although C<local()> is represented by OP_NULL,
2412 because it has no op type of its own (it is signalled by a flag on
2415 This function detects things that can't be modified, such as C<$x+1>, and
2416 generates errors for them. For example, C<$x+1 = 2> would cause it to be
2417 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
2419 It also flags things that need to behave specially in an lvalue context,
2420 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
2426 S_mark_padname_lvalue(pTHX_ PADNAME *pn)
2429 PadnameLVALUE_on(pn);
2430 while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
2433 assert(CvPADLIST(cv));
2435 PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
2436 assert(PadnameLEN(pn));
2437 PadnameLVALUE_on(pn);
2442 S_vivifies(const OPCODE type)
2445 case OP_RV2AV: case OP_ASLICE:
2446 case OP_RV2HV: case OP_KVASLICE:
2447 case OP_RV2SV: case OP_HSLICE:
2448 case OP_AELEMFAST: case OP_KVHSLICE:
2457 S_lvref(pTHX_ OP *o, I32 type)
2461 switch (o->op_type) {
2463 for (kid = OP_SIBLING(cUNOPo->op_first); kid;
2464 kid = OP_SIBLING(kid))
2465 S_lvref(aTHX_ kid, type);
2470 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2471 o->op_flags |= OPf_STACKED;
2472 if (o->op_flags & OPf_PARENS) {
2473 if (o->op_private & OPpLVAL_INTRO) {
2474 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2475 "localized parenthesized array in list assignment"));
2479 CHANGE_TYPE(o, OP_LVAVREF);
2480 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
2481 o->op_flags |= OPf_MOD|OPf_REF;
2484 o->op_private |= OPpLVREF_AV;
2487 kid = cUNOPo->op_first;
2488 if (kid->op_type == OP_NULL)
2489 kid = cUNOPx(kUNOP->op_first->op_sibling)
2491 o->op_private = OPpLVREF_CV;
2492 if (kid->op_type == OP_GV)
2493 o->op_flags |= OPf_STACKED;
2494 else if (kid->op_type == OP_PADCV) {
2495 o->op_targ = kid->op_targ;
2497 op_free(cUNOPo->op_first);
2498 cUNOPo->op_first = NULL;
2499 o->op_flags &=~ OPf_KIDS;
2504 if (o->op_flags & OPf_PARENS) {
2506 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2507 "parenthesized hash in list assignment"));
2510 o->op_private |= OPpLVREF_HV;
2514 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2515 o->op_flags |= OPf_STACKED;
2518 if (o->op_flags & OPf_PARENS) goto parenhash;
2519 o->op_private |= OPpLVREF_HV;
2522 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2525 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
2526 if (o->op_flags & OPf_PARENS) goto slurpy;
2527 o->op_private |= OPpLVREF_AV;
2531 o->op_private |= OPpLVREF_ELEM;
2532 o->op_flags |= OPf_STACKED;
2536 CHANGE_TYPE(o, OP_LVREFSLICE);
2537 o->op_private &= OPpLVAL_INTRO|OPpLVREF_ELEM;
2540 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2542 else if (!(o->op_flags & OPf_KIDS))
2544 if (o->op_targ != OP_LIST) {
2545 S_lvref(aTHX_ cBINOPo->op_first, type);
2550 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2551 assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
2552 S_lvref(aTHX_ kid, type);
2556 if (o->op_flags & OPf_PARENS)
2561 /* diag_listed_as: Can't modify reference to %s in %s assignment */
2562 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
2563 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
2569 CHANGE_TYPE(o, OP_LVREF);
2571 OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
2572 if (type == OP_ENTERLOOP)
2573 o->op_private |= OPpLVREF_ITER;
2577 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
2581 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
2584 if (!o || (PL_parser && PL_parser->error_count))
2587 if ((o->op_private & OPpTARGET_MY)
2588 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2593 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
2595 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
2597 switch (o->op_type) {
2602 if ((o->op_flags & OPf_PARENS))
2606 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
2607 !(o->op_flags & OPf_STACKED)) {
2608 CHANGE_TYPE(o, OP_RV2CV); /* entersub => rv2cv */
2609 assert(cUNOPo->op_first->op_type == OP_NULL);
2610 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
2613 else { /* lvalue subroutine call */
2614 o->op_private |= OPpLVAL_INTRO;
2615 PL_modcount = RETURN_UNLIMITED_NUMBER;
2616 if (type == OP_GREPSTART || type == OP_ENTERSUB
2617 || type == OP_REFGEN || type == OP_LEAVESUBLV) {
2618 /* Potential lvalue context: */
2619 o->op_private |= OPpENTERSUB_INARGS;
2622 else { /* Compile-time error message: */
2623 OP *kid = cUNOPo->op_first;
2627 if (kid->op_type != OP_PUSHMARK) {
2628 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
2630 "panic: unexpected lvalue entersub "
2631 "args: type/targ %ld:%"UVuf,
2632 (long)kid->op_type, (UV)kid->op_targ);
2633 kid = kLISTOP->op_first;
2635 while (OP_HAS_SIBLING(kid))
2636 kid = OP_SIBLING(kid);
2637 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
2638 break; /* Postpone until runtime */
2641 kid = kUNOP->op_first;
2642 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
2643 kid = kUNOP->op_first;
2644 if (kid->op_type == OP_NULL)
2646 "Unexpected constant lvalue entersub "
2647 "entry via type/targ %ld:%"UVuf,
2648 (long)kid->op_type, (UV)kid->op_targ);
2649 if (kid->op_type != OP_GV) {
2656 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
2657 ? MUTABLE_CV(SvRV(gv))
2668 if (flags & OP_LVALUE_NO_CROAK) return NULL;
2669 /* grep, foreach, subcalls, refgen */
2670 if (type == OP_GREPSTART || type == OP_ENTERSUB
2671 || type == OP_REFGEN || type == OP_LEAVESUBLV)
2673 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2674 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
2676 : (o->op_type == OP_ENTERSUB
2677 ? "non-lvalue subroutine call"
2679 type ? PL_op_desc[type] : "local"));
2692 case OP_RIGHT_SHIFT:
2701 if (!(o->op_flags & OPf_STACKED))
2707 if (o->op_flags & OPf_STACKED) {
2711 if (!(o->op_private & OPpREPEAT_DOLIST))
2714 const I32 mods = PL_modcount;
2715 modkids(cBINOPo->op_first, type);
2716 if (type != OP_AASSIGN)
2718 kid = cBINOPo->op_last;
2719 if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) {
2720 const IV iv = SvIV(kSVOP_sv);
2721 if (PL_modcount != RETURN_UNLIMITED_NUMBER)
2723 mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv);
2726 PL_modcount = RETURN_UNLIMITED_NUMBER;
2732 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
2733 op_lvalue(kid, type);
2738 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
2739 PL_modcount = RETURN_UNLIMITED_NUMBER;
2740 return o; /* Treat \(@foo) like ordinary list. */
2744 if (scalar_mod_type(o, type))
2746 ref(cUNOPo->op_first, o->op_type);
2753 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
2754 if (type == OP_LEAVESUBLV && (
2755 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
2756 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2758 o->op_private |= OPpMAYBE_LVSUB;
2762 PL_modcount = RETURN_UNLIMITED_NUMBER;
2766 if (type == OP_LEAVESUBLV)
2767 o->op_private |= OPpMAYBE_LVSUB;
2770 PL_hints |= HINT_BLOCK_SCOPE;
2771 if (type == OP_LEAVESUBLV)
2772 o->op_private |= OPpMAYBE_LVSUB;
2776 ref(cUNOPo->op_first, o->op_type);
2780 PL_hints |= HINT_BLOCK_SCOPE;
2790 case OP_AELEMFAST_LEX:
2797 PL_modcount = RETURN_UNLIMITED_NUMBER;
2798 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
2799 return o; /* Treat \(@foo) like ordinary list. */
2800 if (scalar_mod_type(o, type))
2802 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2803 && type == OP_LEAVESUBLV)
2804 o->op_private |= OPpMAYBE_LVSUB;
2808 if (!type) /* local() */
2809 Perl_croak(aTHX_ "Can't localize lexical variable %"SVf,
2810 PAD_COMPNAME_SV(o->op_targ));
2811 if (!(o->op_private & OPpLVAL_INTRO)
2812 || ( type != OP_SASSIGN && type != OP_AASSIGN
2813 && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) ))
2814 S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ));
2823 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
2827 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
2833 if (type == OP_LEAVESUBLV)
2834 o->op_private |= OPpMAYBE_LVSUB;
2835 if (o->op_flags & OPf_KIDS)
2836 op_lvalue(OP_SIBLING(cBINOPo->op_first), type);
2841 ref(cBINOPo->op_first, o->op_type);
2842 if (type == OP_ENTERSUB &&
2843 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
2844 o->op_private |= OPpLVAL_DEFER;
2845 if (type == OP_LEAVESUBLV)
2846 o->op_private |= OPpMAYBE_LVSUB;
2853 o->op_private |= OPpLVALUE;
2859 if (o->op_flags & OPf_KIDS)
2860 op_lvalue(cLISTOPo->op_last, type);
2865 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2867 else if (!(o->op_flags & OPf_KIDS))
2869 if (o->op_targ != OP_LIST) {
2870 op_lvalue(cBINOPo->op_first, type);
2876 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2877 /* elements might be in void context because the list is
2878 in scalar context or because they are attribute sub calls */
2879 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
2880 op_lvalue(kid, type);
2888 if (type == OP_LEAVESUBLV
2889 || !S_vivifies(cLOGOPo->op_first->op_type))
2890 op_lvalue(cLOGOPo->op_first, type);
2891 if (type == OP_LEAVESUBLV
2892 || !S_vivifies(OP_SIBLING(cLOGOPo->op_first)->op_type))
2893 op_lvalue(OP_SIBLING(cLOGOPo->op_first), type);
2897 if (type != OP_AASSIGN && type != OP_SASSIGN
2898 && type != OP_ENTERLOOP)
2900 /* Don’t bother applying lvalue context to the ex-list. */
2901 kid = cUNOPx(cUNOPo->op_first)->op_first;
2902 assert (!OP_HAS_SIBLING(kid));
2905 if (type != OP_AASSIGN) goto nomod;
2906 kid = cUNOPo->op_first;
2909 const U8 ec = PL_parser ? PL_parser->error_count : 0;
2910 S_lvref(aTHX_ kid, type);
2911 if (!PL_parser || PL_parser->error_count == ec) {
2912 if (!FEATURE_REFALIASING_IS_ENABLED)
2914 "Experimental aliasing via reference not enabled");
2915 Perl_ck_warner_d(aTHX_
2916 packWARN(WARN_EXPERIMENTAL__REFALIASING),
2917 "Aliasing via reference is experimental");
2920 if (o->op_type == OP_REFGEN)
2921 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
2926 kid = cLISTOPo->op_first;
2927 if (kid && kid->op_type == OP_PUSHRE &&
2929 || o->op_flags & OPf_STACKED
2931 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff
2933 || ((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv
2936 /* This is actually @array = split. */
2937 PL_modcount = RETURN_UNLIMITED_NUMBER;
2943 /* [20011101.069] File test operators interpret OPf_REF to mean that
2944 their argument is a filehandle; thus \stat(".") should not set
2946 if (type == OP_REFGEN &&
2947 PL_check[o->op_type] == Perl_ck_ftst)
2950 if (type != OP_LEAVESUBLV)
2951 o->op_flags |= OPf_MOD;
2953 if (type == OP_AASSIGN || type == OP_SASSIGN)
2954 o->op_flags |= OPf_SPECIAL|OPf_REF;
2955 else if (!type) { /* local() */
2958 o->op_private |= OPpLVAL_INTRO;
2959 o->op_flags &= ~OPf_SPECIAL;
2960 PL_hints |= HINT_BLOCK_SCOPE;
2965 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
2966 "Useless localization of %s", OP_DESC(o));
2969 else if (type != OP_GREPSTART && type != OP_ENTERSUB
2970 && type != OP_LEAVESUBLV)
2971 o->op_flags |= OPf_REF;
2976 S_scalar_mod_type(const OP *o, I32 type)
2981 if (o && o->op_type == OP_RV2GV)
3005 case OP_RIGHT_SHIFT:
3026 S_is_handle_constructor(const OP *o, I32 numargs)
3028 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
3030 switch (o->op_type) {
3038 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
3051 S_refkids(pTHX_ OP *o, I32 type)
3053 if (o && o->op_flags & OPf_KIDS) {
3055 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
3062 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
3067 PERL_ARGS_ASSERT_DOREF;
3069 if (!o || (PL_parser && PL_parser->error_count))
3072 switch (o->op_type) {
3074 if ((type == OP_EXISTS || type == OP_DEFINED) &&
3075 !(o->op_flags & OPf_STACKED)) {
3076 CHANGE_TYPE(o, OP_RV2CV); /* entersub => rv2cv */
3077 assert(cUNOPo->op_first->op_type == OP_NULL);
3078 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
3079 o->op_flags |= OPf_SPECIAL;
3081 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
3082 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3083 : type == OP_RV2HV ? OPpDEREF_HV
3085 o->op_flags |= OPf_MOD;
3091 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
3092 doref(kid, type, set_op_ref);
3095 if (type == OP_DEFINED)
3096 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3097 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3100 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3101 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3102 : type == OP_RV2HV ? OPpDEREF_HV
3104 o->op_flags |= OPf_MOD;
3111 o->op_flags |= OPf_REF;
3114 if (type == OP_DEFINED)
3115 o->op_flags |= OPf_SPECIAL; /* don't create GV */
3116 doref(cUNOPo->op_first, o->op_type, set_op_ref);
3122 o->op_flags |= OPf_REF;
3127 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
3129 doref(cBINOPo->op_first, type, set_op_ref);
3133 doref(cBINOPo->op_first, o->op_type, set_op_ref);
3134 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
3135 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
3136 : type == OP_RV2HV ? OPpDEREF_HV
3138 o->op_flags |= OPf_MOD;
3148 if (!(o->op_flags & OPf_KIDS))
3150 doref(cLISTOPo->op_last, type, set_op_ref);
3160 S_dup_attrlist(pTHX_ OP *o)
3164 PERL_ARGS_ASSERT_DUP_ATTRLIST;
3166 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
3167 * where the first kid is OP_PUSHMARK and the remaining ones
3168 * are OP_CONST. We need to push the OP_CONST values.
3170 if (o->op_type == OP_CONST)
3171 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
3173 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
3175 for (o = cLISTOPo->op_first; o; o = OP_SIBLING(o)) {
3176 if (o->op_type == OP_CONST)
3177 rop = op_append_elem(OP_LIST, rop,
3178 newSVOP(OP_CONST, o->op_flags,
3179 SvREFCNT_inc_NN(cSVOPo->op_sv)));
3186 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
3188 SV * const stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
3190 PERL_ARGS_ASSERT_APPLY_ATTRS;
3192 /* fake up C<use attributes $pkg,$rv,@attrs> */
3194 #define ATTRSMODULE "attributes"
3195 #define ATTRSMODULE_PM "attributes.pm"
3197 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3198 newSVpvs(ATTRSMODULE),
3200 op_prepend_elem(OP_LIST,
3201 newSVOP(OP_CONST, 0, stashsv),
3202 op_prepend_elem(OP_LIST,
3203 newSVOP(OP_CONST, 0,
3205 dup_attrlist(attrs))));
3209 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
3211 OP *pack, *imop, *arg;
3212 SV *meth, *stashsv, **svp;
3214 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
3219 assert(target->op_type == OP_PADSV ||
3220 target->op_type == OP_PADHV ||
3221 target->op_type == OP_PADAV);
3223 /* Ensure that attributes.pm is loaded. */
3224 /* Don't force the C<use> if we don't need it. */
3225 svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
3226 if (svp && *svp != &PL_sv_undef)
3227 NOOP; /* already in %INC */
3229 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
3230 newSVpvs(ATTRSMODULE), NULL);
3232 /* Need package name for method call. */
3233 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
3235 /* Build up the real arg-list. */
3236 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
3238 arg = newOP(OP_PADSV, 0);
3239 arg->op_targ = target->op_targ;
3240 arg = op_prepend_elem(OP_LIST,
3241 newSVOP(OP_CONST, 0, stashsv),
3242 op_prepend_elem(OP_LIST,
3243 newUNOP(OP_REFGEN, 0,
3244 op_lvalue(arg, OP_REFGEN)),
3245 dup_attrlist(attrs)));
3247 /* Fake up a method call to import */
3248 meth = newSVpvs_share("import");
3249 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
3250 op_append_elem(OP_LIST,
3251 op_prepend_elem(OP_LIST, pack, arg),
3252 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
3254 /* Combine the ops. */
3255 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
3259 =notfor apidoc apply_attrs_string
3261 Attempts to apply a list of attributes specified by the C<attrstr> and
3262 C<len> arguments to the subroutine identified by the C<cv> argument which
3263 is expected to be associated with the package identified by the C<stashpv>
3264 argument (see L<attributes>). It gets this wrong, though, in that it
3265 does not correctly identify the boundaries of the individual attribute
3266 specifications within C<attrstr>. This is not really intended for the
3267 public API, but has to be listed here for systems such as AIX which
3268 need an explicit export list for symbols. (It's called from XS code
3269 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
3270 to respect attribute syntax properly would be welcome.
3276 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
3277 const char *attrstr, STRLEN len)
3281 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
3284 len = strlen(attrstr);
3288 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
3290 const char * const sstr = attrstr;
3291 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
3292 attrs = op_append_elem(OP_LIST, attrs,
3293 newSVOP(OP_CONST, 0,
3294 newSVpvn(sstr, attrstr-sstr)));
3298 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3299 newSVpvs(ATTRSMODULE),
3300 NULL, op_prepend_elem(OP_LIST,
3301 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
3302 op_prepend_elem(OP_LIST,
3303 newSVOP(OP_CONST, 0,
3304 newRV(MUTABLE_SV(cv))),
3309 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name)
3311 OP *new_proto = NULL;
3316 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
3322 if (o->op_type == OP_CONST) {
3323 pv = SvPV(cSVOPo_sv, pvlen);
3324 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3325 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3326 SV ** const tmpo = cSVOPx_svp(o);
3327 SvREFCNT_dec(cSVOPo_sv);
3332 } else if (o->op_type == OP_LIST) {
3334 assert(o->op_flags & OPf_KIDS);
3335 lasto = cLISTOPo->op_first;
3336 assert(lasto->op_type == OP_PUSHMARK);
3337 for (o = OP_SIBLING(lasto); o; o = OP_SIBLING(o)) {
3338 if (o->op_type == OP_CONST) {
3339 pv = SvPV(cSVOPo_sv, pvlen);
3340 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3341 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3342 SV ** const tmpo = cSVOPx_svp(o);
3343 SvREFCNT_dec(cSVOPo_sv);
3345 if (new_proto && ckWARN(WARN_MISC)) {
3347 const char * newp = SvPV(cSVOPo_sv, new_len);
3348 Perl_warner(aTHX_ packWARN(WARN_MISC),
3349 "Attribute prototype(%"UTF8f") discards earlier prototype attribute in same sub",
3350 UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
3356 /* excise new_proto from the list */
3357 op_sibling_splice(*attrs, lasto, 1, NULL);
3364 /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
3365 would get pulled in with no real need */
3366 if (!OP_HAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
3375 svname = sv_newmortal();
3376 gv_efullname3(svname, name, NULL);
3378 else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
3379 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
3381 svname = (SV *)name;
3382 if (ckWARN(WARN_ILLEGALPROTO))
3383 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE);
3384 if (*proto && ckWARN(WARN_PROTOTYPE)) {
3385 STRLEN old_len, new_len;
3386 const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
3387 const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
3389 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3390 "Prototype '%"UTF8f"' overridden by attribute 'prototype(%"UTF8f")'"
3392 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
3393 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
3403 S_cant_declare(pTHX_ OP *o)
3405 if (o->op_type == OP_NULL
3406 && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
3407 o = cUNOPo->op_first;
3408 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
3409 o->op_type == OP_NULL
3410 && o->op_flags & OPf_SPECIAL
3413 PL_parser->in_my == KEY_our ? "our" :
3414 PL_parser->in_my == KEY_state ? "state" :
3419 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
3422 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
3424 PERL_ARGS_ASSERT_MY_KID;
3426 if (!o || (PL_parser && PL_parser->error_count))
3431 if (type == OP_LIST) {
3433 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
3434 my_kid(kid, attrs, imopsp);
3436 } else if (type == OP_UNDEF || type == OP_STUB) {
3438 } else if (type == OP_RV2SV || /* "our" declaration */
3440 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
3441 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
3442 S_cant_declare(aTHX_ o);
3444 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
3446 PL_parser->in_my = FALSE;
3447 PL_parser->in_my_stash = NULL;
3448 apply_attrs(GvSTASH(gv),
3449 (type == OP_RV2SV ? GvSV(gv) :
3450 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
3451 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
3454 o->op_private |= OPpOUR_INTRO;
3457 else if (type != OP_PADSV &&
3460 type != OP_PUSHMARK)
3462 S_cant_declare(aTHX_ o);
3465 else if (attrs && type != OP_PUSHMARK) {
3469 PL_parser->in_my = FALSE;
3470 PL_parser->in_my_stash = NULL;
3472 /* check for C<my Dog $spot> when deciding package */
3473 stash = PAD_COMPNAME_TYPE(o->op_targ);
3475 stash = PL_curstash;
3476 apply_attrs_my(stash, o, attrs, imopsp);
3478 o->op_flags |= OPf_MOD;
3479 o->op_private |= OPpLVAL_INTRO;
3481 o->op_private |= OPpPAD_STATE;
3486 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
3489 int maybe_scalar = 0;
3491 PERL_ARGS_ASSERT_MY_ATTRS;
3493 /* [perl #17376]: this appears to be premature, and results in code such as
3494 C< our(%x); > executing in list mode rather than void mode */
3496 if (o->op_flags & OPf_PARENS)
3506 o = my_kid(o, attrs, &rops);
3508 if (maybe_scalar && o->op_type == OP_PADSV) {
3509 o = scalar(op_append_list(OP_LIST, rops, o));
3510 o->op_private |= OPpLVAL_INTRO;
3513 /* The listop in rops might have a pushmark at the beginning,
3514 which will mess up list assignment. */
3515 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
3516 if (rops->op_type == OP_LIST &&
3517 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
3519 OP * const pushmark = lrops->op_first;
3520 /* excise pushmark */
3521 op_sibling_splice(rops, NULL, 1, NULL);
3524 o = op_append_list(OP_LIST, o, rops);
3527 PL_parser->in_my = FALSE;
3528 PL_parser->in_my_stash = NULL;
3533 Perl_sawparens(pTHX_ OP *o)
3535 PERL_UNUSED_CONTEXT;
3537 o->op_flags |= OPf_PARENS;
3542 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
3546 const OPCODE ltype = left->op_type;
3547 const OPCODE rtype = right->op_type;
3549 PERL_ARGS_ASSERT_BIND_MATCH;
3551 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
3552 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
3554 const char * const desc
3556 rtype == OP_SUBST || rtype == OP_TRANS
3557 || rtype == OP_TRANSR
3559 ? (int)rtype : OP_MATCH];
3560 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
3562 S_op_varname(aTHX_ left);
3564 Perl_warner(aTHX_ packWARN(WARN_MISC),
3565 "Applying %s to %"SVf" will act on scalar(%"SVf")",
3566 desc, SVfARG(name), SVfARG(name));
3568 const char * const sample = (isary
3569 ? "@array" : "%hash");
3570 Perl_warner(aTHX_ packWARN(WARN_MISC),
3571 "Applying %s to %s will act on scalar(%s)",
3572 desc, sample, sample);
3576 if (rtype == OP_CONST &&
3577 cSVOPx(right)->op_private & OPpCONST_BARE &&
3578 cSVOPx(right)->op_private & OPpCONST_STRICT)
3580 no_bareword_allowed(right);
3583 /* !~ doesn't make sense with /r, so error on it for now */
3584 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
3586 /* diag_listed_as: Using !~ with %s doesn't make sense */
3587 yyerror("Using !~ with s///r doesn't make sense");
3588 if (rtype == OP_TRANSR && type == OP_NOT)
3589 /* diag_listed_as: Using !~ with %s doesn't make sense */
3590 yyerror("Using !~ with tr///r doesn't make sense");
3592 ismatchop = (rtype == OP_MATCH ||
3593 rtype == OP_SUBST ||
3594 rtype == OP_TRANS || rtype == OP_TRANSR)
3595 && !(right->op_flags & OPf_SPECIAL);
3596 if (ismatchop && right->op_private & OPpTARGET_MY) {
3598 right->op_private &= ~OPpTARGET_MY;
3600 if (!(right->op_flags & OPf_STACKED) && !right->op_targ && ismatchop) {
3601 if (left->op_type == OP_PADSV
3602 && !(left->op_private & OPpLVAL_INTRO))
3604 right->op_targ = left->op_targ;
3609 right->op_flags |= OPf_STACKED;
3610 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
3611 ! (rtype == OP_TRANS &&
3612 right->op_private & OPpTRANS_IDENTICAL) &&
3613 ! (rtype == OP_SUBST &&
3614 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
3615 left = op_lvalue(left, rtype);
3616 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
3617 o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
3619 o = op_prepend_elem(rtype, scalar(left), right);
3622 return newUNOP(OP_NOT, 0, scalar(o));
3626 return bind_match(type, left,
3627 pmruntime(newPMOP(OP_MATCH, 0), right, 0, 0));
3631 Perl_invert(pTHX_ OP *o)
3635 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
3639 =for apidoc Amx|OP *|op_scope|OP *o
3641 Wraps up an op tree with some additional ops so that at runtime a dynamic
3642 scope will be created. The original ops run in the new dynamic scope,
3643 and then, provided that they exit normally, the scope will be unwound.
3644 The additional ops used to create and unwind the dynamic scope will
3645 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
3646 instead if the ops are simple enough to not need the full dynamic scope
3653 Perl_op_scope(pTHX_ OP *o)
3657 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
3658 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
3659 CHANGE_TYPE(o, OP_LEAVE);
3661 else if (o->op_type == OP_LINESEQ) {
3663 CHANGE_TYPE(o, OP_SCOPE);
3664 kid = ((LISTOP*)o)->op_first;
3665 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
3668 /* The following deals with things like 'do {1 for 1}' */
3669 kid = OP_SIBLING(kid);
3671 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
3676 o = newLISTOP(OP_SCOPE, 0, o, NULL);
3682 Perl_op_unscope(pTHX_ OP *o)
3684 if (o && o->op_type == OP_LINESEQ) {
3685 OP *kid = cLISTOPo->op_first;
3686 for(; kid; kid = OP_SIBLING(kid))
3687 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
3694 =for apidoc Am|int|block_start|int full
3696 Handles compile-time scope entry.
3697 Arranges for hints to be restored on block
3698 exit and also handles pad sequence numbers to make lexical variables scope
3699 right. Returns a savestack index for use with C<block_end>.
3705 Perl_block_start(pTHX_ int full)
3707 const int retval = PL_savestack_ix;
3709 PL_compiling.cop_seq = PL_cop_seqmax;
3711 pad_block_start(full);
3713 PL_hints &= ~HINT_BLOCK_SCOPE;
3714 SAVECOMPILEWARNINGS();
3715 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
3716 SAVEI32(PL_compiling.cop_seq);
3717 PL_compiling.cop_seq = 0;
3719 CALL_BLOCK_HOOKS(bhk_start, full);
3725 =for apidoc Am|OP *|block_end|I32 floor|OP *seq
3727 Handles compile-time scope exit. I<floor>
3728 is the savestack index returned by
3729 C<block_start>, and I<seq> is the body of the block. Returns the block,
3736 Perl_block_end(pTHX_ I32 floor, OP *seq)
3738 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
3739 OP* retval = scalarseq(seq);
3742 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
3746 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
3750 /* pad_leavemy has created a sequence of introcv ops for all my
3751 subs declared in the block. We have to replicate that list with
3752 clonecv ops, to deal with this situation:
3757 sub s1 { state sub foo { \&s2 } }
3760 Originally, I was going to have introcv clone the CV and turn
3761 off the stale flag. Since &s1 is declared before &s2, the
3762 introcv op for &s1 is executed (on sub entry) before the one for
3763 &s2. But the &foo sub inside &s1 (which is cloned when &s1 is
3764 cloned, since it is a state sub) closes over &s2 and expects
3765 to see it in its outer CV’s pad. If the introcv op clones &s1,
3766 then &s2 is still marked stale. Since &s1 is not active, and
3767 &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia-
3768 ble will not stay shared’ warning. Because it is the same stub
3769 that will be used when the introcv op for &s2 is executed, clos-
3770 ing over it is safe. Hence, we have to turn off the stale flag
3771 on all lexical subs in the block before we clone any of them.
3772 Hence, having introcv clone the sub cannot work. So we create a
3773 list of ops like this:
3797 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
3798 OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
3799 for (;; kid = OP_SIBLING(kid)) {
3800 OP *newkid = newOP(OP_CLONECV, 0);
3801 newkid->op_targ = kid->op_targ;
3802 o = op_append_elem(OP_LINESEQ, o, newkid);
3803 if (kid == last) break;
3805 retval = op_prepend_elem(OP_LINESEQ, o, retval);
3808 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
3814 =head1 Compile-time scope hooks
3816 =for apidoc Aox||blockhook_register
3818 Register a set of hooks to be called when the Perl lexical scope changes
3819 at compile time. See L<perlguts/"Compile-time scope hooks">.
3825 Perl_blockhook_register(pTHX_ BHK *hk)
3827 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
3829 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
3833 Perl_newPROG(pTHX_ OP *o)
3835 PERL_ARGS_ASSERT_NEWPROG;
3842 PL_eval_root = newUNOP(OP_LEAVEEVAL,
3843 ((PL_in_eval & EVAL_KEEPERR)
3844 ? OPf_SPECIAL : 0), o);
3846 cx = &cxstack[cxstack_ix];
3847 assert(CxTYPE(cx) == CXt_EVAL);
3849 if ((cx->blk_gimme & G_WANT) == G_VOID)
3850 scalarvoid(PL_eval_root);
3851 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
3854 scalar(PL_eval_root);
3856 PL_eval_start = op_linklist(PL_eval_root);
3857 PL_eval_root->op_private |= OPpREFCOUNTED;
3858 OpREFCNT_set(PL_eval_root, 1);
3859 PL_eval_root->op_next = 0;
3860 i = PL_savestack_ix;
3863 CALL_PEEP(PL_eval_start);
3864 finalize_optree(PL_eval_root);
3865 S_prune_chain_head(&PL_eval_start);
3867 PL_savestack_ix = i;
3870 if (o->op_type == OP_STUB) {
3871 /* This block is entered if nothing is compiled for the main
3872 program. This will be the case for an genuinely empty main
3873 program, or one which only has BEGIN blocks etc, so already
3876 Historically (5.000) the guard above was !o. However, commit
3877 f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
3878 c71fccf11fde0068, changed perly.y so that newPROG() is now
3879 called with the output of block_end(), which returns a new
3880 OP_STUB for the case of an empty optree. ByteLoader (and
3881 maybe other things) also take this path, because they set up
3882 PL_main_start and PL_main_root directly, without generating an
3885 If the parsing the main program aborts (due to parse errors,
3886 or due to BEGIN or similar calling exit), then newPROG()
3887 isn't even called, and hence this code path and its cleanups
3888 are skipped. This shouldn't make a make a difference:
3889 * a non-zero return from perl_parse is a failure, and
3890 perl_destruct() should be called immediately.
3891 * however, if exit(0) is called during the parse, then
3892 perl_parse() returns 0, and perl_run() is called. As
3893 PL_main_start will be NULL, perl_run() will return
3894 promptly, and the exit code will remain 0.
3897 PL_comppad_name = 0;
3899 S_op_destroy(aTHX_ o);
3902 PL_main_root = op_scope(sawparens(scalarvoid(o)));
3903 PL_curcop = &PL_compiling;
3904 PL_main_start = LINKLIST(PL_main_root);
3905 PL_main_root->op_private |= OPpREFCOUNTED;
3906 OpREFCNT_set(PL_main_root, 1);
3907 PL_main_root->op_next = 0;
3908 CALL_PEEP(PL_main_start);
3909 finalize_optree(PL_main_root);
3910 S_prune_chain_head(&PL_main_start);
3911 cv_forget_slab(PL_compcv);
3914 /* Register with debugger */
3916 CV * const cv = get_cvs("DB::postponed", 0);
3920 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3922 call_sv(MUTABLE_SV(cv), G_DISCARD);
3929 Perl_localize(pTHX_ OP *o, I32 lex)
3931 PERL_ARGS_ASSERT_LOCALIZE;
3933 if (o->op_flags & OPf_PARENS)
3934 /* [perl #17376]: this appears to be premature, and results in code such as
3935 C< our(%x); > executing in list mode rather than void mode */
3942 if ( PL_parser->bufptr > PL_parser->oldbufptr
3943 && PL_parser->bufptr[-1] == ','
3944 && ckWARN(WARN_PARENTHESIS))
3946 char *s = PL_parser->bufptr;
3949 /* some heuristics to detect a potential error */
3950 while (*s && (strchr(", \t\n", *s)))
3954 if (*s && strchr("@$%*", *s) && *++s
3955 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
3958 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
3960 while (*s && (strchr(", \t\n", *s)))
3966 if (sigil && (*s == ';' || *s == '=')) {
3967 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
3968 "Parentheses missing around \"%s\" list",
3970 ? (PL_parser->in_my == KEY_our
3972 : PL_parser->in_my == KEY_state
3982 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
3983 PL_parser->in_my = FALSE;
3984 PL_parser->in_my_stash = NULL;
3989 Perl_jmaybe(pTHX_ OP *o)
3991 PERL_ARGS_ASSERT_JMAYBE;
3993 if (o->op_type == OP_LIST) {
3995 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
3996 o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
4001 PERL_STATIC_INLINE OP *
4002 S_op_std_init(pTHX_ OP *o)
4004 I32 type = o->op_type;
4006 PERL_ARGS_ASSERT_OP_STD_INIT;
4008 if (PL_opargs[type] & OA_RETSCALAR)
4010 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
4011 o->op_targ = pad_alloc(type, SVs_PADTMP);
4016 PERL_STATIC_INLINE OP *
4017 S_op_integerize(pTHX_ OP *o)
4019 I32 type = o->op_type;
4021 PERL_ARGS_ASSERT_OP_INTEGERIZE;
4023 /* integerize op. */
4024 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
4027 o->op_ppaddr = PL_ppaddr[++(o->op_type)];
4030 if (type == OP_NEGATE)
4031 /* XXX might want a ck_negate() for this */
4032 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
4038 S_fold_constants(pTHX_ OP *o)
4043 VOL I32 type = o->op_type;
4049 SV * const oldwarnhook = PL_warnhook;
4050 SV * const olddiehook = PL_diehook;
4052 U8 oldwarn = PL_dowarn;
4055 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
4057 if (!(PL_opargs[type] & OA_FOLDCONST))
4066 #ifdef USE_LOCALE_CTYPE
4067 if (IN_LC_COMPILETIME(LC_CTYPE))
4076 #ifdef USE_LOCALE_COLLATE
4077 if (IN_LC_COMPILETIME(LC_COLLATE))
4082 /* XXX what about the numeric ops? */
4083 #ifdef USE_LOCALE_NUMERIC
4084 if (IN_LC_COMPILETIME(LC_NUMERIC))
4089 if (!OP_HAS_SIBLING(cLISTOPo->op_first)
4090 || OP_SIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
4093 SV * const sv = cSVOPx_sv(OP_SIBLING(cLISTOPo->op_first));
4094 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
4096 const char *s = SvPVX_const(sv);
4097 while (s < SvEND(sv)) {
4098 if (isALPHA_FOLD_EQ(*s, 'p')) goto nope;
4105 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
4108 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
4109 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
4113 if (PL_parser && PL_parser->error_count)
4114 goto nope; /* Don't try to run w/ errors */
4116 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4117 const OPCODE type = curop->op_type;
4118 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
4120 type != OP_SCALAR &&
4122 type != OP_PUSHMARK)
4128 curop = LINKLIST(o);
4129 old_next = o->op_next;
4133 oldscope = PL_scopestack_ix;
4134 create_eval_scope(G_FAKINGEVAL);
4136 /* Verify that we don't need to save it: */
4137 assert(PL_curcop == &PL_compiling);
4138 StructCopy(&PL_compiling, ¬_compiling, COP);
4139 PL_curcop = ¬_compiling;
4140 /* The above ensures that we run with all the correct hints of the
4141 currently compiling COP, but that IN_PERL_RUNTIME is true. */
4142 assert(IN_PERL_RUNTIME);
4143 PL_warnhook = PERL_WARNHOOK_FATAL;
4147 /* Effective $^W=1. */
4148 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
4149 PL_dowarn |= G_WARN_ON;
4154 sv = *(PL_stack_sp--);
4155 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
4156 pad_swipe(o->op_targ, FALSE);
4158 else if (SvTEMP(sv)) { /* grab mortal temp? */
4159 SvREFCNT_inc_simple_void(sv);
4162 else { assert(SvIMMORTAL(sv)); }
4165 /* Something tried to die. Abandon constant folding. */
4166 /* Pretend the error never happened. */
4168 o->op_next = old_next;
4172 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
4173 PL_warnhook = oldwarnhook;
4174 PL_diehook = olddiehook;
4175 /* XXX note that this croak may fail as we've already blown away
4176 * the stack - eg any nested evals */
4177 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
4180 PL_dowarn = oldwarn;
4181 PL_warnhook = oldwarnhook;
4182 PL_diehook = olddiehook;
4183 PL_curcop = &PL_compiling;
4185 if (PL_scopestack_ix > oldscope)
4186 delete_eval_scope();
4191 folded = cBOOL(o->op_folded);
4194 if (type == OP_STRINGIFY) SvPADTMP_off(sv);
4195 else if (!SvIMMORTAL(sv)) {
4199 if (type == OP_RV2GV)
4200 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
4203 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
4204 /* OP_STRINGIFY and constant folding are used to implement qq.
4205 Here the constant folding is an implementation detail that we
4206 want to hide. If the stringify op is itself already marked
4207 folded, however, then it is actually a folded join. */
4208 if (type != OP_STRINGIFY || folded) newop->op_folded = 1;
4217 S_gen_constant_list(pTHX_ OP *o)
4221 const SSize_t oldtmps_floor = PL_tmps_floor;
4226 if (PL_parser && PL_parser->error_count)
4227 return o; /* Don't attempt to run with errors */
4229 curop = LINKLIST(o);
4232 S_prune_chain_head(&curop);
4234 Perl_pp_pushmark(aTHX);
4237 assert (!(curop->op_flags & OPf_SPECIAL));
4238 assert(curop->op_type == OP_RANGE);
4239 Perl_pp_anonlist(aTHX);
4240 PL_tmps_floor = oldtmps_floor;
4242 CHANGE_TYPE(o, OP_RV2AV);
4243 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
4244 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
4245 o->op_opt = 0; /* needs to be revisited in rpeep() */
4246 av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
4248 /* replace subtree with an OP_CONST */
4249 curop = ((UNOP*)o)->op_first;
4250 op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
4253 if (AvFILLp(av) != -1)
4254 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
4257 SvREADONLY_on(*svp);
4264 =head1 Optree Manipulation Functions
4267 /* List constructors */
4270 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
4272 Append an item to the list of ops contained directly within a list-type
4273 op, returning the lengthened list. I<first> is the list-type op,
4274 and I<last> is the op to append to the list. I<optype> specifies the
4275 intended opcode for the list. If I<first> is not already a list of the
4276 right type, it will be upgraded into one. If either I<first> or I<last>
4277 is null, the other is returned unchanged.
4283 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
4291 if (first->op_type != (unsigned)type
4292 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
4294 return newLISTOP(type, 0, first, last);
4297 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
4298 first->op_flags |= OPf_KIDS;
4303 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
4305 Concatenate the lists of ops contained directly within two list-type ops,
4306 returning the combined list. I<first> and I<last> are the list-type ops
4307 to concatenate. I<optype> specifies the intended opcode for the list.
4308 If either I<first> or I<last> is not already a list of the right type,
4309 it will be upgraded into one. If either I<first> or I<last> is null,
4310 the other is returned unchanged.
4316 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
4324 if (first->op_type != (unsigned)type)
4325 return op_prepend_elem(type, first, last);
4327 if (last->op_type != (unsigned)type)
4328 return op_append_elem(type, first, last);
4330 ((LISTOP*)first)->op_last->op_lastsib = 0;
4331 OP_SIBLING_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first);
4332 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
4333 ((LISTOP*)first)->op_last->op_lastsib = 1;
4334 #ifdef PERL_OP_PARENT
4335 ((LISTOP*)first)->op_last->op_sibling = first;
4337 first->op_flags |= (last->op_flags & OPf_KIDS);
4340 S_op_destroy(aTHX_ last);
4346 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
4348 Prepend an item to the list of ops contained directly within a list-type
4349 op, returning the lengthened list. I<first> is the op to prepend to the
4350 list, and I<last> is the list-type op. I<optype> specifies the intended
4351 opcode for the list. If I<last> is not already a list of the right type,
4352 it will be upgraded into one. If either I<first> or I<last> is null,
4353 the other is returned unchanged.
4359 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
4367 if (last->op_type == (unsigned)type) {
4368 if (type == OP_LIST) { /* already a PUSHMARK there */
4369 /* insert 'first' after pushmark */
4370 op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first);
4371 if (!(first->op_flags & OPf_PARENS))
4372 last->op_flags &= ~OPf_PARENS;
4375 op_sibling_splice(last, NULL, 0, first);
4376 last->op_flags |= OPf_KIDS;
4380 return newLISTOP(type, 0, first, last);
4384 =for apidoc Am|OP *|op_convert_list|I32 type|I32 flags|OP *o
4386 Converts I<o> into a list op if it is not one already, and then converts it
4387 into the specified I<type>, calling its check function, allocating a target if
4388 it needs one, and folding constants.
4390 A list-type op is usually constructed one kid at a time via C<newLISTOP>,
4391 C<op_prepend_elem> and C<op_append_elem>. Then finally it is passed to
4392 C<op_convert> to make it the right type.
4398 Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o)
4401 if (type < 0) type = -type, flags |= OPf_SPECIAL;
4402 if (!o || o->op_type != OP_LIST)
4403 o = force_list(o, 0);
4405 o->op_flags &= ~OPf_WANT;
4407 if (!(PL_opargs[type] & OA_MARK))
4408 op_null(cLISTOPo->op_first);
4410 OP * const kid2 = OP_SIBLING(cLISTOPo->op_first);
4411 if (kid2 && kid2->op_type == OP_COREARGS) {
4412 op_null(cLISTOPo->op_first);
4413 kid2->op_private |= OPpCOREARGS_PUSHMARK;
4417 CHANGE_TYPE(o, type);
4418 o->op_flags |= flags;
4420 o = CHECKOP(type, o);
4421 if (o->op_type != (unsigned)type)
4424 return fold_constants(op_integerize(op_std_init(o)));
4431 =head1 Optree construction
4433 =for apidoc Am|OP *|newNULLLIST
4435 Constructs, checks, and returns a new C<stub> op, which represents an
4436 empty list expression.
4442 Perl_newNULLLIST(pTHX)
4444 return newOP(OP_STUB, 0);
4447 /* promote o and any siblings to be a list if its not already; i.e.
4455 * pushmark - o - A - B
4457 * If nullit it true, the list op is nulled.
4461 S_force_list(pTHX_ OP *o, bool nullit)
4463 if (!o || o->op_type != OP_LIST) {
4466 /* manually detach any siblings then add them back later */
4467 rest = OP_SIBLING(o);
4468 OP_SIBLING_set(o, NULL);
4471 o = newLISTOP(OP_LIST, 0, o, NULL);
4473 op_sibling_splice(o, cLISTOPo->op_last, 0, rest);
4481 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
4483 Constructs, checks, and returns an op of any list type. I<type> is
4484 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4485 C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
4486 supply up to two ops to be direct children of the list op; they are
4487 consumed by this function and become part of the constructed op tree.
4493 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4498 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
4500 NewOp(1101, listop, 1, LISTOP);
4502 CHANGE_TYPE(listop, type);
4505 listop->op_flags = (U8)flags;
4509 else if (!first && last)
4512 OP_SIBLING_set(first, last);
4513 listop->op_first = first;
4514 listop->op_last = last;
4515 if (type == OP_LIST) {
4516 OP* const pushop = newOP(OP_PUSHMARK, 0);
4517 pushop->op_lastsib = 0;
4518 OP_SIBLING_set(pushop, first);
4519 listop->op_first = pushop;
4520 listop->op_flags |= OPf_KIDS;
4522 listop->op_last = pushop;
4525 first->op_lastsib = 0;
4526 if (listop->op_last) {
4527 listop->op_last->op_lastsib = 1;
4528 #ifdef PERL_OP_PARENT
4529 listop->op_last->op_sibling = (OP*)listop;
4533 return CHECKOP(type, listop);
4537 =for apidoc Am|OP *|newOP|I32 type|I32 flags
4539 Constructs, checks, and returns an op of any base type (any type that
4540 has no extra fields). I<type> is the opcode. I<flags> gives the
4541 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
4548 Perl_newOP(pTHX_ I32 type, I32 flags)
4553 if (type == -OP_ENTEREVAL) {
4554 type = OP_ENTEREVAL;
4555 flags |= OPpEVAL_BYTES<<8;
4558 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
4559 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4560 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4561 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4563 NewOp(1101, o, 1, OP);
4564 CHANGE_TYPE(o, type);
4565 o->op_flags = (U8)flags;
4568 o->op_private = (U8)(0 | (flags >> 8));
4569 if (PL_opargs[type] & OA_RETSCALAR)
4571 if (PL_opargs[type] & OA_TARGET)
4572 o->op_targ = pad_alloc(type, SVs_PADTMP);
4573 return CHECKOP(type, o);
4577 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
4579 Constructs, checks, and returns an op of any unary type. I<type> is
4580 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4581 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
4582 bits, the eight bits of C<op_private>, except that the bit with value 1
4583 is automatically set. I<first> supplies an optional op to be the direct
4584 child of the unary op; it is consumed by this function and become part
4585 of the constructed op tree.
4591 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
4596 if (type == -OP_ENTEREVAL) {
4597 type = OP_ENTEREVAL;
4598 flags |= OPpEVAL_BYTES<<8;
4601 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
4602 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4603 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4604 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
4605 || type == OP_SASSIGN
4606 || type == OP_ENTERTRY
4607 || type == OP_NULL );
4610 first = newOP(OP_STUB, 0);
4611 if (PL_opargs[type] & OA_MARK)
4612 first = force_list(first, 1);
4614 NewOp(1101, unop, 1, UNOP);
4615 CHANGE_TYPE(unop, type);
4616 unop->op_first = first;
4617 unop->op_flags = (U8)(flags | OPf_KIDS);
4618 unop->op_private = (U8)(1 | (flags >> 8));
4620 #ifdef PERL_OP_PARENT
4621 if (!OP_HAS_SIBLING(first)) /* true unless weird syntax error */
4622 first->op_sibling = (OP*)unop;
4625 unop = (UNOP*) CHECKOP(type, unop);
4629 return fold_constants(op_integerize(op_std_init((OP *) unop)));
4633 =for apidoc Am|OP *|newMETHOP|I32 type|I32 flags|OP *first
4635 Constructs, checks, and returns an op of method type with a method name
4636 evaluated at runtime. I<type> is the opcode. I<flags> gives the eight
4637 bits of C<op_flags>, except that C<OPf_KIDS> will be set automatically,
4638 and, shifted up eight bits, the eight bits of C<op_private>, except that
4639 the bit with value 1 is automatically set. I<dynamic_meth> supplies an
4640 op which evaluates method name; it is consumed by this function and
4641 become part of the constructed op tree.
4642 Supported optypes: OP_METHOD.
4648 S_newMETHOP_internal(pTHX_ I32 type, I32 flags, OP* dynamic_meth, SV* const_meth) {
4652 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_METHOP);
4654 NewOp(1101, methop, 1, METHOP);
4656 if (PL_opargs[type] & OA_MARK) dynamic_meth = force_list(dynamic_meth, 1);
4657 methop->op_flags = (U8)(flags | OPf_KIDS);
4658 methop->op_u.op_first = dynamic_meth;
4659 methop->op_private = (U8)(1 | (flags >> 8));
4663 methop->op_flags = (U8)(flags & ~OPf_KIDS);
4664 methop->op_u.op_meth_sv = const_meth;
4665 methop->op_private = (U8)(0 | (flags >> 8));
4666 methop->op_next = (OP*)methop;
4669 CHANGE_TYPE(methop, type);
4670 methop = (METHOP*) CHECKOP(type, methop);
4672 if (methop->op_next) return (OP*)methop;
4674 return fold_constants(op_integerize(op_std_init((OP *) methop)));
4678 Perl_newMETHOP (pTHX_ I32 type, I32 flags, OP* dynamic_meth) {
4679 PERL_ARGS_ASSERT_NEWMETHOP;
4680 return newMETHOP_internal(type, flags, dynamic_meth, NULL);
4684 =for apidoc Am|OP *|newMETHOP_named|I32 type|I32 flags|SV *const_meth
4686 Constructs, checks, and returns an op of method type with a constant
4687 method name. I<type> is the opcode. I<flags> gives the eight bits of
4688 C<op_flags>, and, shifted up eight bits, the eight bits of
4689 C<op_private>. I<const_meth> supplies a constant method name;
4690 it must be a shared COW string.
4691 Supported optypes: OP_METHOD_NAMED.
4697 Perl_newMETHOP_named (pTHX_ I32 type, I32 flags, SV* const_meth) {
4698 PERL_ARGS_ASSERT_NEWMETHOP_NAMED;
4699 return newMETHOP_internal(type, flags, NULL, const_meth);
4703 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
4705 Constructs, checks, and returns an op of any binary type. I<type>
4706 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
4707 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
4708 the eight bits of C<op_private>, except that the bit with value 1 or
4709 2 is automatically set as required. I<first> and I<last> supply up to
4710 two ops to be the direct children of the binary op; they are consumed
4711 by this function and become part of the constructed op tree.
4717 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4722 ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
4723 || type == OP_SASSIGN || type == OP_NULL );
4725 NewOp(1101, binop, 1, BINOP);
4728 first = newOP(OP_NULL, 0);
4730 CHANGE_TYPE(binop, type);
4731 binop->op_first = first;
4732 binop->op_flags = (U8)(flags | OPf_KIDS);
4735 binop->op_private = (U8)(1 | (flags >> 8));
4738 binop->op_private = (U8)(2 | (flags >> 8));
4739 OP_SIBLING_set(first, last);
4740 first->op_lastsib = 0;
4743 #ifdef PERL_OP_PARENT
4744 if (!OP_HAS_SIBLING(last)) /* true unless weird syntax error */
4745 last->op_sibling = (OP*)binop;
4748 binop->op_last = OP_SIBLING(binop->op_first);
4749 #ifdef PERL_OP_PARENT
4751 binop->op_last->op_sibling = (OP*)binop;
4754 binop = (BINOP*)CHECKOP(type, binop);
4755 if (binop->op_next || binop->op_type != (OPCODE)type)
4758 return fold_constants(op_integerize(op_std_init((OP *)binop)));
4761 static int uvcompare(const void *a, const void *b)
4762 __attribute__nonnull__(1)
4763 __attribute__nonnull__(2)
4764 __attribute__pure__;
4765 static int uvcompare(const void *a, const void *b)
4767 if (*((const UV *)a) < (*(const UV *)b))
4769 if (*((const UV *)a) > (*(const UV *)b))
4771 if (*((const UV *)a+1) < (*(const UV *)b+1))
4773 if (*((const UV *)a+1) > (*(const UV *)b+1))
4779 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
4781 SV * const tstr = ((SVOP*)expr)->op_sv;
4783 ((SVOP*)repl)->op_sv;
4786 const U8 *t = (U8*)SvPV_const(tstr, tlen);
4787 const U8 *r = (U8*)SvPV_const(rstr, rlen);
4793 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
4794 const I32 squash = o->op_private & OPpTRANS_SQUASH;
4795 I32 del = o->op_private & OPpTRANS_DELETE;
4798 PERL_ARGS_ASSERT_PMTRANS;
4800 PL_hints |= HINT_BLOCK_SCOPE;
4803 o->op_private |= OPpTRANS_FROM_UTF;
4806 o->op_private |= OPpTRANS_TO_UTF;
4808 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
4809 SV* const listsv = newSVpvs("# comment\n");
4811 const U8* tend = t + tlen;
4812 const U8* rend = r + rlen;
4828 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
4829 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
4832 const U32 flags = UTF8_ALLOW_DEFAULT;
4836 t = tsave = bytes_to_utf8(t, &len);
4839 if (!to_utf && rlen) {
4841 r = rsave = bytes_to_utf8(r, &len);
4845 /* There is a snag with this code on EBCDIC: scan_const() in toke.c has
4846 * encoded chars in native encoding which makes ranges in the EBCDIC 0..255
4850 U8 tmpbuf[UTF8_MAXBYTES+1];
4853 Newx(cp, 2*tlen, UV);
4855 transv = newSVpvs("");
4857 cp[2*i] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
4859 if (t < tend && *t == ILLEGAL_UTF8_BYTE) {
4861 cp[2*i+1] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
4865 cp[2*i+1] = cp[2*i];
4869 qsort(cp, i, 2*sizeof(UV), uvcompare);
4870 for (j = 0; j < i; j++) {
4872 diff = val - nextmin;
4874 t = uvchr_to_utf8(tmpbuf,nextmin);
4875 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4877 U8 range_mark = ILLEGAL_UTF8_BYTE;
4878 t = uvchr_to_utf8(tmpbuf, val - 1);
4879 sv_catpvn(transv, (char *)&range_mark, 1);
4880 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4887 t = uvchr_to_utf8(tmpbuf,nextmin);
4888 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4890 U8 range_mark = ILLEGAL_UTF8_BYTE;
4891 sv_catpvn(transv, (char *)&range_mark, 1);
4893 t = uvchr_to_utf8(tmpbuf, 0x7fffffff);
4894 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4895 t = (const U8*)SvPVX_const(transv);
4896 tlen = SvCUR(transv);
4900 else if (!rlen && !del) {
4901 r = t; rlen = tlen; rend = tend;
4904 if ((!rlen && !del) || t == r ||
4905 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
4907 o->op_private |= OPpTRANS_IDENTICAL;
4911 while (t < tend || tfirst <= tlast) {
4912 /* see if we need more "t" chars */
4913 if (tfirst > tlast) {
4914 tfirst = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
4916 if (t < tend && *t == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
4918 tlast = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
4925 /* now see if we need more "r" chars */
4926 if (rfirst > rlast) {
4928 rfirst = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
4930 if (r < rend && *r == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
4932 rlast = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
4941 rfirst = rlast = 0xffffffff;
4945 /* now see which range will peter our first, if either. */
4946 tdiff = tlast - tfirst;
4947 rdiff = rlast - rfirst;
4948 tcount += tdiff + 1;
4949 rcount += rdiff + 1;
4956 if (rfirst == 0xffffffff) {
4957 diff = tdiff; /* oops, pretend rdiff is infinite */
4959 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
4960 (long)tfirst, (long)tlast);
4962 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
4966 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
4967 (long)tfirst, (long)(tfirst + diff),
4970 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
4971 (long)tfirst, (long)rfirst);
4973 if (rfirst + diff > max)
4974 max = rfirst + diff;
4976 grows = (tfirst < rfirst &&
4977 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
4989 else if (max > 0xff)
4994 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
4996 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVf_READONLY);
4997 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
4998 PAD_SETSV(cPADOPo->op_padix, swash);
5000 SvREADONLY_on(swash);
5002 cSVOPo->op_sv = swash;
5004 SvREFCNT_dec(listsv);
5005 SvREFCNT_dec(transv);
5007 if (!del && havefinal && rlen)
5008 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
5009 newSVuv((UV)final), 0);
5018 else if (rlast == 0xffffffff)
5024 tbl = (short*)PerlMemShared_calloc(
5025 (o->op_private & OPpTRANS_COMPLEMENT) &&
5026 !(o->op_private & OPpTRANS_DELETE) ? 258 : 256,
5028 cPVOPo->op_pv = (char*)tbl;
5030 for (i = 0; i < (I32)tlen; i++)
5032 for (i = 0, j = 0; i < 256; i++) {
5034 if (j >= (I32)rlen) {
5043 if (i < 128 && r[j] >= 128)
5053 o->op_private |= OPpTRANS_IDENTICAL;
5055 else if (j >= (I32)rlen)
5060 PerlMemShared_realloc(tbl,
5061 (0x101+rlen-j) * sizeof(short));
5062 cPVOPo->op_pv = (char*)tbl;
5064 tbl[0x100] = (short)(rlen - j);
5065 for (i=0; i < (I32)rlen - j; i++)
5066 tbl[0x101+i] = r[j+i];
5070 if (!rlen && !del) {
5073 o->op_private |= OPpTRANS_IDENTICAL;
5075 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
5076 o->op_private |= OPpTRANS_IDENTICAL;
5078 for (i = 0; i < 256; i++)
5080 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
5081 if (j >= (I32)rlen) {
5083 if (tbl[t[i]] == -1)
5089 if (tbl[t[i]] == -1) {
5090 if (t[i] < 128 && r[j] >= 128)
5098 if(del && rlen == tlen) {
5099 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
5100 } else if(rlen > tlen && !complement) {
5101 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
5105 o->op_private |= OPpTRANS_GROWS;
5113 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
5115 Constructs, checks, and returns an op of any pattern matching type.
5116 I<type> is the opcode. I<flags> gives the eight bits of C<op_flags>
5117 and, shifted up eight bits, the eight bits of C<op_private>.
5123 Perl_newPMOP(pTHX_ I32 type, I32 flags)
5128 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
5130 NewOp(1101, pmop, 1, PMOP);
5131 CHANGE_TYPE(pmop, type);
5132 pmop->op_flags = (U8)flags;
5133 pmop->op_private = (U8)(0 | (flags >> 8));
5135 if (PL_hints & HINT_RE_TAINT)
5136 pmop->op_pmflags |= PMf_RETAINT;
5137 #ifdef USE_LOCALE_CTYPE
5138 if (IN_LC_COMPILETIME(LC_CTYPE)) {
5139 set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET);
5144 set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
5146 if (PL_hints & HINT_RE_FLAGS) {
5147 SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
5148 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
5150 if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
5151 reflags = Perl_refcounted_he_fetch_pvn(aTHX_
5152 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0
5154 if (reflags && SvOK(reflags)) {
5155 set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
5161 assert(SvPOK(PL_regex_pad[0]));
5162 if (SvCUR(PL_regex_pad[0])) {
5163 /* Pop off the "packed" IV from the end. */
5164 SV *const repointer_list = PL_regex_pad[0];
5165 const char *p = SvEND(repointer_list) - sizeof(IV);
5166 const IV offset = *((IV*)p);
5168 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
5170 SvEND_set(repointer_list, p);
5172 pmop->op_pmoffset = offset;
5173 /* This slot should be free, so assert this: */
5174 assert(PL_regex_pad[offset] == &PL_sv_undef);
5176 SV * const repointer = &PL_sv_undef;
5177 av_push(PL_regex_padav, repointer);
5178 pmop->op_pmoffset = av_tindex(PL_regex_padav);
5179 PL_regex_pad = AvARRAY(PL_regex_padav);
5183 return CHECKOP(type, pmop);
5191 /* Any pad names in scope are potentially lvalues. */
5192 for (; i < PadnamelistMAXNAMED(PL_comppad_name); i++) {
5193 PADNAME *pn = PAD_COMPNAME_SV(i);
5194 if (!pn || !PadnameLEN(pn))
5196 if (PadnameOUTER(pn) || PadnameIN_SCOPE(pn, PL_cop_seqmax))
5197 S_mark_padname_lvalue(aTHX_ pn);
5201 /* Given some sort of match op o, and an expression expr containing a
5202 * pattern, either compile expr into a regex and attach it to o (if it's
5203 * constant), or convert expr into a runtime regcomp op sequence (if it's
5206 * isreg indicates that the pattern is part of a regex construct, eg
5207 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
5208 * split "pattern", which aren't. In the former case, expr will be a list
5209 * if the pattern contains more than one term (eg /a$b/) or if it contains
5210 * a replacement, ie s/// or tr///.
5212 * When the pattern has been compiled within a new anon CV (for
5213 * qr/(?{...})/ ), then floor indicates the savestack level just before
5214 * the new sub was created
5218 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg, I32 floor)
5223 I32 repl_has_vars = 0;
5225 bool is_trans = (o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
5226 bool is_compiletime;
5229 PERL_ARGS_ASSERT_PMRUNTIME;
5231 /* for s/// and tr///, last element in list is the replacement; pop it */
5233 if (is_trans || o->op_type == OP_SUBST) {
5235 repl = cLISTOPx(expr)->op_last;
5236 kid = cLISTOPx(expr)->op_first;
5237 while (OP_SIBLING(kid) != repl)
5238 kid = OP_SIBLING(kid);
5239 op_sibling_splice(expr, kid, 1, NULL);
5242 /* for TRANS, convert LIST/PUSH/CONST into CONST, and pass to pmtrans() */
5247 assert(expr->op_type == OP_LIST);
5248 first = cLISTOPx(expr)->op_first;
5249 last = cLISTOPx(expr)->op_last;
5250 assert(first->op_type == OP_PUSHMARK);
5251 assert(OP_SIBLING(first) == last);
5253 /* cut 'last' from sibling chain, then free everything else */
5254 op_sibling_splice(expr, first, 1, NULL);
5257 return pmtrans(o, last, repl);
5260 /* find whether we have any runtime or code elements;
5261 * at the same time, temporarily set the op_next of each DO block;
5262 * then when we LINKLIST, this will cause the DO blocks to be excluded
5263 * from the op_next chain (and from having LINKLIST recursively
5264 * applied to them). We fix up the DOs specially later */
5268 if (expr->op_type == OP_LIST) {
5270 for (o = cLISTOPx(expr)->op_first; o; o = OP_SIBLING(o)) {
5271 if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)) {
5273 assert(!o->op_next);
5274 if (UNLIKELY(!OP_HAS_SIBLING(o))) {
5275 assert(PL_parser && PL_parser->error_count);
5276 /* This can happen with qr/ (?{(^{})/. Just fake up
5277 the op we were expecting to see, to avoid crashing
5279 op_sibling_splice(expr, o, 0,
5280 newSVOP(OP_CONST, 0, &PL_sv_no));
5282 o->op_next = OP_SIBLING(o);
5284 else if (o->op_type != OP_CONST && o->op_type != OP_PUSHMARK)
5288 else if (expr->op_type != OP_CONST)
5293 /* fix up DO blocks; treat each one as a separate little sub;
5294 * also, mark any arrays as LIST/REF */
5296 if (expr->op_type == OP_LIST) {
5298 for (o = cLISTOPx(expr)->op_first; o; o = OP_SIBLING(o)) {
5300 if (o->op_type == OP_PADAV || o->op_type == OP_RV2AV) {
5301 assert( !(o->op_flags & OPf_WANT));
5302 /* push the array rather than its contents. The regex
5303 * engine will retrieve and join the elements later */
5304 o->op_flags |= (OPf_WANT_LIST | OPf_REF);
5308 if (!(o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)))
5310 o->op_next = NULL; /* undo temporary hack from above */
5313 if (cLISTOPo->op_first->op_type == OP_LEAVE) {
5314 LISTOP *leaveop = cLISTOPx(cLISTOPo->op_first);
5316 assert(leaveop->op_first->op_type == OP_ENTER);
5317 assert(OP_HAS_SIBLING(leaveop->op_first));
5318 o->op_next = OP_SIBLING(leaveop->op_first);
5320 assert(leaveop->op_flags & OPf_KIDS);
5321 assert(leaveop->op_last->op_next == (OP*)leaveop);
5322 leaveop->op_next = NULL; /* stop on last op */
5323 op_null((OP*)leaveop);
5327 OP *scope = cLISTOPo->op_first;
5328 assert(scope->op_type == OP_SCOPE);
5329 assert(scope->op_flags & OPf_KIDS);
5330 scope->op_next = NULL; /* stop on last op */
5333 /* have to peep the DOs individually as we've removed it from
5334 * the op_next chain */
5336 S_prune_chain_head(&(o->op_next));
5338 /* runtime finalizes as part of finalizing whole tree */
5342 else if (expr->op_type == OP_PADAV || expr->op_type == OP_RV2AV) {
5343 assert( !(expr->op_flags & OPf_WANT));
5344 /* push the array rather than its contents. The regex
5345 * engine will retrieve and join the elements later */
5346 expr->op_flags |= (OPf_WANT_LIST | OPf_REF);
5349 PL_hints |= HINT_BLOCK_SCOPE;
5351 assert(floor==0 || (pm->op_pmflags & PMf_HAS_CV));
5353 if (is_compiletime) {
5354 U32 rx_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
5355 regexp_engine const *eng = current_re_engine();
5357 if (o->op_flags & OPf_SPECIAL)
5358 rx_flags |= RXf_SPLIT;
5360 if (!has_code || !eng->op_comp) {
5361 /* compile-time simple constant pattern */
5363 if ((pm->op_pmflags & PMf_HAS_CV) && !has_code) {
5364 /* whoops! we guessed that a qr// had a code block, but we
5365 * were wrong (e.g. /[(?{}]/ ). Throw away the PL_compcv
5366 * that isn't required now. Note that we have to be pretty
5367 * confident that nothing used that CV's pad while the
5368 * regex was parsed */
5369 assert(AvFILLp(PL_comppad) == 0); /* just @_ */
5370 /* But we know that one op is using this CV's slab. */
5371 cv_forget_slab(PL_compcv);
5373 pm->op_pmflags &= ~PMf_HAS_CV;
5378 ? eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
5379 rx_flags, pm->op_pmflags)
5380 : Perl_re_op_compile(aTHX_ NULL, 0, expr, eng, NULL, NULL,
5381 rx_flags, pm->op_pmflags)
5386 /* compile-time pattern that includes literal code blocks */
5387 REGEXP* re = eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
5390 ((PL_hints & HINT_RE_EVAL) ? PMf_USE_RE_EVAL : 0))
5393 if (pm->op_pmflags & PMf_HAS_CV) {
5395 /* this QR op (and the anon sub we embed it in) is never
5396 * actually executed. It's just a placeholder where we can
5397 * squirrel away expr in op_code_list without the peephole
5398 * optimiser etc processing it for a second time */
5399 OP *qr = newPMOP(OP_QR, 0);
5400 ((PMOP*)qr)->op_code_list = expr;
5402 /* handle the implicit sub{} wrapped round the qr/(?{..})/ */
5403 SvREFCNT_inc_simple_void(PL_compcv);
5404 cv = newATTRSUB(floor, 0, NULL, NULL, qr);
5405 ReANY(re)->qr_anoncv = cv;
5407 /* attach the anon CV to the pad so that
5408 * pad_fixup_inner_anons() can find it */
5409 (void)pad_add_anon(cv, o->op_type);
5410 SvREFCNT_inc_simple_void(cv);
5413 pm->op_code_list = expr;
5418 /* runtime pattern: build chain of regcomp etc ops */
5420 PADOFFSET cv_targ = 0;
5422 reglist = isreg && expr->op_type == OP_LIST;
5427 pm->op_code_list = expr;
5428 /* don't free op_code_list; its ops are embedded elsewhere too */
5429 pm->op_pmflags |= PMf_CODELIST_PRIVATE;
5432 if (o->op_flags & OPf_SPECIAL)
5433 pm->op_pmflags |= PMf_SPLIT;
5435 /* the OP_REGCMAYBE is a placeholder in the non-threaded case
5436 * to allow its op_next to be pointed past the regcomp and
5437 * preceding stacking ops;
5438 * OP_REGCRESET is there to reset taint before executing the
5440 if (pm->op_pmflags & PMf_KEEP || TAINTING_get)
5441 expr = newUNOP((TAINTING_get ? OP_REGCRESET : OP_REGCMAYBE),0,expr);
5443 if (pm->op_pmflags & PMf_HAS_CV) {
5444 /* we have a runtime qr with literal code. This means
5445 * that the qr// has been wrapped in a new CV, which
5446 * means that runtime consts, vars etc will have been compiled
5447 * against a new pad. So... we need to execute those ops
5448 * within the environment of the new CV. So wrap them in a call
5449 * to a new anon sub. i.e. for
5453 * we build an anon sub that looks like
5455 * sub { "a", $b, '(?{...})' }
5457 * and call it, passing the returned list to regcomp.
5458 * Or to put it another way, the list of ops that get executed
5462 * ------ -------------------
5463 * pushmark (for regcomp)
5464 * pushmark (for entersub)
5468 * regcreset regcreset
5470 * const("a") const("a")
5472 * const("(?{...})") const("(?{...})")
5477 SvREFCNT_inc_simple_void(PL_compcv);
5478 /* these lines are just an unrolled newANONATTRSUB */
5479 expr = newSVOP(OP_ANONCODE, 0,
5480 MUTABLE_SV(newATTRSUB(floor, 0, NULL, NULL, expr)));
5481 cv_targ = expr->op_targ;
5482 expr = newUNOP(OP_REFGEN, 0, expr);
5484 expr = list(force_list(newUNOP(OP_ENTERSUB, 0, scalar(expr)), 1));
5487 rcop = S_alloc_LOGOP(aTHX_ OP_REGCOMP, scalar(expr), o);
5488 rcop->op_flags |= ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
5489 | (reglist ? OPf_STACKED : 0);
5490 rcop->op_targ = cv_targ;
5492 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
5493 if (PL_hints & HINT_RE_EVAL)
5494 S_set_haseval(aTHX);
5496 /* establish postfix order */
5497 if (expr->op_type == OP_REGCRESET || expr->op_type == OP_REGCMAYBE) {
5499 rcop->op_next = expr;
5500 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
5503 rcop->op_next = LINKLIST(expr);
5504 expr->op_next = (OP*)rcop;
5507 op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
5513 /* If we are looking at s//.../e with a single statement, get past
5514 the implicit do{}. */
5515 if (curop->op_type == OP_NULL && curop->op_flags & OPf_KIDS
5516 && cUNOPx(curop)->op_first->op_type == OP_SCOPE
5517 && cUNOPx(curop)->op_first->op_flags & OPf_KIDS)
5520 OP *kid = cUNOPx(cUNOPx(curop)->op_first)->op_first;
5521 if (kid->op_type == OP_NULL && (sib = OP_SIBLING(kid))
5522 && !OP_HAS_SIBLING(sib))
5525 if (curop->op_type == OP_CONST)
5527 else if (( (curop->op_type == OP_RV2SV ||
5528 curop->op_type == OP_RV2AV ||
5529 curop->op_type == OP_RV2HV ||
5530 curop->op_type == OP_RV2GV)
5531 && cUNOPx(curop)->op_first
5532 && cUNOPx(curop)->op_first->op_type == OP_GV )
5533 || curop->op_type == OP_PADSV
5534 || curop->op_type == OP_PADAV
5535 || curop->op_type == OP_PADHV
5536 || curop->op_type == OP_PADANY) {
5544 || !RX_PRELEN(PM_GETRE(pm))
5545 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
5547 pm->op_pmflags |= PMf_CONST; /* const for long enough */
5548 op_prepend_elem(o->op_type, scalar(repl), o);
5551 rcop = S_alloc_LOGOP(aTHX_ OP_SUBSTCONT, scalar(repl), o);
5552 rcop->op_private = 1;
5554 /* establish postfix order */
5555 rcop->op_next = LINKLIST(repl);
5556 repl->op_next = (OP*)rcop;
5558 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
5559 assert(!(pm->op_pmflags & PMf_ONCE));
5560 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
5569 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
5571 Constructs, checks, and returns an op of any type that involves an
5572 embedded SV. I<type> is the opcode. I<flags> gives the eight bits
5573 of C<op_flags>. I<sv> gives the SV to embed in the op; this function
5574 takes ownership of one reference to it.
5580 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
5585 PERL_ARGS_ASSERT_NEWSVOP;
5587 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
5588 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
5589 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
5591 NewOp(1101, svop, 1, SVOP);
5592 CHANGE_TYPE(svop, type);
5594 svop->op_next = (OP*)svop;
5595 svop->op_flags = (U8)flags;
5596 svop->op_private = (U8)(0 | (flags >> 8));
5597 if (PL_opargs[type] & OA_RETSCALAR)
5599 if (PL_opargs[type] & OA_TARGET)
5600 svop->op_targ = pad_alloc(type, SVs_PADTMP);
5601 return CHECKOP(type, svop);
5605 =for apidoc Am|OP *|newDEFSVOP|
5607 Constructs and returns an op to access C<$_>, either as a lexical
5608 variable (if declared as C<my $_>) in the current scope, or the
5615 Perl_newDEFSVOP(pTHX)
5617 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
5618 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
5619 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
5622 OP * const o = newOP(OP_PADSV, 0);
5623 o->op_targ = offset;
5631 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
5633 Constructs, checks, and returns an op of any type that involves a
5634 reference to a pad element. I<type> is the opcode. I<flags> gives the
5635 eight bits of C<op_flags>. A pad slot is automatically allocated, and
5636 is populated with I<sv>; this function takes ownership of one reference
5639 This function only exists if Perl has been compiled to use ithreads.
5645 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
5650 PERL_ARGS_ASSERT_NEWPADOP;
5652 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
5653 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
5654 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
5656 NewOp(1101, padop, 1, PADOP);
5657 CHANGE_TYPE(padop, type);
5659 pad_alloc(type, isGV(sv) ? SVf_READONLY : SVs_PADTMP);
5660 SvREFCNT_dec(PAD_SVl(padop->op_padix));
5661 PAD_SETSV(padop->op_padix, sv);
5663 padop->op_next = (OP*)padop;
5664 padop->op_flags = (U8)flags;
5665 if (PL_opargs[type] & OA_RETSCALAR)
5667 if (PL_opargs[type] & OA_TARGET)
5668 padop->op_targ = pad_alloc(type, SVs_PADTMP);
5669 return CHECKOP(type, padop);
5672 #endif /* USE_ITHREADS */
5675 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
5677 Constructs, checks, and returns an op of any type that involves an
5678 embedded reference to a GV. I<type> is the opcode. I<flags> gives the
5679 eight bits of C<op_flags>. I<gv> identifies the GV that the op should
5680 reference; calling this function does not transfer ownership of any
5687 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
5689 PERL_ARGS_ASSERT_NEWGVOP;
5692 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
5694 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
5699 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
5701 Constructs, checks, and returns an op of any type that involves an
5702 embedded C-level pointer (PV). I<type> is the opcode. I<flags> gives
5703 the eight bits of C<op_flags>. I<pv> supplies the C-level pointer, which
5704 must have been allocated using C<PerlMemShared_malloc>; the memory will
5705 be freed when the op is destroyed.
5711 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
5714 const bool utf8 = cBOOL(flags & SVf_UTF8);
5719 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
5721 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
5723 NewOp(1101, pvop, 1, PVOP);
5724 CHANGE_TYPE(pvop, type);
5726 pvop->op_next = (OP*)pvop;
5727 pvop->op_flags = (U8)flags;
5728 pvop->op_private = utf8 ? OPpPV_IS_UTF8 : 0;
5729 if (PL_opargs[type] & OA_RETSCALAR)
5731 if (PL_opargs[type] & OA_TARGET)
5732 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
5733 return CHECKOP(type, pvop);
5737 Perl_package(pTHX_ OP *o)
5739 SV *const sv = cSVOPo->op_sv;
5741 PERL_ARGS_ASSERT_PACKAGE;
5743 SAVEGENERICSV(PL_curstash);
5744 save_item(PL_curstname);
5746 PL_curstash = (HV *)SvREFCNT_inc(gv_stashsv(sv, GV_ADD));
5748 sv_setsv(PL_curstname, sv);
5750 PL_hints |= HINT_BLOCK_SCOPE;
5751 PL_parser->copline = NOLINE;
5757 Perl_package_version( pTHX_ OP *v )
5759 U32 savehints = PL_hints;
5760 PERL_ARGS_ASSERT_PACKAGE_VERSION;
5761 PL_hints &= ~HINT_STRICT_VARS;
5762 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
5763 PL_hints = savehints;
5768 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
5773 SV *use_version = NULL;
5775 PERL_ARGS_ASSERT_UTILIZE;
5777 if (idop->op_type != OP_CONST)
5778 Perl_croak(aTHX_ "Module name must be constant");
5783 SV * const vesv = ((SVOP*)version)->op_sv;
5785 if (!arg && !SvNIOKp(vesv)) {
5792 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
5793 Perl_croak(aTHX_ "Version number must be a constant number");
5795 /* Make copy of idop so we don't free it twice */
5796 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
5798 /* Fake up a method call to VERSION */
5799 meth = newSVpvs_share("VERSION");
5800 veop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
5801 op_append_elem(OP_LIST,
5802 op_prepend_elem(OP_LIST, pack, version),
5803 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
5807 /* Fake up an import/unimport */
5808 if (arg && arg->op_type == OP_STUB) {
5809 imop = arg; /* no import on explicit () */
5811 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
5812 imop = NULL; /* use 5.0; */
5814 use_version = ((SVOP*)idop)->op_sv;
5816 idop->op_private |= OPpCONST_NOVER;
5821 /* Make copy of idop so we don't free it twice */
5822 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
5824 /* Fake up a method call to import/unimport */
5826 ? newSVpvs_share("import") : newSVpvs_share("unimport");
5827 imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
5828 op_append_elem(OP_LIST,
5829 op_prepend_elem(OP_LIST, pack, arg),
5830 newMETHOP_named(OP_METHOD_NAMED, 0, meth)
5834 /* Fake up the BEGIN {}, which does its thing immediately. */
5836 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
5839 op_append_elem(OP_LINESEQ,
5840 op_append_elem(OP_LINESEQ,
5841 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
5842 newSTATEOP(0, NULL, veop)),
5843 newSTATEOP(0, NULL, imop) ));
5847 * feature bundle that corresponds to the required version. */
5848 use_version = sv_2mortal(new_version(use_version));
5849 S_enable_feature_bundle(aTHX_ use_version);
5851 /* If a version >= 5.11.0 is requested, strictures are on by default! */
5852 if (vcmp(use_version,
5853 sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
5854 if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS))
5855 PL_hints |= HINT_STRICT_REFS;
5856 if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS))
5857 PL_hints |= HINT_STRICT_SUBS;
5858 if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS))
5859 PL_hints |= HINT_STRICT_VARS;
5861 /* otherwise they are off */
5863 if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS))
5864 PL_hints &= ~HINT_STRICT_REFS;
5865 if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS))
5866 PL_hints &= ~HINT_STRICT_SUBS;
5867 if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS))
5868 PL_hints &= ~HINT_STRICT_VARS;
5872 /* The "did you use incorrect case?" warning used to be here.
5873 * The problem is that on case-insensitive filesystems one
5874 * might get false positives for "use" (and "require"):
5875 * "use Strict" or "require CARP" will work. This causes
5876 * portability problems for the script: in case-strict
5877 * filesystems the script will stop working.
5879 * The "incorrect case" warning checked whether "use Foo"
5880 * imported "Foo" to your namespace, but that is wrong, too:
5881 * there is no requirement nor promise in the language that
5882 * a Foo.pm should or would contain anything in package "Foo".
5884 * There is very little Configure-wise that can be done, either:
5885 * the case-sensitivity of the build filesystem of Perl does not
5886 * help in guessing the case-sensitivity of the runtime environment.
5889 PL_hints |= HINT_BLOCK_SCOPE;
5890 PL_parser->copline = NOLINE;
5891 COP_SEQMAX_INC; /* Purely for B::*'s benefit */
5895 =head1 Embedding Functions
5897 =for apidoc load_module
5899 Loads the module whose name is pointed to by the string part of name.
5900 Note that the actual module name, not its filename, should be given.
5901 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
5902 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
5903 (or 0 for no flags). ver, if specified
5904 and not NULL, provides version semantics
5905 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
5906 arguments can be used to specify arguments to the module's import()
5907 method, similar to C<use Foo::Bar VERSION LIST>. They must be
5908 terminated with a final NULL pointer. Note that this list can only
5909 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
5910 Otherwise at least a single NULL pointer to designate the default
5911 import list is required.
5913 The reference count for each specified C<SV*> parameter is decremented.
5918 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
5922 PERL_ARGS_ASSERT_LOAD_MODULE;
5924 va_start(args, ver);
5925 vload_module(flags, name, ver, &args);
5929 #ifdef PERL_IMPLICIT_CONTEXT
5931 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
5935 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
5936 va_start(args, ver);
5937 vload_module(flags, name, ver, &args);
5943 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
5946 OP * const modname = newSVOP(OP_CONST, 0, name);
5948 PERL_ARGS_ASSERT_VLOAD_MODULE;
5950 modname->op_private |= OPpCONST_BARE;
5952 veop = newSVOP(OP_CONST, 0, ver);
5956 if (flags & PERL_LOADMOD_NOIMPORT) {
5957 imop = sawparens(newNULLLIST());
5959 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
5960 imop = va_arg(*args, OP*);
5965 sv = va_arg(*args, SV*);
5967 imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
5968 sv = va_arg(*args, SV*);
5972 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
5973 * that it has a PL_parser to play with while doing that, and also
5974 * that it doesn't mess with any existing parser, by creating a tmp
5975 * new parser with lex_start(). This won't actually be used for much,
5976 * since pp_require() will create another parser for the real work.
5977 * The ENTER/LEAVE pair protect callers from any side effects of use. */
5980 SAVEVPTR(PL_curcop);
5981 lex_start(NULL, NULL, LEX_START_SAME_FILTER);
5982 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
5983 veop, modname, imop);
5987 PERL_STATIC_INLINE OP *
5988 S_new_entersubop(pTHX_ GV *gv, OP *arg)
5990 return newUNOP(OP_ENTERSUB, OPf_STACKED,
5991 newLISTOP(OP_LIST, 0, arg,
5992 newUNOP(OP_RV2CV, 0,
5993 newGVOP(OP_GV, 0, gv))));
5997 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
6002 PERL_ARGS_ASSERT_DOFILE;
6004 if (!force_builtin && (gv = gv_override("do", 2))) {
6005 doop = S_new_entersubop(aTHX_ gv, term);
6008 doop = newUNOP(OP_DOFILE, 0, scalar(term));
6014 =head1 Optree construction
6016 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
6018 Constructs, checks, and returns an C<lslice> (list slice) op. I<flags>
6019 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
6020 be set automatically, and, shifted up eight bits, the eight bits of
6021 C<op_private>, except that the bit with value 1 or 2 is automatically
6022 set as required. I<listval> and I<subscript> supply the parameters of
6023 the slice; they are consumed by this function and become part of the
6024 constructed op tree.
6030 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
6032 return newBINOP(OP_LSLICE, flags,
6033 list(force_list(subscript, 1)),
6034 list(force_list(listval, 1)) );
6037 #define ASSIGN_LIST 1
6038 #define ASSIGN_REF 2
6041 S_assignment_type(pTHX_ const OP *o)
6050 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
6051 o = cUNOPo->op_first;
6053 flags = o->op_flags;
6055 if (type == OP_COND_EXPR) {
6056 OP * const sib = OP_SIBLING(cLOGOPo->op_first);
6057 const I32 t = assignment_type(sib);
6058 const I32 f = assignment_type(OP_SIBLING(sib));
6060 if (t == ASSIGN_LIST && f == ASSIGN_LIST)
6062 if ((t == ASSIGN_LIST) ^ (f == ASSIGN_LIST))
6063 yyerror("Assignment to both a list and a scalar");
6067 if (type == OP_SREFGEN)
6069 OP * const kid = cUNOPx(cUNOPo->op_first)->op_first;
6070 type = kid->op_type;
6071 flags |= kid->op_flags;
6072 if (!(flags & OPf_PARENS)
6073 && (kid->op_type == OP_RV2AV || kid->op_type == OP_PADAV ||
6074 kid->op_type == OP_RV2HV || kid->op_type == OP_PADHV ))
6080 if (type == OP_LIST &&
6081 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
6082 o->op_private & OPpLVAL_INTRO)
6085 if (type == OP_LIST || flags & OPf_PARENS ||
6086 type == OP_RV2AV || type == OP_RV2HV ||
6087 type == OP_ASLICE || type == OP_HSLICE ||
6088 type == OP_KVASLICE || type == OP_KVHSLICE || type == OP_REFGEN)
6091 if (type == OP_PADAV || type == OP_PADHV)
6094 if (type == OP_RV2SV)
6101 Helper function for newASSIGNOP to detect commonality between the
6102 lhs and the rhs. (It is actually called very indirectly. newASSIGNOP
6103 flags the op and the peephole optimizer calls this helper function
6104 if the flag is set.) Marks all variables with PL_generation. If it
6105 returns TRUE the assignment must be able to handle common variables.
6107 PL_generation sorcery:
6108 An assignment like ($a,$b) = ($c,$d) is easier than
6109 ($a,$b) = ($c,$a), since there is no need for temporary vars.
6110 To detect whether there are common vars, the global var
6111 PL_generation is incremented for each assign op we compile.
6112 Then, while compiling the assign op, we run through all the
6113 variables on both sides of the assignment, setting a spare slot
6114 in each of them to PL_generation. If any of them already have
6115 that value, we know we've got commonality. Also, if the
6116 generation number is already set to PERL_INT_MAX, then
6117 the variable is involved in aliasing, so we also have
6118 potential commonality in that case. We could use a
6119 single bit marker, but then we'd have to make 2 passes, first
6120 to clear the flag, then to test and set it. And that
6121 wouldn't help with aliasing, either. To find somewhere
6122 to store these values, evil chicanery is done with SvUVX().
6124 PERL_STATIC_INLINE bool
6125 S_aassign_common_vars(pTHX_ OP* o)
6128 for (curop = cUNOPo->op_first; curop; curop = OP_SIBLING(curop)) {
6129 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
6130 if (curop->op_type == OP_GV || curop->op_type == OP_GVSV
6131 || curop->op_type == OP_AELEMFAST) {
6132 GV *gv = cGVOPx_gv(curop);
6134 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
6136 GvASSIGN_GENERATION_set(gv, PL_generation);
6138 else if (curop->op_type == OP_PADSV ||
6139 curop->op_type == OP_PADAV ||
6140 curop->op_type == OP_PADHV ||
6141 curop->op_type == OP_AELEMFAST_LEX ||
6142 curop->op_type == OP_PADANY)
6145 if (PAD_COMPNAME_GEN(curop->op_targ)
6146 == (STRLEN)PL_generation
6147 || PAD_COMPNAME_GEN(curop->op_targ) == PERL_INT_MAX)
6149 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
6152 else if (curop->op_type == OP_RV2CV)
6154 else if (curop->op_type == OP_RV2SV ||
6155 curop->op_type == OP_RV2AV ||
6156 curop->op_type == OP_RV2HV ||
6157 curop->op_type == OP_RV2GV) {
6158 if (cUNOPx(curop)->op_first->op_type != OP_GV) /* funny deref? */
6161 else if (curop->op_type == OP_PUSHRE) {
6164 ((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff
6165 ? MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff))
6168 ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
6172 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
6174 GvASSIGN_GENERATION_set(gv, PL_generation);
6176 else if (curop->op_targ)
6179 else if (curop->op_type == OP_PADRANGE)
6180 /* Ignore padrange; checking its siblings is sufficient. */
6185 else if (PL_opargs[curop->op_type] & OA_TARGLEX
6186 && curop->op_private & OPpTARGET_MY)
6189 if (curop->op_flags & OPf_KIDS) {
6190 if (aassign_common_vars(curop))
6197 /* This variant only handles lexical aliases. It is called when
6198 newASSIGNOP decides that we don’t have any common vars, as lexical ali-
6199 ases trump that decision. */
6200 PERL_STATIC_INLINE bool
6201 S_aassign_common_vars_aliases_only(pTHX_ OP *o)
6204 for (curop = cUNOPo->op_first; curop; curop = OP_SIBLING(curop)) {
6205 if ((curop->op_type == OP_PADSV ||
6206 curop->op_type == OP_PADAV ||
6207 curop->op_type == OP_PADHV ||
6208 curop->op_type == OP_AELEMFAST_LEX ||
6209 curop->op_type == OP_PADANY ||
6210 ( PL_opargs[curop->op_type] & OA_TARGLEX
6211 && curop->op_private & OPpTARGET_MY ))
6212 && PAD_COMPNAME_GEN(curop->op_targ) == PERL_INT_MAX)
6215 if (curop->op_type == OP_PUSHRE && curop->op_targ
6216 && PAD_COMPNAME_GEN(curop->op_targ) == PERL_INT_MAX)
6219 if (curop->op_flags & OPf_KIDS) {
6220 if (S_aassign_common_vars_aliases_only(aTHX_ curop))
6228 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
6230 Constructs, checks, and returns an assignment op. I<left> and I<right>
6231 supply the parameters of the assignment; they are consumed by this
6232 function and become part of the constructed op tree.
6234 If I<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
6235 a suitable conditional optree is constructed. If I<optype> is the opcode
6236 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
6237 performs the binary operation and assigns the result to the left argument.
6238 Either way, if I<optype> is non-zero then I<flags> has no effect.
6240 If I<optype> is zero, then a plain scalar or list assignment is
6241 constructed. Which type of assignment it is is automatically determined.
6242 I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
6243 will be set automatically, and, shifted up eight bits, the eight bits
6244 of C<op_private>, except that the bit with value 1 or 2 is automatically
6251 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
6257 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
6258 return newLOGOP(optype, 0,
6259 op_lvalue(scalar(left), optype),
6260 newUNOP(OP_SASSIGN, 0, scalar(right)));
6263 return newBINOP(optype, OPf_STACKED,
6264 op_lvalue(scalar(left), optype), scalar(right));
6268 if ((assign_type = assignment_type(left)) == ASSIGN_LIST) {
6269 static const char no_list_state[] = "Initialization of state variables"
6270 " in list context currently forbidden";
6272 bool maybe_common_vars = TRUE;
6274 if (left->op_type == OP_ASLICE || left->op_type == OP_HSLICE)
6275 left->op_private &= ~ OPpSLICEWARNING;
6278 left = op_lvalue(left, OP_AASSIGN);
6279 curop = list(force_list(left, 1));
6280 o = newBINOP(OP_AASSIGN, flags, list(force_list(right, 1)), curop);
6281 o->op_private = (U8)(0 | (flags >> 8));
6283 if (OP_TYPE_IS_OR_WAS(left, OP_LIST))
6285 OP* lop = ((LISTOP*)left)->op_first;
6286 maybe_common_vars = FALSE;
6288 if (lop->op_type == OP_PADSV ||
6289 lop->op_type == OP_PADAV ||
6290 lop->op_type == OP_PADHV ||
6291 lop->op_type == OP_PADANY) {
6292 if (!(lop->op_private & OPpLVAL_INTRO))
6293 maybe_common_vars = TRUE;
6295 if (lop->op_private & OPpPAD_STATE) {
6296 if (left->op_private & OPpLVAL_INTRO) {
6297 /* Each variable in state($a, $b, $c) = ... */
6300 /* Each state variable in
6301 (state $a, my $b, our $c, $d, undef) = ... */
6303 yyerror(no_list_state);
6305 /* Each my variable in
6306 (state $a, my $b, our $c, $d, undef) = ... */
6308 } else if (lop->op_type == OP_UNDEF ||
6309 OP_TYPE_IS_OR_WAS(lop, OP_PUSHMARK)) {
6310 /* undef may be interesting in
6311 (state $a, undef, state $c) */
6313 /* Other ops in the list. */
6314 maybe_common_vars = TRUE;
6316 lop = OP_SIBLING(lop);
6319 else if ((left->op_private & OPpLVAL_INTRO)
6320 && ( left->op_type == OP_PADSV
6321 || left->op_type == OP_PADAV
6322 || left->op_type == OP_PADHV
6323 || left->op_type == OP_PADANY))
6325 if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
6326 if (left->op_private & OPpPAD_STATE) {
6327 /* All single variable list context state assignments, hence
6337 yyerror(no_list_state);
6341 if (maybe_common_vars) {
6342 /* The peephole optimizer will do the full check and pos-
6343 sibly turn this off. */
6344 o->op_private |= OPpASSIGN_COMMON;
6347 if (right && right->op_type == OP_SPLIT
6348 && !(right->op_flags & OPf_STACKED)) {
6349 OP* tmpop = ((LISTOP*)right)->op_first;
6350 PMOP * const pm = (PMOP*)tmpop;
6351 assert (tmpop && (tmpop->op_type == OP_PUSHRE));
6354 !pm->op_pmreplrootu.op_pmtargetoff
6356 !pm->op_pmreplrootu.op_pmtargetgv
6360 if (!(left->op_private & OPpLVAL_INTRO) &&
6361 ( (left->op_type == OP_RV2AV &&
6362 (tmpop=((UNOP*)left)->op_first)->op_type==OP_GV)
6363 || left->op_type == OP_PADAV )
6365 if (tmpop != (OP *)pm) {
6367 pm->op_pmreplrootu.op_pmtargetoff
6368 = cPADOPx(tmpop)->op_padix;
6369 cPADOPx(tmpop)->op_padix = 0; /* steal it */
6371 pm->op_pmreplrootu.op_pmtargetgv
6372 = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
6373 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
6375 right->op_private |=
6376 left->op_private & OPpOUR_INTRO;
6379 pm->op_targ = left->op_targ;
6380 left->op_targ = 0; /* filch it */
6383 tmpop = cUNOPo->op_first; /* to list (nulled) */
6384 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
6385 /* detach rest of siblings from o subtree,
6386 * and free subtree */
6387 op_sibling_splice(cUNOPo->op_first, tmpop, -1, NULL);
6388 op_free(o); /* blow off assign */
6389 right->op_flags &= ~OPf_WANT;
6390 /* "I don't know and I don't care." */
6393 else if (left->op_type == OP_RV2AV
6394 || left->op_type == OP_PADAV)
6396 /* Detach the array. */
6400 op_sibling_splice(cBINOPo->op_last,
6401 cUNOPx(cBINOPo->op_last)
6402 ->op_first, 1, NULL);
6403 assert(ary == left);
6404 /* Attach it to the split. */
6405 op_sibling_splice(right, cLISTOPx(right)->op_last,
6407 right->op_flags |= OPf_STACKED;
6408 /* Detach split and expunge aassign as above. */
6411 else if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
6412 ((LISTOP*)right)->op_last->op_type == OP_CONST)
6415 &((SVOP*)((LISTOP*)right)->op_last)->op_sv;
6416 SV * const sv = *svp;
6417 if (SvIOK(sv) && SvIVX(sv) == 0)
6419 if (right->op_private & OPpSPLIT_IMPLIM) {
6420 /* our own SV, created in ck_split */
6422 sv_setiv(sv, PL_modcount+1);
6425 /* SV may belong to someone else */
6427 *svp = newSViv(PL_modcount+1);
6435 if (assign_type == ASSIGN_REF)
6436 return newBINOP(OP_REFASSIGN, flags, scalar(right), left);
6438 right = newOP(OP_UNDEF, 0);
6439 if (right->op_type == OP_READLINE) {
6440 right->op_flags |= OPf_STACKED;
6441 return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN),
6445 o = newBINOP(OP_SASSIGN, flags,
6446 scalar(right), op_lvalue(scalar(left), OP_SASSIGN) );
6452 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
6454 Constructs a state op (COP). The state op is normally a C<nextstate> op,
6455 but will be a C<dbstate> op if debugging is enabled for currently-compiled
6456 code. The state op is populated from C<PL_curcop> (or C<PL_compiling>).
6457 If I<label> is non-null, it supplies the name of a label to attach to
6458 the state op; this function takes ownership of the memory pointed at by
6459 I<label>, and will free it. I<flags> gives the eight bits of C<op_flags>
6462 If I<o> is null, the state op is returned. Otherwise the state op is
6463 combined with I<o> into a C<lineseq> list op, which is returned. I<o>
6464 is consumed by this function and becomes part of the returned op tree.
6470 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
6473 const U32 seq = intro_my();
6474 const U32 utf8 = flags & SVf_UTF8;
6479 NewOp(1101, cop, 1, COP);
6480 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
6481 CHANGE_TYPE(cop, OP_DBSTATE);
6484 CHANGE_TYPE(cop, OP_NEXTSTATE);
6486 cop->op_flags = (U8)flags;
6487 CopHINTS_set(cop, PL_hints);
6489 if (VMSISH_HUSHED) cop->op_private |= OPpHUSH_VMSISH;
6491 cop->op_next = (OP*)cop;
6494 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
6495 CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop)));
6497 Perl_cop_store_label(aTHX_ cop, label, strlen(label), utf8);
6499 PL_hints |= HINT_BLOCK_SCOPE;
6500 /* It seems that we need to defer freeing this pointer, as other parts
6501 of the grammar end up wanting to copy it after this op has been
6506 if (PL_parser->preambling != NOLINE) {
6507 CopLINE_set(cop, PL_parser->preambling);
6508 PL_parser->copline = NOLINE;
6510 else if (PL_parser->copline == NOLINE)
6511 CopLINE_set(cop, CopLINE(PL_curcop));
6513 CopLINE_set(cop, PL_parser->copline);
6514 PL_parser->copline = NOLINE;
6517 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
6519 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
6521 CopSTASH_set(cop, PL_curstash);
6523 if (cop->op_type == OP_DBSTATE) {
6524 /* this line can have a breakpoint - store the cop in IV */
6525 AV *av = CopFILEAVx(PL_curcop);
6527 SV * const * const svp = av_fetch(av, CopLINE(cop), FALSE);
6528 if (svp && *svp != &PL_sv_undef ) {
6529 (void)SvIOK_on(*svp);
6530 SvIV_set(*svp, PTR2IV(cop));
6535 if (flags & OPf_SPECIAL)
6537 return op_prepend_elem(OP_LINESEQ, (OP*)cop, o);
6541 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
6543 Constructs, checks, and returns a logical (flow control) op. I<type>
6544 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
6545 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
6546 the eight bits of C<op_private>, except that the bit with value 1 is
6547 automatically set. I<first> supplies the expression controlling the
6548 flow, and I<other> supplies the side (alternate) chain of ops; they are
6549 consumed by this function and become part of the constructed op tree.
6555 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
6557 PERL_ARGS_ASSERT_NEWLOGOP;
6559 return new_logop(type, flags, &first, &other);
6563 S_search_const(pTHX_ OP *o)
6565 PERL_ARGS_ASSERT_SEARCH_CONST;
6567 switch (o->op_type) {
6571 if (o->op_flags & OPf_KIDS)
6572 return search_const(cUNOPo->op_first);
6579 if (!(o->op_flags & OPf_KIDS))
6581 kid = cLISTOPo->op_first;
6583 switch (kid->op_type) {
6587 kid = OP_SIBLING(kid);
6590 if (kid != cLISTOPo->op_last)
6596 kid = cLISTOPo->op_last;
6598 return search_const(kid);
6606 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
6614 int prepend_not = 0;
6616 PERL_ARGS_ASSERT_NEW_LOGOP;
6621 /* [perl #59802]: Warn about things like "return $a or $b", which
6622 is parsed as "(return $a) or $b" rather than "return ($a or
6623 $b)". NB: This also applies to xor, which is why we do it
6626 switch (first->op_type) {
6630 /* XXX: Perhaps we should emit a stronger warning for these.
6631 Even with the high-precedence operator they don't seem to do
6634 But until we do, fall through here.
6640 /* XXX: Currently we allow people to "shoot themselves in the
6641 foot" by explicitly writing "(return $a) or $b".
6643 Warn unless we are looking at the result from folding or if
6644 the programmer explicitly grouped the operators like this.
6645 The former can occur with e.g.
6647 use constant FEATURE => ( $] >= ... );
6648 sub { not FEATURE and return or do_stuff(); }
6650 if (!first->op_folded && !(first->op_flags & OPf_PARENS))
6651 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
6652 "Possible precedence issue with control flow operator");
6653 /* XXX: Should we optimze this to "return $a;" (i.e. remove
6659 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
6660 return newBINOP(type, flags, scalar(first), scalar(other));
6662 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
6664 scalarboolean(first);
6665 /* optimize AND and OR ops that have NOTs as children */
6666 if (first->op_type == OP_NOT
6667 && (first->op_flags & OPf_KIDS)
6668 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
6669 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
6671 if (type == OP_AND || type == OP_OR) {
6677 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
6679 prepend_not = 1; /* prepend a NOT op later */
6683 /* search for a constant op that could let us fold the test */
6684 if ((cstop = search_const(first))) {
6685 if (cstop->op_private & OPpCONST_STRICT)
6686 no_bareword_allowed(cstop);
6687 else if ((cstop->op_private & OPpCONST_BARE))
6688 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
6689 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
6690 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
6691 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
6693 if (other->op_type == OP_CONST)
6694 other->op_private |= OPpCONST_SHORTCIRCUIT;
6696 if (other->op_type == OP_LEAVE)
6697 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
6698 else if (other->op_type == OP_MATCH
6699 || other->op_type == OP_SUBST
6700 || other->op_type == OP_TRANSR
6701 || other->op_type == OP_TRANS)
6702 /* Mark the op as being unbindable with =~ */
6703 other->op_flags |= OPf_SPECIAL;
6705 other->op_folded = 1;
6709 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
6710 const OP *o2 = other;
6711 if ( ! (o2->op_type == OP_LIST
6712 && (( o2 = cUNOPx(o2)->op_first))
6713 && o2->op_type == OP_PUSHMARK
6714 && (( o2 = OP_SIBLING(o2))) )
6717 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
6718 || o2->op_type == OP_PADHV)
6719 && o2->op_private & OPpLVAL_INTRO
6720 && !(o2->op_private & OPpPAD_STATE))
6722 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6723 "Deprecated use of my() in false conditional");
6727 if (cstop->op_type == OP_CONST)
6728 cstop->op_private |= OPpCONST_SHORTCIRCUIT;
6733 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
6734 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
6736 const OP * const k1 = ((UNOP*)first)->op_first;
6737 const OP * const k2 = OP_SIBLING(k1);
6739 switch (first->op_type)
6742 if (k2 && k2->op_type == OP_READLINE
6743 && (k2->op_flags & OPf_STACKED)
6744 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
6746 warnop = k2->op_type;
6751 if (k1->op_type == OP_READDIR
6752 || k1->op_type == OP_GLOB
6753 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
6754 || k1->op_type == OP_EACH
6755 || k1->op_type == OP_AEACH)
6757 warnop = ((k1->op_type == OP_NULL)
6758 ? (OPCODE)k1->op_targ : k1->op_type);
6763 const line_t oldline = CopLINE(PL_curcop);
6764 /* This ensures that warnings are reported at the first line
6765 of the construction, not the last. */
6766 CopLINE_set(PL_curcop, PL_parser->copline);
6767 Perl_warner(aTHX_ packWARN(WARN_MISC),
6768 "Value of %s%s can be \"0\"; test with defined()",
6770 ((warnop == OP_READLINE || warnop == OP_GLOB)
6771 ? " construct" : "() operator"));
6772 CopLINE_set(PL_curcop, oldline);
6779 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
6780 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
6782 logop = S_alloc_LOGOP(aTHX_ type, first, LINKLIST(other));
6783 logop->op_flags |= (U8)flags;
6784 logop->op_private = (U8)(1 | (flags >> 8));
6786 /* establish postfix order */
6787 logop->op_next = LINKLIST(first);
6788 first->op_next = (OP*)logop;
6789 assert(!OP_HAS_SIBLING(first));
6790 op_sibling_splice((OP*)logop, first, 0, other);
6792 CHECKOP(type,logop);
6794 o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
6801 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
6803 Constructs, checks, and returns a conditional-expression (C<cond_expr>)
6804 op. I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
6805 will be set automatically, and, shifted up eight bits, the eight bits of
6806 C<op_private>, except that the bit with value 1 is automatically set.
6807 I<first> supplies the expression selecting between the two branches,
6808 and I<trueop> and I<falseop> supply the branches; they are consumed by
6809 this function and become part of the constructed op tree.
6815 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
6823 PERL_ARGS_ASSERT_NEWCONDOP;
6826 return newLOGOP(OP_AND, 0, first, trueop);
6828 return newLOGOP(OP_OR, 0, first, falseop);
6830 scalarboolean(first);
6831 if ((cstop = search_const(first))) {
6832 /* Left or right arm of the conditional? */
6833 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
6834 OP *live = left ? trueop : falseop;
6835 OP *const dead = left ? falseop : trueop;
6836 if (cstop->op_private & OPpCONST_BARE &&
6837 cstop->op_private & OPpCONST_STRICT) {
6838 no_bareword_allowed(cstop);
6842 if (live->op_type == OP_LEAVE)
6843 live = newUNOP(OP_NULL, OPf_SPECIAL, live);
6844 else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST
6845 || live->op_type == OP_TRANS || live->op_type == OP_TRANSR)
6846 /* Mark the op as being unbindable with =~ */
6847 live->op_flags |= OPf_SPECIAL;
6848 live->op_folded = 1;
6851 logop = S_alloc_LOGOP(aTHX_ OP_COND_EXPR, first, LINKLIST(trueop));
6852 logop->op_flags |= (U8)flags;
6853 logop->op_private = (U8)(1 | (flags >> 8));
6854 logop->op_next = LINKLIST(falseop);
6856 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
6859 /* establish postfix order */
6860 start = LINKLIST(first);
6861 first->op_next = (OP*)logop;
6863 /* make first, trueop, falseop siblings */
6864 op_sibling_splice((OP*)logop, first, 0, trueop);
6865 op_sibling_splice((OP*)logop, trueop, 0, falseop);
6867 o = newUNOP(OP_NULL, 0, (OP*)logop);
6869 trueop->op_next = falseop->op_next = o;
6876 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
6878 Constructs and returns a C<range> op, with subordinate C<flip> and
6879 C<flop> ops. I<flags> gives the eight bits of C<op_flags> for the
6880 C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
6881 for both the C<flip> and C<range> ops, except that the bit with value
6882 1 is automatically set. I<left> and I<right> supply the expressions
6883 controlling the endpoints of the range; they are consumed by this function
6884 and become part of the constructed op tree.
6890 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
6899 PERL_ARGS_ASSERT_NEWRANGE;
6901 range = S_alloc_LOGOP(aTHX_ OP_RANGE, left, LINKLIST(right));
6902 range->op_flags = OPf_KIDS;
6903 leftstart = LINKLIST(left);
6904 range->op_private = (U8)(1 | (flags >> 8));
6906 /* make left and right siblings */
6907 op_sibling_splice((OP*)range, left, 0, right);
6909 range->op_next = (OP*)range;
6910 flip = newUNOP(OP_FLIP, flags, (OP*)range);
6911 flop = newUNOP(OP_FLOP, 0, flip);
6912 o = newUNOP(OP_NULL, 0, flop);
6914 range->op_next = leftstart;
6916 left->op_next = flip;
6917 right->op_next = flop;
6920 pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0);
6921 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
6923 pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0);;
6924 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
6925 SvPADTMP_on(PAD_SV(flip->op_targ));
6927 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
6928 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
6930 /* check barewords before they might be optimized aways */
6931 if (flip->op_private && cSVOPx(left)->op_private & OPpCONST_STRICT)
6932 no_bareword_allowed(left);
6933 if (flop->op_private && cSVOPx(right)->op_private & OPpCONST_STRICT)
6934 no_bareword_allowed(right);
6937 if (!flip->op_private || !flop->op_private)
6938 LINKLIST(o); /* blow off optimizer unless constant */
6944 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
6946 Constructs, checks, and returns an op tree expressing a loop. This is
6947 only a loop in the control flow through the op tree; it does not have
6948 the heavyweight loop structure that allows exiting the loop by C<last>
6949 and suchlike. I<flags> gives the eight bits of C<op_flags> for the
6950 top-level op, except that some bits will be set automatically as required.
6951 I<expr> supplies the expression controlling loop iteration, and I<block>
6952 supplies the body of the loop; they are consumed by this function and
6953 become part of the constructed op tree. I<debuggable> is currently
6954 unused and should always be 1.
6960 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
6964 const bool once = block && block->op_flags & OPf_SPECIAL &&
6965 block->op_type == OP_NULL;
6967 PERL_UNUSED_ARG(debuggable);
6971 (expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
6972 || ( expr->op_type == OP_NOT
6973 && cUNOPx(expr)->op_first->op_type == OP_CONST
6974 && SvTRUE(cSVOPx_sv(cUNOPx(expr)->op_first))
6977 /* Return the block now, so that S_new_logop does not try to
6979 return block; /* do {} while 0 does once */
6980 if (expr->op_type == OP_READLINE
6981 || expr->op_type == OP_READDIR
6982 || expr->op_type == OP_GLOB
6983 || expr->op_type == OP_EACH || expr->op_type == OP_AEACH
6984 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
6985 expr = newUNOP(OP_DEFINED, 0,
6986 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
6987 } else if (expr->op_flags & OPf_KIDS) {
6988 const OP * const k1 = ((UNOP*)expr)->op_first;
6989 const OP * const k2 = k1 ? OP_SIBLING(k1) : NULL;
6990 switch (expr->op_type) {
6992 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
6993 && (k2->op_flags & OPf_STACKED)
6994 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
6995 expr = newUNOP(OP_DEFINED, 0, expr);
6999 if (k1 && (k1->op_type == OP_READDIR
7000 || k1->op_type == OP_GLOB
7001 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
7002 || k1->op_type == OP_EACH
7003 || k1->op_type == OP_AEACH))
7004 expr = newUNOP(OP_DEFINED, 0, expr);
7010 /* if block is null, the next op_append_elem() would put UNSTACK, a scalar
7011 * op, in listop. This is wrong. [perl #27024] */
7013 block = newOP(OP_NULL, 0);
7014 listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
7015 o = new_logop(OP_AND, 0, &expr, &listop);
7022 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
7024 if (once && o != listop)
7026 assert(cUNOPo->op_first->op_type == OP_AND
7027 || cUNOPo->op_first->op_type == OP_OR);
7028 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
7032 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
7034 o->op_flags |= flags;
7036 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
7041 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my
7043 Constructs, checks, and returns an op tree expressing a C<while> loop.
7044 This is a heavyweight loop, with structure that allows exiting the loop
7045 by C<last> and suchlike.
7047 I<loop> is an optional preconstructed C<enterloop> op to use in the
7048 loop; if it is null then a suitable op will be constructed automatically.
7049 I<expr> supplies the loop's controlling expression. I<block> supplies the
7050 main body of the loop, and I<cont> optionally supplies a C<continue> block
7051 that operates as a second half of the body. All of these optree inputs
7052 are consumed by this function and become part of the constructed op tree.
7054 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
7055 op and, shifted up eight bits, the eight bits of C<op_private> for
7056 the C<leaveloop> op, except that (in both cases) some bits will be set
7057 automatically. I<debuggable> is currently unused and should always be 1.
7058 I<has_my> can be supplied as true to force the
7059 loop body to be enclosed in its own scope.
7065 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
7066 OP *expr, OP *block, OP *cont, I32 has_my)
7075 PERL_UNUSED_ARG(debuggable);
7078 if (expr->op_type == OP_READLINE
7079 || expr->op_type == OP_READDIR
7080 || expr->op_type == OP_GLOB
7081 || expr->op_type == OP_EACH || expr->op_type == OP_AEACH
7082 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
7083 expr = newUNOP(OP_DEFINED, 0,
7084 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
7085 } else if (expr->op_flags & OPf_KIDS) {
7086 const OP * const k1 = ((UNOP*)expr)->op_first;
7087 const OP * const k2 = (k1) ? OP_SIBLING(k1) : NULL;
7088 switch (expr->op_type) {
7090 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
7091 && (k2->op_flags & OPf_STACKED)
7092 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
7093 expr = newUNOP(OP_DEFINED, 0, expr);
7097 if (k1 && (k1->op_type == OP_READDIR
7098 || k1->op_type == OP_GLOB
7099 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
7100 || k1->op_type == OP_EACH
7101 || k1->op_type == OP_AEACH))
7102 expr = newUNOP(OP_DEFINED, 0, expr);
7109 block = newOP(OP_NULL, 0);
7110 else if (cont || has_my) {
7111 block = op_scope(block);
7115 next = LINKLIST(cont);
7118 OP * const unstack = newOP(OP_UNSTACK, 0);
7121 cont = op_append_elem(OP_LINESEQ, cont, unstack);
7125 listop = op_append_list(OP_LINESEQ, block, cont);
7127 redo = LINKLIST(listop);
7131 o = new_logop(OP_AND, 0, &expr, &listop);
7132 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
7134 return expr; /* listop already freed by new_logop */
7137 ((LISTOP*)listop)->op_last->op_next =
7138 (o == listop ? redo : LINKLIST(o));
7144 NewOp(1101,loop,1,LOOP);
7145 CHANGE_TYPE(loop, OP_ENTERLOOP);
7146 loop->op_private = 0;
7147 loop->op_next = (OP*)loop;
7150 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
7152 loop->op_redoop = redo;
7153 loop->op_lastop = o;
7154 o->op_private |= loopflags;
7157 loop->op_nextop = next;
7159 loop->op_nextop = o;
7161 o->op_flags |= flags;
7162 o->op_private |= (flags >> 8);
7167 =for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont
7169 Constructs, checks, and returns an op tree expressing a C<foreach>
7170 loop (iteration through a list of values). This is a heavyweight loop,
7171 with structure that allows exiting the loop by C<last> and suchlike.
7173 I<sv> optionally supplies the variable that will be aliased to each
7174 item in turn; if null, it defaults to C<$_> (either lexical or global).
7175 I<expr> supplies the list of values to iterate over. I<block> supplies
7176 the main body of the loop, and I<cont> optionally supplies a C<continue>
7177 block that operates as a second half of the body. All of these optree
7178 inputs are consumed by this function and become part of the constructed
7181 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
7182 op and, shifted up eight bits, the eight bits of C<op_private> for
7183 the C<leaveloop> op, except that (in both cases) some bits will be set
7190 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
7195 PADOFFSET padoff = 0;
7199 PERL_ARGS_ASSERT_NEWFOROP;
7202 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
7203 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
7204 CHANGE_TYPE(sv, OP_RV2GV);
7206 /* The op_type check is needed to prevent a possible segfault
7207 * if the loop variable is undeclared and 'strict vars' is in
7208 * effect. This is illegal but is nonetheless parsed, so we
7209 * may reach this point with an OP_CONST where we're expecting
7212 if (cUNOPx(sv)->op_first->op_type == OP_GV
7213 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
7214 iterpflags |= OPpITER_DEF;
7216 else if (sv->op_type == OP_PADSV) { /* private variable */
7217 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
7218 padoff = sv->op_targ;
7222 PAD_COMPNAME_GEN_set(padoff, PERL_INT_MAX);
7224 else if (sv->op_type == OP_NULL && sv->op_targ == OP_SREFGEN)
7227 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
7229 SV *const namesv = PAD_COMPNAME_SV(padoff);
7231 const char *const name = SvPV_const(namesv, len);
7233 if (len == 2 && name[0] == '$' && name[1] == '_')
7234 iterpflags |= OPpITER_DEF;
7238 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
7239 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
7240 sv = newGVOP(OP_GV, 0, PL_defgv);
7245 iterpflags |= OPpITER_DEF;
7248 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
7249 expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER)), 1), OP_GREPSTART);
7250 iterflags |= OPf_STACKED;
7252 else if (expr->op_type == OP_NULL &&
7253 (expr->op_flags & OPf_KIDS) &&
7254 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
7256 /* Basically turn for($x..$y) into the same as for($x,$y), but we
7257 * set the STACKED flag to indicate that these values are to be
7258 * treated as min/max values by 'pp_enteriter'.
7260 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
7261 LOGOP* const range = (LOGOP*) flip->op_first;
7262 OP* const left = range->op_first;
7263 OP* const right = OP_SIBLING(left);
7266 range->op_flags &= ~OPf_KIDS;
7267 /* detach range's children */
7268 op_sibling_splice((OP*)range, NULL, -1, NULL);
7270 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
7271 listop->op_first->op_next = range->op_next;
7272 left->op_next = range->op_other;
7273 right->op_next = (OP*)listop;
7274 listop->op_next = listop->op_first;
7277 expr = (OP*)(listop);
7279 iterflags |= OPf_STACKED;
7282 expr = op_lvalue(force_list(expr, 1), OP_GREPSTART);
7285 loop = (LOOP*)list(op_convert_list(OP_ENTERITER, iterflags,
7286 op_append_elem(OP_LIST, expr, scalar(sv))));
7287 assert(!loop->op_next);
7288 /* for my $x () sets OPpLVAL_INTRO;
7289 * for our $x () sets OPpOUR_INTRO */
7290 loop->op_private = (U8)iterpflags;
7291 if (loop->op_slabbed
7292 && DIFF(loop, OpSLOT(loop)->opslot_next)
7293 < SIZE_TO_PSIZE(sizeof(LOOP)))
7296 NewOp(1234,tmp,1,LOOP);
7297 Copy(loop,tmp,1,LISTOP);
7298 #ifdef PERL_OP_PARENT
7299 assert(loop->op_last->op_sibling == (OP*)loop);
7300 loop->op_last->op_sibling = (OP*)tmp; /*point back to new parent */
7302 S_op_destroy(aTHX_ (OP*)loop);
7305 else if (!loop->op_slabbed)
7306 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
7307 loop->op_targ = padoff;
7308 wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0);
7313 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
7315 Constructs, checks, and returns a loop-exiting op (such as C<goto>
7316 or C<last>). I<type> is the opcode. I<label> supplies the parameter
7317 determining the target of the op; it is consumed by this function and
7318 becomes part of the constructed op tree.
7324 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
7328 PERL_ARGS_ASSERT_NEWLOOPEX;
7330 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
7332 if (type != OP_GOTO) {
7333 /* "last()" means "last" */
7334 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS)) {
7335 o = newOP(type, OPf_SPECIAL);
7339 /* Check whether it's going to be a goto &function */
7340 if (label->op_type == OP_ENTERSUB
7341 && !(label->op_flags & OPf_STACKED))
7342 label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN));
7345 /* Check for a constant argument */
7346 if (label->op_type == OP_CONST) {
7347 SV * const sv = ((SVOP *)label)->op_sv;
7349 const char *s = SvPV_const(sv,l);
7350 if (l == strlen(s)) {
7352 SvUTF8(((SVOP*)label)->op_sv),
7354 SvPV_nolen_const(((SVOP*)label)->op_sv)));
7358 /* If we have already created an op, we do not need the label. */
7361 else o = newUNOP(type, OPf_STACKED, label);
7363 PL_hints |= HINT_BLOCK_SCOPE;
7367 /* if the condition is a literal array or hash
7368 (or @{ ... } etc), make a reference to it.
7371 S_ref_array_or_hash(pTHX_ OP *cond)
7374 && (cond->op_type == OP_RV2AV
7375 || cond->op_type == OP_PADAV
7376 || cond->op_type == OP_RV2HV
7377 || cond->op_type == OP_PADHV))
7379 return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN));
7382 && (cond->op_type == OP_ASLICE
7383 || cond->op_type == OP_KVASLICE
7384 || cond->op_type == OP_HSLICE
7385 || cond->op_type == OP_KVHSLICE)) {
7387 /* anonlist now needs a list from this op, was previously used in
7389 cond->op_flags |= ~(OPf_WANT_SCALAR | OPf_REF);
7390 cond->op_flags |= OPf_WANT_LIST;
7392 return newANONLIST(op_lvalue(cond, OP_ANONLIST));
7399 /* These construct the optree fragments representing given()
7402 entergiven and enterwhen are LOGOPs; the op_other pointer
7403 points up to the associated leave op. We need this so we
7404 can put it in the context and make break/continue work.
7405 (Also, of course, pp_enterwhen will jump straight to
7406 op_other if the match fails.)
7410 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
7411 I32 enter_opcode, I32 leave_opcode,
7412 PADOFFSET entertarg)
7418 PERL_ARGS_ASSERT_NEWGIVWHENOP;
7420 enterop = S_alloc_LOGOP(aTHX_ enter_opcode, block, NULL);
7421 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
7422 enterop->op_private = 0;
7424 o = newUNOP(leave_opcode, 0, (OP *) enterop);
7427 /* prepend cond if we have one */
7428 op_sibling_splice((OP*)enterop, NULL, 0, scalar(cond));
7430 o->op_next = LINKLIST(cond);
7431 cond->op_next = (OP *) enterop;
7434 /* This is a default {} block */
7435 enterop->op_flags |= OPf_SPECIAL;
7436 o ->op_flags |= OPf_SPECIAL;
7438 o->op_next = (OP *) enterop;
7441 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
7442 entergiven and enterwhen both
7445 enterop->op_next = LINKLIST(block);
7446 block->op_next = enterop->op_other = o;
7451 /* Does this look like a boolean operation? For these purposes
7452 a boolean operation is:
7453 - a subroutine call [*]
7454 - a logical connective
7455 - a comparison operator
7456 - a filetest operator, with the exception of -s -M -A -C
7457 - defined(), exists() or eof()
7458 - /$re/ or $foo =~ /$re/
7460 [*] possibly surprising
7463 S_looks_like_bool(pTHX_ const OP *o)
7465 PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
7467 switch(o->op_type) {
7470 return looks_like_bool(cLOGOPo->op_first);
7474 OP* sibl = OP_SIBLING(cLOGOPo->op_first);
7477 looks_like_bool(cLOGOPo->op_first)
7478 && looks_like_bool(sibl));
7484 o->op_flags & OPf_KIDS
7485 && looks_like_bool(cUNOPo->op_first));
7489 case OP_NOT: case OP_XOR:
7491 case OP_EQ: case OP_NE: case OP_LT:
7492 case OP_GT: case OP_LE: case OP_GE:
7494 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
7495 case OP_I_GT: case OP_I_LE: case OP_I_GE:
7497 case OP_SEQ: case OP_SNE: case OP_SLT:
7498 case OP_SGT: case OP_SLE: case OP_SGE:
7502 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
7503 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
7504 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
7505 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
7506 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
7507 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
7508 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
7509 case OP_FTTEXT: case OP_FTBINARY:
7511 case OP_DEFINED: case OP_EXISTS:
7512 case OP_MATCH: case OP_EOF:
7519 /* Detect comparisons that have been optimized away */
7520 if (cSVOPo->op_sv == &PL_sv_yes
7521 || cSVOPo->op_sv == &PL_sv_no)
7534 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
7536 Constructs, checks, and returns an op tree expressing a C<given> block.
7537 I<cond> supplies the expression that will be locally assigned to a lexical
7538 variable, and I<block> supplies the body of the C<given> construct; they
7539 are consumed by this function and become part of the constructed op tree.
7540 I<defsv_off> is the pad offset of the scalar lexical variable that will
7541 be affected. If it is 0, the global $_ will be used.
7547 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
7549 PERL_ARGS_ASSERT_NEWGIVENOP;
7550 return newGIVWHENOP(
7551 ref_array_or_hash(cond),
7553 OP_ENTERGIVEN, OP_LEAVEGIVEN,
7558 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
7560 Constructs, checks, and returns an op tree expressing a C<when> block.
7561 I<cond> supplies the test expression, and I<block> supplies the block
7562 that will be executed if the test evaluates to true; they are consumed
7563 by this function and become part of the constructed op tree. I<cond>
7564 will be interpreted DWIMically, often as a comparison against C<$_>,
7565 and may be null to generate a C<default> block.
7571 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
7573 const bool cond_llb = (!cond || looks_like_bool(cond));
7576 PERL_ARGS_ASSERT_NEWWHENOP;
7581 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
7583 scalar(ref_array_or_hash(cond)));
7586 return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0);
7589 /* must not conflict with SVf_UTF8 */
7590 #define CV_CKPROTO_CURSTASH 0x1
7593 Perl_cv_ckproto_len_flags(pTHX_ const CV *cv, const GV *gv, const char *p,
7594 const STRLEN len, const U32 flags)
7596 SV *name = NULL, *msg;
7597 const char * cvp = SvROK(cv)
7598 ? SvTYPE(SvRV_const(cv)) == SVt_PVCV
7599 ? (cv = (const CV *)SvRV_const(cv), CvPROTO(cv))
7602 STRLEN clen = CvPROTOLEN(cv), plen = len;
7604 PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS;
7606 if (p == NULL && cvp == NULL)
7609 if (!ckWARN_d(WARN_PROTOTYPE))
7613 p = S_strip_spaces(aTHX_ p, &plen);
7614 cvp = S_strip_spaces(aTHX_ cvp, &clen);
7615 if ((flags & SVf_UTF8) == SvUTF8(cv)) {
7616 if (plen == clen && memEQ(cvp, p, plen))
7619 if (flags & SVf_UTF8) {
7620 if (bytes_cmp_utf8((const U8 *)cvp, clen, (const U8 *)p, plen) == 0)
7624 if (bytes_cmp_utf8((const U8 *)p, plen, (const U8 *)cvp, clen) == 0)
7630 msg = sv_newmortal();
7635 gv_efullname3(name = sv_newmortal(), gv, NULL);
7636 else if (SvPOK(gv) && *SvPVX((SV *)gv) == '&')
7637 name = newSVpvn_flags(SvPVX((SV *)gv)+1, SvCUR(gv)-1, SvUTF8(gv)|SVs_TEMP);
7638 else if (flags & CV_CKPROTO_CURSTASH || SvROK(gv)) {
7639 name = sv_2mortal(newSVhek(HvNAME_HEK(PL_curstash)));
7640 sv_catpvs(name, "::");
7642 assert (SvTYPE(SvRV_const(gv)) == SVt_PVCV);
7643 assert (CvNAMED(SvRV_const(gv)));
7644 sv_cathek(name, CvNAME_HEK(MUTABLE_CV(SvRV_const(gv))));
7646 else sv_catsv(name, (SV *)gv);
7648 else name = (SV *)gv;
7650 sv_setpvs(msg, "Prototype mismatch:");
7652 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
7654 Perl_sv_catpvf(aTHX_ msg, " (%"UTF8f")",
7655 UTF8fARG(SvUTF8(cv),clen,cvp)
7658 sv_catpvs(msg, ": none");
7659 sv_catpvs(msg, " vs ");
7661 Perl_sv_catpvf(aTHX_ msg, "(%"UTF8f")", UTF8fARG(flags & SVf_UTF8,len,p));
7663 sv_catpvs(msg, "none");
7664 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
7667 static void const_sv_xsub(pTHX_ CV* cv);
7668 static void const_av_xsub(pTHX_ CV* cv);
7672 =head1 Optree Manipulation Functions
7674 =for apidoc cv_const_sv
7676 If C<cv> is a constant sub eligible for inlining, returns the constant
7677 value returned by the sub. Otherwise, returns NULL.
7679 Constant subs can be created with C<newCONSTSUB> or as described in
7680 L<perlsub/"Constant Functions">.
7685 Perl_cv_const_sv(const CV *const cv)
7690 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
7692 sv = CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
7693 if (sv && SvTYPE(sv) == SVt_PVAV) return NULL;
7698 Perl_cv_const_sv_or_av(const CV * const cv)
7702 if (SvROK(cv)) return SvRV((SV *)cv);
7703 assert (SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
7704 return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
7707 /* op_const_sv: examine an optree to determine whether it's in-lineable.
7708 * Can be called in 2 ways:
7711 * look for a single OP_CONST with attached value: return the value
7713 * allow_lex && !CvCONST(cv);
7715 * examine the clone prototype, and if contains only a single
7716 * OP_CONST, return the value; or if it contains a single PADSV ref-
7717 * erencing an outer lexical, turn on CvCONST to indicate the CV is
7718 * a candidate for "constizing" at clone time, and return NULL.
7722 S_op_const_sv(pTHX_ const OP *o, CV *cv, bool allow_lex)
7730 for (; o; o = o->op_next) {
7731 const OPCODE type = o->op_type;
7733 if (type == OP_NEXTSTATE || type == OP_LINESEQ
7735 || type == OP_PUSHMARK)
7737 if (type == OP_DBSTATE)
7739 if (type == OP_LEAVESUB)
7743 if (type == OP_CONST && cSVOPo->op_sv)
7745 else if (type == OP_UNDEF && !o->op_private) {
7749 else if (allow_lex && type == OP_PADSV) {
7750 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
7752 sv = &PL_sv_undef; /* an arbitrary non-null value */
7770 S_already_defined(pTHX_ CV *const cv, OP * const block, OP * const o,
7771 PADNAME * const name, SV ** const const_svp)
7778 if (CvFLAGS(PL_compcv)) {
7779 /* might have had built-in attrs applied */
7780 const bool pureperl = !CvISXSUB(cv) && CvROOT(cv);
7781 if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && pureperl
7782 && ckWARN(WARN_MISC))
7784 /* protect against fatal warnings leaking compcv */
7785 SAVEFREESV(PL_compcv);
7786 Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
7787 SvREFCNT_inc_simple_void_NN(PL_compcv);
7790 (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS
7791 & ~(CVf_LVALUE * pureperl));
7796 /* redundant check for speed: */
7797 if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) {
7798 const line_t oldline = CopLINE(PL_curcop);
7801 : sv_2mortal(newSVpvn_utf8(
7802 PadnamePV(name)+1,PadnameLEN(name)-1, PadnameUTF8(name)
7804 if (PL_parser && PL_parser->copline != NOLINE)
7805 /* This ensures that warnings are reported at the first
7806 line of a redefinition, not the last. */
7807 CopLINE_set(PL_curcop, PL_parser->copline);
7808 /* protect against fatal warnings leaking compcv */
7809 SAVEFREESV(PL_compcv);
7810 report_redefined_cv(namesv, cv, const_svp);
7811 SvREFCNT_inc_simple_void_NN(PL_compcv);
7812 CopLINE_set(PL_curcop, oldline);
7819 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
7824 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
7827 CV *compcv = PL_compcv;
7830 PADOFFSET pax = o->op_targ;
7831 CV *outcv = CvOUTSIDE(PL_compcv);
7834 bool reusable = FALSE;
7836 #ifdef PERL_DEBUG_READONLY_OPS
7837 OPSLAB *slab = NULL;
7840 PERL_ARGS_ASSERT_NEWMYSUB;
7842 /* Find the pad slot for storing the new sub.
7843 We cannot use PL_comppad, as it is the pad owned by the new sub. We
7844 need to look in CvOUTSIDE and find the pad belonging to the enclos-
7845 ing sub. And then we need to dig deeper if this is a lexical from
7847 my sub foo; sub { sub foo { } }
7850 name = PadlistNAMESARRAY(CvPADLIST(outcv))[pax];
7851 if (PadnameOUTER(name) && PARENT_PAD_INDEX(name)) {
7852 pax = PARENT_PAD_INDEX(name);
7853 outcv = CvOUTSIDE(outcv);
7858 &PadARRAY(PadlistARRAY(CvPADLIST(outcv))
7859 [CvDEPTH(outcv) ? CvDEPTH(outcv) : 1])[pax];
7860 spot = (CV **)svspot;
7862 if (!(PL_parser && PL_parser->error_count))
7863 move_proto_attr(&proto, &attrs, (GV *)name);
7866 assert(proto->op_type == OP_CONST);
7867 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
7868 ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv);
7878 if (PL_parser && PL_parser->error_count) {
7880 SvREFCNT_dec(PL_compcv);
7885 if (CvDEPTH(outcv) && CvCLONE(compcv)) {
7887 svspot = (SV **)(spot = &clonee);
7889 else if (PadnameIsSTATE(name) || CvDEPTH(outcv))
7893 SvUPGRADE(name, SVt_PVMG);
7894 mg = mg_find(name, PERL_MAGIC_proto);
7895 assert (SvTYPE(*spot) == SVt_PVCV);
7897 hek = CvNAME_HEK(*spot);
7901 PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1);
7902 CvNAME_HEK_set(*spot, hek =
7905 PadnameLEN(name)-1 * (PadnameUTF8(name) ? -1 : 1), hash
7908 CvLEXICAL_on(*spot);
7912 cv = (CV *)mg->mg_obj;
7915 sv_magic(name, &PL_sv_undef, PERL_MAGIC_proto, NULL, 0);
7916 mg = mg_find(name, PERL_MAGIC_proto);
7918 spot = (CV **)(svspot = &mg->mg_obj);
7922 /* This makes sub {}; work as expected. */
7923 if (block->op_type == OP_STUB) {
7924 const line_t l = PL_parser->copline;
7926 block = newSTATEOP(0, NULL, 0);
7927 PL_parser->copline = l;
7929 block = CvLVALUE(compcv)
7930 || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv))
7931 ? newUNOP(OP_LEAVESUBLV, 0,
7932 op_lvalue(scalarseq(block), OP_LEAVESUBLV))
7933 : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
7934 start = LINKLIST(block);
7938 if (!block || !ps || *ps || attrs
7943 const_sv = S_op_const_sv(aTHX_ start, compcv, FALSE);
7946 const bool exists = CvROOT(cv) || CvXSUB(cv);
7948 /* if the subroutine doesn't exist and wasn't pre-declared
7949 * with a prototype, assume it will be AUTOLOADed,
7950 * skipping the prototype check
7952 if (exists || SvPOK(cv))
7953 cv_ckproto_len_flags(cv, (GV *)name, ps, ps_len, ps_utf8);
7954 /* already defined? */
7956 if (S_already_defined(aTHX_ cv,block,NULL,name,&const_sv))
7959 if (attrs) goto attrs;
7960 /* just a "sub foo;" when &foo is already defined */
7965 else if (CvDEPTH(outcv) && CvCLONE(compcv)) {
7971 SvREFCNT_inc_simple_void_NN(const_sv);
7972 SvFLAGS(const_sv) |= SVs_PADTMP;
7974 assert(!CvROOT(cv) && !CvCONST(cv));
7978 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
7979 CvFILE_set_from_cop(cv, PL_curcop);
7980 CvSTASH_set(cv, PL_curstash);
7983 sv_setpvs(MUTABLE_SV(cv), ""); /* prototype is "" */
7984 CvXSUBANY(cv).any_ptr = const_sv;
7985 CvXSUB(cv) = const_sv_xsub;
7989 CvFLAGS(cv) |= CvMETHOD(compcv);
7991 SvREFCNT_dec(compcv);
7995 /* Checking whether outcv is CvOUTSIDE(compcv) is not sufficient to
7996 determine whether this sub definition is in the same scope as its
7997 declaration. If this sub definition is inside an inner named pack-
7998 age sub (my sub foo; sub bar { sub foo { ... } }), outcv points to
7999 the package sub. So check PadnameOUTER(name) too.
8001 if (outcv == CvOUTSIDE(compcv) && !PadnameOUTER(name)) {
8002 assert(!CvWEAKOUTSIDE(compcv));
8003 SvREFCNT_dec(CvOUTSIDE(compcv));
8004 CvWEAKOUTSIDE_on(compcv);
8006 /* XXX else do we have a circular reference? */
8007 if (cv) { /* must reuse cv in case stub is referenced elsewhere */
8008 /* transfer PL_compcv to cv */
8011 cv_flags_t preserved_flags =
8012 CvFLAGS(cv) & (CVf_BUILTIN_ATTRS|CVf_NAMED);
8013 PADLIST *const temp_padl = CvPADLIST(cv);
8014 CV *const temp_cv = CvOUTSIDE(cv);
8015 const cv_flags_t other_flags =
8016 CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE);
8017 OP * const cvstart = CvSTART(cv);
8021 CvFLAGS(compcv) | preserved_flags;
8022 CvOUTSIDE(cv) = CvOUTSIDE(compcv);
8023 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(compcv);
8024 CvPADLIST_set(cv, CvPADLIST(compcv));
8025 CvOUTSIDE(compcv) = temp_cv;
8026 CvPADLIST_set(compcv, temp_padl);
8027 CvSTART(cv) = CvSTART(compcv);
8028 CvSTART(compcv) = cvstart;
8029 CvFLAGS(compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE);
8030 CvFLAGS(compcv) |= other_flags;
8032 if (CvFILE(cv) && CvDYNFILE(cv)) {
8033 Safefree(CvFILE(cv));
8036 /* inner references to compcv must be fixed up ... */
8037 pad_fixup_inner_anons(CvPADLIST(cv), compcv, cv);
8038 if (PERLDB_INTER)/* Advice debugger on the new sub. */
8039 ++PL_sub_generation;
8042 /* Might have had built-in attributes applied -- propagate them. */
8043 CvFLAGS(cv) |= (CvFLAGS(compcv) & CVf_BUILTIN_ATTRS);
8045 /* ... before we throw it away */
8046 SvREFCNT_dec(compcv);
8047 PL_compcv = compcv = cv;
8055 if (!CvNAME_HEK(cv)) {
8056 if (hek) (void)share_hek_hek(hek);
8060 PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1);
8061 hek = share_hek(PadnamePV(name)+1,
8062 PadnameLEN(name)-1 * (PadnameUTF8(name) ? -1 : 1),
8065 CvNAME_HEK_set(cv, hek);
8067 if (const_sv) goto clone;
8069 CvFILE_set_from_cop(cv, PL_curcop);
8070 CvSTASH_set(cv, PL_curstash);
8073 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
8074 if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
8080 /* If we assign an optree to a PVCV, then we've defined a subroutine that
8081 the debugger could be able to set a breakpoint in, so signal to
8082 pp_entereval that it should not throw away any saved lines at scope
8085 PL_breakable_sub_gen++;
8087 CvROOT(cv)->op_private |= OPpREFCOUNTED;
8088 OpREFCNT_set(CvROOT(cv), 1);
8089 /* The cv no longer needs to hold a refcount on the slab, as CvROOT
8090 itself has a refcount. */
8092 OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv));
8093 #ifdef PERL_DEBUG_READONLY_OPS
8094 slab = (OPSLAB *)CvSTART(cv);
8096 CvSTART(cv) = start;
8098 finalize_optree(CvROOT(cv));
8099 S_prune_chain_head(&CvSTART(cv));
8101 /* now that optimizer has done its work, adjust pad values */
8103 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
8107 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
8108 apply_attrs(PL_curstash, MUTABLE_SV(cv), attrs);
8112 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
8113 SV * const tmpstr = sv_newmortal();
8114 GV * const db_postponed = gv_fetchpvs("DB::postponed",
8115 GV_ADDMULTI, SVt_PVHV);
8117 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
8120 (long)CopLINE(PL_curcop));
8121 if (HvNAME_HEK(PL_curstash)) {
8122 sv_sethek(tmpstr, HvNAME_HEK(PL_curstash));
8123 sv_catpvs(tmpstr, "::");
8125 else sv_setpvs(tmpstr, "__ANON__::");
8126 sv_catpvn_flags(tmpstr, PadnamePV(name)+1, PadnameLEN(name)-1,
8127 PadnameUTF8(name) ? SV_CATUTF8 : SV_CATBYTES);
8128 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
8129 SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0);
8130 hv = GvHVn(db_postponed);
8131 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) {
8132 CV * const pcv = GvCV(db_postponed);
8138 call_sv(MUTABLE_SV(pcv), G_DISCARD);
8146 assert(CvDEPTH(outcv));
8148 &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[CvDEPTH(outcv)])[pax];
8149 if (reusable) cv_clone_into(clonee, *spot);
8150 else *spot = cv_clone(clonee);
8151 SvREFCNT_dec_NN(clonee);
8154 if (CvDEPTH(outcv) && !reusable && PadnameIsSTATE(name)) {
8155 PADOFFSET depth = CvDEPTH(outcv);
8158 svspot = &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[depth])[pax];
8160 *svspot = SvREFCNT_inc_simple_NN(cv);
8161 SvREFCNT_dec(oldcv);
8167 PL_parser->copline = NOLINE;
8169 #ifdef PERL_DEBUG_READONLY_OPS
8179 Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
8180 OP *block, bool o_is_gv)
8184 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
8188 const bool ec = PL_parser && PL_parser->error_count;
8189 /* If the subroutine has no body, no attributes, and no builtin attributes
8190 then it's just a sub declaration, and we may be able to get away with
8191 storing with a placeholder scalar in the symbol table, rather than a
8192 full CV. If anything is present then it will take a full CV to
8194 const I32 gv_fetch_flags
8195 = ec ? GV_NOADD_NOINIT :
8196 (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS))
8197 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
8199 const char * const name =
8200 o ? SvPV_const(o_is_gv ? (SV *)o : cSVOPo->op_sv, namlen) : NULL;
8202 bool name_is_utf8 = o && !o_is_gv && SvUTF8(cSVOPo->op_sv);
8204 #ifdef PERL_DEBUG_READONLY_OPS
8205 OPSLAB *slab = NULL;
8206 bool special = FALSE;
8214 /* Try to optimise and avoid creating a GV. Instead, the CV’s name
8215 hek and CvSTASH pointer together can imply the GV. If the name
8216 contains a package name, then GvSTASH(CvGV(cv)) may differ from
8217 CvSTASH, so forego the optimisation if we find any.
8218 Also, we may be called from load_module at run time, so
8219 PL_curstash (which sets CvSTASH) may not point to the stash the
8220 sub is stored in. */
8222 ec ? GV_NOADD_NOINIT
8223 : PL_curstash != CopSTASH(PL_curcop)
8224 || memchr(name, ':', namlen) || memchr(name, '\'', namlen)
8226 : GV_ADDMULTI | GV_NOINIT;
8227 gv = gv_fetchsv(cSVOPo->op_sv, flags, SVt_PVCV);
8229 } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
8230 SV * const sv = sv_newmortal();
8231 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
8232 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
8233 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
8234 gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
8236 } else if (PL_curstash) {
8237 gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
8240 gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
8244 move_proto_attr(&proto, &attrs,
8245 isGV(gv) ? gv : (GV *)cSVOPo->op_sv);
8248 assert(proto->op_type == OP_CONST);
8249 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
8250 ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv);
8264 if (name) SvREFCNT_dec(PL_compcv);
8265 else cv = PL_compcv;
8267 if (name && block) {
8268 const char *s = strrchr(name, ':');
8270 if (strEQ(s, "BEGIN")) {
8271 if (PL_in_eval & EVAL_KEEPERR)
8272 Perl_croak_nocontext("BEGIN not safe after errors--compilation aborted");
8274 SV * const errsv = ERRSV;
8275 /* force display of errors found but not reported */
8276 sv_catpvs(errsv, "BEGIN not safe after errors--compilation aborted");
8277 Perl_croak_nocontext("%"SVf, SVfARG(errsv));
8284 if (!block && SvTYPE(gv) != SVt_PVGV) {
8285 /* If we are not defining a new sub and the existing one is not a
8287 if (attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)) {
8288 /* We are applying attributes to an existing sub, so we need it
8289 upgraded if it is a constant. */
8290 if (SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVCV)
8291 gv_init_pvn(gv, PL_curstash, name, namlen,
8292 SVf_UTF8 * name_is_utf8);
8294 else { /* Maybe prototype now, and had at maximum
8295 a prototype or const/sub ref before. */
8296 if (SvTYPE(gv) > SVt_NULL) {
8297 cv_ckproto_len_flags((const CV *)gv,
8298 o ? (const GV *)cSVOPo->op_sv : NULL, ps,
8303 sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
8304 if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(gv));
8307 sv_setiv(MUTABLE_SV(gv), -1);
8310 SvREFCNT_dec(PL_compcv);
8311 cv = PL_compcv = NULL;
8316 cv = (!name || (isGV(gv) && GvCVGEN(gv)))
8320 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
8325 /* This makes sub {}; work as expected. */
8326 if (block->op_type == OP_STUB) {
8327 const line_t l = PL_parser->copline;
8329 block = newSTATEOP(0, NULL, 0);
8330 PL_parser->copline = l;
8332 block = CvLVALUE(PL_compcv)
8333 || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv)
8334 && (!isGV(gv) || !GvASSUMECV(gv)))
8335 ? newUNOP(OP_LEAVESUBLV, 0,
8336 op_lvalue(scalarseq(block), OP_LEAVESUBLV))
8337 : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
8338 start = LINKLIST(block);
8342 if (!block || !ps || *ps || attrs
8343 || CvLVALUE(PL_compcv)
8348 S_op_const_sv(aTHX_ start, PL_compcv, CvCLONE(PL_compcv));
8350 if (SvPOK(gv) || (SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVCV)) {
8352 cv_ckproto_len_flags((const CV *)gv,
8353 o ? (const GV *)cSVOPo->op_sv : NULL, ps,
8354 ps_len, ps_utf8|CV_CKPROTO_CURSTASH);
8356 /* All the other code for sub redefinition warnings expects the
8357 clobbered sub to be a CV. Instead of making all those code
8358 paths more complex, just inline the RV version here. */
8359 const line_t oldline = CopLINE(PL_curcop);
8360 assert(IN_PERL_COMPILETIME);
8361 if (PL_parser && PL_parser->copline != NOLINE)
8362 /* This ensures that warnings are reported at the first
8363 line of a redefinition, not the last. */
8364 CopLINE_set(PL_curcop, PL_parser->copline);
8365 /* protect against fatal warnings leaking compcv */
8366 SAVEFREESV(PL_compcv);
8368 if (ckWARN(WARN_REDEFINE)
8369 || ( ckWARN_d(WARN_REDEFINE)
8370 && ( !const_sv || SvRV(gv) == const_sv
8371 || sv_cmp(SvRV(gv), const_sv) )))
8372 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
8373 "Constant subroutine %"SVf" redefined",
8374 SVfARG(cSVOPo->op_sv));
8376 SvREFCNT_inc_simple_void_NN(PL_compcv);
8377 CopLINE_set(PL_curcop, oldline);
8378 SvREFCNT_dec(SvRV(gv));
8383 const bool exists = CvROOT(cv) || CvXSUB(cv);
8385 /* if the subroutine doesn't exist and wasn't pre-declared
8386 * with a prototype, assume it will be AUTOLOADed,
8387 * skipping the prototype check
8389 if (exists || SvPOK(cv))
8390 cv_ckproto_len_flags(cv, gv, ps, ps_len, ps_utf8);
8391 /* already defined (or promised)? */
8392 if (exists || (isGV(gv) && GvASSUMECV(gv))) {
8393 if (S_already_defined(aTHX_ cv, block, o, NULL, &const_sv))
8396 if (attrs) goto attrs;
8397 /* just a "sub foo;" when &foo is already defined */
8398 SAVEFREESV(PL_compcv);
8404 SvREFCNT_inc_simple_void_NN(const_sv);
8405 SvFLAGS(const_sv) |= SVs_PADTMP;
8407 assert(!CvROOT(cv) && !CvCONST(cv));
8409 sv_setpvs(MUTABLE_SV(cv), ""); /* prototype is "" */
8410 CvXSUBANY(cv).any_ptr = const_sv;
8411 CvXSUB(cv) = const_sv_xsub;
8415 CvFLAGS(cv) |= CvMETHOD(PL_compcv);
8418 if (isGV(gv) || CvMETHOD(PL_compcv)) {
8419 if (name && isGV(gv))
8421 cv = newCONSTSUB_flags(
8422 NULL, name, namlen, name_is_utf8 ? SVf_UTF8 : 0,
8425 CvFLAGS(cv) |= CvMETHOD(PL_compcv);
8429 SV_CHECK_THINKFIRST_COW_DROP((SV *)gv);
8430 prepare_SV_for_RV((SV *)gv);
8434 SvRV_set(gv, const_sv);
8438 SvREFCNT_dec(PL_compcv);
8442 if (cv) { /* must reuse cv if autoloaded */
8443 /* transfer PL_compcv to cv */
8446 cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
8447 PADLIST *const temp_av = CvPADLIST(cv);
8448 CV *const temp_cv = CvOUTSIDE(cv);
8449 const cv_flags_t other_flags =
8450 CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE);
8451 OP * const cvstart = CvSTART(cv);
8455 assert(!CvCVGV_RC(cv));
8456 assert(CvGV(cv) == gv);
8461 PERL_HASH(hash, name, namlen);
8471 CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs
8473 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
8474 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
8475 CvPADLIST_set(cv,CvPADLIST(PL_compcv));
8476 CvOUTSIDE(PL_compcv) = temp_cv;
8477 CvPADLIST_set(PL_compcv, temp_av);
8478 CvSTART(cv) = CvSTART(PL_compcv);
8479 CvSTART(PL_compcv) = cvstart;
8480 CvFLAGS(PL_compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE);
8481 CvFLAGS(PL_compcv) |= other_flags;
8483 if (CvFILE(cv) && CvDYNFILE(cv)) {
8484 Safefree(CvFILE(cv));
8486 CvFILE_set_from_cop(cv, PL_curcop);
8487 CvSTASH_set(cv, PL_curstash);
8489 /* inner references to PL_compcv must be fixed up ... */
8490 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
8491 if (PERLDB_INTER)/* Advice debugger on the new sub. */
8492 ++PL_sub_generation;
8495 /* Might have had built-in attributes applied -- propagate them. */
8496 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
8498 /* ... before we throw it away */
8499 SvREFCNT_dec(PL_compcv);
8504 if (name && isGV(gv)) {
8507 if (HvENAME_HEK(GvSTASH(gv)))
8508 /* sub Foo::bar { (shift)+1 } */
8509 gv_method_changed(gv);
8513 SV_CHECK_THINKFIRST_COW_DROP((SV *)gv);
8514 prepare_SV_for_RV((SV *)gv);
8518 SvRV_set(gv, (SV *)cv);
8522 if (isGV(gv)) CvGV_set(cv, gv);
8526 PERL_HASH(hash, name, namlen);
8527 CvNAME_HEK_set(cv, share_hek(name,
8533 CvFILE_set_from_cop(cv, PL_curcop);
8534 CvSTASH_set(cv, PL_curstash);
8538 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
8539 if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
8545 /* If we assign an optree to a PVCV, then we've defined a subroutine that
8546 the debugger could be able to set a breakpoint in, so signal to
8547 pp_entereval that it should not throw away any saved lines at scope
8550 PL_breakable_sub_gen++;
8552 CvROOT(cv)->op_private |= OPpREFCOUNTED;
8553 OpREFCNT_set(CvROOT(cv), 1);
8554 /* The cv no longer needs to hold a refcount on the slab, as CvROOT
8555 itself has a refcount. */
8557 OpslabREFCNT_dec_padok((OPSLAB *)CvSTART(cv));
8558 #ifdef PERL_DEBUG_READONLY_OPS
8559 slab = (OPSLAB *)CvSTART(cv);
8561 CvSTART(cv) = start;
8563 finalize_optree(CvROOT(cv));
8564 S_prune_chain_head(&CvSTART(cv));
8566 /* now that optimizer has done its work, adjust pad values */
8568 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
8572 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
8573 HV *stash = name && !CvNAMED(cv) && GvSTASH(CvGV(cv))
8576 if (!name) SAVEFREESV(cv);
8577 apply_attrs(stash, MUTABLE_SV(cv), attrs);
8578 if (!name) SvREFCNT_inc_simple_void_NN(cv);
8581 if (block && has_name) {
8582 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
8583 SV * const tmpstr = cv_name(cv,NULL,0);
8584 GV * const db_postponed = gv_fetchpvs("DB::postponed",
8585 GV_ADDMULTI, SVt_PVHV);
8587 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
8590 (long)CopLINE(PL_curcop));
8591 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
8592 SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0);
8593 hv = GvHVn(db_postponed);
8594 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) {
8595 CV * const pcv = GvCV(db_postponed);
8601 call_sv(MUTABLE_SV(pcv), G_DISCARD);
8607 if (PL_parser && PL_parser->error_count)
8608 clear_special_blocks(name, gv, cv);
8610 #ifdef PERL_DEBUG_READONLY_OPS
8613 process_special_blocks(floor, name, gv, cv);
8619 PL_parser->copline = NOLINE;
8621 #ifdef PERL_DEBUG_READONLY_OPS
8622 /* Watch out for BEGIN blocks */
8623 if (!special && slab)
8630 S_clear_special_blocks(pTHX_ const char *const fullname,
8631 GV *const gv, CV *const cv) {
8635 PERL_ARGS_ASSERT_CLEAR_SPECIAL_BLOCKS;
8637 colon = strrchr(fullname,':');
8638 name = colon ? colon + 1 : fullname;
8640 if ((*name == 'B' && strEQ(name, "BEGIN"))
8641 || (*name == 'E' && strEQ(name, "END"))
8642 || (*name == 'U' && strEQ(name, "UNITCHECK"))
8643 || (*name == 'C' && strEQ(name, "CHECK"))
8644 || (*name == 'I' && strEQ(name, "INIT"))) {
8650 SvREFCNT_dec_NN(MUTABLE_SV(cv));
8655 S_process_special_blocks(pTHX_ I32 floor, const char *const fullname,
8659 const char *const colon = strrchr(fullname,':');
8660 const char *const name = colon ? colon + 1 : fullname;
8662 PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
8665 if (strEQ(name, "BEGIN")) {
8666 const I32 oldscope = PL_scopestack_ix;
8669 if (floor) LEAVE_SCOPE(floor);
8671 PUSHSTACKi(PERLSI_REQUIRE);
8672 SAVECOPFILE(&PL_compiling);
8673 SAVECOPLINE(&PL_compiling);
8674 SAVEVPTR(PL_curcop);
8676 DEBUG_x( dump_sub(gv) );
8677 Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
8678 GvCV_set(gv,0); /* cv has been hijacked */
8679 call_list(oldscope, PL_beginav);
8689 if strEQ(name, "END") {
8690 DEBUG_x( dump_sub(gv) );
8691 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
8694 } else if (*name == 'U') {
8695 if (strEQ(name, "UNITCHECK")) {
8696 /* It's never too late to run a unitcheck block */
8697 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
8701 } else if (*name == 'C') {
8702 if (strEQ(name, "CHECK")) {
8704 /* diag_listed_as: Too late to run %s block */
8705 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
8706 "Too late to run CHECK block");
8707 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
8711 } else if (*name == 'I') {
8712 if (strEQ(name, "INIT")) {
8714 /* diag_listed_as: Too late to run %s block */
8715 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
8716 "Too late to run INIT block");
8717 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
8723 DEBUG_x( dump_sub(gv) );
8725 GvCV_set(gv,0); /* cv has been hijacked */
8731 =for apidoc newCONSTSUB
8733 See L</newCONSTSUB_flags>.
8739 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
8741 return newCONSTSUB_flags(stash, name, name ? strlen(name) : 0, 0, sv);
8745 =for apidoc newCONSTSUB_flags
8747 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
8748 eligible for inlining at compile-time.
8750 Currently, the only useful value for C<flags> is SVf_UTF8.
8752 The newly created subroutine takes ownership of a reference to the passed in
8755 Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
8756 which won't be called if used as a destructor, but will suppress the overhead
8757 of a call to C<AUTOLOAD>. (This form, however, isn't eligible for inlining at
8764 Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len,
8768 const char *const file = CopFILE(PL_curcop);
8772 if (IN_PERL_RUNTIME) {
8773 /* at runtime, it's not safe to manipulate PL_curcop: it may be
8774 * an op shared between threads. Use a non-shared COP for our
8776 SAVEVPTR(PL_curcop);
8777 SAVECOMPILEWARNINGS();
8778 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
8779 PL_curcop = &PL_compiling;
8781 SAVECOPLINE(PL_curcop);
8782 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
8785 PL_hints &= ~HINT_BLOCK_SCOPE;
8788 SAVEGENERICSV(PL_curstash);
8789 PL_curstash = (HV *)SvREFCNT_inc_simple_NN(stash);
8792 /* Protect sv against leakage caused by fatal warnings. */
8793 if (sv) SAVEFREESV(sv);
8795 /* file becomes the CvFILE. For an XS, it's usually static storage,
8796 and so doesn't get free()d. (It's expected to be from the C pre-
8797 processor __FILE__ directive). But we need a dynamically allocated one,
8798 and we need it to get freed. */
8799 cv = newXS_len_flags(name, len,
8800 sv && SvTYPE(sv) == SVt_PVAV
8803 file ? file : "", "",
8804 &sv, XS_DYNAMIC_FILENAME | flags);
8805 CvXSUBANY(cv).any_ptr = SvREFCNT_inc_simple(sv);
8814 =for apidoc U||newXS
8816 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
8817 static storage, as it is used directly as CvFILE(), without a copy being made.
8823 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
8825 PERL_ARGS_ASSERT_NEWXS;
8826 return newXS_len_flags(
8827 name, name ? strlen(name) : 0, subaddr, filename, NULL, NULL, 0
8832 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
8833 const char *const filename, const char *const proto,
8836 PERL_ARGS_ASSERT_NEWXS_FLAGS;
8837 return newXS_len_flags(
8838 name, name ? strlen(name) : 0, subaddr, filename, proto, NULL, flags
8843 Perl_newXS_deffile(pTHX_ const char *name, XSUBADDR_t subaddr)
8845 PERL_ARGS_ASSERT_NEWXS_DEFFILE;
8846 return newXS_len_flags(
8847 name, name ? strlen(name) : 0, subaddr, NULL, NULL, NULL, 0
8852 Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len,
8853 XSUBADDR_t subaddr, const char *const filename,
8854 const char *const proto, SV **const_svp,
8858 bool interleave = FALSE;
8860 PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS;
8862 Perl_croak_nocontext("panic: no address for '%s' in '%s'",
8863 name, filename ? filename : PL_xsubfilename);
8865 GV * const gv = gv_fetchpvn(
8866 name ? name : PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
8867 name ? len : PL_curstash ? sizeof("__ANON__") - 1:
8868 sizeof("__ANON__::__ANON__") - 1,
8869 GV_ADDMULTI | flags, SVt_PVCV);
8871 if ((cv = (name ? GvCV(gv) : NULL))) {
8873 /* just a cached method */
8877 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
8878 /* already defined (or promised) */
8879 /* Redundant check that allows us to avoid creating an SV
8880 most of the time: */
8881 if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) {
8882 report_redefined_cv(newSVpvn_flags(
8883 name,len,(flags&SVf_UTF8)|SVs_TEMP
8894 if (cv) /* must reuse cv if autoloaded */
8897 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
8901 if (HvENAME_HEK(GvSTASH(gv)))
8902 gv_method_changed(gv); /* newXS */
8908 (void)gv_fetchfile(filename);
8909 assert(!CvDYNFILE(cv)); /* cv_undef should have turned it off */
8910 if (flags & XS_DYNAMIC_FILENAME) {
8912 CvFILE(cv) = savepv(filename);
8914 /* NOTE: not copied, as it is expected to be an external constant string */
8915 CvFILE(cv) = (char *)filename;
8918 assert((flags & XS_DYNAMIC_FILENAME) == 0 && PL_xsubfilename);
8919 CvFILE(cv) = (char*)PL_xsubfilename;
8922 CvXSUB(cv) = subaddr;
8923 #ifndef PERL_IMPLICIT_CONTEXT
8924 CvHSCXT(cv) = &PL_stack_sp;
8930 process_special_blocks(0, name, gv, cv);
8933 } /* <- not a conditional branch */
8936 sv_setpv(MUTABLE_SV(cv), proto);
8937 if (interleave) LEAVE;
8942 Perl_newSTUB(pTHX_ GV *gv, bool fake)
8944 CV *cv = MUTABLE_CV(newSV_type(SVt_PVCV));
8946 PERL_ARGS_ASSERT_NEWSTUB;
8950 if (!fake && HvENAME_HEK(GvSTASH(gv)))
8951 gv_method_changed(gv);
8953 cvgv = gv_fetchsv((SV *)gv, GV_ADDMULTI, SVt_PVCV);
8958 CvFILE_set_from_cop(cv, PL_curcop);
8959 CvSTASH_set(cv, PL_curstash);
8965 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
8971 if (PL_parser && PL_parser->error_count) {
8977 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
8978 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
8981 if ((cv = GvFORM(gv))) {
8982 if (ckWARN(WARN_REDEFINE)) {
8983 const line_t oldline = CopLINE(PL_curcop);
8984 if (PL_parser && PL_parser->copline != NOLINE)
8985 CopLINE_set(PL_curcop, PL_parser->copline);
8987 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
8988 "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
8990 /* diag_listed_as: Format %s redefined */
8991 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
8992 "Format STDOUT redefined");
8994 CopLINE_set(PL_curcop, oldline);
8999 GvFORM(gv) = (CV *)SvREFCNT_inc_simple_NN(cv);
9001 CvFILE_set_from_cop(cv, PL_curcop);
9004 pad_tidy(padtidy_FORMAT);
9005 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
9006 CvROOT(cv)->op_private |= OPpREFCOUNTED;
9007 OpREFCNT_set(CvROOT(cv), 1);
9008 CvSTART(cv) = LINKLIST(CvROOT(cv));
9009 CvROOT(cv)->op_next = 0;
9010 CALL_PEEP(CvSTART(cv));
9011 finalize_optree(CvROOT(cv));
9012 S_prune_chain_head(&CvSTART(cv));
9018 PL_parser->copline = NOLINE;
9023 Perl_newANONLIST(pTHX_ OP *o)
9025 return op_convert_list(OP_ANONLIST, OPf_SPECIAL, o);
9029 Perl_newANONHASH(pTHX_ OP *o)
9031 return op_convert_list(OP_ANONHASH, OPf_SPECIAL, o);
9035 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
9037 return newANONATTRSUB(floor, proto, NULL, block);
9041 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
9043 return newUNOP(OP_REFGEN, 0,
9044 newSVOP(OP_ANONCODE, 0,
9045 MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block))));
9049 Perl_oopsAV(pTHX_ OP *o)
9053 PERL_ARGS_ASSERT_OOPSAV;
9055 switch (o->op_type) {
9058 CHANGE_TYPE(o, OP_PADAV);
9059 return ref(o, OP_RV2AV);
9063 CHANGE_TYPE(o, OP_RV2AV);
9068 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
9075 Perl_oopsHV(pTHX_ OP *o)
9079 PERL_ARGS_ASSERT_OOPSHV;
9081 switch (o->op_type) {
9084 CHANGE_TYPE(o, OP_PADHV);
9085 return ref(o, OP_RV2HV);
9089 CHANGE_TYPE(o, OP_RV2HV);
9094 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
9101 Perl_newAVREF(pTHX_ OP *o)
9105 PERL_ARGS_ASSERT_NEWAVREF;
9107 if (o->op_type == OP_PADANY) {
9108 CHANGE_TYPE(o, OP_PADAV);
9111 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
9112 Perl_croak(aTHX_ "Can't use an array as a reference");
9114 return newUNOP(OP_RV2AV, 0, scalar(o));
9118 Perl_newGVREF(pTHX_ I32 type, OP *o)
9120 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
9121 return newUNOP(OP_NULL, 0, o);
9122 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
9126 Perl_newHVREF(pTHX_ OP *o)
9130 PERL_ARGS_ASSERT_NEWHVREF;
9132 if (o->op_type == OP_PADANY) {
9133 CHANGE_TYPE(o, OP_PADHV);
9136 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
9137 Perl_croak(aTHX_ "Can't use a hash as a reference");
9139 return newUNOP(OP_RV2HV, 0, scalar(o));
9143 Perl_newCVREF(pTHX_ I32 flags, OP *o)
9145 if (o->op_type == OP_PADANY) {
9147 CHANGE_TYPE(o, OP_PADCV);
9149 return newUNOP(OP_RV2CV, flags, scalar(o));
9153 Perl_newSVREF(pTHX_ OP *o)
9157 PERL_ARGS_ASSERT_NEWSVREF;
9159 if (o->op_type == OP_PADANY) {
9160 CHANGE_TYPE(o, OP_PADSV);
9163 return newUNOP(OP_RV2SV, 0, scalar(o));
9166 /* Check routines. See the comments at the top of this file for details
9167 * on when these are called */
9170 Perl_ck_anoncode(pTHX_ OP *o)
9172 PERL_ARGS_ASSERT_CK_ANONCODE;
9174 cSVOPo->op_targ = pad_add_anon((CV*)cSVOPo->op_sv, o->op_type);
9175 cSVOPo->op_sv = NULL;
9180 S_io_hints(pTHX_ OP *o)
9182 #if O_BINARY != 0 || O_TEXT != 0
9184 PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;;
9186 SV **svp = hv_fetchs(table, "open_IN", FALSE);
9189 const char *d = SvPV_const(*svp, len);
9190 const I32 mode = mode_from_discipline(d, len);
9191 /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */
9193 if (mode & O_BINARY)
9194 o->op_private |= OPpOPEN_IN_RAW;
9198 o->op_private |= OPpOPEN_IN_CRLF;
9202 svp = hv_fetchs(table, "open_OUT", FALSE);
9205 const char *d = SvPV_const(*svp, len);
9206 const I32 mode = mode_from_discipline(d, len);
9207 /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */
9209 if (mode & O_BINARY)
9210 o->op_private |= OPpOPEN_OUT_RAW;
9214 o->op_private |= OPpOPEN_OUT_CRLF;
9219 PERL_UNUSED_CONTEXT;
9225 Perl_ck_backtick(pTHX_ OP *o)
9230 PERL_ARGS_ASSERT_CK_BACKTICK;
9231 /* qx and `` have a null pushmark; CORE::readpipe has only one kid. */
9232 if (o->op_flags & OPf_KIDS && (sibl = OP_SIBLING(cUNOPo->op_first))
9233 && (gv = gv_override("readpipe",8)))
9235 /* detach rest of siblings from o and its first child */
9236 op_sibling_splice(o, cUNOPo->op_first, -1, NULL);
9237 newop = S_new_entersubop(aTHX_ gv, sibl);
9239 else if (!(o->op_flags & OPf_KIDS))
9240 newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
9245 S_io_hints(aTHX_ o);
9250 Perl_ck_bitop(pTHX_ OP *o)
9252 PERL_ARGS_ASSERT_CK_BITOP;
9254 o->op_private = (U8)(PL_hints & HINT_INTEGER);
9255 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
9256 && (o->op_type == OP_BIT_OR
9257 || o->op_type == OP_BIT_AND
9258 || o->op_type == OP_BIT_XOR))
9260 const OP * const left = cBINOPo->op_first;
9261 const OP * const right = OP_SIBLING(left);
9262 if ((OP_IS_NUMCOMPARE(left->op_type) &&
9263 (left->op_flags & OPf_PARENS) == 0) ||
9264 (OP_IS_NUMCOMPARE(right->op_type) &&
9265 (right->op_flags & OPf_PARENS) == 0))
9266 Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
9267 "Possible precedence problem on bitwise %c operator",
9268 o->op_type == OP_BIT_OR ? '|'
9269 : o->op_type == OP_BIT_AND ? '&' : '^'
9275 PERL_STATIC_INLINE bool
9276 is_dollar_bracket(pTHX_ const OP * const o)
9279 PERL_UNUSED_CONTEXT;
9280 return o->op_type == OP_RV2SV && o->op_flags & OPf_KIDS
9281 && (kid = cUNOPx(o)->op_first)
9282 && kid->op_type == OP_GV
9283 && strEQ(GvNAME(cGVOPx_gv(kid)), "[");
9287 Perl_ck_cmp(pTHX_ OP *o)
9289 PERL_ARGS_ASSERT_CK_CMP;
9290 if (ckWARN(WARN_SYNTAX)) {
9291 const OP *kid = cUNOPo->op_first;
9294 ( is_dollar_bracket(aTHX_ kid)
9295 && OP_SIBLING(kid) && OP_SIBLING(kid)->op_type == OP_CONST
9297 || ( kid->op_type == OP_CONST
9298 && (kid = OP_SIBLING(kid)) && is_dollar_bracket(aTHX_ kid)
9302 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
9303 "$[ used in %s (did you mean $] ?)", OP_DESC(o));
9309 Perl_ck_concat(pTHX_ OP *o)
9311 const OP * const kid = cUNOPo->op_first;
9313 PERL_ARGS_ASSERT_CK_CONCAT;
9314 PERL_UNUSED_CONTEXT;
9316 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
9317 !(kUNOP->op_first->op_flags & OPf_MOD))
9318 o->op_flags |= OPf_STACKED;
9323 Perl_ck_spair(pTHX_ OP *o)
9327 PERL_ARGS_ASSERT_CK_SPAIR;
9329 if (o->op_flags & OPf_KIDS) {
9333 const OPCODE type = o->op_type;
9334 o = modkids(ck_fun(o), type);
9335 kid = cUNOPo->op_first;
9336 kidkid = kUNOP->op_first;
9337 newop = OP_SIBLING(kidkid);
9339 const OPCODE type = newop->op_type;
9340 if (OP_HAS_SIBLING(newop))
9342 if (o->op_type == OP_REFGEN && !(newop->op_flags & OPf_PARENS)
9343 && (type == OP_RV2AV || type == OP_PADAV
9344 || type == OP_RV2HV || type == OP_PADHV
9345 || type == OP_RV2CV))
9346 NOOP; /* OK (allow srefgen for \@a and \%h) */
9347 else if (!(PL_opargs[type] & OA_RETSCALAR))
9350 /* excise first sibling */
9351 op_sibling_splice(kid, NULL, 1, NULL);
9354 /* transforms OP_REFGEN into OP_SREFGEN, OP_CHOP into OP_SCHOP,
9355 * and OP_CHOMP into OP_SCHOMP */
9356 o->op_ppaddr = PL_ppaddr[++o->op_type];
9361 Perl_ck_delete(pTHX_ OP *o)
9363 PERL_ARGS_ASSERT_CK_DELETE;
9367 if (o->op_flags & OPf_KIDS) {
9368 OP * const kid = cUNOPo->op_first;
9369 switch (kid->op_type) {
9371 o->op_flags |= OPf_SPECIAL;
9374 o->op_private |= OPpSLICE;
9377 o->op_flags |= OPf_SPECIAL;
9382 Perl_croak(aTHX_ "delete argument is index/value array slice,"
9383 " use array slice");
9385 Perl_croak(aTHX_ "delete argument is key/value hash slice, use"
9388 Perl_croak(aTHX_ "delete argument is not a HASH or ARRAY "
9389 "element or slice");
9391 if (kid->op_private & OPpLVAL_INTRO)
9392 o->op_private |= OPpLVAL_INTRO;
9399 Perl_ck_eof(pTHX_ OP *o)
9401 PERL_ARGS_ASSERT_CK_EOF;
9403 if (o->op_flags & OPf_KIDS) {
9405 if (cLISTOPo->op_first->op_type == OP_STUB) {
9407 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
9412 kid = cLISTOPo->op_first;
9413 if (kid->op_type == OP_RV2GV)
9414 kid->op_private |= OPpALLOW_FAKE;
9420 Perl_ck_eval(pTHX_ OP *o)
9424 PERL_ARGS_ASSERT_CK_EVAL;
9426 PL_hints |= HINT_BLOCK_SCOPE;
9427 if (o->op_flags & OPf_KIDS) {
9428 SVOP * const kid = (SVOP*)cUNOPo->op_first;
9431 if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
9434 /* cut whole sibling chain free from o */
9435 op_sibling_splice(o, NULL, -1, NULL);
9438 enter = S_alloc_LOGOP(aTHX_ OP_ENTERTRY, NULL, NULL);
9440 /* establish postfix order */
9441 enter->op_next = (OP*)enter;
9443 o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
9444 CHANGE_TYPE(o, OP_LEAVETRY);
9445 enter->op_other = o;
9450 S_set_haseval(aTHX);
9454 const U8 priv = o->op_private;
9456 /* the newUNOP will recursively call ck_eval(), which will handle
9457 * all the stuff at the end of this function, like adding
9460 return newUNOP(OP_ENTEREVAL, priv <<8, newDEFSVOP());
9462 o->op_targ = (PADOFFSET)PL_hints;
9463 if (o->op_private & OPpEVAL_BYTES) o->op_targ &= ~HINT_UTF8;
9464 if ((PL_hints & HINT_LOCALIZE_HH) != 0
9465 && !(o->op_private & OPpEVAL_COPHH) && GvHV(PL_hintgv)) {
9466 /* Store a copy of %^H that pp_entereval can pick up. */
9467 OP *hhop = newSVOP(OP_HINTSEVAL, 0,
9468 MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv))));
9469 /* append hhop to only child */
9470 op_sibling_splice(o, cUNOPo->op_first, 0, hhop);
9472 o->op_private |= OPpEVAL_HAS_HH;
9474 if (!(o->op_private & OPpEVAL_BYTES)
9475 && FEATURE_UNIEVAL_IS_ENABLED)
9476 o->op_private |= OPpEVAL_UNICODE;
9481 Perl_ck_exec(pTHX_ OP *o)
9483 PERL_ARGS_ASSERT_CK_EXEC;
9485 if (o->op_flags & OPf_STACKED) {
9488 kid = OP_SIBLING(cUNOPo->op_first);
9489 if (kid->op_type == OP_RV2GV)
9498 Perl_ck_exists(pTHX_ OP *o)
9500 PERL_ARGS_ASSERT_CK_EXISTS;
9503 if (o->op_flags & OPf_KIDS) {
9504 OP * const kid = cUNOPo->op_first;
9505 if (kid->op_type == OP_ENTERSUB) {
9506 (void) ref(kid, o->op_type);
9507 if (kid->op_type != OP_RV2CV
9508 && !(PL_parser && PL_parser->error_count))
9510 "exists argument is not a subroutine name");
9511 o->op_private |= OPpEXISTS_SUB;
9513 else if (kid->op_type == OP_AELEM)
9514 o->op_flags |= OPf_SPECIAL;
9515 else if (kid->op_type != OP_HELEM)
9516 Perl_croak(aTHX_ "exists argument is not a HASH or ARRAY "
9517 "element or a subroutine");
9524 Perl_ck_rvconst(pTHX_ OP *o)
9527 SVOP * const kid = (SVOP*)cUNOPo->op_first;
9529 PERL_ARGS_ASSERT_CK_RVCONST;
9531 o->op_private |= (PL_hints & HINT_STRICT_REFS);
9533 if (kid->op_type == OP_CONST) {
9536 SV * const kidsv = kid->op_sv;
9538 /* Is it a constant from cv_const_sv()? */
9539 if ((SvROK(kidsv) || isGV_with_GP(kidsv)) && SvREADONLY(kidsv)) {
9542 if (SvTYPE(kidsv) == SVt_PVAV) return o;
9543 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
9544 const char *badthing;
9545 switch (o->op_type) {
9547 badthing = "a SCALAR";
9550 badthing = "an ARRAY";
9553 badthing = "a HASH";
9561 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
9562 SVfARG(kidsv), badthing);
9565 * This is a little tricky. We only want to add the symbol if we
9566 * didn't add it in the lexer. Otherwise we get duplicate strict
9567 * warnings. But if we didn't add it in the lexer, we must at
9568 * least pretend like we wanted to add it even if it existed before,
9569 * or we get possible typo warnings. OPpCONST_ENTERED says
9570 * whether the lexer already added THIS instance of this symbol.
9572 iscv = o->op_type == OP_RV2CV ? GV_NOEXPAND|GV_ADDMULTI : 0;
9573 gv = gv_fetchsv(kidsv,
9574 o->op_type == OP_RV2CV
9575 && o->op_private & OPpMAY_RETURN_CONSTANT
9577 : iscv | !(kid->op_private & OPpCONST_ENTERED),
9580 : o->op_type == OP_RV2SV
9582 : o->op_type == OP_RV2AV
9584 : o->op_type == OP_RV2HV
9591 if (!(o->op_private & OPpMAY_RETURN_CONSTANT)
9592 && SvTYPE(SvRV(gv)) != SVt_PVCV)
9593 gv_fetchsv(kidsv, GV_ADDMULTI, SVt_PVCV);
9595 CHANGE_TYPE(kid, OP_GV);
9596 SvREFCNT_dec(kid->op_sv);
9598 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
9599 assert (sizeof(PADOP) <= sizeof(SVOP));
9600 kPADOP->op_padix = pad_alloc(OP_GV, SVf_READONLY);
9601 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
9602 PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
9604 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
9606 kid->op_private = 0;
9607 /* FAKE globs in the symbol table cause weird bugs (#77810) */
9615 Perl_ck_ftst(pTHX_ OP *o)
9618 const I32 type = o->op_type;
9620 PERL_ARGS_ASSERT_CK_FTST;
9622 if (o->op_flags & OPf_REF) {
9625 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
9626 SVOP * const kid = (SVOP*)cUNOPo->op_first;
9627 const OPCODE kidtype = kid->op_type;
9629 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)
9630 && !kid->op_folded) {
9631 OP * const newop = newGVOP(type, OPf_REF,
9632 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
9636 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
9637 o->op_private |= OPpFT_ACCESS;
9638 if (PL_check[kidtype] == Perl_ck_ftst
9639 && kidtype != OP_STAT && kidtype != OP_LSTAT) {
9640 o->op_private |= OPpFT_STACKED;
9641 kid->op_private |= OPpFT_STACKING;
9642 if (kidtype == OP_FTTTY && (
9643 !(kid->op_private & OPpFT_STACKED)
9644 || kid->op_private & OPpFT_AFTER_t
9646 o->op_private |= OPpFT_AFTER_t;
9651 if (type == OP_FTTTY)
9652 o = newGVOP(type, OPf_REF, PL_stdingv);
9654 o = newUNOP(type, 0, newDEFSVOP());
9660 Perl_ck_fun(pTHX_ OP *o)
9662 const int type = o->op_type;
9663 I32 oa = PL_opargs[type] >> OASHIFT;
9665 PERL_ARGS_ASSERT_CK_FUN;
9667 if (o->op_flags & OPf_STACKED) {
9668 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
9671 return no_fh_allowed(o);
9674 if (o->op_flags & OPf_KIDS) {
9675 OP *prev_kid = NULL;
9676 OP *kid = cLISTOPo->op_first;
9678 bool seen_optional = FALSE;
9680 if (kid->op_type == OP_PUSHMARK ||
9681 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
9684 kid = OP_SIBLING(kid);
9686 if (kid && kid->op_type == OP_COREARGS) {
9687 bool optional = FALSE;
9690 if (oa & OA_OPTIONAL) optional = TRUE;
9693 if (optional) o->op_private |= numargs;
9698 if (oa & OA_OPTIONAL || (oa & 7) == OA_LIST) {
9699 if (!kid && !seen_optional && PL_opargs[type] & OA_DEFGV) {
9701 /* append kid to chain */
9702 op_sibling_splice(o, prev_kid, 0, kid);
9704 seen_optional = TRUE;
9711 /* list seen where single (scalar) arg expected? */
9712 if (numargs == 1 && !(oa >> 4)
9713 && kid->op_type == OP_LIST && type != OP_SCALAR)
9715 return too_many_arguments_pv(o,PL_op_desc[type], 0);
9717 if (type != OP_DELETE) scalar(kid);
9728 if ((type == OP_PUSH || type == OP_UNSHIFT)
9729 && !OP_HAS_SIBLING(kid))
9730 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
9731 "Useless use of %s with no values",
9734 if (kid->op_type == OP_CONST
9735 && ( !SvROK(cSVOPx_sv(kid))
9736 || SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV )
9738 bad_type_pv(numargs, "array", PL_op_desc[type], 0, kid);
9739 /* Defer checks to run-time if we have a scalar arg */
9740 if (kid->op_type == OP_RV2AV || kid->op_type == OP_PADAV)
9741 op_lvalue(kid, type);
9744 /* diag_listed_as: push on reference is experimental */
9745 Perl_ck_warner_d(aTHX_
9746 packWARN(WARN_EXPERIMENTAL__AUTODEREF),
9747 "%s on reference is experimental",
9752 if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
9753 bad_type_pv(numargs, "hash", PL_op_desc[type], 0, kid);
9754 op_lvalue(kid, type);
9758 /* replace kid with newop in chain */
9760 S_op_sibling_newUNOP(aTHX_ o, prev_kid, OP_NULL, 0);
9761 newop->op_next = newop;
9766 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
9767 if (kid->op_type == OP_CONST &&
9768 (kid->op_private & OPpCONST_BARE))
9770 OP * const newop = newGVOP(OP_GV, 0,
9771 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
9772 /* replace kid with newop in chain */
9773 op_sibling_splice(o, prev_kid, 1, newop);
9777 else if (kid->op_type == OP_READLINE) {
9778 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
9779 bad_type_pv(numargs, "HANDLE", OP_DESC(o), 0, kid);
9782 I32 flags = OPf_SPECIAL;
9786 /* is this op a FH constructor? */
9787 if (is_handle_constructor(o,numargs)) {
9788 const char *name = NULL;
9791 bool want_dollar = TRUE;
9794 /* Set a flag to tell rv2gv to vivify
9795 * need to "prove" flag does not mean something
9796 * else already - NI-S 1999/05/07
9799 if (kid->op_type == OP_PADSV) {
9801 = PAD_COMPNAME_SV(kid->op_targ);
9802 name = SvPV_const(namesv, len);
9803 name_utf8 = SvUTF8(namesv);
9805 else if (kid->op_type == OP_RV2SV
9806 && kUNOP->op_first->op_type == OP_GV)
9808 GV * const gv = cGVOPx_gv(kUNOP->op_first);
9810 len = GvNAMELEN(gv);
9811 name_utf8 = GvNAMEUTF8(gv) ? SVf_UTF8 : 0;
9813 else if (kid->op_type == OP_AELEM
9814 || kid->op_type == OP_HELEM)
9817 OP *op = ((BINOP*)kid)->op_first;
9821 const char * const a =
9822 kid->op_type == OP_AELEM ?
9824 if (((op->op_type == OP_RV2AV) ||
9825 (op->op_type == OP_RV2HV)) &&
9826 (firstop = ((UNOP*)op)->op_first) &&
9827 (firstop->op_type == OP_GV)) {
9828 /* packagevar $a[] or $h{} */
9829 GV * const gv = cGVOPx_gv(firstop);
9837 else if (op->op_type == OP_PADAV
9838 || op->op_type == OP_PADHV) {
9839 /* lexicalvar $a[] or $h{} */
9840 const char * const padname =
9841 PAD_COMPNAME_PV(op->op_targ);
9850 name = SvPV_const(tmpstr, len);
9851 name_utf8 = SvUTF8(tmpstr);
9856 name = "__ANONIO__";
9858 want_dollar = FALSE;
9860 op_lvalue(kid, type);
9864 targ = pad_alloc(OP_RV2GV, SVf_READONLY);
9865 namesv = PAD_SVl(targ);
9866 if (want_dollar && *name != '$')
9867 sv_setpvs(namesv, "$");
9869 sv_setpvs(namesv, "");
9870 sv_catpvn(namesv, name, len);
9871 if ( name_utf8 ) SvUTF8_on(namesv);
9875 kid = S_op_sibling_newUNOP(aTHX_ o, prev_kid,
9877 kid->op_targ = targ;
9878 kid->op_private |= priv;
9884 if ((type == OP_UNDEF || type == OP_POS)
9885 && numargs == 1 && !(oa >> 4)
9886 && kid->op_type == OP_LIST)
9887 return too_many_arguments_pv(o,PL_op_desc[type], 0);
9888 op_lvalue(scalar(kid), type);
9893 kid = OP_SIBLING(kid);
9895 /* FIXME - should the numargs or-ing move after the too many
9896 * arguments check? */
9897 o->op_private |= numargs;
9899 return too_many_arguments_pv(o,OP_DESC(o), 0);
9902 else if (PL_opargs[type] & OA_DEFGV) {
9903 /* Ordering of these two is important to keep f_map.t passing. */
9905 return newUNOP(type, 0, newDEFSVOP());
9909 while (oa & OA_OPTIONAL)
9911 if (oa && oa != OA_LIST)
9912 return too_few_arguments_pv(o,OP_DESC(o), 0);
9918 Perl_ck_glob(pTHX_ OP *o)
9922 PERL_ARGS_ASSERT_CK_GLOB;
9925 if ((o->op_flags & OPf_KIDS) && !OP_HAS_SIBLING(cLISTOPo->op_first))
9926 op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */
9928 if (!(o->op_flags & OPf_SPECIAL) && (gv = gv_override("glob", 4)))
9932 * \ null - const(wildcard)
9937 * \ mark - glob - rv2cv
9938 * | \ gv(CORE::GLOBAL::glob)
9940 * \ null - const(wildcard)
9942 o->op_flags |= OPf_SPECIAL;
9943 o->op_targ = pad_alloc(OP_GLOB, SVs_PADTMP);
9944 o = S_new_entersubop(aTHX_ gv, o);
9945 o = newUNOP(OP_NULL, 0, o);
9946 o->op_targ = OP_GLOB; /* hint at what it used to be: eg in newWHILEOP */
9949 else o->op_flags &= ~OPf_SPECIAL;
9950 #if !defined(PERL_EXTERNAL_GLOB)
9953 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
9954 newSVpvs("File::Glob"), NULL, NULL, NULL);
9957 #endif /* !PERL_EXTERNAL_GLOB */
9958 gv = (GV *)newSV(0);
9959 gv_init(gv, 0, "", 0, 0);
9961 op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
9962 SvREFCNT_dec_NN(gv); /* newGVOP increased it */
9968 Perl_ck_grep(pTHX_ OP *o)
9973 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
9976 PERL_ARGS_ASSERT_CK_GREP;
9978 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
9980 if (o->op_flags & OPf_STACKED) {
9981 kid = cUNOPx(OP_SIBLING(cLISTOPo->op_first))->op_first;
9982 if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
9983 return no_fh_allowed(o);
9984 o->op_flags &= ~OPf_STACKED;
9986 kid = OP_SIBLING(cLISTOPo->op_first);
9987 if (type == OP_MAPWHILE)
9992 if (PL_parser && PL_parser->error_count)
9994 kid = OP_SIBLING(cLISTOPo->op_first);
9995 if (kid->op_type != OP_NULL)
9996 Perl_croak(aTHX_ "panic: ck_grep, type=%u", (unsigned) kid->op_type);
9997 kid = kUNOP->op_first;
9999 gwop = S_alloc_LOGOP(aTHX_ type, o, LINKLIST(kid));
10000 kid->op_next = (OP*)gwop;
10001 offset = pad_findmy_pvs("$_", 0);
10002 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
10003 o->op_private = gwop->op_private = 0;
10004 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
10007 o->op_private = gwop->op_private = OPpGREP_LEX;
10008 gwop->op_targ = o->op_targ = offset;
10011 kid = OP_SIBLING(cLISTOPo->op_first);
10012 for (kid = OP_SIBLING(kid); kid; kid = OP_SIBLING(kid))
10013 op_lvalue(kid, OP_GREPSTART);
10019 Perl_ck_index(pTHX_ OP *o)
10021 PERL_ARGS_ASSERT_CK_INDEX;
10023 if (o->op_flags & OPf_KIDS) {
10024 OP *kid = OP_SIBLING(cLISTOPo->op_first); /* get past pushmark */
10026 kid = OP_SIBLING(kid); /* get past "big" */
10027 if (kid && kid->op_type == OP_CONST) {
10028 const bool save_taint = TAINT_get;
10029 SV *sv = kSVOP->op_sv;
10030 if ((!SvPOK(sv) || SvNIOKp(sv)) && SvOK(sv) && !SvROK(sv)) {
10032 sv_copypv(sv, kSVOP->op_sv);
10033 SvREFCNT_dec_NN(kSVOP->op_sv);
10036 if (SvOK(sv)) fbm_compile(sv, 0);
10037 TAINT_set(save_taint);
10038 #ifdef NO_TAINT_SUPPORT
10039 PERL_UNUSED_VAR(save_taint);
10047 Perl_ck_lfun(pTHX_ OP *o)
10049 const OPCODE type = o->op_type;
10051 PERL_ARGS_ASSERT_CK_LFUN;
10053 return modkids(ck_fun(o), type);
10057 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
10059 PERL_ARGS_ASSERT_CK_DEFINED;
10061 if ((o->op_flags & OPf_KIDS)) {
10062 switch (cUNOPo->op_first->op_type) {
10065 Perl_croak(aTHX_ "Can't use 'defined(@array)'"
10066 " (Maybe you should just omit the defined()?)");
10070 Perl_croak(aTHX_ "Can't use 'defined(%%hash)'"
10071 " (Maybe you should just omit the defined()?)");
10082 Perl_ck_readline(pTHX_ OP *o)
10084 PERL_ARGS_ASSERT_CK_READLINE;
10086 if (o->op_flags & OPf_KIDS) {
10087 OP *kid = cLISTOPo->op_first;
10088 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
10092 = newUNOP(OP_READLINE, o->op_flags | OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
10100 Perl_ck_rfun(pTHX_ OP *o)
10102 const OPCODE type = o->op_type;
10104 PERL_ARGS_ASSERT_CK_RFUN;
10106 return refkids(ck_fun(o), type);
10110 Perl_ck_listiob(pTHX_ OP *o)
10114 PERL_ARGS_ASSERT_CK_LISTIOB;
10116 kid = cLISTOPo->op_first;
10118 o = force_list(o, 1);
10119 kid = cLISTOPo->op_first;
10121 if (kid->op_type == OP_PUSHMARK)
10122 kid = OP_SIBLING(kid);
10123 if (kid && o->op_flags & OPf_STACKED)
10124 kid = OP_SIBLING(kid);
10125 else if (kid && !OP_HAS_SIBLING(kid)) { /* print HANDLE; */
10126 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE
10127 && !kid->op_folded) {
10128 o->op_flags |= OPf_STACKED; /* make it a filehandle */
10130 /* replace old const op with new OP_RV2GV parent */
10131 kid = S_op_sibling_newUNOP(aTHX_ o, cLISTOPo->op_first,
10132 OP_RV2GV, OPf_REF);
10133 kid = OP_SIBLING(kid);
10138 op_append_elem(o->op_type, o, newDEFSVOP());
10140 if (o->op_type == OP_PRTF) return modkids(listkids(o), OP_PRTF);
10141 return listkids(o);
10145 Perl_ck_smartmatch(pTHX_ OP *o)
10148 PERL_ARGS_ASSERT_CK_SMARTMATCH;
10149 if (0 == (o->op_flags & OPf_SPECIAL)) {
10150 OP *first = cBINOPo->op_first;
10151 OP *second = OP_SIBLING(first);
10153 /* Implicitly take a reference to an array or hash */
10155 /* remove the original two siblings, then add back the
10156 * (possibly different) first and second sibs.
10158 op_sibling_splice(o, NULL, 1, NULL);
10159 op_sibling_splice(o, NULL, 1, NULL);
10160 first = ref_array_or_hash(first);
10161 second = ref_array_or_hash(second);
10162 op_sibling_splice(o, NULL, 0, second);
10163 op_sibling_splice(o, NULL, 0, first);
10165 /* Implicitly take a reference to a regular expression */
10166 if (first->op_type == OP_MATCH) {
10167 CHANGE_TYPE(first, OP_QR);
10169 if (second->op_type == OP_MATCH) {
10170 CHANGE_TYPE(second, OP_QR);
10179 S_maybe_targlex(pTHX_ OP *o)
10182 OP * const kid = cLISTOPo->op_first;
10183 /* has a disposable target? */
10184 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
10185 && !(kid->op_flags & OPf_STACKED)
10186 /* Cannot steal the second time! */
10187 && !(kid->op_private & OPpTARGET_MY)
10190 OP * const kkid = OP_SIBLING(kid);
10192 /* Can just relocate the target. */
10193 if (kkid && kkid->op_type == OP_PADSV
10194 && (!(kkid->op_private & OPpLVAL_INTRO)
10195 || kkid->op_private & OPpPAD_STATE))
10197 kid->op_targ = kkid->op_targ;
10199 /* Now we do not need PADSV and SASSIGN.
10200 * Detach kid and free the rest. */
10201 op_sibling_splice(o, NULL, 1, NULL);
10203 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
10211 Perl_ck_sassign(pTHX_ OP *o)
10214 OP * const kid = cLISTOPo->op_first;
10216 PERL_ARGS_ASSERT_CK_SASSIGN;
10218 if (OP_HAS_SIBLING(kid)) {
10219 OP *kkid = OP_SIBLING(kid);
10220 /* For state variable assignment with attributes, kkid is a list op
10221 whose op_last is a padsv. */
10222 if ((kkid->op_type == OP_PADSV ||
10223 (OP_TYPE_IS_OR_WAS(kkid, OP_LIST) &&
10224 (kkid = cLISTOPx(kkid)->op_last)->op_type == OP_PADSV
10227 && (kkid->op_private & (OPpLVAL_INTRO|OPpPAD_STATE))
10228 == (OPpLVAL_INTRO|OPpPAD_STATE)) {
10229 const PADOFFSET target = kkid->op_targ;
10230 OP *const other = newOP(OP_PADSV,
10232 | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
10233 OP *const first = newOP(OP_NULL, 0);
10235 newCONDOP(0, first, S_maybe_targlex(aTHX_ o), other);
10236 OP *const condop = first->op_next;
10238 CHANGE_TYPE(condop, OP_ONCE);
10239 other->op_targ = target;
10241 /* Store the initializedness of state vars in a separate
10244 pad_add_name_pvn("$",1,padadd_NO_DUP_CHECK|padadd_STATE,0,0);
10245 /* hijacking PADSTALE for uninitialized state variables */
10246 SvPADSTALE_on(PAD_SVl(condop->op_targ));
10251 return S_maybe_targlex(aTHX_ o);
10255 Perl_ck_match(pTHX_ OP *o)
10257 PERL_ARGS_ASSERT_CK_MATCH;
10259 if (o->op_type != OP_QR && PL_compcv) {
10260 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
10261 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
10262 o->op_targ = offset;
10263 o->op_private |= OPpTARGET_MY;
10266 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
10267 o->op_private |= OPpRUNTIME;
10272 Perl_ck_method(pTHX_ OP *o)
10275 const char* method;
10276 OP * const kid = cUNOPo->op_first;
10278 PERL_ARGS_ASSERT_CK_METHOD;
10279 if (kid->op_type != OP_CONST) return o;
10282 method = SvPVX_const(sv);
10283 if (!(strchr(method, ':') || strchr(method, '\''))) {
10285 if (!SvIsCOW_shared_hash(sv)) {
10286 sv = newSVpvn_share(method, SvUTF8(sv) ? -(I32)SvCUR(sv) : (I32)SvCUR(sv), 0);
10289 kSVOP->op_sv = NULL;
10291 cmop = newMETHOP_named(OP_METHOD_NAMED, 0, sv);
10299 Perl_ck_null(pTHX_ OP *o)
10301 PERL_ARGS_ASSERT_CK_NULL;
10302 PERL_UNUSED_CONTEXT;
10307 Perl_ck_open(pTHX_ OP *o)
10309 PERL_ARGS_ASSERT_CK_OPEN;
10311 S_io_hints(aTHX_ o);
10313 /* In case of three-arg dup open remove strictness
10314 * from the last arg if it is a bareword. */
10315 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
10316 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
10320 if ((last->op_type == OP_CONST) && /* The bareword. */
10321 (last->op_private & OPpCONST_BARE) &&
10322 (last->op_private & OPpCONST_STRICT) &&
10323 (oa = OP_SIBLING(first)) && /* The fh. */
10324 (oa = OP_SIBLING(oa)) && /* The mode. */
10325 (oa->op_type == OP_CONST) &&
10326 SvPOK(((SVOP*)oa)->op_sv) &&
10327 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
10328 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
10329 (last == OP_SIBLING(oa))) /* The bareword. */
10330 last->op_private &= ~OPpCONST_STRICT;
10336 Perl_ck_refassign(pTHX_ OP *o)
10338 OP * const right = cLISTOPo->op_first;
10339 OP * const left = OP_SIBLING(right);
10340 OP *varop = cUNOPx(cUNOPx(left)->op_first)->op_first;
10343 PERL_ARGS_ASSERT_CK_REFASSIGN;
10345 assert (left->op_type == OP_SREFGEN);
10347 o->op_private = varop->op_private & (OPpLVAL_INTRO|OPpPAD_STATE);
10349 switch (varop->op_type) {
10351 o->op_private |= OPpLVREF_AV;
10354 o->op_private |= OPpLVREF_HV;
10357 o->op_targ = varop->op_targ;
10358 varop->op_targ = 0;
10359 PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
10362 o->op_private |= OPpLVREF_AV;
10365 o->op_private |= OPpLVREF_HV;
10368 if (cUNOPx(varop)->op_first->op_type != OP_GV) goto bad;
10370 /* Point varop to its GV kid, detached. */
10371 varop = op_sibling_splice(varop, NULL, -1, NULL);
10375 OP * const kidparent =
10376 cUNOPx(cUNOPx(varop)->op_first)->op_first->op_sibling;
10377 OP * const kid = cUNOPx(kidparent)->op_first;
10378 o->op_private |= OPpLVREF_CV;
10379 if (kid->op_type == OP_GV) {
10381 goto detach_and_stack;
10383 if (kid->op_type != OP_PADCV) goto bad;
10384 o->op_targ = kid->op_targ;
10390 o->op_private |= OPpLVREF_ELEM;
10393 /* Detach varop. */
10394 op_sibling_splice(cUNOPx(left)->op_first, NULL, -1, NULL);
10398 /* diag_listed_as: Can't modify reference to %s in %s assignment */
10399 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in scalar "
10404 if (!FEATURE_REFALIASING_IS_ENABLED)
10406 "Experimental aliasing via reference not enabled");
10407 Perl_ck_warner_d(aTHX_
10408 packWARN(WARN_EXPERIMENTAL__REFALIASING),
10409 "Aliasing via reference is experimental");
10411 o->op_flags |= OPf_STACKED;
10412 op_sibling_splice(o, right, 1, varop);
10415 o->op_flags &=~ OPf_STACKED;
10416 op_sibling_splice(o, right, 1, NULL);
10423 Perl_ck_repeat(pTHX_ OP *o)
10425 PERL_ARGS_ASSERT_CK_REPEAT;
10427 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
10429 o->op_private |= OPpREPEAT_DOLIST;
10430 kids = op_sibling_splice(o, NULL, 1, NULL); /* detach first kid */
10431 kids = force_list(kids, 1); /* promote it to a list */
10432 op_sibling_splice(o, NULL, 0, kids); /* and add back */
10440 Perl_ck_require(pTHX_ OP *o)
10444 PERL_ARGS_ASSERT_CK_REQUIRE;
10446 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
10447 SVOP * const kid = (SVOP*)cUNOPo->op_first;
10452 if (kid->op_type == OP_CONST) {
10453 SV * const sv = kid->op_sv;
10454 U32 const was_readonly = SvREADONLY(sv);
10455 if (kid->op_private & OPpCONST_BARE) {
10459 if (was_readonly) {
10460 SvREADONLY_off(sv);
10462 if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0);
10467 for (; s < end; s++) {
10468 if (*s == ':' && s[1] == ':') {
10470 Move(s+2, s+1, end - s - 1, char);
10474 SvEND_set(sv, end);
10475 sv_catpvs(sv, ".pm");
10476 PERL_HASH(hash, SvPVX(sv), SvCUR(sv));
10477 hek = share_hek(SvPVX(sv),
10478 (SSize_t)SvCUR(sv) * (SvUTF8(sv) ? -1 : 1),
10480 sv_sethek(sv, hek);
10482 SvFLAGS(sv) |= was_readonly;
10484 else if (SvPOK(sv) && !SvNIOK(sv) && !SvGMAGICAL(sv)) {
10486 if (SvREFCNT(sv) > 1) {
10487 kid->op_sv = newSVpvn_share(
10488 s, SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len, 0);
10489 SvREFCNT_dec_NN(sv);
10493 if (was_readonly) SvREADONLY_off(sv);
10494 PERL_HASH(hash, s, len);
10496 SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len,
10498 sv_sethek(sv, hek);
10500 SvFLAGS(sv) |= was_readonly;
10506 if (!(o->op_flags & OPf_SPECIAL) /* Wasn't written as CORE::require */
10507 /* handle override, if any */
10508 && (gv = gv_override("require", 7))) {
10510 if (o->op_flags & OPf_KIDS) {
10511 kid = cUNOPo->op_first;
10512 op_sibling_splice(o, NULL, -1, NULL);
10515 kid = newDEFSVOP();
10518 newop = S_new_entersubop(aTHX_ gv, kid);
10522 return scalar(ck_fun(o));
10526 Perl_ck_return(pTHX_ OP *o)
10530 PERL_ARGS_ASSERT_CK_RETURN;
10532 kid = OP_SIBLING(cLISTOPo->op_first);
10533 if (CvLVALUE(PL_compcv)) {
10534 for (; kid; kid = OP_SIBLING(kid))
10535 op_lvalue(kid, OP_LEAVESUBLV);
10542 Perl_ck_select(pTHX_ OP *o)
10547 PERL_ARGS_ASSERT_CK_SELECT;
10549 if (o->op_flags & OPf_KIDS) {
10550 kid = OP_SIBLING(cLISTOPo->op_first); /* get past pushmark */
10551 if (kid && OP_HAS_SIBLING(kid)) {
10552 CHANGE_TYPE(o, OP_SSELECT);
10554 return fold_constants(op_integerize(op_std_init(o)));
10558 kid = OP_SIBLING(cLISTOPo->op_first); /* get past pushmark */
10559 if (kid && kid->op_type == OP_RV2GV)
10560 kid->op_private &= ~HINT_STRICT_REFS;
10565 Perl_ck_shift(pTHX_ OP *o)
10567 const I32 type = o->op_type;
10569 PERL_ARGS_ASSERT_CK_SHIFT;
10571 if (!(o->op_flags & OPf_KIDS)) {
10574 if (!CvUNIQUE(PL_compcv)) {
10575 o->op_flags |= OPf_SPECIAL;
10579 argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
10581 return newUNOP(type, 0, scalar(argop));
10583 return scalar(ck_fun(o));
10587 Perl_ck_sort(pTHX_ OP *o)
10591 HV * const hinthv =
10592 PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;
10595 PERL_ARGS_ASSERT_CK_SORT;
10598 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
10600 const I32 sorthints = (I32)SvIV(*svp);
10601 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
10602 o->op_private |= OPpSORT_QSORT;
10603 if ((sorthints & HINT_SORT_STABLE) != 0)
10604 o->op_private |= OPpSORT_STABLE;
10608 if (o->op_flags & OPf_STACKED)
10610 firstkid = OP_SIBLING(cLISTOPo->op_first); /* get past pushmark */
10612 if ((stacked = o->op_flags & OPf_STACKED)) { /* may have been cleared */
10613 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
10615 /* if the first arg is a code block, process it and mark sort as
10617 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
10619 if (kid->op_type == OP_LEAVE)
10620 op_null(kid); /* wipe out leave */
10621 /* Prevent execution from escaping out of the sort block. */
10624 /* provide scalar context for comparison function/block */
10625 kid = scalar(firstkid);
10626 kid->op_next = kid;
10627 o->op_flags |= OPf_SPECIAL;
10629 else if (kid->op_type == OP_CONST
10630 && kid->op_private & OPpCONST_BARE) {
10634 const char * const name = SvPV(kSVOP_sv, len);
10636 assert (len < 256);
10637 Copy(name, tmpbuf+1, len, char);
10638 off = pad_findmy_pvn(tmpbuf, len+1, SvUTF8(kSVOP_sv));
10639 if (off != NOT_IN_PAD) {
10640 if (PAD_COMPNAME_FLAGS_isOUR(off)) {
10642 newSVhek(HvNAME_HEK(PAD_COMPNAME_OURSTASH(off)));
10643 sv_catpvs(fq, "::");
10644 sv_catsv(fq, kSVOP_sv);
10645 SvREFCNT_dec_NN(kSVOP_sv);
10649 OP * const padop = newOP(OP_PADCV, 0);
10650 padop->op_targ = off;
10651 cUNOPx(firstkid)->op_first = padop;
10657 firstkid = OP_SIBLING(firstkid);
10660 for (kid = firstkid; kid; kid = OP_SIBLING(kid)) {
10661 /* provide list context for arguments */
10664 op_lvalue(kid, OP_GREPSTART);
10670 /* for sort { X } ..., where X is one of
10671 * $a <=> $b, $b <= $a, $a cmp $b, $b cmp $a
10672 * elide the second child of the sort (the one containing X),
10673 * and set these flags as appropriate
10677 * Also, check and warn on lexical $a, $b.
10681 S_simplify_sort(pTHX_ OP *o)
10683 OP *kid = OP_SIBLING(cLISTOPo->op_first); /* get past pushmark */
10687 const char *gvname;
10690 PERL_ARGS_ASSERT_SIMPLIFY_SORT;
10692 kid = kUNOP->op_first; /* get past null */
10693 if (!(have_scopeop = kid->op_type == OP_SCOPE)
10694 && kid->op_type != OP_LEAVE)
10696 kid = kLISTOP->op_last; /* get past scope */
10697 switch(kid->op_type) {
10701 if (!have_scopeop) goto padkids;
10706 k = kid; /* remember this node*/
10707 if (kBINOP->op_first->op_type != OP_RV2SV
10708 || kBINOP->op_last ->op_type != OP_RV2SV)
10711 Warn about my($a) or my($b) in a sort block, *if* $a or $b is
10712 then used in a comparison. This catches most, but not
10713 all cases. For instance, it catches
10714 sort { my($a); $a <=> $b }
10716 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
10717 (although why you'd do that is anyone's guess).
10721 if (!ckWARN(WARN_SYNTAX)) return;
10722 kid = kBINOP->op_first;
10724 if (kid->op_type == OP_PADSV) {
10725 SV * const name = PAD_COMPNAME_SV(kid->op_targ);
10726 if (SvCUR(name) == 2 && *SvPVX(name) == '$'
10727 && (SvPVX(name)[1] == 'a' || SvPVX(name)[1] == 'b'))
10728 /* diag_listed_as: "my %s" used in sort comparison */
10729 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
10730 "\"%s %s\" used in sort comparison",
10731 SvPAD_STATE(name) ? "state" : "my",
10734 } while ((kid = OP_SIBLING(kid)));
10737 kid = kBINOP->op_first; /* get past cmp */
10738 if (kUNOP->op_first->op_type != OP_GV)
10740 kid = kUNOP->op_first; /* get past rv2sv */
10742 if (GvSTASH(gv) != PL_curstash)
10744 gvname = GvNAME(gv);
10745 if (*gvname == 'a' && gvname[1] == '\0')
10747 else if (*gvname == 'b' && gvname[1] == '\0')
10752 kid = k; /* back to cmp */
10753 /* already checked above that it is rv2sv */
10754 kid = kBINOP->op_last; /* down to 2nd arg */
10755 if (kUNOP->op_first->op_type != OP_GV)
10757 kid = kUNOP->op_first; /* get past rv2sv */
10759 if (GvSTASH(gv) != PL_curstash)
10761 gvname = GvNAME(gv);
10763 ? !(*gvname == 'a' && gvname[1] == '\0')
10764 : !(*gvname == 'b' && gvname[1] == '\0'))
10766 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
10768 o->op_private |= OPpSORT_DESCEND;
10769 if (k->op_type == OP_NCMP)
10770 o->op_private |= OPpSORT_NUMERIC;
10771 if (k->op_type == OP_I_NCMP)
10772 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
10773 kid = OP_SIBLING(cLISTOPo->op_first);
10774 /* cut out and delete old block (second sibling) */
10775 op_sibling_splice(o, cLISTOPo->op_first, 1, NULL);
10780 Perl_ck_split(pTHX_ OP *o)
10785 PERL_ARGS_ASSERT_CK_SPLIT;
10787 if (o->op_flags & OPf_STACKED)
10788 return no_fh_allowed(o);
10790 kid = cLISTOPo->op_first;
10791 if (kid->op_type != OP_NULL)
10792 Perl_croak(aTHX_ "panic: ck_split, type=%u", (unsigned) kid->op_type);
10793 /* delete leading NULL node, then add a CONST if no other nodes */
10794 op_sibling_splice(o, NULL, 1,
10795 OP_HAS_SIBLING(kid) ? NULL : newSVOP(OP_CONST, 0, newSVpvs(" ")));
10797 kid = cLISTOPo->op_first;
10799 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
10800 /* remove kid, and replace with new optree */
10801 op_sibling_splice(o, NULL, 1, NULL);
10802 /* OPf_SPECIAL is used to trigger split " " behavior */
10803 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0, 0);
10804 op_sibling_splice(o, NULL, 0, kid);
10806 CHANGE_TYPE(kid, OP_PUSHRE);
10808 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
10809 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
10810 "Use of /g modifier is meaningless in split");
10813 if (!OP_HAS_SIBLING(kid))
10814 op_append_elem(OP_SPLIT, o, newDEFSVOP());
10816 kid = OP_SIBLING(kid);
10820 if (!OP_HAS_SIBLING(kid))
10822 op_append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
10823 o->op_private |= OPpSPLIT_IMPLIM;
10825 assert(OP_HAS_SIBLING(kid));
10827 kid = OP_SIBLING(kid);
10830 if (OP_HAS_SIBLING(kid))
10831 return too_many_arguments_pv(o,OP_DESC(o), 0);
10837 Perl_ck_stringify(pTHX_ OP *o)
10839 OP * const kid = OP_SIBLING(cUNOPo->op_first);
10840 PERL_ARGS_ASSERT_CK_STRINGIFY;
10841 if (kid->op_type == OP_JOIN || kid->op_type == OP_QUOTEMETA
10842 || kid->op_type == OP_LC || kid->op_type == OP_LCFIRST
10843 || kid->op_type == OP_UC || kid->op_type == OP_UCFIRST)
10845 assert(!OP_HAS_SIBLING(kid));
10846 op_sibling_splice(o, cUNOPo->op_first, -1, NULL);
10854 Perl_ck_join(pTHX_ OP *o)
10856 OP * const kid = OP_SIBLING(cLISTOPo->op_first);
10858 PERL_ARGS_ASSERT_CK_JOIN;
10860 if (kid && kid->op_type == OP_MATCH) {
10861 if (ckWARN(WARN_SYNTAX)) {
10862 const REGEXP *re = PM_GETRE(kPMOP);
10864 ? newSVpvn_flags( RX_PRECOMP_const(re), RX_PRELEN(re),
10865 SVs_TEMP | ( RX_UTF8(re) ? SVf_UTF8 : 0 ) )
10866 : newSVpvs_flags( "STRING", SVs_TEMP );
10867 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
10868 "/%"SVf"/ should probably be written as \"%"SVf"\"",
10869 SVfARG(msg), SVfARG(msg));
10873 && (kid->op_type == OP_CONST /* an innocent, unsuspicious separator */
10874 || (kid->op_type == OP_PADSV && !(kid->op_private & OPpLVAL_INTRO))
10875 || ( kid->op_type==OP_RV2SV && kUNOP->op_first->op_type == OP_GV
10876 && !(kid->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))))
10878 const OP * const bairn = OP_SIBLING(kid); /* the list */
10879 if (bairn && !OP_HAS_SIBLING(bairn) /* single-item list */
10880 && PL_opargs[bairn->op_type] & OA_RETSCALAR)
10882 OP * const ret = op_convert_list(OP_STRINGIFY, 0,
10883 op_sibling_splice(o, kid, 1, NULL));
10885 ret->op_folded = 1;
10894 =for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
10896 Examines an op, which is expected to identify a subroutine at runtime,
10897 and attempts to determine at compile time which subroutine it identifies.
10898 This is normally used during Perl compilation to determine whether
10899 a prototype can be applied to a function call. I<cvop> is the op
10900 being considered, normally an C<rv2cv> op. A pointer to the identified
10901 subroutine is returned, if it could be determined statically, and a null
10902 pointer is returned if it was not possible to determine statically.
10904 Currently, the subroutine can be identified statically if the RV that the
10905 C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
10906 A C<gv> op is suitable if the GV's CV slot is populated. A C<const> op is
10907 suitable if the constant value must be an RV pointing to a CV. Details of
10908 this process may change in future versions of Perl. If the C<rv2cv> op
10909 has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
10910 the subroutine statically: this flag is used to suppress compile-time
10911 magic on a subroutine call, forcing it to use default runtime behaviour.
10913 If I<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
10914 of a GV reference is modified. If a GV was examined and its CV slot was
10915 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
10916 If the op is not optimised away, and the CV slot is later populated with
10917 a subroutine having a prototype, that flag eventually triggers the warning
10918 "called too early to check prototype".
10920 If I<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
10921 of returning a pointer to the subroutine it returns a pointer to the
10922 GV giving the most appropriate name for the subroutine in this context.
10923 Normally this is just the C<CvGV> of the subroutine, but for an anonymous
10924 (C<CvANON>) subroutine that is referenced through a GV it will be the
10925 referencing GV. The resulting C<GV*> is cast to C<CV*> to be returned.
10926 A null pointer is returned as usual if there is no statically-determinable
10932 /* shared by toke.c:yylex */
10934 Perl_find_lexical_cv(pTHX_ PADOFFSET off)
10936 PADNAME *name = PAD_COMPNAME(off);
10937 CV *compcv = PL_compcv;
10938 while (PadnameOUTER(name)) {
10939 assert(PARENT_PAD_INDEX(name));
10940 compcv = CvOUTSIDE(PL_compcv);
10941 name = PadlistNAMESARRAY(CvPADLIST(compcv))
10942 [off = PARENT_PAD_INDEX(name)];
10944 assert(!PadnameIsOUR(name));
10945 if (!PadnameIsSTATE(name) && SvMAGICAL(name)) {
10946 MAGIC * mg = mg_find(name, PERL_MAGIC_proto);
10948 assert(mg->mg_obj);
10949 return (CV *)mg->mg_obj;
10951 return (CV *)AvARRAY(PadlistARRAY(CvPADLIST(compcv))[1])[off];
10955 Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
10960 PERL_ARGS_ASSERT_RV2CV_OP_CV;
10961 if (flags & ~RV2CVOPCV_FLAG_MASK)
10962 Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags);
10963 if (cvop->op_type != OP_RV2CV)
10965 if (cvop->op_private & OPpENTERSUB_AMPER)
10967 if (!(cvop->op_flags & OPf_KIDS))
10969 rvop = cUNOPx(cvop)->op_first;
10970 switch (rvop->op_type) {
10972 gv = cGVOPx_gv(rvop);
10974 if (SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV) {
10975 cv = MUTABLE_CV(SvRV(gv));
10979 if (flags & RV2CVOPCV_RETURN_STUB)
10985 if (flags & RV2CVOPCV_MARK_EARLY)
10986 rvop->op_private |= OPpEARLY_CV;
10991 SV *rv = cSVOPx_sv(rvop);
10994 cv = (CV*)SvRV(rv);
10998 cv = find_lexical_cv(rvop->op_targ);
11003 } NOT_REACHED; /* NOTREACHED */
11005 if (SvTYPE((SV*)cv) != SVt_PVCV)
11007 if (flags & (RV2CVOPCV_RETURN_NAME_GV|RV2CVOPCV_MAYBE_NAME_GV)) {
11008 if ((!CvANON(cv) || !gv) && !CvLEXICAL(cv)
11009 && ((flags & RV2CVOPCV_RETURN_NAME_GV) || !CvNAMED(cv)))
11018 =for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
11020 Performs the default fixup of the arguments part of an C<entersub>
11021 op tree. This consists of applying list context to each of the
11022 argument ops. This is the standard treatment used on a call marked
11023 with C<&>, or a method call, or a call through a subroutine reference,
11024 or any other call where the callee can't be identified at compile time,
11025 or a call where the callee has no prototype.
11031 Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
11034 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
11035 aop = cUNOPx(entersubop)->op_first;
11036 if (!OP_HAS_SIBLING(aop))
11037 aop = cUNOPx(aop)->op_first;
11038 for (aop = OP_SIBLING(aop); OP_HAS_SIBLING(aop); aop = OP_SIBLING(aop)) {
11040 op_lvalue(aop, OP_ENTERSUB);
11046 =for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
11048 Performs the fixup of the arguments part of an C<entersub> op tree
11049 based on a subroutine prototype. This makes various modifications to
11050 the argument ops, from applying context up to inserting C<refgen> ops,
11051 and checking the number and syntactic types of arguments, as directed by
11052 the prototype. This is the standard treatment used on a subroutine call,
11053 not marked with C<&>, where the callee can be identified at compile time
11054 and has a prototype.
11056 I<protosv> supplies the subroutine prototype to be applied to the call.
11057 It may be a normal defined scalar, of which the string value will be used.
11058 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
11059 that has been cast to C<SV*>) which has a prototype. The prototype
11060 supplied, in whichever form, does not need to match the actual callee
11061 referenced by the op tree.
11063 If the argument ops disagree with the prototype, for example by having
11064 an unacceptable number of arguments, a valid op tree is returned anyway.
11065 The error is reflected in the parser state, normally resulting in a single
11066 exception at the top level of parsing which covers all the compilation
11067 errors that occurred. In the error message, the callee is referred to
11068 by the name defined by the I<namegv> parameter.
11074 Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
11077 const char *proto, *proto_end;
11078 OP *aop, *prev, *cvop, *parent;
11081 I32 contextclass = 0;
11082 const char *e = NULL;
11083 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO;
11084 if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv))
11085 Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto, "
11086 "flags=%lx", (unsigned long) SvFLAGS(protosv));
11087 if (SvTYPE(protosv) == SVt_PVCV)
11088 proto = CvPROTO(protosv), proto_len = CvPROTOLEN(protosv);
11089 else proto = SvPV(protosv, proto_len);
11090 proto = S_strip_spaces(aTHX_ proto, &proto_len);
11091 proto_end = proto + proto_len;
11092 parent = entersubop;
11093 aop = cUNOPx(entersubop)->op_first;
11094 if (!OP_HAS_SIBLING(aop)) {
11096 aop = cUNOPx(aop)->op_first;
11099 aop = OP_SIBLING(aop);
11100 for (cvop = aop; OP_HAS_SIBLING(cvop); cvop = OP_SIBLING(cvop)) ;
11101 while (aop != cvop) {
11104 if (proto >= proto_end)
11106 SV * const namesv = cv_name((CV *)namegv, NULL, 0);
11107 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %"SVf,
11108 SVfARG(namesv)), SvUTF8(namesv));
11118 /* _ must be at the end */
11119 if (proto[1] && !strchr(";@%", proto[1]))
11135 if (o3->op_type != OP_REFGEN && o3->op_type != OP_SREFGEN
11136 && o3->op_type != OP_UNDEF)
11138 arg == 1 ? "block or sub {}" : "sub {}",
11142 /* '*' allows any scalar type, including bareword */
11145 if (o3->op_type == OP_RV2GV)
11146 goto wrapref; /* autoconvert GLOB -> GLOBref */
11147 else if (o3->op_type == OP_CONST)
11148 o3->op_private &= ~OPpCONST_STRICT;
11154 if (o3->op_type == OP_RV2AV ||
11155 o3->op_type == OP_PADAV ||
11156 o3->op_type == OP_RV2HV ||
11157 o3->op_type == OP_PADHV
11163 case '[': case ']':
11170 switch (*proto++) {
11172 if (contextclass++ == 0) {
11173 e = strchr(proto, ']');
11174 if (!e || e == proto)
11182 if (contextclass) {
11183 const char *p = proto;
11184 const char *const end = proto;
11186 while (*--p != '[')
11187 /* \[$] accepts any scalar lvalue */
11189 && Perl_op_lvalue_flags(aTHX_
11191 OP_READ, /* not entersub */
11194 bad_type_gv(arg, Perl_form(aTHX_ "one of %.*s",
11195 (int)(end - p), p),
11201 if (o3->op_type == OP_RV2GV)
11204 bad_type_gv(arg, "symbol", namegv, 0, o3);
11207 if (o3->op_type == OP_ENTERSUB)
11210 bad_type_gv(arg, "subroutine entry", namegv, 0,
11214 if (o3->op_type == OP_RV2SV ||
11215 o3->op_type == OP_PADSV ||
11216 o3->op_type == OP_HELEM ||
11217 o3->op_type == OP_AELEM)
11219 if (!contextclass) {
11220 /* \$ accepts any scalar lvalue */
11221 if (Perl_op_lvalue_flags(aTHX_
11223 OP_READ, /* not entersub */
11226 bad_type_gv(arg, "scalar", namegv, 0, o3);
11230 if (o3->op_type == OP_RV2AV ||
11231 o3->op_type == OP_PADAV)
11234 bad_type_gv(arg, "array", namegv, 0, o3);
11237 if (o3->op_type == OP_RV2HV ||
11238 o3->op_type == OP_PADHV)
11241 bad_type_gv(arg, "hash", namegv, 0, o3);
11244 aop = S_op_sibling_newUNOP(aTHX_ parent, prev,
11246 if (contextclass && e) {
11251 default: goto oops;
11261 Perl_croak(aTHX_ "Malformed prototype for %"SVf": %"SVf,
11262 SVfARG(cv_name((CV *)namegv, NULL, 0)),
11267 op_lvalue(aop, OP_ENTERSUB);
11269 aop = OP_SIBLING(aop);
11271 if (aop == cvop && *proto == '_') {
11272 /* generate an access to $_ */
11273 op_sibling_splice(parent, prev, 0, newDEFSVOP());
11275 if (!optional && proto_end > proto &&
11276 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
11278 SV * const namesv = cv_name((CV *)namegv, NULL, 0);
11279 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %"SVf,
11280 SVfARG(namesv)), SvUTF8(namesv));
11286 =for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
11288 Performs the fixup of the arguments part of an C<entersub> op tree either
11289 based on a subroutine prototype or using default list-context processing.
11290 This is the standard treatment used on a subroutine call, not marked
11291 with C<&>, where the callee can be identified at compile time.
11293 I<protosv> supplies the subroutine prototype to be applied to the call,
11294 or indicates that there is no prototype. It may be a normal scalar,
11295 in which case if it is defined then the string value will be used
11296 as a prototype, and if it is undefined then there is no prototype.
11297 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
11298 that has been cast to C<SV*>), of which the prototype will be used if it
11299 has one. The prototype (or lack thereof) supplied, in whichever form,
11300 does not need to match the actual callee referenced by the op tree.
11302 If the argument ops disagree with the prototype, for example by having
11303 an unacceptable number of arguments, a valid op tree is returned anyway.
11304 The error is reflected in the parser state, normally resulting in a single
11305 exception at the top level of parsing which covers all the compilation
11306 errors that occurred. In the error message, the callee is referred to
11307 by the name defined by the I<namegv> parameter.
11313 Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
11314 GV *namegv, SV *protosv)
11316 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST;
11317 if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv))
11318 return ck_entersub_args_proto(entersubop, namegv, protosv);
11320 return ck_entersub_args_list(entersubop);
11324 Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
11326 int opnum = SvTYPE(protosv) == SVt_PVCV ? 0 : (int)SvUV(protosv);
11327 OP *aop = cUNOPx(entersubop)->op_first;
11329 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE;
11333 if (!OP_HAS_SIBLING(aop))
11334 aop = cUNOPx(aop)->op_first;
11335 aop = OP_SIBLING(aop);
11336 for (cvop = aop; OP_SIBLING(cvop); cvop = OP_SIBLING(cvop)) ;
11338 (void)too_many_arguments_pv(entersubop, GvNAME(namegv), 0);
11340 op_free(entersubop);
11341 switch(GvNAME(namegv)[2]) {
11342 case 'F': return newSVOP(OP_CONST, 0,
11343 newSVpv(CopFILE(PL_curcop),0));
11344 case 'L': return newSVOP(
11346 Perl_newSVpvf(aTHX_
11347 "%"IVdf, (IV)CopLINE(PL_curcop)
11350 case 'P': return newSVOP(OP_CONST, 0,
11352 ? newSVhek(HvNAME_HEK(PL_curstash))
11360 OP *prev, *cvop, *first, *parent;
11363 parent = entersubop;
11364 if (!OP_HAS_SIBLING(aop)) {
11366 aop = cUNOPx(aop)->op_first;
11369 first = prev = aop;
11370 aop = OP_SIBLING(aop);
11371 /* find last sibling */
11373 OP_HAS_SIBLING(cvop);
11374 prev = cvop, cvop = OP_SIBLING(cvop))
11376 if (!(cvop->op_private & OPpENTERSUB_NOPAREN)
11377 /* Usually, OPf_SPECIAL on a UNOP means that its arg had no
11378 * parens, but these have their own meaning for that flag: */
11379 && opnum != OP_VALUES && opnum != OP_KEYS && opnum != OP_EACH
11380 && opnum != OP_DELETE && opnum != OP_EXISTS)
11381 flags |= OPf_SPECIAL;
11382 /* excise cvop from end of sibling chain */
11383 op_sibling_splice(parent, prev, 1, NULL);
11385 if (aop == cvop) aop = NULL;
11387 /* detach remaining siblings from the first sibling, then
11388 * dispose of original optree */
11391 op_sibling_splice(parent, first, -1, NULL);
11392 op_free(entersubop);
11394 if (opnum == OP_ENTEREVAL
11395 && GvNAMELEN(namegv)==9 && strnEQ(GvNAME(namegv), "evalbytes", 9))
11396 flags |= OPpEVAL_BYTES <<8;
11398 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
11400 case OA_BASEOP_OR_UNOP:
11401 case OA_FILESTATOP:
11402 return aop ? newUNOP(opnum,flags,aop) : newOP(opnum,flags);
11405 (void)too_many_arguments_pv(aop, GvNAME(namegv), 0);
11408 return opnum == OP_RUNCV
11409 ? newPVOP(OP_RUNCV,0,NULL)
11412 return op_convert_list(opnum,0,aop);
11420 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
11422 Retrieves the function that will be used to fix up a call to I<cv>.
11423 Specifically, the function is applied to an C<entersub> op tree for a
11424 subroutine call, not marked with C<&>, where the callee can be identified
11425 at compile time as I<cv>.
11427 The C-level function pointer is returned in I<*ckfun_p>, and an SV
11428 argument for it is returned in I<*ckobj_p>. The function is intended
11429 to be called in this manner:
11431 entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
11433 In this call, I<entersubop> is a pointer to the C<entersub> op,
11434 which may be replaced by the check function, and I<namegv> is a GV
11435 supplying the name that should be used by the check function to refer
11436 to the callee of the C<entersub> op if it needs to emit any diagnostics.
11437 It is permitted to apply the check function in non-standard situations,
11438 such as to a call to a different subroutine or to a method call.
11440 By default, the function is
11441 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
11442 and the SV parameter is I<cv> itself. This implements standard
11443 prototype processing. It can be changed, for a particular subroutine,
11444 by L</cv_set_call_checker>.
11450 S_cv_get_call_checker(CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p,
11454 callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL;
11456 *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr);
11457 *ckobj_p = callmg->mg_obj;
11458 if (flagsp) *flagsp = callmg->mg_flags;
11460 *ckfun_p = Perl_ck_entersub_args_proto_or_list;
11461 *ckobj_p = (SV*)cv;
11462 if (flagsp) *flagsp = 0;
11467 Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
11469 PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER;
11470 PERL_UNUSED_CONTEXT;
11471 S_cv_get_call_checker(cv, ckfun_p, ckobj_p, NULL);
11475 =for apidoc Am|void|cv_set_call_checker_flags|CV *cv|Perl_call_checker ckfun|SV *ckobj|U32 flags
11477 Sets the function that will be used to fix up a call to I<cv>.
11478 Specifically, the function is applied to an C<entersub> op tree for a
11479 subroutine call, not marked with C<&>, where the callee can be identified
11480 at compile time as I<cv>.
11482 The C-level function pointer is supplied in I<ckfun>, and an SV argument
11483 for it is supplied in I<ckobj>. The function should be defined like this:
11485 STATIC OP * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj)
11487 It is intended to be called in this manner:
11489 entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
11491 In this call, I<entersubop> is a pointer to the C<entersub> op,
11492 which may be replaced by the check function, and I<namegv> supplies
11493 the name that should be used by the check function to refer
11494 to the callee of the C<entersub> op if it needs to emit any diagnostics.
11495 It is permitted to apply the check function in non-standard situations,
11496 such as to a call to a different subroutine or to a method call.
11498 I<namegv> may not actually be a GV. For efficiency, perl may pass a
11499 CV or other SV instead. Whatever is passed can be used as the first
11500 argument to L</cv_name>. You can force perl to pass a GV by including
11501 C<CALL_CHECKER_REQUIRE_GV> in the I<flags>.
11503 The current setting for a particular CV can be retrieved by
11504 L</cv_get_call_checker>.
11506 =for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
11508 The original form of L</cv_set_call_checker_flags>, which passes it the
11509 C<CALL_CHECKER_REQUIRE_GV> flag for backward-compatibility.
11515 Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
11517 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER;
11518 cv_set_call_checker_flags(cv, ckfun, ckobj, CALL_CHECKER_REQUIRE_GV);
11522 Perl_cv_set_call_checker_flags(pTHX_ CV *cv, Perl_call_checker ckfun,
11523 SV *ckobj, U32 flags)
11525 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER_FLAGS;
11526 if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) {
11527 if (SvMAGICAL((SV*)cv))
11528 mg_free_type((SV*)cv, PERL_MAGIC_checkcall);
11531 sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0);
11532 callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall);
11534 if (callmg->mg_flags & MGf_REFCOUNTED) {
11535 SvREFCNT_dec(callmg->mg_obj);
11536 callmg->mg_flags &= ~MGf_REFCOUNTED;
11538 callmg->mg_ptr = FPTR2DPTR(char *, ckfun);
11539 callmg->mg_obj = ckobj;
11540 if (ckobj != (SV*)cv) {
11541 SvREFCNT_inc_simple_void_NN(ckobj);
11542 callmg->mg_flags |= MGf_REFCOUNTED;
11544 callmg->mg_flags = (callmg->mg_flags &~ MGf_REQUIRE_GV)
11545 | (U8)(flags & MGf_REQUIRE_GV) | MGf_COPY;
11550 Perl_ck_subr(pTHX_ OP *o)
11556 PERL_ARGS_ASSERT_CK_SUBR;
11558 aop = cUNOPx(o)->op_first;
11559 if (!OP_HAS_SIBLING(aop))
11560 aop = cUNOPx(aop)->op_first;
11561 aop = OP_SIBLING(aop);
11562 for (cvop = aop; OP_HAS_SIBLING(cvop); cvop = OP_SIBLING(cvop)) ;
11563 cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY);
11564 namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_MAYBE_NAME_GV) : NULL;
11566 o->op_private &= ~1;
11567 o->op_private |= OPpENTERSUB_HASTARG;
11568 o->op_private |= (PL_hints & HINT_STRICT_REFS);
11569 if (PERLDB_SUB && PL_curstash != PL_debstash)
11570 o->op_private |= OPpENTERSUB_DB;
11571 if (cvop->op_type == OP_RV2CV) {
11572 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
11574 } else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
11575 if (aop->op_type == OP_CONST)
11576 aop->op_private &= ~OPpCONST_STRICT;
11577 else if (aop->op_type == OP_LIST) {
11578 OP * const sib = OP_SIBLING(((UNOP*)aop)->op_first);
11579 if (sib && sib->op_type == OP_CONST)
11580 sib->op_private &= ~OPpCONST_STRICT;
11585 return ck_entersub_args_list(o);
11587 Perl_call_checker ckfun;
11590 S_cv_get_call_checker(cv, &ckfun, &ckobj, &flags);
11592 /* The original call checker API guarantees that a GV will be
11593 be provided with the right name. So, if the old API was
11594 used (or the REQUIRE_GV flag was passed), we have to reify
11595 the CV’s GV, unless this is an anonymous sub. This is not
11596 ideal for lexical subs, as its stringification will include
11597 the package. But it is the best we can do. */
11598 if (flags & MGf_REQUIRE_GV) {
11599 if (!CvANON(cv) && (!CvNAMED(cv) || CvNAME_HEK(cv)))
11602 else namegv = MUTABLE_GV(cv);
11603 /* After a syntax error in a lexical sub, the cv that
11604 rv2cv_op_cv returns may be a nameless stub. */
11605 if (!namegv) return ck_entersub_args_list(o);
11608 return ckfun(aTHX_ o, namegv, ckobj);
11613 Perl_ck_svconst(pTHX_ OP *o)
11615 SV * const sv = cSVOPo->op_sv;
11616 PERL_ARGS_ASSERT_CK_SVCONST;
11617 PERL_UNUSED_CONTEXT;
11618 #ifdef PERL_OLD_COPY_ON_WRITE
11619 if (SvIsCOW(sv)) sv_force_normal(sv);
11620 #elif defined(PERL_NEW_COPY_ON_WRITE)
11621 /* Since the read-only flag may be used to protect a string buffer, we
11622 cannot do copy-on-write with existing read-only scalars that are not
11623 already copy-on-write scalars. To allow $_ = "hello" to do COW with
11624 that constant, mark the constant as COWable here, if it is not
11625 already read-only. */
11626 if (!SvREADONLY(sv) && !SvIsCOW(sv) && SvCANCOW(sv)) {
11629 # ifdef PERL_DEBUG_READONLY_COW
11639 Perl_ck_trunc(pTHX_ OP *o)
11641 PERL_ARGS_ASSERT_CK_TRUNC;
11643 if (o->op_flags & OPf_KIDS) {
11644 SVOP *kid = (SVOP*)cUNOPo->op_first;
11646 if (kid->op_type == OP_NULL)
11647 kid = (SVOP*)OP_SIBLING(kid);
11648 if (kid && kid->op_type == OP_CONST &&
11649 (kid->op_private & OPpCONST_BARE) &&
11652 o->op_flags |= OPf_SPECIAL;
11653 kid->op_private &= ~OPpCONST_STRICT;
11660 Perl_ck_substr(pTHX_ OP *o)
11662 PERL_ARGS_ASSERT_CK_SUBSTR;
11665 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
11666 OP *kid = cLISTOPo->op_first;
11668 if (kid->op_type == OP_NULL)
11669 kid = OP_SIBLING(kid);
11671 kid->op_flags |= OPf_MOD;
11678 Perl_ck_tell(pTHX_ OP *o)
11680 PERL_ARGS_ASSERT_CK_TELL;
11682 if (o->op_flags & OPf_KIDS) {
11683 OP *kid = cLISTOPo->op_first;
11684 if (kid->op_type == OP_NULL && OP_HAS_SIBLING(kid)) kid = OP_SIBLING(kid);
11685 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
11691 Perl_ck_each(pTHX_ OP *o)
11694 OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL;
11695 const unsigned orig_type = o->op_type;
11696 const unsigned array_type = orig_type == OP_EACH ? OP_AEACH
11697 : orig_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
11698 const unsigned ref_type = orig_type == OP_EACH ? OP_REACH
11699 : orig_type == OP_KEYS ? OP_RKEYS : OP_RVALUES;
11701 PERL_ARGS_ASSERT_CK_EACH;
11704 switch (kid->op_type) {
11710 CHANGE_TYPE(o, array_type);
11713 if (kid->op_private == OPpCONST_BARE
11714 || !SvROK(cSVOPx_sv(kid))
11715 || ( SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV
11716 && SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVHV )
11718 /* we let ck_fun handle it */
11721 CHANGE_TYPE(o, ref_type);
11725 /* if treating as a reference, defer additional checks to runtime */
11726 if (o->op_type == ref_type) {
11727 /* diag_listed_as: keys on reference is experimental */
11728 Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__AUTODEREF),
11729 "%s is experimental", PL_op_desc[ref_type]);
11736 Perl_ck_length(pTHX_ OP *o)
11738 PERL_ARGS_ASSERT_CK_LENGTH;
11742 if (ckWARN(WARN_SYNTAX)) {
11743 const OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
11747 const bool hash = kid->op_type == OP_PADHV
11748 || kid->op_type == OP_RV2HV;
11749 switch (kid->op_type) {
11754 name = S_op_varname(aTHX_ kid);
11760 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
11761 "length() used on %"SVf" (did you mean \"scalar(%s%"SVf
11763 SVfARG(name), hash ? "keys " : "", SVfARG(name)
11766 /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */
11767 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
11768 "length() used on %%hash (did you mean \"scalar(keys %%hash)\"?)");
11770 /* diag_listed_as: length() used on %s (did you mean "scalar(%s)"?) */
11771 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
11772 "length() used on @array (did you mean \"scalar(@array)\"?)");
11779 /* Check for in place reverse and sort assignments like "@a = reverse @a"
11780 and modify the optree to make them work inplace */
11783 S_inplace_aassign(pTHX_ OP *o) {
11785 OP *modop, *modop_pushmark;
11787 OP *oleft, *oleft_pushmark;
11789 PERL_ARGS_ASSERT_INPLACE_AASSIGN;
11791 assert((o->op_flags & OPf_WANT) == OPf_WANT_VOID);
11793 assert(cUNOPo->op_first->op_type == OP_NULL);
11794 modop_pushmark = cUNOPx(cUNOPo->op_first)->op_first;
11795 assert(modop_pushmark->op_type == OP_PUSHMARK);
11796 modop = OP_SIBLING(modop_pushmark);
11798 if (modop->op_type != OP_SORT && modop->op_type != OP_REVERSE)
11801 /* no other operation except sort/reverse */
11802 if (OP_HAS_SIBLING(modop))
11805 assert(cUNOPx(modop)->op_first->op_type == OP_PUSHMARK);
11806 if (!(oright = OP_SIBLING(cUNOPx(modop)->op_first))) return;
11808 if (modop->op_flags & OPf_STACKED) {
11809 /* skip sort subroutine/block */
11810 assert(oright->op_type == OP_NULL);
11811 oright = OP_SIBLING(oright);
11814 assert(OP_SIBLING(cUNOPo->op_first)->op_type == OP_NULL);
11815 oleft_pushmark = cUNOPx(OP_SIBLING(cUNOPo->op_first))->op_first;
11816 assert(oleft_pushmark->op_type == OP_PUSHMARK);
11817 oleft = OP_SIBLING(oleft_pushmark);
11819 /* Check the lhs is an array */
11821 (oleft->op_type != OP_RV2AV && oleft->op_type != OP_PADAV)
11822 || OP_HAS_SIBLING(oleft)
11823 || (oleft->op_private & OPpLVAL_INTRO)
11827 /* Only one thing on the rhs */
11828 if (OP_HAS_SIBLING(oright))
11831 /* check the array is the same on both sides */
11832 if (oleft->op_type == OP_RV2AV) {
11833 if (oright->op_type != OP_RV2AV
11834 || !cUNOPx(oright)->op_first
11835 || cUNOPx(oright)->op_first->op_type != OP_GV
11836 || cUNOPx(oleft )->op_first->op_type != OP_GV
11837 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
11838 cGVOPx_gv(cUNOPx(oright)->op_first)
11842 else if (oright->op_type != OP_PADAV
11843 || oright->op_targ != oleft->op_targ
11847 /* This actually is an inplace assignment */
11849 modop->op_private |= OPpSORT_INPLACE;
11851 /* transfer MODishness etc from LHS arg to RHS arg */
11852 oright->op_flags = oleft->op_flags;
11854 /* remove the aassign op and the lhs */
11856 op_null(oleft_pushmark);
11857 if (oleft->op_type == OP_RV2AV && cUNOPx(oleft)->op_first)
11858 op_null(cUNOPx(oleft)->op_first);
11864 /* mechanism for deferring recursion in rpeep() */
11866 #define MAX_DEFERRED 4
11870 if (defer_ix == (MAX_DEFERRED-1)) { \
11871 OP **defer = defer_queue[defer_base]; \
11872 CALL_RPEEP(*defer); \
11873 S_prune_chain_head(defer); \
11874 defer_base = (defer_base + 1) % MAX_DEFERRED; \
11877 defer_queue[(defer_base + ++defer_ix) % MAX_DEFERRED] = &(o); \
11880 #define IS_AND_OP(o) (o->op_type == OP_AND)
11881 #define IS_OR_OP(o) (o->op_type == OP_OR)
11884 /* A peephole optimizer. We visit the ops in the order they're to execute.
11885 * See the comments at the top of this file for more details about when
11886 * peep() is called */
11889 Perl_rpeep(pTHX_ OP *o)
11893 OP* oldoldop = NULL;
11894 OP** defer_queue[MAX_DEFERRED]; /* small queue of deferred branches */
11895 int defer_base = 0;
11900 if (!o || o->op_opt)
11904 SAVEVPTR(PL_curcop);
11905 for (;; o = o->op_next) {
11906 if (o && o->op_opt)
11909 while (defer_ix >= 0) {
11911 defer_queue[(defer_base + defer_ix--) % MAX_DEFERRED];
11912 CALL_RPEEP(*defer);
11913 S_prune_chain_head(defer);
11919 /* By default, this op has now been optimised. A couple of cases below
11920 clear this again. */
11925 switch (o->op_type) {
11927 PL_curcop = ((COP*)o); /* for warnings */
11930 PL_curcop = ((COP*)o); /* for warnings */
11932 /* Optimise a "return ..." at the end of a sub to just be "...".
11933 * This saves 2 ops. Before:
11934 * 1 <;> nextstate(main 1 -e:1) v ->2
11935 * 4 <@> return K ->5
11936 * 2 <0> pushmark s ->3
11937 * - <1> ex-rv2sv sK/1 ->4
11938 * 3 <#> gvsv[*cat] s ->4
11941 * - <@> return K ->-
11942 * - <0> pushmark s ->2
11943 * - <1> ex-rv2sv sK/1 ->-
11944 * 2 <$> gvsv(*cat) s ->3
11947 OP *next = o->op_next;
11948 OP *sibling = OP_SIBLING(o);
11949 if ( OP_TYPE_IS(next, OP_PUSHMARK)
11950 && OP_TYPE_IS(sibling, OP_RETURN)
11951 && OP_TYPE_IS(sibling->op_next, OP_LINESEQ)
11952 && ( OP_TYPE_IS(sibling->op_next->op_next, OP_LEAVESUB)
11953 ||OP_TYPE_IS(sibling->op_next->op_next,
11955 && cUNOPx(sibling)->op_first == next
11956 && OP_HAS_SIBLING(next) && OP_SIBLING(next)->op_next
11959 /* Look through the PUSHMARK's siblings for one that
11960 * points to the RETURN */
11961 OP *top = OP_SIBLING(next);
11962 while (top && top->op_next) {
11963 if (top->op_next == sibling) {
11964 top->op_next = sibling->op_next;
11965 o->op_next = next->op_next;
11968 top = OP_SIBLING(top);
11973 /* Optimise 'my $x; my $y;' into 'my ($x, $y);'
11975 * This latter form is then suitable for conversion into padrange
11976 * later on. Convert:
11978 * nextstate1 -> padop1 -> nextstate2 -> padop2 -> nextstate3
11982 * nextstate1 -> listop -> nextstate3
11984 * pushmark -> padop1 -> padop2
11986 if (o->op_next && (
11987 o->op_next->op_type == OP_PADSV
11988 || o->op_next->op_type == OP_PADAV
11989 || o->op_next->op_type == OP_PADHV
11991 && !(o->op_next->op_private & ~OPpLVAL_INTRO)
11992 && o->op_next->op_next && o->op_next->op_next->op_type == OP_NEXTSTATE
11993 && o->op_next->op_next->op_next && (
11994 o->op_next->op_next->op_next->op_type == OP_PADSV
11995 || o->op_next->op_next->op_next->op_type == OP_PADAV
11996 || o->op_next->op_next->op_next->op_type == OP_PADHV
11998 && !(o->op_next->op_next->op_next->op_private & ~OPpLVAL_INTRO)
11999 && o->op_next->op_next->op_next->op_next && o->op_next->op_next->op_next->op_next->op_type == OP_NEXTSTATE
12000 && (!CopLABEL((COP*)o)) /* Don't mess with labels */
12001 && (!CopLABEL((COP*)o->op_next->op_next)) /* ... */
12003 OP *pad1, *ns2, *pad2, *ns3, *newop, *newpm;
12006 ns2 = pad1->op_next;
12007 pad2 = ns2->op_next;
12008 ns3 = pad2->op_next;
12010 /* we assume here that the op_next chain is the same as
12011 * the op_sibling chain */
12012 assert(OP_SIBLING(o) == pad1);
12013 assert(OP_SIBLING(pad1) == ns2);
12014 assert(OP_SIBLING(ns2) == pad2);
12015 assert(OP_SIBLING(pad2) == ns3);
12017 /* create new listop, with children consisting of:
12018 * a new pushmark, pad1, pad2. */
12019 OP_SIBLING_set(pad2, NULL);
12020 newop = newLISTOP(OP_LIST, 0, pad1, pad2);
12021 newop->op_flags |= OPf_PARENS;
12022 newop->op_flags = (newop->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
12023 newpm = cUNOPx(newop)->op_first; /* pushmark */
12025 /* Kill nextstate2 between padop1/padop2 */
12028 o ->op_next = newpm;
12029 newpm->op_next = pad1;
12030 pad1 ->op_next = pad2;
12031 pad2 ->op_next = newop; /* listop */
12032 newop->op_next = ns3;
12034 OP_SIBLING_set(o, newop);
12035 OP_SIBLING_set(newop, ns3);
12036 newop->op_lastsib = 0;
12038 newop->op_flags = (newop->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
12040 /* Ensure pushmark has this flag if padops do */
12041 if (pad1->op_flags & OPf_MOD && pad2->op_flags & OPf_MOD) {
12042 o->op_next->op_flags |= OPf_MOD;
12048 /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
12049 to carry two labels. For now, take the easier option, and skip
12050 this optimisation if the first NEXTSTATE has a label. */
12051 if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) {
12052 OP *nextop = o->op_next;
12053 while (nextop && nextop->op_type == OP_NULL)
12054 nextop = nextop->op_next;
12056 if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
12059 oldop->op_next = nextop;
12060 /* Skip (old)oldop assignment since the current oldop's
12061 op_next already points to the next op. */
12068 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
12069 if (o->op_next->op_private & OPpTARGET_MY) {
12070 if (o->op_flags & OPf_STACKED) /* chained concats */
12071 break; /* ignore_optimization */
12073 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
12074 o->op_targ = o->op_next->op_targ;
12075 o->op_next->op_targ = 0;
12076 o->op_private |= OPpTARGET_MY;
12079 op_null(o->op_next);
12083 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
12084 break; /* Scalar stub must produce undef. List stub is noop */
12088 if (o->op_targ == OP_NEXTSTATE
12089 || o->op_targ == OP_DBSTATE)
12091 PL_curcop = ((COP*)o);
12093 /* XXX: We avoid setting op_seq here to prevent later calls
12094 to rpeep() from mistakenly concluding that optimisation
12095 has already occurred. This doesn't fix the real problem,
12096 though (See 20010220.007). AMS 20010719 */
12097 /* op_seq functionality is now replaced by op_opt */
12105 oldop->op_next = o->op_next;
12119 convert repeat into a stub with no kids.
12121 if (o->op_next->op_type == OP_CONST
12122 || ( o->op_next->op_type == OP_PADSV
12123 && !(o->op_next->op_private & OPpLVAL_INTRO))
12124 || ( o->op_next->op_type == OP_GV
12125 && o->op_next->op_next->op_type == OP_RV2SV
12126 && !(o->op_next->op_next->op_private
12127 & (OPpLVAL_INTRO|OPpOUR_INTRO))))
12129 const OP *kid = o->op_next->op_next;
12130 if (o->op_next->op_type == OP_GV)
12131 kid = kid->op_next;
12132 /* kid is now the ex-list. */
12133 if (kid->op_type == OP_NULL
12134 && (kid = kid->op_next)->op_type == OP_CONST
12135 /* kid is now the repeat count. */
12136 && kid->op_next->op_type == OP_REPEAT
12137 && kid->op_next->op_private & OPpREPEAT_DOLIST
12138 && (kid->op_next->op_flags & OPf_WANT) == OPf_WANT_LIST
12139 && SvIOK(kSVOP_sv) && SvIVX(kSVOP_sv) == 0)
12141 o = kid->op_next; /* repeat */
12143 oldop->op_next = o;
12144 op_free(cBINOPo->op_first);
12145 op_free(cBINOPo->op_last );
12146 o->op_flags &=~ OPf_KIDS;
12147 /* stub is a baseop; repeat is a binop */
12148 assert(sizeof(OP) <= sizeof(BINOP));
12149 CHANGE_TYPE(o, OP_STUB);
12155 /* Convert a series of PAD ops for my vars plus support into a
12156 * single padrange op. Basically
12158 * pushmark -> pad[ahs]v -> pad[ahs]?v -> ... -> (list) -> rest
12160 * becomes, depending on circumstances, one of
12162 * padrange ----------------------------------> (list) -> rest
12163 * padrange --------------------------------------------> rest
12165 * where all the pad indexes are sequential and of the same type
12167 * We convert the pushmark into a padrange op, then skip
12168 * any other pad ops, and possibly some trailing ops.
12169 * Note that we don't null() the skipped ops, to make it
12170 * easier for Deparse to undo this optimisation (and none of
12171 * the skipped ops are holding any resourses). It also makes
12172 * it easier for find_uninit_var(), as it can just ignore
12173 * padrange, and examine the original pad ops.
12177 OP *followop = NULL; /* the op that will follow the padrange op */
12180 PADOFFSET base = 0; /* init only to stop compiler whining */
12181 U8 gimme = 0; /* init only to stop compiler whining */
12182 bool defav = 0; /* seen (...) = @_ */
12183 bool reuse = 0; /* reuse an existing padrange op */
12185 /* look for a pushmark -> gv[_] -> rv2av */
12190 if ( p->op_type == OP_GV
12191 && cGVOPx_gv(p) == PL_defgv
12192 && (rv2av = p->op_next)
12193 && rv2av->op_type == OP_RV2AV
12194 && !(rv2av->op_flags & OPf_REF)
12195 && !(rv2av->op_private & (OPpLVAL_INTRO|OPpMAYBE_LVSUB))
12196 && ((rv2av->op_flags & OPf_WANT) == OPf_WANT_LIST)
12198 q = rv2av->op_next;
12199 if (q->op_type == OP_NULL)
12201 if (q->op_type == OP_PUSHMARK) {
12211 /* scan for PAD ops */
12213 for (p = p->op_next; p; p = p->op_next) {
12214 if (p->op_type == OP_NULL)
12217 if (( p->op_type != OP_PADSV
12218 && p->op_type != OP_PADAV
12219 && p->op_type != OP_PADHV
12221 /* any private flag other than INTRO? e.g. STATE */
12222 || (p->op_private & ~OPpLVAL_INTRO)
12226 /* let $a[N] potentially be optimised into AELEMFAST_LEX
12228 if ( p->op_type == OP_PADAV
12230 && p->op_next->op_type == OP_CONST
12231 && p->op_next->op_next
12232 && p->op_next->op_next->op_type == OP_AELEM
12236 /* for 1st padop, note what type it is and the range
12237 * start; for the others, check that it's the same type
12238 * and that the targs are contiguous */
12240 intro = (p->op_private & OPpLVAL_INTRO);
12242 gimme = (p->op_flags & OPf_WANT);
12245 if ((p->op_private & OPpLVAL_INTRO) != intro)
12247 /* Note that you'd normally expect targs to be
12248 * contiguous in my($a,$b,$c), but that's not the case
12249 * when external modules start doing things, e.g.
12250 i* Function::Parameters */
12251 if (p->op_targ != base + count)
12253 assert(p->op_targ == base + count);
12254 /* all the padops should be in the same context */
12255 if (gimme != (p->op_flags & OPf_WANT))
12259 /* for AV, HV, only when we're not flattening */
12260 if ( p->op_type != OP_PADSV
12261 && gimme != OPf_WANT_VOID
12262 && !(p->op_flags & OPf_REF)
12266 if (count >= OPpPADRANGE_COUNTMASK)
12269 /* there's a biggest base we can fit into a
12270 * SAVEt_CLEARPADRANGE in pp_padrange */
12271 if (intro && base >
12272 (UV_MAX >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT)))
12275 /* Success! We've got another valid pad op to optimise away */
12277 followop = p->op_next;
12280 if (count < 1 || (count == 1 && !defav))
12283 /* pp_padrange in specifically compile-time void context
12284 * skips pushing a mark and lexicals; in all other contexts
12285 * (including unknown till runtime) it pushes a mark and the
12286 * lexicals. We must be very careful then, that the ops we
12287 * optimise away would have exactly the same effect as the
12289 * In particular in void context, we can only optimise to
12290 * a padrange if see see the complete sequence
12291 * pushmark, pad*v, ...., list
12292 * which has the net effect of of leaving the markstack as it
12293 * was. Not pushing on to the stack (whereas padsv does touch
12294 * the stack) makes no difference in void context.
12297 if (gimme == OPf_WANT_VOID) {
12298 if (followop->op_type == OP_LIST
12299 && gimme == (followop->op_flags & OPf_WANT)
12302 followop = followop->op_next; /* skip OP_LIST */
12304 /* consolidate two successive my(...);'s */
12307 && oldoldop->op_type == OP_PADRANGE
12308 && (oldoldop->op_flags & OPf_WANT) == OPf_WANT_VOID
12309 && (oldoldop->op_private & OPpLVAL_INTRO) == intro
12310 && !(oldoldop->op_flags & OPf_SPECIAL)
12313 assert(oldoldop->op_next == oldop);
12314 assert( oldop->op_type == OP_NEXTSTATE
12315 || oldop->op_type == OP_DBSTATE);
12316 assert(oldop->op_next == o);
12319 = (oldoldop->op_private & OPpPADRANGE_COUNTMASK);
12321 /* Do not assume pad offsets for $c and $d are con-
12326 if ( oldoldop->op_targ + old_count == base
12327 && old_count < OPpPADRANGE_COUNTMASK - count) {
12328 base = oldoldop->op_targ;
12329 count += old_count;
12334 /* if there's any immediately following singleton
12335 * my var's; then swallow them and the associated
12337 * my ($a,$b); my $c; my $d;
12339 * my ($a,$b,$c,$d);
12342 while ( ((p = followop->op_next))
12343 && ( p->op_type == OP_PADSV
12344 || p->op_type == OP_PADAV
12345 || p->op_type == OP_PADHV)
12346 && (p->op_flags & OPf_WANT) == OPf_WANT_VOID
12347 && (p->op_private & OPpLVAL_INTRO) == intro
12348 && !(p->op_private & ~OPpLVAL_INTRO)
12350 && ( p->op_next->op_type == OP_NEXTSTATE
12351 || p->op_next->op_type == OP_DBSTATE)
12352 && count < OPpPADRANGE_COUNTMASK
12353 && base + count == p->op_targ
12356 followop = p->op_next;
12364 assert(oldoldop->op_type == OP_PADRANGE);
12365 oldoldop->op_next = followop;
12366 oldoldop->op_private = (intro | count);
12372 /* Convert the pushmark into a padrange.
12373 * To make Deparse easier, we guarantee that a padrange was
12374 * *always* formerly a pushmark */
12375 assert(o->op_type == OP_PUSHMARK);
12376 o->op_next = followop;
12377 CHANGE_TYPE(o, OP_PADRANGE);
12379 /* bit 7: INTRO; bit 6..0: count */
12380 o->op_private = (intro | count);
12381 o->op_flags = ((o->op_flags & ~(OPf_WANT|OPf_SPECIAL))
12382 | gimme | (defav ? OPf_SPECIAL : 0));
12390 /* Skip over state($x) in void context. */
12391 if (oldop && o->op_private == (OPpPAD_STATE|OPpLVAL_INTRO)
12392 && (o->op_flags & OPf_WANT) == OPf_WANT_VOID)
12394 oldop->op_next = o->op_next;
12395 goto redo_nextstate;
12397 if (o->op_type != OP_PADAV)
12401 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
12402 OP* const pop = (o->op_type == OP_PADAV) ?
12403 o->op_next : o->op_next->op_next;
12405 if (pop && pop->op_type == OP_CONST &&
12406 ((PL_op = pop->op_next)) &&
12407 pop->op_next->op_type == OP_AELEM &&
12408 !(pop->op_next->op_private &
12409 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
12410 (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
12413 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
12414 no_bareword_allowed(pop);
12415 if (o->op_type == OP_GV)
12416 op_null(o->op_next);
12417 op_null(pop->op_next);
12419 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
12420 o->op_next = pop->op_next->op_next;
12421 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
12422 o->op_private = (U8)i;
12423 if (o->op_type == OP_GV) {
12426 o->op_type = OP_AELEMFAST;
12429 o->op_type = OP_AELEMFAST_LEX;
12431 if (o->op_type != OP_GV)
12435 /* Remove $foo from the op_next chain in void context. */
12437 && ( o->op_next->op_type == OP_RV2SV
12438 || o->op_next->op_type == OP_RV2AV
12439 || o->op_next->op_type == OP_RV2HV )
12440 && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID
12441 && !(o->op_next->op_private & OPpLVAL_INTRO))
12443 oldop->op_next = o->op_next->op_next;
12444 /* Reprocess the previous op if it is a nextstate, to
12445 allow double-nextstate optimisation. */
12447 if (oldop->op_type == OP_NEXTSTATE) {
12456 else if (o->op_next->op_type == OP_RV2SV) {
12457 if (!(o->op_next->op_private & OPpDEREF)) {
12458 op_null(o->op_next);
12459 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
12461 o->op_next = o->op_next->op_next;
12462 CHANGE_TYPE(o, OP_GVSV);
12465 else if (o->op_next->op_type == OP_READLINE
12466 && o->op_next->op_next->op_type == OP_CONCAT
12467 && (o->op_next->op_next->op_flags & OPf_STACKED))
12469 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
12470 CHANGE_TYPE(o, OP_RCATLINE);
12471 o->op_flags |= OPf_STACKED;
12472 op_null(o->op_next->op_next);
12473 op_null(o->op_next);
12478 #define HV_OR_SCALARHV(op) \
12479 ( (op)->op_type == OP_PADHV || (op)->op_type == OP_RV2HV \
12481 : (op)->op_type == OP_SCALAR && (op)->op_flags & OPf_KIDS \
12482 && ( cUNOPx(op)->op_first->op_type == OP_PADHV \
12483 || cUNOPx(op)->op_first->op_type == OP_RV2HV) \
12484 ? cUNOPx(op)->op_first \
12488 if ((fop = HV_OR_SCALARHV(cUNOP->op_first)))
12489 fop->op_private |= OPpTRUEBOOL;
12495 fop = cLOGOP->op_first;
12496 sop = OP_SIBLING(fop);
12497 while (cLOGOP->op_other->op_type == OP_NULL)
12498 cLOGOP->op_other = cLOGOP->op_other->op_next;
12499 while (o->op_next && ( o->op_type == o->op_next->op_type
12500 || o->op_next->op_type == OP_NULL))
12501 o->op_next = o->op_next->op_next;
12503 /* if we're an OR and our next is a AND in void context, we'll
12504 follow it's op_other on short circuit, same for reverse.
12505 We can't do this with OP_DOR since if it's true, its return
12506 value is the underlying value which must be evaluated
12510 (IS_AND_OP(o) && IS_OR_OP(o->op_next))
12511 || (IS_OR_OP(o) && IS_AND_OP(o->op_next))
12513 && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID
12515 o->op_next = ((LOGOP*)o->op_next)->op_other;
12517 DEFER(cLOGOP->op_other);
12520 fop = HV_OR_SCALARHV(fop);
12521 if (sop) sop = HV_OR_SCALARHV(sop);
12526 if (!((nop->op_flags & OPf_WANT) == OPf_WANT_VOID)) {
12527 while (nop && nop->op_next) {
12528 switch (nop->op_next->op_type) {
12533 lop = nop = nop->op_next;
12536 nop = nop->op_next;
12545 if ( (lop->op_flags & OPf_WANT) == OPf_WANT_VOID
12546 || o->op_type == OP_AND )
12547 fop->op_private |= OPpTRUEBOOL;
12548 else if (!(lop->op_flags & OPf_WANT))
12549 fop->op_private |= OPpMAYBE_TRUEBOOL;
12551 if ( (lop->op_flags & OPf_WANT) == OPf_WANT_VOID
12553 sop->op_private |= OPpTRUEBOOL;
12560 if ((fop = HV_OR_SCALARHV(cLOGOP->op_first)))
12561 fop->op_private |= OPpTRUEBOOL;
12562 #undef HV_OR_SCALARHV
12563 /* GERONIMO! */ /* FALLTHROUGH */
12572 while (cLOGOP->op_other->op_type == OP_NULL)
12573 cLOGOP->op_other = cLOGOP->op_other->op_next;
12574 DEFER(cLOGOP->op_other);
12579 while (cLOOP->op_redoop->op_type == OP_NULL)
12580 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
12581 while (cLOOP->op_nextop->op_type == OP_NULL)
12582 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
12583 while (cLOOP->op_lastop->op_type == OP_NULL)
12584 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
12585 /* a while(1) loop doesn't have an op_next that escapes the
12586 * loop, so we have to explicitly follow the op_lastop to
12587 * process the rest of the code */
12588 DEFER(cLOOP->op_lastop);
12592 assert(cLOGOPo->op_other->op_type == OP_LEAVETRY);
12593 DEFER(cLOGOPo->op_other);
12597 assert(!(cPMOP->op_pmflags & PMf_ONCE));
12598 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
12599 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
12600 cPMOP->op_pmstashstartu.op_pmreplstart
12601 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
12602 DEFER(cPMOP->op_pmstashstartu.op_pmreplstart);
12608 if (o->op_flags & OPf_SPECIAL) {
12609 /* first arg is a code block */
12610 OP * const nullop = OP_SIBLING(cLISTOP->op_first);
12611 OP * kid = cUNOPx(nullop)->op_first;
12613 assert(nullop->op_type == OP_NULL);
12614 assert(kid->op_type == OP_SCOPE
12615 || (kid->op_type == OP_NULL && kid->op_targ == OP_LEAVE));
12616 /* since OP_SORT doesn't have a handy op_other-style
12617 * field that can point directly to the start of the code
12618 * block, store it in the otherwise-unused op_next field
12619 * of the top-level OP_NULL. This will be quicker at
12620 * run-time, and it will also allow us to remove leading
12621 * OP_NULLs by just messing with op_nexts without
12622 * altering the basic op_first/op_sibling layout. */
12623 kid = kLISTOP->op_first;
12625 (kid->op_type == OP_NULL
12626 && ( kid->op_targ == OP_NEXTSTATE
12627 || kid->op_targ == OP_DBSTATE ))
12628 || kid->op_type == OP_STUB
12629 || kid->op_type == OP_ENTER);
12630 nullop->op_next = kLISTOP->op_next;
12631 DEFER(nullop->op_next);
12634 /* check that RHS of sort is a single plain array */
12635 oright = cUNOPo->op_first;
12636 if (!oright || oright->op_type != OP_PUSHMARK)
12639 if (o->op_private & OPpSORT_INPLACE)
12642 /* reverse sort ... can be optimised. */
12643 if (!OP_HAS_SIBLING(cUNOPo)) {
12644 /* Nothing follows us on the list. */
12645 OP * const reverse = o->op_next;
12647 if (reverse->op_type == OP_REVERSE &&
12648 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
12649 OP * const pushmark = cUNOPx(reverse)->op_first;
12650 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
12651 && (OP_SIBLING(cUNOPx(pushmark)) == o)) {
12652 /* reverse -> pushmark -> sort */
12653 o->op_private |= OPpSORT_REVERSE;
12655 pushmark->op_next = oright->op_next;
12665 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
12667 LISTOP *enter, *exlist;
12669 if (o->op_private & OPpSORT_INPLACE)
12672 enter = (LISTOP *) o->op_next;
12675 if (enter->op_type == OP_NULL) {
12676 enter = (LISTOP *) enter->op_next;
12680 /* for $a (...) will have OP_GV then OP_RV2GV here.
12681 for (...) just has an OP_GV. */
12682 if (enter->op_type == OP_GV) {
12683 gvop = (OP *) enter;
12684 enter = (LISTOP *) enter->op_next;
12687 if (enter->op_type == OP_RV2GV) {
12688 enter = (LISTOP *) enter->op_next;
12694 if (enter->op_type != OP_ENTERITER)
12697 iter = enter->op_next;
12698 if (!iter || iter->op_type != OP_ITER)
12701 expushmark = enter->op_first;
12702 if (!expushmark || expushmark->op_type != OP_NULL
12703 || expushmark->op_targ != OP_PUSHMARK)
12706 exlist = (LISTOP *) OP_SIBLING(expushmark);
12707 if (!exlist || exlist->op_type != OP_NULL
12708 || exlist->op_targ != OP_LIST)
12711 if (exlist->op_last != o) {
12712 /* Mmm. Was expecting to point back to this op. */
12715 theirmark = exlist->op_first;
12716 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
12719 if (OP_SIBLING(theirmark) != o) {
12720 /* There's something between the mark and the reverse, eg
12721 for (1, reverse (...))
12726 ourmark = ((LISTOP *)o)->op_first;
12727 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
12730 ourlast = ((LISTOP *)o)->op_last;
12731 if (!ourlast || ourlast->op_next != o)
12734 rv2av = OP_SIBLING(ourmark);
12735 if (rv2av && rv2av->op_type == OP_RV2AV && !OP_HAS_SIBLING(rv2av)
12736 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
12737 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
12738 /* We're just reversing a single array. */
12739 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
12740 enter->op_flags |= OPf_STACKED;
12743 /* We don't have control over who points to theirmark, so sacrifice
12745 theirmark->op_next = ourmark->op_next;
12746 theirmark->op_flags = ourmark->op_flags;
12747 ourlast->op_next = gvop ? gvop : (OP *) enter;
12750 enter->op_private |= OPpITER_REVERSED;
12751 iter->op_private |= OPpITER_REVERSED;
12758 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
12759 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
12764 if (!(o->op_private & OPpOFFBYONE) && !CvCLONE(PL_compcv)
12765 && (!CvANON(PL_compcv) || (!PL_cv_has_eval && !PL_perldb)))
12768 if (CvEVAL(PL_compcv)) sv = &PL_sv_undef;
12770 sv = newRV((SV *)PL_compcv);
12774 CHANGE_TYPE(o, OP_CONST);
12775 o->op_flags |= OPf_SPECIAL;
12776 cSVOPo->op_sv = sv;
12781 if (OP_GIMME(o,0) == G_VOID
12782 || ( o->op_next->op_type == OP_LINESEQ
12783 && ( o->op_next->op_next->op_type == OP_LEAVESUB
12784 || ( o->op_next->op_next->op_type == OP_RETURN
12785 && !CvLVALUE(PL_compcv)))))
12787 OP *right = cBINOP->op_first;
12806 OP *left = OP_SIBLING(right);
12807 if (left->op_type == OP_SUBSTR
12808 && (left->op_private & 7) < 4) {
12810 /* cut out right */
12811 op_sibling_splice(o, NULL, 1, NULL);
12812 /* and insert it as second child of OP_SUBSTR */
12813 op_sibling_splice(left, cBINOPx(left)->op_first, 0,
12815 left->op_private |= OPpSUBSTR_REPL_FIRST;
12817 (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
12824 /* We do the common-vars check here, rather than in newASSIGNOP
12825 (as formerly), so that all lexical vars that get aliased are
12826 marked as such before we do the check. */
12827 /* There can’t be common vars if the lhs is a stub. */
12828 if (OP_SIBLING(cLISTOPx(cBINOPo->op_last)->op_first)
12829 == cLISTOPx(cBINOPo->op_last)->op_last
12830 && cLISTOPx(cBINOPo->op_last)->op_last->op_type == OP_STUB)
12832 o->op_private &=~ OPpASSIGN_COMMON;
12835 if (o->op_private & OPpASSIGN_COMMON) {
12836 /* See the comment before S_aassign_common_vars concerning
12837 PL_generation sorcery. */
12839 if (!aassign_common_vars(o))
12840 o->op_private &=~ OPpASSIGN_COMMON;
12842 else if (S_aassign_common_vars_aliases_only(aTHX_ o))
12843 o->op_private |= OPpASSIGN_COMMON;
12847 Perl_cpeep_t cpeep =
12848 XopENTRYCUSTOM(o, xop_peep);
12850 cpeep(aTHX_ o, oldop);
12855 /* did we just null the current op? If so, re-process it to handle
12856 * eliding "empty" ops from the chain */
12857 if (o->op_type == OP_NULL && oldop && oldop->op_next == o) {
12870 Perl_peep(pTHX_ OP *o)
12876 =head1 Custom Operators
12878 =for apidoc Ao||custom_op_xop
12879 Return the XOP structure for a given custom op. This macro should be
12880 considered internal to OP_NAME and the other access macros: use them instead.
12881 This macro does call a function. Prior
12882 to 5.19.6, this was implemented as a
12889 Perl_custom_op_get_field(pTHX_ const OP *o, const xop_flags_enum field)
12895 static const XOP xop_null = { 0, 0, 0, 0, 0 };
12897 PERL_ARGS_ASSERT_CUSTOM_OP_GET_FIELD;
12898 assert(o->op_type == OP_CUSTOM);
12900 /* This is wrong. It assumes a function pointer can be cast to IV,
12901 * which isn't guaranteed, but this is what the old custom OP code
12902 * did. In principle it should be safer to Copy the bytes of the
12903 * pointer into a PV: since the new interface is hidden behind
12904 * functions, this can be changed later if necessary. */
12905 /* Change custom_op_xop if this ever happens */
12906 keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
12909 he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0);
12911 /* assume noone will have just registered a desc */
12912 if (!he && PL_custom_op_names &&
12913 (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0))
12918 /* XXX does all this need to be shared mem? */
12919 Newxz(xop, 1, XOP);
12920 pv = SvPV(HeVAL(he), l);
12921 XopENTRY_set(xop, xop_name, savepvn(pv, l));
12922 if (PL_custom_op_descs &&
12923 (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0))
12925 pv = SvPV(HeVAL(he), l);
12926 XopENTRY_set(xop, xop_desc, savepvn(pv, l));
12928 Perl_custom_op_register(aTHX_ o->op_ppaddr, xop);
12932 xop = (XOP *)&xop_null;
12934 xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
12938 if(field == XOPe_xop_ptr) {
12941 const U32 flags = XopFLAGS(xop);
12942 if(flags & field) {
12944 case XOPe_xop_name:
12945 any.xop_name = xop->xop_name;
12947 case XOPe_xop_desc:
12948 any.xop_desc = xop->xop_desc;
12950 case XOPe_xop_class:
12951 any.xop_class = xop->xop_class;
12953 case XOPe_xop_peep:
12954 any.xop_peep = xop->xop_peep;
12962 case XOPe_xop_name:
12963 any.xop_name = XOPd_xop_name;
12965 case XOPe_xop_desc:
12966 any.xop_desc = XOPd_xop_desc;
12968 case XOPe_xop_class:
12969 any.xop_class = XOPd_xop_class;
12971 case XOPe_xop_peep:
12972 any.xop_peep = XOPd_xop_peep;
12980 /* Some gcc releases emit a warning for this function:
12981 * op.c: In function 'Perl_custom_op_get_field':
12982 * op.c:...: warning: 'any.xop_name' may be used uninitialized in this function [-Wmaybe-uninitialized]
12983 * Whether this is true, is currently unknown. */
12989 =for apidoc Ao||custom_op_register
12990 Register a custom op. See L<perlguts/"Custom Operators">.
12996 Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
13000 PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER;
13002 /* see the comment in custom_op_xop */
13003 keysv = sv_2mortal(newSViv(PTR2IV(ppaddr)));
13005 if (!PL_custom_ops)
13006 PL_custom_ops = newHV();
13008 if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0))
13009 Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name);
13014 =for apidoc core_prototype
13016 This function assigns the prototype of the named core function to C<sv>, or
13017 to a new mortal SV if C<sv> is NULL. It returns the modified C<sv>, or
13018 NULL if the core function has no prototype. C<code> is a code as returned
13019 by C<keyword()>. It must not be equal to 0.
13025 Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code,
13028 int i = 0, n = 0, seen_question = 0, defgv = 0;
13030 #define MAX_ARGS_OP ((sizeof(I32) - 1) * 2)
13031 char str[ MAX_ARGS_OP * 2 + 2 ]; /* One ';', one '\0' */
13032 bool nullret = FALSE;
13034 PERL_ARGS_ASSERT_CORE_PROTOTYPE;
13038 if (!sv) sv = sv_newmortal();
13040 #define retsetpvs(x,y) sv_setpvs(sv, x); if(opnum) *opnum=(y); return sv
13042 switch (code < 0 ? -code : code) {
13043 case KEY_and : case KEY_chop: case KEY_chomp:
13044 case KEY_cmp : case KEY_defined: case KEY_delete: case KEY_exec :
13045 case KEY_exists: case KEY_eq : case KEY_ge : case KEY_goto :
13046 case KEY_grep : case KEY_gt : case KEY_last : case KEY_le :
13047 case KEY_lt : case KEY_map : case KEY_ne : case KEY_next :
13048 case KEY_or : case KEY_print : case KEY_printf: case KEY_qr :
13049 case KEY_redo : case KEY_require: case KEY_return: case KEY_say :
13050 case KEY_select: case KEY_sort : case KEY_split : case KEY_system:
13051 case KEY_x : case KEY_xor :
13052 if (!opnum) return NULL; nullret = TRUE; goto findopnum;
13053 case KEY_glob: retsetpvs("_;", OP_GLOB);
13054 case KEY_keys: retsetpvs("+", OP_KEYS);
13055 case KEY_values: retsetpvs("+", OP_VALUES);
13056 case KEY_each: retsetpvs("+", OP_EACH);
13057 case KEY_push: retsetpvs("+@", OP_PUSH);
13058 case KEY_unshift: retsetpvs("+@", OP_UNSHIFT);
13059 case KEY_pop: retsetpvs(";+", OP_POP);
13060 case KEY_shift: retsetpvs(";+", OP_SHIFT);
13061 case KEY_pos: retsetpvs(";\\[$*]", OP_POS);
13063 retsetpvs("+;$$@", OP_SPLICE);
13064 case KEY___FILE__: case KEY___LINE__: case KEY___PACKAGE__:
13066 case KEY_evalbytes:
13067 name = "entereval"; break;
13075 while (i < MAXO) { /* The slow way. */
13076 if (strEQ(name, PL_op_name[i])
13077 || strEQ(name, PL_op_desc[i]))
13079 if (nullret) { assert(opnum); *opnum = i; return NULL; }
13086 defgv = PL_opargs[i] & OA_DEFGV;
13087 oa = PL_opargs[i] >> OASHIFT;
13089 if (oa & OA_OPTIONAL && !seen_question && (
13090 !defgv || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF
13095 if ((oa & (OA_OPTIONAL - 1)) >= OA_AVREF
13096 && (oa & (OA_OPTIONAL - 1)) <= OA_SCALARREF
13097 /* But globs are already references (kinda) */
13098 && (oa & (OA_OPTIONAL - 1)) != OA_FILEREF
13102 if ((oa & (OA_OPTIONAL - 1)) == OA_SCALARREF
13103 && !scalar_mod_type(NULL, i)) {
13108 if (i == OP_LOCK || i == OP_UNDEF) str[n++] = '&';
13112 else str[n++] = ("?$@@%&*$")[oa & (OA_OPTIONAL - 1)];
13113 if (oa & OA_OPTIONAL && defgv && str[n-1] == '$') {
13114 str[n-1] = '_'; defgv = 0;
13118 if (code == -KEY_not || code == -KEY_getprotobynumber) str[n++] = ';';
13120 sv_setpvn(sv, str, n - 1);
13121 if (opnum) *opnum = i;
13126 Perl_coresub_op(pTHX_ SV * const coreargssv, const int code,
13129 OP * const argop = newSVOP(OP_COREARGS,0,coreargssv);
13132 PERL_ARGS_ASSERT_CORESUB_OP;
13136 return op_append_elem(OP_LINESEQ,
13139 newSVOP(OP_CONST, 0, newSViv(-code % 3)),
13143 case OP_SELECT: /* which represents OP_SSELECT as well */
13148 newAVREF(newGVOP(OP_GV, 0, PL_defgv)),
13149 newSVOP(OP_CONST, 0, newSVuv(1))
13151 coresub_op(newSVuv((UV)OP_SSELECT), 0,
13153 coresub_op(coreargssv, 0, OP_SELECT)
13157 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
13159 return op_append_elem(
13162 opnum == OP_WANTARRAY || opnum == OP_RUNCV
13163 ? OPpOFFBYONE << 8 : 0)
13165 case OA_BASEOP_OR_UNOP:
13166 if (opnum == OP_ENTEREVAL) {
13167 o = newUNOP(OP_ENTEREVAL,OPpEVAL_COPHH<<8,argop);
13168 if (code == -KEY_evalbytes) o->op_private |= OPpEVAL_BYTES;
13170 else o = newUNOP(opnum,0,argop);
13171 if (opnum == OP_CALLER) o->op_private |= OPpOFFBYONE;
13174 if (is_handle_constructor(o, 1))
13175 argop->op_private |= OPpCOREARGS_DEREF1;
13176 if (scalar_mod_type(NULL, opnum))
13177 argop->op_private |= OPpCOREARGS_SCALARMOD;
13181 o = op_convert_list(opnum,OPf_SPECIAL*(opnum == OP_GLOB),argop);
13182 if (is_handle_constructor(o, 2))
13183 argop->op_private |= OPpCOREARGS_DEREF2;
13184 if (opnum == OP_SUBSTR) {
13185 o->op_private |= OPpMAYBE_LVSUB;
13194 Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv,
13195 SV * const *new_const_svp)
13197 const char *hvname;
13198 bool is_const = !!CvCONST(old_cv);
13199 SV *old_const_sv = is_const ? cv_const_sv(old_cv) : NULL;
13201 PERL_ARGS_ASSERT_REPORT_REDEFINED_CV;
13203 if (is_const && new_const_svp && old_const_sv == *new_const_svp)
13205 /* They are 2 constant subroutines generated from
13206 the same constant. This probably means that
13207 they are really the "same" proxy subroutine
13208 instantiated in 2 places. Most likely this is
13209 when a constant is exported twice. Don't warn.
13212 (ckWARN(WARN_REDEFINE)
13214 CvGV(old_cv) && GvSTASH(CvGV(old_cv))
13215 && HvNAMELEN(GvSTASH(CvGV(old_cv))) == 7
13216 && (hvname = HvNAME(GvSTASH(CvGV(old_cv))),
13217 strEQ(hvname, "autouse"))
13221 && ckWARN_d(WARN_REDEFINE)
13222 && (!new_const_svp || sv_cmp(old_const_sv, *new_const_svp))
13225 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
13227 ? "Constant subroutine %"SVf" redefined"
13228 : "Subroutine %"SVf" redefined",
13233 =head1 Hook manipulation
13235 These functions provide convenient and thread-safe means of manipulating
13242 =for apidoc Am|void|wrap_op_checker|Optype opcode|Perl_check_t new_checker|Perl_check_t *old_checker_p
13244 Puts a C function into the chain of check functions for a specified op
13245 type. This is the preferred way to manipulate the L</PL_check> array.
13246 I<opcode> specifies which type of op is to be affected. I<new_checker>
13247 is a pointer to the C function that is to be added to that opcode's
13248 check chain, and I<old_checker_p> points to the storage location where a
13249 pointer to the next function in the chain will be stored. The value of
13250 I<new_pointer> is written into the L</PL_check> array, while the value
13251 previously stored there is written to I<*old_checker_p>.
13253 The function should be defined like this:
13255 static OP *new_checker(pTHX_ OP *op) { ... }
13257 It is intended to be called in this manner:
13259 new_checker(aTHX_ op)
13261 I<old_checker_p> should be defined like this:
13263 static Perl_check_t old_checker_p;
13265 L</PL_check> is global to an entire process, and a module wishing to
13266 hook op checking may find itself invoked more than once per process,
13267 typically in different threads. To handle that situation, this function
13268 is idempotent. The location I<*old_checker_p> must initially (once
13269 per process) contain a null pointer. A C variable of static duration
13270 (declared at file scope, typically also marked C<static> to give
13271 it internal linkage) will be implicitly initialised appropriately,
13272 if it does not have an explicit initialiser. This function will only
13273 actually modify the check chain if it finds I<*old_checker_p> to be null.
13274 This function is also thread safe on the small scale. It uses appropriate
13275 locking to avoid race conditions in accessing L</PL_check>.
13277 When this function is called, the function referenced by I<new_checker>
13278 must be ready to be called, except for I<*old_checker_p> being unfilled.
13279 In a threading situation, I<new_checker> may be called immediately,
13280 even before this function has returned. I<*old_checker_p> will always
13281 be appropriately set before I<new_checker> is called. If I<new_checker>
13282 decides not to do anything special with an op that it is given (which
13283 is the usual case for most uses of op check hooking), it must chain the
13284 check function referenced by I<*old_checker_p>.
13286 If you want to influence compilation of calls to a specific subroutine,
13287 then use L</cv_set_call_checker> rather than hooking checking of all
13294 Perl_wrap_op_checker(pTHX_ Optype opcode,
13295 Perl_check_t new_checker, Perl_check_t *old_checker_p)
13299 PERL_UNUSED_CONTEXT;
13300 PERL_ARGS_ASSERT_WRAP_OP_CHECKER;
13301 if (*old_checker_p) return;
13302 OP_CHECK_MUTEX_LOCK;
13303 if (!*old_checker_p) {
13304 *old_checker_p = PL_check[opcode];
13305 PL_check[opcode] = new_checker;
13307 OP_CHECK_MUTEX_UNLOCK;
13312 /* Efficient sub that returns a constant scalar value. */
13314 const_sv_xsub(pTHX_ CV* cv)
13317 SV *const sv = MUTABLE_SV(XSANY.any_ptr);
13318 PERL_UNUSED_ARG(items);
13328 const_av_xsub(pTHX_ CV* cv)
13331 AV * const av = MUTABLE_AV(XSANY.any_ptr);
13339 if (SvRMAGICAL(av))
13340 Perl_croak(aTHX_ "Magical list constants are not supported");
13341 if (GIMME_V != G_ARRAY) {
13343 ST(0) = sv_2mortal(newSViv((IV)AvFILLp(av)+1));
13346 EXTEND(SP, AvFILLp(av)+1);
13347 Copy(AvARRAY(av), &ST(0), AvFILLp(av)+1, SV *);
13348 XSRETURN(AvFILLp(av)+1);
13353 * c-indentation-style: bsd
13354 * c-basic-offset: 4
13355 * indent-tabs-mode: nil
13358 * ex: set ts=8 sts=4 sw=4 et: