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_no_fh_allowed(pTHX_ OP *o)
502 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
504 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
510 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
512 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
513 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
518 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
520 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
522 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
527 S_bad_type_pv(pTHX_ I32 n, const char *t, const char *name, U32 flags, const OP *kid)
529 PERL_ARGS_ASSERT_BAD_TYPE_PV;
531 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
532 (int)n, name, t, OP_DESC(kid)), flags);
536 S_bad_type_gv(pTHX_ I32 n, const char *t, GV *gv, U32 flags, const OP *kid)
538 SV * const namesv = cv_name((CV *)gv, NULL, 0);
539 PERL_ARGS_ASSERT_BAD_TYPE_GV;
541 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %"SVf" must be %s (not %s)",
542 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv) | flags);
546 S_no_bareword_allowed(pTHX_ OP *o)
548 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
550 qerror(Perl_mess(aTHX_
551 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
553 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
556 /* "register" allocation */
559 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
562 const bool is_our = (PL_parser->in_my == KEY_our);
564 PERL_ARGS_ASSERT_ALLOCMY;
566 if (flags & ~SVf_UTF8)
567 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
570 /* complain about "my $<special_var>" etc etc */
574 ((flags & SVf_UTF8) && isIDFIRST_utf8((U8 *)name+1)) ||
575 (name[1] == '_' && (*name == '$' || len > 2))))
577 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
578 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
579 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
580 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
581 PL_parser->in_my == KEY_state ? "state" : "my"));
583 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
584 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
587 else if (len == 2 && name[1] == '_' && !is_our)
588 /* diag_listed_as: Use of my $_ is experimental */
589 Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__LEXICAL_TOPIC),
590 "Use of %s $_ is experimental",
591 PL_parser->in_my == KEY_state
595 /* allocate a spare slot and store the name in that slot */
597 off = pad_add_name_pvn(name, len,
598 (is_our ? padadd_OUR :
599 PL_parser->in_my == KEY_state ? padadd_STATE : 0)
600 | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ),
601 PL_parser->in_my_stash,
603 /* $_ is always in main::, even with our */
604 ? (PL_curstash && !memEQs(name,len,"$_")
610 /* anon sub prototypes contains state vars should always be cloned,
611 * otherwise the state var would be shared between anon subs */
613 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
614 CvCLONE_on(PL_compcv);
620 =head1 Optree Manipulation Functions
622 =for apidoc alloccopstash
624 Available only under threaded builds, this function allocates an entry in
625 C<PL_stashpad> for the stash passed to it.
632 Perl_alloccopstash(pTHX_ HV *hv)
634 PADOFFSET off = 0, o = 1;
635 bool found_slot = FALSE;
637 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
639 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
641 for (; o < PL_stashpadmax; ++o) {
642 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
643 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
644 found_slot = TRUE, off = o;
647 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
648 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
649 off = PL_stashpadmax;
650 PL_stashpadmax += 10;
653 PL_stashpad[PL_stashpadix = off] = hv;
658 /* free the body of an op without examining its contents.
659 * Always use this rather than FreeOp directly */
662 S_op_destroy(pTHX_ OP *o)
670 =for apidoc Am|void|op_free|OP *o
672 Free an op. Only use this when an op is no longer linked to from any
679 Perl_op_free(pTHX_ OP *o)
686 /* Though ops may be freed twice, freeing the op after its slab is a
688 assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
689 /* During the forced freeing of ops after compilation failure, kidops
690 may be freed before their parents. */
691 if (!o || o->op_type == OP_FREED)
696 /* an op should only ever acquire op_private flags that we know about.
697 * If this fails, you may need to fix something in regen/op_private */
698 assert(!(o->op_private & ~PL_op_private_valid[type]));
700 if (o->op_private & OPpREFCOUNTED) {
711 refcnt = OpREFCNT_dec(o);
714 /* Need to find and remove any pattern match ops from the list
715 we maintain for reset(). */
716 find_and_forget_pmops(o);
726 /* Call the op_free hook if it has been set. Do it now so that it's called
727 * at the right time for refcounted ops, but still before all of the kids
731 if (o->op_flags & OPf_KIDS) {
733 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
734 nextkid = OP_SIBLING(kid); /* Get before next freeing kid */
739 type = (OPCODE)o->op_targ;
742 Slab_to_rw(OpSLAB(o));
744 /* COP* is not cleared by op_clear() so that we may track line
745 * numbers etc even after null() */
746 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
752 #ifdef DEBUG_LEAKING_SCALARS
759 Perl_op_clear(pTHX_ OP *o)
764 PERL_ARGS_ASSERT_OP_CLEAR;
766 switch (o->op_type) {
767 case OP_NULL: /* Was holding old type, if any. */
770 case OP_ENTEREVAL: /* Was holding hints. */
774 if (!(o->op_flags & OPf_REF)
775 || (PL_check[o->op_type] != Perl_ck_ftst))
782 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
787 /* It's possible during global destruction that the GV is freed
788 before the optree. Whilst the SvREFCNT_inc is happy to bump from
789 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
790 will trigger an assertion failure, because the entry to sv_clear
791 checks that the scalar is not already freed. A check of for
792 !SvIS_FREED(gv) turns out to be invalid, because during global
793 destruction the reference count can be forced down to zero
794 (with SVf_BREAK set). In which case raising to 1 and then
795 dropping to 0 triggers cleanup before it should happen. I
796 *think* that this might actually be a general, systematic,
797 weakness of the whole idea of SVf_BREAK, in that code *is*
798 allowed to raise and lower references during global destruction,
799 so any *valid* code that happens to do this during global
800 destruction might well trigger premature cleanup. */
801 bool still_valid = gv && SvREFCNT(gv);
804 SvREFCNT_inc_simple_void(gv);
806 if (cPADOPo->op_padix > 0) {
807 pad_swipe(cPADOPo->op_padix, TRUE);
808 cPADOPo->op_padix = 0;
811 SvREFCNT_dec(cSVOPo->op_sv);
812 cSVOPo->op_sv = NULL;
815 int try_downgrade = SvREFCNT(gv) == 2;
818 gv_try_downgrade(gv);
822 case OP_METHOD_NAMED:
823 SvREFCNT_dec(cMETHOPx(o)->op_u.op_meth_sv);
824 cMETHOPx(o)->op_u.op_meth_sv = NULL;
827 pad_swipe(o->op_targ, 1);
834 SvREFCNT_dec(cSVOPo->op_sv);
835 cSVOPo->op_sv = NULL;
838 Even if op_clear does a pad_free for the target of the op,
839 pad_free doesn't actually remove the sv that exists in the pad;
840 instead it lives on. This results in that it could be reused as
841 a target later on when the pad was reallocated.
844 pad_swipe(o->op_targ,1);
854 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
859 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
860 assert(o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
862 if (cPADOPo->op_padix > 0) {
863 pad_swipe(cPADOPo->op_padix, TRUE);
864 cPADOPo->op_padix = 0;
867 SvREFCNT_dec(cSVOPo->op_sv);
868 cSVOPo->op_sv = NULL;
872 PerlMemShared_free(cPVOPo->op_pv);
873 cPVOPo->op_pv = NULL;
877 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
881 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
882 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
885 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
891 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
892 op_free(cPMOPo->op_code_list);
893 cPMOPo->op_code_list = NULL;
895 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
896 /* we use the same protection as the "SAFE" version of the PM_ macros
897 * here since sv_clean_all might release some PMOPs
898 * after PL_regex_padav has been cleared
899 * and the clearing of PL_regex_padav needs to
900 * happen before sv_clean_all
903 if(PL_regex_pad) { /* We could be in destruction */
904 const IV offset = (cPMOPo)->op_pmoffset;
905 ReREFCNT_dec(PM_GETRE(cPMOPo));
906 PL_regex_pad[offset] = &PL_sv_undef;
907 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
911 ReREFCNT_dec(PM_GETRE(cPMOPo));
912 PM_SETRE(cPMOPo, NULL);
918 if (o->op_targ > 0) {
919 pad_free(o->op_targ);
925 S_cop_free(pTHX_ COP* cop)
927 PERL_ARGS_ASSERT_COP_FREE;
930 if (! specialWARN(cop->cop_warnings))
931 PerlMemShared_free(cop->cop_warnings);
932 cophh_free(CopHINTHASH_get(cop));
933 if (PL_curcop == cop)
938 S_forget_pmop(pTHX_ PMOP *const o
941 HV * const pmstash = PmopSTASH(o);
943 PERL_ARGS_ASSERT_FORGET_PMOP;
945 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
946 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
948 PMOP **const array = (PMOP**) mg->mg_ptr;
949 U32 count = mg->mg_len / sizeof(PMOP**);
954 /* Found it. Move the entry at the end to overwrite it. */
955 array[i] = array[--count];
956 mg->mg_len = count * sizeof(PMOP**);
957 /* Could realloc smaller at this point always, but probably
958 not worth it. Probably worth free()ing if we're the
961 Safefree(mg->mg_ptr);
974 S_find_and_forget_pmops(pTHX_ OP *o)
976 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
978 if (o->op_flags & OPf_KIDS) {
979 OP *kid = cUNOPo->op_first;
981 switch (kid->op_type) {
986 forget_pmop((PMOP*)kid);
988 find_and_forget_pmops(kid);
989 kid = OP_SIBLING(kid);
995 =for apidoc Am|void|op_null|OP *o
997 Neutralizes an op when it is no longer needed, but is still linked to from
1004 Perl_op_null(pTHX_ OP *o)
1008 PERL_ARGS_ASSERT_OP_NULL;
1010 if (o->op_type == OP_NULL)
1013 o->op_targ = o->op_type;
1014 o->op_type = OP_NULL;
1015 o->op_ppaddr = PL_ppaddr[OP_NULL];
1019 Perl_op_refcnt_lock(pTHX)
1024 PERL_UNUSED_CONTEXT;
1029 Perl_op_refcnt_unlock(pTHX)
1034 PERL_UNUSED_CONTEXT;
1040 =for apidoc op_sibling_splice
1042 A general function for editing the structure of an existing chain of
1043 op_sibling nodes. By analogy with the perl-level splice() function, allows
1044 you to delete zero or more sequential nodes, replacing them with zero or
1045 more different nodes. Performs the necessary op_first/op_last
1046 housekeeping on the parent node and op_sibling manipulation on the
1047 children. The last deleted node will be marked as as the last node by
1048 updating the op_sibling or op_lastsib field as appropriate.
1050 Note that op_next is not manipulated, and nodes are not freed; that is the
1051 responsibility of the caller. It also won't create a new list op for an
1052 empty list etc; use higher-level functions like op_append_elem() for that.
1054 parent is the parent node of the sibling chain.
1056 start is the node preceding the first node to be spliced. Node(s)
1057 following it will be deleted, and ops will be inserted after it. If it is
1058 NULL, the first node onwards is deleted, and nodes are inserted at the
1061 del_count is the number of nodes to delete. If zero, no nodes are deleted.
1062 If -1 or greater than or equal to the number of remaining kids, all
1063 remaining kids are deleted.
1065 insert is the first of a chain of nodes to be inserted in place of the nodes.
1066 If NULL, no nodes are inserted.
1068 The head of the chain of deleted ops is returned, or NULL if no ops were
1073 action before after returns
1074 ------ ----- ----- -------
1077 splice(P, A, 2, X-Y-Z) | | B-C
1081 splice(P, NULL, 1, X-Y) | | A
1085 splice(P, NULL, 3, NULL) | | A-B-C
1089 splice(P, B, 0, X-Y) | | NULL
1096 Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert)
1098 OP *first = start ? OP_SIBLING(start) : cLISTOPx(parent)->op_first;
1100 OP *last_del = NULL;
1101 OP *last_ins = NULL;
1103 PERL_ARGS_ASSERT_OP_SIBLING_SPLICE;
1105 assert(del_count >= -1);
1107 if (del_count && first) {
1109 while (--del_count && OP_HAS_SIBLING(last_del))
1110 last_del = OP_SIBLING(last_del);
1111 rest = OP_SIBLING(last_del);
1112 OP_SIBLING_set(last_del, NULL);
1113 last_del->op_lastsib = 1;
1120 while (OP_HAS_SIBLING(last_ins))
1121 last_ins = OP_SIBLING(last_ins);
1122 OP_SIBLING_set(last_ins, rest);
1123 last_ins->op_lastsib = rest ? 0 : 1;
1129 OP_SIBLING_set(start, insert);
1130 start->op_lastsib = insert ? 0 : 1;
1133 cLISTOPx(parent)->op_first = insert;
1136 /* update op_last etc */
1137 U32 type = parent->op_type;
1140 if (type == OP_NULL)
1141 type = parent->op_targ;
1142 type = PL_opargs[type] & OA_CLASS_MASK;
1144 lastop = last_ins ? last_ins : start ? start : NULL;
1145 if ( type == OA_BINOP
1146 || type == OA_LISTOP
1150 cLISTOPx(parent)->op_last = lastop;
1153 lastop->op_lastsib = 1;
1154 #ifdef PERL_OP_PARENT
1155 lastop->op_sibling = parent;
1159 return last_del ? first : NULL;
1163 =for apidoc op_parent
1165 returns the parent OP of o, if it has a parent. Returns NULL otherwise.
1166 (Currently perl must be built with C<-DPERL_OP_PARENT> for this feature to
1173 Perl_op_parent(OP *o)
1175 PERL_ARGS_ASSERT_OP_PARENT;
1176 #ifdef PERL_OP_PARENT
1177 while (OP_HAS_SIBLING(o))
1179 return o->op_sibling;
1187 /* replace the sibling following start with a new UNOP, which becomes
1188 * the parent of the original sibling; e.g.
1190 * op_sibling_newUNOP(P, A, unop-args...)
1198 * where U is the new UNOP.
1200 * parent and start args are the same as for op_sibling_splice();
1201 * type and flags args are as newUNOP().
1203 * Returns the new UNOP.
1207 S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags)
1211 kid = op_sibling_splice(parent, start, 1, NULL);
1212 newop = newUNOP(type, flags, kid);
1213 op_sibling_splice(parent, start, 0, newop);
1218 /* lowest-level newLOGOP-style function - just allocates and populates
1219 * the struct. Higher-level stuff should be done by S_new_logop() /
1220 * newLOGOP(). This function exists mainly to avoid op_first assignment
1221 * being spread throughout this file.
1225 S_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
1229 NewOp(1101, logop, 1, LOGOP);
1230 logop->op_type = (OPCODE)type;
1231 logop->op_first = first;
1232 logop->op_other = other;
1233 logop->op_flags = OPf_KIDS;
1234 while (kid && OP_HAS_SIBLING(kid))
1235 kid = OP_SIBLING(kid);
1237 kid->op_lastsib = 1;
1238 #ifdef PERL_OP_PARENT
1239 kid->op_sibling = (OP*)logop;
1246 /* Contextualizers */
1249 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1251 Applies a syntactic context to an op tree representing an expression.
1252 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
1253 or C<G_VOID> to specify the context to apply. The modified op tree
1260 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1262 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1264 case G_SCALAR: return scalar(o);
1265 case G_ARRAY: return list(o);
1266 case G_VOID: return scalarvoid(o);
1268 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1275 =for apidoc Am|OP*|op_linklist|OP *o
1276 This function is the implementation of the L</LINKLIST> macro. It should
1277 not be called directly.
1283 Perl_op_linklist(pTHX_ OP *o)
1287 PERL_ARGS_ASSERT_OP_LINKLIST;
1292 /* establish postfix order */
1293 first = cUNOPo->op_first;
1296 o->op_next = LINKLIST(first);
1299 OP *sibl = OP_SIBLING(kid);
1301 kid->op_next = LINKLIST(sibl);
1316 S_scalarkids(pTHX_ OP *o)
1318 if (o && o->op_flags & OPf_KIDS) {
1320 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1327 S_scalarboolean(pTHX_ OP *o)
1329 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1331 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
1332 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
1333 if (ckWARN(WARN_SYNTAX)) {
1334 const line_t oldline = CopLINE(PL_curcop);
1336 if (PL_parser && PL_parser->copline != NOLINE) {
1337 /* This ensures that warnings are reported at the first line
1338 of the conditional, not the last. */
1339 CopLINE_set(PL_curcop, PL_parser->copline);
1341 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1342 CopLINE_set(PL_curcop, oldline);
1349 S_op_varname(pTHX_ const OP *o)
1352 assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV ||
1353 o->op_type == OP_PADHV || o->op_type == OP_RV2HV);
1355 const char funny = o->op_type == OP_PADAV
1356 || o->op_type == OP_RV2AV ? '@' : '%';
1357 if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) {
1359 if (cUNOPo->op_first->op_type != OP_GV
1360 || !(gv = cGVOPx_gv(cUNOPo->op_first)))
1362 return varname(gv, funny, 0, NULL, 0, 1);
1365 varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, 1);
1370 S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv)
1371 { /* or not so pretty :-) */
1372 if (o->op_type == OP_CONST) {
1374 if (SvPOK(*retsv)) {
1376 *retsv = sv_newmortal();
1377 pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL,
1378 PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT);
1380 else if (!SvOK(*retsv))
1383 else *retpv = "...";
1387 S_scalar_slice_warning(pTHX_ const OP *o)
1391 o->op_type == OP_HSLICE ? '{' : '[';
1393 o->op_type == OP_HSLICE ? '}' : ']';
1395 SV *keysv = NULL; /* just to silence compiler warnings */
1396 const char *key = NULL;
1398 if (!(o->op_private & OPpSLICEWARNING))
1400 if (PL_parser && PL_parser->error_count)
1401 /* This warning can be nonsensical when there is a syntax error. */
1404 kid = cLISTOPo->op_first;
1405 kid = OP_SIBLING(kid); /* get past pushmark */
1406 /* weed out false positives: any ops that can return lists */
1407 switch (kid->op_type) {
1436 /* Don't warn if we have a nulled list either. */
1437 if (kid->op_type == OP_NULL && kid->op_targ == OP_LIST)
1440 assert(OP_SIBLING(kid));
1441 name = S_op_varname(aTHX_ OP_SIBLING(kid));
1442 if (!name) /* XS module fiddling with the op tree */
1444 S_op_pretty(aTHX_ kid, &keysv, &key);
1445 assert(SvPOK(name));
1446 sv_chop(name,SvPVX(name)+1);
1448 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1449 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1450 "Scalar value @%"SVf"%c%s%c better written as $%"SVf
1452 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1453 lbrack, key, rbrack);
1455 /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */
1456 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1457 "Scalar value @%"SVf"%c%"SVf"%c better written as $%"
1459 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1460 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1464 Perl_scalar(pTHX_ OP *o)
1468 /* assumes no premature commitment */
1469 if (!o || (PL_parser && PL_parser->error_count)
1470 || (o->op_flags & OPf_WANT)
1471 || o->op_type == OP_RETURN)
1476 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1478 switch (o->op_type) {
1480 scalar(cBINOPo->op_first);
1485 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1495 if (o->op_flags & OPf_KIDS) {
1496 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid))
1502 kid = cLISTOPo->op_first;
1504 kid = OP_SIBLING(kid);
1507 OP *sib = OP_SIBLING(kid);
1508 if (sib && kid->op_type != OP_LEAVEWHEN)
1514 PL_curcop = &PL_compiling;
1519 kid = cLISTOPo->op_first;
1522 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1527 /* Warn about scalar context */
1528 const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
1529 const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
1532 const char *key = NULL;
1534 /* This warning can be nonsensical when there is a syntax error. */
1535 if (PL_parser && PL_parser->error_count)
1538 if (!ckWARN(WARN_SYNTAX)) break;
1540 kid = cLISTOPo->op_first;
1541 kid = OP_SIBLING(kid); /* get past pushmark */
1542 assert(OP_SIBLING(kid));
1543 name = S_op_varname(aTHX_ OP_SIBLING(kid));
1544 if (!name) /* XS module fiddling with the op tree */
1546 S_op_pretty(aTHX_ kid, &keysv, &key);
1547 assert(SvPOK(name));
1548 sv_chop(name,SvPVX(name)+1);
1550 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1551 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1552 "%%%"SVf"%c%s%c in scalar context better written "
1554 SVfARG(name), lbrack, key, rbrack, SVfARG(name),
1555 lbrack, key, rbrack);
1557 /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
1558 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1559 "%%%"SVf"%c%"SVf"%c in scalar context better "
1560 "written as $%"SVf"%c%"SVf"%c",
1561 SVfARG(name), lbrack, SVfARG(keysv), rbrack,
1562 SVfARG(name), lbrack, SVfARG(keysv), rbrack);
1569 Perl_scalarvoid(pTHX_ OP *o)
1573 SV *useless_sv = NULL;
1574 const char* useless = NULL;
1578 PERL_ARGS_ASSERT_SCALARVOID;
1580 if (o->op_type == OP_NEXTSTATE
1581 || o->op_type == OP_DBSTATE
1582 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1583 || o->op_targ == OP_DBSTATE)))
1584 PL_curcop = (COP*)o; /* for warning below */
1586 /* assumes no premature commitment */
1587 want = o->op_flags & OPf_WANT;
1588 if ((want && want != OPf_WANT_SCALAR)
1589 || (PL_parser && PL_parser->error_count)
1590 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1595 if ((o->op_private & OPpTARGET_MY)
1596 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1598 return scalar(o); /* As if inside SASSIGN */
1601 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1603 switch (o->op_type) {
1605 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1609 if (o->op_flags & OPf_STACKED)
1613 if (o->op_private == 4)
1638 case OP_AELEMFAST_LEX:
1659 case OP_GETSOCKNAME:
1660 case OP_GETPEERNAME:
1665 case OP_GETPRIORITY:
1690 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1691 /* Otherwise it's "Useless use of grep iterator" */
1692 useless = OP_DESC(o);
1696 kid = cLISTOPo->op_first;
1697 if (kid && kid->op_type == OP_PUSHRE
1699 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1701 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1703 useless = OP_DESC(o);
1707 kid = cUNOPo->op_first;
1708 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1709 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1712 useless = "negative pattern binding (!~)";
1716 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1717 useless = "non-destructive substitution (s///r)";
1721 useless = "non-destructive transliteration (tr///r)";
1728 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1729 (!OP_HAS_SIBLING(o) || OP_SIBLING(o)->op_type != OP_READLINE))
1730 useless = "a variable";
1735 if (cSVOPo->op_private & OPpCONST_STRICT)
1736 no_bareword_allowed(o);
1738 if (ckWARN(WARN_VOID)) {
1740 /* don't warn on optimised away booleans, eg
1741 * use constant Foo, 5; Foo || print; */
1742 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1744 /* the constants 0 and 1 are permitted as they are
1745 conventionally used as dummies in constructs like
1746 1 while some_condition_with_side_effects; */
1747 else if (SvNIOK(sv) && ((nv = SvNV(sv)) == 0.0 || nv == 1.0))
1749 else if (SvPOK(sv)) {
1750 SV * const dsv = newSVpvs("");
1752 = Perl_newSVpvf(aTHX_
1754 pv_pretty(dsv, SvPVX_const(sv),
1755 SvCUR(sv), 32, NULL, NULL,
1757 | PERL_PV_ESCAPE_NOCLEAR
1758 | PERL_PV_ESCAPE_UNI_DETECT));
1759 SvREFCNT_dec_NN(dsv);
1761 else if (SvOK(sv)) {
1762 useless_sv = Perl_newSVpvf(aTHX_ "a constant (%"SVf")", SVfARG(sv));
1765 useless = "a constant (undef)";
1768 op_null(o); /* don't execute or even remember it */
1772 o->op_type = OP_PREINC; /* pre-increment is faster */
1773 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1777 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1778 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1782 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1783 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1787 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1788 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1793 UNOP *refgen, *rv2cv;
1796 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
1799 rv2gv = ((BINOP *)o)->op_last;
1800 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
1803 refgen = (UNOP *)((BINOP *)o)->op_first;
1805 if (!refgen || refgen->op_type != OP_REFGEN)
1808 exlist = (LISTOP *)refgen->op_first;
1809 if (!exlist || exlist->op_type != OP_NULL
1810 || exlist->op_targ != OP_LIST)
1813 if (exlist->op_first->op_type != OP_PUSHMARK)
1816 rv2cv = (UNOP*)exlist->op_last;
1818 if (rv2cv->op_type != OP_RV2CV)
1821 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
1822 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
1823 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
1825 o->op_private |= OPpASSIGN_CV_TO_GV;
1826 rv2gv->op_private |= OPpDONT_INIT_GV;
1827 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
1839 kid = cLOGOPo->op_first;
1840 if (kid->op_type == OP_NOT
1841 && (kid->op_flags & OPf_KIDS)) {
1842 if (o->op_type == OP_AND) {
1844 o->op_ppaddr = PL_ppaddr[OP_OR];
1846 o->op_type = OP_AND;
1847 o->op_ppaddr = PL_ppaddr[OP_AND];
1857 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1862 if (o->op_flags & OPf_STACKED)
1869 if (!(o->op_flags & OPf_KIDS))
1880 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1891 /* mortalise it, in case warnings are fatal. */
1892 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
1893 "Useless use of %"SVf" in void context",
1894 SVfARG(sv_2mortal(useless_sv)));
1897 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
1898 "Useless use of %s in void context",
1905 S_listkids(pTHX_ OP *o)
1907 if (o && o->op_flags & OPf_KIDS) {
1909 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1916 Perl_list(pTHX_ OP *o)
1920 /* assumes no premature commitment */
1921 if (!o || (o->op_flags & OPf_WANT)
1922 || (PL_parser && PL_parser->error_count)
1923 || o->op_type == OP_RETURN)
1928 if ((o->op_private & OPpTARGET_MY)
1929 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1931 return o; /* As if inside SASSIGN */
1934 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1936 switch (o->op_type) {
1939 list(cBINOPo->op_first);
1944 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1952 if (!(o->op_flags & OPf_KIDS))
1954 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1955 list(cBINOPo->op_first);
1956 return gen_constant_list(o);
1963 kid = cLISTOPo->op_first;
1965 kid = OP_SIBLING(kid);
1968 OP *sib = OP_SIBLING(kid);
1969 if (sib && kid->op_type != OP_LEAVEWHEN)
1975 PL_curcop = &PL_compiling;
1979 kid = cLISTOPo->op_first;
1986 S_scalarseq(pTHX_ OP *o)
1989 const OPCODE type = o->op_type;
1991 if (type == OP_LINESEQ || type == OP_SCOPE ||
1992 type == OP_LEAVE || type == OP_LEAVETRY)
1995 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid)) {
1996 if (OP_HAS_SIBLING(kid)) {
2000 PL_curcop = &PL_compiling;
2002 o->op_flags &= ~OPf_PARENS;
2003 if (PL_hints & HINT_BLOCK_SCOPE)
2004 o->op_flags |= OPf_PARENS;
2007 o = newOP(OP_STUB, 0);
2012 S_modkids(pTHX_ OP *o, I32 type)
2014 if (o && o->op_flags & OPf_KIDS) {
2016 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2017 op_lvalue(kid, type);
2023 =for apidoc finalize_optree
2025 This function finalizes the optree. Should be called directly after
2026 the complete optree is built. It does some additional
2027 checking which can't be done in the normal ck_xxx functions and makes
2028 the tree thread-safe.
2033 Perl_finalize_optree(pTHX_ OP* o)
2035 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
2038 SAVEVPTR(PL_curcop);
2046 /* Relocate sv to the pad for thread safety.
2047 * Despite being a "constant", the SV is written to,
2048 * for reference counts, sv_upgrade() etc. */
2049 PERL_STATIC_INLINE void
2050 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
2053 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
2055 ix = pad_alloc(OP_CONST, SVf_READONLY);
2056 SvREFCNT_dec(PAD_SVl(ix));
2057 PAD_SETSV(ix, *svp);
2058 /* XXX I don't know how this isn't readonly already. */
2059 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
2067 S_finalize_op(pTHX_ OP* o)
2069 PERL_ARGS_ASSERT_FINALIZE_OP;
2072 switch (o->op_type) {
2075 PL_curcop = ((COP*)o); /* for warnings */
2078 if (OP_HAS_SIBLING(o)) {
2079 OP *sib = OP_SIBLING(o);
2080 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
2081 && ckWARN(WARN_EXEC)
2082 && OP_HAS_SIBLING(sib))
2084 const OPCODE type = OP_SIBLING(sib)->op_type;
2085 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
2086 const line_t oldline = CopLINE(PL_curcop);
2087 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
2088 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2089 "Statement unlikely to be reached");
2090 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2091 "\t(Maybe you meant system() when you said exec()?)\n");
2092 CopLINE_set(PL_curcop, oldline);
2099 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
2100 GV * const gv = cGVOPo_gv;
2101 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
2102 /* XXX could check prototype here instead of just carping */
2103 SV * const sv = sv_newmortal();
2104 gv_efullname3(sv, gv, NULL);
2105 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
2106 "%"SVf"() called too early to check prototype",
2113 if (cSVOPo->op_private & OPpCONST_STRICT)
2114 no_bareword_allowed(o);
2118 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
2123 /* Relocate all the METHOP's SVs to the pad for thread safety. */
2124 case OP_METHOD_NAMED:
2125 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
2137 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
2140 rop = (UNOP*)((BINOP*)o)->op_first;
2145 S_scalar_slice_warning(aTHX_ o);
2149 kid = OP_SIBLING(cLISTOPo->op_first);
2150 if (/* I bet there's always a pushmark... */
2151 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
2152 && OP_TYPE_ISNT_NN(kid, OP_CONST))
2157 key_op = (SVOP*)(kid->op_type == OP_CONST
2159 : OP_SIBLING(kLISTOP->op_first));
2161 rop = (UNOP*)((LISTOP*)o)->op_last;
2164 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
2166 else if (rop->op_first->op_type == OP_PADSV)
2167 /* @$hash{qw(keys here)} */
2168 rop = (UNOP*)rop->op_first;
2170 /* @{$hash}{qw(keys here)} */
2171 if (rop->op_first->op_type == OP_SCOPE
2172 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2174 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2180 lexname = NULL; /* just to silence compiler warnings */
2181 fields = NULL; /* just to silence compiler warnings */
2185 && (lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE),
2186 SvPAD_TYPED(lexname))
2187 && (fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE))
2188 && isGV(*fields) && GvHV(*fields);
2190 key_op = (SVOP*)OP_SIBLING(key_op)) {
2192 if (key_op->op_type != OP_CONST)
2194 svp = cSVOPx_svp(key_op);
2196 /* Make the CONST have a shared SV */
2197 if ((!SvIsCOW_shared_hash(sv = *svp))
2198 && SvTYPE(sv) < SVt_PVMG && SvOK(sv) && !SvROK(sv)) {
2200 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2201 SV *nsv = newSVpvn_share(key,
2202 SvUTF8(sv) ? -keylen : keylen, 0);
2203 SvREFCNT_dec_NN(sv);
2208 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0)) {
2209 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
2210 "in variable %"SVf" of type %"HEKf,
2211 SVfARG(*svp), SVfARG(lexname),
2212 HEKfARG(HvNAME_HEK(SvSTASH(lexname))));
2218 S_scalar_slice_warning(aTHX_ o);
2222 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
2223 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
2230 if (o->op_flags & OPf_KIDS) {
2234 /* check that op_last points to the last sibling, and that
2235 * the last op_sibling field points back to the parent, and
2236 * that the only ops with KIDS are those which are entitled to
2238 U32 type = o->op_type;
2242 if (type == OP_NULL) {
2244 /* ck_glob creates a null UNOP with ex-type GLOB
2245 * (which is a list op. So pretend it wasn't a listop */
2246 if (type == OP_GLOB)
2249 family = PL_opargs[type] & OA_CLASS_MASK;
2251 has_last = ( family == OA_BINOP
2252 || family == OA_LISTOP
2253 || family == OA_PMOP
2254 || family == OA_LOOP
2256 assert( has_last /* has op_first and op_last, or ...
2257 ... has (or may have) op_first: */
2258 || family == OA_UNOP
2259 || family == OA_LOGOP
2260 || family == OA_BASEOP_OR_UNOP
2261 || family == OA_FILESTATOP
2262 || family == OA_LOOPEXOP
2263 || family == OA_METHOP
2264 /* I don't know why SASSIGN is tagged as OA_BASEOP - DAPM */
2265 || type == OP_SASSIGN
2266 || type == OP_CUSTOM
2267 || type == OP_NULL /* new_logop does this */
2269 /* XXX list form of 'x' is has a null op_last. This is wrong,
2270 * but requires too much hacking (e.g. in Deparse) to fix for
2272 if (type == OP_REPEAT && (o->op_private & OPpREPEAT_DOLIST)) {
2277 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2278 # ifdef PERL_OP_PARENT
2279 if (!OP_HAS_SIBLING(kid)) {
2281 assert(kid == cLISTOPo->op_last);
2282 assert(kid->op_sibling == o);
2285 if (OP_HAS_SIBLING(kid)) {
2286 assert(!kid->op_lastsib);
2289 assert(kid->op_lastsib);
2291 assert(kid == cLISTOPo->op_last);
2297 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid))
2303 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
2305 Propagate lvalue ("modifiable") context to an op and its children.
2306 I<type> represents the context type, roughly based on the type of op that
2307 would do the modifying, although C<local()> is represented by OP_NULL,
2308 because it has no op type of its own (it is signalled by a flag on
2311 This function detects things that can't be modified, such as C<$x+1>, and
2312 generates errors for them. For example, C<$x+1 = 2> would cause it to be
2313 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
2315 It also flags things that need to behave specially in an lvalue context,
2316 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
2322 S_vivifies(const OPCODE type)
2325 case OP_RV2AV: case OP_ASLICE:
2326 case OP_RV2HV: case OP_KVASLICE:
2327 case OP_RV2SV: case OP_HSLICE:
2328 case OP_AELEMFAST: case OP_KVHSLICE:
2337 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
2341 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
2344 if (!o || (PL_parser && PL_parser->error_count))
2347 if ((o->op_private & OPpTARGET_MY)
2348 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2353 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
2355 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
2357 switch (o->op_type) {
2362 if ((o->op_flags & OPf_PARENS))
2366 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
2367 !(o->op_flags & OPf_STACKED)) {
2368 o->op_type = OP_RV2CV; /* entersub => rv2cv */
2369 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
2370 assert(cUNOPo->op_first->op_type == OP_NULL);
2371 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
2374 else { /* lvalue subroutine call */
2375 o->op_private |= OPpLVAL_INTRO;
2376 PL_modcount = RETURN_UNLIMITED_NUMBER;
2377 if (type == OP_GREPSTART || type == OP_ENTERSUB
2378 || type == OP_REFGEN || type == OP_LEAVESUBLV) {
2379 /* Potential lvalue context: */
2380 o->op_private |= OPpENTERSUB_INARGS;
2383 else { /* Compile-time error message: */
2384 OP *kid = cUNOPo->op_first;
2388 if (kid->op_type != OP_PUSHMARK) {
2389 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
2391 "panic: unexpected lvalue entersub "
2392 "args: type/targ %ld:%"UVuf,
2393 (long)kid->op_type, (UV)kid->op_targ);
2394 kid = kLISTOP->op_first;
2396 while (OP_HAS_SIBLING(kid))
2397 kid = OP_SIBLING(kid);
2398 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
2399 break; /* Postpone until runtime */
2402 kid = kUNOP->op_first;
2403 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
2404 kid = kUNOP->op_first;
2405 if (kid->op_type == OP_NULL)
2407 "Unexpected constant lvalue entersub "
2408 "entry via type/targ %ld:%"UVuf,
2409 (long)kid->op_type, (UV)kid->op_targ);
2410 if (kid->op_type != OP_GV) {
2417 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
2418 ? MUTABLE_CV(SvRV(gv))
2429 if (flags & OP_LVALUE_NO_CROAK) return NULL;
2430 /* grep, foreach, subcalls, refgen */
2431 if (type == OP_GREPSTART || type == OP_ENTERSUB
2432 || type == OP_REFGEN || type == OP_LEAVESUBLV)
2434 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2435 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
2437 : (o->op_type == OP_ENTERSUB
2438 ? "non-lvalue subroutine call"
2440 type ? PL_op_desc[type] : "local"));
2454 case OP_RIGHT_SHIFT:
2463 if (!(o->op_flags & OPf_STACKED))
2470 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
2471 op_lvalue(kid, type);
2476 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
2477 PL_modcount = RETURN_UNLIMITED_NUMBER;
2478 return o; /* Treat \(@foo) like ordinary list. */
2482 if (scalar_mod_type(o, type))
2484 ref(cUNOPo->op_first, o->op_type);
2491 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
2492 if (type == OP_LEAVESUBLV && (
2493 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
2494 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2496 o->op_private |= OPpMAYBE_LVSUB;
2500 PL_modcount = RETURN_UNLIMITED_NUMBER;
2504 if (type == OP_LEAVESUBLV)
2505 o->op_private |= OPpMAYBE_LVSUB;
2508 PL_hints |= HINT_BLOCK_SCOPE;
2509 if (type == OP_LEAVESUBLV)
2510 o->op_private |= OPpMAYBE_LVSUB;
2514 ref(cUNOPo->op_first, o->op_type);
2518 PL_hints |= HINT_BLOCK_SCOPE;
2528 case OP_AELEMFAST_LEX:
2535 PL_modcount = RETURN_UNLIMITED_NUMBER;
2536 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
2537 return o; /* Treat \(@foo) like ordinary list. */
2538 if (scalar_mod_type(o, type))
2540 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2541 && type == OP_LEAVESUBLV)
2542 o->op_private |= OPpMAYBE_LVSUB;
2546 if (!type) /* local() */
2547 Perl_croak(aTHX_ "Can't localize lexical variable %"SVf,
2548 PAD_COMPNAME_SV(o->op_targ));
2557 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
2561 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
2567 if (type == OP_LEAVESUBLV)
2568 o->op_private |= OPpMAYBE_LVSUB;
2569 if (o->op_flags & OPf_KIDS)
2570 op_lvalue(OP_SIBLING(cBINOPo->op_first), type);
2575 ref(cBINOPo->op_first, o->op_type);
2576 if (type == OP_ENTERSUB &&
2577 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
2578 o->op_private |= OPpLVAL_DEFER;
2579 if (type == OP_LEAVESUBLV)
2580 o->op_private |= OPpMAYBE_LVSUB;
2587 o->op_private |= OPpLVALUE;
2593 if (o->op_flags & OPf_KIDS)
2594 op_lvalue(cLISTOPo->op_last, type);
2599 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2601 else if (!(o->op_flags & OPf_KIDS))
2603 if (o->op_targ != OP_LIST) {
2604 op_lvalue(cBINOPo->op_first, type);
2610 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2611 /* elements might be in void context because the list is
2612 in scalar context or because they are attribute sub calls */
2613 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
2614 op_lvalue(kid, type);
2622 if (type == OP_LEAVESUBLV
2623 || !S_vivifies(cLOGOPo->op_first->op_type))
2624 op_lvalue(cLOGOPo->op_first, type);
2625 if (type == OP_LEAVESUBLV
2626 || !S_vivifies(OP_SIBLING(cLOGOPo->op_first)->op_type))
2627 op_lvalue(OP_SIBLING(cLOGOPo->op_first), type);
2631 /* [20011101.069] File test operators interpret OPf_REF to mean that
2632 their argument is a filehandle; thus \stat(".") should not set
2634 if (type == OP_REFGEN &&
2635 PL_check[o->op_type] == Perl_ck_ftst)
2638 if (type != OP_LEAVESUBLV)
2639 o->op_flags |= OPf_MOD;
2641 if (type == OP_AASSIGN || type == OP_SASSIGN)
2642 o->op_flags |= OPf_SPECIAL|OPf_REF;
2643 else if (!type) { /* local() */
2646 o->op_private |= OPpLVAL_INTRO;
2647 o->op_flags &= ~OPf_SPECIAL;
2648 PL_hints |= HINT_BLOCK_SCOPE;
2653 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
2654 "Useless localization of %s", OP_DESC(o));
2657 else if (type != OP_GREPSTART && type != OP_ENTERSUB
2658 && type != OP_LEAVESUBLV)
2659 o->op_flags |= OPf_REF;
2664 S_scalar_mod_type(const OP *o, I32 type)
2669 if (o && o->op_type == OP_RV2GV)
2693 case OP_RIGHT_SHIFT:
2714 S_is_handle_constructor(const OP *o, I32 numargs)
2716 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
2718 switch (o->op_type) {
2726 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
2739 S_refkids(pTHX_ OP *o, I32 type)
2741 if (o && o->op_flags & OPf_KIDS) {
2743 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2750 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
2755 PERL_ARGS_ASSERT_DOREF;
2757 if (!o || (PL_parser && PL_parser->error_count))
2760 switch (o->op_type) {
2762 if ((type == OP_EXISTS || type == OP_DEFINED) &&
2763 !(o->op_flags & OPf_STACKED)) {
2764 o->op_type = OP_RV2CV; /* entersub => rv2cv */
2765 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
2766 assert(cUNOPo->op_first->op_type == OP_NULL);
2767 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
2768 o->op_flags |= OPf_SPECIAL;
2770 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
2771 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2772 : type == OP_RV2HV ? OPpDEREF_HV
2774 o->op_flags |= OPf_MOD;
2780 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
2781 doref(kid, type, set_op_ref);
2784 if (type == OP_DEFINED)
2785 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2786 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2789 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2790 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2791 : type == OP_RV2HV ? OPpDEREF_HV
2793 o->op_flags |= OPf_MOD;
2800 o->op_flags |= OPf_REF;
2803 if (type == OP_DEFINED)
2804 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2805 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2811 o->op_flags |= OPf_REF;
2816 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
2818 doref(cBINOPo->op_first, type, set_op_ref);
2822 doref(cBINOPo->op_first, o->op_type, set_op_ref);
2823 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2824 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2825 : type == OP_RV2HV ? OPpDEREF_HV
2827 o->op_flags |= OPf_MOD;
2837 if (!(o->op_flags & OPf_KIDS))
2839 doref(cLISTOPo->op_last, type, set_op_ref);
2849 S_dup_attrlist(pTHX_ OP *o)
2853 PERL_ARGS_ASSERT_DUP_ATTRLIST;
2855 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
2856 * where the first kid is OP_PUSHMARK and the remaining ones
2857 * are OP_CONST. We need to push the OP_CONST values.
2859 if (o->op_type == OP_CONST)
2860 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
2862 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
2864 for (o = cLISTOPo->op_first; o; o = OP_SIBLING(o)) {
2865 if (o->op_type == OP_CONST)
2866 rop = op_append_elem(OP_LIST, rop,
2867 newSVOP(OP_CONST, o->op_flags,
2868 SvREFCNT_inc_NN(cSVOPo->op_sv)));
2875 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
2877 SV * const stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2879 PERL_ARGS_ASSERT_APPLY_ATTRS;
2881 /* fake up C<use attributes $pkg,$rv,@attrs> */
2883 #define ATTRSMODULE "attributes"
2884 #define ATTRSMODULE_PM "attributes.pm"
2886 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2887 newSVpvs(ATTRSMODULE),
2889 op_prepend_elem(OP_LIST,
2890 newSVOP(OP_CONST, 0, stashsv),
2891 op_prepend_elem(OP_LIST,
2892 newSVOP(OP_CONST, 0,
2894 dup_attrlist(attrs))));
2898 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
2900 OP *pack, *imop, *arg;
2901 SV *meth, *stashsv, **svp;
2903 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
2908 assert(target->op_type == OP_PADSV ||
2909 target->op_type == OP_PADHV ||
2910 target->op_type == OP_PADAV);
2912 /* Ensure that attributes.pm is loaded. */
2913 /* Don't force the C<use> if we don't need it. */
2914 svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
2915 if (svp && *svp != &PL_sv_undef)
2916 NOOP; /* already in %INC */
2918 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
2919 newSVpvs(ATTRSMODULE), NULL);
2921 /* Need package name for method call. */
2922 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
2924 /* Build up the real arg-list. */
2925 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2927 arg = newOP(OP_PADSV, 0);
2928 arg->op_targ = target->op_targ;
2929 arg = op_prepend_elem(OP_LIST,
2930 newSVOP(OP_CONST, 0, stashsv),
2931 op_prepend_elem(OP_LIST,
2932 newUNOP(OP_REFGEN, 0,
2933 op_lvalue(arg, OP_REFGEN)),
2934 dup_attrlist(attrs)));
2936 /* Fake up a method call to import */
2937 meth = newSVpvs_share("import");
2938 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2939 op_append_elem(OP_LIST,
2940 op_prepend_elem(OP_LIST, pack, list(arg)),
2941 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
2943 /* Combine the ops. */
2944 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
2948 =notfor apidoc apply_attrs_string
2950 Attempts to apply a list of attributes specified by the C<attrstr> and
2951 C<len> arguments to the subroutine identified by the C<cv> argument which
2952 is expected to be associated with the package identified by the C<stashpv>
2953 argument (see L<attributes>). It gets this wrong, though, in that it
2954 does not correctly identify the boundaries of the individual attribute
2955 specifications within C<attrstr>. This is not really intended for the
2956 public API, but has to be listed here for systems such as AIX which
2957 need an explicit export list for symbols. (It's called from XS code
2958 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2959 to respect attribute syntax properly would be welcome.
2965 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2966 const char *attrstr, STRLEN len)
2970 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2973 len = strlen(attrstr);
2977 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2979 const char * const sstr = attrstr;
2980 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2981 attrs = op_append_elem(OP_LIST, attrs,
2982 newSVOP(OP_CONST, 0,
2983 newSVpvn(sstr, attrstr-sstr)));
2987 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2988 newSVpvs(ATTRSMODULE),
2989 NULL, op_prepend_elem(OP_LIST,
2990 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2991 op_prepend_elem(OP_LIST,
2992 newSVOP(OP_CONST, 0,
2993 newRV(MUTABLE_SV(cv))),
2998 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name)
3000 OP *new_proto = NULL;
3005 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
3011 if (o->op_type == OP_CONST) {
3012 pv = SvPV(cSVOPo_sv, pvlen);
3013 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3014 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3015 SV ** const tmpo = cSVOPx_svp(o);
3016 SvREFCNT_dec(cSVOPo_sv);
3021 } else if (o->op_type == OP_LIST) {
3023 assert(o->op_flags & OPf_KIDS);
3024 lasto = cLISTOPo->op_first;
3025 assert(lasto->op_type == OP_PUSHMARK);
3026 for (o = OP_SIBLING(lasto); o; o = OP_SIBLING(o)) {
3027 if (o->op_type == OP_CONST) {
3028 pv = SvPV(cSVOPo_sv, pvlen);
3029 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3030 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3031 SV ** const tmpo = cSVOPx_svp(o);
3032 SvREFCNT_dec(cSVOPo_sv);
3034 if (new_proto && ckWARN(WARN_MISC)) {
3036 const char * newp = SvPV(cSVOPo_sv, new_len);
3037 Perl_warner(aTHX_ packWARN(WARN_MISC),
3038 "Attribute prototype(%"UTF8f") discards earlier prototype attribute in same sub",
3039 UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
3045 /* excise new_proto from the list */
3046 op_sibling_splice(*attrs, lasto, 1, NULL);
3053 /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
3054 would get pulled in with no real need */
3055 if (!OP_HAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
3064 svname = sv_newmortal();
3065 gv_efullname3(svname, name, NULL);
3067 else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
3068 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
3070 svname = (SV *)name;
3071 if (ckWARN(WARN_ILLEGALPROTO))
3072 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE);
3073 if (*proto && ckWARN(WARN_PROTOTYPE)) {
3074 STRLEN old_len, new_len;
3075 const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
3076 const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
3078 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3079 "Prototype '%"UTF8f"' overridden by attribute 'prototype(%"UTF8f")'"
3081 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
3082 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
3092 S_cant_declare(pTHX_ OP *o)
3094 if (o->op_type == OP_NULL
3095 && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
3096 o = cUNOPo->op_first;
3097 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
3098 o->op_type == OP_NULL
3099 && o->op_flags & OPf_SPECIAL
3102 PL_parser->in_my == KEY_our ? "our" :
3103 PL_parser->in_my == KEY_state ? "state" :
3108 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
3111 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
3113 PERL_ARGS_ASSERT_MY_KID;
3115 if (!o || (PL_parser && PL_parser->error_count))
3120 if (type == OP_LIST) {
3122 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
3123 my_kid(kid, attrs, imopsp);
3125 } else if (type == OP_UNDEF || type == OP_STUB) {
3127 } else if (type == OP_RV2SV || /* "our" declaration */
3129 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
3130 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
3131 S_cant_declare(aTHX_ o);
3133 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
3135 PL_parser->in_my = FALSE;
3136 PL_parser->in_my_stash = NULL;
3137 apply_attrs(GvSTASH(gv),
3138 (type == OP_RV2SV ? GvSV(gv) :
3139 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
3140 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
3143 o->op_private |= OPpOUR_INTRO;
3146 else if (type != OP_PADSV &&
3149 type != OP_PUSHMARK)
3151 S_cant_declare(aTHX_ o);
3154 else if (attrs && type != OP_PUSHMARK) {
3158 PL_parser->in_my = FALSE;
3159 PL_parser->in_my_stash = NULL;
3161 /* check for C<my Dog $spot> when deciding package */
3162 stash = PAD_COMPNAME_TYPE(o->op_targ);
3164 stash = PL_curstash;
3165 apply_attrs_my(stash, o, attrs, imopsp);
3167 o->op_flags |= OPf_MOD;
3168 o->op_private |= OPpLVAL_INTRO;
3170 o->op_private |= OPpPAD_STATE;
3175 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
3178 int maybe_scalar = 0;
3180 PERL_ARGS_ASSERT_MY_ATTRS;
3182 /* [perl #17376]: this appears to be premature, and results in code such as
3183 C< our(%x); > executing in list mode rather than void mode */
3185 if (o->op_flags & OPf_PARENS)
3195 o = my_kid(o, attrs, &rops);
3197 if (maybe_scalar && o->op_type == OP_PADSV) {
3198 o = scalar(op_append_list(OP_LIST, rops, o));
3199 o->op_private |= OPpLVAL_INTRO;
3202 /* The listop in rops might have a pushmark at the beginning,
3203 which will mess up list assignment. */
3204 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
3205 if (rops->op_type == OP_LIST &&
3206 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
3208 OP * const pushmark = lrops->op_first;
3209 /* excise pushmark */
3210 op_sibling_splice(rops, NULL, 1, NULL);
3213 o = op_append_list(OP_LIST, o, rops);
3216 PL_parser->in_my = FALSE;
3217 PL_parser->in_my_stash = NULL;
3222 Perl_sawparens(pTHX_ OP *o)
3224 PERL_UNUSED_CONTEXT;
3226 o->op_flags |= OPf_PARENS;
3231 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
3235 const OPCODE ltype = left->op_type;
3236 const OPCODE rtype = right->op_type;
3238 PERL_ARGS_ASSERT_BIND_MATCH;
3240 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
3241 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
3243 const char * const desc
3245 rtype == OP_SUBST || rtype == OP_TRANS
3246 || rtype == OP_TRANSR
3248 ? (int)rtype : OP_MATCH];
3249 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
3251 S_op_varname(aTHX_ left);
3253 Perl_warner(aTHX_ packWARN(WARN_MISC),
3254 "Applying %s to %"SVf" will act on scalar(%"SVf")",
3255 desc, SVfARG(name), SVfARG(name));
3257 const char * const sample = (isary
3258 ? "@array" : "%hash");
3259 Perl_warner(aTHX_ packWARN(WARN_MISC),
3260 "Applying %s to %s will act on scalar(%s)",
3261 desc, sample, sample);
3265 if (rtype == OP_CONST &&
3266 cSVOPx(right)->op_private & OPpCONST_BARE &&
3267 cSVOPx(right)->op_private & OPpCONST_STRICT)
3269 no_bareword_allowed(right);
3272 /* !~ doesn't make sense with /r, so error on it for now */
3273 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
3275 /* diag_listed_as: Using !~ with %s doesn't make sense */
3276 yyerror("Using !~ with s///r doesn't make sense");
3277 if (rtype == OP_TRANSR && type == OP_NOT)
3278 /* diag_listed_as: Using !~ with %s doesn't make sense */
3279 yyerror("Using !~ with tr///r doesn't make sense");
3281 ismatchop = (rtype == OP_MATCH ||
3282 rtype == OP_SUBST ||
3283 rtype == OP_TRANS || rtype == OP_TRANSR)
3284 && !(right->op_flags & OPf_SPECIAL);
3285 if (ismatchop && right->op_private & OPpTARGET_MY) {
3287 right->op_private &= ~OPpTARGET_MY;
3289 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
3292 right->op_flags |= OPf_STACKED;
3293 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
3294 ! (rtype == OP_TRANS &&
3295 right->op_private & OPpTRANS_IDENTICAL) &&
3296 ! (rtype == OP_SUBST &&
3297 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
3298 newleft = op_lvalue(left, rtype);
3301 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
3302 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
3304 o = op_prepend_elem(rtype, scalar(newleft), right);
3306 return newUNOP(OP_NOT, 0, scalar(o));
3310 return bind_match(type, left,
3311 pmruntime(newPMOP(OP_MATCH, 0), right, 0, 0));
3315 Perl_invert(pTHX_ OP *o)
3319 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
3323 =for apidoc Amx|OP *|op_scope|OP *o
3325 Wraps up an op tree with some additional ops so that at runtime a dynamic
3326 scope will be created. The original ops run in the new dynamic scope,
3327 and then, provided that they exit normally, the scope will be unwound.
3328 The additional ops used to create and unwind the dynamic scope will
3329 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
3330 instead if the ops are simple enough to not need the full dynamic scope
3337 Perl_op_scope(pTHX_ OP *o)
3341 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
3342 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
3343 o->op_type = OP_LEAVE;
3344 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
3346 else if (o->op_type == OP_LINESEQ) {
3348 o->op_type = OP_SCOPE;
3349 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
3350 kid = ((LISTOP*)o)->op_first;
3351 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
3354 /* The following deals with things like 'do {1 for 1}' */
3355 kid = OP_SIBLING(kid);
3357 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
3362 o = newLISTOP(OP_SCOPE, 0, o, NULL);
3368 Perl_op_unscope(pTHX_ OP *o)
3370 if (o && o->op_type == OP_LINESEQ) {
3371 OP *kid = cLISTOPo->op_first;
3372 for(; kid; kid = OP_SIBLING(kid))
3373 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
3380 Perl_block_start(pTHX_ int full)
3382 const int retval = PL_savestack_ix;
3384 pad_block_start(full);
3386 PL_hints &= ~HINT_BLOCK_SCOPE;
3387 SAVECOMPILEWARNINGS();
3388 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
3390 CALL_BLOCK_HOOKS(bhk_start, full);
3396 Perl_block_end(pTHX_ I32 floor, OP *seq)
3398 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
3399 OP* retval = scalarseq(seq);
3402 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
3406 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
3410 /* pad_leavemy has created a sequence of introcv ops for all my
3411 subs declared in the block. We have to replicate that list with
3412 clonecv ops, to deal with this situation:
3417 sub s1 { state sub foo { \&s2 } }
3420 Originally, I was going to have introcv clone the CV and turn
3421 off the stale flag. Since &s1 is declared before &s2, the
3422 introcv op for &s1 is executed (on sub entry) before the one for
3423 &s2. But the &foo sub inside &s1 (which is cloned when &s1 is
3424 cloned, since it is a state sub) closes over &s2 and expects
3425 to see it in its outer CV’s pad. If the introcv op clones &s1,
3426 then &s2 is still marked stale. Since &s1 is not active, and
3427 &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia-
3428 ble will not stay shared’ warning. Because it is the same stub
3429 that will be used when the introcv op for &s2 is executed, clos-
3430 ing over it is safe. Hence, we have to turn off the stale flag
3431 on all lexical subs in the block before we clone any of them.
3432 Hence, having introcv clone the sub cannot work. So we create a
3433 list of ops like this:
3457 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
3458 OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
3459 for (;; kid = OP_SIBLING(kid)) {
3460 OP *newkid = newOP(OP_CLONECV, 0);
3461 newkid->op_targ = kid->op_targ;
3462 o = op_append_elem(OP_LINESEQ, o, newkid);
3463 if (kid == last) break;
3465 retval = op_prepend_elem(OP_LINESEQ, o, retval);
3468 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
3474 =head1 Compile-time scope hooks
3476 =for apidoc Aox||blockhook_register
3478 Register a set of hooks to be called when the Perl lexical scope changes
3479 at compile time. See L<perlguts/"Compile-time scope hooks">.
3485 Perl_blockhook_register(pTHX_ BHK *hk)
3487 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
3489 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
3495 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
3496 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
3497 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
3500 OP * const o = newOP(OP_PADSV, 0);
3501 o->op_targ = offset;
3507 Perl_newPROG(pTHX_ OP *o)
3509 PERL_ARGS_ASSERT_NEWPROG;
3516 PL_eval_root = newUNOP(OP_LEAVEEVAL,
3517 ((PL_in_eval & EVAL_KEEPERR)
3518 ? OPf_SPECIAL : 0), o);
3520 cx = &cxstack[cxstack_ix];
3521 assert(CxTYPE(cx) == CXt_EVAL);
3523 if ((cx->blk_gimme & G_WANT) == G_VOID)
3524 scalarvoid(PL_eval_root);
3525 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
3528 scalar(PL_eval_root);
3530 PL_eval_start = op_linklist(PL_eval_root);
3531 PL_eval_root->op_private |= OPpREFCOUNTED;
3532 OpREFCNT_set(PL_eval_root, 1);
3533 PL_eval_root->op_next = 0;
3534 i = PL_savestack_ix;
3537 CALL_PEEP(PL_eval_start);
3538 finalize_optree(PL_eval_root);
3539 S_prune_chain_head(&PL_eval_start);
3541 PL_savestack_ix = i;
3544 if (o->op_type == OP_STUB) {
3545 /* This block is entered if nothing is compiled for the main
3546 program. This will be the case for an genuinely empty main
3547 program, or one which only has BEGIN blocks etc, so already
3550 Historically (5.000) the guard above was !o. However, commit
3551 f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
3552 c71fccf11fde0068, changed perly.y so that newPROG() is now
3553 called with the output of block_end(), which returns a new
3554 OP_STUB for the case of an empty optree. ByteLoader (and
3555 maybe other things) also take this path, because they set up
3556 PL_main_start and PL_main_root directly, without generating an
3559 If the parsing the main program aborts (due to parse errors,
3560 or due to BEGIN or similar calling exit), then newPROG()
3561 isn't even called, and hence this code path and its cleanups
3562 are skipped. This shouldn't make a make a difference:
3563 * a non-zero return from perl_parse is a failure, and
3564 perl_destruct() should be called immediately.
3565 * however, if exit(0) is called during the parse, then
3566 perl_parse() returns 0, and perl_run() is called. As
3567 PL_main_start will be NULL, perl_run() will return
3568 promptly, and the exit code will remain 0.
3571 PL_comppad_name = 0;
3573 S_op_destroy(aTHX_ o);
3576 PL_main_root = op_scope(sawparens(scalarvoid(o)));
3577 PL_curcop = &PL_compiling;
3578 PL_main_start = LINKLIST(PL_main_root);
3579 PL_main_root->op_private |= OPpREFCOUNTED;
3580 OpREFCNT_set(PL_main_root, 1);
3581 PL_main_root->op_next = 0;
3582 CALL_PEEP(PL_main_start);
3583 finalize_optree(PL_main_root);
3584 S_prune_chain_head(&PL_main_start);
3585 cv_forget_slab(PL_compcv);
3588 /* Register with debugger */
3590 CV * const cv = get_cvs("DB::postponed", 0);
3594 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3596 call_sv(MUTABLE_SV(cv), G_DISCARD);
3603 Perl_localize(pTHX_ OP *o, I32 lex)
3605 PERL_ARGS_ASSERT_LOCALIZE;
3607 if (o->op_flags & OPf_PARENS)
3608 /* [perl #17376]: this appears to be premature, and results in code such as
3609 C< our(%x); > executing in list mode rather than void mode */
3616 if ( PL_parser->bufptr > PL_parser->oldbufptr
3617 && PL_parser->bufptr[-1] == ','
3618 && ckWARN(WARN_PARENTHESIS))
3620 char *s = PL_parser->bufptr;
3623 /* some heuristics to detect a potential error */
3624 while (*s && (strchr(", \t\n", *s)))
3628 if (*s && strchr("@$%*", *s) && *++s
3629 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
3632 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
3634 while (*s && (strchr(", \t\n", *s)))
3640 if (sigil && (*s == ';' || *s == '=')) {
3641 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
3642 "Parentheses missing around \"%s\" list",
3644 ? (PL_parser->in_my == KEY_our
3646 : PL_parser->in_my == KEY_state
3656 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
3657 PL_parser->in_my = FALSE;
3658 PL_parser->in_my_stash = NULL;
3663 Perl_jmaybe(pTHX_ OP *o)
3665 PERL_ARGS_ASSERT_JMAYBE;
3667 if (o->op_type == OP_LIST) {
3669 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
3670 o = convert(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
3675 PERL_STATIC_INLINE OP *
3676 S_op_std_init(pTHX_ OP *o)
3678 I32 type = o->op_type;
3680 PERL_ARGS_ASSERT_OP_STD_INIT;
3682 if (PL_opargs[type] & OA_RETSCALAR)
3684 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
3685 o->op_targ = pad_alloc(type, SVs_PADTMP);
3690 PERL_STATIC_INLINE OP *
3691 S_op_integerize(pTHX_ OP *o)
3693 I32 type = o->op_type;
3695 PERL_ARGS_ASSERT_OP_INTEGERIZE;
3697 /* integerize op. */
3698 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
3701 o->op_ppaddr = PL_ppaddr[++(o->op_type)];
3704 if (type == OP_NEGATE)
3705 /* XXX might want a ck_negate() for this */
3706 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
3712 S_fold_constants(pTHX_ OP *o)
3717 VOL I32 type = o->op_type;
3722 SV * const oldwarnhook = PL_warnhook;
3723 SV * const olddiehook = PL_diehook;
3725 U8 oldwarn = PL_dowarn;
3728 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
3730 if (!(PL_opargs[type] & OA_FOLDCONST))
3739 #ifdef USE_LOCALE_CTYPE
3740 if (IN_LC_COMPILETIME(LC_CTYPE))
3749 #ifdef USE_LOCALE_COLLATE
3750 if (IN_LC_COMPILETIME(LC_COLLATE))
3755 /* XXX what about the numeric ops? */
3756 #ifdef USE_LOCALE_NUMERIC
3757 if (IN_LC_COMPILETIME(LC_NUMERIC))
3762 if (!OP_HAS_SIBLING(cLISTOPo->op_first)
3763 || OP_SIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
3766 SV * const sv = cSVOPx_sv(OP_SIBLING(cLISTOPo->op_first));
3767 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
3769 const char *s = SvPVX_const(sv);
3770 while (s < SvEND(sv)) {
3771 if (isALPHA_FOLD_EQ(*s, 'p')) goto nope;
3778 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
3781 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
3782 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
3786 if (PL_parser && PL_parser->error_count)
3787 goto nope; /* Don't try to run w/ errors */
3789 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3790 const OPCODE type = curop->op_type;
3791 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
3793 type != OP_SCALAR &&
3795 type != OP_PUSHMARK)
3801 curop = LINKLIST(o);
3802 old_next = o->op_next;
3806 oldscope = PL_scopestack_ix;
3807 create_eval_scope(G_FAKINGEVAL);
3809 /* Verify that we don't need to save it: */
3810 assert(PL_curcop == &PL_compiling);
3811 StructCopy(&PL_compiling, ¬_compiling, COP);
3812 PL_curcop = ¬_compiling;
3813 /* The above ensures that we run with all the correct hints of the
3814 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
3815 assert(IN_PERL_RUNTIME);
3816 PL_warnhook = PERL_WARNHOOK_FATAL;
3820 /* Effective $^W=1. */
3821 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
3822 PL_dowarn |= G_WARN_ON;
3827 sv = *(PL_stack_sp--);
3828 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
3829 pad_swipe(o->op_targ, FALSE);
3831 else if (SvTEMP(sv)) { /* grab mortal temp? */
3832 SvREFCNT_inc_simple_void(sv);
3835 else { assert(SvIMMORTAL(sv)); }
3838 /* Something tried to die. Abandon constant folding. */
3839 /* Pretend the error never happened. */
3841 o->op_next = old_next;
3845 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
3846 PL_warnhook = oldwarnhook;
3847 PL_diehook = olddiehook;
3848 /* XXX note that this croak may fail as we've already blown away
3849 * the stack - eg any nested evals */
3850 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
3853 PL_dowarn = oldwarn;
3854 PL_warnhook = oldwarnhook;
3855 PL_diehook = olddiehook;
3856 PL_curcop = &PL_compiling;
3858 if (PL_scopestack_ix > oldscope)
3859 delete_eval_scope();
3866 if (type == OP_STRINGIFY) SvPADTMP_off(sv);
3867 else if (!SvIMMORTAL(sv)) {
3871 if (type == OP_RV2GV)
3872 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
3875 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
3876 if (type != OP_STRINGIFY) newop->op_folded = 1;
3885 S_gen_constant_list(pTHX_ OP *o)
3889 const SSize_t oldtmps_floor = PL_tmps_floor;
3894 if (PL_parser && PL_parser->error_count)
3895 return o; /* Don't attempt to run with errors */
3897 curop = LINKLIST(o);
3900 S_prune_chain_head(&curop);
3902 Perl_pp_pushmark(aTHX);
3905 assert (!(curop->op_flags & OPf_SPECIAL));
3906 assert(curop->op_type == OP_RANGE);
3907 Perl_pp_anonlist(aTHX);
3908 PL_tmps_floor = oldtmps_floor;
3910 o->op_type = OP_RV2AV;
3911 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
3912 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
3913 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
3914 o->op_opt = 0; /* needs to be revisited in rpeep() */
3915 av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
3917 /* replace subtree with an OP_CONST */
3918 curop = ((UNOP*)o)->op_first;
3919 op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
3922 if (AvFILLp(av) != -1)
3923 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
3926 SvREADONLY_on(*svp);
3932 /* convert o (and any siblings) into a list if not already, then
3933 * convert the parent OP_LIST to type 'type', and CHECKOP() and fold it
3937 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
3940 if (type < 0) type = -type, flags |= OPf_SPECIAL;
3941 if (!o || o->op_type != OP_LIST)
3942 o = force_list(o, 0);
3944 o->op_flags &= ~OPf_WANT;
3946 if (!(PL_opargs[type] & OA_MARK))
3947 op_null(cLISTOPo->op_first);
3949 OP * const kid2 = OP_SIBLING(cLISTOPo->op_first);
3950 if (kid2 && kid2->op_type == OP_COREARGS) {
3951 op_null(cLISTOPo->op_first);
3952 kid2->op_private |= OPpCOREARGS_PUSHMARK;
3956 o->op_type = (OPCODE)type;
3957 o->op_ppaddr = PL_ppaddr[type];
3958 o->op_flags |= flags;
3960 o = CHECKOP(type, o);
3961 if (o->op_type != (unsigned)type)
3964 return fold_constants(op_integerize(op_std_init(o)));
3968 =head1 Optree Manipulation Functions
3971 /* List constructors */
3974 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
3976 Append an item to the list of ops contained directly within a list-type
3977 op, returning the lengthened list. I<first> is the list-type op,
3978 and I<last> is the op to append to the list. I<optype> specifies the
3979 intended opcode for the list. If I<first> is not already a list of the
3980 right type, it will be upgraded into one. If either I<first> or I<last>
3981 is null, the other is returned unchanged.
3987 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
3995 if (first->op_type != (unsigned)type
3996 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
3998 return newLISTOP(type, 0, first, last);
4001 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
4002 first->op_flags |= OPf_KIDS;
4007 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
4009 Concatenate the lists of ops contained directly within two list-type ops,
4010 returning the combined list. I<first> and I<last> are the list-type ops
4011 to concatenate. I<optype> specifies the intended opcode for the list.
4012 If either I<first> or I<last> is not already a list of the right type,
4013 it will be upgraded into one. If either I<first> or I<last> is null,
4014 the other is returned unchanged.
4020 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
4028 if (first->op_type != (unsigned)type)
4029 return op_prepend_elem(type, first, last);
4031 if (last->op_type != (unsigned)type)
4032 return op_append_elem(type, first, last);
4034 ((LISTOP*)first)->op_last->op_lastsib = 0;
4035 OP_SIBLING_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first);
4036 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
4037 ((LISTOP*)first)->op_last->op_lastsib = 1;
4038 #ifdef PERL_OP_PARENT
4039 ((LISTOP*)first)->op_last->op_sibling = first;
4041 first->op_flags |= (last->op_flags & OPf_KIDS);
4044 S_op_destroy(aTHX_ last);
4050 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
4052 Prepend an item to the list of ops contained directly within a list-type
4053 op, returning the lengthened list. I<first> is the op to prepend to the
4054 list, and I<last> is the list-type op. I<optype> specifies the intended
4055 opcode for the list. If I<last> is not already a list of the right type,
4056 it will be upgraded into one. If either I<first> or I<last> is null,
4057 the other is returned unchanged.
4063 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
4071 if (last->op_type == (unsigned)type) {
4072 if (type == OP_LIST) { /* already a PUSHMARK there */
4073 /* insert 'first' after pushmark */
4074 op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first);
4075 if (!(first->op_flags & OPf_PARENS))
4076 last->op_flags &= ~OPf_PARENS;
4079 op_sibling_splice(last, NULL, 0, first);
4080 last->op_flags |= OPf_KIDS;
4084 return newLISTOP(type, 0, first, last);
4091 =head1 Optree construction
4093 =for apidoc Am|OP *|newNULLLIST
4095 Constructs, checks, and returns a new C<stub> op, which represents an
4096 empty list expression.
4102 Perl_newNULLLIST(pTHX)
4104 return newOP(OP_STUB, 0);
4107 /* promote o and any siblings to be a list if its not already; i.e.
4115 * pushmark - o - A - B
4117 * If nullit it true, the list op is nulled.
4121 S_force_list(pTHX_ OP *o, bool nullit)
4123 if (!o || o->op_type != OP_LIST) {
4126 /* manually detach any siblings then add them back later */
4127 rest = OP_SIBLING(o);
4128 OP_SIBLING_set(o, NULL);
4131 o = newLISTOP(OP_LIST, 0, o, NULL);
4133 op_sibling_splice(o, cLISTOPo->op_last, 0, rest);
4141 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
4143 Constructs, checks, and returns an op of any list type. I<type> is
4144 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4145 C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
4146 supply up to two ops to be direct children of the list op; they are
4147 consumed by this function and become part of the constructed op tree.
4153 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4158 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
4160 NewOp(1101, listop, 1, LISTOP);
4162 listop->op_type = (OPCODE)type;
4163 listop->op_ppaddr = PL_ppaddr[type];
4166 listop->op_flags = (U8)flags;
4170 else if (!first && last)
4173 OP_SIBLING_set(first, last);
4174 listop->op_first = first;
4175 listop->op_last = last;
4176 if (type == OP_LIST) {
4177 OP* const pushop = newOP(OP_PUSHMARK, 0);
4178 pushop->op_lastsib = 0;
4179 OP_SIBLING_set(pushop, first);
4180 listop->op_first = pushop;
4181 listop->op_flags |= OPf_KIDS;
4183 listop->op_last = pushop;
4186 first->op_lastsib = 0;
4187 if (listop->op_last) {
4188 listop->op_last->op_lastsib = 1;
4189 #ifdef PERL_OP_PARENT
4190 listop->op_last->op_sibling = (OP*)listop;
4194 return CHECKOP(type, listop);
4198 =for apidoc Am|OP *|newOP|I32 type|I32 flags
4200 Constructs, checks, and returns an op of any base type (any type that
4201 has no extra fields). I<type> is the opcode. I<flags> gives the
4202 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
4209 Perl_newOP(pTHX_ I32 type, I32 flags)
4214 if (type == -OP_ENTEREVAL) {
4215 type = OP_ENTEREVAL;
4216 flags |= OPpEVAL_BYTES<<8;
4219 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
4220 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4221 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4222 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4224 NewOp(1101, o, 1, OP);
4225 o->op_type = (OPCODE)type;
4226 o->op_ppaddr = PL_ppaddr[type];
4227 o->op_flags = (U8)flags;
4230 o->op_private = (U8)(0 | (flags >> 8));
4231 if (PL_opargs[type] & OA_RETSCALAR)
4233 if (PL_opargs[type] & OA_TARGET)
4234 o->op_targ = pad_alloc(type, SVs_PADTMP);
4235 return CHECKOP(type, o);
4239 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
4241 Constructs, checks, and returns an op of any unary type. I<type> is
4242 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4243 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
4244 bits, the eight bits of C<op_private>, except that the bit with value 1
4245 is automatically set. I<first> supplies an optional op to be the direct
4246 child of the unary op; it is consumed by this function and become part
4247 of the constructed op tree.
4253 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
4258 if (type == -OP_ENTEREVAL) {
4259 type = OP_ENTEREVAL;
4260 flags |= OPpEVAL_BYTES<<8;
4263 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
4264 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4265 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4266 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
4267 || type == OP_SASSIGN
4268 || type == OP_ENTERTRY
4269 || type == OP_NULL );
4272 first = newOP(OP_STUB, 0);
4273 if (PL_opargs[type] & OA_MARK)
4274 first = force_list(first, 1);
4276 NewOp(1101, unop, 1, UNOP);
4277 unop->op_type = (OPCODE)type;
4278 unop->op_ppaddr = PL_ppaddr[type];
4279 unop->op_first = first;
4280 unop->op_flags = (U8)(flags | OPf_KIDS);
4281 unop->op_private = (U8)(1 | (flags >> 8));
4283 #ifdef PERL_OP_PARENT
4284 if (!OP_HAS_SIBLING(first)) /* true unless weird syntax error */
4285 first->op_sibling = (OP*)unop;
4288 unop = (UNOP*) CHECKOP(type, unop);
4292 return fold_constants(op_integerize(op_std_init((OP *) unop)));
4296 =for apidoc Am|OP *|newMETHOP|I32 type|I32 flags|OP *first
4298 Constructs, checks, and returns an op of method type with a method name
4299 evaluated at runtime. I<type> is the opcode. I<flags> gives the eight
4300 bits of C<op_flags>, except that C<OPf_KIDS> will be set automatically,
4301 and, shifted up eight bits, the eight bits of C<op_private>, except that
4302 the bit with value 1 is automatically set. I<dynamic_meth> supplies an
4303 op which evaluates method name; it is consumed by this function and
4304 become part of the constructed op tree.
4305 Supported optypes: OP_METHOD.
4311 S_newMETHOP_internal(pTHX_ I32 type, I32 flags, OP* dynamic_meth, SV* const_meth) {
4315 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_METHOP);
4317 NewOp(1101, methop, 1, METHOP);
4319 if (PL_opargs[type] & OA_MARK) dynamic_meth = force_list(dynamic_meth, 1);
4320 methop->op_flags = (U8)(flags | OPf_KIDS);
4321 methop->op_u.op_first = dynamic_meth;
4322 methop->op_private = (U8)(1 | (flags >> 8));
4326 methop->op_flags = (U8)(flags & ~OPf_KIDS);
4327 methop->op_u.op_meth_sv = const_meth;
4328 methop->op_private = (U8)(0 | (flags >> 8));
4329 methop->op_next = (OP*)methop;
4332 methop->op_type = (OPCODE)type;
4333 methop->op_ppaddr = PL_ppaddr[type];
4334 methop = (METHOP*) CHECKOP(type, methop);
4336 if (methop->op_next) return (OP*)methop;
4338 return fold_constants(op_integerize(op_std_init((OP *) methop)));
4342 Perl_newMETHOP (pTHX_ I32 type, I32 flags, OP* dynamic_meth) {
4343 PERL_ARGS_ASSERT_NEWMETHOP;
4344 return newMETHOP_internal(type, flags, dynamic_meth, NULL);
4348 =for apidoc Am|OP *|newMETHOP_named|I32 type|I32 flags|SV *const_meth
4350 Constructs, checks, and returns an op of method type with a constant
4351 method name. I<type> is the opcode. I<flags> gives the eight bits of
4352 C<op_flags>, and, shifted up eight bits, the eight bits of
4353 C<op_private>. I<const_meth> supplies a constant method name;
4354 it must be a shared COW string.
4355 Supported optypes: OP_METHOD_NAMED.
4361 Perl_newMETHOP_named (pTHX_ I32 type, I32 flags, SV* const_meth) {
4362 PERL_ARGS_ASSERT_NEWMETHOP_NAMED;
4363 return newMETHOP_internal(type, flags, NULL, const_meth);
4367 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
4369 Constructs, checks, and returns an op of any binary type. I<type>
4370 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
4371 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
4372 the eight bits of C<op_private>, except that the bit with value 1 or
4373 2 is automatically set as required. I<first> and I<last> supply up to
4374 two ops to be the direct children of the binary op; they are consumed
4375 by this function and become part of the constructed op tree.
4381 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4386 ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
4387 || type == OP_SASSIGN || type == OP_NULL );
4389 NewOp(1101, binop, 1, BINOP);
4392 first = newOP(OP_NULL, 0);
4394 binop->op_type = (OPCODE)type;
4395 binop->op_ppaddr = PL_ppaddr[type];
4396 binop->op_first = first;
4397 binop->op_flags = (U8)(flags | OPf_KIDS);
4400 binop->op_private = (U8)(1 | (flags >> 8));
4403 binop->op_private = (U8)(2 | (flags >> 8));
4404 OP_SIBLING_set(first, last);
4405 first->op_lastsib = 0;
4408 #ifdef PERL_OP_PARENT
4409 if (!OP_HAS_SIBLING(last)) /* true unless weird syntax error */
4410 last->op_sibling = (OP*)binop;
4413 binop->op_last = OP_SIBLING(binop->op_first);
4414 #ifdef PERL_OP_PARENT
4416 binop->op_last->op_sibling = (OP*)binop;
4419 binop = (BINOP*)CHECKOP(type, binop);
4420 if (binop->op_next || binop->op_type != (OPCODE)type)
4423 return fold_constants(op_integerize(op_std_init((OP *)binop)));
4426 static int uvcompare(const void *a, const void *b)
4427 __attribute__nonnull__(1)
4428 __attribute__nonnull__(2)
4429 __attribute__pure__;
4430 static int uvcompare(const void *a, const void *b)
4432 if (*((const UV *)a) < (*(const UV *)b))
4434 if (*((const UV *)a) > (*(const UV *)b))
4436 if (*((const UV *)a+1) < (*(const UV *)b+1))
4438 if (*((const UV *)a+1) > (*(const UV *)b+1))
4444 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
4446 SV * const tstr = ((SVOP*)expr)->op_sv;
4448 ((SVOP*)repl)->op_sv;
4451 const U8 *t = (U8*)SvPV_const(tstr, tlen);
4452 const U8 *r = (U8*)SvPV_const(rstr, rlen);
4458 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
4459 const I32 squash = o->op_private & OPpTRANS_SQUASH;
4460 I32 del = o->op_private & OPpTRANS_DELETE;
4463 PERL_ARGS_ASSERT_PMTRANS;
4465 PL_hints |= HINT_BLOCK_SCOPE;
4468 o->op_private |= OPpTRANS_FROM_UTF;
4471 o->op_private |= OPpTRANS_TO_UTF;
4473 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
4474 SV* const listsv = newSVpvs("# comment\n");
4476 const U8* tend = t + tlen;
4477 const U8* rend = r + rlen;
4491 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
4492 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
4495 const U32 flags = UTF8_ALLOW_DEFAULT;
4499 t = tsave = bytes_to_utf8(t, &len);
4502 if (!to_utf && rlen) {
4504 r = rsave = bytes_to_utf8(r, &len);
4508 /* There is a snag with this code on EBCDIC: scan_const() in toke.c has
4509 * encoded chars in native encoding which makes ranges in the EBCDIC 0..255
4513 U8 tmpbuf[UTF8_MAXBYTES+1];
4516 Newx(cp, 2*tlen, UV);
4518 transv = newSVpvs("");
4520 cp[2*i] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
4522 if (t < tend && *t == ILLEGAL_UTF8_BYTE) {
4524 cp[2*i+1] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
4528 cp[2*i+1] = cp[2*i];
4532 qsort(cp, i, 2*sizeof(UV), uvcompare);
4533 for (j = 0; j < i; j++) {
4535 diff = val - nextmin;
4537 t = uvchr_to_utf8(tmpbuf,nextmin);
4538 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4540 U8 range_mark = ILLEGAL_UTF8_BYTE;
4541 t = uvchr_to_utf8(tmpbuf, val - 1);
4542 sv_catpvn(transv, (char *)&range_mark, 1);
4543 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4550 t = uvchr_to_utf8(tmpbuf,nextmin);
4551 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4553 U8 range_mark = ILLEGAL_UTF8_BYTE;
4554 sv_catpvn(transv, (char *)&range_mark, 1);
4556 t = uvchr_to_utf8(tmpbuf, 0x7fffffff);
4557 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4558 t = (const U8*)SvPVX_const(transv);
4559 tlen = SvCUR(transv);
4563 else if (!rlen && !del) {
4564 r = t; rlen = tlen; rend = tend;
4567 if ((!rlen && !del) || t == r ||
4568 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
4570 o->op_private |= OPpTRANS_IDENTICAL;
4574 while (t < tend || tfirst <= tlast) {
4575 /* see if we need more "t" chars */
4576 if (tfirst > tlast) {
4577 tfirst = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
4579 if (t < tend && *t == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
4581 tlast = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
4588 /* now see if we need more "r" chars */
4589 if (rfirst > rlast) {
4591 rfirst = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
4593 if (r < rend && *r == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
4595 rlast = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
4604 rfirst = rlast = 0xffffffff;
4608 /* now see which range will peter our first, if either. */
4609 tdiff = tlast - tfirst;
4610 rdiff = rlast - rfirst;
4617 if (rfirst == 0xffffffff) {
4618 diff = tdiff; /* oops, pretend rdiff is infinite */
4620 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
4621 (long)tfirst, (long)tlast);
4623 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
4627 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
4628 (long)tfirst, (long)(tfirst + diff),
4631 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
4632 (long)tfirst, (long)rfirst);
4634 if (rfirst + diff > max)
4635 max = rfirst + diff;
4637 grows = (tfirst < rfirst &&
4638 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
4650 else if (max > 0xff)
4655 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
4657 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVf_READONLY);
4658 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
4659 PAD_SETSV(cPADOPo->op_padix, swash);
4661 SvREADONLY_on(swash);
4663 cSVOPo->op_sv = swash;
4665 SvREFCNT_dec(listsv);
4666 SvREFCNT_dec(transv);
4668 if (!del && havefinal && rlen)
4669 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
4670 newSVuv((UV)final), 0);
4673 o->op_private |= OPpTRANS_GROWS;
4683 tbl = (short*)PerlMemShared_calloc(
4684 (o->op_private & OPpTRANS_COMPLEMENT) &&
4685 !(o->op_private & OPpTRANS_DELETE) ? 258 : 256,
4687 cPVOPo->op_pv = (char*)tbl;
4689 for (i = 0; i < (I32)tlen; i++)
4691 for (i = 0, j = 0; i < 256; i++) {
4693 if (j >= (I32)rlen) {
4702 if (i < 128 && r[j] >= 128)
4712 o->op_private |= OPpTRANS_IDENTICAL;
4714 else if (j >= (I32)rlen)
4719 PerlMemShared_realloc(tbl,
4720 (0x101+rlen-j) * sizeof(short));
4721 cPVOPo->op_pv = (char*)tbl;
4723 tbl[0x100] = (short)(rlen - j);
4724 for (i=0; i < (I32)rlen - j; i++)
4725 tbl[0x101+i] = r[j+i];
4729 if (!rlen && !del) {
4732 o->op_private |= OPpTRANS_IDENTICAL;
4734 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
4735 o->op_private |= OPpTRANS_IDENTICAL;
4737 for (i = 0; i < 256; i++)
4739 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
4740 if (j >= (I32)rlen) {
4742 if (tbl[t[i]] == -1)
4748 if (tbl[t[i]] == -1) {
4749 if (t[i] < 128 && r[j] >= 128)
4756 if(del && rlen == tlen) {
4757 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
4758 } else if(rlen > tlen && !complement) {
4759 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
4763 o->op_private |= OPpTRANS_GROWS;
4771 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
4773 Constructs, checks, and returns an op of any pattern matching type.
4774 I<type> is the opcode. I<flags> gives the eight bits of C<op_flags>
4775 and, shifted up eight bits, the eight bits of C<op_private>.
4781 Perl_newPMOP(pTHX_ I32 type, I32 flags)
4786 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
4788 NewOp(1101, pmop, 1, PMOP);
4789 pmop->op_type = (OPCODE)type;
4790 pmop->op_ppaddr = PL_ppaddr[type];
4791 pmop->op_flags = (U8)flags;
4792 pmop->op_private = (U8)(0 | (flags >> 8));
4794 if (PL_hints & HINT_RE_TAINT)
4795 pmop->op_pmflags |= PMf_RETAINT;
4796 #ifdef USE_LOCALE_CTYPE
4797 if (IN_LC_COMPILETIME(LC_CTYPE)) {
4798 set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET);
4803 set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
4805 if (PL_hints & HINT_RE_FLAGS) {
4806 SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4807 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
4809 if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
4810 reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4811 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0
4813 if (reflags && SvOK(reflags)) {
4814 set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
4820 assert(SvPOK(PL_regex_pad[0]));
4821 if (SvCUR(PL_regex_pad[0])) {
4822 /* Pop off the "packed" IV from the end. */
4823 SV *const repointer_list = PL_regex_pad[0];
4824 const char *p = SvEND(repointer_list) - sizeof(IV);
4825 const IV offset = *((IV*)p);
4827 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
4829 SvEND_set(repointer_list, p);
4831 pmop->op_pmoffset = offset;
4832 /* This slot should be free, so assert this: */
4833 assert(PL_regex_pad[offset] == &PL_sv_undef);
4835 SV * const repointer = &PL_sv_undef;
4836 av_push(PL_regex_padav, repointer);
4837 pmop->op_pmoffset = av_tindex(PL_regex_padav);
4838 PL_regex_pad = AvARRAY(PL_regex_padav);
4842 return CHECKOP(type, pmop);
4845 /* Given some sort of match op o, and an expression expr containing a
4846 * pattern, either compile expr into a regex and attach it to o (if it's
4847 * constant), or convert expr into a runtime regcomp op sequence (if it's
4850 * isreg indicates that the pattern is part of a regex construct, eg
4851 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
4852 * split "pattern", which aren't. In the former case, expr will be a list
4853 * if the pattern contains more than one term (eg /a$b/) or if it contains
4854 * a replacement, ie s/// or tr///.
4856 * When the pattern has been compiled within a new anon CV (for
4857 * qr/(?{...})/ ), then floor indicates the savestack level just before
4858 * the new sub was created
4862 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg, I32 floor)