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 /* See the explanatory comments above struct opslab in op.h. */
114 #ifdef PERL_DEBUG_READONLY_OPS
115 # define PERL_SLAB_SIZE 128
116 # define PERL_MAX_SLAB_SIZE 4096
117 # include <sys/mman.h>
120 #ifndef PERL_SLAB_SIZE
121 # define PERL_SLAB_SIZE 64
123 #ifndef PERL_MAX_SLAB_SIZE
124 # define PERL_MAX_SLAB_SIZE 2048
127 /* rounds up to nearest pointer */
128 #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
129 #define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
132 S_new_slab(pTHX_ size_t sz)
134 #ifdef PERL_DEBUG_READONLY_OPS
135 OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
136 PROT_READ|PROT_WRITE,
137 MAP_ANON|MAP_PRIVATE, -1, 0);
138 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
139 (unsigned long) sz, slab));
140 if (slab == MAP_FAILED) {
141 perror("mmap failed");
144 slab->opslab_size = (U16)sz;
146 OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
148 slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
152 /* requires double parens and aTHX_ */
153 #define DEBUG_S_warn(args) \
155 PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
159 Perl_Slab_Alloc(pTHX_ size_t sz)
168 if (!PL_compcv || CvROOT(PL_compcv)
169 || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv)))
170 return PerlMemShared_calloc(1, sz);
172 if (!CvSTART(PL_compcv)) { /* sneak it in here */
174 (OP *)(slab = S_new_slab(aTHX_ PERL_SLAB_SIZE));
175 CvSLABBED_on(PL_compcv);
176 slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
178 else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
180 opsz = SIZE_TO_PSIZE(sz);
181 sz = opsz + OPSLOT_HEADER_P;
183 if (slab->opslab_freed) {
184 OP **too = &slab->opslab_freed;
186 DEBUG_S_warn((aTHX_ "found free op at %p, slab %p", o, slab));
187 while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
188 DEBUG_S_warn((aTHX_ "Alas! too small"));
189 o = *(too = &o->op_next);
190 if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", o)); }
194 Zero(o, opsz, I32 *);
200 #define INIT_OPSLOT \
201 slot->opslot_slab = slab; \
202 slot->opslot_next = slab2->opslab_first; \
203 slab2->opslab_first = slot; \
204 o = &slot->opslot_op; \
207 /* The partially-filled slab is next in the chain. */
208 slab2 = slab->opslab_next ? slab->opslab_next : slab;
209 if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) {
210 /* Remaining space is too small. */
212 /* If we can fit a BASEOP, add it to the free chain, so as not
214 if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
215 slot = &slab2->opslab_slots;
217 o->op_type = OP_FREED;
218 o->op_next = slab->opslab_freed;
219 slab->opslab_freed = o;
222 /* Create a new slab. Make this one twice as big. */
223 slot = slab2->opslab_first;
224 while (slot->opslot_next) slot = slot->opslot_next;
225 slab2 = S_new_slab(aTHX_
226 (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE
228 : (DIFF(slab2, slot)+1)*2);
229 slab2->opslab_next = slab->opslab_next;
230 slab->opslab_next = slab2;
232 assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
234 /* Create a new op slot */
235 slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz);
236 assert(slot >= &slab2->opslab_slots);
237 if (DIFF(&slab2->opslab_slots, slot)
238 < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
239 slot = &slab2->opslab_slots;
241 DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", o, slab));
247 #ifdef PERL_DEBUG_READONLY_OPS
249 Perl_Slab_to_ro(pTHX_ OPSLAB *slab)
251 PERL_ARGS_ASSERT_SLAB_TO_RO;
253 if (slab->opslab_readonly) return;
254 slab->opslab_readonly = 1;
255 for (; slab; slab = slab->opslab_next) {
256 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n",
257 (unsigned long) slab->opslab_size, slab));*/
258 if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ))
259 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab,
260 (unsigned long)slab->opslab_size, errno);
265 S_Slab_to_rw(pTHX_ void *op)
267 OP * const o = (OP *)op;
271 PERL_ARGS_ASSERT_SLAB_TO_RW;
273 if (!o->op_slabbed) return;
276 if (!slab->opslab_readonly) return;
278 for (; slab2; slab2 = slab2->opslab_next) {
279 /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n",
280 (unsigned long) size, slab2));*/
281 if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *),
282 PROT_READ|PROT_WRITE)) {
283 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab,
284 (unsigned long)slab2->opslab_size, errno);
287 slab->opslab_readonly = 0;
291 # define Slab_to_rw(op)
294 /* This cannot possibly be right, but it was copied from the old slab
295 allocator, to which it was originally added, without explanation, in
298 # define PerlMemShared PerlMem
302 Perl_Slab_Free(pTHX_ void *op)
305 OP * const o = (OP *)op;
308 PERL_ARGS_ASSERT_SLAB_FREE;
310 if (!o->op_slabbed) {
311 PerlMemShared_free(op);
316 /* If this op is already freed, our refcount will get screwy. */
317 assert(o->op_type != OP_FREED);
318 o->op_type = OP_FREED;
319 o->op_next = slab->opslab_freed;
320 slab->opslab_freed = o;
321 DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", o, slab));
322 OpslabREFCNT_dec_padok(slab);
326 Perl_opslab_free_nopad(pTHX_ OPSLAB *slab)
329 const bool havepad = !!PL_comppad;
330 PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD;
333 PAD_SAVE_SETNULLPAD();
340 Perl_opslab_free(pTHX_ OPSLAB *slab)
344 PERL_ARGS_ASSERT_OPSLAB_FREE;
345 DEBUG_S_warn((aTHX_ "freeing slab %p", slab));
346 assert(slab->opslab_refcnt == 1);
347 for (; slab; slab = slab2) {
348 slab2 = slab->opslab_next;
350 slab->opslab_refcnt = ~(size_t)0;
352 #ifdef PERL_DEBUG_READONLY_OPS
353 DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n",
355 if (munmap(slab, slab->opslab_size * sizeof(I32 *))) {
356 perror("munmap failed");
360 PerlMemShared_free(slab);
366 Perl_opslab_force_free(pTHX_ OPSLAB *slab)
371 size_t savestack_count = 0;
373 PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
376 for (slot = slab2->opslab_first;
378 slot = slot->opslot_next) {
379 if (slot->opslot_op.op_type != OP_FREED
380 && !(slot->opslot_op.op_savefree
386 assert(slot->opslot_op.op_slabbed);
387 slab->opslab_refcnt++; /* op_free may free slab */
388 op_free(&slot->opslot_op);
389 if (!--slab->opslab_refcnt) goto free;
392 } while ((slab2 = slab2->opslab_next));
393 /* > 1 because the CV still holds a reference count. */
394 if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */
396 assert(savestack_count == slab->opslab_refcnt-1);
404 #ifdef PERL_DEBUG_READONLY_OPS
406 Perl_op_refcnt_inc(pTHX_ OP *o)
417 Perl_op_refcnt_dec(pTHX_ OP *o)
419 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
425 * In the following definition, the ", (OP*)0" is just to make the compiler
426 * think the expression is of the right type: croak actually does a Siglongjmp.
428 #define CHECKOP(type,o) \
429 ((PL_op_mask && PL_op_mask[type]) \
430 ? ( op_free((OP*)o), \
431 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
433 : PL_check[type](aTHX_ (OP*)o))
435 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
437 #define CHANGE_TYPE(o,type) \
439 o->op_type = (OPCODE)type; \
440 o->op_ppaddr = PL_ppaddr[type]; \
444 S_gv_ename(pTHX_ GV *gv)
446 SV* const tmpsv = sv_newmortal();
448 PERL_ARGS_ASSERT_GV_ENAME;
450 gv_efullname3(tmpsv, gv, NULL);
455 S_no_fh_allowed(pTHX_ OP *o)
457 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
459 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
465 S_too_few_arguments_sv(pTHX_ OP *o, SV *namesv, U32 flags)
467 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_SV;
468 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %"SVf, namesv),
469 SvUTF8(namesv) | flags);
474 S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
476 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV;
477 yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
482 S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
484 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV;
486 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %s", name), flags);
491 S_too_many_arguments_sv(pTHX_ OP *o, SV *namesv, U32 flags)
493 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_SV;
495 yyerror_pv(Perl_form(aTHX_ "Too many arguments for %"SVf, SVfARG(namesv)),
496 SvUTF8(namesv) | flags);
501 S_bad_type_pv(pTHX_ I32 n, const char *t, const char *name, U32 flags, const OP *kid)
503 PERL_ARGS_ASSERT_BAD_TYPE_PV;
505 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
506 (int)n, name, t, OP_DESC(kid)), flags);
510 S_bad_type_sv(pTHX_ I32 n, const char *t, SV *namesv, U32 flags, const OP *kid)
512 PERL_ARGS_ASSERT_BAD_TYPE_SV;
514 yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %"SVf" must be %s (not %s)",
515 (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv) | flags);
519 S_no_bareword_allowed(pTHX_ OP *o)
521 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
524 return; /* various ok barewords are hidden in extra OP_NULL */
525 qerror(Perl_mess(aTHX_
526 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
528 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
531 /* "register" allocation */
534 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
538 const bool is_our = (PL_parser->in_my == KEY_our);
540 PERL_ARGS_ASSERT_ALLOCMY;
542 if (flags & ~SVf_UTF8)
543 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
546 /* Until we're using the length for real, cross check that we're being
548 assert(strlen(name) == len);
550 /* complain about "my $<special_var>" etc etc */
554 ((flags & SVf_UTF8) && isIDFIRST_utf8((U8 *)name+1)) ||
555 (name[1] == '_' && (*name == '$' || len > 2))))
557 /* name[2] is true if strlen(name) > 2 */
558 if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
559 && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
560 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
561 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
562 PL_parser->in_my == KEY_state ? "state" : "my"));
564 yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
565 PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
569 /* allocate a spare slot and store the name in that slot */
571 off = pad_add_name_pvn(name, len,
572 (is_our ? padadd_OUR :
573 PL_parser->in_my == KEY_state ? padadd_STATE : 0)
574 | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ),
575 PL_parser->in_my_stash,
577 /* $_ is always in main::, even with our */
578 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
582 /* anon sub prototypes contains state vars should always be cloned,
583 * otherwise the state var would be shared between anon subs */
585 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
586 CvCLONE_on(PL_compcv);
592 =for apidoc alloccopstash
594 Available only under threaded builds, this function allocates an entry in
595 C<PL_stashpad> for the stash passed to it.
602 Perl_alloccopstash(pTHX_ HV *hv)
604 PADOFFSET off = 0, o = 1;
605 bool found_slot = FALSE;
607 PERL_ARGS_ASSERT_ALLOCCOPSTASH;
609 if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix;
611 for (; o < PL_stashpadmax; ++o) {
612 if (PL_stashpad[o] == hv) return PL_stashpadix = o;
613 if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV)
614 found_slot = TRUE, off = o;
617 Renew(PL_stashpad, PL_stashpadmax + 10, HV *);
618 Zero(PL_stashpad + PL_stashpadmax, 10, HV *);
619 off = PL_stashpadmax;
620 PL_stashpadmax += 10;
623 PL_stashpad[PL_stashpadix = off] = hv;
628 /* free the body of an op without examining its contents.
629 * Always use this rather than FreeOp directly */
632 S_op_destroy(pTHX_ OP *o)
638 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
640 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
646 Perl_op_free(pTHX_ OP *o)
651 /* Though ops may be freed twice, freeing the op after its slab is a
653 assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
654 /* During the forced freeing of ops after compilation failure, kidops
655 may be freed before their parents. */
656 if (!o || o->op_type == OP_FREED)
660 if (o->op_private & OPpREFCOUNTED) {
671 refcnt = OpREFCNT_dec(o);
674 /* Need to find and remove any pattern match ops from the list
675 we maintain for reset(). */
676 find_and_forget_pmops(o);
686 /* Call the op_free hook if it has been set. Do it now so that it's called
687 * at the right time for refcounted ops, but still before all of the kids
691 if (o->op_flags & OPf_KIDS) {
692 register OP *kid, *nextkid;
693 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
694 nextkid = kid->op_sibling; /* Get before next freeing kid */
699 type = (OPCODE)o->op_targ;
703 /* COP* is not cleared by op_clear() so that we may track line
704 * numbers etc even after null() */
705 if (type == OP_NEXTSTATE || type == OP_DBSTATE) {
711 #ifdef DEBUG_LEAKING_SCALARS
718 Perl_op_clear(pTHX_ OP *o)
723 PERL_ARGS_ASSERT_OP_CLEAR;
726 mad_free(o->op_madprop);
731 switch (o->op_type) {
732 case OP_NULL: /* Was holding old type, if any. */
733 if (PL_madskills && o->op_targ != OP_NULL) {
734 o->op_type = (Optype)o->op_targ;
739 case OP_ENTEREVAL: /* Was holding hints. */
743 if (!(o->op_flags & OPf_REF)
744 || (PL_check[o->op_type] != Perl_ck_ftst))
751 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
756 /* It's possible during global destruction that the GV is freed
757 before the optree. Whilst the SvREFCNT_inc is happy to bump from
758 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
759 will trigger an assertion failure, because the entry to sv_clear
760 checks that the scalar is not already freed. A check of for
761 !SvIS_FREED(gv) turns out to be invalid, because during global
762 destruction the reference count can be forced down to zero
763 (with SVf_BREAK set). In which case raising to 1 and then
764 dropping to 0 triggers cleanup before it should happen. I
765 *think* that this might actually be a general, systematic,
766 weakness of the whole idea of SVf_BREAK, in that code *is*
767 allowed to raise and lower references during global destruction,
768 so any *valid* code that happens to do this during global
769 destruction might well trigger premature cleanup. */
770 bool still_valid = gv && SvREFCNT(gv);
773 SvREFCNT_inc_simple_void(gv);
775 if (cPADOPo->op_padix > 0) {
776 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
777 * may still exist on the pad */
778 pad_swipe(cPADOPo->op_padix, TRUE);
779 cPADOPo->op_padix = 0;
782 SvREFCNT_dec(cSVOPo->op_sv);
783 cSVOPo->op_sv = NULL;
786 int try_downgrade = SvREFCNT(gv) == 2;
789 gv_try_downgrade(gv);
793 case OP_METHOD_NAMED:
796 SvREFCNT_dec(cSVOPo->op_sv);
797 cSVOPo->op_sv = NULL;
800 Even if op_clear does a pad_free for the target of the op,
801 pad_free doesn't actually remove the sv that exists in the pad;
802 instead it lives on. This results in that it could be reused as
803 a target later on when the pad was reallocated.
806 pad_swipe(o->op_targ,1);
816 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
821 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
822 assert(o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
824 if (cPADOPo->op_padix > 0) {
825 pad_swipe(cPADOPo->op_padix, TRUE);
826 cPADOPo->op_padix = 0;
829 SvREFCNT_dec(cSVOPo->op_sv);
830 cSVOPo->op_sv = NULL;
834 PerlMemShared_free(cPVOPo->op_pv);
835 cPVOPo->op_pv = NULL;
839 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
843 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
844 /* No GvIN_PAD_off here, because other references may still
845 * exist on the pad */
846 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
849 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
855 if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE))
856 op_free(cPMOPo->op_code_list);
857 cPMOPo->op_code_list = NULL;
858 forget_pmop(cPMOPo, 1);
859 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
860 /* we use the same protection as the "SAFE" version of the PM_ macros
861 * here since sv_clean_all might release some PMOPs
862 * after PL_regex_padav has been cleared
863 * and the clearing of PL_regex_padav needs to
864 * happen before sv_clean_all
867 if(PL_regex_pad) { /* We could be in destruction */
868 const IV offset = (cPMOPo)->op_pmoffset;
869 ReREFCNT_dec(PM_GETRE(cPMOPo));
870 PL_regex_pad[offset] = &PL_sv_undef;
871 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
875 ReREFCNT_dec(PM_GETRE(cPMOPo));
876 PM_SETRE(cPMOPo, NULL);
882 if (o->op_targ > 0) {
883 pad_free(o->op_targ);
889 S_cop_free(pTHX_ COP* cop)
891 PERL_ARGS_ASSERT_COP_FREE;
894 if (! specialWARN(cop->cop_warnings))
895 PerlMemShared_free(cop->cop_warnings);
896 cophh_free(CopHINTHASH_get(cop));
900 S_forget_pmop(pTHX_ PMOP *const o
906 HV * const pmstash = PmopSTASH(o);
908 PERL_ARGS_ASSERT_FORGET_PMOP;
910 if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) {
911 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
913 PMOP **const array = (PMOP**) mg->mg_ptr;
914 U32 count = mg->mg_len / sizeof(PMOP**);
919 /* Found it. Move the entry at the end to overwrite it. */
920 array[i] = array[--count];
921 mg->mg_len = count * sizeof(PMOP**);
922 /* Could realloc smaller at this point always, but probably
923 not worth it. Probably worth free()ing if we're the
926 Safefree(mg->mg_ptr);
943 S_find_and_forget_pmops(pTHX_ OP *o)
945 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
947 if (o->op_flags & OPf_KIDS) {
948 OP *kid = cUNOPo->op_first;
950 switch (kid->op_type) {
955 forget_pmop((PMOP*)kid, 0);
957 find_and_forget_pmops(kid);
958 kid = kid->op_sibling;
964 Perl_op_null(pTHX_ OP *o)
968 PERL_ARGS_ASSERT_OP_NULL;
970 if (o->op_type == OP_NULL)
974 o->op_targ = o->op_type;
975 o->op_type = OP_NULL;
976 o->op_ppaddr = PL_ppaddr[OP_NULL];
980 Perl_op_refcnt_lock(pTHX)
988 Perl_op_refcnt_unlock(pTHX)
995 /* Contextualizers */
998 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
1000 Applies a syntactic context to an op tree representing an expression.
1001 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
1002 or C<G_VOID> to specify the context to apply. The modified op tree
1009 Perl_op_contextualize(pTHX_ OP *o, I32 context)
1011 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
1013 case G_SCALAR: return scalar(o);
1014 case G_ARRAY: return list(o);
1015 case G_VOID: return scalarvoid(o);
1017 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
1024 =head1 Optree Manipulation Functions
1026 =for apidoc Am|OP*|op_linklist|OP *o
1027 This function is the implementation of the L</LINKLIST> macro. It should
1028 not be called directly.
1034 Perl_op_linklist(pTHX_ OP *o)
1038 PERL_ARGS_ASSERT_OP_LINKLIST;
1043 /* establish postfix order */
1044 first = cUNOPo->op_first;
1047 o->op_next = LINKLIST(first);
1050 if (kid->op_sibling) {
1051 kid->op_next = LINKLIST(kid->op_sibling);
1052 kid = kid->op_sibling;
1066 S_scalarkids(pTHX_ OP *o)
1068 if (o && o->op_flags & OPf_KIDS) {
1070 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1077 S_scalarboolean(pTHX_ OP *o)
1081 PERL_ARGS_ASSERT_SCALARBOOLEAN;
1083 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
1084 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
1085 if (ckWARN(WARN_SYNTAX)) {
1086 const line_t oldline = CopLINE(PL_curcop);
1088 if (PL_parser && PL_parser->copline != NOLINE)
1089 CopLINE_set(PL_curcop, PL_parser->copline);
1090 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
1091 CopLINE_set(PL_curcop, oldline);
1098 Perl_scalar(pTHX_ OP *o)
1103 /* assumes no premature commitment */
1104 if (!o || (PL_parser && PL_parser->error_count)
1105 || (o->op_flags & OPf_WANT)
1106 || o->op_type == OP_RETURN)
1111 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
1113 switch (o->op_type) {
1115 scalar(cBINOPo->op_first);
1120 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1130 if (o->op_flags & OPf_KIDS) {
1131 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
1137 kid = cLISTOPo->op_first;
1139 kid = kid->op_sibling;
1142 OP *sib = kid->op_sibling;
1143 if (sib && kid->op_type != OP_LEAVEWHEN)
1149 PL_curcop = &PL_compiling;
1154 kid = cLISTOPo->op_first;
1157 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
1164 Perl_scalarvoid(pTHX_ OP *o)
1168 const char* useless = NULL;
1169 U32 useless_is_utf8 = 0;
1173 PERL_ARGS_ASSERT_SCALARVOID;
1175 /* trailing mad null ops don't count as "there" for void processing */
1177 o->op_type != OP_NULL &&
1179 o->op_sibling->op_type == OP_NULL)
1182 for (sib = o->op_sibling;
1183 sib && sib->op_type == OP_NULL;
1184 sib = sib->op_sibling) ;
1190 if (o->op_type == OP_NEXTSTATE
1191 || o->op_type == OP_DBSTATE
1192 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1193 || o->op_targ == OP_DBSTATE)))
1194 PL_curcop = (COP*)o; /* for warning below */
1196 /* assumes no premature commitment */
1197 want = o->op_flags & OPf_WANT;
1198 if ((want && want != OPf_WANT_SCALAR)
1199 || (PL_parser && PL_parser->error_count)
1200 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1205 if ((o->op_private & OPpTARGET_MY)
1206 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1208 return scalar(o); /* As if inside SASSIGN */
1211 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1213 switch (o->op_type) {
1215 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1219 if (o->op_flags & OPf_STACKED)
1223 if (o->op_private == 4)
1248 case OP_AELEMFAST_LEX:
1267 case OP_GETSOCKNAME:
1268 case OP_GETPEERNAME:
1273 case OP_GETPRIORITY:
1298 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1299 /* Otherwise it's "Useless use of grep iterator" */
1300 useless = OP_DESC(o);
1304 kid = cLISTOPo->op_first;
1305 if (kid && kid->op_type == OP_PUSHRE
1307 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1309 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1311 useless = OP_DESC(o);
1315 kid = cUNOPo->op_first;
1316 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1317 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1320 useless = "negative pattern binding (!~)";
1324 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1325 useless = "non-destructive substitution (s///r)";
1329 useless = "non-destructive transliteration (tr///r)";
1336 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1337 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1338 useless = "a variable";
1343 if (cSVOPo->op_private & OPpCONST_STRICT)
1344 no_bareword_allowed(o);
1346 if (ckWARN(WARN_VOID)) {
1347 /* don't warn on optimised away booleans, eg
1348 * use constant Foo, 5; Foo || print; */
1349 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1351 /* the constants 0 and 1 are permitted as they are
1352 conventionally used as dummies in constructs like
1353 1 while some_condition_with_side_effects; */
1354 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1356 else if (SvPOK(sv)) {
1357 /* perl4's way of mixing documentation and code
1358 (before the invention of POD) was based on a
1359 trick to mix nroff and perl code. The trick was
1360 built upon these three nroff macros being used in
1361 void context. The pink camel has the details in
1362 the script wrapman near page 319. */
1363 const char * const maybe_macro = SvPVX_const(sv);
1364 if (strnEQ(maybe_macro, "di", 2) ||
1365 strnEQ(maybe_macro, "ds", 2) ||
1366 strnEQ(maybe_macro, "ig", 2))
1369 SV * const dsv = newSVpvs("");
1370 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1372 pv_pretty(dsv, maybe_macro, SvCUR(sv), 32, NULL, NULL,
1373 PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_NOCLEAR | PERL_PV_ESCAPE_UNI_DETECT )));
1375 useless = SvPV_nolen(msv);
1376 useless_is_utf8 = SvUTF8(msv);
1379 else if (SvOK(sv)) {
1380 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1381 "a constant (%"SVf")", sv));
1382 useless = SvPV_nolen(msv);
1385 useless = "a constant (undef)";
1388 op_null(o); /* don't execute or even remember it */
1392 o->op_type = OP_PREINC; /* pre-increment is faster */
1393 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1397 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1398 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1402 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1403 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1407 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1408 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1413 UNOP *refgen, *rv2cv;
1416 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
1419 rv2gv = ((BINOP *)o)->op_last;
1420 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
1423 refgen = (UNOP *)((BINOP *)o)->op_first;
1425 if (!refgen || refgen->op_type != OP_REFGEN)
1428 exlist = (LISTOP *)refgen->op_first;
1429 if (!exlist || exlist->op_type != OP_NULL
1430 || exlist->op_targ != OP_LIST)
1433 if (exlist->op_first->op_type != OP_PUSHMARK)
1436 rv2cv = (UNOP*)exlist->op_last;
1438 if (rv2cv->op_type != OP_RV2CV)
1441 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
1442 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
1443 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
1445 o->op_private |= OPpASSIGN_CV_TO_GV;
1446 rv2gv->op_private |= OPpDONT_INIT_GV;
1447 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
1459 kid = cLOGOPo->op_first;
1460 if (kid->op_type == OP_NOT
1461 && (kid->op_flags & OPf_KIDS)
1463 if (o->op_type == OP_AND) {
1465 o->op_ppaddr = PL_ppaddr[OP_OR];
1467 o->op_type = OP_AND;
1468 o->op_ppaddr = PL_ppaddr[OP_AND];
1477 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1482 if (o->op_flags & OPf_STACKED)
1489 if (!(o->op_flags & OPf_KIDS))
1500 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1510 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %"SVf" in void context",
1511 newSVpvn_flags(useless, strlen(useless),
1512 SVs_TEMP | ( useless_is_utf8 ? SVf_UTF8 : 0 )));
1517 S_listkids(pTHX_ OP *o)
1519 if (o && o->op_flags & OPf_KIDS) {
1521 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1528 Perl_list(pTHX_ OP *o)
1533 /* assumes no premature commitment */
1534 if (!o || (o->op_flags & OPf_WANT)
1535 || (PL_parser && PL_parser->error_count)
1536 || o->op_type == OP_RETURN)
1541 if ((o->op_private & OPpTARGET_MY)
1542 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1544 return o; /* As if inside SASSIGN */
1547 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1549 switch (o->op_type) {
1552 list(cBINOPo->op_first);
1557 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1565 if (!(o->op_flags & OPf_KIDS))
1567 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1568 list(cBINOPo->op_first);
1569 return gen_constant_list(o);
1576 kid = cLISTOPo->op_first;
1578 kid = kid->op_sibling;
1581 OP *sib = kid->op_sibling;
1582 if (sib && kid->op_type != OP_LEAVEWHEN)
1588 PL_curcop = &PL_compiling;
1592 kid = cLISTOPo->op_first;
1599 S_scalarseq(pTHX_ OP *o)
1603 const OPCODE type = o->op_type;
1605 if (type == OP_LINESEQ || type == OP_SCOPE ||
1606 type == OP_LEAVE || type == OP_LEAVETRY)
1609 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1610 if (kid->op_sibling) {
1614 PL_curcop = &PL_compiling;
1616 o->op_flags &= ~OPf_PARENS;
1617 if (PL_hints & HINT_BLOCK_SCOPE)
1618 o->op_flags |= OPf_PARENS;
1621 o = newOP(OP_STUB, 0);
1626 S_modkids(pTHX_ OP *o, I32 type)
1628 if (o && o->op_flags & OPf_KIDS) {
1630 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1631 op_lvalue(kid, type);
1637 =for apidoc finalize_optree
1639 This function finalizes the optree. Should be called directly after
1640 the complete optree is built. It does some additional
1641 checking which can't be done in the normal ck_xxx functions and makes
1642 the tree thread-safe.
1647 Perl_finalize_optree(pTHX_ OP* o)
1649 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
1652 SAVEVPTR(PL_curcop);
1660 S_finalize_op(pTHX_ OP* o)
1662 PERL_ARGS_ASSERT_FINALIZE_OP;
1664 #if defined(PERL_MAD) && defined(USE_ITHREADS)
1666 /* Make sure mad ops are also thread-safe */
1667 MADPROP *mp = o->op_madprop;
1669 if (mp->mad_type == MAD_OP && mp->mad_vlen) {
1670 OP *prop_op = (OP *) mp->mad_val;
1671 /* We only need "Relocate sv to the pad for thread safety.", but this
1672 easiest way to make sure it traverses everything */
1673 if (prop_op->op_type == OP_CONST)
1674 cSVOPx(prop_op)->op_private &= ~OPpCONST_STRICT;
1675 finalize_op(prop_op);
1682 switch (o->op_type) {
1685 PL_curcop = ((COP*)o); /* for warnings */
1689 && (o->op_sibling->op_type == OP_NEXTSTATE || o->op_sibling->op_type == OP_DBSTATE)
1690 && ckWARN(WARN_SYNTAX))
1692 if (o->op_sibling->op_sibling) {
1693 const OPCODE type = o->op_sibling->op_sibling->op_type;
1694 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
1695 const line_t oldline = CopLINE(PL_curcop);
1696 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_sibling));
1697 Perl_warner(aTHX_ packWARN(WARN_EXEC),
1698 "Statement unlikely to be reached");
1699 Perl_warner(aTHX_ packWARN(WARN_EXEC),
1700 "\t(Maybe you meant system() when you said exec()?)\n");
1701 CopLINE_set(PL_curcop, oldline);
1708 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
1709 GV * const gv = cGVOPo_gv;
1710 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
1711 /* XXX could check prototype here instead of just carping */
1712 SV * const sv = sv_newmortal();
1713 gv_efullname3(sv, gv, NULL);
1714 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
1715 "%"SVf"() called too early to check prototype",
1722 if (cSVOPo->op_private & OPpCONST_STRICT)
1723 no_bareword_allowed(o);
1727 case OP_METHOD_NAMED:
1728 /* Relocate sv to the pad for thread safety.
1729 * Despite being a "constant", the SV is written to,
1730 * for reference counts, sv_upgrade() etc. */
1731 if (cSVOPo->op_sv) {
1732 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
1733 if (o->op_type != OP_METHOD_NAMED &&
1734 (SvPADTMP(cSVOPo->op_sv) || SvPADMY(cSVOPo->op_sv)))
1736 /* If op_sv is already a PADTMP/MY then it is being used by
1737 * some pad, so make a copy. */
1738 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
1739 SvREADONLY_on(PAD_SVl(ix));
1740 SvREFCNT_dec(cSVOPo->op_sv);
1742 else if (o->op_type != OP_METHOD_NAMED
1743 && cSVOPo->op_sv == &PL_sv_undef) {
1744 /* PL_sv_undef is hack - it's unsafe to store it in the
1745 AV that is the pad, because av_fetch treats values of
1746 PL_sv_undef as a "free" AV entry and will merrily
1747 replace them with a new SV, causing pad_alloc to think
1748 that this pad slot is free. (When, clearly, it is not)
1750 SvOK_off(PAD_SVl(ix));
1751 SvPADTMP_on(PAD_SVl(ix));
1752 SvREADONLY_on(PAD_SVl(ix));
1755 SvREFCNT_dec(PAD_SVl(ix));
1756 SvPADTMP_on(cSVOPo->op_sv);
1757 PAD_SETSV(ix, cSVOPo->op_sv);
1758 /* XXX I don't know how this isn't readonly already. */
1759 SvREADONLY_on(PAD_SVl(ix));
1761 cSVOPo->op_sv = NULL;
1772 const char *key = NULL;
1775 if (((BINOP*)o)->op_last->op_type != OP_CONST)
1778 /* Make the CONST have a shared SV */
1779 svp = cSVOPx_svp(((BINOP*)o)->op_last);
1780 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv))
1781 && SvTYPE(sv) < SVt_PVMG && !SvROK(sv)) {
1782 key = SvPV_const(sv, keylen);
1783 lexname = newSVpvn_share(key,
1784 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
1790 if ((o->op_private & (OPpLVAL_INTRO)))
1793 rop = (UNOP*)((BINOP*)o)->op_first;
1794 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
1796 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
1797 if (!SvPAD_TYPED(lexname))
1799 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
1800 if (!fields || !GvHV(*fields))
1802 key = SvPV_const(*svp, keylen);
1803 if (!hv_fetch(GvHV(*fields), key,
1804 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE)) {
1805 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
1806 "in variable %"SVf" of type %"HEKf,
1807 SVfARG(*svp), SVfARG(lexname),
1808 HEKfARG(HvNAME_HEK(SvSTASH(lexname))));
1820 SVOP *first_key_op, *key_op;
1822 if ((o->op_private & (OPpLVAL_INTRO))
1823 /* I bet there's always a pushmark... */
1824 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
1825 /* hmmm, no optimization if list contains only one key. */
1827 rop = (UNOP*)((LISTOP*)o)->op_last;
1828 if (rop->op_type != OP_RV2HV)
1830 if (rop->op_first->op_type == OP_PADSV)
1831 /* @$hash{qw(keys here)} */
1832 rop = (UNOP*)rop->op_first;
1834 /* @{$hash}{qw(keys here)} */
1835 if (rop->op_first->op_type == OP_SCOPE
1836 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
1838 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
1844 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
1845 if (!SvPAD_TYPED(lexname))
1847 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
1848 if (!fields || !GvHV(*fields))
1850 /* Again guessing that the pushmark can be jumped over.... */
1851 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
1852 ->op_first->op_sibling;
1853 for (key_op = first_key_op; key_op;
1854 key_op = (SVOP*)key_op->op_sibling) {
1855 if (key_op->op_type != OP_CONST)
1857 svp = cSVOPx_svp(key_op);
1858 key = SvPV_const(*svp, keylen);
1859 if (!hv_fetch(GvHV(*fields), key,
1860 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE)) {
1861 Perl_croak(aTHX_ "No such class field \"%"SVf"\" "
1862 "in variable %"SVf" of type %"HEKf,
1863 SVfARG(*svp), SVfARG(lexname),
1864 HEKfARG(HvNAME_HEK(SvSTASH(lexname))));
1870 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
1871 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
1878 if (o->op_flags & OPf_KIDS) {
1880 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
1886 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
1888 Propagate lvalue ("modifiable") context to an op and its children.
1889 I<type> represents the context type, roughly based on the type of op that
1890 would do the modifying, although C<local()> is represented by OP_NULL,
1891 because it has no op type of its own (it is signalled by a flag on
1894 This function detects things that can't be modified, such as C<$x+1>, and
1895 generates errors for them. For example, C<$x+1 = 2> would cause it to be
1896 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
1898 It also flags things that need to behave specially in an lvalue context,
1899 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
1905 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
1909 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1912 if (!o || (PL_parser && PL_parser->error_count))
1915 if ((o->op_private & OPpTARGET_MY)
1916 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1921 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
1923 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
1925 switch (o->op_type) {
1930 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1934 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
1935 !(o->op_flags & OPf_STACKED)) {
1936 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1937 /* Both ENTERSUB and RV2CV use this bit, but for different pur-
1938 poses, so we need it clear. */
1939 o->op_private &= ~1;
1940 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1941 assert(cUNOPo->op_first->op_type == OP_NULL);
1942 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1945 else { /* lvalue subroutine call */
1946 o->op_private |= OPpLVAL_INTRO
1947 |(OPpENTERSUB_INARGS * (type == OP_LEAVESUBLV));
1948 PL_modcount = RETURN_UNLIMITED_NUMBER;
1949 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1950 /* Potential lvalue context: */
1951 o->op_private |= OPpENTERSUB_INARGS;
1954 else { /* Compile-time error message: */
1955 OP *kid = cUNOPo->op_first;
1958 if (kid->op_type != OP_PUSHMARK) {
1959 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1961 "panic: unexpected lvalue entersub "
1962 "args: type/targ %ld:%"UVuf,
1963 (long)kid->op_type, (UV)kid->op_targ);
1964 kid = kLISTOP->op_first;
1966 while (kid->op_sibling)
1967 kid = kid->op_sibling;
1968 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1969 break; /* Postpone until runtime */
1972 kid = kUNOP->op_first;
1973 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1974 kid = kUNOP->op_first;
1975 if (kid->op_type == OP_NULL)
1977 "Unexpected constant lvalue entersub "
1978 "entry via type/targ %ld:%"UVuf,
1979 (long)kid->op_type, (UV)kid->op_targ);
1980 if (kid->op_type != OP_GV) {
1984 cv = GvCV(kGVOP_gv);
1994 if (flags & OP_LVALUE_NO_CROAK) return NULL;
1995 /* grep, foreach, subcalls, refgen */
1996 if (type == OP_GREPSTART || type == OP_ENTERSUB
1997 || type == OP_REFGEN || type == OP_LEAVESUBLV)
1999 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
2000 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
2002 : (o->op_type == OP_ENTERSUB
2003 ? "non-lvalue subroutine call"
2005 type ? PL_op_desc[type] : "local"));
2019 case OP_RIGHT_SHIFT:
2028 if (!(o->op_flags & OPf_STACKED))
2035 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
2036 op_lvalue(kid, type);
2041 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
2042 PL_modcount = RETURN_UNLIMITED_NUMBER;
2043 return o; /* Treat \(@foo) like ordinary list. */
2047 if (scalar_mod_type(o, type))
2049 ref(cUNOPo->op_first, o->op_type);
2053 if (type == OP_LEAVESUBLV)
2054 o->op_private |= OPpMAYBE_LVSUB;
2060 PL_modcount = RETURN_UNLIMITED_NUMBER;
2063 PL_hints |= HINT_BLOCK_SCOPE;
2064 if (type == OP_LEAVESUBLV)
2065 o->op_private |= OPpMAYBE_LVSUB;
2069 ref(cUNOPo->op_first, o->op_type);
2073 PL_hints |= HINT_BLOCK_SCOPE;
2082 case OP_AELEMFAST_LEX:
2089 PL_modcount = RETURN_UNLIMITED_NUMBER;
2090 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
2091 return o; /* Treat \(@foo) like ordinary list. */
2092 if (scalar_mod_type(o, type))
2094 if (type == OP_LEAVESUBLV)
2095 o->op_private |= OPpMAYBE_LVSUB;
2099 if (!type) /* local() */
2100 Perl_croak(aTHX_ "Can't localize lexical variable %"SVf,
2101 PAD_COMPNAME_SV(o->op_targ));
2110 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
2114 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
2120 if (type == OP_LEAVESUBLV)
2121 o->op_private |= OPpMAYBE_LVSUB;
2122 pad_free(o->op_targ);
2123 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
2124 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
2125 if (o->op_flags & OPf_KIDS)
2126 op_lvalue(cBINOPo->op_first->op_sibling, type);
2131 ref(cBINOPo->op_first, o->op_type);
2132 if (type == OP_ENTERSUB &&
2133 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
2134 o->op_private |= OPpLVAL_DEFER;
2135 if (type == OP_LEAVESUBLV)
2136 o->op_private |= OPpMAYBE_LVSUB;
2146 if (o->op_flags & OPf_KIDS)
2147 op_lvalue(cLISTOPo->op_last, type);
2152 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2154 else if (!(o->op_flags & OPf_KIDS))
2156 if (o->op_targ != OP_LIST) {
2157 op_lvalue(cBINOPo->op_first, type);
2163 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2164 /* elements might be in void context because the list is
2165 in scalar context or because they are attribute sub calls */
2166 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
2167 op_lvalue(kid, type);
2171 if (type != OP_LEAVESUBLV)
2173 break; /* op_lvalue()ing was handled by ck_return() */
2179 /* [20011101.069] File test operators interpret OPf_REF to mean that
2180 their argument is a filehandle; thus \stat(".") should not set
2182 if (type == OP_REFGEN &&
2183 PL_check[o->op_type] == Perl_ck_ftst)
2186 if (type != OP_LEAVESUBLV)
2187 o->op_flags |= OPf_MOD;
2189 if (type == OP_AASSIGN || type == OP_SASSIGN)
2190 o->op_flags |= OPf_SPECIAL|OPf_REF;
2191 else if (!type) { /* local() */
2194 o->op_private |= OPpLVAL_INTRO;
2195 o->op_flags &= ~OPf_SPECIAL;
2196 PL_hints |= HINT_BLOCK_SCOPE;
2201 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
2202 "Useless localization of %s", OP_DESC(o));
2205 else if (type != OP_GREPSTART && type != OP_ENTERSUB
2206 && type != OP_LEAVESUBLV)
2207 o->op_flags |= OPf_REF;
2212 S_scalar_mod_type(const OP *o, I32 type)
2217 if (o && o->op_type == OP_RV2GV)
2241 case OP_RIGHT_SHIFT:
2262 S_is_handle_constructor(const OP *o, I32 numargs)
2264 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
2266 switch (o->op_type) {
2274 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
2287 S_refkids(pTHX_ OP *o, I32 type)
2289 if (o && o->op_flags & OPf_KIDS) {
2291 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2298 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
2303 PERL_ARGS_ASSERT_DOREF;
2305 if (!o || (PL_parser && PL_parser->error_count))
2308 switch (o->op_type) {
2310 if ((type == OP_EXISTS || type == OP_DEFINED) &&
2311 !(o->op_flags & OPf_STACKED)) {
2312 o->op_type = OP_RV2CV; /* entersub => rv2cv */
2313 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
2314 assert(cUNOPo->op_first->op_type == OP_NULL);
2315 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
2316 o->op_flags |= OPf_SPECIAL;
2317 o->op_private &= ~1;
2319 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
2320 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2321 : type == OP_RV2HV ? OPpDEREF_HV
2323 o->op_flags |= OPf_MOD;
2329 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
2330 doref(kid, type, set_op_ref);
2333 if (type == OP_DEFINED)
2334 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2335 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2338 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2339 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2340 : type == OP_RV2HV ? OPpDEREF_HV
2342 o->op_flags |= OPf_MOD;
2349 o->op_flags |= OPf_REF;
2352 if (type == OP_DEFINED)
2353 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2354 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2360 o->op_flags |= OPf_REF;
2365 if (!(o->op_flags & OPf_KIDS))
2367 doref(cBINOPo->op_first, type, set_op_ref);
2371 doref(cBINOPo->op_first, o->op_type, set_op_ref);
2372 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2373 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2374 : type == OP_RV2HV ? OPpDEREF_HV
2376 o->op_flags |= OPf_MOD;
2386 if (!(o->op_flags & OPf_KIDS))
2388 doref(cLISTOPo->op_last, type, set_op_ref);
2398 S_dup_attrlist(pTHX_ OP *o)
2403 PERL_ARGS_ASSERT_DUP_ATTRLIST;
2405 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
2406 * where the first kid is OP_PUSHMARK and the remaining ones
2407 * are OP_CONST. We need to push the OP_CONST values.
2409 if (o->op_type == OP_CONST)
2410 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
2412 else if (o->op_type == OP_NULL)
2416 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
2418 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
2419 if (o->op_type == OP_CONST)
2420 rop = op_append_elem(OP_LIST, rop,
2421 newSVOP(OP_CONST, o->op_flags,
2422 SvREFCNT_inc_NN(cSVOPo->op_sv)));
2429 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
2434 PERL_ARGS_ASSERT_APPLY_ATTRS;
2436 /* fake up C<use attributes $pkg,$rv,@attrs> */
2437 ENTER; /* need to protect against side-effects of 'use' */
2438 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2440 #define ATTRSMODULE "attributes"
2441 #define ATTRSMODULE_PM "attributes.pm"
2444 /* Don't force the C<use> if we don't need it. */
2445 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
2446 if (svp && *svp != &PL_sv_undef)
2447 NOOP; /* already in %INC */
2449 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
2450 newSVpvs(ATTRSMODULE), NULL);
2453 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2454 newSVpvs(ATTRSMODULE),
2456 op_prepend_elem(OP_LIST,
2457 newSVOP(OP_CONST, 0, stashsv),
2458 op_prepend_elem(OP_LIST,
2459 newSVOP(OP_CONST, 0,
2461 dup_attrlist(attrs))));
2467 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
2470 OP *pack, *imop, *arg;
2473 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
2478 assert(target->op_type == OP_PADSV ||
2479 target->op_type == OP_PADHV ||
2480 target->op_type == OP_PADAV);
2482 /* Ensure that attributes.pm is loaded. */
2483 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
2485 /* Need package name for method call. */
2486 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
2488 /* Build up the real arg-list. */
2489 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2491 arg = newOP(OP_PADSV, 0);
2492 arg->op_targ = target->op_targ;
2493 arg = op_prepend_elem(OP_LIST,
2494 newSVOP(OP_CONST, 0, stashsv),
2495 op_prepend_elem(OP_LIST,
2496 newUNOP(OP_REFGEN, 0,
2497 op_lvalue(arg, OP_REFGEN)),
2498 dup_attrlist(attrs)));
2500 /* Fake up a method call to import */
2501 meth = newSVpvs_share("import");
2502 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2503 op_append_elem(OP_LIST,
2504 op_prepend_elem(OP_LIST, pack, list(arg)),
2505 newSVOP(OP_METHOD_NAMED, 0, meth)));
2507 /* Combine the ops. */
2508 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
2512 =notfor apidoc apply_attrs_string
2514 Attempts to apply a list of attributes specified by the C<attrstr> and
2515 C<len> arguments to the subroutine identified by the C<cv> argument which
2516 is expected to be associated with the package identified by the C<stashpv>
2517 argument (see L<attributes>). It gets this wrong, though, in that it
2518 does not correctly identify the boundaries of the individual attribute
2519 specifications within C<attrstr>. This is not really intended for the
2520 public API, but has to be listed here for systems such as AIX which
2521 need an explicit export list for symbols. (It's called from XS code
2522 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2523 to respect attribute syntax properly would be welcome.
2529 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2530 const char *attrstr, STRLEN len)
2534 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2537 len = strlen(attrstr);
2541 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2543 const char * const sstr = attrstr;
2544 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2545 attrs = op_append_elem(OP_LIST, attrs,
2546 newSVOP(OP_CONST, 0,
2547 newSVpvn(sstr, attrstr-sstr)));
2551 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2552 newSVpvs(ATTRSMODULE),
2553 NULL, op_prepend_elem(OP_LIST,
2554 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2555 op_prepend_elem(OP_LIST,
2556 newSVOP(OP_CONST, 0,
2557 newRV(MUTABLE_SV(cv))),
2562 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2566 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
2568 PERL_ARGS_ASSERT_MY_KID;
2570 if (!o || (PL_parser && PL_parser->error_count))
2574 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2575 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2579 if (type == OP_LIST) {
2581 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2582 my_kid(kid, attrs, imopsp);
2584 } else if (type == OP_UNDEF || type == OP_STUB) {
2586 } else if (type == OP_RV2SV || /* "our" declaration */
2588 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2589 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2590 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2592 PL_parser->in_my == KEY_our
2594 : PL_parser->in_my == KEY_state ? "state" : "my"));
2596 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
2597 PL_parser->in_my = FALSE;
2598 PL_parser->in_my_stash = NULL;
2599 apply_attrs(GvSTASH(gv),
2600 (type == OP_RV2SV ? GvSV(gv) :
2601 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2602 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
2605 o->op_private |= OPpOUR_INTRO;
2608 else if (type != OP_PADSV &&
2611 type != OP_PUSHMARK)
2613 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2615 PL_parser->in_my == KEY_our
2617 : PL_parser->in_my == KEY_state ? "state" : "my"));
2620 else if (attrs && type != OP_PUSHMARK) {
2623 PL_parser->in_my = FALSE;
2624 PL_parser->in_my_stash = NULL;
2626 /* check for C<my Dog $spot> when deciding package */
2627 stash = PAD_COMPNAME_TYPE(o->op_targ);
2629 stash = PL_curstash;
2630 apply_attrs_my(stash, o, attrs, imopsp);
2632 o->op_flags |= OPf_MOD;
2633 o->op_private |= OPpLVAL_INTRO;
2635 o->op_private |= OPpPAD_STATE;
2640 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2644 int maybe_scalar = 0;
2646 PERL_ARGS_ASSERT_MY_ATTRS;
2648 /* [perl #17376]: this appears to be premature, and results in code such as
2649 C< our(%x); > executing in list mode rather than void mode */
2651 if (o->op_flags & OPf_PARENS)
2661 o = my_kid(o, attrs, &rops);
2663 if (maybe_scalar && o->op_type == OP_PADSV) {
2664 o = scalar(op_append_list(OP_LIST, rops, o));
2665 o->op_private |= OPpLVAL_INTRO;
2668 /* The listop in rops might have a pushmark at the beginning,
2669 which will mess up list assignment. */
2670 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
2671 if (rops->op_type == OP_LIST &&
2672 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
2674 OP * const pushmark = lrops->op_first;
2675 lrops->op_first = pushmark->op_sibling;
2678 o = op_append_list(OP_LIST, o, rops);
2681 PL_parser->in_my = FALSE;
2682 PL_parser->in_my_stash = NULL;
2687 Perl_sawparens(pTHX_ OP *o)
2689 PERL_UNUSED_CONTEXT;
2691 o->op_flags |= OPf_PARENS;
2696 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2700 const OPCODE ltype = left->op_type;
2701 const OPCODE rtype = right->op_type;
2703 PERL_ARGS_ASSERT_BIND_MATCH;
2705 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2706 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2708 const char * const desc
2710 rtype == OP_SUBST || rtype == OP_TRANS
2711 || rtype == OP_TRANSR
2713 ? (int)rtype : OP_MATCH];
2714 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
2717 (ltype == OP_RV2AV || ltype == OP_RV2HV)
2718 ? cUNOPx(left)->op_first->op_type == OP_GV
2719 && (gv = cGVOPx_gv(cUNOPx(left)->op_first))
2720 ? varname(gv, isary ? '@' : '%', 0, NULL, 0, 1)
2723 (GV *)PL_compcv, isary ? '@' : '%', left->op_targ, NULL, 0, 1
2726 Perl_warner(aTHX_ packWARN(WARN_MISC),
2727 "Applying %s to %"SVf" will act on scalar(%"SVf")",
2730 const char * const sample = (isary
2731 ? "@array" : "%hash");
2732 Perl_warner(aTHX_ packWARN(WARN_MISC),
2733 "Applying %s to %s will act on scalar(%s)",
2734 desc, sample, sample);
2738 if (rtype == OP_CONST &&
2739 cSVOPx(right)->op_private & OPpCONST_BARE &&
2740 cSVOPx(right)->op_private & OPpCONST_STRICT)
2742 no_bareword_allowed(right);
2745 /* !~ doesn't make sense with /r, so error on it for now */
2746 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
2748 yyerror("Using !~ with s///r doesn't make sense");
2749 if (rtype == OP_TRANSR && type == OP_NOT)
2750 yyerror("Using !~ with tr///r doesn't make sense");
2752 ismatchop = (rtype == OP_MATCH ||
2753 rtype == OP_SUBST ||
2754 rtype == OP_TRANS || rtype == OP_TRANSR)
2755 && !(right->op_flags & OPf_SPECIAL);
2756 if (ismatchop && right->op_private & OPpTARGET_MY) {
2758 right->op_private &= ~OPpTARGET_MY;
2760 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2763 right->op_flags |= OPf_STACKED;
2764 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
2765 ! (rtype == OP_TRANS &&
2766 right->op_private & OPpTRANS_IDENTICAL) &&
2767 ! (rtype == OP_SUBST &&
2768 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
2769 newleft = op_lvalue(left, rtype);
2772 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
2773 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2775 o = op_prepend_elem(rtype, scalar(newleft), right);
2777 return newUNOP(OP_NOT, 0, scalar(o));
2781 return bind_match(type, left,
2782 pmruntime(newPMOP(OP_MATCH, 0), right, 0, 0));
2786 Perl_invert(pTHX_ OP *o)
2790 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2794 =for apidoc Amx|OP *|op_scope|OP *o
2796 Wraps up an op tree with some additional ops so that at runtime a dynamic
2797 scope will be created. The original ops run in the new dynamic scope,
2798 and then, provided that they exit normally, the scope will be unwound.
2799 The additional ops used to create and unwind the dynamic scope will
2800 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
2801 instead if the ops are simple enough to not need the full dynamic scope
2808 Perl_op_scope(pTHX_ OP *o)
2812 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2813 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2814 o->op_type = OP_LEAVE;
2815 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2817 else if (o->op_type == OP_LINESEQ) {
2819 o->op_type = OP_SCOPE;
2820 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2821 kid = ((LISTOP*)o)->op_first;
2822 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2825 /* The following deals with things like 'do {1 for 1}' */
2826 kid = kid->op_sibling;
2828 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2833 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2839 Perl_block_start(pTHX_ int full)
2842 const int retval = PL_savestack_ix;
2844 pad_block_start(full);
2846 PL_hints &= ~HINT_BLOCK_SCOPE;
2847 SAVECOMPILEWARNINGS();
2848 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2850 CALL_BLOCK_HOOKS(bhk_start, full);
2856 Perl_block_end(pTHX_ I32 floor, OP *seq)
2859 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2860 OP* retval = scalarseq(seq);
2862 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
2865 CopHINTS_set(&PL_compiling, PL_hints);
2867 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2870 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
2876 =head1 Compile-time scope hooks
2878 =for apidoc Aox||blockhook_register
2880 Register a set of hooks to be called when the Perl lexical scope changes
2881 at compile time. See L<perlguts/"Compile-time scope hooks">.
2887 Perl_blockhook_register(pTHX_ BHK *hk)
2889 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
2891 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
2898 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
2899 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2900 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2903 OP * const o = newOP(OP_PADSV, 0);
2904 o->op_targ = offset;
2910 Perl_newPROG(pTHX_ OP *o)
2914 PERL_ARGS_ASSERT_NEWPROG;
2921 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2922 ((PL_in_eval & EVAL_KEEPERR)
2923 ? OPf_SPECIAL : 0), o);
2925 cx = &cxstack[cxstack_ix];
2926 assert(CxTYPE(cx) == CXt_EVAL);
2928 if ((cx->blk_gimme & G_WANT) == G_VOID)
2929 scalarvoid(PL_eval_root);
2930 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
2933 scalar(PL_eval_root);
2935 PL_eval_start = op_linklist(PL_eval_root);
2936 PL_eval_root->op_private |= OPpREFCOUNTED;
2937 OpREFCNT_set(PL_eval_root, 1);
2938 PL_eval_root->op_next = 0;
2939 i = PL_savestack_ix;
2942 CALL_PEEP(PL_eval_start);
2943 finalize_optree(PL_eval_root);
2945 PL_savestack_ix = i;
2948 if (o->op_type == OP_STUB) {
2949 PL_comppad_name = 0;
2951 S_op_destroy(aTHX_ o);
2954 PL_main_root = op_scope(sawparens(scalarvoid(o)));
2955 PL_curcop = &PL_compiling;
2956 PL_main_start = LINKLIST(PL_main_root);
2957 PL_main_root->op_private |= OPpREFCOUNTED;
2958 OpREFCNT_set(PL_main_root, 1);
2959 PL_main_root->op_next = 0;
2960 CALL_PEEP(PL_main_start);
2961 finalize_optree(PL_main_root);
2962 cv_forget_slab(PL_compcv);
2965 /* Register with debugger */
2967 CV * const cv = get_cvs("DB::postponed", 0);
2971 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2973 call_sv(MUTABLE_SV(cv), G_DISCARD);
2980 Perl_localize(pTHX_ OP *o, I32 lex)
2984 PERL_ARGS_ASSERT_LOCALIZE;
2986 if (o->op_flags & OPf_PARENS)
2987 /* [perl #17376]: this appears to be premature, and results in code such as
2988 C< our(%x); > executing in list mode rather than void mode */
2995 if ( PL_parser->bufptr > PL_parser->oldbufptr
2996 && PL_parser->bufptr[-1] == ','
2997 && ckWARN(WARN_PARENTHESIS))
2999 char *s = PL_parser->bufptr;
3002 /* some heuristics to detect a potential error */
3003 while (*s && (strchr(", \t\n", *s)))
3007 if (*s && strchr("@$%*", *s) && *++s
3008 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
3011 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
3013 while (*s && (strchr(", \t\n", *s)))
3019 if (sigil && (*s == ';' || *s == '=')) {
3020 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
3021 "Parentheses missing around \"%s\" list",
3023 ? (PL_parser->in_my == KEY_our
3025 : PL_parser->in_my == KEY_state
3035 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
3036 PL_parser->in_my = FALSE;
3037 PL_parser->in_my_stash = NULL;
3042 Perl_jmaybe(pTHX_ OP *o)
3044 PERL_ARGS_ASSERT_JMAYBE;
3046 if (o->op_type == OP_LIST) {
3048 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
3049 o = convert(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
3054 PERL_STATIC_INLINE OP *
3055 S_op_std_init(pTHX_ OP *o)
3057 I32 type = o->op_type;
3059 PERL_ARGS_ASSERT_OP_STD_INIT;
3061 if (PL_opargs[type] & OA_RETSCALAR)
3063 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
3064 o->op_targ = pad_alloc(type, SVs_PADTMP);
3069 PERL_STATIC_INLINE OP *
3070 S_op_integerize(pTHX_ OP *o)
3072 I32 type = o->op_type;
3074 PERL_ARGS_ASSERT_OP_INTEGERIZE;
3076 /* integerize op. */
3077 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
3080 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
3083 if (type == OP_NEGATE)
3084 /* XXX might want a ck_negate() for this */
3085 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
3091 S_fold_constants(pTHX_ register OP *o)
3094 register OP * VOL curop;
3096 VOL I32 type = o->op_type;
3101 SV * const oldwarnhook = PL_warnhook;
3102 SV * const olddiehook = PL_diehook;
3106 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
3108 if (!(PL_opargs[type] & OA_FOLDCONST))
3122 /* XXX what about the numeric ops? */
3123 if (IN_LOCALE_COMPILETIME)
3127 if (!cLISTOPo->op_first->op_sibling
3128 || cLISTOPo->op_first->op_sibling->op_type != OP_CONST)
3131 SV * const sv = cSVOPx_sv(cLISTOPo->op_first->op_sibling);
3132 if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope;
3134 const char *s = SvPVX_const(sv);
3135 while (s < SvEND(sv)) {
3136 if (*s == 'p' || *s == 'P') goto nope;
3143 if (o->op_private & OPpREPEAT_DOLIST) goto nope;
3146 if (PL_parser && PL_parser->error_count)
3147 goto nope; /* Don't try to run w/ errors */
3149 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3150 const OPCODE type = curop->op_type;
3151 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
3153 type != OP_SCALAR &&
3155 type != OP_PUSHMARK)
3161 curop = LINKLIST(o);
3162 old_next = o->op_next;
3166 oldscope = PL_scopestack_ix;
3167 create_eval_scope(G_FAKINGEVAL);
3169 /* Verify that we don't need to save it: */
3170 assert(PL_curcop == &PL_compiling);
3171 StructCopy(&PL_compiling, ¬_compiling, COP);
3172 PL_curcop = ¬_compiling;
3173 /* The above ensures that we run with all the correct hints of the
3174 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
3175 assert(IN_PERL_RUNTIME);
3176 PL_warnhook = PERL_WARNHOOK_FATAL;
3183 sv = *(PL_stack_sp--);
3184 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
3186 /* Can't simply swipe the SV from the pad, because that relies on
3187 the op being freed "real soon now". Under MAD, this doesn't
3188 happen (see the #ifdef below). */
3191 pad_swipe(o->op_targ, FALSE);
3194 else if (SvTEMP(sv)) { /* grab mortal temp? */
3195 SvREFCNT_inc_simple_void(sv);
3200 /* Something tried to die. Abandon constant folding. */
3201 /* Pretend the error never happened. */
3203 o->op_next = old_next;
3207 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
3208 PL_warnhook = oldwarnhook;
3209 PL_diehook = olddiehook;
3210 /* XXX note that this croak may fail as we've already blown away
3211 * the stack - eg any nested evals */
3212 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
3215 PL_warnhook = oldwarnhook;
3216 PL_diehook = olddiehook;
3217 PL_curcop = &PL_compiling;
3219 if (PL_scopestack_ix > oldscope)
3220 delete_eval_scope();
3229 if (type == OP_RV2GV)
3230 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
3232 newop = newSVOP(OP_CONST, OPpCONST_FOLDED<<8, MUTABLE_SV(sv));
3233 op_getmad(o,newop,'f');
3241 S_gen_constant_list(pTHX_ register OP *o)
3245 const I32 oldtmps_floor = PL_tmps_floor;
3248 if (PL_parser && PL_parser->error_count)
3249 return o; /* Don't attempt to run with errors */
3251 PL_op = curop = LINKLIST(o);
3254 Perl_pp_pushmark(aTHX);
3257 assert (!(curop->op_flags & OPf_SPECIAL));
3258 assert(curop->op_type == OP_RANGE);
3259 Perl_pp_anonlist(aTHX);
3260 PL_tmps_floor = oldtmps_floor;
3262 o->op_type = OP_RV2AV;
3263 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
3264 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
3265 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
3266 o->op_opt = 0; /* needs to be revisited in rpeep() */
3267 curop = ((UNOP*)o)->op_first;
3268 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
3270 op_getmad(curop,o,'O');
3279 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
3282 if (type < 0) type = -type, flags |= OPf_SPECIAL;
3283 if (!o || o->op_type != OP_LIST)
3284 o = newLISTOP(OP_LIST, 0, o, NULL);
3286 o->op_flags &= ~OPf_WANT;
3288 if (!(PL_opargs[type] & OA_MARK))
3289 op_null(cLISTOPo->op_first);
3291 OP * const kid2 = cLISTOPo->op_first->op_sibling;
3292 if (kid2 && kid2->op_type == OP_COREARGS) {
3293 op_null(cLISTOPo->op_first);
3294 kid2->op_private |= OPpCOREARGS_PUSHMARK;
3298 o->op_type = (OPCODE)type;
3299 o->op_ppaddr = PL_ppaddr[type];
3300 o->op_flags |= flags;
3302 o = CHECKOP(type, o);
3303 if (o->op_type != (unsigned)type)
3306 return fold_constants(op_integerize(op_std_init(o)));
3310 =head1 Optree Manipulation Functions
3313 /* List constructors */
3316 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
3318 Append an item to the list of ops contained directly within a list-type
3319 op, returning the lengthened list. I<first> is the list-type op,
3320 and I<last> is the op to append to the list. I<optype> specifies the
3321 intended opcode for the list. If I<first> is not already a list of the
3322 right type, it will be upgraded into one. If either I<first> or I<last>
3323 is null, the other is returned unchanged.
3329 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
3337 if (first->op_type != (unsigned)type
3338 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
3340 return newLISTOP(type, 0, first, last);
3343 if (first->op_flags & OPf_KIDS)
3344 ((LISTOP*)first)->op_last->op_sibling = last;
3346 first->op_flags |= OPf_KIDS;
3347 ((LISTOP*)first)->op_first = last;
3349 ((LISTOP*)first)->op_last = last;
3354 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
3356 Concatenate the lists of ops contained directly within two list-type ops,
3357 returning the combined list. I<first> and I<last> are the list-type ops
3358 to concatenate. I<optype> specifies the intended opcode for the list.
3359 If either I<first> or I<last> is not already a list of the right type,
3360 it will be upgraded into one. If either I<first> or I<last> is null,
3361 the other is returned unchanged.
3367 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
3375 if (first->op_type != (unsigned)type)
3376 return op_prepend_elem(type, first, last);
3378 if (last->op_type != (unsigned)type)
3379 return op_append_elem(type, first, last);
3381 ((LISTOP*)first)->op_last->op_sibling = ((LISTOP*)last)->op_first;
3382 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
3383 first->op_flags |= (last->op_flags & OPf_KIDS);
3386 if (((LISTOP*)last)->op_first && first->op_madprop) {
3387 MADPROP *mp = ((LISTOP*)last)->op_first->op_madprop;
3389 while (mp->mad_next)
3391 mp->mad_next = first->op_madprop;
3394 ((LISTOP*)last)->op_first->op_madprop = first->op_madprop;
3397 first->op_madprop = last->op_madprop;
3398 last->op_madprop = 0;
3401 S_op_destroy(aTHX_ last);
3407 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
3409 Prepend an item to the list of ops contained directly within a list-type
3410 op, returning the lengthened list. I<first> is the op to prepend to the
3411 list, and I<last> is the list-type op. I<optype> specifies the intended
3412 opcode for the list. If I<last> is not already a list of the right type,
3413 it will be upgraded into one. If either I<first> or I<last> is null,
3414 the other is returned unchanged.
3420 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
3428 if (last->op_type == (unsigned)type) {
3429 if (type == OP_LIST) { /* already a PUSHMARK there */
3430 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
3431 ((LISTOP*)last)->op_first->op_sibling = first;
3432 if (!(first->op_flags & OPf_PARENS))
3433 last->op_flags &= ~OPf_PARENS;
3436 if (!(last->op_flags & OPf_KIDS)) {
3437 ((LISTOP*)last)->op_last = first;
3438 last->op_flags |= OPf_KIDS;
3440 first->op_sibling = ((LISTOP*)last)->op_first;
3441 ((LISTOP*)last)->op_first = first;
3443 last->op_flags |= OPf_KIDS;
3447 return newLISTOP(type, 0, first, last);
3455 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
3458 Newxz(tk, 1, TOKEN);
3459 tk->tk_type = (OPCODE)optype;
3460 tk->tk_type = 12345;
3462 tk->tk_mad = madprop;
3467 Perl_token_free(pTHX_ TOKEN* tk)
3469 PERL_ARGS_ASSERT_TOKEN_FREE;
3471 if (tk->tk_type != 12345)
3473 mad_free(tk->tk_mad);
3478 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
3483 PERL_ARGS_ASSERT_TOKEN_GETMAD;
3485 if (tk->tk_type != 12345) {
3486 Perl_warner(aTHX_ packWARN(WARN_MISC),
3487 "Invalid TOKEN object ignored");
3494 /* faked up qw list? */
3496 tm->mad_type == MAD_SV &&
3497 SvPVX((SV *)tm->mad_val)[0] == 'q')
3504 /* pretend constant fold didn't happen? */
3505 if (mp->mad_key == 'f' &&
3506 (o->op_type == OP_CONST ||
3507 o->op_type == OP_GV) )
3509 token_getmad(tk,(OP*)mp->mad_val,slot);
3523 if (mp->mad_key == 'X')
3524 mp->mad_key = slot; /* just change the first one */
3534 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
3543 /* pretend constant fold didn't happen? */
3544 if (mp->mad_key == 'f' &&
3545 (o->op_type == OP_CONST ||
3546 o->op_type == OP_GV) )
3548 op_getmad(from,(OP*)mp->mad_val,slot);
3555 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
3558 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
3564 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
3573 /* pretend constant fold didn't happen? */
3574 if (mp->mad_key == 'f' &&
3575 (o->op_type == OP_CONST ||
3576 o->op_type == OP_GV) )
3578 op_getmad(from,(OP*)mp->mad_val,slot);
3585 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
3588 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
3592 PerlIO_printf(PerlIO_stderr(),
3593 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
3599 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
3617 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
3621 addmad(tm, &(o->op_madprop), slot);
3625 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
3646 Perl_newMADsv(pTHX_ char key, SV* sv)
3648 PERL_ARGS_ASSERT_NEWMADSV;
3650 return newMADPROP(key, MAD_SV, sv, 0);
3654 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
3656 MADPROP *const mp = (MADPROP *) PerlMemShared_malloc(sizeof(MADPROP));
3659 mp->mad_vlen = vlen;
3660 mp->mad_type = type;
3662 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
3667 Perl_mad_free(pTHX_ MADPROP* mp)
3669 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
3673 mad_free(mp->mad_next);
3674 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
3675 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
3676 switch (mp->mad_type) {
3680 Safefree((char*)mp->mad_val);
3683 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
3684 op_free((OP*)mp->mad_val);
3687 sv_free(MUTABLE_SV(mp->mad_val));
3690 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3693 PerlMemShared_free(mp);
3699 =head1 Optree construction
3701 =for apidoc Am|OP *|newNULLLIST
3703 Constructs, checks, and returns a new C<stub> op, which represents an
3704 empty list expression.
3710 Perl_newNULLLIST(pTHX)
3712 return newOP(OP_STUB, 0);
3716 S_force_list(pTHX_ OP *o)
3718 if (!o || o->op_type != OP_LIST)
3719 o = newLISTOP(OP_LIST, 0, o, NULL);
3725 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
3727 Constructs, checks, and returns an op of any list type. I<type> is
3728 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3729 C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
3730 supply up to two ops to be direct children of the list op; they are
3731 consumed by this function and become part of the constructed op tree.
3737 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3742 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3744 NewOp(1101, listop, 1, LISTOP);
3746 listop->op_type = (OPCODE)type;
3747 listop->op_ppaddr = PL_ppaddr[type];
3750 listop->op_flags = (U8)flags;
3754 else if (!first && last)
3757 first->op_sibling = last;
3758 listop->op_first = first;
3759 listop->op_last = last;
3760 if (type == OP_LIST) {
3761 OP* const pushop = newOP(OP_PUSHMARK, 0);
3762 pushop->op_sibling = first;
3763 listop->op_first = pushop;
3764 listop->op_flags |= OPf_KIDS;
3766 listop->op_last = pushop;
3769 return CHECKOP(type, listop);
3773 =for apidoc Am|OP *|newOP|I32 type|I32 flags
3775 Constructs, checks, and returns an op of any base type (any type that
3776 has no extra fields). I<type> is the opcode. I<flags> gives the
3777 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
3784 Perl_newOP(pTHX_ I32 type, I32 flags)
3789 if (type == -OP_ENTEREVAL) {
3790 type = OP_ENTEREVAL;
3791 flags |= OPpEVAL_BYTES<<8;
3794 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3795 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3796 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3797 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3799 NewOp(1101, o, 1, OP);
3800 o->op_type = (OPCODE)type;
3801 o->op_ppaddr = PL_ppaddr[type];
3802 o->op_flags = (U8)flags;
3805 o->op_private = (U8)(0 | (flags >> 8));
3806 if (PL_opargs[type] & OA_RETSCALAR)
3808 if (PL_opargs[type] & OA_TARGET)
3809 o->op_targ = pad_alloc(type, SVs_PADTMP);
3810 return CHECKOP(type, o);
3814 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
3816 Constructs, checks, and returns an op of any unary type. I<type> is
3817 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3818 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
3819 bits, the eight bits of C<op_private>, except that the bit with value 1
3820 is automatically set. I<first> supplies an optional op to be the direct
3821 child of the unary op; it is consumed by this function and become part
3822 of the constructed op tree.
3828 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3833 if (type == -OP_ENTEREVAL) {
3834 type = OP_ENTEREVAL;
3835 flags |= OPpEVAL_BYTES<<8;
3838 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3839 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3840 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3841 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3842 || type == OP_SASSIGN
3843 || type == OP_ENTERTRY
3844 || type == OP_NULL );
3847 first = newOP(OP_STUB, 0);
3848 if (PL_opargs[type] & OA_MARK)
3849 first = force_list(first);
3851 NewOp(1101, unop, 1, UNOP);
3852 unop->op_type = (OPCODE)type;
3853 unop->op_ppaddr = PL_ppaddr[type];
3854 unop->op_first = first;
3855 unop->op_flags = (U8)(flags | OPf_KIDS);
3856 unop->op_private = (U8)(1 | (flags >> 8));
3857 unop = (UNOP*) CHECKOP(type, unop);
3861 return fold_constants(op_integerize(op_std_init((OP *) unop)));
3865 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
3867 Constructs, checks, and returns an op of any binary type. I<type>
3868 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
3869 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
3870 the eight bits of C<op_private>, except that the bit with value 1 or
3871 2 is automatically set as required. I<first> and I<last> supply up to
3872 two ops to be the direct children of the binary op; they are consumed
3873 by this function and become part of the constructed op tree.
3879 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3884 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3885 || type == OP_SASSIGN || type == OP_NULL );
3887 NewOp(1101, binop, 1, BINOP);
3890 first = newOP(OP_NULL, 0);
3892 binop->op_type = (OPCODE)type;
3893 binop->op_ppaddr = PL_ppaddr[type];
3894 binop->op_first = first;
3895 binop->op_flags = (U8)(flags | OPf_KIDS);
3898 binop->op_private = (U8)(1 | (flags >> 8));
3901 binop->op_private = (U8)(2 | (flags >> 8));
3902 first->op_sibling = last;
3905 binop = (BINOP*)CHECKOP(type, binop);
3906 if (binop->op_next || binop->op_type != (OPCODE)type)
3909 binop->op_last = binop->op_first->op_sibling;
3911 return fold_constants(op_integerize(op_std_init((OP *)binop)));
3914 static int uvcompare(const void *a, const void *b)
3915 __attribute__nonnull__(1)
3916 __attribute__nonnull__(2)
3917 __attribute__pure__;
3918 static int uvcompare(const void *a, const void *b)
3920 if (*((const UV *)a) < (*(const UV *)b))
3922 if (*((const UV *)a) > (*(const UV *)b))
3924 if (*((const UV *)a+1) < (*(const UV *)b+1))
3926 if (*((const UV *)a+1) > (*(const UV *)b+1))
3932 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3935 SV * const tstr = ((SVOP*)expr)->op_sv;
3938 (repl->op_type == OP_NULL)
3939 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3941 ((SVOP*)repl)->op_sv;
3944 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3945 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3949 register short *tbl;
3951 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3952 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3953 I32 del = o->op_private & OPpTRANS_DELETE;
3956 PERL_ARGS_ASSERT_PMTRANS;
3958 PL_hints |= HINT_BLOCK_SCOPE;
3961 o->op_private |= OPpTRANS_FROM_UTF;
3964 o->op_private |= OPpTRANS_TO_UTF;
3966 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3967 SV* const listsv = newSVpvs("# comment\n");
3969 const U8* tend = t + tlen;
3970 const U8* rend = r + rlen;
3984 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3985 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3988 const U32 flags = UTF8_ALLOW_DEFAULT;
3992 t = tsave = bytes_to_utf8(t, &len);
3995 if (!to_utf && rlen) {
3997 r = rsave = bytes_to_utf8(r, &len);
4001 /* There are several snags with this code on EBCDIC:
4002 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
4003 2. scan_const() in toke.c has encoded chars in native encoding which makes
4004 ranges at least in EBCDIC 0..255 range the bottom odd.
4008 U8 tmpbuf[UTF8_MAXBYTES+1];
4011 Newx(cp, 2*tlen, UV);
4013 transv = newSVpvs("");
4015 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
4017 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
4019 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
4023 cp[2*i+1] = cp[2*i];
4027 qsort(cp, i, 2*sizeof(UV), uvcompare);
4028 for (j = 0; j < i; j++) {
4030 diff = val - nextmin;
4032 t = uvuni_to_utf8(tmpbuf,nextmin);
4033 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4035 U8 range_mark = UTF_TO_NATIVE(0xff);
4036 t = uvuni_to_utf8(tmpbuf, val - 1);
4037 sv_catpvn(transv, (char *)&range_mark, 1);
4038 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4045 t = uvuni_to_utf8(tmpbuf,nextmin);
4046 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4048 U8 range_mark = UTF_TO_NATIVE(0xff);
4049 sv_catpvn(transv, (char *)&range_mark, 1);
4051 t = uvuni_to_utf8(tmpbuf, 0x7fffffff);
4052 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
4053 t = (const U8*)SvPVX_const(transv);
4054 tlen = SvCUR(transv);
4058 else if (!rlen && !del) {
4059 r = t; rlen = tlen; rend = tend;
4062 if ((!rlen && !del) || t == r ||
4063 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
4065 o->op_private |= OPpTRANS_IDENTICAL;
4069 while (t < tend || tfirst <= tlast) {
4070 /* see if we need more "t" chars */
4071 if (tfirst > tlast) {
4072 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
4074 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
4076 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
4083 /* now see if we need more "r" chars */
4084 if (rfirst > rlast) {
4086 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
4088 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
4090 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
4099 rfirst = rlast = 0xffffffff;
4103 /* now see which range will peter our first, if either. */
4104 tdiff = tlast - tfirst;
4105 rdiff = rlast - rfirst;
4112 if (rfirst == 0xffffffff) {
4113 diff = tdiff; /* oops, pretend rdiff is infinite */
4115 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
4116 (long)tfirst, (long)tlast);
4118 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
4122 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
4123 (long)tfirst, (long)(tfirst + diff),
4126 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
4127 (long)tfirst, (long)rfirst);
4129 if (rfirst + diff > max)
4130 max = rfirst + diff;
4132 grows = (tfirst < rfirst &&
4133 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
4145 else if (max > 0xff)
4150 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
4152 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
4153 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
4154 PAD_SETSV(cPADOPo->op_padix, swash);
4156 SvREADONLY_on(swash);
4158 cSVOPo->op_sv = swash;
4160 SvREFCNT_dec(listsv);
4161 SvREFCNT_dec(transv);
4163 if (!del && havefinal && rlen)
4164 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
4165 newSVuv((UV)final), 0);
4168 o->op_private |= OPpTRANS_GROWS;
4174 op_getmad(expr,o,'e');
4175 op_getmad(repl,o,'r');
4183 tbl = (short*)PerlMemShared_calloc(
4184 (o->op_private & OPpTRANS_COMPLEMENT) &&
4185 !(o->op_private & OPpTRANS_DELETE) ? 258 : 256,
4187 cPVOPo->op_pv = (char*)tbl;
4189 for (i = 0; i < (I32)tlen; i++)
4191 for (i = 0, j = 0; i < 256; i++) {
4193 if (j >= (I32)rlen) {
4202 if (i < 128 && r[j] >= 128)
4212 o->op_private |= OPpTRANS_IDENTICAL;
4214 else if (j >= (I32)rlen)
4219 PerlMemShared_realloc(tbl,
4220 (0x101+rlen-j) * sizeof(short));
4221 cPVOPo->op_pv = (char*)tbl;
4223 tbl[0x100] = (short)(rlen - j);
4224 for (i=0; i < (I32)rlen - j; i++)
4225 tbl[0x101+i] = r[j+i];
4229 if (!rlen && !del) {
4232 o->op_private |= OPpTRANS_IDENTICAL;
4234 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
4235 o->op_private |= OPpTRANS_IDENTICAL;
4237 for (i = 0; i < 256; i++)
4239 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
4240 if (j >= (I32)rlen) {
4242 if (tbl[t[i]] == -1)
4248 if (tbl[t[i]] == -1) {
4249 if (t[i] < 128 && r[j] >= 128)
4256 if(del && rlen == tlen) {
4257 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
4258 } else if(rlen > tlen) {
4259 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
4263 o->op_private |= OPpTRANS_GROWS;
4265 op_getmad(expr,o,'e');
4266 op_getmad(repl,o,'r');
4276 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
4278 Constructs, checks, and returns an op of any pattern matching type.
4279 I<type> is the opcode. I<flags> gives the eight bits of C<op_flags>
4280 and, shifted up eight bits, the eight bits of C<op_private>.
4286 Perl_newPMOP(pTHX_ I32 type, I32 flags)
4291 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
4293 NewOp(1101, pmop, 1, PMOP);
4294 pmop->op_type = (OPCODE)type;
4295 pmop->op_ppaddr = PL_ppaddr[type];
4296 pmop->op_flags = (U8)flags;
4297 pmop->op_private = (U8)(0 | (flags >> 8));
4299 if (PL_hints & HINT_RE_TAINT)
4300 pmop->op_pmflags |= PMf_RETAINT;
4301 if (IN_LOCALE_COMPILETIME) {
4302 set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET);
4304 else if ((! (PL_hints & HINT_BYTES))
4305 /* Both UNI_8_BIT and locale :not_characters imply Unicode */
4306 && (PL_hints & (HINT_UNI_8_BIT|HINT_LOCALE_NOT_CHARS)))
4308 set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
4310 if (PL_hints & HINT_RE_FLAGS) {
4311 SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4312 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
4314 if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
4315 reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4316 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0
4318 if (reflags && SvOK(reflags)) {
4319 set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
4325 assert(SvPOK(PL_regex_pad[0]));
4326 if (SvCUR(PL_regex_pad[0])) {
4327 /* Pop off the "packed" IV from the end. */
4328 SV *const repointer_list = PL_regex_pad[0];
4329 const char *p = SvEND(repointer_list) - sizeof(IV);
4330 const IV offset = *((IV*)p);
4332 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
4334 SvEND_set(repointer_list, p);
4336 pmop->op_pmoffset = offset;
4337 /* This slot should be free, so assert this: */
4338 assert(PL_regex_pad[offset] == &PL_sv_undef);
4340 SV * const repointer = &PL_sv_undef;
4341 av_push(PL_regex_padav, repointer);
4342 pmop->op_pmoffset = av_len(PL_regex_padav);
4343 PL_regex_pad = AvARRAY(PL_regex_padav);
4347 return CHECKOP(type, pmop);
4350 /* Given some sort of match op o, and an expression expr containing a
4351 * pattern, either compile expr into a regex and attach it to o (if it's
4352 * constant), or convert expr into a runtime regcomp op sequence (if it's
4355 * isreg indicates that the pattern is part of a regex construct, eg
4356 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
4357 * split "pattern", which aren't. In the former case, expr will be a list
4358 * if the pattern contains more than one term (eg /a$b/) or if it contains
4359 * a replacement, ie s/// or tr///.
4361 * When the pattern has been compiled within a new anon CV (for
4362 * qr/(?{...})/ ), then floor indicates the savestack level just before
4363 * the new sub was created
4367 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg, I32 floor)
4372 I32 repl_has_vars = 0;
4374 bool is_trans = (o->op_type == OP_TRANS || o->op_type == OP_TRANSR);
4375 bool is_compiletime;
4378 PERL_ARGS_ASSERT_PMRUNTIME;
4380 /* for s/// and tr///, last element in list is the replacement; pop it */
4382 if (is_trans || o->op_type == OP_SUBST) {
4384 repl = cLISTOPx(expr)->op_last;
4385 kid = cLISTOPx(expr)->op_first;
4386 while (kid->op_sibling != repl)
4387 kid = kid->op_sibling;
4388 kid->op_sibling = NULL;
4389 cLISTOPx(expr)->op_last = kid;
4392 /* for TRANS, convert LIST/PUSH/CONST into CONST, and pass to pmtrans() */
4395 OP* const oe = expr;
4396 assert(expr->op_type == OP_LIST);
4397 assert(cLISTOPx(expr)->op_first->op_type == OP_PUSHMARK);
4398 assert(cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last);
4399 expr = cLISTOPx(oe)->op_last;
4400 cLISTOPx(oe)->op_first->op_sibling = NULL;
4401 cLISTOPx(oe)->op_last = NULL;
4404 return pmtrans(o, expr, repl);
4407 /* find whether we have any runtime or code elements;
4408 * at the same time, temporarily set the op_next of each DO block;
4409 * then when we LINKLIST, this will cause the DO blocks to be excluded
4410 * from the op_next chain (and from having LINKLIST recursively
4411 * applied to them). We fix up the DOs specially later */
4415 if (expr->op_type == OP_LIST) {
4417 for (o = cLISTOPx(expr)->op_first; o; o = o->op_sibling) {
4418 if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)) {
4420 assert(!o->op_next && o->op_sibling);
4421 o->op_next = o->op_sibling;
4423 else if (o->op_type != OP_CONST && o->op_type != OP_PUSHMARK)
4427 else if (expr->op_type != OP_CONST)
4432 /* fix up DO blocks; treat each one as a separate little sub */
4434 if (expr->op_type == OP_LIST) {
4436 for (o = cLISTOPx(expr)->op_first; o; o = o->op_sibling) {
4437 if (!(o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)))
4439 o->op_next = NULL; /* undo temporary hack from above */
4442 if (cLISTOPo->op_first->op_type == OP_LEAVE) {
4443 LISTOP *leave = cLISTOPx(cLISTOPo->op_first);
4445 assert(leave->op_first->op_type == OP_ENTER);
4446 assert(leave->op_first->op_sibling);
4447 o->op_next = leave->op_first->op_sibling;
4449 assert(leave->op_flags & OPf_KIDS);
4450 assert(leave->op_last->op_next = (OP*)leave);
4451 leave->op_next = NULL; /* stop on last op */
4452 op_null((OP*)leave);
4456 OP *scope = cLISTOPo->op_first;
4457 assert(scope->op_type == OP_SCOPE);
4458 assert(scope->op_flags & OPf_KIDS);
4459 scope->op_next = NULL; /* stop on last op */
4462 /* have to peep the DOs individually as we've removed it from
4463 * the op_next chain */
4466 /* runtime finalizes as part of finalizing whole tree */
4471 PL_hints |= HINT_BLOCK_SCOPE;
4473 assert(floor==0 || (pm->op_pmflags & PMf_HAS_CV));
4475 if (is_compiletime) {
4476 U32 rx_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
4477 regexp_engine const *eng = current_re_engine();
4479 if (o->op_flags & OPf_SPECIAL)
4480 rx_flags |= RXf_SPLIT;
4482 if (!has_code || !eng->op_comp) {
4483 /* compile-time simple constant pattern */
4485 if ((pm->op_pmflags & PMf_HAS_CV) && !has_code) {
4486 /* whoops! we guessed that a qr// had a code block, but we
4487 * were wrong (e.g. /[(?{}]/ ). Throw away the PL_compcv
4488 * that isn't required now. Note that we have to be pretty
4489 * confident that nothing used that CV's pad while the
4490 * regex was parsed */
4491 assert(AvFILLp(PL_comppad) == 0); /* just @_ */
4492 /* But we know that one op is using this CV's slab. */
4493 cv_forget_slab(PL_compcv);
4495 pm->op_pmflags &= ~PMf_HAS_CV;
4500 ? eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
4501 rx_flags, pm->op_pmflags)
4502 : Perl_re_op_compile(aTHX_ NULL, 0, expr, eng, NULL, NULL,
4503 rx_flags, pm->op_pmflags)
4506 op_getmad(expr,(OP*)pm,'e');
4512 /* compile-time pattern that includes literal code blocks */
4513 REGEXP* re = eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL,
4516 ((PL_hints & HINT_RE_EVAL) ? PMf_USE_RE_EVAL : 0))
4519 if (pm->op_pmflags & PMf_HAS_CV) {
4521 /* this QR op (and the anon sub we embed it in) is never
4522 * actually executed. It's just a placeholder where we can
4523 * squirrel away expr in op_code_list without the peephole
4524 * optimiser etc processing it for a second time */
4525 OP *qr = newPMOP(OP_QR, 0);
4526 ((PMOP*)qr)->op_code_list = expr;
4528 /* handle the implicit sub{} wrapped round the qr/(?{..})/ */
4529 SvREFCNT_inc_simple_void(PL_compcv);
4530 cv = newATTRSUB(floor, 0, NULL, NULL, qr);
4531 ((struct regexp *)SvANY(re))->qr_anoncv = cv;
4533 /* attach the anon CV to the pad so that
4534 * pad_fixup_inner_anons() can find it */
4535 (void)pad_add_anon(cv, o->op_type);
4536 SvREFCNT_inc_simple_void(cv);
4539 pm->op_code_list = expr;
4544 /* runtime pattern: build chain of regcomp etc ops */
4546 PADOFFSET cv_targ = 0;
4548 reglist = isreg && expr->op_type == OP_LIST;
4553 pm->op_code_list = expr;
4554 /* don't free op_code_list; its ops are embedded elsewhere too */
4555 pm->op_pmflags |= PMf_CODELIST_PRIVATE;
4558 /* the OP_REGCMAYBE is a placeholder in the non-threaded case
4559 * to allow its op_next to be pointed past the regcomp and
4560 * preceding stacking ops;
4561 * OP_REGCRESET is there to reset taint before executing the
4563 if (pm->op_pmflags & PMf_KEEP || PL_tainting)
4564 expr = newUNOP((PL_tainting ? OP_REGCRESET : OP_REGCMAYBE),0,expr);
4566 if (pm->op_pmflags & PMf_HAS_CV) {
4567 /* we have a runtime qr with literal code. This means
4568 * that the qr// has been wrapped in a new CV, which
4569 * means that runtime consts, vars etc will have been compiled
4570 * against a new pad. So... we need to execute those ops
4571 * within the environment of the new CV. So wrap them in a call
4572 * to a new anon sub. i.e. for
4576 * we build an anon sub that looks like
4578 * sub { "a", $b, '(?{...})' }
4580 * and call it, passing the returned list to regcomp.
4581 * Or to put it another way, the list of ops that get executed
4585 * ------ -------------------
4586 * pushmark (for regcomp)
4587 * pushmark (for entersub)
4588 * pushmark (for refgen)
4592 * regcreset regcreset
4594 * const("a") const("a")
4596 * const("(?{...})") const("(?{...})")
4601 SvREFCNT_inc_simple_void(PL_compcv);
4602 /* these lines are just an unrolled newANONATTRSUB */
4603 expr = newSVOP(OP_ANONCODE, 0,
4604 MUTABLE_SV(newATTRSUB(floor, 0, NULL, NULL, expr)));
4605 cv_targ = expr->op_targ;
4606 expr = newUNOP(OP_REFGEN, 0, expr);
4608 expr = list(force_list(newUNOP(OP_ENTERSUB, 0, scalar(expr))));
4611 NewOp(1101, rcop, 1, LOGOP);
4612 rcop->op_type = OP_REGCOMP;
4613 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
4614 rcop->op_first = scalar(expr);
4615 rcop->op_flags |= OPf_KIDS
4616 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
4617 | (reglist ? OPf_STACKED : 0);
4618 rcop->op_private = 0;
4620 rcop->op_targ = cv_targ;
4622 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
4623 if (PL_hints & HINT_RE_EVAL) PL_cv_has_eval = 1;
4625 /* establish postfix order */
4626 if (expr->op_type == OP_REGCRESET || expr->op_type == OP_REGCMAYBE) {
4628 rcop->op_next = expr;
4629 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
4632 rcop->op_next = LINKLIST(expr);
4633 expr->op_next = (OP*)rcop;
4636 op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
4641 if (pm->op_pmflags & PMf_EVAL) {
4643 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
4644 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
4646 else if (repl->op_type == OP_CONST)
4650 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
4651 if (curop->op_type == OP_SCOPE
4652 || curop->op_type == OP_LEAVE
4653 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
4654 if (curop->op_type == OP_GV) {
4655 GV * const gv = cGVOPx_gv(curop);
4657 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
4660 else if (curop->op_type == OP_RV2CV)
4662 else if (curop->op_type == OP_RV2SV ||
4663 curop->op_type == OP_RV2AV ||
4664 curop->op_type == OP_RV2HV ||
4665 curop->op_type == OP_RV2GV) {
4666 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
4669 else if (curop->op_type == OP_PADSV ||
4670 curop->op_type == OP_PADAV ||
4671 curop->op_type == OP_PADHV ||
4672 curop->op_type == OP_PADANY)
4676 else if (curop->op_type == OP_PUSHRE)
4677 NOOP; /* Okay here, dangerous in newASSIGNOP */
4687 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
4689 pm->op_pmflags |= PMf_CONST; /* const for long enough */
4690 op_prepend_elem(o->op_type, scalar(repl), o);
4693 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
4694 pm->op_pmflags |= PMf_MAYBE_CONST;
4696 NewOp(1101, rcop, 1, LOGOP);
4697 rcop->op_type = OP_SUBSTCONT;
4698 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
4699 rcop->op_first = scalar(repl);
4700 rcop->op_flags |= OPf_KIDS;
4701 rcop->op_private = 1;
4704 /* establish postfix order */
4705 rcop->op_next = LINKLIST(repl);
4706 repl->op_next = (OP*)rcop;
4708 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
4709 assert(!(pm->op_pmflags & PMf_ONCE));
4710 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
4719 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
4721 Constructs, checks, and returns an op of any type that involves an
4722 embedded SV. I<type> is the opcode. I<flags> gives the eight bits
4723 of C<op_flags>. I<sv> gives the SV to embed in the op; this function
4724 takes ownership of one reference to it.
4730 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
4735 PERL_ARGS_ASSERT_NEWSVOP;
4737 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4738 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4739 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4741 NewOp(1101, svop, 1, SVOP);
4742 svop->op_type = (OPCODE)type;
4743 svop->op_ppaddr = PL_ppaddr[type];
4745 svop->op_next = (OP*)svop;
4746 svop->op_flags = (U8)flags;
4747 svop->op_private = (U8)(0 | (flags >> 8));
4748 if (PL_opargs[type] & OA_RETSCALAR)
4750 if (PL_opargs[type] & OA_TARGET)
4751 svop->op_targ = pad_alloc(type, SVs_PADTMP);
4752 return CHECKOP(type, svop);
4758 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
4760 Constructs, checks, and returns an op of any type that involves a
4761 reference to a pad element. I<type> is the opcode. I<flags> gives the
4762 eight bits of C<op_flags>. A pad slot is automatically allocated, and
4763 is populated with I<sv>; this function takes ownership of one reference
4766 This function only exists if Perl has been compiled to use ithreads.
4772 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
4777 PERL_ARGS_ASSERT_NEWPADOP;
4779 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4780 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4781 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4783 NewOp(1101, padop, 1, PADOP);
4784 padop->op_type = (OPCODE)type;
4785 padop->op_ppaddr = PL_ppaddr[type];
4786 padop->op_padix = pad_alloc(type, SVs_PADTMP);
4787 SvREFCNT_dec(PAD_SVl(padop->op_padix));
4788 PAD_SETSV(padop->op_padix, sv);
4791 padop->op_next = (OP*)padop;
4792 padop->op_flags = (U8)flags;
4793 if (PL_opargs[type] & OA_RETSCALAR)
4795 if (PL_opargs[type] & OA_TARGET)
4796 padop->op_targ = pad_alloc(type, SVs_PADTMP);
4797 return CHECKOP(type, padop);
4800 #endif /* !USE_ITHREADS */
4803 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
4805 Constructs, checks, and returns an op of any type that involves an
4806 embedded reference to a GV. I<type> is the opcode. I<flags> gives the
4807 eight bits of C<op_flags>. I<gv> identifies the GV that the op should
4808 reference; calling this function does not transfer ownership of any
4815 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
4819 PERL_ARGS_ASSERT_NEWGVOP;
4823 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4825 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4830 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
4832 Constructs, checks, and returns an op of any type that involves an
4833 embedded C-level pointer (PV). I<type> is the opcode. I<flags> gives
4834 the eight bits of C<op_flags>. I<pv> supplies the C-level pointer, which
4835 must have been allocated using L</PerlMemShared_malloc>; the memory will
4836 be freed when the op is destroyed.
4842 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
4845 const bool utf8 = cBOOL(flags & SVf_UTF8);
4850 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4852 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4854 NewOp(1101, pvop, 1, PVOP);
4855 pvop->op_type = (OPCODE)type;
4856 pvop->op_ppaddr = PL_ppaddr[type];
4858 pvop->op_next = (OP*)pvop;
4859 pvop->op_flags = (U8)flags;
4860 pvop->op_private = utf8 ? OPpPV_IS_UTF8 : 0;