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 /* remove any leading "empty" ops from the op_next chain whose first
113 * node's address is stored in op_p. Store the updated address of the
114 * first node in op_p.
118 S_prune_chain_head(OP** op_p)
121 && ( (*op_p)->op_type == OP_NULL
122 || (*op_p)->op_type == OP_SCOPE
123 || (*op_p)->op_type == OP_SCALAR
124 || (*op_p)->op_type == OP_LINESEQ)
126 *op_p = (*op_p)->op_next;
130 /* See the explanatory comments above struct opslab in op.h. */
132 #ifdef PERL_DEBUG_READONLY_OPS
133 # define PERL_SLAB_SIZE 128
134 # define PERL_MAX_SLAB_SIZE 4096
135 # include <sys/mman.h>
138 #ifndef PERL_SLAB_SIZE
139 # define PERL_SLAB_SIZE 64
141 #ifndef PERL_MAX_SLAB_SIZE
142 # define PERL_MAX_SLAB_SIZE 2048
145 /* rounds up to nearest pointer */
146 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
147 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
150 S_new_slab(pTHX_ size_t sz)
152 #ifdef PERL_DEBUG_READONLY_OPS
153 OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
154 PROT_READ|PROT_WRITE,
155 MAP_ANON|MAP_PRIVATE, -1, 0);
156 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
157 (unsigned long) sz, slab));
158 if (slab == MAP_FAILED) {
159 perror("mmap failed");
162 slab->opslab_size = (U16)sz;
164 OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
167 /* The context is unused in non-Windows */
170 slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
174 /* requires double parens and aTHX_ */
175 #define DEBUG_S_warn(args) \
177 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
181 Perl_Slab_Alloc(pTHX_ size_t sz)
189 /* We only allocate ops from the slab during subroutine compilation.
190 We find the slab via PL_compcv, hence that must be non-NULL. It could
191 also be pointing to a subroutine which is now fully set up (CvROOT()
192 pointing to the top of the optree for that sub), or a subroutine
193 which isn't using the slab allocator. If our sanity checks aren't met,
194 don't use a slab, but allocate the OP directly from the heap. */
195 if (!PL_compcv || CvROOT(PL_compcv)
196 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
198 o = (OP*)PerlMemShared_calloc(1, sz);
202 /* While the subroutine is under construction, the slabs are accessed via
203 CvSTART(), to avoid needing to expand PVCV by one pointer for something
204 unneeded at runtime. Once a subroutine is constructed, the slabs are
205 accessed via CvROOT(). So if CvSTART() is NULL, no slab has been
206 allocated yet. See the commit message for 8be227ab5eaa23f2 for more
208 if (!CvSTART(PL_compcv)) {
210 (OP *)(slab = S_new_slab(aTHX_ PERL_SLAB_SIZE));
211 CvSLABBED_on(PL_compcv);
212 slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
214 else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
216 opsz = SIZE_TO_PSIZE(sz);
217 sz = opsz + OPSLOT_HEADER_P;
219 /* The slabs maintain a free list of OPs. In particular, constant folding
220 will free up OPs, so it makes sense to re-use them where possible. A
221 freed up slot is used in preference to a new allocation. */
222 if (slab->opslab_freed) {
223 OP **too = &slab->opslab_freed;
225 DEBUG_S_warn((aTHX_ "found free op at %p, slab %p", (void*)o, (void*)slab));
226 while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
227 DEBUG_S_warn((aTHX_ "Alas! too small"));
228 o = *(too = &o->op_next);
229 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
233 Zero(o, opsz, I32 *);
239 #define INIT_OPSLOT \
240 slot->opslot_slab = slab; \
241 slot->opslot_next = slab2->opslab_first; \
242 slab2->opslab_first = slot; \
243 o = &slot->opslot_op; \
246 /* The partially-filled slab is next in the chain. */
247 slab2 = slab->opslab_next ? slab->opslab_next : slab;
248 if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) {
249 /* Remaining space is too small. */
251 /* If we can fit a BASEOP, add it to the free chain, so as not
253 if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
254 slot = &slab2->opslab_slots;
256 o->op_type = OP_FREED;
257 o->op_next = slab->opslab_freed;
258 slab->opslab_freed = o;
261 /* Create a new slab. Make this one twice as big. */
262 slot = slab2->opslab_first;
263 while (slot->opslot_next) slot = slot->opslot_next;
264 slab2 = S_new_slab(aTHX_
265 (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE
267 : (DIFF(slab2, slot)+1)*2);
268 slab2->opslab_next = slab->opslab_next;
269 slab->opslab_next = slab2;
271 assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
273 /* Create a new op slot */
274 slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz);
275 assert(slot >= &slab2->opslab_slots);
276 if (DIFF(&slab2->opslab_slots, slot)
277 < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
278 slot = &slab2->opslab_slots;
280 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", (void*)o, (void*)slab));
283 /* lastsib == 1, op_sibling == 0 implies a solitary unattached op */
285 assert(!o->op_sibling);
292 #ifdef PERL_DEBUG_READONLY_OPS
294 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
296 PERL_ARGS_ASSERT_SLAB_TO_RO;
298 if (slab->opslab_readonly) return;
299 slab->opslab_readonly = 1;
300 for (; slab; slab = slab->opslab_next) {
301 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
302 (unsigned long) slab->opslab_size, slab));*/
303 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
304 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
305 (unsigned long)slab->opslab_size, errno);
310 Perl_Slab_to_rw(pTHX_ OPSLAB *const slab)
314 PERL_ARGS_ASSERT_SLAB_TO_RW;
316 if (!slab->opslab_readonly) return;
318 for (; slab2; slab2 = slab2->opslab_next) {
319 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
320 (unsigned long) size, slab2));*/
321 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
322 PROT_READ|PROT_WRITE)) {
323 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
324 (unsigned long)slab2->opslab_size, errno);
327 slab->opslab_readonly = 0;
331 # define Slab_to_rw(op) NOOP
334 /* This cannot possibly be right, but it was copied from the old slab
335 allocator, to which it was originally added, without explanation, in
338 # define PerlMemShared PerlMem
342 Perl_Slab_Free(pTHX_ void *op)
344 OP * const o = (OP *)op;
347 PERL_ARGS_ASSERT_SLAB_FREE;
349 if (!o->op_slabbed) {
351 PerlMemShared_free(op);
356 /* If this op is already freed, our refcount will get screwy. */
357 assert(o->op_type != OP_FREED);
358 o->op_type = OP_FREED;
359 o->op_next = slab->opslab_freed;
360 slab->opslab_freed = o;
361 DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
362 OpslabREFCNT_dec_padok(slab);
366 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
368 const bool havepad = !!PL_comppad;
369 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
372 PAD_SAVE_SETNULLPAD();
379 Perl_opslab_free(pTHX_ OPSLAB *slab)
382 PERL_ARGS_ASSERT_OPSLAB_FREE;
384 DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
385 assert(slab->opslab_refcnt == 1);
386 for (; slab; slab = slab2) {
387 slab2 = slab->opslab_next;
389 slab->opslab_refcnt = ~(size_t)0;
391 #ifdef PERL_DEBUG_READONLY_OPS
392 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
394 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
395 perror("munmap failed");
399 PerlMemShared_free(slab);
405 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
410 size_t savestack_count = 0;
412 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
415 for (slot = slab2->opslab_first;
417 slot = slot->opslot_next) {
418 if (slot->opslot_op.op_type != OP_FREED
419 && !(slot->opslot_op.op_savefree
425 assert(slot->opslot_op.op_slabbed);
426 op_free(&slot->opslot_op);
427 if (slab->opslab_refcnt == 1) goto free;
430 } while ((slab2 = slab2->opslab_next));
431 /* > 1 because the CV still holds a reference count. */
432 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
434 assert(savestack_count == slab->opslab_refcnt-1);
436 /* Remove the CV’s reference count. */
437 slab->opslab_refcnt--;
444 #ifdef PERL_DEBUG_READONLY_OPS
446 Perl_op_refcnt_inc(pTHX_ OP *o)
449 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
450 if (slab && slab->opslab_readonly) {
463 Perl_op_refcnt_dec(pTHX_ OP *o)
466 OPSLAB *const slab = o->op_slabbed ? OpSLAB(o) : NULL;
468 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
470 if (slab && slab->opslab_readonly) {
472 result = --o->op_targ;
475 result = --o->op_targ;
481 * In the following definition, the ", (OP*)0" is just to make the compiler
482 * think the expression is of the right type: croak actually does a Siglongjmp.
484 #define CHECKOP(type,o) \
485 ((PL_op_mask && PL_op_mask[type]) \
486 ? ( op_free((OP*)o), \
487 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
489 : PL_check[type](aTHX_ (OP*)o))
491 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
493 #define CHANGE_TYPE(o,type) \
495 o->op_type = (OPCODE)type; \
496 o->op_ppaddr = PL_ppaddr[type]; \
500 S_gv_ename(pTHX_ GV *gv)
502 SV* const tmpsv = sv_newmortal();
504 PERL_ARGS_ASSERT_GV_ENAME;
506 gv_efullname3(tmpsv, gv, NULL);
511 S_no_fh_allowed(pTHX_ OP *o)
513 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
515 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
521 S_too_few_arguments_sv(pTHX_ OP *o, SV *namesv, U32 flags)
523 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_SV;
524 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %"SVf, SVfARG(namesv)),
525 SvUTF8(namesv) | flags);
530 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
532 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
533 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
538 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
540 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
542 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
547 S_too_many_arguments_sv(pTHX_ OP *o, SV *namesv, U32 flags)
549 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_SV;
551 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %"SVf, SVfARG(namesv)),
552 SvUTF8(namesv) | flags);
557 S_bad_type_pv(pTHX_ I32 n, const char *t, const char *name, U32 flags, const OP *kid)
559 PERL_ARGS_ASSERT_BAD_TYPE_PV;
561 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
562 (int)n, name, t, OP_DESC(kid)), flags);
566 S_bad_type_gv(pTHX_ I32 n, const char *t, GV *gv, U32 flags, const OP *kid)
568 SV * const namesv = gv_ename(gv);
569 PERL_ARGS_ASSERT_BAD_TYPE_GV;
571 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %"SVf" must be %s (not %s)",
572 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv) | flags);
576 S_no_bareword_allowed(pTHX_ OP *o)
578 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
580 qerror(Perl_mess(aTHX_
581 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
583 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
586 /* "register" allocation */
589 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
592 const bool is_our = (PL_parser->in_my == KEY_our);
594 PERL_ARGS_ASSERT_ALLOCMY;
596 if (flags & ~SVf_UTF8)
597 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
600 /* Until we're using the length for real, cross check that we're being
602 assert(strlen(name) == len);
604 /* complain about "my $<special_var>" etc etc */
608 ((flags & SVf_UTF8) && isIDFIRST_utf8((U8 *)name+1)) ||
609 (name[1] == '_' && (*name == '$' || len > 2))))
611 /* name[2] is true if strlen(name) > 2 */
612 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
613 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
614 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
615 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
616 PL_parser->in_my == KEY_state ? "state" : "my"));
618 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
619 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
622 else if (len == 2 && name[1] == '_' && !is_our)
623 /* diag_listed_as: Use of my $_ is experimental */
624 Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__LEXICAL_TOPIC),
625 "Use of %s $_ is experimental",
626 PL_parser->in_my == KEY_state
630 /* allocate a spare slot and store the name in that slot */
632 off = pad_add_name_pvn(name, len,
633 (is_our ? padadd_OUR :
634 PL_parser->in_my == KEY_state ? padadd_STATE : 0)
635 | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ),
636 PL_parser->in_my_stash,
638 /* $_ is always in main::, even with our */
639 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
643 /* anon sub prototypes contains state vars should always be cloned,
644 * otherwise the state var would be shared between anon subs */
646 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
647 CvCLONE_on(PL_compcv);
653 =head1 Optree Manipulation Functions
655 =for apidoc alloccopstash
657 Available only under threaded builds, this function allocates an entry in
658 C<PL_stashpad> for the stash passed to it.
665 Perl_alloccopstash(pTHX_ HV *hv)
667 PADOFFSET off = 0, o = 1;
668 bool found_slot = FALSE;
670 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
672 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
674 for (; o < PL_stashpadmax; ++o) {
675 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
676 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
677 found_slot = TRUE, off = o;
680 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
681 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
682 off = PL_stashpadmax;
683 PL_stashpadmax += 10;
686 PL_stashpad[PL_stashpadix = off] = hv;
691 /* free the body of an op without examining its contents.
692 * Always use this rather than FreeOp directly */
695 S_op_destroy(pTHX_ OP *o)
703 =for apidoc Am|void|op_free|OP *o
705 Free an op. Only use this when an op is no longer linked to from any
712 Perl_op_free(pTHX_ OP *o)
719 /* Though ops may be freed twice, freeing the op after its slab is a
721 assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
722 /* During the forced freeing of ops after compilation failure, kidops
723 may be freed before their parents. */
724 if (!o || o->op_type == OP_FREED)
728 if (o->op_private & OPpREFCOUNTED) {
739 refcnt = OpREFCNT_dec(o);
742 /* Need to find and remove any pattern match ops from the list
743 we maintain for reset(). */
744 find_and_forget_pmops(o);
754 /* Call the op_free hook if it has been set. Do it now so that it's called
755 * at the right time for refcounted ops, but still before all of the kids
759 if (o->op_flags & OPf_KIDS) {
761 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
762 nextkid = OP_SIBLING(kid); /* Get before next freeing kid */
767 type = (OPCODE)o->op_targ;
770 Slab_to_rw(OpSLAB(o));
772 /* COP* is not cleared by op_clear() so that we may track line
773 * numbers etc even after null() */
774 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
780 #ifdef DEBUG_LEAKING_SCALARS
787 Perl_op_clear(pTHX_ OP *o)
792 PERL_ARGS_ASSERT_OP_CLEAR;
794 switch (o->op_type) {
795 case OP_NULL: /* Was holding old type, if any. */
798 case OP_ENTEREVAL: /* Was holding hints. */
802 if (!(o->op_flags & OPf_REF)
803 || (PL_check[o->op_type] != Perl_ck_ftst))
810 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
815 /* It's possible during global destruction that the GV is freed
816 before the optree. Whilst the SvREFCNT_inc is happy to bump from
817 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
818 will trigger an assertion failure, because the entry to sv_clear
819 checks that the scalar is not already freed. A check of for
820 !SvIS_FREED(gv) turns out to be invalid, because during global
821 destruction the reference count can be forced down to zero
822 (with SVf_BREAK set). In which case raising to 1 and then
823 dropping to 0 triggers cleanup before it should happen. I
824 *think* that this might actually be a general, systematic,
825 weakness of the whole idea of SVf_BREAK, in that code *is*
826 allowed to raise and lower references during global destruction,
827 so any *valid* code that happens to do this during global
828 destruction might well trigger premature cleanup. */
829 bool still_valid = gv && SvREFCNT(gv);
832 SvREFCNT_inc_simple_void(gv);
834 if (cPADOPo->op_padix > 0) {
835 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
836 * may still exist on the pad */
837 pad_swipe(cPADOPo->op_padix, TRUE);
838 cPADOPo->op_padix = 0;
841 SvREFCNT_dec(cSVOPo->op_sv);
842 cSVOPo->op_sv = NULL;
845 int try_downgrade = SvREFCNT(gv) == 2;
848 gv_try_downgrade(gv);
852 case OP_METHOD_NAMED:
855 SvREFCNT_dec(cSVOPo->op_sv);
856 cSVOPo->op_sv = NULL;
859 Even if op_clear does a pad_free for the target of the op,
860 pad_free doesn't actually remove the sv that exists in the pad;
861 instead it lives on. This results in that it could be reused as
862 a target later on when the pad was reallocated.
865 pad_swipe(o->op_targ,1);
875 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
880 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
881 assert(o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
883 if (cPADOPo->op_padix > 0) {
884 pad_swipe(cPADOPo->op_padix, TRUE);
885 cPADOPo->op_padix = 0;
888 SvREFCNT_dec(cSVOPo->op_sv);
889 cSVOPo->op_sv = NULL;
893 PerlMemShared_free(cPVOPo->op_pv);
894 cPVOPo->op_pv = NULL;
898 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
902 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
903 /* No GvIN_PAD_off here, because other references may still
904 * exist on the pad */
905 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
908 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
914 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
915 op_free(cPMOPo->op_code_list);
916 cPMOPo->op_code_list = NULL;
918 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
919 /* we use the same protection as the "SAFE" version of the PM_ macros
920 * here since sv_clean_all might release some PMOPs
921 * after PL_regex_padav has been cleared
922 * and the clearing of PL_regex_padav needs to
923 * happen before sv_clean_all
926 if(PL_regex_pad) { /* We could be in destruction */
927 const IV offset = (cPMOPo)->op_pmoffset;
928 ReREFCNT_dec(PM_GETRE(cPMOPo));
929 PL_regex_pad[offset] = &PL_sv_undef;
930 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
934 ReREFCNT_dec(PM_GETRE(cPMOPo));
935 PM_SETRE(cPMOPo, NULL);
941 if (o->op_targ > 0) {
942 pad_free(o->op_targ);
948 S_cop_free(pTHX_ COP* cop)
950 PERL_ARGS_ASSERT_COP_FREE;
953 if (! specialWARN(cop->cop_warnings))
954 PerlMemShared_free(cop->cop_warnings);
955 cophh_free(CopHINTHASH_get(cop));
956 if (PL_curcop == cop)
961 S_forget_pmop(pTHX_ PMOP *const o
964 HV * const pmstash = PmopSTASH(o);
966 PERL_ARGS_ASSERT_FORGET_PMOP;
968 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
969 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
971 PMOP **const array = (PMOP**) mg->mg_ptr;
972 U32 count = mg->mg_len / sizeof(PMOP**);
977 /* Found it. Move the entry at the end to overwrite it. */
978 array[i] = array[--count];
979 mg->mg_len = count * sizeof(PMOP**);
980 /* Could realloc smaller at this point always, but probably
981 not worth it. Probably worth free()ing if we're the
984 Safefree(mg->mg_ptr);
997 S_find_and_forget_pmops(pTHX_ OP *o)
999 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
1001 if (o->op_flags & OPf_KIDS) {
1002 OP *kid = cUNOPo->op_first;
1004 switch (kid->op_type) {
1009 forget_pmop((PMOP*)kid);
1011 find_and_forget_pmops(kid);
1012 kid = OP_SIBLING(kid);
1018 =for apidoc Am|void|op_null|OP *o
1020 Neutralizes an op when it is no longer needed, but is still linked to from
1027 Perl_op_null(pTHX_ OP *o)
1031 PERL_ARGS_ASSERT_OP_NULL;
1033 if (o->op_type == OP_NULL)
1036 o->op_targ = o->op_type;
1037 o->op_type = OP_NULL;
1038 o->op_ppaddr = PL_ppaddr[OP_NULL];
1042 Perl_op_refcnt_lock(pTHX)
1047 PERL_UNUSED_CONTEXT;
1052 Perl_op_refcnt_unlock(pTHX)
1057 PERL_UNUSED_CONTEXT;
1063 =for apidoc op_sibling_splice
1065 A general function for editing the structure of an existing chain of
1066 op_sibling nodes. By analogy with the perl-level splice() function, allows
1067 you to delete zero or more sequential nodes, replacing them with zero or
1068 more different nodes. Performs the necessary op_first/op_last
1069 housekeeping on the parent node and op_sibling manipulation on the
1070 children. The op_sibling field of the last deleted node will be set to
1073 Note that op_next is not manipulated, and nodes are not freed; that is the
1074 responsibility of the caller. It also won't create new a list op for an empty
1075 list etc; use higher-level functions like op_append_elem() for that.
1077 parent is the parent node of the sibling chain.
1079 start is the node preceding the first node to be spliced. Node(s)
1080 following it will be deleted, and ops will be inserted after it. If it is
1081 NULL, the first node onwards is deleted, and nodes are inserted at the
1084 del_count is the number of nodes to delete. If zero, no nodes are deleted.
1085 If -1 or greater than or equal to the number of remaining kids, all
1086 remaining kids are deleted.
1088 insert is the first of a chain of nodes to be inserted in place of the nodes.
1089 If NULL, no nodes are inserted.
1091 The head of the chain of deleted op is returned, or NULL uif no ops were
1096 action before after returns
1097 ------ ----- ----- -------
1100 splice(P, A, 2, X-Y) | | B-C
1104 splice(P, NULL, 1, X-Y) | | A
1108 splice(P, NULL, 1, NULL) | | A
1112 splice(P, B, 0, X-Y) | | NULL
1119 Perl_op_sibling_splice(pTHX_ OP *parent, OP *start, int del_count, OP* insert)
1122 OP *first = start ? OP_SIBLING(start) : cLISTOPx(parent)->op_first;
1124 OP *last_del = NULL;
1125 OP *last_ins = NULL;
1127 PERL_ARGS_ASSERT_OP_SIBLING_SPLICE;
1129 assert(del_count >= -1);
1131 if (del_count && first) {
1133 while (--del_count && OP_HAS_SIBLING(last_del))
1134 last_del = OP_SIBLING(last_del);
1135 rest = OP_SIBLING(last_del);
1136 OP_SIBLING_set(last_del, NULL);
1137 last_del->op_lastsib = 1;
1144 while (OP_HAS_SIBLING(last_ins))
1145 last_ins = OP_SIBLING(last_ins);
1146 OP_SIBLING_set(last_ins, rest);
1147 last_ins->op_lastsib = rest ? 0 : 1;
1153 OP_SIBLING_set(start, insert);
1154 start->op_lastsib = insert ? 0 : 1;
1157 cLISTOPx(parent)->op_first = insert;
1160 /* update op_last etc */
1161 U32 type = parent->op_type;
1164 if (type == OP_NULL)
1165 type = parent->op_targ;
1166 type = PL_opargs[type] & OA_CLASS_MASK;
1168 lastop = last_ins ? last_ins : start ? start : NULL;
1169 if ( type == OA_BINOP
1170 || type == OA_LISTOP
1174 cLISTOPx(parent)->op_last = lastop;
1177 lastop->op_lastsib = 1;
1178 #ifdef PERL_OP_PARENT
1179 lastop->op_sibling = parent;
1183 return last_del ? first : NULL;
1187 =for apidoc op_parent
1189 returns the parent OP of o, if it has a parent. Returns NULL otherwise.
1190 (Currently perl must be built with C<-DPERL_OP_PARENT> for this feature to
1197 Perl_op_parent(pTHX_ OP *o)
1199 PERL_ARGS_ASSERT_OP_PARENT;
1200 #ifdef PERL_OP_PARENT
1201 while (OP_HAS_SIBLING(o))
1203 return o->op_sibling;
1211 /* replace the sibling following start with a new UNOP, which becomes
1212 * the parent of the original sibling; e.g.
1214 * op_sibling_newUNOP(P, A, unop-args...)
1222 * where U is the new UNOP.
1224 * parent and start args are the same as for op_sibling_splice();
1225 * type and flags args are as newUNOP().
1227 * Returns the new UNOP.
1231 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1235 kid = op_sibling_splice(parent, start, 1, NULL);
1236 newop = newUNOP(type, flags, kid);
1237 op_sibling_splice(parent, start, 0, newop);
1242 /* lowest-level newLOGOP-style function - just allocates and populates
1243 * the struct. Higher-level stuff should be done by S_new_logop() /
1244 * newLOGOP(). This function exists mainly to avoid op_first assignment
1245 * being spread throughout this file.
1249 S_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1253 NewOp(1101, logop, 1, LOGOP);
1254 logop->op_type = type;
1255 logop->op_first = first;
1256 logop->op_other = other;
1257 logop->op_flags = OPf_KIDS;
1258 while (kid && OP_HAS_SIBLING(kid))
1259 kid = OP_SIBLING(kid);
1261 kid->op_lastsib = 1;
1262 #ifdef PERL_OP_PARENT
1263 kid->op_sibling = (OP*)logop;
1270 /* Contextualizers */
1273 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1275 Applies a syntactic context to an op tree representing an expression.
1276 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
1277 or C<G_VOID> to specify the context to apply. The modified op tree
1284 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1286 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1288 case G_SCALAR: return scalar(o);
1289 case G_ARRAY: return list(o);
1290 case G_VOID: return scalarvoid(o);
1292 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1299 =for apidoc Am|OP*|op_linklist|OP *o
1300 This function is the implementation of the L</LINKLIST> macro. It should
1301 not be called directly.
1307 Perl_op_linklist(pTHX_ OP *o)
1311 PERL_ARGS_ASSERT_OP_LINKLIST;
1316 /* establish postfix order */
1317 first = cUNOPo->op_first;
1320 o->op_next = LINKLIST(first);
1323 OP *sibl = OP_SIBLING(kid);
1325 kid->op_next = LINKLIST(sibl);
1340 S_scalarkids(pTHX_ OP *o)
1342 if (o && o->op_flags & OPf_KIDS) {
1344 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1351 S_scalarboolean(pTHX_ OP *o)
1353 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1355 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
1356 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
1357 if (ckWARN(WARN_SYNTAX)) {
1358 const line_t oldline = CopLINE(PL_curcop);
1360 if (PL_parser && PL_parser->copline != NOLINE) {
1361 /* This ensures that warnings are reported at the first line
1362 of the conditional, not the last. */
1363 CopLINE_set(PL_curcop, PL_parser->copline);
1365 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1366 CopLINE_set(PL_curcop, oldline);
1373 S_op_varname(pTHX_ const OP *o)
1376 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1377 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1379 const char funny = o->op_type == OP_PADAV
1380 || o->op_type == OP_RV2AV ? '@' : '%';
1381 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1383 if (cUNOPo->op_first->op_type != OP_GV
1384 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1386 return varname(gv, funny, 0, NULL, 0, 1);
1389 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, 1);
1394 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1395 { /* or not so pretty :-) */
1396 if (o->op_type == OP_CONST) {
1398 if (SvPOK(*retsv)) {
1400 *retsv = sv_newmortal();
1401 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1402 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1404 else if (!SvOK(*retsv))
1407 else *retpv = "...";
1411 S_scalar_slice_warning(pTHX_ const OP *o)
1415 o->op_type == OP_HSLICE ? '{' : '[';
1417 o->op_type == OP_HSLICE ? '}' : ']';
1419 SV *keysv = NULL; /* just to silence compiler warnings */
1420 const char *key = NULL;
1422 if (!(o->op_private & OPpSLICEWARNING))
1424 if (PL_parser && PL_parser->error_count)
1425 /* This warning can be nonsensical when there is a syntax error. */
1428 kid = cLISTOPo->op_first;
1429 kid = OP_SIBLING(kid); /* get past pushmark */
1430 /* weed out false positives: any ops that can return lists */
1431 switch (kid->op_type) {
1460 /* Don't warn if we have a nulled list either. */
1461 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1464 assert(OP_SIBLING(kid));
1465 name = S_op_varname(aTHX_ OP_SIBLING(kid));
1466 if (!name) /* XS module fiddling with the op tree */
1468 S_op_pretty(aTHX_ kid, &keysv, &key);
1469 assert(SvPOK(name));
1470 sv_chop(name,SvPVX(name)+1);
1472 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1473 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1474 "Scalar value @%"SVf"%c%s%c better written as $%"SVf
1476 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1477 lbrack, key, rbrack);
1479 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1480 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1481 "Scalar value @%"SVf"%c%"SVf"%c better written as $%"
1483 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1484 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1488 Perl_scalar(pTHX_ OP *o)
1492 /* assumes no premature commitment */
1493 if (!o || (PL_parser && PL_parser->error_count)
1494 || (o->op_flags & OPf_WANT)
1495 || o->op_type == OP_RETURN)
1500 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1502 switch (o->op_type) {
1504 scalar(cBINOPo->op_first);
1509 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1519 if (o->op_flags & OPf_KIDS) {
1520 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid))
1526 kid = cLISTOPo->op_first;
1528 kid = OP_SIBLING(kid);
1531 OP *sib = OP_SIBLING(kid);
1532 if (sib && kid->op_type != OP_LEAVEWHEN)
1538 PL_curcop = &PL_compiling;
1543 kid = cLISTOPo->op_first;
1546 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1551 /* Warn about scalar context */
1552 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1553 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1556 const char *key = NULL;
1558 /* This warning can be nonsensical when there is a syntax error. */
1559 if (PL_parser && PL_parser->error_count)
1562 if (!ckWARN(WARN_SYNTAX)) break;
1564 kid = cLISTOPo->op_first;
1565 kid = OP_SIBLING(kid); /* get past pushmark */
1566 assert(OP_SIBLING(kid));
1567 name = S_op_varname(aTHX_ OP_SIBLING(kid));
1568 if (!name) /* XS module fiddling with the op tree */
1570 S_op_pretty(aTHX_ kid, &keysv, &key);
1571 assert(SvPOK(name));
1572 sv_chop(name,SvPVX(name)+1);
1574 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1575 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1576 "%%%"SVf"%c%s%c in scalar context better written "
1578 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1579 lbrack, key, rbrack);
1581 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1582 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1583 "%%%"SVf"%c%"SVf"%c in scalar context better "
1584 "written as $%"SVf"%c%"SVf"%c",
1585 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1586 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1593 Perl_scalarvoid(pTHX_ OP *o)
1597 SV *useless_sv = NULL;
1598 const char* useless = NULL;
1602 PERL_ARGS_ASSERT_SCALARVOID;
1604 if (o->op_type == OP_NEXTSTATE
1605 || o->op_type == OP_DBSTATE
1606 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1607 || o->op_targ == OP_DBSTATE)))
1608 PL_curcop = (COP*)o; /* for warning below */
1610 /* assumes no premature commitment */
1611 want = o->op_flags & OPf_WANT;
1612 if ((want && want != OPf_WANT_SCALAR)
1613 || (PL_parser && PL_parser->error_count)
1614 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1619 if ((o->op_private & OPpTARGET_MY)
1620 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1622 return scalar(o); /* As if inside SASSIGN */
1625 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1627 switch (o->op_type) {
1629 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1633 if (o->op_flags & OPf_STACKED)
1637 if (o->op_private == 4)
1662 case OP_AELEMFAST_LEX:
1683 case OP_GETSOCKNAME:
1684 case OP_GETPEERNAME:
1689 case OP_GETPRIORITY:
1714 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1715 /* Otherwise it's "Useless use of grep iterator" */
1716 useless = OP_DESC(o);
1720 kid = cLISTOPo->op_first;
1721 if (kid && kid->op_type == OP_PUSHRE
1723 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1725 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1727 useless = OP_DESC(o);
1731 kid = cUNOPo->op_first;
1732 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1733 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1736 useless = "negative pattern binding (!~)";
1740 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1741 useless = "non-destructive substitution (s///r)";
1745 useless = "non-destructive transliteration (tr///r)";
1752 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1753 (!OP_HAS_SIBLING(o) || OP_SIBLING(o)->op_type != OP_READLINE))
1754 useless = "a variable";
1759 if (cSVOPo->op_private & OPpCONST_STRICT)
1760 no_bareword_allowed(o);
1762 if (ckWARN(WARN_VOID)) {
1763 /* don't warn on optimised away booleans, eg
1764 * use constant Foo, 5; Foo || print; */
1765 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1767 /* the constants 0 and 1 are permitted as they are
1768 conventionally used as dummies in constructs like
1769 1 while some_condition_with_side_effects; */
1770 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1772 else if (SvPOK(sv)) {
1773 SV * const dsv = newSVpvs("");
1775 = Perl_newSVpvf(aTHX_
1777 pv_pretty(dsv, SvPVX_const(sv),
1778 SvCUR(sv), 32, NULL, NULL,
1780 | PERL_PV_ESCAPE_NOCLEAR
1781 | PERL_PV_ESCAPE_UNI_DETECT));
1782 SvREFCNT_dec_NN(dsv);
1784 else if (SvOK(sv)) {
1785 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%"SVf")", SVfARG(sv));
1788 useless = "a constant (undef)";
1791 op_null(o); /* don't execute or even remember it */
1795 o->op_type = OP_PREINC; /* pre-increment is faster */
1796 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1800 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1801 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1805 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1806 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1810 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1811 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1816 UNOP *refgen, *rv2cv;
1819 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
1822 rv2gv = ((BINOP *)o)->op_last;
1823 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
1826 refgen = (UNOP *)((BINOP *)o)->op_first;
1828 if (!refgen || refgen->op_type != OP_REFGEN)
1831 exlist = (LISTOP *)refgen->op_first;
1832 if (!exlist || exlist->op_type != OP_NULL
1833 || exlist->op_targ != OP_LIST)
1836 if (exlist->op_first->op_type != OP_PUSHMARK)
1839 rv2cv = (UNOP*)exlist->op_last;
1841 if (rv2cv->op_type != OP_RV2CV)
1844 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
1845 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
1846 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
1848 o->op_private |= OPpASSIGN_CV_TO_GV;
1849 rv2gv->op_private |= OPpDONT_INIT_GV;
1850 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
1862 kid = cLOGOPo->op_first;
1863 if (kid->op_type == OP_NOT
1864 && (kid->op_flags & OPf_KIDS)) {
1865 if (o->op_type == OP_AND) {
1867 o->op_ppaddr = PL_ppaddr[OP_OR];
1869 o->op_type = OP_AND;
1870 o->op_ppaddr = PL_ppaddr[OP_AND];
1880 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1885 if (o->op_flags & OPf_STACKED)
1892 if (!(o->op_flags & OPf_KIDS))
1903 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1914 /* mortalise it, in case warnings are fatal. */
1915 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
1916 "Useless use of %"SVf" in void context",
1917 SVfARG(sv_2mortal(useless_sv)));
1920 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
1921 "Useless use of %s in void context",
1928 S_listkids(pTHX_ OP *o)
1930 if (o && o->op_flags & OPf_KIDS) {
1932 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1939 Perl_list(pTHX_ OP *o)
1943 /* assumes no premature commitment */
1944 if (!o || (o->op_flags & OPf_WANT)
1945 || (PL_parser && PL_parser->error_count)
1946 || o->op_type == OP_RETURN)
1951 if ((o->op_private & OPpTARGET_MY)
1952 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1954 return o; /* As if inside SASSIGN */
1957 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1959 switch (o->op_type) {
1962 list(cBINOPo->op_first);
1967 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1975 if (!(o->op_flags & OPf_KIDS))
1977 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1978 list(cBINOPo->op_first);
1979 return gen_constant_list(o);
1986 kid = cLISTOPo->op_first;
1988 kid = OP_SIBLING(kid);
1991 OP *sib = OP_SIBLING(kid);
1992 if (sib && kid->op_type != OP_LEAVEWHEN)
1998 PL_curcop = &PL_compiling;
2002 kid = cLISTOPo->op_first;
2009 S_scalarseq(pTHX_ OP *o)
2012 const OPCODE type = o->op_type;
2014 if (type == OP_LINESEQ || type == OP_SCOPE ||
2015 type == OP_LEAVE || type == OP_LEAVETRY)
2018 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2019 if (OP_HAS_SIBLING(kid)) {
2023 PL_curcop = &PL_compiling;
2025 o->op_flags &= ~OPf_PARENS;
2026 if (PL_hints & HINT_BLOCK_SCOPE)
2027 o->op_flags |= OPf_PARENS;
2030 o = newOP(OP_STUB, 0);
2035 S_modkids(pTHX_ OP *o, I32 type)
2037 if (o && o->op_flags & OPf_KIDS) {
2039 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2040 op_lvalue(kid, type);
2046 =for apidoc finalize_optree
2048 This function finalizes the optree. Should be called directly after
2049 the complete optree is built. It does some additional
2050 checking which can't be done in the normal ck_xxx functions and makes
2051 the tree thread-safe.
2056 Perl_finalize_optree(pTHX_ OP* o)
2058 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
2061 SAVEVPTR(PL_curcop);
2069 S_finalize_op(pTHX_ OP* o)
2071 PERL_ARGS_ASSERT_FINALIZE_OP;
2074 switch (o->op_type) {
2077 PL_curcop = ((COP*)o); /* for warnings */
2080 if (OP_HAS_SIBLING(o)) {
2081 OP *sib = OP_SIBLING(o);
2082 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
2083 && ckWARN(WARN_EXEC)
2084 && OP_HAS_SIBLING(sib))
2086 const OPCODE type = OP_SIBLING(sib)->op_type;
2087 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
2088 const line_t oldline = CopLINE(PL_curcop);
2089 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
2090 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2091 "Statement unlikely to be reached");
2092 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2093 "\t(Maybe you meant system() when you said exec()?)\n");
2094 CopLINE_set(PL_curcop, oldline);
2101 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
2102 GV * const gv = cGVOPo_gv;
2103 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
2104 /* XXX could check prototype here instead of just carping */
2105 SV * const sv = sv_newmortal();
2106 gv_efullname3(sv, gv, NULL);
2107 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
2108 "%"SVf"() called too early to check prototype",
2115 if (cSVOPo->op_private & OPpCONST_STRICT)
2116 no_bareword_allowed(o);
2120 case OP_METHOD_NAMED:
2121 /* Relocate sv to the pad for thread safety.
2122 * Despite being a "constant", the SV is written to,
2123 * for reference counts, sv_upgrade() etc. */
2124 if (cSVOPo->op_sv) {
2125 const PADOFFSET ix = pad_alloc(OP_CONST, SVf_READONLY);
2126 SvREFCNT_dec(PAD_SVl(ix));
2127 PAD_SETSV(ix, cSVOPo->op_sv);
2128 /* XXX I don't know how this isn't readonly already. */
2129 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
2130 cSVOPo->op_sv = NULL;
2144 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
2147 rop = (UNOP*)((BINOP*)o)->op_first;
2152 S_scalar_slice_warning(aTHX_ o);
2156 kid = OP_SIBLING(cLISTOPo->op_first);
2157 if (/* I bet there's always a pushmark... */
2158 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
2159 && OP_TYPE_ISNT_NN(kid, OP_CONST))
2164 key_op = (SVOP*)(kid->op_type == OP_CONST
2166 : OP_SIBLING(kLISTOP->op_first));
2168 rop = (UNOP*)((LISTOP*)o)->op_last;
2171 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
2173 else if (rop->op_first->op_type == OP_PADSV)
2174 /* @$hash{qw(keys here)} */
2175 rop = (UNOP*)rop->op_first;
2177 /* @{$hash}{qw(keys here)} */
2178 if (rop->op_first->op_type == OP_SCOPE
2179 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2181 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2187 lexname = NULL; /* just to silence compiler warnings */
2188 fields = NULL; /* just to silence compiler warnings */
2192 && (lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE),
2193 SvPAD_TYPED(lexname))
2194 && (fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE))
2195 && isGV(*fields) && GvHV(*fields);
2197 key_op = (SVOP*)OP_SIBLING(key_op)) {
2199 if (key_op->op_type != OP_CONST)
2201 svp = cSVOPx_svp(key_op);
2203 /* Make the CONST have a shared SV */
2204 if ((!SvIsCOW_shared_hash(sv = *svp))
2205 && SvTYPE(sv) < SVt_PVMG && SvOK(sv) && !SvROK(sv)) {
2207 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2208 SV *nsv = newSVpvn_share(key,
2209 SvUTF8(sv) ? -keylen : keylen, 0);
2210 SvREFCNT_dec_NN(sv);
2215 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0)) {
2216 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
2217 "in variable %"SVf" of type %"HEKf,
2218 SVfARG(*svp), SVfARG(lexname),
2219 HEKfARG(HvNAME_HEK(SvSTASH(lexname))));
2225 S_scalar_slice_warning(aTHX_ o);
2229 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
2230 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
2237 if (o->op_flags & OPf_KIDS) {
2241 /* check that op_last points to the last sibling, and that
2242 * the last op_sibling field points back to the parent, and
2243 * that the only ops with KIDS are those which are entitled to
2245 U32 type = o->op_type;
2249 if (type == OP_NULL) {
2251 /* ck_glob creates a null UNOP with ex-type GLOB
2252 * (which is a list op. So pretend it wasn't a listop */
2253 if (type == OP_GLOB)
2256 family = PL_opargs[type] & OA_CLASS_MASK;
2258 has_last = ( family == OA_BINOP
2259 || family == OA_LISTOP
2260 || family == OA_PMOP
2261 || family == OA_LOOP
2263 assert( has_last /* has op_first and op_last, or ...
2264 ... has (or may have) op_first: */
2265 || family == OA_UNOP
2266 || family == OA_LOGOP
2267 || family == OA_BASEOP_OR_UNOP
2268 || family == OA_FILESTATOP
2269 || family == OA_LOOPEXOP
2270 /* I don't know why SASSIGN is tagged as OA_BASEOP - DAPM */
2271 || type == OP_SASSIGN
2272 || type == OP_CUSTOM
2273 || type == OP_NULL /* new_logop does this */
2275 /* XXX list form of 'x' is has a null op_last. This is wrong,
2276 * but requires too much hacking (e.g. in Deparse) to fix for
2278 if (type == OP_REPEAT && (o->op_private & OPpREPEAT_DOLIST)) {
2283 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2284 # ifdef PERL_OP_PARENT
2285 if (!OP_HAS_SIBLING(kid)) {
2287 assert(kid == cLISTOPo->op_last);
2288 assert(kid->op_sibling == o);
2291 if (OP_HAS_SIBLING(kid)) {
2292 assert(!kid->op_lastsib);
2295 assert(kid->op_lastsib);
2297 assert(kid == cLISTOPo->op_last);
2303 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid))
2309 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
2311 Propagate lvalue ("modifiable") context to an op and its children.
2312 I<type> represents the context type, roughly based on the type of op that
2313 would do the modifying, although C<local()> is represented by OP_NULL,
2314 because it has no op type of its own (it is signalled by a flag on
2317 This function detects things that can't be modified, such as C<$x+1>, and
2318 generates errors for them. For example, C<$x+1 = 2> would cause it to be
2319 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
2321 It also flags things that need to behave specially in an lvalue context,
2322 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
2328 S_vivifies(const OPCODE type)
2331 case OP_RV2AV: case OP_ASLICE:
2332 case OP_RV2HV: case OP_KVASLICE:
2333 case OP_RV2SV: case OP_HSLICE:
2334 case OP_AELEMFAST: case OP_KVHSLICE:
2343 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
2347 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
2350 if (!o || (PL_parser && PL_parser->error_count))
2353 if ((o->op_private & OPpTARGET_MY)
2354 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2359 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
2361 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
2363 switch (o->op_type) {
2368 if ((o->op_flags & OPf_PARENS))
2372 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
2373 !(o->op_flags & OPf_STACKED)) {
2374 o->op_type = OP_RV2CV; /* entersub => rv2cv */
2375 /* Both ENTERSUB and RV2CV use this bit, but for different pur-
2376 poses, so we need it clear. */
2377 o->op_private &= ~1;
2378 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
2379 assert(cUNOPo->op_first->op_type == OP_NULL);
2380 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
2383 else { /* lvalue subroutine call */
2384 o->op_private |= OPpLVAL_INTRO
2385 |(OPpENTERSUB_INARGS * (type == OP_LEAVESUBLV));
2386 PL_modcount = RETURN_UNLIMITED_NUMBER;
2387 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
2388 /* Potential lvalue context: */
2389 o->op_private |= OPpENTERSUB_INARGS;
2392 else { /* Compile-time error message: */
2393 OP *kid = cUNOPo->op_first;
2396 if (kid->op_type != OP_PUSHMARK) {
2397 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
2399 "panic: unexpected lvalue entersub "
2400 "args: type/targ %ld:%"UVuf,
2401 (long)kid->op_type, (UV)kid->op_targ);
2402 kid = kLISTOP->op_first;
2404 while (OP_HAS_SIBLING(kid))
2405 kid = OP_SIBLING(kid);
2406 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
2407 break; /* Postpone until runtime */
2410 kid = kUNOP->op_first;
2411 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
2412 kid = kUNOP->op_first;
2413 if (kid->op_type == OP_NULL)
2415 "Unexpected constant lvalue entersub "
2416 "entry via type/targ %ld:%"UVuf,
2417 (long)kid->op_type, (UV)kid->op_targ);
2418 if (kid->op_type != OP_GV) {
2422 cv = GvCV(kGVOP_gv);
2432 if (flags & OP_LVALUE_NO_CROAK) return NULL;
2433 /* grep, foreach, subcalls, refgen */
2434 if (type == OP_GREPSTART || type == OP_ENTERSUB
2435 || type == OP_REFGEN || type == OP_LEAVESUBLV)
2437 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2438 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
2440 : (o->op_type == OP_ENTERSUB
2441 ? "non-lvalue subroutine call"
2443 type ? PL_op_desc[type] : "local"));
2457 case OP_RIGHT_SHIFT:
2466 if (!(o->op_flags & OPf_STACKED))
2473 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
2474 op_lvalue(kid, type);
2479 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
2480 PL_modcount = RETURN_UNLIMITED_NUMBER;
2481 return o; /* Treat \(@foo) like ordinary list. */
2485 if (scalar_mod_type(o, type))
2487 ref(cUNOPo->op_first, o->op_type);
2494 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
2495 if (type == OP_LEAVESUBLV && (
2496 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
2497 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2499 o->op_private |= OPpMAYBE_LVSUB;
2503 PL_modcount = RETURN_UNLIMITED_NUMBER;
2507 if (type == OP_LEAVESUBLV)
2508 o->op_private |= OPpMAYBE_LVSUB;
2511 PL_hints |= HINT_BLOCK_SCOPE;
2512 if (type == OP_LEAVESUBLV)
2513 o->op_private |= OPpMAYBE_LVSUB;
2517 ref(cUNOPo->op_first, o->op_type);
2521 PL_hints |= HINT_BLOCK_SCOPE;
2531 case OP_AELEMFAST_LEX:
2538 PL_modcount = RETURN_UNLIMITED_NUMBER;
2539 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
2540 return o; /* Treat \(@foo) like ordinary list. */
2541 if (scalar_mod_type(o, type))
2543 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2544 && type == OP_LEAVESUBLV)
2545 o->op_private |= OPpMAYBE_LVSUB;
2549 if (!type) /* local() */
2550 Perl_croak(aTHX_ "Can't localize lexical variable %"SVf,
2551 PAD_COMPNAME_SV(o->op_targ));
2560 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
2564 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
2570 if (type == OP_LEAVESUBLV)
2571 o->op_private |= OPpMAYBE_LVSUB;
2572 if (o->op_flags & OPf_KIDS)
2573 op_lvalue(OP_SIBLING(cBINOPo->op_first), type);
2578 ref(cBINOPo->op_first, o->op_type);
2579 if (type == OP_ENTERSUB &&
2580 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
2581 o->op_private |= OPpLVAL_DEFER;
2582 if (type == OP_LEAVESUBLV)
2583 o->op_private |= OPpMAYBE_LVSUB;
2590 o->op_private |= OPpLVALUE;
2596 if (o->op_flags & OPf_KIDS)
2597 op_lvalue(cLISTOPo->op_last, type);
2602 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2604 else if (!(o->op_flags & OPf_KIDS))
2606 if (o->op_targ != OP_LIST) {
2607 op_lvalue(cBINOPo->op_first, type);
2613 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2614 /* elements might be in void context because the list is
2615 in scalar context or because they are attribute sub calls */
2616 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
2617 op_lvalue(kid, type);
2621 if (type != OP_LEAVESUBLV)
2623 break; /* op_lvalue()ing was handled by ck_return() */
2630 if (type == OP_LEAVESUBLV
2631 || !S_vivifies(cLOGOPo->op_first->op_type))
2632 op_lvalue(cLOGOPo->op_first, type);
2633 if (type == OP_LEAVESUBLV
2634 || !S_vivifies(OP_SIBLING(cLOGOPo->op_first)->op_type))
2635 op_lvalue(OP_SIBLING(cLOGOPo->op_first), type);
2639 /* [20011101.069] File test operators interpret OPf_REF to mean that
2640 their argument is a filehandle; thus \stat(".") should not set
2642 if (type == OP_REFGEN &&
2643 PL_check[o->op_type] == Perl_ck_ftst)
2646 if (type != OP_LEAVESUBLV)
2647 o->op_flags |= OPf_MOD;
2649 if (type == OP_AASSIGN || type == OP_SASSIGN)
2650 o->op_flags |= OPf_SPECIAL|OPf_REF;
2651 else if (!type) { /* local() */
2654 o->op_private |= OPpLVAL_INTRO;
2655 o->op_flags &= ~OPf_SPECIAL;
2656 PL_hints |= HINT_BLOCK_SCOPE;
2661 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
2662 "Useless localization of %s", OP_DESC(o));
2665 else if (type != OP_GREPSTART && type != OP_ENTERSUB
2666 && type != OP_LEAVESUBLV)
2667 o->op_flags |= OPf_REF;
2672 S_scalar_mod_type(const OP *o, I32 type)
2677 if (o && o->op_type == OP_RV2GV)
2701 case OP_RIGHT_SHIFT:
2722 S_is_handle_constructor(const OP *o, I32 numargs)
2724 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
2726 switch (o->op_type) {
2734 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
2747 S_refkids(pTHX_ OP *o, I32 type)
2749 if (o && o->op_flags & OPf_KIDS) {
2751 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2758 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
2763 PERL_ARGS_ASSERT_DOREF;
2765 if (!o || (PL_parser && PL_parser->error_count))
2768 switch (o->op_type) {
2770 if ((type == OP_EXISTS || type == OP_DEFINED) &&
2771 !(o->op_flags & OPf_STACKED)) {
2772 o->op_type = OP_RV2CV; /* entersub => rv2cv */
2773 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
2774 assert(cUNOPo->op_first->op_type == OP_NULL);
2775 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
2776 o->op_flags |= OPf_SPECIAL;
2777 o->op_private &= ~1;
2779 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
2780 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2781 : type == OP_RV2HV ? OPpDEREF_HV
2783 o->op_flags |= OPf_MOD;
2789 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
2790 doref(kid, type, set_op_ref);
2793 if (type == OP_DEFINED)
2794 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2795 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2798 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2799 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2800 : type == OP_RV2HV ? OPpDEREF_HV
2802 o->op_flags |= OPf_MOD;
2809 o->op_flags |= OPf_REF;
2812 if (type == OP_DEFINED)
2813 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2814 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2820 o->op_flags |= OPf_REF;
2825 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
2827 doref(cBINOPo->op_first, type, set_op_ref);
2831 doref(cBINOPo->op_first, o->op_type, set_op_ref);
2832 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2833 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2834 : type == OP_RV2HV ? OPpDEREF_HV
2836 o->op_flags |= OPf_MOD;
2846 if (!(o->op_flags & OPf_KIDS))
2848 doref(cLISTOPo->op_last, type, set_op_ref);
2858 S_dup_attrlist(pTHX_ OP *o)
2862 PERL_ARGS_ASSERT_DUP_ATTRLIST;
2864 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
2865 * where the first kid is OP_PUSHMARK and the remaining ones
2866 * are OP_CONST. We need to push the OP_CONST values.
2868 if (o->op_type == OP_CONST)
2869 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
2871 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
2873 for (o = cLISTOPo->op_first; o; o = OP_SIBLING(o)) {
2874 if (o->op_type == OP_CONST)
2875 rop = op_append_elem(OP_LIST, rop,
2876 newSVOP(OP_CONST, o->op_flags,
2877 SvREFCNT_inc_NN(cSVOPo->op_sv)));
2884 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
2886 SV * const stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2888 PERL_ARGS_ASSERT_APPLY_ATTRS;
2890 /* fake up C<use attributes $pkg,$rv,@attrs> */
2892 #define ATTRSMODULE "attributes"
2893 #define ATTRSMODULE_PM "attributes.pm"
2895 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2896 newSVpvs(ATTRSMODULE),
2898 op_prepend_elem(OP_LIST,
2899 newSVOP(OP_CONST, 0, stashsv),
2900 op_prepend_elem(OP_LIST,
2901 newSVOP(OP_CONST, 0,
2903 dup_attrlist(attrs))));
2907 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
2909 OP *pack, *imop, *arg;
2910 SV *meth, *stashsv, **svp;
2912 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
2917 assert(target->op_type == OP_PADSV ||
2918 target->op_type == OP_PADHV ||
2919 target->op_type == OP_PADAV);
2921 /* Ensure that attributes.pm is loaded. */
2922 /* Don't force the C<use> if we don't need it. */
2923 svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
2924 if (svp && *svp != &PL_sv_undef)
2925 NOOP; /* already in %INC */
2927 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
2928 newSVpvs(ATTRSMODULE), NULL);
2930 /* Need package name for method call. */
2931 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
2933 /* Build up the real arg-list. */
2934 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2936 arg = newOP(OP_PADSV, 0);
2937 arg->op_targ = target->op_targ;
2938 arg = op_prepend_elem(OP_LIST,
2939 newSVOP(OP_CONST, 0, stashsv),
2940 op_prepend_elem(OP_LIST,
2941 newUNOP(OP_REFGEN, 0,
2942 op_lvalue(arg, OP_REFGEN)),
2943 dup_attrlist(attrs)));
2945 /* Fake up a method call to import */
2946 meth = newSVpvs_share("import");
2947 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2948 op_append_elem(OP_LIST,
2949 op_prepend_elem(OP_LIST, pack, list(arg)),
2950 newSVOP(OP_METHOD_NAMED, 0, meth)));
2952 /* Combine the ops. */
2953 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
2957 =notfor apidoc apply_attrs_string
2959 Attempts to apply a list of attributes specified by the C<attrstr> and
2960 C<len> arguments to the subroutine identified by the C<cv> argument which
2961 is expected to be associated with the package identified by the C<stashpv>
2962 argument (see L<attributes>). It gets this wrong, though, in that it
2963 does not correctly identify the boundaries of the individual attribute
2964 specifications within C<attrstr>. This is not really intended for the
2965 public API, but has to be listed here for systems such as AIX which
2966 need an explicit export list for symbols. (It's called from XS code
2967 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2968 to respect attribute syntax properly would be welcome.
2974 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2975 const char *attrstr, STRLEN len)
2979 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2982 len = strlen(attrstr);
2986 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2988 const char * const sstr = attrstr;
2989 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2990 attrs = op_append_elem(OP_LIST, attrs,
2991 newSVOP(OP_CONST, 0,
2992 newSVpvn(sstr, attrstr-sstr)));
2996 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2997 newSVpvs(ATTRSMODULE),
2998 NULL, op_prepend_elem(OP_LIST,
2999 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
3000 op_prepend_elem(OP_LIST,
3001 newSVOP(OP_CONST, 0,
3002 newRV(MUTABLE_SV(cv))),
3007 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name)
3009 OP *new_proto = NULL;
3014 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
3020 if (o->op_type == OP_CONST) {
3021 pv = SvPV(cSVOPo_sv, pvlen);
3022 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3023 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3024 SV ** const tmpo = cSVOPx_svp(o);
3025 SvREFCNT_dec(cSVOPo_sv);
3030 } else if (o->op_type == OP_LIST) {
3032 assert(o->op_flags & OPf_KIDS);
3033 lasto = cLISTOPo->op_first;
3034 assert(lasto->op_type == OP_PUSHMARK);
3035 for (o = OP_SIBLING(lasto); o; o = OP_SIBLING(o)) {
3036 if (o->op_type == OP_CONST) {
3037 pv = SvPV(cSVOPo_sv, pvlen);
3038 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3039 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3040 SV ** const tmpo = cSVOPx_svp(o);
3041 SvREFCNT_dec(cSVOPo_sv);
3043 if (new_proto && ckWARN(WARN_MISC)) {
3045 const char * newp = SvPV(cSVOPo_sv, new_len);
3046 Perl_warner(aTHX_ packWARN(WARN_MISC),
3047 "Attribute prototype(%"UTF8f") discards earlier prototype attribute in same sub",
3048 UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
3054 /* excise new_proto from the list */
3055 op_sibling_splice(*attrs, lasto, 1, NULL);
3062 /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
3063 would get pulled in with no real need */
3064 if (!OP_HAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
3073 svname = sv_newmortal();
3074 gv_efullname3(svname, name, NULL);
3076 else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
3077 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
3079 svname = (SV *)name;
3080 if (ckWARN(WARN_ILLEGALPROTO))
3081 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE);
3082 if (*proto && ckWARN(WARN_PROTOTYPE)) {
3083 STRLEN old_len, new_len;
3084 const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
3085 const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
3087 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3088 "Prototype '%"UTF8f"' overridden by attribute 'prototype(%"UTF8f")'"
3090 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
3091 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
3101 S_cant_declare(pTHX_ OP *o)
3103 if (o->op_type == OP_NULL
3104 && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
3105 o = cUNOPo->op_first;
3106 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
3107 o->op_type == OP_NULL
3108 && o->op_flags & OPf_SPECIAL
3111 PL_parser->in_my == KEY_our ? "our" :
3112 PL_parser->in_my == KEY_state ? "state" :
3117 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
3120 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
3122 PERL_ARGS_ASSERT_MY_KID;
3124 if (!o || (PL_parser && PL_parser->error_count))
3129 if (type == OP_LIST) {
3131 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
3132 my_kid(kid, attrs, imopsp);
3134 } else if (type == OP_UNDEF || type == OP_STUB) {
3136 } else if (type == OP_RV2SV || /* "our" declaration */
3138 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
3139 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
3140 S_cant_declare(aTHX_ o);
3142 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
3144 PL_parser->in_my = FALSE;
3145 PL_parser->in_my_stash = NULL;
3146 apply_attrs(GvSTASH(gv),
3147 (type == OP_RV2SV ? GvSV(gv) :
3148 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
3149 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
3152 o->op_private |= OPpOUR_INTRO;
3155 else if (type != OP_PADSV &&
3158 type != OP_PUSHMARK)
3160 S_cant_declare(aTHX_ o);
3163 else if (attrs && type != OP_PUSHMARK) {
3167 PL_parser->in_my = FALSE;
3168 PL_parser->in_my_stash = NULL;
3170 /* check for C<my Dog $spot> when deciding package */
3171 stash = PAD_COMPNAME_TYPE(o->op_targ);
3173 stash = PL_curstash;
3174 apply_attrs_my(stash, o, attrs, imopsp);
3176 o->op_flags |= OPf_MOD;
3177 o->op_private |= OPpLVAL_INTRO;
3179 o->op_private |= OPpPAD_STATE;
3184 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
3187 int maybe_scalar = 0;
3189 PERL_ARGS_ASSERT_MY_ATTRS;
3191 /* [perl #17376]: this appears to be premature, and results in code such as
3192 C< our(%x); > executing in list mode rather than void mode */
3194 if (o->op_flags & OPf_PARENS)
3204 o = my_kid(o, attrs, &rops);
3206 if (maybe_scalar && o->op_type == OP_PADSV) {
3207 o = scalar(op_append_list(OP_LIST, rops, o));
3208 o->op_private |= OPpLVAL_INTRO;
3211 /* The listop in rops might have a pushmark at the beginning,
3212 which will mess up list assignment. */
3213 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
3214 if (rops->op_type == OP_LIST &&
3215 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
3217 OP * const pushmark = lrops->op_first;
3218 /* excise pushmark */
3219 op_sibling_splice(rops, NULL, 1, NULL);
3222 o = op_append_list(OP_LIST, o, rops);
3225 PL_parser->in_my = FALSE;
3226 PL_parser->in_my_stash = NULL;
3231 Perl_sawparens(pTHX_ OP *o)
3233 PERL_UNUSED_CONTEXT;
3235 o->op_flags |= OPf_PARENS;
3240 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
3244 const OPCODE ltype = left->op_type;
3245 const OPCODE rtype = right->op_type;
3247 PERL_ARGS_ASSERT_BIND_MATCH;
3249 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
3250 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
3252 const char * const desc
3254 rtype == OP_SUBST || rtype == OP_TRANS
3255 || rtype == OP_TRANSR
3257 ? (int)rtype : OP_MATCH];
3258 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
3260 S_op_varname(aTHX_ left);
3262 Perl_warner(aTHX_ packWARN(WARN_MISC),
3263 "Applying %s to %"SVf" will act on scalar(%"SVf")",
3264 desc, SVfARG(name), SVfARG(name));
3266 const char * const sample = (isary
3267 ? "@array" : "%hash");
3268 Perl_warner(aTHX_ packWARN(WARN_MISC),
3269 "Applying %s to %s will act on scalar(%s)",
3270 desc, sample, sample);
3274 if (rtype == OP_CONST &&
3275 cSVOPx(right)->op_private & OPpCONST_BARE &&
3276 cSVOPx(right)->op_private & OPpCONST_STRICT)
3278 no_bareword_allowed(right);
3281 /* !~ doesn't make sense with /r, so error on it for now */
3282 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
3284 /* diag_listed_as: Using !~ with %s doesn't make sense */
3285 yyerror("Using !~ with s///r doesn't make sense");
3286 if (rtype == OP_TRANSR && type == OP_NOT)
3287 /* diag_listed_as: Using !~ with %s doesn't make sense */
3288 yyerror("Using !~ with tr///r doesn't make sense");
3290 ismatchop = (rtype == OP_MATCH ||
3291 rtype == OP_SUBST ||
3292 rtype == OP_TRANS || rtype == OP_TRANSR)
3293 && !(right->op_flags & OPf_SPECIAL);
3294 if (ismatchop && right->op_private & OPpTARGET_MY) {
3296 right->op_private &= ~OPpTARGET_MY;
3298 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
3301 right->op_flags |= OPf_STACKED;
3302 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
3303 ! (rtype == OP_TRANS &&
3304 right->op_private & OPpTRANS_IDENTICAL) &&
3305 ! (rtype == OP_SUBST &&
3306 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
3307 newleft = op_lvalue(left, rtype);
3310 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
3311 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
3313 o = op_prepend_elem(rtype, scalar(newleft), right);
3315 return newUNOP(OP_NOT, 0, scalar(o));
3319 return bind_match(type, left,
3320 pmruntime(newPMOP(OP_MATCH, 0), right, 0, 0));
3324 Perl_invert(pTHX_ OP *o)
3328 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
3332 =for apidoc Amx|OP *|op_scope|OP *o
3334 Wraps up an op tree with some additional ops so that at runtime a dynamic
3335 scope will be created. The original ops run in the new dynamic scope,
3336 and then, provided that they exit normally, the scope will be unwound.
3337 The additional ops used to create and unwind the dynamic scope will
3338 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
3339 instead if the ops are simple enough to not need the full dynamic scope
3346 Perl_op_scope(pTHX_ OP *o)
3350 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
3351 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
3352 o->op_type = OP_LEAVE;
3353 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
3355 else if (o->op_type == OP_LINESEQ) {
3357 o->op_type = OP_SCOPE;
3358 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
3359 kid = ((LISTOP*)o)->op_first;
3360 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
3363 /* The following deals with things like 'do {1 for 1}' */
3364 kid = OP_SIBLING(kid);
3366 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
3371 o = newLISTOP(OP_SCOPE, 0, o, NULL);
3377 Perl_op_unscope(pTHX_ OP *o)
3379 if (o && o->op_type == OP_LINESEQ) {
3380 OP *kid = cLISTOPo->op_first;
3381 for(; kid; kid = OP_SIBLING(kid))
3382 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
3389 Perl_block_start(pTHX_ int full)
3391 const int retval = PL_savestack_ix;
3393 pad_block_start(full);
3395 PL_hints &= ~HINT_BLOCK_SCOPE;
3396 SAVECOMPILEWARNINGS();
3397 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
3399 CALL_BLOCK_HOOKS(bhk_start, full);
3405 Perl_block_end(pTHX_ I32 floor, OP *seq)
3407 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
3408 OP* retval = scalarseq(seq);
3411 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
3415 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
3419 /* pad_leavemy has created a sequence of introcv ops for all my
3420 subs declared in the block. We have to replicate that list with
3421 clonecv ops, to deal with this situation:
3426 sub s1 { state sub foo { \&s2 } }
3429 Originally, I was going to have introcv clone the CV and turn
3430 off the stale flag. Since &s1 is declared before &s2, the
3431 introcv op for &s1 is executed (on sub entry) before the one for
3432 &s2. But the &foo sub inside &s1 (which is cloned when &s1 is
3433 cloned, since it is a state sub) closes over &s2 and expects
3434 to see it in its outer CV’s pad. If the introcv op clones &s1,
3435 then &s2 is still marked stale. Since &s1 is not active, and
3436 &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia-
3437 ble will not stay shared’ warning. Because it is the same stub
3438 that will be used when the introcv op for &s2 is executed, clos-
3439 ing over it is safe. Hence, we have to turn off the stale flag
3440 on all lexical subs in the block before we clone any of them.
3441 Hence, having introcv clone the sub cannot work. So we create a
3442 list of ops like this:
3466 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
3467 OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
3468 for (;; kid = OP_SIBLING(kid)) {
3469 OP *newkid = newOP(OP_CLONECV, 0);
3470 newkid->op_targ = kid->op_targ;
3471 o = op_append_elem(OP_LINESEQ, o, newkid);
3472 if (kid == last) break;
3474 retval = op_prepend_elem(OP_LINESEQ, o, retval);
3477 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
3483 =head1 Compile-time scope hooks
3485 =for apidoc Aox||blockhook_register
3487 Register a set of hooks to be called when the Perl lexical scope changes
3488 at compile time. See L<perlguts/"Compile-time scope hooks">.
3494 Perl_blockhook_register(pTHX_ BHK *hk)
3496 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
3498 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
3504 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
3505 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
3506 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
3509 OP * const o = newOP(OP_PADSV, 0);
3510 o->op_targ = offset;
3516 Perl_newPROG(pTHX_ OP *o)
3518 PERL_ARGS_ASSERT_NEWPROG;
3525 PL_eval_root = newUNOP(OP_LEAVEEVAL,
3526 ((PL_in_eval & EVAL_KEEPERR)
3527 ? OPf_SPECIAL : 0), o);
3529 cx = &cxstack[cxstack_ix];
3530 assert(CxTYPE(cx) == CXt_EVAL);
3532 if ((cx->blk_gimme & G_WANT) == G_VOID)
3533 scalarvoid(PL_eval_root);
3534 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
3537 scalar(PL_eval_root);
3539 PL_eval_start = op_linklist(PL_eval_root);
3540 PL_eval_root->op_private |= OPpREFCOUNTED;
3541 OpREFCNT_set(PL_eval_root, 1);
3542 PL_eval_root->op_next = 0;
3543 i = PL_savestack_ix;
3546 CALL_PEEP(PL_eval_start);
3547 finalize_optree(PL_eval_root);
3548 S_prune_chain_head(&PL_eval_start);
3550 PL_savestack_ix = i;
3553 if (o->op_type == OP_STUB) {
3554 /* This block is entered if nothing is compiled for the main
3555 program. This will be the case for an genuinely empty main
3556 program, or one which only has BEGIN blocks etc, so already
3559 Historically (5.000) the guard above was !o. However, commit
3560 f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
3561 c71fccf11fde0068, changed perly.y so that newPROG() is now
3562 called with the output of block_end(), which returns a new
3563 OP_STUB for the case of an empty optree. ByteLoader (and
3564 maybe other things) also take this path, because they set up
3565 PL_main_start and PL_main_root directly, without generating an
3568 If the parsing the main program aborts (due to parse errors,
3569 or due to BEGIN or similar calling exit), then newPROG()
3570 isn't even called, and hence this code path and its cleanups
3571 are skipped. This shouldn't make a make a difference:
3572 * a non-zero return from perl_parse is a failure, and
3573 perl_destruct() should be called immediately.
3574 * however, if exit(0) is called during the parse, then
3575 perl_parse() returns 0, and perl_run() is called. As
3576 PL_main_start will be NULL, perl_run() will return
3577 promptly, and the exit code will remain 0.
3580 PL_comppad_name = 0;
3582 S_op_destroy(aTHX_ o);
3585 PL_main_root = op_scope(sawparens(scalarvoid(o)));
3586 PL_curcop = &PL_compiling;
3587 PL_main_start = LINKLIST(PL_main_root);
3588 PL_main_root->op_private |= OPpREFCOUNTED;
3589 OpREFCNT_set(PL_main_root, 1);
3590 PL_main_root->op_next = 0;
3591 CALL_PEEP(PL_main_start);
3592 finalize_optree(PL_main_root);
3593 S_prune_chain_head(&PL_main_start);
3594 cv_forget_slab(PL_compcv);
3597 /* Register with debugger */
3599 CV * const cv = get_cvs("DB::postponed", 0);
3603 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3605 call_sv(MUTABLE_SV(cv), G_DISCARD);
3612 Perl_localize(pTHX_ OP *o, I32 lex)
3614 PERL_ARGS_ASSERT_LOCALIZE;
3616 if (o->op_flags & OPf_PARENS)
3617 /* [perl #17376]: this appears to be premature, and results in code such as
3618 C< our(%x); > executing in list mode rather than void mode */
3625 if ( PL_parser->bufptr > PL_parser->oldbufptr
3626 && PL_parser->bufptr[-1] == ','
3627 && ckWARN(WARN_PARENTHESIS))
3629 char *s = PL_parser->bufptr;
3632 /* some heuristics to detect a potential error */
3633 while (*s && (strchr(", \t\n", *s)))
3637 if (*s && strchr("@$%*", *s) && *++s
3638 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
3641 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
3643 while (*s && (strchr(", \t\n", *s)))
3649 if (sigil && (*s == ';' || *s == '=')) {
3650 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
3651 "Parentheses missing around \"%s\" list",
3653 ? (PL_parser->in_my == KEY_our
3655 : PL_parser->in_my == KEY_state
3665 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
3666 PL_parser->in_my = FALSE;
3667 PL_parser->in_my_stash = NULL;
3672 Perl_jmaybe(pTHX_ OP *o)
3674 PERL_ARGS_ASSERT_JMAYBE;
3676 if (o->op_type == OP_LIST) {
3678 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
3679 o = convert(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
3684 PERL_STATIC_INLINE OP *
3685 S_op_std_init(pTHX_ OP *o)
3687 I32 type = o->op_type;
3689 PERL_ARGS_ASSERT_OP_STD_INIT;
3691 if (PL_opargs[type] & OA_RETSCALAR)
3693 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
3694 o->op_targ = pad_alloc(type, SVs_PADTMP);
3699 PERL_STATIC_INLINE OP *
3700 S_op_integerize(pTHX_ OP *o)
3702 I32 type = o->op_type;
3704 PERL_ARGS_ASSERT_OP_INTEGERIZE;
3706 /* integerize op. */
3707 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
3710 o->op_ppaddr = PL_ppaddr[++(o->op_type)];
3713 if (type == OP_NEGATE)
3714 /* XXX might want a ck_negate() for this */
3715 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
3721 S_fold_constants(pTHX_ OP *o)
3726 VOL I32 type = o->op_type;
3731 SV * const oldwarnhook = PL_warnhook;
3732 SV * const olddiehook = PL_diehook;
3736 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
3738 if (!(PL_opargs[type] & OA_FOLDCONST))
3747 #ifdef USE_LOCALE_CTYPE
3748 if (IN_LC_COMPILETIME(LC_CTYPE))
3757 #ifdef USE_LOCALE_COLLATE
3758 if (IN_LC_COMPILETIME(LC_COLLATE))
3763 /* XXX what about the numeric ops? */
3764 #ifdef USE_LOCALE_NUMERIC
3765 if (IN_LC_COMPILETIME(LC_NUMERIC))
3770 if (!OP_HAS_SIBLING(cLISTOPo->op_first)
3771 || OP_SIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
3774 SV * const sv = cSVOPx_sv(OP_SIBLING(cLISTOPo->op_first));
3775 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
3777 const char *s = SvPVX_const(sv);
3778 while (s < SvEND(sv)) {
3779 if (*s == 'p' || *s == 'P') goto nope;
3786 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
3789 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
3790 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
3794 if (PL_parser && PL_parser->error_count)
3795 goto nope; /* Don't try to run w/ errors */
3797 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3798 const OPCODE type = curop->op_type;
3799 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
3801 type != OP_SCALAR &&
3803 type != OP_PUSHMARK)
3809 curop = LINKLIST(o);
3810 old_next = o->op_next;
3814 oldscope = PL_scopestack_ix;
3815 create_eval_scope(G_FAKINGEVAL);
3817 /* Verify that we don't need to save it: */
3818 assert(PL_curcop == &PL_compiling);
3819 StructCopy(&PL_compiling, ¬_compiling, COP);
3820 PL_curcop = ¬_compiling;
3821 /* The above ensures that we run with all the correct hints of the
3822 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
3823 assert(IN_PERL_RUNTIME);
3824 PL_warnhook = PERL_WARNHOOK_FATAL;
3831 sv = *(PL_stack_sp--);
3832 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
3833 pad_swipe(o->op_targ, FALSE);
3835 else if (SvTEMP(sv)) { /* grab mortal temp? */
3836 SvREFCNT_inc_simple_void(sv);
3839 else { assert(SvIMMORTAL(sv)); }
3842 /* Something tried to die. Abandon constant folding. */
3843 /* Pretend the error never happened. */
3845 o->op_next = old_next;
3849 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
3850 PL_warnhook = oldwarnhook;
3851 PL_diehook = olddiehook;
3852 /* XXX note that this croak may fail as we've already blown away
3853 * the stack - eg any nested evals */
3854 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
3857 PL_warnhook = oldwarnhook;
3858 PL_diehook = olddiehook;
3859 PL_curcop = &PL_compiling;
3861 if (PL_scopestack_ix > oldscope)
3862 delete_eval_scope();
3869 if (type == OP_STRINGIFY) SvPADTMP_off(sv);
3870 else if (!SvIMMORTAL(sv)) {
3874 if (type == OP_RV2GV)
3875 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
3878 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
3879 if (type != OP_STRINGIFY) newop->op_folded = 1;
3888 S_gen_constant_list(pTHX_ OP *o)
3892 const SSize_t oldtmps_floor = PL_tmps_floor;
3897 if (PL_parser && PL_parser->error_count)
3898 return o; /* Don't attempt to run with errors */
3900 curop = LINKLIST(o);
3903 S_prune_chain_head(&curop);
3905 Perl_pp_pushmark(aTHX);
3908 assert (!(curop->op_flags & OPf_SPECIAL));
3909 assert(curop->op_type == OP_RANGE);
3910 Perl_pp_anonlist(aTHX);
3911 PL_tmps_floor = oldtmps_floor;
3913 o->op_type = OP_RV2AV;
3914 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
3915 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
3916 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
3917 o->op_opt = 0; /* needs to be revisited in rpeep() */
3918 av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
3920 /* replace subtree with an OP_CONST */
3921 curop = ((UNOP*)o)->op_first;
3922 op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
3925 if (AvFILLp(av) != -1)
3926 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
3929 SvREADONLY_on(*svp);
3935 /* convert o (and any siblings) into a list if not already, then
3936 * convert the parent OP_LIST to type 'type', and CHECKOP() and fold it
3940 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
3943 if (type < 0) type = -type, flags |= OPf_SPECIAL;
3944 if (!o || o->op_type != OP_LIST)
3945 o = force_list(o, 0);
3947 o->op_flags &= ~OPf_WANT;
3949 if (!(PL_opargs[type] & OA_MARK))
3950 op_null(cLISTOPo->op_first);
3952 OP * const kid2 = OP_SIBLING(cLISTOPo->op_first);
3953 if (kid2 && kid2->op_type == OP_COREARGS) {
3954 op_null(cLISTOPo->op_first);
3955 kid2->op_private |= OPpCOREARGS_PUSHMARK;
3959 o->op_type = (OPCODE)type;
3960 o->op_ppaddr = PL_ppaddr[type];
3961 o->op_flags |= flags;
3963 o = CHECKOP(type, o);
3964 if (o->op_type != (unsigned)type)
3967 return fold_constants(op_integerize(op_std_init(o)));
3971 =head1 Optree Manipulation Functions
3974 /* List constructors */
3977 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
3979 Append an item to the list of ops contained directly within a list-type
3980 op, returning the lengthened list. I<first> is the list-type op,
3981 and I<last> is the op to append to the list. I<optype> specifies the
3982 intended opcode for the list. If I<first> is not already a list of the
3983 right type, it will be upgraded into one. If either I<first> or I<last>
3984 is null, the other is returned unchanged.
3990 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
3998 if (first->op_type != (unsigned)type
3999 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
4001 return newLISTOP(type, 0, first, last);
4004 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
4005 first->op_flags |= OPf_KIDS;
4010 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
4012 Concatenate the lists of ops contained directly within two list-type ops,
4013 returning the combined list. I<first> and I<last> are the list-type ops
4014 to concatenate. I<optype> specifies the intended opcode for the list.
4015 If either I<first> or I<last> is not already a list of the right type,
4016 it will be upgraded into one. If either I<first> or I<last> is null,
4017 the other is returned unchanged.
4023 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
4031 if (first->op_type != (unsigned)type)
4032 return op_prepend_elem(type, first, last);
4034 if (last->op_type != (unsigned)type)
4035 return op_append_elem(type, first, last);
4037 ((LISTOP*)first)->op_last->op_lastsib = 0;
4038 OP_SIBLING_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first);
4039 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
4040 ((LISTOP*)first)->op_last->op_lastsib = 1;
4041 #ifdef PERL_OP_PARENT
4042 ((LISTOP*)first)->op_last->op_sibling = first;
4044 first->op_flags |= (last->op_flags & OPf_KIDS);
4047 S_op_destroy(aTHX_ last);
4053 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
4055 Prepend an item to the list of ops contained directly within a list-type
4056 op, returning the lengthened list. I<first> is the op to prepend to the
4057 list, and I<last> is the list-type op. I<optype> specifies the intended
4058 opcode for the list. If I<last> is not already a list of the right type,
4059 it will be upgraded into one. If either I<first> or I<last> is null,
4060 the other is returned unchanged.
4066 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
4074 if (last->op_type == (unsigned)type) {
4075 if (type == OP_LIST) { /* already a PUSHMARK there */
4076 /* insert 'first' after pushmark */
4077 op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first);
4078 if (!(first->op_flags & OPf_PARENS))
4079 last->op_flags &= ~OPf_PARENS;
4082 op_sibling_splice(last, NULL, 0, first);
4083 last->op_flags |= OPf_KIDS;
4087 return newLISTOP(type, 0, first, last);
4094 =head1 Optree construction
4096 =for apidoc Am|OP *|newNULLLIST
4098 Constructs, checks, and returns a new C<stub> op, which represents an
4099 empty list expression.
4105 Perl_newNULLLIST(pTHX)
4107 return newOP(OP_STUB, 0);
4110 /* promote o and any siblings to be a list if its not already; i.e.
4118 * pushmark - o - A - B
4120 * If nullit it true, the list op is nulled.
4124 S_force_list(pTHX_ OP *o, bool nullit)
4126 if (!o || o->op_type != OP_LIST) {
4129 /* manually detach any siblings then add them back later */
4130 rest = OP_SIBLING(o);
4131 OP_SIBLING_set(o, NULL);
4134 o = newLISTOP(OP_LIST, 0, o, NULL);
4136 op_sibling_splice(o, cLISTOPo->op_last, 0, rest);
4144 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
4146 Constructs, checks, and returns an op of any list type. I<type> is
4147 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4148 C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
4149 supply up to two ops to be direct children of the list op; they are
4150 consumed by this function and become part of the constructed op tree.
4156 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4161 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
4163 NewOp(1101, listop, 1, LISTOP);
4165 listop->op_type = (OPCODE)type;
4166 listop->op_ppaddr = PL_ppaddr[type];
4169 listop->op_flags = (U8)flags;
4173 else if (!first && last)
4176 OP_SIBLING_set(first, last);
4177 listop->op_first = first;
4178 listop->op_last = last;
4179 if (type == OP_LIST) {
4180 OP* const pushop = newOP(OP_PUSHMARK, 0);
4181 pushop->op_lastsib = 0;
4182 OP_SIBLING_set(pushop, first);
4183 listop->op_first = pushop;
4184 listop->op_flags |= OPf_KIDS;
4186 listop->op_last = pushop;
4189 first->op_lastsib = 0;
4190 if (listop->op_last) {
4191 listop->op_last->op_lastsib = 1;
4192 #ifdef PERL_OP_PARENT
4193 listop->op_last->op_sibling = (OP*)listop;
4197 return CHECKOP(type, listop);
4201 =for apidoc Am|OP *|newOP|I32 type|I32 flags
4203 Constructs, checks, and returns an op of any base type (any type that
4204 has no extra fields). I<type> is the opcode. I<flags> gives the
4205 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
4212 Perl_newOP(pTHX_ I32 type, I32 flags)
4217 if (type == -OP_ENTEREVAL) {
4218 type = OP_ENTEREVAL;
4219 flags |= OPpEVAL_BYTES<<8;
4222 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
4223 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4224 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4225 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4227 NewOp(1101, o, 1, OP);
4228 o->op_type = (OPCODE)type;
4229 o->op_ppaddr = PL_ppaddr[type];
4230 o->op_flags = (U8)flags;
4233 o->op_private = (U8)(0 | (flags >> 8));
4234 if (PL_opargs[type] & OA_RETSCALAR)
4236 if (PL_opargs[type] & OA_TARGET)
4237 o->op_targ = pad_alloc(type, SVs_PADTMP);
4238 return CHECKOP(type, o);
4242 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
4244 Constructs, checks, and returns an op of any unary type. I<type> is
4245 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4246 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
4247 bits, the eight bits of C<op_private>, except that the bit with value 1
4248 is automatically set. I<first> supplies an optional op to be the direct
4249 child of the unary op; it is consumed by this function and become part
4250 of the constructed op tree.
4256 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
4261 if (type == -OP_ENTEREVAL) {
4262 type = OP_ENTEREVAL;
4263 flags |= OPpEVAL_BYTES<<8;
4266 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
4267 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4268 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4269 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
4270 || type == OP_SASSIGN
4271 || type == OP_ENTERTRY
4272 || type == OP_NULL );
4275 first = newOP(OP_STUB, 0);
4276 if (PL_opargs[type] & OA_MARK)
4277 first = force_list(first, 1);
4279 NewOp(1101, unop, 1, UNOP);
4280 unop->op_type = (OPCODE)type;
4281 unop->op_ppaddr = PL_ppaddr[type];
4282 unop->op_first = first;
4283 unop->op_flags = (U8)(flags | OPf_KIDS);
4284 unop->op_private = (U8)(1 | (flags >> 8));
4286 #ifdef PERL_OP_PARENT
4287 if (!OP_HAS_SIBLING(first)) /* true unless weird syntax error */
4288 first->op_sibling = (OP*)unop;
4291 unop = (UNOP*) CHECKOP(type, unop);
4295 return fold_constants(op_integerize(op_std_init((OP *) unop)));
4299 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
4301 Constructs, checks, and returns an op of any binary type. I<type>
4302 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
4303 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
4304 the eight bits of C<op_private>, except that the bit with value 1 or
4305 2 is automatically set as required. I<first> and I<last> supply up to
4306 two ops to be the direct children of the binary op; they are consumed
4307 by this function and become part of the constructed op tree.
4313 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4318 ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
4319 || type == OP_SASSIGN || type == OP_NULL );
4321 NewOp(1101, binop, 1, BINOP);
4324 first = newOP(OP_NULL, 0);
4326 binop->op_type = (OPCODE)type;
4327 binop->op_ppaddr = PL_ppaddr[type];
4328 binop->op_first = first;
4329 binop->op_flags = (U8)(flags | OPf_KIDS);
4332 binop->op_private = (U8)(1 | (flags >> 8));
4335 binop->op_private = (U8)(2 | (flags >> 8));
4336 OP_SIBLING_set(first, last);
4337 first->op_lastsib = 0;
4340 #ifdef PERL_OP_PARENT
4341 if (!OP_HAS_SIBLING(last)) /* true unless weird syntax error */
4342 last->op_sibling = (OP*)binop;
4345 binop = (BINOP*)CHECKOP(type, binop);
4346 if (binop->op_next || binop->op_type != (OPCODE)type)
4349 binop->op_last = OP_SIBLING(binop->op_first);
4350 #ifdef PERL_OP_PARENT
4352 binop->op_last->op_sibling = (OP*)binop;
4355 return fold_constants(op_integerize(op_std_init((OP *)binop)));
4358 static int uvcompare(const void *a, const void *b)
4359 __attribute__nonnull__(1)
4360 __attribute__nonnull__(2)
4361 __attribute__pure__;
4362 static int uvcompare(const void *a, const void *b)
4364 if (*((const UV *)a) < (*(const UV *)b))
4366 if (*((const UV *)a) > (*(const UV *)b))
4368 if (*((const UV *)a+1) < (*(const UV *)b+1))
4370 if (*((const UV *)a+1) > (*(const UV *)b+1))
4376 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
4378 SV * const tstr = ((SVOP*)expr)->op_sv;
4380 ((SVOP*)repl)->op_sv;
4383 const U8 *t = (U8*)SvPV_const(tstr, tlen);
4384 const U8 *r = (U8*)SvPV_const(rstr, rlen);
4390 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
4391 const I32 squash = o->op_private & OPpTRANS_SQUASH;
4392 I32 del = o->op_private & OPpTRANS_DELETE;
4395 PERL_ARGS_ASSERT_PMTRANS;
4397 PL_hints |= HINT_BLOCK_SCOPE;
4400 o->op_private |= OPpTRANS_FROM_UTF;
4403 o->op_private |= OPpTRANS_TO_UTF;
4405 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
4406 SV* const listsv = newSVpvs("# comment\n");
4408 const U8* tend = t + tlen;
4409 const U8* rend = r + rlen;
4423 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
4424 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
4427 const U32 flags = UTF8_ALLOW_DEFAULT;
4431 t = tsave = bytes_to_utf8(t, &len);
4434 if (!to_utf && rlen) {
4436 r = rsave = bytes_to_utf8(r, &len);
4440 /* There is a snag with this code on EBCDIC: scan_const() in toke.c has
4441 * encoded chars in native encoding which makes ranges in the EBCDIC 0..255
4445 U8 tmpbuf[UTF8_MAXBYTES+1];
4448 Newx(cp, 2*tlen, UV);
4450 transv = newSVpvs("");
4452 cp[2*i] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
4454 if (t < tend && *t == ILLEGAL_UTF8_BYTE) {
4456 cp[2*i+1] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
4460 cp[2*i+1] = cp[2*i];
4464 qsort(cp, i, 2*sizeof(UV), uvcompare);
4465 for (j = 0; j < i; j++) {
4467 diff = val - nextmin;
4469 t = uvchr_to_utf8(tmpbuf,nextmin);
4470 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4472 U8 range_mark = ILLEGAL_UTF8_BYTE;
4473 t = uvchr_to_utf8(tmpbuf, val - 1);
4474 sv_catpvn(transv, (char *)&range_mark, 1);
4475 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4482 t = uvchr_to_utf8(tmpbuf,nextmin);
4483 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4485 U8 range_mark = ILLEGAL_UTF8_BYTE;
4486 sv_catpvn(transv, (char *)&range_mark, 1);
4488 t = uvchr_to_utf8(tmpbuf, 0x7fffffff);
4489 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4490 t = (const U8*)SvPVX_const(transv);
4491 tlen = SvCUR(transv);
4495 else if (!rlen && !del) {
4496 r = t; rlen = tlen; rend = tend;
4499 if ((!rlen && !del) || t == r ||
4500 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
4502 o->op_private |= OPpTRANS_IDENTICAL;
4506 while (t < tend || tfirst <= tlast) {
4507 /* see if we need more "t" chars */
4508 if (tfirst > tlast) {
4509 tfirst = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
4511 if (t < tend && *t == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
4513 tlast = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
4520 /* now see if we need more "r" chars */
4521 if (rfirst > rlast) {
4523 rfirst = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
4525 if (r < rend && *r == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
4527 rlast = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
4536 rfirst = rlast = 0xffffffff;
4540 /* now see which range will peter our first, if either. */
4541 tdiff = tlast - tfirst;
4542 rdiff = rlast - rfirst;
4549 if (rfirst == 0xffffffff) {
4550 diff = tdiff; /* oops, pretend rdiff is infinite */
4552 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
4553 (long)tfirst, (long)tlast);
4555 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
4559 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
4560 (long)tfirst, (long)(tfirst + diff),
4563 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
4564 (long)tfirst, (long)rfirst);
4566 if (rfirst + diff > max)
4567 max = rfirst + diff;
4569 grows = (tfirst < rfirst &&
4570 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
4582 else if (max > 0xff)
4587 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
4589 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVf_READONLY);
4590 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
4591 PAD_SETSV(cPADOPo->op_padix, swash);
4593 SvREADONLY_on(swash);
4595 cSVOPo->op_sv = swash;
4597 SvREFCNT_dec(listsv);
4598 SvREFCNT_dec(transv);
4600 if (!del && havefinal && rlen)
4601 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
4602 newSVuv((UV)final), 0);
4605 o->op_private |= OPpTRANS_GROWS;
4615 tbl = (short*)PerlMemShared_calloc(
4616 (o->op_private & OPpTRANS_COMPLEMENT) &&
4617 !(o->op_private & OPpTRANS_DELETE) ? 258 : 256,
4619 cPVOPo->op_pv = (char*)tbl;
4621 for (i = 0; i < (I32)tlen; i++)
4623 for (i = 0, j = 0; i < 256; i++) {
4625 if (j >= (I32)rlen) {
4634 if (i < 128 && r[j] >= 128)
4644 o->op_private |= OPpTRANS_IDENTICAL;
4646 else if (j >= (I32)rlen)
4651 PerlMemShared_realloc(tbl,
4652 (0x101+rlen-j) * sizeof(short));
4653 cPVOPo->op_pv = (char*)tbl;
4655 tbl[0x100] = (short)(rlen - j);
4656 for (i=0; i < (I32)rlen - j; i++)
4657 tbl[0x101+i] = r[j+i];
4661 if (!rlen && !del) {
4664 o->op_private |= OPpTRANS_IDENTICAL;
4666 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
4667 o->op_private |= OPpTRANS_IDENTICAL;
4669 for (i = 0; i < 256; i++)
4671 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
4672 if (j >= (I32)rlen) {
4674 if (tbl[t[i]] == -1)
4680 if (tbl[t[i]] == -1) {
4681 if (t[i] < 128 && r[j] >= 128)
4688 if(del && rlen == tlen) {
4689 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
4690 } else if(rlen > tlen && !complement) {
4691 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
4695 o->op_private |= OPpTRANS_GROWS;
4703 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
4705 Constructs, checks, and returns an op of any pattern matching type.
4706 I<type> is the opcode. I<flags> gives the eight bits of C<op_flags>
4707 and, shifted up eight bits, the eight bits of C<op_private>.
4713 Perl_newPMOP(pTHX_ I32 type, I32 flags)
4718 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
4720 NewOp(1101, pmop, 1, PMOP);
4721 pmop->op_type = (OPCODE)type;
4722 pmop->op_ppaddr = PL_ppaddr[type];
4723 pmop->op_flags = (U8)flags;
4724 pmop->op_private = (U8)(0 | (flags >> 8));
4726 if (PL_hints & HINT_RE_TAINT)
4727 pmop->op_pmflags |= PMf_RETAINT;
4728 #ifdef USE_LOCALE_CTYPE
4729 if (IN_LC_COMPILETIME(LC_CTYPE)) {
4730 set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET);
4735 set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
4737 if (PL_hints & HINT_RE_FLAGS) {
4738 SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4739 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
4741 if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
4742 reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4743 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0
4745 if (reflags && SvOK(reflags)) {
4746 set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
4752 assert(SvPOK(PL_regex_pad[0]));
4753 if (SvCUR(PL_regex_pad[0])) {
4754 /* Pop off the "packed" IV from the end. */
4755 SV *const repointer_list = PL_regex_pad[0];
4756 const char *p = SvEND(repointer_list) - sizeof(IV);
4757 const IV offset = *((IV*)p);
4759 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
4761 SvEND_set(repointer_list, p);
4763 pmop->op_pmoffset = offset;
4764 /* This slot should be free, so assert this: */
4765 assert(PL_regex_pad[offset] == &PL_sv_undef);
4767 SV * const repointer = &PL_sv_undef;
4768 av_push(PL_regex_padav, repointer);
4769 pmop->op_pmoffset = av_tindex(PL_regex_padav);
4770 PL_regex_pad = AvARRAY(PL_regex_padav);
4774 return CHECKOP(type, pmop);
4777 /* Given some sort of match op o, and an expression expr containing a
4778 * pattern, either compile expr into a regex and attach it to o (if it's
4779 * constant), or convert expr into a runtime regcomp op sequence (if it's
4782 * isreg indicates that the pattern is part of a regex construct, eg
4783 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
4784 * split "pattern", which aren't. In the former case, expr will be a list
4785 * if the pattern contains more than one term (eg /a$b/) or if it contains
4786 * a replacement, ie s/// or tr///.
4788 * When the pattern has been compiled within a new anon CV (for
4789 * qr/(?{...})/ ), then floor indicates the savestack level just before
4790 * the new sub was created
4794 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg, I32 floor)
4799 I32 repl_has_vars = 0;
4801 bool is_trans = (o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
4802 bool is_compiletime;
4805 PERL_ARGS_ASSERT_PMRUNTIME;
4807 /* for s/// and tr///, last element in list is the replacement; pop it */
4809 if (is_trans || o->op_type == OP_SUBST) {
4811 repl = cLISTOPx(expr)->op_last;
4812 kid = cLISTOPx(expr)->op_first;
4813 while (OP_SIBLING(kid) != repl)
4814 kid = OP_SIBLING(kid);
4815 op_sibling_splice(expr, kid, 1, NULL);
4818 /* for TRANS, convert LIST/PUSH/CONST into CONST, and pass to pmtrans() */
4823 assert(expr->op_type == OP_LIST);
4824 first = cLISTOPx(expr)->op_first;
4825 last = cLISTOPx(expr)->op_last;
4826 assert(first->op_type == OP_PUSHMARK);
4827 assert(OP_SIBLING(first) == last);
4829 /* cut 'last' from sibling chain, then free everything else */
4830 op_sibling_splice(expr, first, 1, NULL);
4833 return pmtrans(o, last, repl);
4836 /* find whether we have any runtime or code elements;
4837 * at the same time, temporarily set the op_next of each DO block;
4838 * then when we LINKLIST, this will cause the DO blocks to be excluded
4839 * from the op_next chain (and from having LINKLIST recursively
4840 * applied to them). We fix up the DOs specially later */
4844 if (expr->op_type == OP_LIST) {
4846 for (o = cLISTOPx(expr)->op_first; o; o = OP_SIBLING(o)) {
4847 if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)) {
4849 assert(!o->op_next && OP_HAS_SIBLING(o));
4850 o->op_next = OP_SIBLING(o);
4852 else if (o->op_type != OP_CONST && o->op_type != OP_PUSHMARK)
4856 else if (expr->op_type != OP_CONST)