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
1806 && refgen->op_type != OP_SREFGEN))
1809 exlist = (LISTOP *)refgen->op_first;
1810 if (!exlist || exlist->op_type != OP_NULL
1811 || exlist->op_targ != OP_LIST)
1814 if (exlist->op_first->op_type != OP_PUSHMARK
1815 && exlist->op_first != exlist->op_last)
1818 rv2cv = (UNOP*)exlist->op_last;
1820 if (rv2cv->op_type != OP_RV2CV)
1823 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
1824 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
1825 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
1827 o->op_private |= OPpASSIGN_CV_TO_GV;
1828 rv2gv->op_private |= OPpDONT_INIT_GV;
1829 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
1841 kid = cLOGOPo->op_first;
1842 if (kid->op_type == OP_NOT
1843 && (kid->op_flags & OPf_KIDS)) {
1844 if (o->op_type == OP_AND) {
1846 o->op_ppaddr = PL_ppaddr[OP_OR];
1848 o->op_type = OP_AND;
1849 o->op_ppaddr = PL_ppaddr[OP_AND];
1859 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1864 if (o->op_flags & OPf_STACKED)
1871 if (!(o->op_flags & OPf_KIDS))
1882 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1893 /* mortalise it, in case warnings are fatal. */
1894 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
1895 "Useless use of %"SVf" in void context",
1896 SVfARG(sv_2mortal(useless_sv)));
1899 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
1900 "Useless use of %s in void context",
1907 S_listkids(pTHX_ OP *o)
1909 if (o && o->op_flags & OPf_KIDS) {
1911 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
1918 Perl_list(pTHX_ OP *o)
1922 /* assumes no premature commitment */
1923 if (!o || (o->op_flags & OPf_WANT)
1924 || (PL_parser && PL_parser->error_count)
1925 || o->op_type == OP_RETURN)
1930 if ((o->op_private & OPpTARGET_MY)
1931 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1933 return o; /* As if inside SASSIGN */
1936 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1938 switch (o->op_type) {
1941 list(cBINOPo->op_first);
1946 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
1954 if (!(o->op_flags & OPf_KIDS))
1956 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1957 list(cBINOPo->op_first);
1958 return gen_constant_list(o);
1965 kid = cLISTOPo->op_first;
1967 kid = OP_SIBLING(kid);
1970 OP *sib = OP_SIBLING(kid);
1971 if (sib && kid->op_type != OP_LEAVEWHEN)
1977 PL_curcop = &PL_compiling;
1981 kid = cLISTOPo->op_first;
1988 S_scalarseq(pTHX_ OP *o)
1991 const OPCODE type = o->op_type;
1993 if (type == OP_LINESEQ || type == OP_SCOPE ||
1994 type == OP_LEAVE || type == OP_LEAVETRY)
1997 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid)) {
1998 if (OP_HAS_SIBLING(kid)) {
2002 PL_curcop = &PL_compiling;
2004 o->op_flags &= ~OPf_PARENS;
2005 if (PL_hints & HINT_BLOCK_SCOPE)
2006 o->op_flags |= OPf_PARENS;
2009 o = newOP(OP_STUB, 0);
2014 S_modkids(pTHX_ OP *o, I32 type)
2016 if (o && o->op_flags & OPf_KIDS) {
2018 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2019 op_lvalue(kid, type);
2025 =for apidoc finalize_optree
2027 This function finalizes the optree. Should be called directly after
2028 the complete optree is built. It does some additional
2029 checking which can't be done in the normal ck_xxx functions and makes
2030 the tree thread-safe.
2035 Perl_finalize_optree(pTHX_ OP* o)
2037 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
2040 SAVEVPTR(PL_curcop);
2048 /* Relocate sv to the pad for thread safety.
2049 * Despite being a "constant", the SV is written to,
2050 * for reference counts, sv_upgrade() etc. */
2051 PERL_STATIC_INLINE void
2052 S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
2055 PERL_ARGS_ASSERT_OP_RELOCATE_SV;
2057 ix = pad_alloc(OP_CONST, SVf_READONLY);
2058 SvREFCNT_dec(PAD_SVl(ix));
2059 PAD_SETSV(ix, *svp);
2060 /* XXX I don't know how this isn't readonly already. */
2061 if (!SvIsCOW(PAD_SVl(ix))) SvREADONLY_on(PAD_SVl(ix));
2069 S_finalize_op(pTHX_ OP* o)
2071 PERL_ARGS_ASSERT_FINALIZE_OP;
2074 switch (o->op_type) {
2077 PL_curcop = ((COP*)o); /* for warnings */
2080 if (OP_HAS_SIBLING(o)) {
2081 OP *sib = OP_SIBLING(o);
2082 if (( sib->op_type == OP_NEXTSTATE || sib->op_type == OP_DBSTATE)
2083 && ckWARN(WARN_EXEC)
2084 && OP_HAS_SIBLING(sib))
2086 const OPCODE type = OP_SIBLING(sib)->op_type;
2087 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
2088 const line_t oldline = CopLINE(PL_curcop);
2089 CopLINE_set(PL_curcop, CopLINE((COP*)sib));
2090 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2091 "Statement unlikely to be reached");
2092 Perl_warner(aTHX_ packWARN(WARN_EXEC),
2093 "\t(Maybe you meant system() when you said exec()?)\n");
2094 CopLINE_set(PL_curcop, oldline);
2101 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
2102 GV * const gv = cGVOPo_gv;
2103 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
2104 /* XXX could check prototype here instead of just carping */
2105 SV * const sv = sv_newmortal();
2106 gv_efullname3(sv, gv, NULL);
2107 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
2108 "%"SVf"() called too early to check prototype",
2115 if (cSVOPo->op_private & OPpCONST_STRICT)
2116 no_bareword_allowed(o);
2120 op_relocate_sv(&cSVOPo->op_sv, &o->op_targ);
2125 /* Relocate all the METHOP's SVs to the pad for thread safety. */
2126 case OP_METHOD_NAMED:
2127 op_relocate_sv(&cMETHOPx(o)->op_u.op_meth_sv, &o->op_targ);
2139 if ((key_op = cSVOPx(((BINOP*)o)->op_last))->op_type != OP_CONST)
2142 rop = (UNOP*)((BINOP*)o)->op_first;
2147 S_scalar_slice_warning(aTHX_ o);
2151 kid = OP_SIBLING(cLISTOPo->op_first);
2152 if (/* I bet there's always a pushmark... */
2153 OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST)
2154 && OP_TYPE_ISNT_NN(kid, OP_CONST))
2159 key_op = (SVOP*)(kid->op_type == OP_CONST
2161 : OP_SIBLING(kLISTOP->op_first));
2163 rop = (UNOP*)((LISTOP*)o)->op_last;
2166 if (o->op_private & OPpLVAL_INTRO || rop->op_type != OP_RV2HV)
2168 else if (rop->op_first->op_type == OP_PADSV)
2169 /* @$hash{qw(keys here)} */
2170 rop = (UNOP*)rop->op_first;
2172 /* @{$hash}{qw(keys here)} */
2173 if (rop->op_first->op_type == OP_SCOPE
2174 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
2176 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
2182 lexname = NULL; /* just to silence compiler warnings */
2183 fields = NULL; /* just to silence compiler warnings */
2187 && (lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE),
2188 SvPAD_TYPED(lexname))
2189 && (fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE))
2190 && isGV(*fields) && GvHV(*fields);
2192 key_op = (SVOP*)OP_SIBLING(key_op)) {
2194 if (key_op->op_type != OP_CONST)
2196 svp = cSVOPx_svp(key_op);
2198 /* Make the CONST have a shared SV */
2199 if ((!SvIsCOW_shared_hash(sv = *svp))
2200 && SvTYPE(sv) < SVt_PVMG && SvOK(sv) && !SvROK(sv)) {
2202 const char * const key = SvPV_const(sv, *(STRLEN*)&keylen);
2203 SV *nsv = newSVpvn_share(key,
2204 SvUTF8(sv) ? -keylen : keylen, 0);
2205 SvREFCNT_dec_NN(sv);
2210 && !hv_fetch_ent(GvHV(*fields), *svp, FALSE, 0)) {
2211 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
2212 "in variable %"SVf" of type %"HEKf,
2213 SVfARG(*svp), SVfARG(lexname),
2214 HEKfARG(HvNAME_HEK(SvSTASH(lexname))));
2220 S_scalar_slice_warning(aTHX_ o);
2224 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
2225 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
2232 if (o->op_flags & OPf_KIDS) {
2236 /* check that op_last points to the last sibling, and that
2237 * the last op_sibling field points back to the parent, and
2238 * that the only ops with KIDS are those which are entitled to
2240 U32 type = o->op_type;
2244 if (type == OP_NULL) {
2246 /* ck_glob creates a null UNOP with ex-type GLOB
2247 * (which is a list op. So pretend it wasn't a listop */
2248 if (type == OP_GLOB)
2251 family = PL_opargs[type] & OA_CLASS_MASK;
2253 has_last = ( family == OA_BINOP
2254 || family == OA_LISTOP
2255 || family == OA_PMOP
2256 || family == OA_LOOP
2258 assert( has_last /* has op_first and op_last, or ...
2259 ... has (or may have) op_first: */
2260 || family == OA_UNOP
2261 || family == OA_LOGOP
2262 || family == OA_BASEOP_OR_UNOP
2263 || family == OA_FILESTATOP
2264 || family == OA_LOOPEXOP
2265 || family == OA_METHOP
2266 /* I don't know why SASSIGN is tagged as OA_BASEOP - DAPM */
2267 || type == OP_SASSIGN
2268 || type == OP_CUSTOM
2269 || type == OP_NULL /* new_logop does this */
2271 /* XXX list form of 'x' is has a null op_last. This is wrong,
2272 * but requires too much hacking (e.g. in Deparse) to fix for
2274 if (type == OP_REPEAT && (o->op_private & OPpREPEAT_DOLIST)) {
2279 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2280 # ifdef PERL_OP_PARENT
2281 if (!OP_HAS_SIBLING(kid)) {
2283 assert(kid == cLISTOPo->op_last);
2284 assert(kid->op_sibling == o);
2287 if (OP_HAS_SIBLING(kid)) {
2288 assert(!kid->op_lastsib);
2291 assert(kid->op_lastsib);
2293 assert(kid == cLISTOPo->op_last);
2299 for (kid = cUNOPo->op_first; kid; kid = OP_SIBLING(kid))
2305 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
2307 Propagate lvalue ("modifiable") context to an op and its children.
2308 I<type> represents the context type, roughly based on the type of op that
2309 would do the modifying, although C<local()> is represented by OP_NULL,
2310 because it has no op type of its own (it is signalled by a flag on
2313 This function detects things that can't be modified, such as C<$x+1>, and
2314 generates errors for them. For example, C<$x+1 = 2> would cause it to be
2315 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
2317 It also flags things that need to behave specially in an lvalue context,
2318 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
2324 S_vivifies(const OPCODE type)
2327 case OP_RV2AV: case OP_ASLICE:
2328 case OP_RV2HV: case OP_KVASLICE:
2329 case OP_RV2SV: case OP_HSLICE:
2330 case OP_AELEMFAST: case OP_KVHSLICE:
2339 S_lvref(pTHX_ OP *o)
2342 switch (o->op_type) {
2344 for (kid = OP_SIBLING(cUNOPo->op_first); kid;
2345 kid = OP_SIBLING(kid))
2351 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2352 o->op_flags |= OPf_STACKED;
2353 if (o->op_flags & OPf_PARENS) {
2354 if (o->op_private & OPpLVAL_INTRO) {
2355 /* diag_listed_as: Can't modify %s in %s */
2356 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2357 "localized parenthesized array in list assignment"));
2361 o->op_type = OP_LVAVREF;
2362 o->op_ppaddr = PL_ppaddr[OP_LVAVREF];
2363 o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
2364 o->op_flags |= OPf_MOD|OPf_REF;
2367 o->op_private |= OPpLVREF_AV;
2370 kid = cUNOPx(cUNOPx(cUNOPo->op_first)->op_first->op_sibling)
2372 o->op_private = OPpLVREF_CV;
2373 if (kid->op_type == OP_GV)
2374 o->op_flags |= OPf_STACKED;
2375 else if (kid->op_type == OP_PADCV) {
2376 o->op_targ = kid->op_targ;
2378 op_free(cUNOPo->op_first);
2379 cUNOPo->op_first = NULL;
2380 o->op_flags &=~ OPf_KIDS;
2385 if (o->op_flags & OPf_PARENS) {
2387 /* diag_listed_as: Can't modify %s in %s */
2388 yyerror(Perl_form(aTHX_ "Can't modify reference to "
2389 "parenthesized hash in list assignment"));
2392 o->op_private |= OPpLVREF_HV;
2396 if (cUNOPo->op_first->op_type != OP_GV) goto badref;
2397 o->op_flags |= OPf_STACKED;
2402 if (o->op_flags & OPf_PARENS) goto slurpy;
2403 o->op_private |= OPpLVREF_AV;
2406 if (o->op_flags & OPf_PARENS) goto parenhash;
2407 o->op_private |= OPpLVREF_HV;
2411 o->op_private |= OPpLVREF_ELEM;
2412 o->op_flags |= OPf_STACKED;
2416 o->op_type = OP_LVREFSLICE;
2417 o->op_ppaddr = PL_ppaddr[OP_LVREFSLICE];
2418 o->op_private &= OPpLVAL_INTRO|OPpLVREF_ELEM;
2421 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2423 else if (!(o->op_flags & OPf_KIDS))
2425 if (o->op_targ != OP_LIST) {
2426 S_lvref(aTHX_ cBINOPo->op_first);
2431 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid)) {
2432 assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
2437 if (o->op_flags & OPf_PARENS)
2442 /* diag_listed_as: Can't modify %s in %s */
2443 yyerror(Perl_form(aTHX_ "Can't modify reference to %s in list "
2445 o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
2450 o->op_type = OP_LVREF;
2451 o->op_ppaddr = PL_ppaddr[OP_LVREF];
2452 o->op_private &= OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE;
2456 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
2460 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
2463 if (!o || (PL_parser && PL_parser->error_count))
2466 if ((o->op_private & OPpTARGET_MY)
2467 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
2472 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
2474 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
2476 switch (o->op_type) {
2481 if ((o->op_flags & OPf_PARENS))
2485 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
2486 !(o->op_flags & OPf_STACKED)) {
2487 o->op_type = OP_RV2CV; /* entersub => rv2cv */
2488 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
2489 assert(cUNOPo->op_first->op_type == OP_NULL);
2490 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
2493 else { /* lvalue subroutine call */
2494 o->op_private |= OPpLVAL_INTRO;
2495 PL_modcount = RETURN_UNLIMITED_NUMBER;
2496 if (type == OP_GREPSTART || type == OP_ENTERSUB
2497 || type == OP_REFGEN || type == OP_LEAVESUBLV) {
2498 /* Potential lvalue context: */
2499 o->op_private |= OPpENTERSUB_INARGS;
2502 else { /* Compile-time error message: */
2503 OP *kid = cUNOPo->op_first;
2507 if (kid->op_type != OP_PUSHMARK) {
2508 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
2510 "panic: unexpected lvalue entersub "
2511 "args: type/targ %ld:%"UVuf,
2512 (long)kid->op_type, (UV)kid->op_targ);
2513 kid = kLISTOP->op_first;
2515 while (OP_HAS_SIBLING(kid))
2516 kid = OP_SIBLING(kid);
2517 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
2518 break; /* Postpone until runtime */
2521 kid = kUNOP->op_first;
2522 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
2523 kid = kUNOP->op_first;
2524 if (kid->op_type == OP_NULL)
2526 "Unexpected constant lvalue entersub "
2527 "entry via type/targ %ld:%"UVuf,
2528 (long)kid->op_type, (UV)kid->op_targ);
2529 if (kid->op_type != OP_GV) {
2536 : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
2537 ? MUTABLE_CV(SvRV(gv))
2548 if (flags & OP_LVALUE_NO_CROAK) return NULL;
2549 /* grep, foreach, subcalls, refgen */
2550 if (type == OP_GREPSTART || type == OP_ENTERSUB
2551 || type == OP_REFGEN || type == OP_LEAVESUBLV)
2553 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2554 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
2556 : (o->op_type == OP_ENTERSUB
2557 ? "non-lvalue subroutine call"
2559 type ? PL_op_desc[type] : "local"));
2573 case OP_RIGHT_SHIFT:
2582 if (!(o->op_flags & OPf_STACKED))
2589 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
2590 op_lvalue(kid, type);
2595 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
2596 PL_modcount = RETURN_UNLIMITED_NUMBER;
2597 return o; /* Treat \(@foo) like ordinary list. */
2601 if (scalar_mod_type(o, type))
2603 ref(cUNOPo->op_first, o->op_type);
2610 /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */
2611 if (type == OP_LEAVESUBLV && (
2612 (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV)
2613 || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2615 o->op_private |= OPpMAYBE_LVSUB;
2619 PL_modcount = RETURN_UNLIMITED_NUMBER;
2623 if (type == OP_LEAVESUBLV)
2624 o->op_private |= OPpMAYBE_LVSUB;
2627 PL_hints |= HINT_BLOCK_SCOPE;
2628 if (type == OP_LEAVESUBLV)
2629 o->op_private |= OPpMAYBE_LVSUB;
2633 ref(cUNOPo->op_first, o->op_type);
2637 PL_hints |= HINT_BLOCK_SCOPE;
2647 case OP_AELEMFAST_LEX:
2654 PL_modcount = RETURN_UNLIMITED_NUMBER;
2655 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
2656 return o; /* Treat \(@foo) like ordinary list. */
2657 if (scalar_mod_type(o, type))
2659 if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR
2660 && type == OP_LEAVESUBLV)
2661 o->op_private |= OPpMAYBE_LVSUB;
2665 if (!type) /* local() */
2666 Perl_croak(aTHX_ "Can't localize lexical variable %"SVf,
2667 PAD_COMPNAME_SV(o->op_targ));
2676 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
2680 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
2686 if (type == OP_LEAVESUBLV)
2687 o->op_private |= OPpMAYBE_LVSUB;
2688 if (o->op_flags & OPf_KIDS)
2689 op_lvalue(OP_SIBLING(cBINOPo->op_first), type);
2694 ref(cBINOPo->op_first, o->op_type);
2695 if (type == OP_ENTERSUB &&
2696 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
2697 o->op_private |= OPpLVAL_DEFER;
2698 if (type == OP_LEAVESUBLV)
2699 o->op_private |= OPpMAYBE_LVSUB;
2706 o->op_private |= OPpLVALUE;
2712 if (o->op_flags & OPf_KIDS)
2713 op_lvalue(cLISTOPo->op_last, type);
2718 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2720 else if (!(o->op_flags & OPf_KIDS))
2722 if (o->op_targ != OP_LIST) {
2723 op_lvalue(cBINOPo->op_first, type);
2729 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2730 /* elements might be in void context because the list is
2731 in scalar context or because they are attribute sub calls */
2732 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
2733 op_lvalue(kid, type);
2741 if (type == OP_LEAVESUBLV
2742 || !S_vivifies(cLOGOPo->op_first->op_type))
2743 op_lvalue(cLOGOPo->op_first, type);
2744 if (type == OP_LEAVESUBLV
2745 || !S_vivifies(OP_SIBLING(cLOGOPo->op_first)->op_type))
2746 op_lvalue(OP_SIBLING(cLOGOPo->op_first), type);
2750 if (type != OP_AASSIGN && type != OP_SASSIGN) goto nomod;
2751 /* Don’t bother applying lvalue context to the ex-list. */
2752 kid = cUNOPx(cUNOPo->op_first)->op_first;
2753 assert (!OP_HAS_SIBLING(kid));
2756 if (type != OP_AASSIGN) goto nomod;
2757 kid = cUNOPo->op_first;
2760 const U8 ec = PL_parser ? PL_parser->error_count : 0;
2762 if (!PL_parser || PL_parser->error_count == ec) {
2763 if (!FEATURE_LVREF_IS_ENABLED)
2765 "Experimental lvalue references not enabled");
2766 Perl_ck_warner_d(aTHX_
2767 packWARN(WARN_EXPERIMENTAL__LVALUE_REFS),
2768 "Lvalue references are experimental");
2771 if (o->op_type == OP_REFGEN)
2772 op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
2777 /* [20011101.069] File test operators interpret OPf_REF to mean that
2778 their argument is a filehandle; thus \stat(".") should not set
2780 if (type == OP_REFGEN &&
2781 PL_check[o->op_type] == Perl_ck_ftst)
2784 if (type != OP_LEAVESUBLV)
2785 o->op_flags |= OPf_MOD;
2787 if (type == OP_AASSIGN || type == OP_SASSIGN)
2788 o->op_flags |= OPf_SPECIAL|OPf_REF;
2789 else if (!type) { /* local() */
2792 o->op_private |= OPpLVAL_INTRO;
2793 o->op_flags &= ~OPf_SPECIAL;
2794 PL_hints |= HINT_BLOCK_SCOPE;
2799 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
2800 "Useless localization of %s", OP_DESC(o));
2803 else if (type != OP_GREPSTART && type != OP_ENTERSUB
2804 && type != OP_LEAVESUBLV)
2805 o->op_flags |= OPf_REF;
2810 S_scalar_mod_type(const OP *o, I32 type)
2815 if (o && o->op_type == OP_RV2GV)
2839 case OP_RIGHT_SHIFT:
2860 S_is_handle_constructor(const OP *o, I32 numargs)
2862 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
2864 switch (o->op_type) {
2872 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
2885 S_refkids(pTHX_ OP *o, I32 type)
2887 if (o && o->op_flags & OPf_KIDS) {
2889 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
2896 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
2901 PERL_ARGS_ASSERT_DOREF;
2903 if (!o || (PL_parser && PL_parser->error_count))
2906 switch (o->op_type) {
2908 if ((type == OP_EXISTS || type == OP_DEFINED) &&
2909 !(o->op_flags & OPf_STACKED)) {
2910 o->op_type = OP_RV2CV; /* entersub => rv2cv */
2911 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
2912 assert(cUNOPo->op_first->op_type == OP_NULL);
2913 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
2914 o->op_flags |= OPf_SPECIAL;
2916 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
2917 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2918 : type == OP_RV2HV ? OPpDEREF_HV
2920 o->op_flags |= OPf_MOD;
2926 for (kid = OP_SIBLING(cUNOPo->op_first); kid; kid = OP_SIBLING(kid))
2927 doref(kid, type, set_op_ref);
2930 if (type == OP_DEFINED)
2931 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2932 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2935 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2936 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2937 : type == OP_RV2HV ? OPpDEREF_HV
2939 o->op_flags |= OPf_MOD;
2946 o->op_flags |= OPf_REF;
2949 if (type == OP_DEFINED)
2950 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2951 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2957 o->op_flags |= OPf_REF;
2962 if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
2964 doref(cBINOPo->op_first, type, set_op_ref);
2968 doref(cBINOPo->op_first, o->op_type, set_op_ref);
2969 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2970 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2971 : type == OP_RV2HV ? OPpDEREF_HV
2973 o->op_flags |= OPf_MOD;
2983 if (!(o->op_flags & OPf_KIDS))
2985 doref(cLISTOPo->op_last, type, set_op_ref);
2995 S_dup_attrlist(pTHX_ OP *o)
2999 PERL_ARGS_ASSERT_DUP_ATTRLIST;
3001 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
3002 * where the first kid is OP_PUSHMARK and the remaining ones
3003 * are OP_CONST. We need to push the OP_CONST values.
3005 if (o->op_type == OP_CONST)
3006 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
3008 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
3010 for (o = cLISTOPo->op_first; o; o = OP_SIBLING(o)) {
3011 if (o->op_type == OP_CONST)
3012 rop = op_append_elem(OP_LIST, rop,
3013 newSVOP(OP_CONST, o->op_flags,
3014 SvREFCNT_inc_NN(cSVOPo->op_sv)));
3021 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
3023 SV * const stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
3025 PERL_ARGS_ASSERT_APPLY_ATTRS;
3027 /* fake up C<use attributes $pkg,$rv,@attrs> */
3029 #define ATTRSMODULE "attributes"
3030 #define ATTRSMODULE_PM "attributes.pm"
3032 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3033 newSVpvs(ATTRSMODULE),
3035 op_prepend_elem(OP_LIST,
3036 newSVOP(OP_CONST, 0, stashsv),
3037 op_prepend_elem(OP_LIST,
3038 newSVOP(OP_CONST, 0,
3040 dup_attrlist(attrs))));
3044 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
3046 OP *pack, *imop, *arg;
3047 SV *meth, *stashsv, **svp;
3049 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
3054 assert(target->op_type == OP_PADSV ||
3055 target->op_type == OP_PADHV ||
3056 target->op_type == OP_PADAV);
3058 /* Ensure that attributes.pm is loaded. */
3059 /* Don't force the C<use> if we don't need it. */
3060 svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
3061 if (svp && *svp != &PL_sv_undef)
3062 NOOP; /* already in %INC */
3064 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
3065 newSVpvs(ATTRSMODULE), NULL);
3067 /* Need package name for method call. */
3068 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
3070 /* Build up the real arg-list. */
3071 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
3073 arg = newOP(OP_PADSV, 0);
3074 arg->op_targ = target->op_targ;
3075 arg = op_prepend_elem(OP_LIST,
3076 newSVOP(OP_CONST, 0, stashsv),
3077 op_prepend_elem(OP_LIST,
3078 newUNOP(OP_REFGEN, 0,
3079 op_lvalue(arg, OP_REFGEN)),
3080 dup_attrlist(attrs)));
3082 /* Fake up a method call to import */
3083 meth = newSVpvs_share("import");
3084 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
3085 op_append_elem(OP_LIST,
3086 op_prepend_elem(OP_LIST, pack, list(arg)),
3087 newMETHOP_named(OP_METHOD_NAMED, 0, meth)));
3089 /* Combine the ops. */
3090 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
3094 =notfor apidoc apply_attrs_string
3096 Attempts to apply a list of attributes specified by the C<attrstr> and
3097 C<len> arguments to the subroutine identified by the C<cv> argument which
3098 is expected to be associated with the package identified by the C<stashpv>
3099 argument (see L<attributes>). It gets this wrong, though, in that it
3100 does not correctly identify the boundaries of the individual attribute
3101 specifications within C<attrstr>. This is not really intended for the
3102 public API, but has to be listed here for systems such as AIX which
3103 need an explicit export list for symbols. (It's called from XS code
3104 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
3105 to respect attribute syntax properly would be welcome.
3111 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
3112 const char *attrstr, STRLEN len)
3116 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
3119 len = strlen(attrstr);
3123 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
3125 const char * const sstr = attrstr;
3126 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
3127 attrs = op_append_elem(OP_LIST, attrs,
3128 newSVOP(OP_CONST, 0,
3129 newSVpvn(sstr, attrstr-sstr)));
3133 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
3134 newSVpvs(ATTRSMODULE),
3135 NULL, op_prepend_elem(OP_LIST,
3136 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
3137 op_prepend_elem(OP_LIST,
3138 newSVOP(OP_CONST, 0,
3139 newRV(MUTABLE_SV(cv))),
3144 S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV * name)
3146 OP *new_proto = NULL;
3151 PERL_ARGS_ASSERT_MOVE_PROTO_ATTR;
3157 if (o->op_type == OP_CONST) {
3158 pv = SvPV(cSVOPo_sv, pvlen);
3159 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3160 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3161 SV ** const tmpo = cSVOPx_svp(o);
3162 SvREFCNT_dec(cSVOPo_sv);
3167 } else if (o->op_type == OP_LIST) {
3169 assert(o->op_flags & OPf_KIDS);
3170 lasto = cLISTOPo->op_first;
3171 assert(lasto->op_type == OP_PUSHMARK);
3172 for (o = OP_SIBLING(lasto); o; o = OP_SIBLING(o)) {
3173 if (o->op_type == OP_CONST) {
3174 pv = SvPV(cSVOPo_sv, pvlen);
3175 if (pvlen >= 10 && memEQ(pv, "prototype(", 10)) {
3176 SV * const tmpsv = newSVpvn_flags(pv + 10, pvlen - 11, SvUTF8(cSVOPo_sv));
3177 SV ** const tmpo = cSVOPx_svp(o);
3178 SvREFCNT_dec(cSVOPo_sv);
3180 if (new_proto && ckWARN(WARN_MISC)) {
3182 const char * newp = SvPV(cSVOPo_sv, new_len);
3183 Perl_warner(aTHX_ packWARN(WARN_MISC),
3184 "Attribute prototype(%"UTF8f") discards earlier prototype attribute in same sub",
3185 UTF8fARG(SvUTF8(cSVOPo_sv), new_len, newp));
3191 /* excise new_proto from the list */
3192 op_sibling_splice(*attrs, lasto, 1, NULL);
3199 /* If the list is now just the PUSHMARK, scrap the whole thing; otherwise attributes.xs
3200 would get pulled in with no real need */
3201 if (!OP_HAS_SIBLING(cLISTOPx(*attrs)->op_first)) {
3210 svname = sv_newmortal();
3211 gv_efullname3(svname, name, NULL);
3213 else if (SvPOK(name) && *SvPVX((SV *)name) == '&')
3214 svname = newSVpvn_flags(SvPVX((SV *)name)+1, SvCUR(name)-1, SvUTF8(name)|SVs_TEMP);
3216 svname = (SV *)name;
3217 if (ckWARN(WARN_ILLEGALPROTO))
3218 (void)validate_proto(svname, cSVOPx_sv(new_proto), TRUE);
3219 if (*proto && ckWARN(WARN_PROTOTYPE)) {
3220 STRLEN old_len, new_len;
3221 const char * oldp = SvPV(cSVOPx_sv(*proto), old_len);
3222 const char * newp = SvPV(cSVOPx_sv(new_proto), new_len);
3224 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
3225 "Prototype '%"UTF8f"' overridden by attribute 'prototype(%"UTF8f")'"
3227 UTF8fARG(SvUTF8(cSVOPx_sv(*proto)), old_len, oldp),
3228 UTF8fARG(SvUTF8(cSVOPx_sv(new_proto)), new_len, newp),
3238 S_cant_declare(pTHX_ OP *o)
3240 if (o->op_type == OP_NULL
3241 && (o->op_flags & (OPf_SPECIAL|OPf_KIDS)) == OPf_KIDS)
3242 o = cUNOPo->op_first;
3243 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
3244 o->op_type == OP_NULL
3245 && o->op_flags & OPf_SPECIAL
3248 PL_parser->in_my == KEY_our ? "our" :
3249 PL_parser->in_my == KEY_state ? "state" :
3254 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
3257 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
3259 PERL_ARGS_ASSERT_MY_KID;
3261 if (!o || (PL_parser && PL_parser->error_count))
3266 if (type == OP_LIST) {
3268 for (kid = cLISTOPo->op_first; kid; kid = OP_SIBLING(kid))
3269 my_kid(kid, attrs, imopsp);
3271 } else if (type == OP_UNDEF || type == OP_STUB) {
3273 } else if (type == OP_RV2SV || /* "our" declaration */
3275 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
3276 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
3277 S_cant_declare(aTHX_ o);
3279 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
3281 PL_parser->in_my = FALSE;
3282 PL_parser->in_my_stash = NULL;
3283 apply_attrs(GvSTASH(gv),
3284 (type == OP_RV2SV ? GvSV(gv) :
3285 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
3286 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
3289 o->op_private |= OPpOUR_INTRO;
3292 else if (type != OP_PADSV &&
3295 type != OP_PUSHMARK)
3297 S_cant_declare(aTHX_ o);
3300 else if (attrs && type != OP_PUSHMARK) {
3304 PL_parser->in_my = FALSE;
3305 PL_parser->in_my_stash = NULL;
3307 /* check for C<my Dog $spot> when deciding package */
3308 stash = PAD_COMPNAME_TYPE(o->op_targ);
3310 stash = PL_curstash;
3311 apply_attrs_my(stash, o, attrs, imopsp);
3313 o->op_flags |= OPf_MOD;
3314 o->op_private |= OPpLVAL_INTRO;
3316 o->op_private |= OPpPAD_STATE;
3321 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
3324 int maybe_scalar = 0;
3326 PERL_ARGS_ASSERT_MY_ATTRS;
3328 /* [perl #17376]: this appears to be premature, and results in code such as
3329 C< our(%x); > executing in list mode rather than void mode */
3331 if (o->op_flags & OPf_PARENS)
3341 o = my_kid(o, attrs, &rops);
3343 if (maybe_scalar && o->op_type == OP_PADSV) {
3344 o = scalar(op_append_list(OP_LIST, rops, o));
3345 o->op_private |= OPpLVAL_INTRO;
3348 /* The listop in rops might have a pushmark at the beginning,
3349 which will mess up list assignment. */
3350 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
3351 if (rops->op_type == OP_LIST &&
3352 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
3354 OP * const pushmark = lrops->op_first;
3355 /* excise pushmark */
3356 op_sibling_splice(rops, NULL, 1, NULL);
3359 o = op_append_list(OP_LIST, o, rops);
3362 PL_parser->in_my = FALSE;
3363 PL_parser->in_my_stash = NULL;
3368 Perl_sawparens(pTHX_ OP *o)
3370 PERL_UNUSED_CONTEXT;
3372 o->op_flags |= OPf_PARENS;
3377 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
3381 const OPCODE ltype = left->op_type;
3382 const OPCODE rtype = right->op_type;
3384 PERL_ARGS_ASSERT_BIND_MATCH;
3386 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
3387 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
3389 const char * const desc
3391 rtype == OP_SUBST || rtype == OP_TRANS
3392 || rtype == OP_TRANSR
3394 ? (int)rtype : OP_MATCH];
3395 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
3397 S_op_varname(aTHX_ left);
3399 Perl_warner(aTHX_ packWARN(WARN_MISC),
3400 "Applying %s to %"SVf" will act on scalar(%"SVf")",
3401 desc, SVfARG(name), SVfARG(name));
3403 const char * const sample = (isary
3404 ? "@array" : "%hash");
3405 Perl_warner(aTHX_ packWARN(WARN_MISC),
3406 "Applying %s to %s will act on scalar(%s)",
3407 desc, sample, sample);
3411 if (rtype == OP_CONST &&
3412 cSVOPx(right)->op_private & OPpCONST_BARE &&
3413 cSVOPx(right)->op_private & OPpCONST_STRICT)
3415 no_bareword_allowed(right);
3418 /* !~ doesn't make sense with /r, so error on it for now */
3419 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
3421 /* diag_listed_as: Using !~ with %s doesn't make sense */
3422 yyerror("Using !~ with s///r doesn't make sense");
3423 if (rtype == OP_TRANSR && type == OP_NOT)
3424 /* diag_listed_as: Using !~ with %s doesn't make sense */
3425 yyerror("Using !~ with tr///r doesn't make sense");
3427 ismatchop = (rtype == OP_MATCH ||
3428 rtype == OP_SUBST ||
3429 rtype == OP_TRANS || rtype == OP_TRANSR)
3430 && !(right->op_flags & OPf_SPECIAL);
3431 if (ismatchop && right->op_private & OPpTARGET_MY) {
3433 right->op_private &= ~OPpTARGET_MY;
3435 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
3438 right->op_flags |= OPf_STACKED;
3439 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
3440 ! (rtype == OP_TRANS &&
3441 right->op_private & OPpTRANS_IDENTICAL) &&
3442 ! (rtype == OP_SUBST &&
3443 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
3444 newleft = op_lvalue(left, rtype);
3447 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
3448 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
3450 o = op_prepend_elem(rtype, scalar(newleft), right);
3452 return newUNOP(OP_NOT, 0, scalar(o));
3456 return bind_match(type, left,
3457 pmruntime(newPMOP(OP_MATCH, 0), right, 0, 0));
3461 Perl_invert(pTHX_ OP *o)
3465 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
3469 =for apidoc Amx|OP *|op_scope|OP *o
3471 Wraps up an op tree with some additional ops so that at runtime a dynamic
3472 scope will be created. The original ops run in the new dynamic scope,
3473 and then, provided that they exit normally, the scope will be unwound.
3474 The additional ops used to create and unwind the dynamic scope will
3475 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
3476 instead if the ops are simple enough to not need the full dynamic scope
3483 Perl_op_scope(pTHX_ OP *o)
3487 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
3488 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
3489 o->op_type = OP_LEAVE;
3490 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
3492 else if (o->op_type == OP_LINESEQ) {
3494 o->op_type = OP_SCOPE;
3495 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
3496 kid = ((LISTOP*)o)->op_first;
3497 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
3500 /* The following deals with things like 'do {1 for 1}' */
3501 kid = OP_SIBLING(kid);
3503 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
3508 o = newLISTOP(OP_SCOPE, 0, o, NULL);
3514 Perl_op_unscope(pTHX_ OP *o)
3516 if (o && o->op_type == OP_LINESEQ) {
3517 OP *kid = cLISTOPo->op_first;
3518 for(; kid; kid = OP_SIBLING(kid))
3519 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
3526 Perl_block_start(pTHX_ int full)
3528 const int retval = PL_savestack_ix;
3530 pad_block_start(full);
3532 PL_hints &= ~HINT_BLOCK_SCOPE;
3533 SAVECOMPILEWARNINGS();
3534 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
3536 CALL_BLOCK_HOOKS(bhk_start, full);
3542 Perl_block_end(pTHX_ I32 floor, OP *seq)
3544 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
3545 OP* retval = scalarseq(seq);
3548 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
3552 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
3556 /* pad_leavemy has created a sequence of introcv ops for all my
3557 subs declared in the block. We have to replicate that list with
3558 clonecv ops, to deal with this situation:
3563 sub s1 { state sub foo { \&s2 } }
3566 Originally, I was going to have introcv clone the CV and turn
3567 off the stale flag. Since &s1 is declared before &s2, the
3568 introcv op for &s1 is executed (on sub entry) before the one for
3569 &s2. But the &foo sub inside &s1 (which is cloned when &s1 is
3570 cloned, since it is a state sub) closes over &s2 and expects
3571 to see it in its outer CV’s pad. If the introcv op clones &s1,
3572 then &s2 is still marked stale. Since &s1 is not active, and
3573 &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia-
3574 ble will not stay shared’ warning. Because it is the same stub
3575 that will be used when the introcv op for &s2 is executed, clos-
3576 ing over it is safe. Hence, we have to turn off the stale flag
3577 on all lexical subs in the block before we clone any of them.
3578 Hence, having introcv clone the sub cannot work. So we create a
3579 list of ops like this:
3603 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o;
3604 OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o;
3605 for (;; kid = OP_SIBLING(kid)) {
3606 OP *newkid = newOP(OP_CLONECV, 0);
3607 newkid->op_targ = kid->op_targ;
3608 o = op_append_elem(OP_LINESEQ, o, newkid);
3609 if (kid == last) break;
3611 retval = op_prepend_elem(OP_LINESEQ, o, retval);
3614 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
3620 =head1 Compile-time scope hooks
3622 =for apidoc Aox||blockhook_register
3624 Register a set of hooks to be called when the Perl lexical scope changes
3625 at compile time. See L<perlguts/"Compile-time scope hooks">.
3631 Perl_blockhook_register(pTHX_ BHK *hk)
3633 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
3635 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
3641 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
3642 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
3643 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
3646 OP * const o = newOP(OP_PADSV, 0);
3647 o->op_targ = offset;
3653 Perl_newPROG(pTHX_ OP *o)
3655 PERL_ARGS_ASSERT_NEWPROG;
3662 PL_eval_root = newUNOP(OP_LEAVEEVAL,
3663 ((PL_in_eval & EVAL_KEEPERR)
3664 ? OPf_SPECIAL : 0), o);
3666 cx = &cxstack[cxstack_ix];
3667 assert(CxTYPE(cx) == CXt_EVAL);
3669 if ((cx->blk_gimme & G_WANT) == G_VOID)
3670 scalarvoid(PL_eval_root);
3671 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
3674 scalar(PL_eval_root);
3676 PL_eval_start = op_linklist(PL_eval_root);
3677 PL_eval_root->op_private |= OPpREFCOUNTED;
3678 OpREFCNT_set(PL_eval_root, 1);
3679 PL_eval_root->op_next = 0;
3680 i = PL_savestack_ix;
3683 CALL_PEEP(PL_eval_start);
3684 finalize_optree(PL_eval_root);
3685 S_prune_chain_head(&PL_eval_start);
3687 PL_savestack_ix = i;
3690 if (o->op_type == OP_STUB) {
3691 /* This block is entered if nothing is compiled for the main
3692 program. This will be the case for an genuinely empty main
3693 program, or one which only has BEGIN blocks etc, so already
3696 Historically (5.000) the guard above was !o. However, commit
3697 f8a08f7b8bd67b28 (Jun 2001), integrated to blead as
3698 c71fccf11fde0068, changed perly.y so that newPROG() is now
3699 called with the output of block_end(), which returns a new
3700 OP_STUB for the case of an empty optree. ByteLoader (and
3701 maybe other things) also take this path, because they set up
3702 PL_main_start and PL_main_root directly, without generating an
3705 If the parsing the main program aborts (due to parse errors,
3706 or due to BEGIN or similar calling exit), then newPROG()
3707 isn't even called, and hence this code path and its cleanups
3708 are skipped. This shouldn't make a make a difference:
3709 * a non-zero return from perl_parse is a failure, and
3710 perl_destruct() should be called immediately.
3711 * however, if exit(0) is called during the parse, then
3712 perl_parse() returns 0, and perl_run() is called. As
3713 PL_main_start will be NULL, perl_run() will return
3714 promptly, and the exit code will remain 0.
3717 PL_comppad_name = 0;
3719 S_op_destroy(aTHX_ o);
3722 PL_main_root = op_scope(sawparens(scalarvoid(o)));
3723 PL_curcop = &PL_compiling;
3724 PL_main_start = LINKLIST(PL_main_root);
3725 PL_main_root->op_private |= OPpREFCOUNTED;
3726 OpREFCNT_set(PL_main_root, 1);
3727 PL_main_root->op_next = 0;
3728 CALL_PEEP(PL_main_start);
3729 finalize_optree(PL_main_root);
3730 S_prune_chain_head(&PL_main_start);
3731 cv_forget_slab(PL_compcv);
3734 /* Register with debugger */
3736 CV * const cv = get_cvs("DB::postponed", 0);
3740 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3742 call_sv(MUTABLE_SV(cv), G_DISCARD);
3749 Perl_localize(pTHX_ OP *o, I32 lex)
3751 PERL_ARGS_ASSERT_LOCALIZE;
3753 if (o->op_flags & OPf_PARENS)
3754 /* [perl #17376]: this appears to be premature, and results in code such as
3755 C< our(%x); > executing in list mode rather than void mode */
3762 if ( PL_parser->bufptr > PL_parser->oldbufptr
3763 && PL_parser->bufptr[-1] == ','
3764 && ckWARN(WARN_PARENTHESIS))
3766 char *s = PL_parser->bufptr;
3769 /* some heuristics to detect a potential error */
3770 while (*s && (strchr(", \t\n", *s)))
3774 if (*s && strchr("@$%*", *s) && *++s
3775 && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
3778 while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
3780 while (*s && (strchr(", \t\n", *s)))
3786 if (sigil && (*s == ';' || *s == '=')) {
3787 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
3788 "Parentheses missing around \"%s\" list",
3790 ? (PL_parser->in_my == KEY_our
3792 : PL_parser->in_my == KEY_state
3802 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
3803 PL_parser->in_my = FALSE;
3804 PL_parser->in_my_stash = NULL;
3809 Perl_jmaybe(pTHX_ OP *o)
3811 PERL_ARGS_ASSERT_JMAYBE;
3813 if (o->op_type == OP_LIST) {
3815 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
3816 o = convert(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
3821 PERL_STATIC_INLINE OP *
3822 S_op_std_init(pTHX_ OP *o)
3824 I32 type = o->op_type;
3826 PERL_ARGS_ASSERT_OP_STD_INIT;
3828 if (PL_opargs[type] & OA_RETSCALAR)
3830 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
3831 o->op_targ = pad_alloc(type, SVs_PADTMP);
3836 PERL_STATIC_INLINE OP *
3837 S_op_integerize(pTHX_ OP *o)
3839 I32 type = o->op_type;
3841 PERL_ARGS_ASSERT_OP_INTEGERIZE;
3843 /* integerize op. */
3844 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
3847 o->op_ppaddr = PL_ppaddr[++(o->op_type)];
3850 if (type == OP_NEGATE)
3851 /* XXX might want a ck_negate() for this */
3852 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
3858 S_fold_constants(pTHX_ OP *o)
3863 VOL I32 type = o->op_type;
3868 SV * const oldwarnhook = PL_warnhook;
3869 SV * const olddiehook = PL_diehook;
3871 U8 oldwarn = PL_dowarn;
3874 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
3876 if (!(PL_opargs[type] & OA_FOLDCONST))
3885 #ifdef USE_LOCALE_CTYPE
3886 if (IN_LC_COMPILETIME(LC_CTYPE))
3895 #ifdef USE_LOCALE_COLLATE
3896 if (IN_LC_COMPILETIME(LC_COLLATE))
3901 /* XXX what about the numeric ops? */
3902 #ifdef USE_LOCALE_NUMERIC
3903 if (IN_LC_COMPILETIME(LC_NUMERIC))
3908 if (!OP_HAS_SIBLING(cLISTOPo->op_first)
3909 || OP_SIBLING(cLISTOPo->op_first)->op_type != OP_CONST)
3912 SV * const sv = cSVOPx_sv(OP_SIBLING(cLISTOPo->op_first));
3913 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
3915 const char *s = SvPVX_const(sv);
3916 while (s < SvEND(sv)) {
3917 if (isALPHA_FOLD_EQ(*s, 'p')) goto nope;
3924 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
3927 if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST
3928 || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first)))
3932 if (PL_parser && PL_parser->error_count)
3933 goto nope; /* Don't try to run w/ errors */
3935 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3936 const OPCODE type = curop->op_type;
3937 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
3939 type != OP_SCALAR &&
3941 type != OP_PUSHMARK)
3947 curop = LINKLIST(o);
3948 old_next = o->op_next;
3952 oldscope = PL_scopestack_ix;
3953 create_eval_scope(G_FAKINGEVAL);
3955 /* Verify that we don't need to save it: */
3956 assert(PL_curcop == &PL_compiling);
3957 StructCopy(&PL_compiling, ¬_compiling, COP);
3958 PL_curcop = ¬_compiling;
3959 /* The above ensures that we run with all the correct hints of the
3960 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
3961 assert(IN_PERL_RUNTIME);
3962 PL_warnhook = PERL_WARNHOOK_FATAL;
3966 /* Effective $^W=1. */
3967 if ( ! (PL_dowarn & G_WARN_ALL_MASK))
3968 PL_dowarn |= G_WARN_ON;
3973 sv = *(PL_stack_sp--);
3974 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
3975 pad_swipe(o->op_targ, FALSE);
3977 else if (SvTEMP(sv)) { /* grab mortal temp? */
3978 SvREFCNT_inc_simple_void(sv);
3981 else { assert(SvIMMORTAL(sv)); }
3984 /* Something tried to die. Abandon constant folding. */
3985 /* Pretend the error never happened. */
3987 o->op_next = old_next;
3991 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
3992 PL_warnhook = oldwarnhook;
3993 PL_diehook = olddiehook;
3994 /* XXX note that this croak may fail as we've already blown away
3995 * the stack - eg any nested evals */
3996 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
3999 PL_dowarn = oldwarn;
4000 PL_warnhook = oldwarnhook;
4001 PL_diehook = olddiehook;
4002 PL_curcop = &PL_compiling;
4004 if (PL_scopestack_ix > oldscope)
4005 delete_eval_scope();
4012 if (type == OP_STRINGIFY) SvPADTMP_off(sv);
4013 else if (!SvIMMORTAL(sv)) {
4017 if (type == OP_RV2GV)
4018 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
4021 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
4022 if (type != OP_STRINGIFY) newop->op_folded = 1;
4031 S_gen_constant_list(pTHX_ OP *o)
4035 const SSize_t oldtmps_floor = PL_tmps_floor;
4040 if (PL_parser && PL_parser->error_count)
4041 return o; /* Don't attempt to run with errors */
4043 curop = LINKLIST(o);
4046 S_prune_chain_head(&curop);
4048 Perl_pp_pushmark(aTHX);
4051 assert (!(curop->op_flags & OPf_SPECIAL));
4052 assert(curop->op_type == OP_RANGE);
4053 Perl_pp_anonlist(aTHX);
4054 PL_tmps_floor = oldtmps_floor;
4056 o->op_type = OP_RV2AV;
4057 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
4058 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
4059 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
4060 o->op_opt = 0; /* needs to be revisited in rpeep() */
4061 av = (AV *)SvREFCNT_inc_NN(*PL_stack_sp--);
4063 /* replace subtree with an OP_CONST */
4064 curop = ((UNOP*)o)->op_first;
4065 op_sibling_splice(o, NULL, -1, newSVOP(OP_CONST, 0, (SV *)av));
4068 if (AvFILLp(av) != -1)
4069 for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp)
4072 SvREADONLY_on(*svp);
4078 /* convert o (and any siblings) into a list if not already, then
4079 * convert the parent OP_LIST to type 'type', and CHECKOP() and fold it
4083 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
4086 if (type < 0) type = -type, flags |= OPf_SPECIAL;
4087 if (!o || o->op_type != OP_LIST)
4088 o = force_list(o, 0);
4090 o->op_flags &= ~OPf_WANT;
4092 if (!(PL_opargs[type] & OA_MARK))
4093 op_null(cLISTOPo->op_first);
4095 OP * const kid2 = OP_SIBLING(cLISTOPo->op_first);
4096 if (kid2 && kid2->op_type == OP_COREARGS) {
4097 op_null(cLISTOPo->op_first);
4098 kid2->op_private |= OPpCOREARGS_PUSHMARK;
4102 o->op_type = (OPCODE)type;
4103 o->op_ppaddr = PL_ppaddr[type];
4104 o->op_flags |= flags;
4106 o = CHECKOP(type, o);
4107 if (o->op_type != (unsigned)type)
4110 return fold_constants(op_integerize(op_std_init(o)));
4114 =head1 Optree Manipulation Functions
4117 /* List constructors */
4120 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
4122 Append an item to the list of ops contained directly within a list-type
4123 op, returning the lengthened list. I<first> is the list-type op,
4124 and I<last> is the op to append to the list. I<optype> specifies the
4125 intended opcode for the list. If I<first> is not already a list of the
4126 right type, it will be upgraded into one. If either I<first> or I<last>
4127 is null, the other is returned unchanged.
4133 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
4141 if (first->op_type != (unsigned)type
4142 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
4144 return newLISTOP(type, 0, first, last);
4147 op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last);
4148 first->op_flags |= OPf_KIDS;
4153 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
4155 Concatenate the lists of ops contained directly within two list-type ops,
4156 returning the combined list. I<first> and I<last> are the list-type ops
4157 to concatenate. I<optype> specifies the intended opcode for the list.
4158 If either I<first> or I<last> is not already a list of the right type,
4159 it will be upgraded into one. If either I<first> or I<last> is null,
4160 the other is returned unchanged.
4166 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
4174 if (first->op_type != (unsigned)type)
4175 return op_prepend_elem(type, first, last);
4177 if (last->op_type != (unsigned)type)
4178 return op_append_elem(type, first, last);
4180 ((LISTOP*)first)->op_last->op_lastsib = 0;
4181 OP_SIBLING_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first);
4182 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
4183 ((LISTOP*)first)->op_last->op_lastsib = 1;
4184 #ifdef PERL_OP_PARENT
4185 ((LISTOP*)first)->op_last->op_sibling = first;
4187 first->op_flags |= (last->op_flags & OPf_KIDS);
4190 S_op_destroy(aTHX_ last);
4196 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
4198 Prepend an item to the list of ops contained directly within a list-type
4199 op, returning the lengthened list. I<first> is the op to prepend to the
4200 list, and I<last> is the list-type op. I<optype> specifies the intended
4201 opcode for the list. If I<last> is not already a list of the right type,
4202 it will be upgraded into one. If either I<first> or I<last> is null,
4203 the other is returned unchanged.
4209 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
4217 if (last->op_type == (unsigned)type) {
4218 if (type == OP_LIST) { /* already a PUSHMARK there */
4219 /* insert 'first' after pushmark */
4220 op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first);
4221 if (!(first->op_flags & OPf_PARENS))
4222 last->op_flags &= ~OPf_PARENS;
4225 op_sibling_splice(last, NULL, 0, first);
4226 last->op_flags |= OPf_KIDS;
4230 return newLISTOP(type, 0, first, last);
4237 =head1 Optree construction
4239 =for apidoc Am|OP *|newNULLLIST
4241 Constructs, checks, and returns a new C<stub> op, which represents an
4242 empty list expression.
4248 Perl_newNULLLIST(pTHX)
4250 return newOP(OP_STUB, 0);
4253 /* promote o and any siblings to be a list if its not already; i.e.
4261 * pushmark - o - A - B
4263 * If nullit it true, the list op is nulled.
4267 S_force_list(pTHX_ OP *o, bool nullit)
4269 if (!o || o->op_type != OP_LIST) {
4272 /* manually detach any siblings then add them back later */
4273 rest = OP_SIBLING(o);
4274 OP_SIBLING_set(o, NULL);
4277 o = newLISTOP(OP_LIST, 0, o, NULL);
4279 op_sibling_splice(o, cLISTOPo->op_last, 0, rest);
4287 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
4289 Constructs, checks, and returns an op of any list type. I<type> is
4290 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4291 C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
4292 supply up to two ops to be direct children of the list op; they are
4293 consumed by this function and become part of the constructed op tree.
4299 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4304 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
4306 NewOp(1101, listop, 1, LISTOP);
4308 listop->op_type = (OPCODE)type;
4309 listop->op_ppaddr = PL_ppaddr[type];
4312 listop->op_flags = (U8)flags;
4316 else if (!first && last)
4319 OP_SIBLING_set(first, last);
4320 listop->op_first = first;
4321 listop->op_last = last;
4322 if (type == OP_LIST) {
4323 OP* const pushop = newOP(OP_PUSHMARK, 0);
4324 pushop->op_lastsib = 0;
4325 OP_SIBLING_set(pushop, first);
4326 listop->op_first = pushop;
4327 listop->op_flags |= OPf_KIDS;
4329 listop->op_last = pushop;
4332 first->op_lastsib = 0;
4333 if (listop->op_last) {
4334 listop->op_last->op_lastsib = 1;
4335 #ifdef PERL_OP_PARENT
4336 listop->op_last->op_sibling = (OP*)listop;
4340 return CHECKOP(type, listop);
4344 =for apidoc Am|OP *|newOP|I32 type|I32 flags
4346 Constructs, checks, and returns an op of any base type (any type that
4347 has no extra fields). I<type> is the opcode. I<flags> gives the
4348 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
4355 Perl_newOP(pTHX_ I32 type, I32 flags)
4360 if (type == -OP_ENTEREVAL) {
4361 type = OP_ENTEREVAL;
4362 flags |= OPpEVAL_BYTES<<8;
4365 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
4366 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4367 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4368 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4370 NewOp(1101, o, 1, OP);
4371 o->op_type = (OPCODE)type;
4372 o->op_ppaddr = PL_ppaddr[type];
4373 o->op_flags = (U8)flags;
4376 o->op_private = (U8)(0 | (flags >> 8));
4377 if (PL_opargs[type] & OA_RETSCALAR)
4379 if (PL_opargs[type] & OA_TARGET)
4380 o->op_targ = pad_alloc(type, SVs_PADTMP);
4381 return CHECKOP(type, o);
4385 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
4387 Constructs, checks, and returns an op of any unary type. I<type> is
4388 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
4389 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
4390 bits, the eight bits of C<op_private>, except that the bit with value 1
4391 is automatically set. I<first> supplies an optional op to be the direct
4392 child of the unary op; it is consumed by this function and become part
4393 of the constructed op tree.
4399 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
4404 if (type == -OP_ENTEREVAL) {
4405 type = OP_ENTEREVAL;
4406 flags |= OPpEVAL_BYTES<<8;
4409 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
4410 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
4411 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
4412 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
4413 || type == OP_SASSIGN
4414 || type == OP_ENTERTRY
4415 || type == OP_NULL );
4418 first = newOP(OP_STUB, 0);
4419 if (PL_opargs[type] & OA_MARK)
4420 first = force_list(first, 1);
4422 NewOp(1101, unop, 1, UNOP);
4423 unop->op_type = (OPCODE)type;
4424 unop->op_ppaddr = PL_ppaddr[type];
4425 unop->op_first = first;
4426 unop->op_flags = (U8)(flags | OPf_KIDS);
4427 unop->op_private = (U8)(1 | (flags >> 8));
4429 #ifdef PERL_OP_PARENT
4430 if (!OP_HAS_SIBLING(first)) /* true unless weird syntax error */
4431 first->op_sibling = (OP*)unop;
4434 unop = (UNOP*) CHECKOP(type, unop);
4438 return fold_constants(op_integerize(op_std_init((OP *) unop)));
4442 =for apidoc Am|OP *|newMETHOP|I32 type|I32 flags|OP *first
4444 Constructs, checks, and returns an op of method type with a method name
4445 evaluated at runtime. I<type> is the opcode. I<flags> gives the eight
4446 bits of C<op_flags>, except that C<OPf_KIDS> will be set automatically,
4447 and, shifted up eight bits, the eight bits of C<op_private>, except that
4448 the bit with value 1 is automatically set. I<dynamic_meth> supplies an
4449 op which evaluates method name; it is consumed by this function and
4450 become part of the constructed op tree.
4451 Supported optypes: OP_METHOD.
4457 S_newMETHOP_internal(pTHX_ I32 type, I32 flags, OP* dynamic_meth, SV* const_meth) {
4461 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_METHOP);
4463 NewOp(1101, methop, 1, METHOP);
4465 if (PL_opargs[type] & OA_MARK) dynamic_meth = force_list(dynamic_meth, 1);
4466 methop->op_flags = (U8)(flags | OPf_KIDS);
4467 methop->op_u.op_first = dynamic_meth;
4468 methop->op_private = (U8)(1 | (flags >> 8));
4472 methop->op_flags = (U8)(flags & ~OPf_KIDS);
4473 methop->op_u.op_meth_sv = const_meth;
4474 methop->op_private = (U8)(0 | (flags >> 8));
4475 methop->op_next = (OP*)methop;
4478 methop->op_type = (OPCODE)type;
4479 methop->op_ppaddr = PL_ppaddr[type];
4480 methop = (METHOP*) CHECKOP(type, methop);
4482 if (methop->op_next) return (OP*)methop;
4484 return fold_constants(op_integerize(op_std_init((OP *) methop)));
4488 Perl_newMETHOP (pTHX_ I32 type, I32 flags, OP* dynamic_meth) {
4489 PERL_ARGS_ASSERT_NEWMETHOP;
4490 return newMETHOP_internal(type, flags, dynamic_meth, NULL);
4494 =for apidoc Am|OP *|newMETHOP_named|I32 type|I32 flags|SV *const_meth
4496 Constructs, checks, and returns an op of method type with a constant
4497 method name. I<type> is the opcode. I<flags> gives the eight bits of
4498 C<op_flags>, and, shifted up eight bits, the eight bits of
4499 C<op_private>. I<const_meth> supplies a constant method name;
4500 it must be a shared COW string.
4501 Supported optypes: OP_METHOD_NAMED.
4507 Perl_newMETHOP_named (pTHX_ I32 type, I32 flags, SV* const_meth) {
4508 PERL_ARGS_ASSERT_NEWMETHOP_NAMED;
4509 return newMETHOP_internal(type, flags, NULL, const_meth);
4513 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
4515 Constructs, checks, and returns an op of any binary type. I<type>
4516 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
4517 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
4518 the eight bits of C<op_private>, except that the bit with value 1 or
4519 2 is automatically set as required. I<first> and I<last> supply up to
4520 two ops to be the direct children of the binary op; they are consumed
4521 by this function and become part of the constructed op tree.
4527 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
4532 ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
4533 || type == OP_SASSIGN || type == OP_NULL );
4535 NewOp(1101, binop, 1, BINOP);
4538 first = newOP(OP_NULL, 0);
4540 binop->op_type = (OPCODE)type;
4541 binop->op_ppaddr = PL_ppaddr[type];
4542 binop->op_first = first;
4543 binop->op_flags = (U8)(flags | OPf_KIDS);
4546 binop->op_private = (U8)(1 | (flags >> 8));
4549 binop->op_private = (U8)(2 | (flags >> 8));
4550 OP_SIBLING_set(first, last);
4551 first->op_lastsib = 0;
4554 #ifdef PERL_OP_PARENT
4555 if (!OP_HAS_SIBLING(last)) /* true unless weird syntax error */
4556 last->op_sibling = (OP*)binop;
4559 binop->op_last = OP_SIBLING(binop->op_first);
4560 #ifdef PERL_OP_PARENT
4562 binop->op_last->op_sibling = (OP*)binop;
4565 binop = (BINOP*)CHECKOP(type, binop);
4566 if (binop->op_next || binop->op_type != (OPCODE)type)
4569 return fold_constants(op_integerize(op_std_init((OP *)binop)));
4572 static int uvcompare(const void *a, const void *b)
4573 __attribute__nonnull__(1)
4574 __attribute__nonnull__(2)
4575 __attribute__pure__;
4576 static int uvcompare(const void *a, const void *b)
4578 if (*((const UV *)a) < (*(const UV *)b))
4580 if (*((const UV *)a) > (*(const UV *)b))
4582 if (*((const UV *)a+1) < (*(const UV *)b+1))
4584 if (*((const UV *)a+1) > (*(const UV *)b+1))
4590 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
4592 SV * const tstr = ((SVOP*)expr)->op_sv;
4594 ((SVOP*)repl)->op_sv;
4597 const U8 *t = (U8*)SvPV_const(tstr, tlen);
4598 const U8 *r = (U8*)SvPV_const(rstr, rlen);
4604 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
4605 const I32 squash = o->op_private & OPpTRANS_SQUASH;
4606 I32 del = o->op_private & OPpTRANS_DELETE;
4609 PERL_ARGS_ASSERT_PMTRANS;
4611 PL_hints |= HINT_BLOCK_SCOPE;
4614 o->op_private |= OPpTRANS_FROM_UTF;
4617 o->op_private |= OPpTRANS_TO_UTF;
4619 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
4620 SV* const listsv = newSVpvs("# comment\n");
4622 const U8* tend = t + tlen;
4623 const U8* rend = r + rlen;
4637 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
4638 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
4641 const U32 flags = UTF8_ALLOW_DEFAULT;
4645 t = tsave = bytes_to_utf8(t, &len);
4648 if (!to_utf && rlen) {
4650 r = rsave = bytes_to_utf8(r, &len);
4654 /* There is a snag with this code on EBCDIC: scan_const() in toke.c has
4655 * encoded chars in native encoding which makes ranges in the EBCDIC 0..255
4659 U8 tmpbuf[UTF8_MAXBYTES+1];
4662 Newx(cp, 2*tlen, UV);
4664 transv = newSVpvs("");
4666 cp[2*i] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
4668 if (t < tend && *t == ILLEGAL_UTF8_BYTE) {
4670 cp[2*i+1] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
4674 cp[2*i+1] = cp[2*i];
4678 qsort(cp, i, 2*sizeof(UV), uvcompare);
4679 for (j = 0; j < i; j++) {
4681 diff = val - nextmin;
4683 t = uvchr_to_utf8(tmpbuf,nextmin);
4684 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4686 U8 range_mark = ILLEGAL_UTF8_BYTE;
4687 t = uvchr_to_utf8(tmpbuf, val - 1);
4688 sv_catpvn(transv, (char *)&range_mark, 1);
4689 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4696 t = uvchr_to_utf8(tmpbuf,nextmin);
4697 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4699 U8 range_mark = ILLEGAL_UTF8_BYTE;
4700 sv_catpvn(transv, (char *)&range_mark, 1);
4702 t = uvchr_to_utf8(tmpbuf, 0x7fffffff);
4703 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4704 t = (const U8*)SvPVX_const(transv);
4705 tlen = SvCUR(transv);
4709 else if (!rlen && !del) {
4710 r = t; rlen = tlen; rend = tend;
4713 if ((!rlen && !del) || t == r ||
4714 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
4716 o->op_private |= OPpTRANS_IDENTICAL;
4720 while (t < tend || tfirst <= tlast) {
4721 /* see if we need more "t" chars */
4722 if (tfirst > tlast) {
4723 tfirst = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
4725 if (t < tend && *t == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
4727 tlast = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
4734 /* now see if we need more "r" chars */
4735 if (rfirst > rlast) {
4737 rfirst = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
4739 if (r < rend && *r == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
4741 rlast = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
4750 rfirst = rlast = 0xffffffff;
4754 /* now see which range will peter our first, if either. */
4755 tdiff = tlast - tfirst;
4756 rdiff = rlast - rfirst;
4763 if (rfirst == 0xffffffff) {
4764 diff = tdiff; /* oops, pretend rdiff is infinite */
4766 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
4767 (long)tfirst, (long)tlast);
4769 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
4773 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
4774 (long)tfirst, (long)(tfirst + diff),
4777 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
4778 (long)tfirst, (long)rfirst);
4780 if (rfirst + diff > max)
4781 max = rfirst + diff;
4783 grows = (tfirst < rfirst &&
4784 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
4796 else if (max > 0xff)
4801 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
4803 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVf_READONLY);
4804 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
4805 PAD_SETSV(cPADOPo->op_padix, swash);
4807 SvREADONLY_on(swash);
4809 cSVOPo->op_sv = swash;
4811 SvREFCNT_dec(listsv);
4812 SvREFCNT_dec(transv);
4814 if (!del && havefinal && rlen)
4815 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
4816 newSVuv((UV)final), 0);
4819 o->op_private |= OPpTRANS_GROWS;
4829 tbl = (short*)PerlMemShared_calloc(
4830 (o->op_private & OPpTRANS_COMPLEMENT) &&
4831 !(o->op_private & OPpTRANS_DELETE) ? 258 : 256,
4833 cPVOPo->op_pv = (char*)tbl;
4835 for (i = 0; i < (I32)tlen; i++)
4837 for (i = 0, j = 0; i < 256; i++) {
4839 if (j >= (I32)rlen) {
4848 if (i < 128 && r[j] >= 128)
4858 o->op_private |= OPpTRANS_IDENTICAL;
4860 else if (j >= (I32)rlen)
4865 PerlMemShared_realloc(tbl,
4866 (0x101+rlen-j) * sizeof(short));
4867 cPVOPo->op_pv = (char*)tbl;
4869 tbl[0x100] = (short)(rlen - j);