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"
106 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
107 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) CALL_FPTR(PL_opfreehook)(aTHX_ o)
109 #if defined(PL_OP_SLAB_ALLOC)
111 #ifdef PERL_DEBUG_READONLY_OPS
112 # define PERL_SLAB_SIZE 4096
113 # include <sys/mman.h>
116 #ifndef PERL_SLAB_SIZE
117 #define PERL_SLAB_SIZE 2048
121 Perl_Slab_Alloc(pTHX_ size_t sz)
125 * To make incrementing use count easy PL_OpSlab is an I32 *
126 * To make inserting the link to slab PL_OpPtr is I32 **
127 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
128 * Add an overhead for pointer to slab and round up as a number of pointers
130 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
131 if ((PL_OpSpace -= sz) < 0) {
132 #ifdef PERL_DEBUG_READONLY_OPS
133 /* We need to allocate chunk by chunk so that we can control the VM
135 PL_OpPtr = (I32**) mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
136 MAP_ANON|MAP_PRIVATE, -1, 0);
138 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
139 (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
141 if(PL_OpPtr == MAP_FAILED) {
142 perror("mmap failed");
147 PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*));
152 /* We reserve the 0'th I32 sized chunk as a use count */
153 PL_OpSlab = (I32 *) PL_OpPtr;
154 /* Reduce size by the use count word, and by the size we need.
155 * Latter is to mimic the '-=' in the if() above
157 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
158 /* Allocation pointer starts at the top.
159 Theory: because we build leaves before trunk allocating at end
160 means that at run time access is cache friendly upward
162 PL_OpPtr += PERL_SLAB_SIZE;
164 #ifdef PERL_DEBUG_READONLY_OPS
165 /* We remember this slab. */
166 /* This implementation isn't efficient, but it is simple. */
167 PL_slabs = (I32**) realloc(PL_slabs, sizeof(I32**) * (PL_slab_count + 1));
168 PL_slabs[PL_slab_count++] = PL_OpSlab;
169 DEBUG_m(PerlIO_printf(Perl_debug_log, "Allocate %p\n", PL_OpSlab));
172 assert( PL_OpSpace >= 0 );
173 /* Move the allocation pointer down */
175 assert( PL_OpPtr > (I32 **) PL_OpSlab );
176 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
177 (*PL_OpSlab)++; /* Increment use count of slab */
178 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
179 assert( *PL_OpSlab > 0 );
180 return (void *)(PL_OpPtr + 1);
183 #ifdef PERL_DEBUG_READONLY_OPS
185 Perl_pending_Slabs_to_ro(pTHX) {
186 /* Turn all the allocated op slabs read only. */
187 U32 count = PL_slab_count;
188 I32 **const slabs = PL_slabs;
190 /* Reset the array of pending OP slabs, as we're about to turn this lot
191 read only. Also, do it ahead of the loop in case the warn triggers,
192 and a warn handler has an eval */
197 /* Force a new slab for any further allocation. */
201 void *const start = slabs[count];
202 const size_t size = PERL_SLAB_SIZE* sizeof(I32*);
203 if(mprotect(start, size, PROT_READ)) {
204 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d",
205 start, (unsigned long) size, errno);
213 S_Slab_to_rw(pTHX_ void *op)
215 I32 * const * const ptr = (I32 **) op;
216 I32 * const slab = ptr[-1];
218 PERL_ARGS_ASSERT_SLAB_TO_RW;
220 assert( ptr-1 > (I32 **) slab );
221 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
223 if(mprotect(slab, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE)) {
224 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d",
225 slab, (unsigned long) PERL_SLAB_SIZE*sizeof(I32*), errno);
230 Perl_op_refcnt_inc(pTHX_ OP *o)
241 Perl_op_refcnt_dec(pTHX_ OP *o)
243 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
248 # define Slab_to_rw(op)
252 Perl_Slab_Free(pTHX_ void *op)
254 I32 * const * const ptr = (I32 **) op;
255 I32 * const slab = ptr[-1];
256 PERL_ARGS_ASSERT_SLAB_FREE;
257 assert( ptr-1 > (I32 **) slab );
258 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
261 if (--(*slab) == 0) {
263 # define PerlMemShared PerlMem
266 #ifdef PERL_DEBUG_READONLY_OPS
267 U32 count = PL_slab_count;
268 /* Need to remove this slab from our list of slabs */
271 if (PL_slabs[count] == slab) {
273 /* Found it. Move the entry at the end to overwrite it. */
274 DEBUG_m(PerlIO_printf(Perl_debug_log,
275 "Deallocate %p by moving %p from %lu to %lu\n",
277 PL_slabs[PL_slab_count - 1],
278 PL_slab_count, count));
279 PL_slabs[count] = PL_slabs[--PL_slab_count];
280 /* Could realloc smaller at this point, but probably not
282 if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
283 perror("munmap failed");
291 PerlMemShared_free(slab);
293 if (slab == PL_OpSlab) {
300 * In the following definition, the ", (OP*)0" is just to make the compiler
301 * think the expression is of the right type: croak actually does a Siglongjmp.
303 #define CHECKOP(type,o) \
304 ((PL_op_mask && PL_op_mask[type]) \
305 ? ( op_free((OP*)o), \
306 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
308 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
310 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
313 S_gv_ename(pTHX_ GV *gv)
315 SV* const tmpsv = sv_newmortal();
317 PERL_ARGS_ASSERT_GV_ENAME;
319 gv_efullname3(tmpsv, gv, NULL);
320 return SvPV_nolen_const(tmpsv);
324 S_no_fh_allowed(pTHX_ OP *o)
326 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
328 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
334 S_too_few_arguments(pTHX_ OP *o, const char *name)
336 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS;
338 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
343 S_too_many_arguments(pTHX_ OP *o, const char *name)
345 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS;
347 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
352 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
354 PERL_ARGS_ASSERT_BAD_TYPE;
356 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
357 (int)n, name, t, OP_DESC(kid)));
361 S_no_bareword_allowed(pTHX_ const OP *o)
363 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
366 return; /* various ok barewords are hidden in extra OP_NULL */
367 qerror(Perl_mess(aTHX_
368 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
372 /* "register" allocation */
375 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
379 const bool is_our = (PL_parser->in_my == KEY_our);
381 PERL_ARGS_ASSERT_ALLOCMY;
384 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
387 /* Until we're using the length for real, cross check that we're being
389 assert(strlen(name) == len);
391 /* complain about "my $<special_var>" etc etc */
395 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
396 (name[1] == '_' && (*name == '$' || len > 2))))
398 /* name[2] is true if strlen(name) > 2 */
399 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
400 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
401 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
402 PL_parser->in_my == KEY_state ? "state" : "my"));
404 yyerror(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
405 PL_parser->in_my == KEY_state ? "state" : "my"));
409 /* allocate a spare slot and store the name in that slot */
411 off = pad_add_name(name, len,
412 is_our ? padadd_OUR :
413 PL_parser->in_my == KEY_state ? padadd_STATE : 0,
414 PL_parser->in_my_stash,
416 /* $_ is always in main::, even with our */
417 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
421 /* anon sub prototypes contains state vars should always be cloned,
422 * otherwise the state var would be shared between anon subs */
424 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
425 CvCLONE_on(PL_compcv);
430 /* free the body of an op without examining its contents.
431 * Always use this rather than FreeOp directly */
434 S_op_destroy(pTHX_ OP *o)
436 if (o->op_latefree) {
444 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
446 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
452 Perl_op_free(pTHX_ OP *o)
459 if (o->op_latefreed) {
466 if (o->op_private & OPpREFCOUNTED) {
477 refcnt = OpREFCNT_dec(o);
480 /* Need to find and remove any pattern match ops from the list
481 we maintain for reset(). */
482 find_and_forget_pmops(o);
492 /* Call the op_free hook if it has been set. Do it now so that it's called
493 * at the right time for refcounted ops, but still before all of the kids
497 if (o->op_flags & OPf_KIDS) {
498 register OP *kid, *nextkid;
499 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
500 nextkid = kid->op_sibling; /* Get before next freeing kid */
505 #ifdef PERL_DEBUG_READONLY_OPS
509 /* COP* is not cleared by op_clear() so that we may track line
510 * numbers etc even after null() */
511 if (type == OP_NEXTSTATE || type == OP_DBSTATE
512 || (type == OP_NULL /* the COP might have been null'ed */
513 && ((OPCODE)o->op_targ == OP_NEXTSTATE
514 || (OPCODE)o->op_targ == OP_DBSTATE))) {
519 type = (OPCODE)o->op_targ;
522 if (o->op_latefree) {
528 #ifdef DEBUG_LEAKING_SCALARS
535 Perl_op_clear(pTHX_ OP *o)
540 PERL_ARGS_ASSERT_OP_CLEAR;
543 /* if (o->op_madprop && o->op_madprop->mad_next)
545 /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
546 "modification of a read only value" for a reason I can't fathom why.
547 It's the "" stringification of $_, where $_ was set to '' in a foreach
548 loop, but it defies simplification into a small test case.
549 However, commenting them out has caused ext/List/Util/t/weak.t to fail
552 mad_free(o->op_madprop);
558 switch (o->op_type) {
559 case OP_NULL: /* Was holding old type, if any. */
560 if (PL_madskills && o->op_targ != OP_NULL) {
561 o->op_type = (Optype)o->op_targ;
566 case OP_ENTEREVAL: /* Was holding hints. */
570 if (!(o->op_flags & OPf_REF)
571 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
577 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
578 /* not an OP_PADAV replacement */
579 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
584 /* It's possible during global destruction that the GV is freed
585 before the optree. Whilst the SvREFCNT_inc is happy to bump from
586 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
587 will trigger an assertion failure, because the entry to sv_clear
588 checks that the scalar is not already freed. A check of for
589 !SvIS_FREED(gv) turns out to be invalid, because during global
590 destruction the reference count can be forced down to zero
591 (with SVf_BREAK set). In which case raising to 1 and then
592 dropping to 0 triggers cleanup before it should happen. I
593 *think* that this might actually be a general, systematic,
594 weakness of the whole idea of SVf_BREAK, in that code *is*
595 allowed to raise and lower references during global destruction,
596 so any *valid* code that happens to do this during global
597 destruction might well trigger premature cleanup. */
598 bool still_valid = gv && SvREFCNT(gv);
601 SvREFCNT_inc_simple_void(gv);
603 if (cPADOPo->op_padix > 0) {
604 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
605 * may still exist on the pad */
606 pad_swipe(cPADOPo->op_padix, TRUE);
607 cPADOPo->op_padix = 0;
610 SvREFCNT_dec(cSVOPo->op_sv);
611 cSVOPo->op_sv = NULL;
614 int try_downgrade = SvREFCNT(gv) == 2;
617 gv_try_downgrade(gv);
621 case OP_METHOD_NAMED:
624 SvREFCNT_dec(cSVOPo->op_sv);
625 cSVOPo->op_sv = NULL;
628 Even if op_clear does a pad_free for the target of the op,
629 pad_free doesn't actually remove the sv that exists in the pad;
630 instead it lives on. This results in that it could be reused as
631 a target later on when the pad was reallocated.
634 pad_swipe(o->op_targ,1);
643 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
647 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
649 if (cPADOPo->op_padix > 0) {
650 pad_swipe(cPADOPo->op_padix, TRUE);
651 cPADOPo->op_padix = 0;
654 SvREFCNT_dec(cSVOPo->op_sv);
655 cSVOPo->op_sv = NULL;
659 PerlMemShared_free(cPVOPo->op_pv);
660 cPVOPo->op_pv = NULL;
664 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
668 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
669 /* No GvIN_PAD_off here, because other references may still
670 * exist on the pad */
671 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
674 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
680 forget_pmop(cPMOPo, 1);
681 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
682 /* we use the same protection as the "SAFE" version of the PM_ macros
683 * here since sv_clean_all might release some PMOPs
684 * after PL_regex_padav has been cleared
685 * and the clearing of PL_regex_padav needs to
686 * happen before sv_clean_all
689 if(PL_regex_pad) { /* We could be in destruction */
690 const IV offset = (cPMOPo)->op_pmoffset;
691 ReREFCNT_dec(PM_GETRE(cPMOPo));
692 PL_regex_pad[offset] = &PL_sv_undef;
693 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
697 ReREFCNT_dec(PM_GETRE(cPMOPo));
698 PM_SETRE(cPMOPo, NULL);
704 if (o->op_targ > 0) {
705 pad_free(o->op_targ);
711 S_cop_free(pTHX_ COP* cop)
713 PERL_ARGS_ASSERT_COP_FREE;
717 if (! specialWARN(cop->cop_warnings))
718 PerlMemShared_free(cop->cop_warnings);
719 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
723 S_forget_pmop(pTHX_ PMOP *const o
729 HV * const pmstash = PmopSTASH(o);
731 PERL_ARGS_ASSERT_FORGET_PMOP;
733 if (pmstash && !SvIS_FREED(pmstash)) {
734 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
736 PMOP **const array = (PMOP**) mg->mg_ptr;
737 U32 count = mg->mg_len / sizeof(PMOP**);
742 /* Found it. Move the entry at the end to overwrite it. */
743 array[i] = array[--count];
744 mg->mg_len = count * sizeof(PMOP**);
745 /* Could realloc smaller at this point always, but probably
746 not worth it. Probably worth free()ing if we're the
749 Safefree(mg->mg_ptr);
766 S_find_and_forget_pmops(pTHX_ OP *o)
768 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
770 if (o->op_flags & OPf_KIDS) {
771 OP *kid = cUNOPo->op_first;
773 switch (kid->op_type) {
778 forget_pmop((PMOP*)kid, 0);
780 find_and_forget_pmops(kid);
781 kid = kid->op_sibling;
787 Perl_op_null(pTHX_ OP *o)
791 PERL_ARGS_ASSERT_OP_NULL;
793 if (o->op_type == OP_NULL)
797 o->op_targ = o->op_type;
798 o->op_type = OP_NULL;
799 o->op_ppaddr = PL_ppaddr[OP_NULL];
803 Perl_op_refcnt_lock(pTHX)
811 Perl_op_refcnt_unlock(pTHX)
818 /* Contextualizers */
820 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
823 S_linklist(pTHX_ OP *o)
827 PERL_ARGS_ASSERT_LINKLIST;
832 /* establish postfix order */
833 first = cUNOPo->op_first;
836 o->op_next = LINKLIST(first);
839 if (kid->op_sibling) {
840 kid->op_next = LINKLIST(kid->op_sibling);
841 kid = kid->op_sibling;
855 S_scalarkids(pTHX_ OP *o)
857 if (o && o->op_flags & OPf_KIDS) {
859 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
866 S_scalarboolean(pTHX_ OP *o)
870 PERL_ARGS_ASSERT_SCALARBOOLEAN;
872 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
873 if (ckWARN(WARN_SYNTAX)) {
874 const line_t oldline = CopLINE(PL_curcop);
876 if (PL_parser && PL_parser->copline != NOLINE)
877 CopLINE_set(PL_curcop, PL_parser->copline);
878 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
879 CopLINE_set(PL_curcop, oldline);
886 Perl_scalar(pTHX_ OP *o)
891 /* assumes no premature commitment */
892 if (!o || (PL_parser && PL_parser->error_count)
893 || (o->op_flags & OPf_WANT)
894 || o->op_type == OP_RETURN)
899 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
901 switch (o->op_type) {
903 scalar(cBINOPo->op_first);
908 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
918 if (o->op_flags & OPf_KIDS) {
919 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
925 kid = cLISTOPo->op_first;
927 kid = kid->op_sibling;
930 OP *sib = kid->op_sibling;
931 if (sib && kid->op_type != OP_LEAVEWHEN) {
932 if (sib->op_type == OP_BREAK && sib->op_flags & OPf_SPECIAL) {
942 PL_curcop = &PL_compiling;
947 kid = cLISTOPo->op_first;
950 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
957 Perl_scalarvoid(pTHX_ OP *o)
961 const char* useless = NULL;
965 PERL_ARGS_ASSERT_SCALARVOID;
967 /* trailing mad null ops don't count as "there" for void processing */
969 o->op_type != OP_NULL &&
971 o->op_sibling->op_type == OP_NULL)
974 for (sib = o->op_sibling;
975 sib && sib->op_type == OP_NULL;
976 sib = sib->op_sibling) ;
982 if (o->op_type == OP_NEXTSTATE
983 || o->op_type == OP_DBSTATE
984 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
985 || o->op_targ == OP_DBSTATE)))
986 PL_curcop = (COP*)o; /* for warning below */
988 /* assumes no premature commitment */
989 want = o->op_flags & OPf_WANT;
990 if ((want && want != OPf_WANT_SCALAR)
991 || (PL_parser && PL_parser->error_count)
992 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
997 if ((o->op_private & OPpTARGET_MY)
998 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1000 return scalar(o); /* As if inside SASSIGN */
1003 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1005 switch (o->op_type) {
1007 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1011 if (o->op_flags & OPf_STACKED)
1015 if (o->op_private == 4)
1058 case OP_GETSOCKNAME:
1059 case OP_GETPEERNAME:
1064 case OP_GETPRIORITY:
1088 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1089 /* Otherwise it's "Useless use of grep iterator" */
1090 useless = OP_DESC(o);
1094 kid = cLISTOPo->op_first;
1095 if (kid && kid->op_type == OP_PUSHRE
1097 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1099 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1101 useless = OP_DESC(o);
1105 kid = cUNOPo->op_first;
1106 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1107 kid->op_type != OP_TRANS) {
1110 useless = "negative pattern binding (!~)";
1117 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1118 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1119 useless = "a variable";
1124 if (cSVOPo->op_private & OPpCONST_STRICT)
1125 no_bareword_allowed(o);
1127 if (ckWARN(WARN_VOID)) {
1129 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1130 "a constant (%"SVf")", sv));
1131 useless = SvPV_nolen(msv);
1134 useless = "a constant (undef)";
1135 if (o->op_private & OPpCONST_ARYBASE)
1137 /* don't warn on optimised away booleans, eg
1138 * use constant Foo, 5; Foo || print; */
1139 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1141 /* the constants 0 and 1 are permitted as they are
1142 conventionally used as dummies in constructs like
1143 1 while some_condition_with_side_effects; */
1144 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1146 else if (SvPOK(sv)) {
1147 /* perl4's way of mixing documentation and code
1148 (before the invention of POD) was based on a
1149 trick to mix nroff and perl code. The trick was
1150 built upon these three nroff macros being used in
1151 void context. The pink camel has the details in
1152 the script wrapman near page 319. */
1153 const char * const maybe_macro = SvPVX_const(sv);
1154 if (strnEQ(maybe_macro, "di", 2) ||
1155 strnEQ(maybe_macro, "ds", 2) ||
1156 strnEQ(maybe_macro, "ig", 2))
1161 op_null(o); /* don't execute or even remember it */
1165 o->op_type = OP_PREINC; /* pre-increment is faster */
1166 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1170 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1171 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1175 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1176 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1180 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1181 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1186 kid = cLOGOPo->op_first;
1187 if (kid->op_type == OP_NOT
1188 && (kid->op_flags & OPf_KIDS)
1190 if (o->op_type == OP_AND) {
1192 o->op_ppaddr = PL_ppaddr[OP_OR];
1194 o->op_type = OP_AND;
1195 o->op_ppaddr = PL_ppaddr[OP_AND];
1204 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1209 if (o->op_flags & OPf_STACKED)
1216 if (!(o->op_flags & OPf_KIDS))
1227 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1237 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1242 S_listkids(pTHX_ OP *o)
1244 if (o && o->op_flags & OPf_KIDS) {
1246 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1253 Perl_list(pTHX_ OP *o)
1258 /* assumes no premature commitment */
1259 if (!o || (o->op_flags & OPf_WANT)
1260 || (PL_parser && PL_parser->error_count)
1261 || o->op_type == OP_RETURN)
1266 if ((o->op_private & OPpTARGET_MY)
1267 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1269 return o; /* As if inside SASSIGN */
1272 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1274 switch (o->op_type) {
1277 list(cBINOPo->op_first);
1282 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1290 if (!(o->op_flags & OPf_KIDS))
1292 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1293 list(cBINOPo->op_first);
1294 return gen_constant_list(o);
1301 kid = cLISTOPo->op_first;
1303 kid = kid->op_sibling;
1306 OP *sib = kid->op_sibling;
1307 if (sib && kid->op_type != OP_LEAVEWHEN) {
1308 if (sib->op_type == OP_BREAK && sib->op_flags & OPf_SPECIAL) {
1318 PL_curcop = &PL_compiling;
1322 kid = cLISTOPo->op_first;
1329 S_scalarseq(pTHX_ OP *o)
1333 const OPCODE type = o->op_type;
1335 if (type == OP_LINESEQ || type == OP_SCOPE ||
1336 type == OP_LEAVE || type == OP_LEAVETRY)
1339 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1340 if (kid->op_sibling) {
1344 PL_curcop = &PL_compiling;
1346 o->op_flags &= ~OPf_PARENS;
1347 if (PL_hints & HINT_BLOCK_SCOPE)
1348 o->op_flags |= OPf_PARENS;
1351 o = newOP(OP_STUB, 0);
1356 S_modkids(pTHX_ OP *o, I32 type)
1358 if (o && o->op_flags & OPf_KIDS) {
1360 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1366 /* Propagate lvalue ("modifiable") context to an op and its children.
1367 * 'type' represents the context type, roughly based on the type of op that
1368 * would do the modifying, although local() is represented by OP_NULL.
1369 * It's responsible for detecting things that can't be modified, flag
1370 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1371 * might have to vivify a reference in $x), and so on.
1373 * For example, "$a+1 = 2" would cause mod() to be called with o being
1374 * OP_ADD and type being OP_SASSIGN, and would output an error.
1378 Perl_mod(pTHX_ OP *o, I32 type)
1382 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1385 if (!o || (PL_parser && PL_parser->error_count))
1388 if ((o->op_private & OPpTARGET_MY)
1389 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1394 switch (o->op_type) {
1400 if (!(o->op_private & OPpCONST_ARYBASE))
1403 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1404 CopARYBASE_set(&PL_compiling,
1405 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1409 SAVECOPARYBASE(&PL_compiling);
1410 CopARYBASE_set(&PL_compiling, 0);
1412 else if (type == OP_REFGEN)
1415 Perl_croak(aTHX_ "That use of $[ is unsupported");
1418 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1422 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1423 !(o->op_flags & OPf_STACKED)) {
1424 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1425 /* The default is to set op_private to the number of children,
1426 which for a UNOP such as RV2CV is always 1. And w're using
1427 the bit for a flag in RV2CV, so we need it clear. */
1428 o->op_private &= ~1;
1429 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1430 assert(cUNOPo->op_first->op_type == OP_NULL);
1431 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1434 else if (o->op_private & OPpENTERSUB_NOMOD)
1436 else { /* lvalue subroutine call */
1437 o->op_private |= OPpLVAL_INTRO;
1438 PL_modcount = RETURN_UNLIMITED_NUMBER;
1439 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1440 /* Backward compatibility mode: */
1441 o->op_private |= OPpENTERSUB_INARGS;
1444 else { /* Compile-time error message: */
1445 OP *kid = cUNOPo->op_first;
1449 if (kid->op_type != OP_PUSHMARK) {
1450 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1452 "panic: unexpected lvalue entersub "
1453 "args: type/targ %ld:%"UVuf,
1454 (long)kid->op_type, (UV)kid->op_targ);
1455 kid = kLISTOP->op_first;
1457 while (kid->op_sibling)
1458 kid = kid->op_sibling;
1459 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1461 if (kid->op_type == OP_METHOD_NAMED
1462 || kid->op_type == OP_METHOD)
1466 NewOp(1101, newop, 1, UNOP);
1467 newop->op_type = OP_RV2CV;
1468 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1469 newop->op_first = NULL;
1470 newop->op_next = (OP*)newop;
1471 kid->op_sibling = (OP*)newop;
1472 newop->op_private |= OPpLVAL_INTRO;
1473 newop->op_private &= ~1;
1477 if (kid->op_type != OP_RV2CV)
1479 "panic: unexpected lvalue entersub "
1480 "entry via type/targ %ld:%"UVuf,
1481 (long)kid->op_type, (UV)kid->op_targ);
1482 kid->op_private |= OPpLVAL_INTRO;
1483 break; /* Postpone until runtime */
1487 kid = kUNOP->op_first;
1488 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1489 kid = kUNOP->op_first;
1490 if (kid->op_type == OP_NULL)
1492 "Unexpected constant lvalue entersub "
1493 "entry via type/targ %ld:%"UVuf,
1494 (long)kid->op_type, (UV)kid->op_targ);
1495 if (kid->op_type != OP_GV) {
1496 /* Restore RV2CV to check lvalueness */
1498 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1499 okid->op_next = kid->op_next;
1500 kid->op_next = okid;
1503 okid->op_next = NULL;
1504 okid->op_type = OP_RV2CV;
1506 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1507 okid->op_private |= OPpLVAL_INTRO;
1508 okid->op_private &= ~1;
1512 cv = GvCV(kGVOP_gv);
1522 /* grep, foreach, subcalls, refgen */
1523 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1525 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1526 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1528 : (o->op_type == OP_ENTERSUB
1529 ? "non-lvalue subroutine call"
1531 type ? PL_op_desc[type] : "local"));
1545 case OP_RIGHT_SHIFT:
1554 if (!(o->op_flags & OPf_STACKED))
1561 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1567 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1568 PL_modcount = RETURN_UNLIMITED_NUMBER;
1569 return o; /* Treat \(@foo) like ordinary list. */
1573 if (scalar_mod_type(o, type))
1575 ref(cUNOPo->op_first, o->op_type);
1579 if (type == OP_LEAVESUBLV)
1580 o->op_private |= OPpMAYBE_LVSUB;
1586 PL_modcount = RETURN_UNLIMITED_NUMBER;
1589 PL_hints |= HINT_BLOCK_SCOPE;
1590 if (type == OP_LEAVESUBLV)
1591 o->op_private |= OPpMAYBE_LVSUB;
1595 ref(cUNOPo->op_first, o->op_type);
1599 PL_hints |= HINT_BLOCK_SCOPE;
1614 PL_modcount = RETURN_UNLIMITED_NUMBER;
1615 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1616 return o; /* Treat \(@foo) like ordinary list. */
1617 if (scalar_mod_type(o, type))
1619 if (type == OP_LEAVESUBLV)
1620 o->op_private |= OPpMAYBE_LVSUB;
1624 if (!type) /* local() */
1625 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1626 PAD_COMPNAME_PV(o->op_targ));
1634 if (type != OP_SASSIGN)
1638 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1643 if (type == OP_LEAVESUBLV)
1644 o->op_private |= OPpMAYBE_LVSUB;
1646 pad_free(o->op_targ);
1647 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1648 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1649 if (o->op_flags & OPf_KIDS)
1650 mod(cBINOPo->op_first->op_sibling, type);
1655 ref(cBINOPo->op_first, o->op_type);
1656 if (type == OP_ENTERSUB &&
1657 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1658 o->op_private |= OPpLVAL_DEFER;
1659 if (type == OP_LEAVESUBLV)
1660 o->op_private |= OPpMAYBE_LVSUB;
1670 if (o->op_flags & OPf_KIDS)
1671 mod(cLISTOPo->op_last, type);
1676 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1678 else if (!(o->op_flags & OPf_KIDS))
1680 if (o->op_targ != OP_LIST) {
1681 mod(cBINOPo->op_first, type);
1687 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1692 if (type != OP_LEAVESUBLV)
1694 break; /* mod()ing was handled by ck_return() */
1697 /* [20011101.069] File test operators interpret OPf_REF to mean that
1698 their argument is a filehandle; thus \stat(".") should not set
1700 if (type == OP_REFGEN &&
1701 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1704 if (type != OP_LEAVESUBLV)
1705 o->op_flags |= OPf_MOD;
1707 if (type == OP_AASSIGN || type == OP_SASSIGN)
1708 o->op_flags |= OPf_SPECIAL|OPf_REF;
1709 else if (!type) { /* local() */
1712 o->op_private |= OPpLVAL_INTRO;
1713 o->op_flags &= ~OPf_SPECIAL;
1714 PL_hints |= HINT_BLOCK_SCOPE;
1719 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
1720 "Useless localization of %s", OP_DESC(o));
1723 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1724 && type != OP_LEAVESUBLV)
1725 o->op_flags |= OPf_REF;
1730 S_scalar_mod_type(const OP *o, I32 type)
1732 PERL_ARGS_ASSERT_SCALAR_MOD_TYPE;
1736 if (o->op_type == OP_RV2GV)
1760 case OP_RIGHT_SHIFT:
1780 S_is_handle_constructor(const OP *o, I32 numargs)
1782 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
1784 switch (o->op_type) {
1792 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1805 S_refkids(pTHX_ OP *o, I32 type)
1807 if (o && o->op_flags & OPf_KIDS) {
1809 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1816 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1821 PERL_ARGS_ASSERT_DOREF;
1823 if (!o || (PL_parser && PL_parser->error_count))
1826 switch (o->op_type) {
1828 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1829 !(o->op_flags & OPf_STACKED)) {
1830 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1831 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1832 assert(cUNOPo->op_first->op_type == OP_NULL);
1833 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1834 o->op_flags |= OPf_SPECIAL;
1835 o->op_private &= ~1;
1840 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1841 doref(kid, type, set_op_ref);
1844 if (type == OP_DEFINED)
1845 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1846 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1849 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1850 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1851 : type == OP_RV2HV ? OPpDEREF_HV
1853 o->op_flags |= OPf_MOD;
1860 o->op_flags |= OPf_REF;
1863 if (type == OP_DEFINED)
1864 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1865 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1871 o->op_flags |= OPf_REF;
1876 if (!(o->op_flags & OPf_KIDS))
1878 doref(cBINOPo->op_first, type, set_op_ref);
1882 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1883 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1884 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1885 : type == OP_RV2HV ? OPpDEREF_HV
1887 o->op_flags |= OPf_MOD;
1897 if (!(o->op_flags & OPf_KIDS))
1899 doref(cLISTOPo->op_last, type, set_op_ref);
1909 S_dup_attrlist(pTHX_ OP *o)
1914 PERL_ARGS_ASSERT_DUP_ATTRLIST;
1916 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1917 * where the first kid is OP_PUSHMARK and the remaining ones
1918 * are OP_CONST. We need to push the OP_CONST values.
1920 if (o->op_type == OP_CONST)
1921 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1923 else if (o->op_type == OP_NULL)
1927 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1929 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1930 if (o->op_type == OP_CONST)
1931 rop = append_elem(OP_LIST, rop,
1932 newSVOP(OP_CONST, o->op_flags,
1933 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1940 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1945 PERL_ARGS_ASSERT_APPLY_ATTRS;
1947 /* fake up C<use attributes $pkg,$rv,@attrs> */
1948 ENTER; /* need to protect against side-effects of 'use' */
1949 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1951 #define ATTRSMODULE "attributes"
1952 #define ATTRSMODULE_PM "attributes.pm"
1955 /* Don't force the C<use> if we don't need it. */
1956 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1957 if (svp && *svp != &PL_sv_undef)
1958 NOOP; /* already in %INC */
1960 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1961 newSVpvs(ATTRSMODULE), NULL);
1964 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1965 newSVpvs(ATTRSMODULE),
1967 prepend_elem(OP_LIST,
1968 newSVOP(OP_CONST, 0, stashsv),
1969 prepend_elem(OP_LIST,
1970 newSVOP(OP_CONST, 0,
1972 dup_attrlist(attrs))));
1978 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1981 OP *pack, *imop, *arg;
1984 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
1989 assert(target->op_type == OP_PADSV ||
1990 target->op_type == OP_PADHV ||
1991 target->op_type == OP_PADAV);
1993 /* Ensure that attributes.pm is loaded. */
1994 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1996 /* Need package name for method call. */
1997 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1999 /* Build up the real arg-list. */
2000 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2002 arg = newOP(OP_PADSV, 0);
2003 arg->op_targ = target->op_targ;
2004 arg = prepend_elem(OP_LIST,
2005 newSVOP(OP_CONST, 0, stashsv),
2006 prepend_elem(OP_LIST,
2007 newUNOP(OP_REFGEN, 0,
2008 mod(arg, OP_REFGEN)),
2009 dup_attrlist(attrs)));
2011 /* Fake up a method call to import */
2012 meth = newSVpvs_share("import");
2013 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2014 append_elem(OP_LIST,
2015 prepend_elem(OP_LIST, pack, list(arg)),
2016 newSVOP(OP_METHOD_NAMED, 0, meth)));
2017 imop->op_private |= OPpENTERSUB_NOMOD;
2019 /* Combine the ops. */
2020 *imopsp = append_elem(OP_LIST, *imopsp, imop);
2024 =notfor apidoc apply_attrs_string
2026 Attempts to apply a list of attributes specified by the C<attrstr> and
2027 C<len> arguments to the subroutine identified by the C<cv> argument which
2028 is expected to be associated with the package identified by the C<stashpv>
2029 argument (see L<attributes>). It gets this wrong, though, in that it
2030 does not correctly identify the boundaries of the individual attribute
2031 specifications within C<attrstr>. This is not really intended for the
2032 public API, but has to be listed here for systems such as AIX which
2033 need an explicit export list for symbols. (It's called from XS code
2034 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2035 to respect attribute syntax properly would be welcome.
2041 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2042 const char *attrstr, STRLEN len)
2046 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2049 len = strlen(attrstr);
2053 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2055 const char * const sstr = attrstr;
2056 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2057 attrs = append_elem(OP_LIST, attrs,
2058 newSVOP(OP_CONST, 0,
2059 newSVpvn(sstr, attrstr-sstr)));
2063 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2064 newSVpvs(ATTRSMODULE),
2065 NULL, prepend_elem(OP_LIST,
2066 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2067 prepend_elem(OP_LIST,
2068 newSVOP(OP_CONST, 0,
2069 newRV(MUTABLE_SV(cv))),
2074 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2079 PERL_ARGS_ASSERT_MY_KID;
2081 if (!o || (PL_parser && PL_parser->error_count))
2085 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2086 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2090 if (type == OP_LIST) {
2092 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2093 my_kid(kid, attrs, imopsp);
2094 } else if (type == OP_UNDEF
2100 } else if (type == OP_RV2SV || /* "our" declaration */
2102 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2103 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2104 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2106 PL_parser->in_my == KEY_our
2108 : PL_parser->in_my == KEY_state ? "state" : "my"));
2110 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
2111 PL_parser->in_my = FALSE;
2112 PL_parser->in_my_stash = NULL;
2113 apply_attrs(GvSTASH(gv),
2114 (type == OP_RV2SV ? GvSV(gv) :
2115 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2116 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
2119 o->op_private |= OPpOUR_INTRO;
2122 else if (type != OP_PADSV &&
2125 type != OP_PUSHMARK)
2127 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2129 PL_parser->in_my == KEY_our
2131 : PL_parser->in_my == KEY_state ? "state" : "my"));
2134 else if (attrs && type != OP_PUSHMARK) {
2137 PL_parser->in_my = FALSE;
2138 PL_parser->in_my_stash = NULL;
2140 /* check for C<my Dog $spot> when deciding package */
2141 stash = PAD_COMPNAME_TYPE(o->op_targ);
2143 stash = PL_curstash;
2144 apply_attrs_my(stash, o, attrs, imopsp);
2146 o->op_flags |= OPf_MOD;
2147 o->op_private |= OPpLVAL_INTRO;
2148 if (PL_parser->in_my == KEY_state)
2149 o->op_private |= OPpPAD_STATE;
2154 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2158 int maybe_scalar = 0;
2160 PERL_ARGS_ASSERT_MY_ATTRS;
2162 /* [perl #17376]: this appears to be premature, and results in code such as
2163 C< our(%x); > executing in list mode rather than void mode */
2165 if (o->op_flags & OPf_PARENS)
2175 o = my_kid(o, attrs, &rops);
2177 if (maybe_scalar && o->op_type == OP_PADSV) {
2178 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
2179 o->op_private |= OPpLVAL_INTRO;
2182 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
2184 PL_parser->in_my = FALSE;
2185 PL_parser->in_my_stash = NULL;
2190 Perl_sawparens(pTHX_ OP *o)
2192 PERL_UNUSED_CONTEXT;
2194 o->op_flags |= OPf_PARENS;
2199 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2203 const OPCODE ltype = left->op_type;
2204 const OPCODE rtype = right->op_type;
2206 PERL_ARGS_ASSERT_BIND_MATCH;
2208 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2209 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2211 const char * const desc
2212 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
2213 ? (int)rtype : OP_MATCH];
2214 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2215 ? "@array" : "%hash");
2216 Perl_warner(aTHX_ packWARN(WARN_MISC),
2217 "Applying %s to %s will act on scalar(%s)",
2218 desc, sample, sample);
2221 if (rtype == OP_CONST &&
2222 cSVOPx(right)->op_private & OPpCONST_BARE &&
2223 cSVOPx(right)->op_private & OPpCONST_STRICT)
2225 no_bareword_allowed(right);
2228 ismatchop = rtype == OP_MATCH ||
2229 rtype == OP_SUBST ||
2231 if (ismatchop && right->op_private & OPpTARGET_MY) {
2233 right->op_private &= ~OPpTARGET_MY;
2235 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2238 right->op_flags |= OPf_STACKED;
2239 if (rtype != OP_MATCH &&
2240 ! (rtype == OP_TRANS &&
2241 right->op_private & OPpTRANS_IDENTICAL))
2242 newleft = mod(left, rtype);
2245 if (right->op_type == OP_TRANS)
2246 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2248 o = prepend_elem(rtype, scalar(newleft), right);
2250 return newUNOP(OP_NOT, 0, scalar(o));
2254 return bind_match(type, left,
2255 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2259 Perl_invert(pTHX_ OP *o)
2263 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2267 Perl_scope(pTHX_ OP *o)
2271 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2272 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2273 o->op_type = OP_LEAVE;
2274 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2276 else if (o->op_type == OP_LINESEQ) {
2278 o->op_type = OP_SCOPE;
2279 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2280 kid = ((LISTOP*)o)->op_first;
2281 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2284 /* The following deals with things like 'do {1 for 1}' */
2285 kid = kid->op_sibling;
2287 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2292 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2298 Perl_block_start(pTHX_ int full)
2301 const int retval = PL_savestack_ix;
2302 pad_block_start(full);
2304 PL_hints &= ~HINT_BLOCK_SCOPE;
2305 SAVECOMPILEWARNINGS();
2306 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2311 Perl_block_end(pTHX_ I32 floor, OP *seq)
2314 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2315 OP* const retval = scalarseq(seq);
2317 CopHINTS_set(&PL_compiling, PL_hints);
2319 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2328 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
2329 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2330 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2333 OP * const o = newOP(OP_PADSV, 0);
2334 o->op_targ = offset;
2340 Perl_newPROG(pTHX_ OP *o)
2344 PERL_ARGS_ASSERT_NEWPROG;
2349 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2350 ((PL_in_eval & EVAL_KEEPERR)
2351 ? OPf_SPECIAL : 0), o);
2352 PL_eval_start = linklist(PL_eval_root);
2353 PL_eval_root->op_private |= OPpREFCOUNTED;
2354 OpREFCNT_set(PL_eval_root, 1);
2355 PL_eval_root->op_next = 0;
2356 CALL_PEEP(PL_eval_start);
2359 if (o->op_type == OP_STUB) {
2360 PL_comppad_name = 0;
2362 S_op_destroy(aTHX_ o);
2365 PL_main_root = scope(sawparens(scalarvoid(o)));
2366 PL_curcop = &PL_compiling;
2367 PL_main_start = LINKLIST(PL_main_root);
2368 PL_main_root->op_private |= OPpREFCOUNTED;
2369 OpREFCNT_set(PL_main_root, 1);
2370 PL_main_root->op_next = 0;
2371 CALL_PEEP(PL_main_start);
2374 /* Register with debugger */
2376 CV * const cv = get_cvs("DB::postponed", 0);
2380 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2382 call_sv(MUTABLE_SV(cv), G_DISCARD);
2389 Perl_localize(pTHX_ OP *o, I32 lex)
2393 PERL_ARGS_ASSERT_LOCALIZE;
2395 if (o->op_flags & OPf_PARENS)
2396 /* [perl #17376]: this appears to be premature, and results in code such as
2397 C< our(%x); > executing in list mode rather than void mode */
2404 if ( PL_parser->bufptr > PL_parser->oldbufptr
2405 && PL_parser->bufptr[-1] == ','
2406 && ckWARN(WARN_PARENTHESIS))
2408 char *s = PL_parser->bufptr;
2411 /* some heuristics to detect a potential error */
2412 while (*s && (strchr(", \t\n", *s)))
2416 if (*s && strchr("@$%*", *s) && *++s
2417 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2420 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2422 while (*s && (strchr(", \t\n", *s)))
2428 if (sigil && (*s == ';' || *s == '=')) {
2429 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2430 "Parentheses missing around \"%s\" list",
2432 ? (PL_parser->in_my == KEY_our
2434 : PL_parser->in_my == KEY_state
2444 o = mod(o, OP_NULL); /* a bit kludgey */
2445 PL_parser->in_my = FALSE;
2446 PL_parser->in_my_stash = NULL;
2451 Perl_jmaybe(pTHX_ OP *o)
2453 PERL_ARGS_ASSERT_JMAYBE;
2455 if (o->op_type == OP_LIST) {
2457 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2458 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2464 S_fold_constants(pTHX_ register OP *o)
2467 register OP * VOL curop;
2469 VOL I32 type = o->op_type;
2474 SV * const oldwarnhook = PL_warnhook;
2475 SV * const olddiehook = PL_diehook;
2479 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
2481 if (PL_opargs[type] & OA_RETSCALAR)
2483 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2484 o->op_targ = pad_alloc(type, SVs_PADTMP);
2486 /* integerize op, unless it happens to be C<-foo>.
2487 * XXX should pp_i_negate() do magic string negation instead? */
2488 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2489 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2490 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2492 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2495 if (!(PL_opargs[type] & OA_FOLDCONST))
2500 /* XXX might want a ck_negate() for this */
2501 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2512 /* XXX what about the numeric ops? */
2513 if (PL_hints & HINT_LOCALE)
2518 if (PL_parser && PL_parser->error_count)
2519 goto nope; /* Don't try to run w/ errors */
2521 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2522 const OPCODE type = curop->op_type;
2523 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2525 type != OP_SCALAR &&
2527 type != OP_PUSHMARK)
2533 curop = LINKLIST(o);
2534 old_next = o->op_next;
2538 oldscope = PL_scopestack_ix;
2539 create_eval_scope(G_FAKINGEVAL);
2541 /* Verify that we don't need to save it: */
2542 assert(PL_curcop == &PL_compiling);
2543 StructCopy(&PL_compiling, ¬_compiling, COP);
2544 PL_curcop = ¬_compiling;
2545 /* The above ensures that we run with all the correct hints of the
2546 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
2547 assert(IN_PERL_RUNTIME);
2548 PL_warnhook = PERL_WARNHOOK_FATAL;
2555 sv = *(PL_stack_sp--);
2556 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2557 pad_swipe(o->op_targ, FALSE);
2558 else if (SvTEMP(sv)) { /* grab mortal temp? */
2559 SvREFCNT_inc_simple_void(sv);
2564 /* Something tried to die. Abandon constant folding. */
2565 /* Pretend the error never happened. */
2567 o->op_next = old_next;
2571 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2572 PL_warnhook = oldwarnhook;
2573 PL_diehook = olddiehook;
2574 /* XXX note that this croak may fail as we've already blown away
2575 * the stack - eg any nested evals */
2576 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2579 PL_warnhook = oldwarnhook;
2580 PL_diehook = olddiehook;
2581 PL_curcop = &PL_compiling;
2583 if (PL_scopestack_ix > oldscope)
2584 delete_eval_scope();
2593 if (type == OP_RV2GV)
2594 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
2596 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
2597 op_getmad(o,newop,'f');
2605 S_gen_constant_list(pTHX_ register OP *o)
2609 const I32 oldtmps_floor = PL_tmps_floor;
2612 if (PL_parser && PL_parser->error_count)
2613 return o; /* Don't attempt to run with errors */
2615 PL_op = curop = LINKLIST(o);
2621 assert (!(curop->op_flags & OPf_SPECIAL));
2622 assert(curop->op_type == OP_RANGE);
2624 PL_tmps_floor = oldtmps_floor;
2626 o->op_type = OP_RV2AV;
2627 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2628 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2629 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2630 o->op_opt = 0; /* needs to be revisited in peep() */
2631 curop = ((UNOP*)o)->op_first;
2632 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2634 op_getmad(curop,o,'O');
2643 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2646 if (!o || o->op_type != OP_LIST)
2647 o = newLISTOP(OP_LIST, 0, o, NULL);
2649 o->op_flags &= ~OPf_WANT;
2651 if (!(PL_opargs[type] & OA_MARK))
2652 op_null(cLISTOPo->op_first);
2654 o->op_type = (OPCODE)type;
2655 o->op_ppaddr = PL_ppaddr[type];
2656 o->op_flags |= flags;
2658 o = CHECKOP(type, o);
2659 if (o->op_type != (unsigned)type)
2662 return fold_constants(o);
2665 /* List constructors */
2668 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2676 if (first->op_type != (unsigned)type
2677 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2679 return newLISTOP(type, 0, first, last);
2682 if (first->op_flags & OPf_KIDS)
2683 ((LISTOP*)first)->op_last->op_sibling = last;
2685 first->op_flags |= OPf_KIDS;
2686 ((LISTOP*)first)->op_first = last;
2688 ((LISTOP*)first)->op_last = last;
2693 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2701 if (first->op_type != (unsigned)type)
2702 return prepend_elem(type, (OP*)first, (OP*)last);
2704 if (last->op_type != (unsigned)type)
2705 return append_elem(type, (OP*)first, (OP*)last);
2707 first->op_last->op_sibling = last->op_first;
2708 first->op_last = last->op_last;
2709 first->op_flags |= (last->op_flags & OPf_KIDS);
2712 if (last->op_first && first->op_madprop) {
2713 MADPROP *mp = last->op_first->op_madprop;
2715 while (mp->mad_next)
2717 mp->mad_next = first->op_madprop;
2720 last->op_first->op_madprop = first->op_madprop;
2723 first->op_madprop = last->op_madprop;
2724 last->op_madprop = 0;
2727 S_op_destroy(aTHX_ (OP*)last);
2733 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2741 if (last->op_type == (unsigned)type) {
2742 if (type == OP_LIST) { /* already a PUSHMARK there */
2743 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2744 ((LISTOP*)last)->op_first->op_sibling = first;
2745 if (!(first->op_flags & OPf_PARENS))
2746 last->op_flags &= ~OPf_PARENS;
2749 if (!(last->op_flags & OPf_KIDS)) {
2750 ((LISTOP*)last)->op_last = first;
2751 last->op_flags |= OPf_KIDS;
2753 first->op_sibling = ((LISTOP*)last)->op_first;
2754 ((LISTOP*)last)->op_first = first;
2756 last->op_flags |= OPf_KIDS;
2760 return newLISTOP(type, 0, first, last);
2768 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2771 Newxz(tk, 1, TOKEN);
2772 tk->tk_type = (OPCODE)optype;
2773 tk->tk_type = 12345;
2775 tk->tk_mad = madprop;
2780 Perl_token_free(pTHX_ TOKEN* tk)
2782 PERL_ARGS_ASSERT_TOKEN_FREE;
2784 if (tk->tk_type != 12345)
2786 mad_free(tk->tk_mad);
2791 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2796 PERL_ARGS_ASSERT_TOKEN_GETMAD;
2798 if (tk->tk_type != 12345) {
2799 Perl_warner(aTHX_ packWARN(WARN_MISC),
2800 "Invalid TOKEN object ignored");
2807 /* faked up qw list? */
2809 tm->mad_type == MAD_SV &&
2810 SvPVX((SV *)tm->mad_val)[0] == 'q')
2817 /* pretend constant fold didn't happen? */
2818 if (mp->mad_key == 'f' &&
2819 (o->op_type == OP_CONST ||
2820 o->op_type == OP_GV) )
2822 token_getmad(tk,(OP*)mp->mad_val,slot);
2836 if (mp->mad_key == 'X')
2837 mp->mad_key = slot; /* just change the first one */
2847 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2856 /* pretend constant fold didn't happen? */
2857 if (mp->mad_key == 'f' &&
2858 (o->op_type == OP_CONST ||
2859 o->op_type == OP_GV) )
2861 op_getmad(from,(OP*)mp->mad_val,slot);
2868 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2871 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2877 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2886 /* pretend constant fold didn't happen? */
2887 if (mp->mad_key == 'f' &&
2888 (o->op_type == OP_CONST ||
2889 o->op_type == OP_GV) )
2891 op_getmad(from,(OP*)mp->mad_val,slot);
2898 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2901 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2905 PerlIO_printf(PerlIO_stderr(),
2906 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2912 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2930 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2934 addmad(tm, &(o->op_madprop), slot);
2938 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2959 Perl_newMADsv(pTHX_ char key, SV* sv)
2961 PERL_ARGS_ASSERT_NEWMADSV;
2963 return newMADPROP(key, MAD_SV, sv, 0);
2967 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
2970 Newxz(mp, 1, MADPROP);
2973 mp->mad_vlen = vlen;
2974 mp->mad_type = type;
2976 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2981 Perl_mad_free(pTHX_ MADPROP* mp)
2983 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2987 mad_free(mp->mad_next);
2988 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
2989 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2990 switch (mp->mad_type) {
2994 Safefree((char*)mp->mad_val);
2997 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2998 op_free((OP*)mp->mad_val);
3001 sv_free(MUTABLE_SV(mp->mad_val));
3004 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3013 Perl_newNULLLIST(pTHX)
3015 return newOP(OP_STUB, 0);
3019 S_force_list(pTHX_ OP *o)
3021 if (!o || o->op_type != OP_LIST)
3022 o = newLISTOP(OP_LIST, 0, o, NULL);
3028 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3033 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3035 NewOp(1101, listop, 1, LISTOP);
3037 listop->op_type = (OPCODE)type;
3038 listop->op_ppaddr = PL_ppaddr[type];
3041 listop->op_flags = (U8)flags;
3045 else if (!first && last)
3048 first->op_sibling = last;
3049 listop->op_first = first;
3050 listop->op_last = last;
3051 if (type == OP_LIST) {
3052 OP* const pushop = newOP(OP_PUSHMARK, 0);
3053 pushop->op_sibling = first;
3054 listop->op_first = pushop;
3055 listop->op_flags |= OPf_KIDS;
3057 listop->op_last = pushop;
3060 return CHECKOP(type, listop);
3064 Perl_newOP(pTHX_ I32 type, I32 flags)
3069 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3070 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3071 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3072 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3074 NewOp(1101, o, 1, OP);
3075 o->op_type = (OPCODE)type;
3076 o->op_ppaddr = PL_ppaddr[type];
3077 o->op_flags = (U8)flags;
3079 o->op_latefreed = 0;
3083 o->op_private = (U8)(0 | (flags >> 8));
3084 if (PL_opargs[type] & OA_RETSCALAR)
3086 if (PL_opargs[type] & OA_TARGET)
3087 o->op_targ = pad_alloc(type, SVs_PADTMP);
3088 return CHECKOP(type, o);
3092 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3097 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3098 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3099 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3100 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3101 || type == OP_SASSIGN
3102 || type == OP_ENTERTRY
3103 || type == OP_NULL );
3106 first = newOP(OP_STUB, 0);
3107 if (PL_opargs[type] & OA_MARK)
3108 first = force_list(first);
3110 NewOp(1101, unop, 1, UNOP);
3111 unop->op_type = (OPCODE)type;
3112 unop->op_ppaddr = PL_ppaddr[type];
3113 unop->op_first = first;
3114 unop->op_flags = (U8)(flags | OPf_KIDS);
3115 unop->op_private = (U8)(1 | (flags >> 8));
3116 unop = (UNOP*) CHECKOP(type, unop);
3120 return fold_constants((OP *) unop);
3124 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3129 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3130 || type == OP_SASSIGN || type == OP_NULL );
3132 NewOp(1101, binop, 1, BINOP);
3135 first = newOP(OP_NULL, 0);
3137 binop->op_type = (OPCODE)type;
3138 binop->op_ppaddr = PL_ppaddr[type];
3139 binop->op_first = first;
3140 binop->op_flags = (U8)(flags | OPf_KIDS);
3143 binop->op_private = (U8)(1 | (flags >> 8));
3146 binop->op_private = (U8)(2 | (flags >> 8));
3147 first->op_sibling = last;
3150 binop = (BINOP*)CHECKOP(type, binop);
3151 if (binop->op_next || binop->op_type != (OPCODE)type)
3154 binop->op_last = binop->op_first->op_sibling;
3156 return fold_constants((OP *)binop);
3159 static int uvcompare(const void *a, const void *b)
3160 __attribute__nonnull__(1)
3161 __attribute__nonnull__(2)
3162 __attribute__pure__;
3163 static int uvcompare(const void *a, const void *b)
3165 if (*((const UV *)a) < (*(const UV *)b))
3167 if (*((const UV *)a) > (*(const UV *)b))
3169 if (*((const UV *)a+1) < (*(const UV *)b+1))
3171 if (*((const UV *)a+1) > (*(const UV *)b+1))
3177 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3180 SV * const tstr = ((SVOP*)expr)->op_sv;
3183 (repl->op_type == OP_NULL)
3184 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3186 ((SVOP*)repl)->op_sv;
3189 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3190 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3194 register short *tbl;
3196 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3197 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3198 I32 del = o->op_private & OPpTRANS_DELETE;
3201 PERL_ARGS_ASSERT_PMTRANS;
3203 PL_hints |= HINT_BLOCK_SCOPE;
3206 o->op_private |= OPpTRANS_FROM_UTF;
3209 o->op_private |= OPpTRANS_TO_UTF;
3211 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3212 SV* const listsv = newSVpvs("# comment\n");
3214 const U8* tend = t + tlen;
3215 const U8* rend = r + rlen;
3229 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3230 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3233 const U32 flags = UTF8_ALLOW_DEFAULT;
3237 t = tsave = bytes_to_utf8(t, &len);
3240 if (!to_utf && rlen) {
3242 r = rsave = bytes_to_utf8(r, &len);
3246 /* There are several snags with this code on EBCDIC:
3247 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3248 2. scan_const() in toke.c has encoded chars in native encoding which makes
3249 ranges at least in EBCDIC 0..255 range the bottom odd.
3253 U8 tmpbuf[UTF8_MAXBYTES+1];
3256 Newx(cp, 2*tlen, UV);
3258 transv = newSVpvs("");
3260 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3262 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3264 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3268 cp[2*i+1] = cp[2*i];
3272 qsort(cp, i, 2*sizeof(UV), uvcompare);
3273 for (j = 0; j < i; j++) {
3275 diff = val - nextmin;
3277 t = uvuni_to_utf8(tmpbuf,nextmin);
3278 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3280 U8 range_mark = UTF_TO_NATIVE(0xff);
3281 t = uvuni_to_utf8(tmpbuf, val - 1);
3282 sv_catpvn(transv, (char *)&range_mark, 1);
3283 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3290 t = uvuni_to_utf8(tmpbuf,nextmin);
3291 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3293 U8 range_mark = UTF_TO_NATIVE(0xff);
3294 sv_catpvn(transv, (char *)&range_mark, 1);
3296 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
3297 UNICODE_ALLOW_SUPER);
3298 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3299 t = (const U8*)SvPVX_const(transv);
3300 tlen = SvCUR(transv);
3304 else if (!rlen && !del) {
3305 r = t; rlen = tlen; rend = tend;
3308 if ((!rlen && !del) || t == r ||
3309 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3311 o->op_private |= OPpTRANS_IDENTICAL;
3315 while (t < tend || tfirst <= tlast) {
3316 /* see if we need more "t" chars */
3317 if (tfirst > tlast) {
3318 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3320 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3322 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3329 /* now see if we need more "r" chars */
3330 if (rfirst > rlast) {
3332 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3334 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3336 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3345 rfirst = rlast = 0xffffffff;
3349 /* now see which range will peter our first, if either. */
3350 tdiff = tlast - tfirst;
3351 rdiff = rlast - rfirst;
3358 if (rfirst == 0xffffffff) {
3359 diff = tdiff; /* oops, pretend rdiff is infinite */
3361 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3362 (long)tfirst, (long)tlast);
3364 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3368 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3369 (long)tfirst, (long)(tfirst + diff),
3372 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3373 (long)tfirst, (long)rfirst);
3375 if (rfirst + diff > max)
3376 max = rfirst + diff;
3378 grows = (tfirst < rfirst &&
3379 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3391 else if (max > 0xff)
3396 PerlMemShared_free(cPVOPo->op_pv);
3397 cPVOPo->op_pv = NULL;
3399 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
3401 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3402 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3403 PAD_SETSV(cPADOPo->op_padix, swash);
3405 SvREADONLY_on(swash);
3407 cSVOPo->op_sv = swash;
3409 SvREFCNT_dec(listsv);
3410 SvREFCNT_dec(transv);
3412 if (!del && havefinal && rlen)
3413 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
3414 newSVuv((UV)final), 0);
3417 o->op_private |= OPpTRANS_GROWS;
3423 op_getmad(expr,o,'e');
3424 op_getmad(repl,o,'r');
3432 tbl = (short*)cPVOPo->op_pv;
3434 Zero(tbl, 256, short);
3435 for (i = 0; i < (I32)tlen; i++)
3437 for (i = 0, j = 0; i < 256; i++) {
3439 if (j >= (I32)rlen) {
3448 if (i < 128 && r[j] >= 128)
3458 o->op_private |= OPpTRANS_IDENTICAL;
3460 else if (j >= (I32)rlen)
3465 PerlMemShared_realloc(tbl,
3466 (0x101+rlen-j) * sizeof(short));
3467 cPVOPo->op_pv = (char*)tbl;
3469 tbl[0x100] = (short)(rlen - j);
3470 for (i=0; i < (I32)rlen - j; i++)
3471 tbl[0x101+i] = r[j+i];
3475 if (!rlen && !del) {
3478 o->op_private |= OPpTRANS_IDENTICAL;
3480 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3481 o->op_private |= OPpTRANS_IDENTICAL;
3483 for (i = 0; i < 256; i++)
3485 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3486 if (j >= (I32)rlen) {
3488 if (tbl[t[i]] == -1)
3494 if (tbl[t[i]] == -1) {
3495 if (t[i] < 128 && r[j] >= 128)
3502 if(del && rlen == tlen) {
3503 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
3504 } else if(rlen > tlen) {
3505 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
3509 o->op_private |= OPpTRANS_GROWS;
3511 op_getmad(expr,o,'e');
3512 op_getmad(repl,o,'r');
3522 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3527 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
3529 NewOp(1101, pmop, 1, PMOP);
3530 pmop->op_type = (OPCODE)type;
3531 pmop->op_ppaddr = PL_ppaddr[type];
3532 pmop->op_flags = (U8)flags;
3533 pmop->op_private = (U8)(0 | (flags >> 8));
3535 if (PL_hints & HINT_RE_TAINT)
3536 pmop->op_pmflags |= PMf_RETAINT;
3537 if (PL_hints & HINT_LOCALE)
3538 pmop->op_pmflags |= PMf_LOCALE;
3542 assert(SvPOK(PL_regex_pad[0]));
3543 if (SvCUR(PL_regex_pad[0])) {
3544 /* Pop off the "packed" IV from the end. */
3545 SV *const repointer_list = PL_regex_pad[0];
3546 const char *p = SvEND(repointer_list) - sizeof(IV);
3547 const IV offset = *((IV*)p);
3549 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
3551 SvEND_set(repointer_list, p);
3553 pmop->op_pmoffset = offset;
3554 /* This slot should be free, so assert this: */
3555 assert(PL_regex_pad[offset] == &PL_sv_undef);
3557 SV * const repointer = &PL_sv_undef;
3558 av_push(PL_regex_padav, repointer);
3559 pmop->op_pmoffset = av_len(PL_regex_padav);
3560 PL_regex_pad = AvARRAY(PL_regex_padav);
3564 return CHECKOP(type, pmop);
3567 /* Given some sort of match op o, and an expression expr containing a
3568 * pattern, either compile expr into a regex and attach it to o (if it's
3569 * constant), or convert expr into a runtime regcomp op sequence (if it's
3572 * isreg indicates that the pattern is part of a regex construct, eg
3573 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3574 * split "pattern", which aren't. In the former case, expr will be a list
3575 * if the pattern contains more than one term (eg /a$b/) or if it contains
3576 * a replacement, ie s/// or tr///.
3580 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3585 I32 repl_has_vars = 0;
3589 PERL_ARGS_ASSERT_PMRUNTIME;
3591 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3592 /* last element in list is the replacement; pop it */
3594 repl = cLISTOPx(expr)->op_last;
3595 kid = cLISTOPx(expr)->op_first;
3596 while (kid->op_sibling != repl)
3597 kid = kid->op_sibling;
3598 kid->op_sibling = NULL;
3599 cLISTOPx(expr)->op_last = kid;
3602 if (isreg && expr->op_type == OP_LIST &&
3603 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3605 /* convert single element list to element */
3606 OP* const oe = expr;
3607 expr = cLISTOPx(oe)->op_first->op_sibling;
3608 cLISTOPx(oe)->op_first->op_sibling = NULL;
3609 cLISTOPx(oe)->op_last = NULL;
3613 if (o->op_type == OP_TRANS) {
3614 return pmtrans(o, expr, repl);
3617 reglist = isreg && expr->op_type == OP_LIST;
3621 PL_hints |= HINT_BLOCK_SCOPE;
3624 if (expr->op_type == OP_CONST) {
3625 SV *pat = ((SVOP*)expr)->op_sv;
3626 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
3628 if (o->op_flags & OPf_SPECIAL)
3629 pm_flags |= RXf_SPLIT;
3632 assert (SvUTF8(pat));
3633 } else if (SvUTF8(pat)) {
3634 /* Not doing UTF-8, despite what the SV says. Is this only if we're
3635 trapped in use 'bytes'? */
3636 /* Make a copy of the octet sequence, but without the flag on, as
3637 the compiler now honours the SvUTF8 flag on pat. */
3639 const char *const p = SvPV(pat, len);
3640 pat = newSVpvn_flags(p, len, SVs_TEMP);
3643 PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
3646 op_getmad(expr,(OP*)pm,'e');
3652 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3653 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3655 : OP_REGCMAYBE),0,expr);
3657 NewOp(1101, rcop, 1, LOGOP);
3658 rcop->op_type = OP_REGCOMP;
3659 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3660 rcop->op_first = scalar(expr);
3661 rcop->op_flags |= OPf_KIDS
3662 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3663 | (reglist ? OPf_STACKED : 0);
3664 rcop->op_private = 1;
3667 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3669 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3672 /* establish postfix order */
3673 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3675 rcop->op_next = expr;
3676 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3679 rcop->op_next = LINKLIST(expr);
3680 expr->op_next = (OP*)rcop;
3683 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3688 if (pm->op_pmflags & PMf_EVAL) {
3690 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
3691 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
3693 else if (repl->op_type == OP_CONST)
3697 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3698 if (curop->op_type == OP_SCOPE
3699 || curop->op_type == OP_LEAVE
3700 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3701 if (curop->op_type == OP_GV) {
3702 GV * const gv = cGVOPx_gv(curop);
3704 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3707 else if (curop->op_type == OP_RV2CV)
3709 else if (curop->op_type == OP_RV2SV ||
3710 curop->op_type == OP_RV2AV ||
3711 curop->op_type == OP_RV2HV ||
3712 curop->op_type == OP_RV2GV) {
3713 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3716 else if (curop->op_type == OP_PADSV ||
3717 curop->op_type == OP_PADAV ||
3718 curop->op_type == OP_PADHV ||
3719 curop->op_type == OP_PADANY)
3723 else if (curop->op_type == OP_PUSHRE)
3724 NOOP; /* Okay here, dangerous in newASSIGNOP */
3734 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
3736 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3737 prepend_elem(o->op_type, scalar(repl), o);
3740 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3741 pm->op_pmflags |= PMf_MAYBE_CONST;
3743 NewOp(1101, rcop, 1, LOGOP);
3744 rcop->op_type = OP_SUBSTCONT;
3745 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3746 rcop->op_first = scalar(repl);
3747 rcop->op_flags |= OPf_KIDS;
3748 rcop->op_private = 1;
3751 /* establish postfix order */
3752 rcop->op_next = LINKLIST(repl);
3753 repl->op_next = (OP*)rcop;
3755 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
3756 assert(!(pm->op_pmflags & PMf_ONCE));
3757 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
3766 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3771 PERL_ARGS_ASSERT_NEWSVOP;
3773 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
3774 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3775 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
3777 NewOp(1101, svop, 1, SVOP);
3778 svop->op_type = (OPCODE)type;
3779 svop->op_ppaddr = PL_ppaddr[type];
3781 svop->op_next = (OP*)svop;
3782 svop->op_flags = (U8)flags;
3783 if (PL_opargs[type] & OA_RETSCALAR)
3785 if (PL_opargs[type] & OA_TARGET)
3786 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3787 return CHECKOP(type, svop);
3792 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3797 PERL_ARGS_ASSERT_NEWPADOP;
3799 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
3800 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3801 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
3803 NewOp(1101, padop, 1, PADOP);
3804 padop->op_type = (OPCODE)type;
3805 padop->op_ppaddr = PL_ppaddr[type];
3806 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3807 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3808 PAD_SETSV(padop->op_padix, sv);
3811 padop->op_next = (OP*)padop;
3812 padop->op_flags = (U8)flags;
3813 if (PL_opargs[type] & OA_RETSCALAR)
3815 if (PL_opargs[type] & OA_TARGET)
3816 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3817 return CHECKOP(type, padop);
3822 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3826 PERL_ARGS_ASSERT_NEWGVOP;
3830 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3832 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3837 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3842 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3843 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3845 NewOp(1101, pvop, 1, PVOP);
3846 pvop->op_type = (OPCODE)type;
3847 pvop->op_ppaddr = PL_ppaddr[type];
3849 pvop->op_next = (OP*)pvop;
3850 pvop->op_flags = (U8)flags;
3851 if (PL_opargs[type] & OA_RETSCALAR)
3853 if (PL_opargs[type] & OA_TARGET)
3854 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3855 return CHECKOP(type, pvop);
3863 Perl_package(pTHX_ OP *o)
3866 SV *const sv = cSVOPo->op_sv;
3871 PERL_ARGS_ASSERT_PACKAGE;
3873 save_hptr(&PL_curstash);
3874 save_item(PL_curstname);
3876 PL_curstash = gv_stashsv(sv, GV_ADD);
3878 sv_setsv(PL_curstname, sv);
3880 PL_hints |= HINT_BLOCK_SCOPE;
3881 PL_parser->copline = NOLINE;
3882 PL_parser->expect = XSTATE;
3887 if (!PL_madskills) {
3892 pegop = newOP(OP_NULL,0);
3893 op_getmad(o,pegop,'P');
3899 Perl_package_version( pTHX_ OP *v )
3902 U32 savehints = PL_hints;
3903 PERL_ARGS_ASSERT_PACKAGE_VERSION;
3904 PL_hints &= ~HINT_STRICT_VARS;
3905 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
3906 PL_hints = savehints;
3915 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3922 OP *pegop = newOP(OP_NULL,0);
3925 PERL_ARGS_ASSERT_UTILIZE;
3927 if (idop->op_type != OP_CONST)
3928 Perl_croak(aTHX_ "Module name must be constant");
3931 op_getmad(idop,pegop,'U');
3936 SV * const vesv = ((SVOP*)version)->op_sv;
3939 op_getmad(version,pegop,'V');
3940 if (!arg && !SvNIOKp(vesv)) {
3947 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3948 Perl_croak(aTHX_ "Version number must be a constant number");
3950 /* Make copy of idop so we don't free it twice */
3951 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3953 /* Fake up a method call to VERSION */
3954 meth = newSVpvs_share("VERSION");
3955 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3956 append_elem(OP_LIST,
3957 prepend_elem(OP_LIST, pack, list(version)),
3958 newSVOP(OP_METHOD_NAMED, 0, meth)));
3962 /* Fake up an import/unimport */
3963 if (arg && arg->op_type == OP_STUB) {
3965 op_getmad(arg,pegop,'S');
3966 imop = arg; /* no import on explicit () */
3968 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3969 imop = NULL; /* use 5.0; */
3971 idop->op_private |= OPpCONST_NOVER;
3977 op_getmad(arg,pegop,'A');
3979 /* Make copy of idop so we don't free it twice */
3980 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3982 /* Fake up a method call to import/unimport */
3984 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3985 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3986 append_elem(OP_LIST,
3987 prepend_elem(OP_LIST, pack, list(arg)),
3988 newSVOP(OP_METHOD_NAMED, 0, meth)));
3991 /* Fake up the BEGIN {}, which does its thing immediately. */
3993 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3996 append_elem(OP_LINESEQ,
3997 append_elem(OP_LINESEQ,
3998 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3999 newSTATEOP(0, NULL, veop)),
4000 newSTATEOP(0, NULL, imop) ));
4002 /* The "did you use incorrect case?" warning used to be here.
4003 * The problem is that on case-insensitive filesystems one
4004 * might get false positives for "use" (and "require"):
4005 * "use Strict" or "require CARP" will work. This causes
4006 * portability problems for the script: in case-strict
4007 * filesystems the script will stop working.
4009 * The "incorrect case" warning checked whether "use Foo"
4010 * imported "Foo" to your namespace, but that is wrong, too:
4011 * there is no requirement nor promise in the language that
4012 * a Foo.pm should or would contain anything in package "Foo".
4014 * There is very little Configure-wise that can be done, either:
4015 * the case-sensitivity of the build filesystem of Perl does not
4016 * help in guessing the case-sensitivity of the runtime environment.
4019 PL_hints |= HINT_BLOCK_SCOPE;
4020 PL_parser->copline = NOLINE;
4021 PL_parser->expect = XSTATE;
4022 PL_cop_seqmax++; /* Purely for B::*'s benefit */
4025 if (!PL_madskills) {
4026 /* FIXME - don't allocate pegop if !PL_madskills */
4035 =head1 Embedding Functions
4037 =for apidoc load_module
4039 Loads the module whose name is pointed to by the string part of name.
4040 Note that the actual module name, not its filename, should be given.
4041 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
4042 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
4043 (or 0 for no flags). ver, if specified, provides version semantics
4044 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
4045 arguments can be used to specify arguments to the module's import()
4046 method, similar to C<use Foo::Bar VERSION LIST>. They must be
4047 terminated with a final NULL pointer. Note that this list can only
4048 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
4049 Otherwise at least a single NULL pointer to designate the default
4050 import list is required.
4055 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
4059 PERL_ARGS_ASSERT_LOAD_MODULE;
4061 va_start(args, ver);
4062 vload_module(flags, name, ver, &args);
4066 #ifdef PERL_IMPLICIT_CONTEXT
4068 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
4072 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
4073 va_start(args, ver);
4074 vload_module(flags, name, ver, &args);
4080 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
4084 OP * const modname = newSVOP(OP_CONST, 0, name);
4086 PERL_ARGS_ASSERT_VLOAD_MODULE;
4088 modname->op_private |= OPpCONST_BARE;
4090 veop = newSVOP(OP_CONST, 0, ver);
4094 if (flags & PERL_LOADMOD_NOIMPORT) {
4095 imop = sawparens(newNULLLIST());
4097 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
4098 imop = va_arg(*args, OP*);
4103 sv = va_arg(*args, SV*);
4105 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
4106 sv = va_arg(*args, SV*);
4110 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
4111 * that it has a PL_parser to play with while doing that, and also
4112 * that it doesn't mess with any existing parser, by creating a tmp
4113 * new parser with lex_start(). This won't actually be used for much,
4114 * since pp_require() will create another parser for the real work. */
4117 SAVEVPTR(PL_curcop);
4118 lex_start(NULL, NULL, FALSE);
4119 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
4120 veop, modname, imop);
4125 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
4131 PERL_ARGS_ASSERT_DOFILE;
4133 if (!force_builtin) {
4134 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
4135 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
4136 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
4137 gv = gvp ? *gvp : NULL;
4141 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
4142 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
4143 append_elem(OP_LIST, term,
4144 scalar(newUNOP(OP_RV2CV, 0,
4145 newGVOP(OP_GV, 0, gv))))));
4148 doop = newUNOP(OP_DOFILE, 0, scalar(term));
4154 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
4156 return newBINOP(OP_LSLICE, flags,
4157 list(force_list(subscript)),
4158 list(force_list(listval)) );
4162 S_is_list_assignment(pTHX_ register const OP *o)
4170 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
4171 o = cUNOPo->op_first;
4173 flags = o->op_flags;
4175 if (type == OP_COND_EXPR) {
4176 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
4177 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
4182 yyerror("Assignment to both a list and a scalar");
4186 if (type == OP_LIST &&
4187 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
4188 o->op_private & OPpLVAL_INTRO)
4191 if (type == OP_LIST || flags & OPf_PARENS ||
4192 type == OP_RV2AV || type == OP_RV2HV ||
4193 type == OP_ASLICE || type == OP_HSLICE)
4196 if (type == OP_PADAV || type == OP_PADHV)
4199 if (type == OP_RV2SV)
4206 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
4212 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
4213 return newLOGOP(optype, 0,
4214 mod(scalar(left), optype),
4215 newUNOP(OP_SASSIGN, 0, scalar(right)));
4218 return newBINOP(optype, OPf_STACKED,
4219 mod(scalar(left), optype), scalar(right));
4223 if (is_list_assignment(left)) {
4224 static const char no_list_state[] = "Initialization of state variables"
4225 " in list context currently forbidden";
4227 bool maybe_common_vars = TRUE;
4230 /* Grandfathering $[ assignment here. Bletch.*/
4231 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
4232 PL_eval_start = (left->op_type == OP_CONST) ? right : NULL;
4233 left = mod(left, OP_AASSIGN);
4236 else if (left->op_type == OP_CONST) {
4238 /* Result of assignment is always 1 (or we'd be dead already) */
4239 return newSVOP(OP_CONST, 0, newSViv(1));
4241 curop = list(force_list(left));
4242 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
4243 o->op_private = (U8)(0 | (flags >> 8));
4245 if ((left->op_type == OP_LIST
4246 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
4248 OP* lop = ((LISTOP*)left)->op_first;
4249 maybe_common_vars = FALSE;
4251 if (lop->op_type == OP_PADSV ||
4252 lop->op_type == OP_PADAV ||
4253 lop->op_type == OP_PADHV ||
4254 lop->op_type == OP_PADANY) {
4255 if (!(lop->op_private & OPpLVAL_INTRO))
4256 maybe_common_vars = TRUE;
4258 if (lop->op_private & OPpPAD_STATE) {
4259 if (left->op_private & OPpLVAL_INTRO) {
4260 /* Each variable in state($a, $b, $c) = ... */
4263 /* Each state variable in
4264 (state $a, my $b, our $c, $d, undef) = ... */
4266 yyerror(no_list_state);
4268 /* Each my variable in
4269 (state $a, my $b, our $c, $d, undef) = ... */
4271 } else if (lop->op_type == OP_UNDEF ||
4272 lop->op_type == OP_PUSHMARK) {
4273 /* undef may be interesting in
4274 (state $a, undef, state $c) */
4276 /* Other ops in the list. */
4277 maybe_common_vars = TRUE;
4279 lop = lop->op_sibling;
4282 else if ((left->op_private & OPpLVAL_INTRO)
4283 && ( left->op_type == OP_PADSV
4284 || left->op_type == OP_PADAV
4285 || left->op_type == OP_PADHV
4286 || left->op_type == OP_PADANY))
4288 if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
4289 if (left->op_private & OPpPAD_STATE) {
4290 /* All single variable list context state assignments, hence
4300 yyerror(no_list_state);
4304 /* PL_generation sorcery:
4305 * an assignment like ($a,$b) = ($c,$d) is easier than
4306 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
4307 * To detect whether there are common vars, the global var
4308 * PL_generation is incremented for each assign op we compile.
4309 * Then, while compiling the assign op, we run through all the
4310 * variables on both sides of the assignment, setting a spare slot
4311 * in each of them to PL_generation. If any of them already have
4312 * that value, we know we've got commonality. We could use a
4313 * single bit marker, but then we'd have to make 2 passes, first
4314 * to clear the flag, then to test and set it. To find somewhere
4315 * to store these values, evil chicanery is done with SvUVX().
4318 if (maybe_common_vars) {
4321 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4322 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4323 if (curop->op_type == OP_GV) {
4324 GV *gv = cGVOPx_gv(curop);
4326 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4328 GvASSIGN_GENERATION_set(gv, PL_generation);
4330 else if (curop->op_type == OP_PADSV ||
4331 curop->op_type == OP_PADAV ||
4332 curop->op_type == OP_PADHV ||
4333 curop->op_type == OP_PADANY)
4335 if (PAD_COMPNAME_GEN(curop->op_targ)
4336 == (STRLEN)PL_generation)
4338 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4341 else if (curop->op_type == OP_RV2CV)
4343 else if (curop->op_type == OP_RV2SV ||
4344 curop->op_type == OP_RV2AV ||
4345 curop->op_type == OP_RV2HV ||
4346 curop->op_type == OP_RV2GV) {
4347 if (lastop->op_type != OP_GV) /* funny deref? */
4350 else if (curop->op_type == OP_PUSHRE) {
4352 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4353 GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
4355 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4357 GvASSIGN_GENERATION_set(gv, PL_generation);
4361 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4364 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4366 GvASSIGN_GENERATION_set(gv, PL_generation);
4376 o->op_private |= OPpASSIGN_COMMON;
4379 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
4380 OP* tmpop = ((LISTOP*)right)->op_first;
4381 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4382 PMOP * const pm = (PMOP*)tmpop;
4383 if (left->op_type == OP_RV2AV &&
4384 !(left->op_private & OPpLVAL_INTRO) &&
4385 !(o->op_private & OPpASSIGN_COMMON) )
4387 tmpop = ((UNOP*)left)->op_first;
4388 if (tmpop->op_type == OP_GV
4390 && !pm->op_pmreplrootu.op_pmtargetoff
4392 && !pm->op_pmreplrootu.op_pmtargetgv
4396 pm->op_pmreplrootu.op_pmtargetoff
4397 = cPADOPx(tmpop)->op_padix;
4398 cPADOPx(tmpop)->op_padix = 0; /* steal it */
4400 pm->op_pmreplrootu.op_pmtargetgv
4401 = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
4402 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
4404 pm->op_pmflags |= PMf_ONCE;
4405 tmpop = cUNOPo->op_first; /* to list (nulled) */
4406 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4407 tmpop->op_sibling = NULL; /* don't free split */
4408 right->op_next = tmpop->op_next; /* fix starting loc */
4409 op_free(o); /* blow off assign */
4410 right->op_flags &= ~OPf_WANT;
4411 /* "I don't know and I don't care." */
4416 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4417 ((LISTOP*)right)->op_last->op_type == OP_CONST)
4419 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4420 if (SvIOK(sv) && SvIVX(sv) == 0)
4421 sv_setiv(sv, PL_modcount+1);
4429 right = newOP(OP_UNDEF, 0);
4430 if (right->op_type == OP_READLINE) {
4431 right->op_flags |= OPf_STACKED;
4432 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
4435 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
4436 o = newBINOP(OP_SASSIGN, flags,
4437 scalar(right), mod(scalar(left), OP_SASSIGN) );
4441 if (!PL_madskills) { /* assignment to $[ is ignored when making a mad dump */
4442 deprecate("assignment to $[");
4444 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4445 o->op_private |= OPpCONST_ARYBASE;
4453 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4456 const U32 seq = intro_my();
4459 NewOp(1101, cop, 1, COP);
4460 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4461 cop->op_type = OP_DBSTATE;
4462 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4465 cop->op_type = OP_NEXTSTATE;
4466 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4468 cop->op_flags = (U8)flags;
4469 CopHINTS_set(cop, PL_hints);
4471 cop->op_private |= NATIVE_HINTS;
4473 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4474 cop->op_next = (OP*)cop;
4477 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4478 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4480 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4481 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4482 if (cop->cop_hints_hash) {
4484 cop->cop_hints_hash->refcounted_he_refcnt++;
4485 HINTS_REFCNT_UNLOCK;
4489 = Perl_store_cop_label(aTHX_ cop->cop_hints_hash, label);
4491 PL_hints |= HINT_BLOCK_SCOPE;
4492 /* It seems that we need to defer freeing this pointer, as other parts
4493 of the grammar end up wanting to copy it after this op has been
4498 if (PL_parser && PL_parser->copline == NOLINE)
4499 CopLINE_set(cop, CopLINE(PL_curcop));
4501 CopLINE_set(cop, PL_parser->copline);
4503 PL_parser->copline = NOLINE;
4506 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4508 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4510 CopSTASH_set(cop, PL_curstash);
4512 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash) {
4513 /* this line can have a breakpoint - store the cop in IV */
4514 AV *av = CopFILEAVx(PL_curcop);
4516 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4517 if (svp && *svp != &PL_sv_undef ) {
4518 (void)SvIOK_on(*svp);
4519 SvIV_set(*svp, PTR2IV(cop));
4524 if (flags & OPf_SPECIAL)
4526 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4531 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4535 PERL_ARGS_ASSERT_NEWLOGOP;
4537 return new_logop(type, flags, &first, &other);
4541 S_search_const(pTHX_ OP *o)
4543 PERL_ARGS_ASSERT_SEARCH_CONST;
4545 switch (o->op_type) {
4549 if (o->op_flags & OPf_KIDS)
4550 return search_const(cUNOPo->op_first);
4557 if (!(o->op_flags & OPf_KIDS))
4559 kid = cLISTOPo->op_first;
4561 switch (kid->op_type) {
4565 kid = kid->op_sibling;
4568 if (kid != cLISTOPo->op_last)
4574 kid = cLISTOPo->op_last;
4576 return search_const(kid);
4584 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4592 int prepend_not = 0;
4594 PERL_ARGS_ASSERT_NEW_LOGOP;
4599 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4600 return newBINOP(type, flags, scalar(first), scalar(other));
4602 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
4604 scalarboolean(first);
4605 /* optimize AND and OR ops that have NOTs as children */
4606 if (first->op_type == OP_NOT
4607 && (first->op_flags & OPf_KIDS)
4608 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
4609 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
4611 if (type == OP_AND || type == OP_OR) {
4617 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
4619 prepend_not = 1; /* prepend a NOT op later */
4623 /* search for a constant op that could let us fold the test */
4624 if ((cstop = search_const(first))) {
4625 if (cstop->op_private & OPpCONST_STRICT)
4626 no_bareword_allowed(cstop);
4627 else if ((cstop->op_private & OPpCONST_BARE))
4628 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4629 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
4630 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
4631 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
4633 if (other->op_type == OP_CONST)
4634 other->op_private |= OPpCONST_SHORTCIRCUIT;
4636 OP *newop = newUNOP(OP_NULL, 0, other);
4637 op_getmad(first, newop, '1');
4638 newop->op_targ = type; /* set "was" field */
4642 if (other->op_type == OP_LEAVE)
4643 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
4647 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4648 const OP *o2 = other;
4649 if ( ! (o2->op_type == OP_LIST
4650 && (( o2 = cUNOPx(o2)->op_first))
4651 && o2->op_type == OP_PUSHMARK
4652 && (( o2 = o2->op_sibling)) )
4655 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4656 || o2->op_type == OP_PADHV)
4657 && o2->op_private & OPpLVAL_INTRO
4658 && !(o2->op_private & OPpPAD_STATE))
4660 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
4661 "Deprecated use of my() in false conditional");
4665 if (first->op_type == OP_CONST)
4666 first->op_private |= OPpCONST_SHORTCIRCUIT;
4668 first = newUNOP(OP_NULL, 0, first);
4669 op_getmad(other, first, '2');
4670 first->op_targ = type; /* set "was" field */
4677 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4678 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4680 const OP * const k1 = ((UNOP*)first)->op_first;
4681 const OP * const k2 = k1->op_sibling;
4683 switch (first->op_type)
4686 if (k2 && k2->op_type == OP_READLINE
4687 && (k2->op_flags & OPf_STACKED)
4688 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4690 warnop = k2->op_type;
4695 if (k1->op_type == OP_READDIR
4696 || k1->op_type == OP_GLOB
4697 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4698 || k1->op_type == OP_EACH)
4700 warnop = ((k1->op_type == OP_NULL)
4701 ? (OPCODE)k1->op_targ : k1->op_type);
4706 const line_t oldline = CopLINE(PL_curcop);
4707 CopLINE_set(PL_curcop, PL_parser->copline);
4708 Perl_warner(aTHX_ packWARN(WARN_MISC),
4709 "Value of %s%s can be \"0\"; test with defined()",
4711 ((warnop == OP_READLINE || warnop == OP_GLOB)
4712 ? " construct" : "() operator"));
4713 CopLINE_set(PL_curcop, oldline);
4720 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4721 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4723 NewOp(1101, logop, 1, LOGOP);
4725 logop->op_type = (OPCODE)type;
4726 logop->op_ppaddr = PL_ppaddr[type];
4727 logop->op_first = first;
4728 logop->op_flags = (U8)(flags | OPf_KIDS);
4729 logop->op_other = LINKLIST(other);
4730 logop->op_private = (U8)(1 | (flags >> 8));
4732 /* establish postfix order */
4733 logop->op_next = LINKLIST(first);
4734 first->op_next = (OP*)logop;
4735 first->op_sibling = other;
4737 CHECKOP(type,logop);
4739 o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
4746 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4754 PERL_ARGS_ASSERT_NEWCONDOP;
4757 return newLOGOP(OP_AND, 0, first, trueop);
4759 return newLOGOP(OP_OR, 0, first, falseop);
4761 scalarboolean(first);
4762 if ((cstop = search_const(first))) {
4763 /* Left or right arm of the conditional? */
4764 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
4765 OP *live = left ? trueop : falseop;
4766 OP *const dead = left ? falseop : trueop;
4767 if (cstop->op_private & OPpCONST_BARE &&
4768 cstop->op_private & OPpCONST_STRICT) {
4769 no_bareword_allowed(cstop);
4772 /* This is all dead code when PERL_MAD is not defined. */
4773 live = newUNOP(OP_NULL, 0, live);
4774 op_getmad(first, live, 'C');
4775 op_getmad(dead, live, left ? 'e' : 't');
4780 if (live->op_type == OP_LEAVE)
4781 live = newUNOP(OP_NULL, OPf_SPECIAL, live);
4784 NewOp(1101, logop, 1, LOGOP);
4785 logop->op_type = OP_COND_EXPR;
4786 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4787 logop->op_first = first;
4788 logop->op_flags = (U8)(flags | OPf_KIDS);
4789 logop->op_private = (U8)(1 | (flags >> 8));
4790 logop->op_other = LINKLIST(trueop);
4791 logop->op_next = LINKLIST(falseop);
4793 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4796 /* establish postfix order */
4797 start = LINKLIST(first);
4798 first->op_next = (OP*)logop;
4800 first->op_sibling = trueop;
4801 trueop->op_sibling = falseop;
4802 o = newUNOP(OP_NULL, 0, (OP*)logop);
4804 trueop->op_next = falseop->op_next = o;
4811 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4820 PERL_ARGS_ASSERT_NEWRANGE;
4822 NewOp(1101, range, 1, LOGOP);
4824 range->op_type = OP_RANGE;
4825 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4826 range->op_first = left;
4827 range->op_flags = OPf_KIDS;
4828 leftstart = LINKLIST(left);
4829 range->op_other = LINKLIST(right);
4830 range->op_private = (U8)(1 | (flags >> 8));
4832 left->op_sibling = right;
4834 range->op_next = (OP*)range;
4835 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4836 flop = newUNOP(OP_FLOP, 0, flip);
4837 o = newUNOP(OP_NULL, 0, flop);
4839 range->op_next = leftstart;
4841 left->op_next = flip;
4842 right->op_next = flop;
4844 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4845 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4846 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4847 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4849 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4850 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4853 if (!flip->op_private || !flop->op_private)
4854 linklist(o); /* blow off optimizer unless constant */
4860 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4865 const bool once = block && block->op_flags & OPf_SPECIAL &&
4866 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4868 PERL_UNUSED_ARG(debuggable);
4871 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4872 return block; /* do {} while 0 does once */
4873 if (expr->op_type == OP_READLINE
4874 || expr->op_type == OP_READDIR
4875 || expr->op_type == OP_GLOB
4876 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4877 expr = newUNOP(OP_DEFINED, 0,
4878 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4879 } else if (expr->op_flags & OPf_KIDS) {
4880 const OP * const k1 = ((UNOP*)expr)->op_first;
4881 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4882 switch (expr->op_type) {
4884 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
4885 && (k2->op_flags & OPf_STACKED)
4886 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4887 expr = newUNOP(OP_DEFINED, 0, expr);
4891 if (k1 && (k1->op_type == OP_READDIR
4892 || k1->op_type == OP_GLOB
4893 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4894 || k1->op_type == OP_EACH))
4895 expr = newUNOP(OP_DEFINED, 0, expr);
4901 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4902 * op, in listop. This is wrong. [perl #27024] */
4904 block = newOP(OP_NULL, 0);
4905 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4906 o = new_logop(OP_AND, 0, &expr, &listop);
4909 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4911 if (once && o != listop)
4912 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4915 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4917 o->op_flags |= flags;
4919 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4924 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4925 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4934 PERL_UNUSED_ARG(debuggable);
4937 if (expr->op_type == OP_READLINE
4938 || expr->op_type == OP_READDIR
4939 || expr->op_type == OP_GLOB
4940 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4941 expr = newUNOP(OP_DEFINED, 0,
4942 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4943 } else if (expr->op_flags & OPf_KIDS) {
4944 const OP * const k1 = ((UNOP*)expr)->op_first;
4945 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4946 switch (expr->op_type) {
4948 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
4949 && (k2->op_flags & OPf_STACKED)
4950 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4951 expr = newUNOP(OP_DEFINED, 0, expr);
4955 if (k1 && (k1->op_type == OP_READDIR
4956 || k1->op_type == OP_GLOB
4957 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4958 || k1->op_type == OP_EACH))
4959 expr = newUNOP(OP_DEFINED, 0, expr);
4966 block = newOP(OP_NULL, 0);
4967 else if (cont || has_my) {
4968 block = scope(block);
4972 next = LINKLIST(cont);
4975 OP * const unstack = newOP(OP_UNSTACK, 0);
4978 cont = append_elem(OP_LINESEQ, cont, unstack);
4982 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4984 redo = LINKLIST(listop);
4987 PL_parser->copline = (line_t)whileline;
4989 o = new_logop(OP_AND, 0, &expr, &listop);
4990 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4991 op_free(expr); /* oops, it's a while (0) */
4993 return NULL; /* listop already freed by new_logop */
4996 ((LISTOP*)listop)->op_last->op_next =
4997 (o == listop ? redo : LINKLIST(o));
5003 NewOp(1101,loop,1,LOOP);
5004 loop->op_type = OP_ENTERLOOP;
5005 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
5006 loop->op_private = 0;
5007 loop->op_next = (OP*)loop;
5010 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
5012 loop->op_redoop = redo;
5013 loop->op_lastop = o;
5014 o->op_private |= loopflags;
5017 loop->op_nextop = next;
5019 loop->op_nextop = o;
5021 o->op_flags |= flags;
5022 o->op_private |= (flags >> 8);
5027 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
5032 PADOFFSET padoff = 0;
5037 PERL_ARGS_ASSERT_NEWFOROP;
5040 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
5041 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
5042 sv->op_type = OP_RV2GV;
5043 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
5045 /* The op_type check is needed to prevent a possible segfault
5046 * if the loop variable is undeclared and 'strict vars' is in
5047 * effect. This is illegal but is nonetheless parsed, so we
5048 * may reach this point with an OP_CONST where we're expecting
5051 if (cUNOPx(sv)->op_first->op_type == OP_GV
5052 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
5053 iterpflags |= OPpITER_DEF;
5055 else if (sv->op_type == OP_PADSV) { /* private variable */
5056 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
5057 padoff = sv->op_targ;
5067 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
5069 SV *const namesv = PAD_COMPNAME_SV(padoff);
5071 const char *const name = SvPV_const(namesv, len);
5073 if (len == 2 && name[0] == '$' && name[1] == '_')
5074 iterpflags |= OPpITER_DEF;
5078 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
5079 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
5080 sv = newGVOP(OP_GV, 0, PL_defgv);
5085 iterpflags |= OPpITER_DEF;
5087 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
5088 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
5089 iterflags |= OPf_STACKED;
5091 else if (expr->op_type == OP_NULL &&
5092 (expr->op_flags & OPf_KIDS) &&
5093 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
5095 /* Basically turn for($x..$y) into the same as for($x,$y), but we
5096 * set the STACKED flag to indicate that these values are to be
5097 * treated as min/max values by 'pp_iterinit'.
5099 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
5100 LOGOP* const range = (LOGOP*) flip->op_first;
5101 OP* const left = range->op_first;
5102 OP* const right = left->op_sibling;
5105 range->op_flags &= ~OPf_KIDS;
5106 range->op_first = NULL;
5108 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
5109 listop->op_first->op_next = range->op_next;
5110 left->op_next = range->op_other;
5111 right->op_next = (OP*)listop;
5112 listop->op_next = listop->op_first;
5115 op_getmad(expr,(OP*)listop,'O');
5119 expr = (OP*)(listop);
5121 iterflags |= OPf_STACKED;
5124 expr = mod(force_list(expr), OP_GREPSTART);
5127 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
5128 append_elem(OP_LIST, expr, scalar(sv))));
5129 assert(!loop->op_next);
5130 /* for my $x () sets OPpLVAL_INTRO;
5131 * for our $x () sets OPpOUR_INTRO */
5132 loop->op_private = (U8)iterpflags;
5133 #ifdef PL_OP_SLAB_ALLOC
5136 NewOp(1234,tmp,1,LOOP);
5137 Copy(loop,tmp,1,LISTOP);
5138 S_op_destroy(aTHX_ (OP*)loop);
5142 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
5144 loop->op_targ = padoff;
5145 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
5147 op_getmad(madsv, (OP*)loop, 'v');
5148 PL_parser->copline = forline;
5149 return newSTATEOP(0, label, wop);
5153 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
5158 PERL_ARGS_ASSERT_NEWLOOPEX;
5160 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
5162 if (type != OP_GOTO || label->op_type == OP_CONST) {
5163 /* "last()" means "last" */
5164 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
5165 o = newOP(type, OPf_SPECIAL);
5167 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
5168 ? SvPV_nolen_const(((SVOP*)label)->op_sv)
5172 op_getmad(label,o,'L');
5178 /* Check whether it's going to be a goto &function */
5179 if (label->op_type == OP_ENTERSUB
5180 && !(label->op_flags & OPf_STACKED))
5181 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
5182 o = newUNOP(type, OPf_STACKED, label);
5184 PL_hints |= HINT_BLOCK_SCOPE;
5188 /* if the condition is a literal array or hash
5189 (or @{ ... } etc), make a reference to it.
5192 S_ref_array_or_hash(pTHX_ OP *cond)
5195 && (cond->op_type == OP_RV2AV
5196 || cond->op_type == OP_PADAV
5197 || cond->op_type == OP_RV2HV
5198 || cond->op_type == OP_PADHV))
5200 return newUNOP(OP_REFGEN,
5201 0, mod(cond, OP_REFGEN));
5207 /* These construct the optree fragments representing given()
5210 entergiven and enterwhen are LOGOPs; the op_other pointer
5211 points up to the associated leave op. We need this so we
5212 can put it in the context and make break/continue work.
5213 (Also, of course, pp_enterwhen will jump straight to
5214 op_other if the match fails.)
5218 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
5219 I32 enter_opcode, I32 leave_opcode,
5220 PADOFFSET entertarg)
5226 PERL_ARGS_ASSERT_NEWGIVWHENOP;
5228 NewOp(1101, enterop, 1, LOGOP);
5229 enterop->op_type = (Optype)enter_opcode;
5230 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
5231 enterop->op_flags = (U8) OPf_KIDS;
5232 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
5233 enterop->op_private = 0;
5235 o = newUNOP(leave_opcode, 0, (OP *) enterop);
5238 enterop->op_first = scalar(cond);
5239 cond->op_sibling = block;
5241 o->op_next = LINKLIST(cond);
5242 cond->op_next = (OP *) enterop;
5245 /* This is a default {} block */
5246 enterop->op_first = block;
5247 enterop->op_flags |= OPf_SPECIAL;
5249 o->op_next = (OP *) enterop;
5252 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
5253 entergiven and enterwhen both
5256 enterop->op_next = LINKLIST(block);
5257 block->op_next = enterop->op_other = o;
5262 /* Does this look like a boolean operation? For these purposes
5263 a boolean operation is:
5264 - a subroutine call [*]
5265 - a logical connective
5266 - a comparison operator
5267 - a filetest operator, with the exception of -s -M -A -C
5268 - defined(), exists() or eof()
5269 - /$re/ or $foo =~ /$re/
5271 [*] possibly surprising
5274 S_looks_like_bool(pTHX_ const OP *o)
5278 PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
5280 switch(o->op_type) {
5283 return looks_like_bool(cLOGOPo->op_first);
5287 looks_like_bool(cLOGOPo->op_first)
5288 && looks_like_bool(cLOGOPo->op_first->op_sibling));
5293 o->op_flags & OPf_KIDS
5294 && looks_like_bool(cUNOPo->op_first));
5298 case OP_NOT: case OP_XOR:
5300 case OP_EQ: case OP_NE: case OP_LT:
5301 case OP_GT: case OP_LE: case OP_GE:
5303 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
5304 case OP_I_GT: case OP_I_LE: case OP_I_GE:
5306 case OP_SEQ: case OP_SNE: case OP_SLT:
5307 case OP_SGT: case OP_SLE: case OP_SGE:
5311 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
5312 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
5313 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
5314 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
5315 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
5316 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
5317 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
5318 case OP_FTTEXT: case OP_FTBINARY:
5320 case OP_DEFINED: case OP_EXISTS:
5321 case OP_MATCH: case OP_EOF:
5328 /* Detect comparisons that have been optimized away */
5329 if (cSVOPo->op_sv == &PL_sv_yes
5330 || cSVOPo->op_sv == &PL_sv_no)
5343 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
5346 PERL_ARGS_ASSERT_NEWGIVENOP;
5347 return newGIVWHENOP(
5348 ref_array_or_hash(cond),
5350 OP_ENTERGIVEN, OP_LEAVEGIVEN,
5354 /* If cond is null, this is a default {} block */
5356 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
5358 const bool cond_llb = (!cond || looks_like_bool(cond));
5361 PERL_ARGS_ASSERT_NEWWHENOP;
5366 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
5368 scalar(ref_array_or_hash(cond)));
5371 return newGIVWHENOP(
5373 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
5374 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
5378 =for apidoc cv_undef
5380 Clear out all the active components of a CV. This can happen either
5381 by an explicit C<undef &foo>, or by the reference count going to zero.
5382 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
5383 children can still follow the full lexical scope chain.
5389 Perl_cv_undef(pTHX_ CV *cv)
5393 PERL_ARGS_ASSERT_CV_UNDEF;
5395 DEBUG_X(PerlIO_printf(Perl_debug_log,
5396 "CV undef: cv=0x%"UVxf" comppad=0x%"UVxf"\n",
5397 PTR2UV(cv), PTR2UV(PL_comppad))
5401 if (CvFILE(cv) && !CvISXSUB(cv)) {
5402 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
5403 Safefree(CvFILE(cv));
5408 if (!CvISXSUB(cv) && CvROOT(cv)) {
5409 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
5410 Perl_croak(aTHX_ "Can't undef active subroutine");
5413 PAD_SAVE_SETNULLPAD();
5415 op_free(CvROOT(cv));
5420 SvPOK_off(MUTABLE_SV(cv)); /* forget prototype */
5425 /* remove CvOUTSIDE unless this is an undef rather than a free */
5426 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
5427 if (!CvWEAKOUTSIDE(cv))
5428 SvREFCNT_dec(CvOUTSIDE(cv));
5429 CvOUTSIDE(cv) = NULL;
5432 SvREFCNT_dec(MUTABLE_SV(CvXSUBANY(cv).any_ptr));
5435 if (CvISXSUB(cv) && CvXSUB(cv)) {
5438 /* delete all flags except WEAKOUTSIDE */
5439 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
5443 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
5446 PERL_ARGS_ASSERT_CV_CKPROTO_LEN;
5448 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
5449 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
5450 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
5451 || (p && (len != SvCUR(cv) /* Not the same length. */
5452 || memNE(p, SvPVX_const(cv), len))))
5453 && ckWARN_d(WARN_PROTOTYPE)) {
5454 SV* const msg = sv_newmortal();
5458 gv_efullname3(name = sv_newmortal(), gv, NULL);
5459 sv_setpvs(msg, "Prototype mismatch:");
5461 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
5463 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
5465 sv_catpvs(msg, ": none");
5466 sv_catpvs(msg, " vs ");
5468 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
5470 sv_catpvs(msg, "none");
5471 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
5475 static void const_sv_xsub(pTHX_ CV* cv);
5479 =head1 Optree Manipulation Functions
5481 =for apidoc cv_const_sv
5483 If C<cv> is a constant sub eligible for inlining. returns the constant
5484 value returned by the sub. Otherwise, returns NULL.
5486 Constant subs can be created with C<newCONSTSUB> or as described in
5487 L<perlsub/"Constant Functions">.
5492 Perl_cv_const_sv(pTHX_ const CV *const cv)
5494 PERL_UNUSED_CONTEXT;
5497 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
5499 return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
5502 /* op_const_sv: examine an optree to determine whether it's in-lineable.
5503 * Can be called in 3 ways:
5506 * look for a single OP_CONST with attached value: return the value
5508 * cv && CvCLONE(cv) && !CvCONST(cv)
5510 * examine the clone prototype, and if contains only a single
5511 * OP_CONST referencing a pad const, or a single PADSV referencing
5512 * an outer lexical, return a non-zero value to indicate the CV is
5513 * a candidate for "constizing" at clone time
5517 * We have just cloned an anon prototype that was marked as a const
5518 * candidiate. Try to grab the current value, and in the case of
5519 * PADSV, ignore it if it has multiple references. Return the value.
5523 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
5534 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
5535 o = cLISTOPo->op_first->op_sibling;
5537 for (; o; o = o->op_next) {
5538 const OPCODE type = o->op_type;
5540 if (sv && o->op_next == o)
5542 if (o->op_next != o) {
5543 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
5545 if (type == OP_DBSTATE)
5548 if (type == OP_LEAVESUB || type == OP_RETURN)
5552 if (type == OP_CONST && cSVOPo->op_sv)
5554 else if (cv && type == OP_CONST) {
5555 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5559 else if (cv && type == OP_PADSV) {
5560 if (CvCONST(cv)) { /* newly cloned anon */
5561 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5562 /* the candidate should have 1 ref from this pad and 1 ref
5563 * from the parent */
5564 if (!sv || SvREFCNT(sv) != 2)
5571 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
5572 sv = &PL_sv_undef; /* an arbitrary non-null value */
5587 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5590 /* This would be the return value, but the return cannot be reached. */
5591 OP* pegop = newOP(OP_NULL, 0);
5594 PERL_UNUSED_ARG(floor);
5604 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
5606 NORETURN_FUNCTION_END;
5611 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
5613 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
5617 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5623 register CV *cv = NULL;
5625 /* If the subroutine has no body, no attributes, and no builtin attributes
5626 then it's just a sub declaration, and we may be able to get away with
5627 storing with a placeholder scalar in the symbol table, rather than a
5628 full GV and CV. If anything is present then it will take a full CV to
5630 const I32 gv_fetch_flags
5631 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5633 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
5634 const char * const name = o ? SvPV_nolen_const(cSVOPo->op_sv) : NULL;
5638 assert(proto->op_type == OP_CONST);
5639 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
5645 gv = gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV);
5647 } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
5648 SV * const sv = sv_newmortal();
5649 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
5650 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
5651 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
5652 gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
5654 } else if (PL_curstash) {
5655 gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
5658 gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
5662 if (!PL_madskills) {
5671 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
5672 maximum a prototype before. */
5673 if (SvTYPE(gv) > SVt_NULL) {
5674 if (!SvPOK((const SV *)gv)
5675 && !(SvIOK((const SV *)gv) && SvIVX((const SV *)gv) == -1))
5677 Perl_ck_warner_d(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
5679 cv_ckproto_len((const CV *)gv, NULL, ps, ps_len);
5682 sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
5684 sv_setiv(MUTABLE_SV(gv), -1);
5686 SvREFCNT_dec(PL_compcv);
5687 cv = PL_compcv = NULL;
5691 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
5693 if (!block || !ps || *ps || attrs
5694 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5696 || block->op_type == OP_NULL
5701 const_sv = op_const_sv(block, NULL);
5704 const bool exists = CvROOT(cv) || CvXSUB(cv);
5706 /* if the subroutine doesn't exist and wasn't pre-declared
5707 * with a prototype, assume it will be AUTOLOADed,
5708 * skipping the prototype check
5710 if (exists || SvPOK(cv))
5711 cv_ckproto_len(cv, gv, ps, ps_len);
5712 /* already defined (or promised)? */
5713 if (exists || GvASSUMECV(gv)) {
5716 || block->op_type == OP_NULL
5719 if (CvFLAGS(PL_compcv)) {
5720 /* might have had built-in attrs applied */
5721 if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && ckWARN(WARN_MISC))
5722 Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
5723 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS & ~CVf_LVALUE);
5725 /* just a "sub foo;" when &foo is already defined */
5726 SAVEFREESV(PL_compcv);
5731 && block->op_type != OP_NULL
5734 if (ckWARN(WARN_REDEFINE)
5736 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
5738 const line_t oldline = CopLINE(PL_curcop);
5739 if (PL_parser && PL_parser->copline != NOLINE)
5740 CopLINE_set(PL_curcop, PL_parser->copline);
5741 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5742 CvCONST(cv) ? "Constant subroutine %s redefined"
5743 : "Subroutine %s redefined", name);
5744 CopLINE_set(PL_curcop, oldline);
5747 if (!PL_minus_c) /* keep old one around for madskills */
5750 /* (PL_madskills unset in used file.) */
5758 SvREFCNT_inc_simple_void_NN(const_sv);
5760 assert(!CvROOT(cv) && !CvCONST(cv));
5761 sv_setpvs(MUTABLE_SV(cv), ""); /* prototype is "" */
5762 CvXSUBANY(cv).any_ptr = const_sv;
5763 CvXSUB(cv) = const_sv_xsub;
5769 cv = newCONSTSUB(NULL, name, const_sv);
5771 mro_method_changed_in( /* sub Foo::Bar () { 123 } */
5772 (CvGV(cv) && GvSTASH(CvGV(cv)))
5781 SvREFCNT_dec(PL_compcv);
5785 if (cv) { /* must reuse cv if autoloaded */
5786 /* transfer PL_compcv to cv */
5789 && block->op_type != OP_NULL
5792 cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
5794 CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs;
5795 if (!CvWEAKOUTSIDE(cv))
5796 SvREFCNT_dec(CvOUTSIDE(cv));
5797 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
5798 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
5799 CvOUTSIDE(PL_compcv) = 0;
5800 CvPADLIST(cv) = CvPADLIST(PL_compcv);
5801 CvPADLIST(PL_compcv) = 0;
5802 /* inner references to PL_compcv must be fixed up ... */
5803 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
5804 if (PERLDB_INTER)/* Advice debugger on the new sub. */
5805 ++PL_sub_generation;
5808 /* Might have had built-in attributes applied -- propagate them. */
5809 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5811 /* ... before we throw it away */
5812 SvREFCNT_dec(PL_compcv);
5820 if (strEQ(name, "import")) {
5821 PL_formfeed = MUTABLE_SV(cv);
5822 /* diag_listed_as: SKIPME */
5823 Perl_warner(aTHX_ packWARN(WARN_VOID), "0x%"UVxf"\n", PTR2UV(cv));
5827 mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar { (shift)+1 } */
5832 CvFILE_set_from_cop(cv, PL_curcop);
5833 CvSTASH(cv) = PL_curstash;
5836 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
5837 HV *stash = name && GvSTASH(CvGV(cv)) ? GvSTASH(CvGV(cv)) : PL_curstash;
5838 apply_attrs(stash, MUTABLE_SV(cv), attrs, FALSE);
5842 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
5844 if (PL_parser && PL_parser->error_count) {
5848 const char *s = strrchr(name, ':');
5850 if (strEQ(s, "BEGIN")) {
5851 const char not_safe[] =
5852 "BEGIN not safe after errors--compilation aborted";
5853 if (PL_in_eval & EVAL_KEEPERR)
5854 Perl_croak(aTHX_ not_safe);
5856 /* force display of errors found but not reported */
5857 sv_catpv(ERRSV, not_safe);
5858 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
5867 /* If we assign an optree to a PVCV, then we've defined a subroutine that
5868 the debugger could be able to set a breakpoint in, so signal to
5869 pp_entereval that it should not throw away any saved lines at scope
5872 PL_breakable_sub_gen++;
5874 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5875 mod(scalarseq(block), OP_LEAVESUBLV));
5876 block->op_attached = 1;
5879 /* This makes sub {}; work as expected. */
5880 if (block->op_type == OP_STUB) {
5881 OP* const newblock = newSTATEOP(0, NULL, 0);
5883 op_getmad(block,newblock,'B');
5890 block->op_attached = 1;
5891 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5893 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5894 OpREFCNT_set(CvROOT(cv), 1);
5895 CvSTART(cv) = LINKLIST(CvROOT(cv));
5896 CvROOT(cv)->op_next = 0;
5897 CALL_PEEP(CvSTART(cv));
5899 /* now that optimizer has done its work, adjust pad values */
5901 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
5904 assert(!CvCONST(cv));
5905 if (ps && !*ps && op_const_sv(block, cv))
5910 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5911 SV * const sv = newSV(0);
5912 SV * const tmpstr = sv_newmortal();
5913 GV * const db_postponed = gv_fetchpvs("DB::postponed",
5914 GV_ADDMULTI, SVt_PVHV);
5917 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5919 (long)PL_subline, (long)CopLINE(PL_curcop));
5920 gv_efullname3(tmpstr, gv, NULL);
5921 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
5922 SvCUR(tmpstr), sv, 0);
5923 hv = GvHVn(db_postponed);
5924 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
5925 CV * const pcv = GvCV(db_postponed);
5931 call_sv(MUTABLE_SV(pcv), G_DISCARD);
5936 if (name && ! (PL_parser && PL_parser->error_count))
5937 process_special_blocks(name, gv, cv);
5942 PL_parser->copline = NOLINE;
5948 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
5951 const char *const colon = strrchr(fullname,':');
5952 const char *const name = colon ? colon + 1 : fullname;
5954 PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
5957 if (strEQ(name, "BEGIN")) {
5958 const I32 oldscope = PL_scopestack_ix;
5960 SAVECOPFILE(&PL_compiling);
5961 SAVECOPLINE(&PL_compiling);
5963 DEBUG_x( dump_sub(gv) );
5964 Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
5965 GvCV(gv) = 0; /* cv has been hijacked */
5966 call_list(oldscope, PL_beginav);
5968 PL_curcop = &PL_compiling;
5969 CopHINTS_set(&PL_compiling, PL_hints);
5976 if strEQ(name, "END") {
5977 DEBUG_x( dump_sub(gv) );
5978 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
5981 } else if (*name == 'U') {
5982 if (strEQ(name, "UNITCHECK")) {
5983 /* It's never too late to run a unitcheck block */
5984 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
5988 } else if (*name == 'C') {
5989 if (strEQ(name, "CHECK")) {
5991 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
5992 "Too late to run CHECK block");
5993 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
5997 } else if (*name == 'I') {
5998 if (strEQ(name, "INIT")) {
6000 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6001 "Too late to run INIT block");
6002 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
6008 DEBUG_x( dump_sub(gv) );
6009 GvCV(gv) = 0; /* cv has been hijacked */
6014 =for apidoc newCONSTSUB
6016 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
6017 eligible for inlining at compile-time.
6019 Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
6020 which won't be called if used as a destructor, but will suppress the overhead
6021 of a call to C<AUTOLOAD>. (This form, however, isn't eligible for inlining at
6028 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
6033 const char *const file = CopFILE(PL_curcop);
6035 SV *const temp_sv = CopFILESV(PL_curcop);
6036 const char *const file = temp_sv ? SvPV_nolen_const(temp_sv) : NULL;
6041 if (IN_PERL_RUNTIME) {
6042 /* at runtime, it's not safe to manipulate PL_curcop: it may be
6043 * an op shared between threads. Use a non-shared COP for our
6045 SAVEVPTR(PL_curcop);
6046 PL_curcop = &PL_compiling;
6048 SAVECOPLINE(PL_curcop);
6049 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
6052 PL_hints &= ~HINT_BLOCK_SCOPE;
6055 SAVESPTR(PL_curstash);
6056 SAVECOPSTASH(PL_curcop);
6057 PL_curstash = stash;
6058 CopSTASH_set(PL_curcop,stash);
6061 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
6062 and so doesn't get free()d. (It's expected to be from the C pre-
6063 processor __FILE__ directive). But we need a dynamically allocated one,
6064 and we need it to get freed. */
6065 cv = newXS_flags(name, const_sv_xsub, file ? file : "", "",
6066 XS_DYNAMIC_FILENAME);
6067 CvXSUBANY(cv).any_ptr = sv;
6072 CopSTASH_free(PL_curcop);
6080 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
6081 const char *const filename, const char *const proto,
6084 CV *cv = newXS(name, subaddr, filename);
6086 PERL_ARGS_ASSERT_NEWXS_FLAGS;
6088 if (flags & XS_DYNAMIC_FILENAME) {
6089 /* We need to "make arrangements" (ie cheat) to ensure that the
6090 filename lasts as long as the PVCV we just created, but also doesn't
6092 STRLEN filename_len = strlen(filename);
6093 STRLEN proto_and_file_len = filename_len;
6094 char *proto_and_file;
6098 proto_len = strlen(proto);
6099 proto_and_file_len += proto_len;
6101 Newx(proto_and_file, proto_and_file_len + 1, char);
6102 Copy(proto, proto_and_file, proto_len, char);
6103 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
6106 proto_and_file = savepvn(filename, filename_len);
6109 /* This gets free()d. :-) */
6110 sv_usepvn_flags(MUTABLE_SV(cv), proto_and_file, proto_and_file_len,
6111 SV_HAS_TRAILING_NUL);
6113 /* This gives us the correct prototype, rather than one with the
6114 file name appended. */
6115 SvCUR_set(cv, proto_len);
6119 CvFILE(cv) = proto_and_file + proto_len;
6121 sv_setpv(MUTABLE_SV(cv), proto);
6127 =for apidoc U||newXS
6129 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
6130 static storage, as it is used directly as CvFILE(), without a copy being made.
6136 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
6139 GV * const gv = gv_fetchpv(name ? name :
6140 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
6141 GV_ADDMULTI, SVt_PVCV);
6144 PERL_ARGS_ASSERT_NEWXS;
6147 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
6149 if ((cv = (name ? GvCV(gv) : NULL))) {
6151 /* just a cached method */
6155 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
6156 /* already defined (or promised) */
6157 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
6158 if (ckWARN(WARN_REDEFINE)) {
6159 GV * const gvcv = CvGV(cv);
6161 HV * const stash = GvSTASH(gvcv);
6163 const char *redefined_name = HvNAME_get(stash);
6164 if ( strEQ(redefined_name,"autouse") ) {
6165 const line_t oldline = CopLINE(PL_curcop);
6166 if (PL_parser && PL_parser->copline != NOLINE)
6167 CopLINE_set(PL_curcop, PL_parser->copline);
6168 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6169 CvCONST(cv) ? "Constant subroutine %s redefined"
6170 : "Subroutine %s redefined"
6172 CopLINE_set(PL_curcop, oldline);
6182 if (cv) /* must reuse cv if autoloaded */
6185 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
6189 mro_method_changed_in(GvSTASH(gv)); /* newXS */
6193 (void)gv_fetchfile(filename);
6194 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
6195 an external constant string */
6197 CvXSUB(cv) = subaddr;
6200 process_special_blocks(name, gv, cv);
6212 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
6217 OP* pegop = newOP(OP_NULL, 0);
6221 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
6222 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
6225 if ((cv = GvFORM(gv))) {
6226 if (ckWARN(WARN_REDEFINE)) {
6227 const line_t oldline = CopLINE(PL_curcop);
6228 if (PL_parser && PL_parser->copline != NOLINE)
6229 CopLINE_set(PL_curcop, PL_parser->copline);
6231 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6232 "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
6234 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6235 "Format STDOUT redefined");
6237 CopLINE_set(PL_curcop, oldline);
6244 CvFILE_set_from_cop(cv, PL_curcop);
6247 pad_tidy(padtidy_FORMAT);
6248 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
6249 CvROOT(cv)->op_private |= OPpREFCOUNTED;
6250 OpREFCNT_set(CvROOT(cv), 1);
6251 CvSTART(cv) = LINKLIST(CvROOT(cv));
6252 CvROOT(cv)->op_next = 0;
6253 CALL_PEEP(CvSTART(cv));
6255 op_getmad(o,pegop,'n');
6256 op_getmad_weak(block, pegop, 'b');
6261 PL_parser->copline = NOLINE;
6269 Perl_newANONLIST(pTHX_ OP *o)
6271 return convert(OP_ANONLIST, OPf_SPECIAL, o);
6275 Perl_newANONHASH(pTHX_ OP *o)
6277 return convert(OP_ANONHASH, OPf_SPECIAL, o);
6281 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
6283 return newANONATTRSUB(floor, proto, NULL, block);
6287 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
6289 return newUNOP(OP_REFGEN, 0,
6290 newSVOP(OP_ANONCODE, 0,
6291 MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block))));
6295 Perl_oopsAV(pTHX_ OP *o)
6299 PERL_ARGS_ASSERT_OOPSAV;
6301 switch (o->op_type) {
6303 o->op_type = OP_PADAV;
6304 o->op_ppaddr = PL_ppaddr[OP_PADAV];
6305 return ref(o, OP_RV2AV);
6308 o->op_type = OP_RV2AV;
6309 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
6314 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
6321 Perl_oopsHV(pTHX_ OP *o)
6325 PERL_ARGS_ASSERT_OOPSHV;
6327 switch (o->op_type) {
6330 o->op_type = OP_PADHV;
6331 o->op_ppaddr = PL_ppaddr[OP_PADHV];
6332 return ref(o, OP_RV2HV);
6336 o->op_type = OP_RV2HV;
6337 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
6342 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
6349 Perl_newAVREF(pTHX_ OP *o)
6353 PERL_ARGS_ASSERT_NEWAVREF;
6355 if (o->op_type == OP_PADANY) {
6356 o->op_type = OP_PADAV;
6357 o->op_ppaddr = PL_ppaddr[OP_PADAV];
6360 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
6361 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6362 "Using an array as a reference is deprecated");
6364 return newUNOP(OP_RV2AV, 0, scalar(o));
6368 Perl_newGVREF(pTHX_ I32 type, OP *o)
6370 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
6371 return newUNOP(OP_NULL, 0, o);
6372 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
6376 Perl_newHVREF(pTHX_ OP *o)
6380 PERL_ARGS_ASSERT_NEWHVREF;
6382 if (o->op_type == OP_PADANY) {
6383 o->op_type = OP_PADHV;
6384 o->op_ppaddr = PL_ppaddr[OP_PADHV];
6387 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
6388 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6389 "Using a hash as a reference is deprecated");
6391 return newUNOP(OP_RV2HV, 0, scalar(o));
6395 Perl_newCVREF(pTHX_ I32 flags, OP *o)
6397 return newUNOP(OP_RV2CV, flags, scalar(o));
6401 Perl_newSVREF(pTHX_ OP *o)
6405 PERL_ARGS_ASSERT_NEWSVREF;
6407 if (o->op_type == OP_PADANY) {
6408 o->op_type = OP_PADSV;
6409 o->op_ppaddr = PL_ppaddr[OP_PADSV];
6412 return newUNOP(OP_RV2SV, 0, scalar(o));
6415 /* Check routines. See the comments at the top of this file for details
6416 * on when these are called */
6419 Perl_ck_anoncode(pTHX_ OP *o)
6421 PERL_ARGS_ASSERT_CK_ANONCODE;
6423 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
6425 cSVOPo->op_sv = NULL;
6430 Perl_ck_bitop(pTHX_ OP *o)
6434 PERL_ARGS_ASSERT_CK_BITOP;
6436 #define OP_IS_NUMCOMPARE(op) \
6437 ((op) == OP_LT || (op) == OP_I_LT || \
6438 (op) == OP_GT || (op) == OP_I_GT || \
6439 (op) == OP_LE || (op) == OP_I_LE || \
6440 (op) == OP_GE || (op) == OP_I_GE || \
6441 (op) == OP_EQ || (op) == OP_I_EQ || \
6442 (op) == OP_NE || (op) == OP_I_NE || \
6443 (op) == OP_NCMP || (op) == OP_I_NCMP)
6444 o->op_private = (U8)(PL_hints & HINT_INTEGER);
6445 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
6446 && (o->op_type == OP_BIT_OR
6447 || o->op_type == OP_BIT_AND
6448 || o->op_type == OP_BIT_XOR))
6450 const OP * const left = cBINOPo->op_first;
6451 const OP * const right = left->op_sibling;
6452 if ((OP_IS_NUMCOMPARE(left->op_type) &&
6453 (left->op_flags & OPf_PARENS) == 0) ||
6454 (OP_IS_NUMCOMPARE(right->op_type) &&
6455 (right->op_flags & OPf_PARENS) == 0))
6456 Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
6457 "Possible precedence problem on bitwise %c operator",
6458 o->op_type == OP_BIT_OR ? '|'
6459 : o->op_type == OP_BIT_AND ? '&' : '^'
6466 Perl_ck_concat(pTHX_ OP *o)
6468 const OP * const kid = cUNOPo->op_first;
6470 PERL_ARGS_ASSERT_CK_CONCAT;
6471 PERL_UNUSED_CONTEXT;
6473 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
6474 !(kUNOP->op_first->op_flags & OPf_MOD))
6475 o->op_flags |= OPf_STACKED;
6480 Perl_ck_spair(pTHX_ OP *o)
6484 PERL_ARGS_ASSERT_CK_SPAIR;
6486 if (o->op_flags & OPf_KIDS) {
6489 const OPCODE type = o->op_type;
6490 o = modkids(ck_fun(o), type);
6491 kid = cUNOPo->op_first;
6492 newop = kUNOP->op_first->op_sibling;
6494 const OPCODE type = newop->op_type;
6495 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
6496 type == OP_PADAV || type == OP_PADHV ||
6497 type == OP_RV2AV || type == OP_RV2HV)
6501 op_getmad(kUNOP->op_first,newop,'K');
6503 op_free(kUNOP->op_first);
6505 kUNOP->op_first = newop;
6507 o->op_ppaddr = PL_ppaddr[++o->op_type];
6512 Perl_ck_delete(pTHX_ OP *o)
6514 PERL_ARGS_ASSERT_CK_DELETE;
6518 if (o->op_flags & OPf_KIDS) {
6519 OP * const kid = cUNOPo->op_first;
6520 switch (kid->op_type) {
6522 o->op_flags |= OPf_SPECIAL;
6525 o->op_private |= OPpSLICE;
6528 o->op_flags |= OPf_SPECIAL;
6533 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
6536 if (kid->op_private & OPpLVAL_INTRO)
6537 o->op_private |= OPpLVAL_INTRO;
6544 Perl_ck_die(pTHX_ OP *o)
6546 PERL_ARGS_ASSERT_CK_DIE;
6549 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6555 Perl_ck_eof(pTHX_ OP *o)
6559 PERL_ARGS_ASSERT_CK_EOF;
6561 if (o->op_flags & OPf_KIDS) {
6562 if (cLISTOPo->op_first->op_type == OP_STUB) {
6564 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
6566 op_getmad(o,newop,'O');
6578 Perl_ck_eval(pTHX_ OP *o)
6582 PERL_ARGS_ASSERT_CK_EVAL;
6584 PL_hints |= HINT_BLOCK_SCOPE;
6585 if (o->op_flags & OPf_KIDS) {
6586 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6589 o->op_flags &= ~OPf_KIDS;
6592 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
6598 cUNOPo->op_first = 0;
6603 NewOp(1101, enter, 1, LOGOP);
6604 enter->op_type = OP_ENTERTRY;
6605 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
6606 enter->op_private = 0;
6608 /* establish postfix order */
6609 enter->op_next = (OP*)enter;
6611 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
6612 o->op_type = OP_LEAVETRY;
6613 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
6614 enter->op_other = o;
6615 op_getmad(oldo,o,'O');
6629 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
6630 op_getmad(oldo,o,'O');
6632 o->op_targ = (PADOFFSET)PL_hints;
6633 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
6634 /* Store a copy of %^H that pp_entereval can pick up. */
6635 OP *hhop = newSVOP(OP_HINTSEVAL, 0,
6636 MUTABLE_SV(Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv))));
6637 cUNOPo->op_first->op_sibling = hhop;
6638 o->op_private |= OPpEVAL_HAS_HH;
6644 Perl_ck_exit(pTHX_ OP *o)
6646 PERL_ARGS_ASSERT_CK_EXIT;
6649 HV * const table = GvHV(PL_hintgv);
6651 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
6652 if (svp && *svp && SvTRUE(*svp))
6653 o->op_private |= OPpEXIT_VMSISH;
6655 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6661 Perl_ck_exec(pTHX_ OP *o)
6663 PERL_ARGS_ASSERT_CK_EXEC;
6665 if (o->op_flags & OPf_STACKED) {
6668 kid = cUNOPo->op_first->op_sibling;
6669 if (kid->op_type == OP_RV2GV)
6678 Perl_ck_exists(pTHX_ OP *o)
6682 PERL_ARGS_ASSERT_CK_EXISTS;
6685 if (o->op_flags & OPf_KIDS) {
6686 OP * const kid = cUNOPo->op_first;
6687 if (kid->op_type == OP_ENTERSUB) {
6688 (void) ref(kid, o->op_type);
6689 if (kid->op_type != OP_RV2CV
6690 && !(PL_parser && PL_parser->error_count))
6691 Perl_croak(aTHX_ "%s argument is not a subroutine name",
6693 o->op_private |= OPpEXISTS_SUB;
6695 else if (kid->op_type == OP_AELEM)
6696 o->op_flags |= OPf_SPECIAL;
6697 else if (kid->op_type != OP_HELEM)
6698 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or a subroutine",
6706 Perl_ck_rvconst(pTHX_ register OP *o)
6709 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6711 PERL_ARGS_ASSERT_CK_RVCONST;
6713 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6714 if (o->op_type == OP_RV2CV)
6715 o->op_private &= ~1;
6717 if (kid->op_type == OP_CONST) {
6720 SV * const kidsv = kid->op_sv;
6722 /* Is it a constant from cv_const_sv()? */
6723 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
6724 SV * const rsv = SvRV(kidsv);
6725 const svtype type = SvTYPE(rsv);
6726 const char *badtype = NULL;
6728 switch (o->op_type) {
6730 if (type > SVt_PVMG)
6731 badtype = "a SCALAR";
6734 if (type != SVt_PVAV)
6735 badtype = "an ARRAY";
6738 if (type != SVt_PVHV)
6742 if (type != SVt_PVCV)
6747 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
6750 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
6751 const char *badthing;
6752 switch (o->op_type) {
6754 badthing = "a SCALAR";
6757 badthing = "an ARRAY";
6760 badthing = "a HASH";
6768 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
6769 SVfARG(kidsv), badthing);
6772 * This is a little tricky. We only want to add the symbol if we
6773 * didn't add it in the lexer. Otherwise we get duplicate strict
6774 * warnings. But if we didn't add it in the lexer, we must at
6775 * least pretend like we wanted to add it even if it existed before,
6776 * or we get possible typo warnings. OPpCONST_ENTERED says
6777 * whether the lexer already added THIS instance of this symbol.
6779 iscv = (o->op_type == OP_RV2CV) * 2;
6781 gv = gv_fetchsv(kidsv,
6782 iscv | !(kid->op_private & OPpCONST_ENTERED),
6785 : o->op_type == OP_RV2SV
6787 : o->op_type == OP_RV2AV
6789 : o->op_type == OP_RV2HV
6792 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
6794 kid->op_type = OP_GV;
6795 SvREFCNT_dec(kid->op_sv);
6797 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
6798 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
6799 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
6801 PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
6803 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
6805 kid->op_private = 0;
6806 kid->op_ppaddr = PL_ppaddr[OP_GV];
6813 Perl_ck_ftst(pTHX_ OP *o)
6816 const I32 type = o->op_type;
6818 PERL_ARGS_ASSERT_CK_FTST;
6820 if (o->op_flags & OPf_REF) {
6823 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
6824 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6825 const OPCODE kidtype = kid->op_type;
6827 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6828 OP * const newop = newGVOP(type, OPf_REF,
6829 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
6831 op_getmad(o,newop,'O');
6837 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
6838 o->op_private |= OPpFT_ACCESS;
6839 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
6840 && kidtype != OP_STAT && kidtype != OP_LSTAT)
6841 o->op_private |= OPpFT_STACKED;
6849 if (type == OP_FTTTY)
6850 o = newGVOP(type, OPf_REF, PL_stdingv);
6852 o = newUNOP(type, 0, newDEFSVOP());
6853 op_getmad(oldo,o,'O');
6859 Perl_ck_fun(pTHX_ OP *o)
6862 const int type = o->op_type;
6863 register I32 oa = PL_opargs[type] >> OASHIFT;
6865 PERL_ARGS_ASSERT_CK_FUN;
6867 if (o->op_flags & OPf_STACKED) {
6868 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
6871 return no_fh_allowed(o);
6874 if (o->op_flags & OPf_KIDS) {
6875 OP **tokid = &cLISTOPo->op_first;
6876 register OP *kid = cLISTOPo->op_first;
6880 if (kid->op_type == OP_PUSHMARK ||
6881 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
6883 tokid = &kid->op_sibling;
6884 kid = kid->op_sibling;
6886 if (!kid && PL_opargs[type] & OA_DEFGV)
6887 *tokid = kid = newDEFSVOP();
6891 sibl = kid->op_sibling;
6893 if (!sibl && kid->op_type == OP_STUB) {
6900 /* list seen where single (scalar) arg expected? */
6901 if (numargs == 1 && !(oa >> 4)
6902 && kid->op_type == OP_LIST && type != OP_SCALAR)
6904 return too_many_arguments(o,PL_op_desc[type]);
6917 if ((type == OP_PUSH || type == OP_UNSHIFT)
6918 && !kid->op_sibling)
6919 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
6920 "Useless use of %s with no values",
6923 if (kid->op_type == OP_CONST &&
6924 (kid->op_private & OPpCONST_BARE))
6926 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
6927 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
6928 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6929 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
6930 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6932 op_getmad(kid,newop,'K');
6937 kid->op_sibling = sibl;
6940 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
6941 bad_type(numargs, "array", PL_op_desc[type], kid);
6945 if (kid->op_type == OP_CONST &&
6946 (kid->op_private & OPpCONST_BARE))
6948 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
6949 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
6950 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6951 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
6952 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6954 op_getmad(kid,newop,'K');
6959 kid->op_sibling = sibl;
6962 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6963 bad_type(numargs, "hash", PL_op_desc[type], kid);
6968 OP * const newop = newUNOP(OP_NULL, 0, kid);
6969 kid->op_sibling = 0;
6971 newop->op_next = newop;
6973 kid->op_sibling = sibl;
6978 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6979 if (kid->op_type == OP_CONST &&
6980 (kid->op_private & OPpCONST_BARE))
6982 OP * const newop = newGVOP(OP_GV, 0,
6983 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
6984 if (!(o->op_private & 1) && /* if not unop */
6985 kid == cLISTOPo->op_last)
6986 cLISTOPo->op_last = newop;
6988 op_getmad(kid,newop,'K');
6994 else if (kid->op_type == OP_READLINE) {
6995 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6996 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
6999 I32 flags = OPf_SPECIAL;
7003 /* is this op a FH constructor? */
7004 if (is_handle_constructor(o,numargs)) {
7005 const char *name = NULL;
7009 /* Set a flag to tell rv2gv to vivify
7010 * need to "prove" flag does not mean something
7011 * else already - NI-S 1999/05/07
7014 if (kid->op_type == OP_PADSV) {
7016 = PAD_COMPNAME_SV(kid->op_targ);
7017 name = SvPV_const(namesv, len);
7019 else if (kid->op_type == OP_RV2SV
7020 && kUNOP->op_first->op_type == OP_GV)
7022 GV * const gv = cGVOPx_gv(kUNOP->op_first);
7024 len = GvNAMELEN(gv);
7026 else if (kid->op_type == OP_AELEM
7027 || kid->op_type == OP_HELEM)
7030 OP *op = ((BINOP*)kid)->op_first;
7034 const char * const a =
7035 kid->op_type == OP_AELEM ?
7037 if (((op->op_type == OP_RV2AV) ||
7038 (op->op_type == OP_RV2HV)) &&
7039 (firstop = ((UNOP*)op)->op_first) &&
7040 (firstop->op_type == OP_GV)) {
7041 /* packagevar $a[] or $h{} */
7042 GV * const gv = cGVOPx_gv(firstop);
7050 else if (op->op_type == OP_PADAV
7051 || op->op_type == OP_PADHV) {
7052 /* lexicalvar $a[] or $h{} */
7053 const char * const padname =
7054 PAD_COMPNAME_PV(op->op_targ);
7063 name = SvPV_const(tmpstr, len);
7068 name = "__ANONIO__";
7075 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
7076 namesv = PAD_SVl(targ);
7077 SvUPGRADE(namesv, SVt_PV);
7079 sv_setpvs(namesv, "$");
7080 sv_catpvn(namesv, name, len);
7083 kid->op_sibling = 0;
7084 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
7085 kid->op_targ = targ;
7086 kid->op_private |= priv;
7088 kid->op_sibling = sibl;
7094 mod(scalar(kid), type);
7098 tokid = &kid->op_sibling;
7099 kid = kid->op_sibling;
7102 if (kid && kid->op_type != OP_STUB)
7103 return too_many_arguments(o,OP_DESC(o));
7104 o->op_private |= numargs;
7106 /* FIXME - should the numargs move as for the PERL_MAD case? */
7107 o->op_private |= numargs;
7109 return too_many_arguments(o,OP_DESC(o));
7113 else if (PL_opargs[type] & OA_DEFGV) {
7115 OP *newop = newUNOP(type, 0, newDEFSVOP());
7116 op_getmad(o,newop,'O');
7119 /* Ordering of these two is important to keep f_map.t passing. */
7121 return newUNOP(type, 0, newDEFSVOP());
7126 while (oa & OA_OPTIONAL)
7128 if (oa && oa != OA_LIST)
7129 return too_few_arguments(o,OP_DESC(o));
7135 Perl_ck_glob(pTHX_ OP *o)
7140 PERL_ARGS_ASSERT_CK_GLOB;
7143 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
7144 append_elem(OP_GLOB, o, newDEFSVOP());
7146 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
7147 && GvCVu(gv) && GvIMPORTED_CV(gv)))
7149 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7152 #if !defined(PERL_EXTERNAL_GLOB)
7153 /* XXX this can be tightened up and made more failsafe. */
7154 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7157 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
7158 newSVpvs("File::Glob"), NULL, NULL, NULL);
7159 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7160 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
7161 GvCV(gv) = GvCV(glob_gv);
7162 SvREFCNT_inc_void(MUTABLE_SV(GvCV(gv)));
7163 GvIMPORTED_CV_on(gv);
7166 #endif /* PERL_EXTERNAL_GLOB */
7168 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7169 append_elem(OP_GLOB, o,
7170 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
7171 o->op_type = OP_LIST;
7172 o->op_ppaddr = PL_ppaddr[OP_LIST];
7173 cLISTOPo->op_first->op_type = OP_PUSHMARK;
7174 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
7175 cLISTOPo->op_first->op_targ = 0;
7176 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
7177 append_elem(OP_LIST, o,
7178 scalar(newUNOP(OP_RV2CV, 0,
7179 newGVOP(OP_GV, 0, gv)))));
7180 o = newUNOP(OP_NULL, 0, ck_subr(o));
7181 o->op_targ = OP_GLOB; /* hint at what it used to be */
7184 gv = newGVgen("main");
7186 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
7192 Perl_ck_grep(pTHX_ OP *o)
7197 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
7200 PERL_ARGS_ASSERT_CK_GREP;
7202 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
7203 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
7205 if (o->op_flags & OPf_STACKED) {
7208 kid = cUNOPx(cLISTOPo->op_first->op_sibling)->op_first;
7209 if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
7210 return no_fh_allowed(o);
7211 for (k = kid; k; k = k->op_next) {
7214 NewOp(1101, gwop, 1, LOGOP);
7215 kid->op_next = (OP*)gwop;
7216 o->op_flags &= ~OPf_STACKED;
7218 kid = cLISTOPo->op_first->op_sibling;
7219 if (type == OP_MAPWHILE)
7224 if (PL_parser && PL_parser->error_count)
7226 kid = cLISTOPo->op_first->op_sibling;
7227 if (kid->op_type != OP_NULL)
7228 Perl_croak(aTHX_ "panic: ck_grep");
7229 kid = kUNOP->op_first;
7232 NewOp(1101, gwop, 1, LOGOP);
7233 gwop->op_type = type;
7234 gwop->op_ppaddr = PL_ppaddr[type];
7235 gwop->op_first = listkids(o);
7236 gwop->op_flags |= OPf_KIDS;
7237 gwop->op_other = LINKLIST(kid);
7238 kid->op_next = (OP*)gwop;
7239 offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
7240 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
7241 o->op_private = gwop->op_private = 0;
7242 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
7245 o->op_private = gwop->op_private = OPpGREP_LEX;
7246 gwop->op_targ = o->op_targ = offset;
7249 kid = cLISTOPo->op_first->op_sibling;
7250 if (!kid || !kid->op_sibling)
7251 return too_few_arguments(o,OP_DESC(o));
7252 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
7253 mod(kid, OP_GREPSTART);
7259 Perl_ck_index(pTHX_ OP *o)
7261 PERL_ARGS_ASSERT_CK_INDEX;
7263 if (o->op_flags & OPf_KIDS) {
7264 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7266 kid = kid->op_sibling; /* get past "big" */
7267 if (kid && kid->op_type == OP_CONST)
7268 fbm_compile(((SVOP*)kid)->op_sv, 0);
7274 Perl_ck_lfun(pTHX_ OP *o)
7276 const OPCODE type = o->op_type;
7278 PERL_ARGS_ASSERT_CK_LFUN;
7280 return modkids(ck_fun(o), type);
7284 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
7286 PERL_ARGS_ASSERT_CK_DEFINED;
7288 if ((o->op_flags & OPf_KIDS)) {
7289 switch (cUNOPo->op_first->op_type) {
7291 /* This is needed for
7292 if (defined %stash::)
7293 to work. Do not break Tk.
7295 break; /* Globals via GV can be undef */
7297 case OP_AASSIGN: /* Is this a good idea? */
7298 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7299 "defined(@array) is deprecated");
7300 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7301 "\t(Maybe you should just omit the defined()?)\n");
7305 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7306 "defined(%%hash) is deprecated");
7307 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7308 "\t(Maybe you should just omit the defined()?)\n");
7319 Perl_ck_readline(pTHX_ OP *o)
7321 PERL_ARGS_ASSERT_CK_READLINE;
7323 if (!(o->op_flags & OPf_KIDS)) {
7325 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
7327 op_getmad(o,newop,'O');
7337 Perl_ck_rfun(pTHX_ OP *o)
7339 const OPCODE type = o->op_type;
7341 PERL_ARGS_ASSERT_CK_RFUN;
7343 return refkids(ck_fun(o), type);
7347 Perl_ck_listiob(pTHX_ OP *o)
7351 PERL_ARGS_ASSERT_CK_LISTIOB;
7353 kid = cLISTOPo->op_first;
7356 kid = cLISTOPo->op_first;
7358 if (kid->op_type == OP_PUSHMARK)
7359 kid = kid->op_sibling;
7360 if (kid && o->op_flags & OPf_STACKED)
7361 kid = kid->op_sibling;
7362 else if (kid && !kid->op_sibling) { /* print HANDLE; */
7363 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
7364 o->op_flags |= OPf_STACKED; /* make it a filehandle */
7365 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
7366 cLISTOPo->op_first->op_sibling = kid;
7367 cLISTOPo->op_last = kid;
7368 kid = kid->op_sibling;
7373 append_elem(o->op_type, o, newDEFSVOP());
7379 Perl_ck_smartmatch(pTHX_ OP *o)
7382 if (0 == (o->op_flags & OPf_SPECIAL)) {
7383 OP *first = cBINOPo->op_first;
7384 OP *second = first->op_sibling;
7386 /* Implicitly take a reference to an array or hash */
7387 first->op_sibling = NULL;
7388 first = cBINOPo->op_first = ref_array_or_hash(first);
7389 second = first->op_sibling = ref_array_or_hash(second);
7391 /* Implicitly take a reference to a regular expression */
7392 if (first->op_type == OP_MATCH) {
7393 first->op_type = OP_QR;
7394 first->op_ppaddr = PL_ppaddr[OP_QR];
7396 if (second->op_type == OP_MATCH) {
7397 second->op_type = OP_QR;
7398 second->op_ppaddr = PL_ppaddr[OP_QR];
7407 Perl_ck_sassign(pTHX_ OP *o)
7410 OP * const kid = cLISTOPo->op_first;
7412 PERL_ARGS_ASSERT_CK_SASSIGN;
7414 /* has a disposable target? */
7415 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
7416 && !(kid->op_flags & OPf_STACKED)
7417 /* Cannot steal the second time! */
7418 && !(kid->op_private & OPpTARGET_MY)
7419 /* Keep the full thing for madskills */
7423 OP * const kkid = kid->op_sibling;
7425 /* Can just relocate the target. */
7426 if (kkid && kkid->op_type == OP_PADSV
7427 && !(kkid->op_private & OPpLVAL_INTRO))
7429 kid->op_targ = kkid->op_targ;
7431 /* Now we do not need PADSV and SASSIGN. */
7432 kid->op_sibling = o->op_sibling; /* NULL */
7433 cLISTOPo->op_first = NULL;
7436 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
7440 if (kid->op_sibling) {
7441 OP *kkid = kid->op_sibling;
7442 if (kkid->op_type == OP_PADSV
7443 && (kkid->op_private & OPpLVAL_INTRO)
7444 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
7445 const PADOFFSET target = kkid->op_targ;
7446 OP *const other = newOP(OP_PADSV,
7448 | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
7449 OP *const first = newOP(OP_NULL, 0);
7450 OP *const nullop = newCONDOP(0, first, o, other);
7451 OP *const condop = first->op_next;
7452 /* hijacking PADSTALE for uninitialized state variables */
7453 SvPADSTALE_on(PAD_SVl(target));
7455 condop->op_type = OP_ONCE;
7456 condop->op_ppaddr = PL_ppaddr[OP_ONCE];
7457 condop->op_targ = target;
7458 other->op_targ = target;
7460 /* Because we change the type of the op here, we will skip the
7461 assinment binop->op_last = binop->op_first->op_sibling; at the
7462 end of Perl_newBINOP(). So need to do it here. */
7463 cBINOPo->op_last = cBINOPo->op_first->op_sibling;
7472 Perl_ck_match(pTHX_ OP *o)
7476 PERL_ARGS_ASSERT_CK_MATCH;
7478 if (o->op_type != OP_QR && PL_compcv) {
7479 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
7480 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
7481 o->op_targ = offset;
7482 o->op_private |= OPpTARGET_MY;
7485 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
7486 o->op_private |= OPpRUNTIME;
7491 Perl_ck_method(pTHX_ OP *o)
7493 OP * const kid = cUNOPo->op_first;
7495 PERL_ARGS_ASSERT_CK_METHOD;
7497 if (kid->op_type == OP_CONST) {
7498 SV* sv = kSVOP->op_sv;
7499 const char * const method = SvPVX_const(sv);
7500 if (!(strchr(method, ':') || strchr(method, '\''))) {
7502 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
7503 sv = newSVpvn_share(method, SvCUR(sv), 0);
7506 kSVOP->op_sv = NULL;
7508 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
7510 op_getmad(o,cmop,'O');
7521 Perl_ck_null(pTHX_ OP *o)
7523 PERL_ARGS_ASSERT_CK_NULL;
7524 PERL_UNUSED_CONTEXT;
7529 Perl_ck_open(pTHX_ OP *o)
7532 HV * const table = GvHV(PL_hintgv);
7534 PERL_ARGS_ASSERT_CK_OPEN;
7537 SV **svp = hv_fetchs(table, "open_IN", FALSE);
7540 const char *d = SvPV_const(*svp, len);
7541 const I32 mode = mode_from_discipline(d, len);
7542 if (mode & O_BINARY)
7543 o->op_private |= OPpOPEN_IN_RAW;
7544 else if (mode & O_TEXT)
7545 o->op_private |= OPpOPEN_IN_CRLF;
7548 svp = hv_fetchs(table, "open_OUT", FALSE);
7551 const char *d = SvPV_const(*svp, len);
7552 const I32 mode = mode_from_discipline(d, len);
7553 if (mode & O_BINARY)
7554 o->op_private |= OPpOPEN_OUT_RAW;
7555 else if (mode & O_TEXT)
7556 o->op_private |= OPpOPEN_OUT_CRLF;
7559 if (o->op_type == OP_BACKTICK) {
7560 if (!(o->op_flags & OPf_KIDS)) {
7561 OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
7563 op_getmad(o,newop,'O');
7572 /* In case of three-arg dup open remove strictness
7573 * from the last arg if it is a bareword. */
7574 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
7575 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
7579 if ((last->op_type == OP_CONST) && /* The bareword. */
7580 (last->op_private & OPpCONST_BARE) &&
7581 (last->op_private & OPpCONST_STRICT) &&
7582 (oa = first->op_sibling) && /* The fh. */
7583 (oa = oa->op_sibling) && /* The mode. */
7584 (oa->op_type == OP_CONST) &&
7585 SvPOK(((SVOP*)oa)->op_sv) &&
7586 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
7587 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
7588 (last == oa->op_sibling)) /* The bareword. */
7589 last->op_private &= ~OPpCONST_STRICT;
7595 Perl_ck_repeat(pTHX_ OP *o)
7597 PERL_ARGS_ASSERT_CK_REPEAT;
7599 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
7600 o->op_private |= OPpREPEAT_DOLIST;
7601 cBINOPo->op_first = force_list(cBINOPo->op_first);
7609 Perl_ck_require(pTHX_ OP *o)
7614 PERL_ARGS_ASSERT_CK_REQUIRE;
7616 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
7617 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7619 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7620 SV * const sv = kid->op_sv;
7621 U32 was_readonly = SvREADONLY(sv);
7628 sv_force_normal_flags(sv, 0);
7629 assert(!SvREADONLY(sv));
7639 for (; s < end; s++) {
7640 if (*s == ':' && s[1] == ':') {
7642 Move(s+2, s+1, end - s - 1, char);
7647 sv_catpvs(sv, ".pm");
7648 SvFLAGS(sv) |= was_readonly;
7652 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
7653 /* handle override, if any */
7654 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
7655 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7656 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
7657 gv = gvp ? *gvp : NULL;
7661 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7662 OP * const kid = cUNOPo->op_first;
7665 cUNOPo->op_first = 0;
7669 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
7670 append_elem(OP_LIST, kid,
7671 scalar(newUNOP(OP_RV2CV, 0,
7674 op_getmad(o,newop,'O');
7678 return scalar(ck_fun(o));
7682 Perl_ck_return(pTHX_ OP *o)
7687 PERL_ARGS_ASSERT_CK_RETURN;
7689 kid = cLISTOPo->op_first->op_sibling;
7690 if (CvLVALUE(PL_compcv)) {
7691 for (; kid; kid = kid->op_sibling)
7692 mod(kid, OP_LEAVESUBLV);
7694 for (; kid; kid = kid->op_sibling)
7695 if ((kid->op_type == OP_NULL)
7696 && ((kid->op_flags & (OPf_SPECIAL|OPf_KIDS)) == (OPf_SPECIAL|OPf_KIDS))) {
7697 /* This is a do block */
7698 OP *op = kUNOP->op_first;
7699 if (op->op_type == OP_LEAVE && op->op_flags & OPf_KIDS) {
7700 op = cUNOPx(op)->op_first;
7701 assert(op->op_type == OP_ENTER && !(op->op_flags & OPf_SPECIAL));
7702 /* Force the use of the caller's context */
7703 op->op_flags |= OPf_SPECIAL;
7712 Perl_ck_select(pTHX_ OP *o)
7717 PERL_ARGS_ASSERT_CK_SELECT;
7719 if (o->op_flags & OPf_KIDS) {
7720 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7721 if (kid && kid->op_sibling) {
7722 o->op_type = OP_SSELECT;
7723 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
7725 return fold_constants(o);
7729 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7730 if (kid && kid->op_type == OP_RV2GV)
7731 kid->op_private &= ~HINT_STRICT_REFS;
7736 Perl_ck_shift(pTHX_ OP *o)
7739 const I32 type = o->op_type;
7741 PERL_ARGS_ASSERT_CK_SHIFT;
7743 if (!(o->op_flags & OPf_KIDS)) {
7746 if (!CvUNIQUE(PL_compcv)) {
7747 o->op_flags |= OPf_SPECIAL;
7751 argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
7753 OP * const oldo = o;
7754 o = newUNOP(type, 0, scalar(argop));
7755 op_getmad(oldo,o,'O');
7759 return newUNOP(type, 0, scalar(argop));
7762 return scalar(modkids(ck_fun(o), type));
7766 Perl_ck_sort(pTHX_ OP *o)
7771 PERL_ARGS_ASSERT_CK_SORT;
7773 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
7774 HV * const hinthv = GvHV(PL_hintgv);
7776 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
7778 const I32 sorthints = (I32)SvIV(*svp);
7779 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
7780 o->op_private |= OPpSORT_QSORT;
7781 if ((sorthints & HINT_SORT_STABLE) != 0)
7782 o->op_private |= OPpSORT_STABLE;
7787 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
7789 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7790 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
7792 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
7794 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
7796 if (kid->op_type == OP_SCOPE) {
7800 else if (kid->op_type == OP_LEAVE) {
7801 if (o->op_type == OP_SORT) {
7802 op_null(kid); /* wipe out leave */
7805 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
7806 if (k->op_next == kid)
7808 /* don't descend into loops */
7809 else if (k->op_type == OP_ENTERLOOP
7810 || k->op_type == OP_ENTERITER)
7812 k = cLOOPx(k)->op_lastop;
7817 kid->op_next = 0; /* just disconnect the leave */
7818 k = kLISTOP->op_first;
7823 if (o->op_type == OP_SORT) {
7824 /* provide scalar context for comparison function/block */
7830 o->op_flags |= OPf_SPECIAL;
7832 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
7835 firstkid = firstkid->op_sibling;
7838 /* provide list context for arguments */
7839 if (o->op_type == OP_SORT)
7846 S_simplify_sort(pTHX_ OP *o)
7849 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7855 PERL_ARGS_ASSERT_SIMPLIFY_SORT;
7857 if (!(o->op_flags & OPf_STACKED))
7859 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
7860 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
7861 kid = kUNOP->op_first; /* get past null */
7862 if (kid->op_type != OP_SCOPE)
7864 kid = kLISTOP->op_last; /* get past scope */
7865 switch(kid->op_type) {
7873 k = kid; /* remember this node*/
7874 if (kBINOP->op_first->op_type != OP_RV2SV)
7876 kid = kBINOP->op_first; /* get past cmp */
7877 if (kUNOP->op_first->op_type != OP_GV)
7879 kid = kUNOP->op_first; /* get past rv2sv */
7881 if (GvSTASH(gv) != PL_curstash)
7883 gvname = GvNAME(gv);
7884 if (*gvname == 'a' && gvname[1] == '\0')
7886 else if (*gvname == 'b' && gvname[1] == '\0')
7891 kid = k; /* back to cmp */
7892 if (kBINOP->op_last->op_type != OP_RV2SV)
7894 kid = kBINOP->op_last; /* down to 2nd arg */
7895 if (kUNOP->op_first->op_type != OP_GV)
7897 kid = kUNOP->op_first; /* get past rv2sv */
7899 if (GvSTASH(gv) != PL_curstash)
7901 gvname = GvNAME(gv);
7903 ? !(*gvname == 'a' && gvname[1] == '\0')
7904 : !(*gvname == 'b' && gvname[1] == '\0'))
7906 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
7908 o->op_private |= OPpSORT_DESCEND;
7909 if (k->op_type == OP_NCMP)
7910 o->op_private |= OPpSORT_NUMERIC;
7911 if (k->op_type == OP_I_NCMP)
7912 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
7913 kid = cLISTOPo->op_first->op_sibling;
7914 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
7916 op_getmad(kid,o,'S'); /* then delete it */
7918 op_free(kid); /* then delete it */
7923 Perl_ck_split(pTHX_ OP *o)
7928 PERL_ARGS_ASSERT_CK_SPLIT;
7930 if (o->op_flags & OPf_STACKED)
7931 return no_fh_allowed(o);
7933 kid = cLISTOPo->op_first;
7934 if (kid->op_type != OP_NULL)
7935 Perl_croak(aTHX_ "panic: ck_split");
7936 kid = kid->op_sibling;
7937 op_free(cLISTOPo->op_first);
7938 cLISTOPo->op_first = kid;
7940 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
7941 cLISTOPo->op_last = kid; /* There was only one element previously */
7944 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
7945 OP * const sibl = kid->op_sibling;
7946 kid->op_sibling = 0;
7947 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
7948 if (cLISTOPo->op_first == cLISTOPo->op_last)
7949 cLISTOPo->op_last = kid;
7950 cLISTOPo->op_first = kid;
7951 kid->op_sibling = sibl;
7954 kid->op_type = OP_PUSHRE;
7955 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
7957 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
7958 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
7959 "Use of /g modifier is meaningless in split");
7962 if (!kid->op_sibling)
7963 append_elem(OP_SPLIT, o, newDEFSVOP());
7965 kid = kid->op_sibling;
7968 if (!kid->op_sibling)
7969 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
7970 assert(kid->op_sibling);
7972 kid = kid->op_sibling;
7975 if (kid->op_sibling)
7976 return too_many_arguments(o,OP_DESC(o));
7982 Perl_ck_join(pTHX_ OP *o)
7984 const OP * const kid = cLISTOPo->op_first->op_sibling;
7986 PERL_ARGS_ASSERT_CK_JOIN;
7988 if (kid && kid->op_type == OP_MATCH) {
7989 if (ckWARN(WARN_SYNTAX)) {
7990 const REGEXP *re = PM_GETRE(kPMOP);
7991 const char *pmstr = re ? RX_PRECOMP_const(re) : "STRING";
7992 const STRLEN len = re ? RX_PRELEN(re) : 6;
7993 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7994 "/%.*s/ should probably be written as \"%.*s\"",
7995 (int)len, pmstr, (int)len, pmstr);
8002 Perl_ck_subr(pTHX_ OP *o)
8005 OP *prev = ((cUNOPo->op_first->op_sibling)
8006 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
8007 OP *o2 = prev->op_sibling;
8009 const char *proto = NULL;
8010 const char *proto_end = NULL;
8015 I32 contextclass = 0;
8016 const char *e = NULL;
8019 PERL_ARGS_ASSERT_CK_SUBR;
8021 o->op_private |= OPpENTERSUB_HASTARG;
8022 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
8023 if (cvop->op_type == OP_RV2CV) {
8024 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
8025 op_null(cvop); /* disable rv2cv */
8026 if (!(o->op_private & OPpENTERSUB_AMPER)) {
8027 SVOP *tmpop = (SVOP*)((UNOP*)cvop)->op_first;
8029 switch (tmpop->op_type) {
8031 gv = cGVOPx_gv(tmpop);
8034 tmpop->op_private |= OPpEARLY_CV;
8037 SV *sv = cSVOPx_sv(tmpop);
8038 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV)
8042 if (cv && SvPOK(cv)) {
8044 namegv = gv && CvANON(cv) ? gv : CvGV(cv);
8045 proto = SvPV(MUTABLE_SV(cv), len);
8046 proto_end = proto + len;
8050 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
8051 if (o2->op_type == OP_CONST)
8052 o2->op_private &= ~OPpCONST_STRICT;
8053 else if (o2->op_type == OP_LIST) {
8054 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
8055 if (sib && sib->op_type == OP_CONST)
8056 sib->op_private &= ~OPpCONST_STRICT;
8059 o->op_private |= (PL_hints & HINT_STRICT_REFS);
8060 if (PERLDB_SUB && PL_curstash != PL_debstash)
8061 o->op_private |= OPpENTERSUB_DB;
8062 while (o2 != cvop) {
8064 if (PL_madskills && o2->op_type == OP_STUB) {
8065 o2 = o2->op_sibling;
8068 if (PL_madskills && o2->op_type == OP_NULL)
8069 o3 = ((UNOP*)o2)->op_first;
8073 if (proto >= proto_end)
8074 return too_many_arguments(o, gv_ename(namegv));
8082 /* _ must be at the end */
8083 if (proto[1] && proto[1] != ';')
8098 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
8100 arg == 1 ? "block or sub {}" : "sub {}",
8101 gv_ename(namegv), o3);
8104 /* '*' allows any scalar type, including bareword */
8107 if (o3->op_type == OP_RV2GV)
8108 goto wrapref; /* autoconvert GLOB -> GLOBref */
8109 else if (o3->op_type == OP_CONST)
8110 o3->op_private &= ~OPpCONST_STRICT;
8111 else if (o3->op_type == OP_ENTERSUB) {
8112 /* accidental subroutine, revert to bareword */
8113 OP *gvop = ((UNOP*)o3)->op_first;
8114 if (gvop && gvop->op_type == OP_NULL) {
8115 gvop = ((UNOP*)gvop)->op_first;
8117 for (; gvop->op_sibling; gvop = gvop->op_sibling)
8120 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
8121 (gvop = ((UNOP*)gvop)->op_first) &&
8122 gvop->op_type == OP_GV)
8124 GV * const gv = cGVOPx_gv(gvop);
8125 OP * const sibling = o2->op_sibling;
8126 SV * const n = newSVpvs("");
8128 OP * const oldo2 = o2;
8132 gv_fullname4(n, gv, "", FALSE);
8133 o2 = newSVOP(OP_CONST, 0, n);
8134 op_getmad(oldo2,o2,'O');
8135 prev->op_sibling = o2;
8136 o2->op_sibling = sibling;
8152 if (contextclass++ == 0) {
8153 e = strchr(proto, ']');
8154 if (!e || e == proto)
8163 const char *p = proto;
8164 const char *const end = proto;
8166 while (*--p != '[') {}
8167 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
8169 gv_ename(namegv), o3);
8174 if (o3->op_type == OP_RV2GV)
8177 bad_type(arg, "symbol", gv_ename(namegv), o3);
8180 if (o3->op_type == OP_ENTERSUB)
8183 bad_type(arg, "subroutine entry", gv_ename(namegv),
8187 if (o3->op_type == OP_RV2SV ||
8188 o3->op_type == OP_PADSV ||
8189 o3->op_type == OP_HELEM ||
8190 o3->op_type == OP_AELEM)
8193 bad_type(arg, "scalar", gv_ename(namegv), o3);
8196 if (o3->op_type == OP_RV2AV ||
8197 o3->op_type == OP_PADAV)
8200 bad_type(arg, "array", gv_ename(namegv), o3);
8203 if (o3->op_type == OP_RV2HV ||
8204 o3->op_type == OP_PADHV)
8207 bad_type(arg, "hash", gv_ename(namegv), o3);
8212 OP* const sib = kid->op_sibling;
8213 kid->op_sibling = 0;
8214 o2 = newUNOP(OP_REFGEN, 0, kid);
8215 o2->op_sibling = sib;
8216 prev->op_sibling = o2;
8218 if (contextclass && e) {
8233 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
8234 gv_ename(namegv), SVfARG(cv));
8239 mod(o2, OP_ENTERSUB);
8241 o2 = o2->op_sibling;
8243 if (o2 == cvop && proto && *proto == '_') {
8244 /* generate an access to $_ */
8246 o2->op_sibling = prev->op_sibling;
8247 prev->op_sibling = o2; /* instead of cvop */
8249 if (proto && !optional && proto_end > proto &&
8250 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
8251 return too_few_arguments(o, gv_ename(namegv));
8254 OP * const oldo = o;
8258 o=newSVOP(OP_CONST, 0, newSViv(0));
8259 op_getmad(oldo,o,'O');
8265 Perl_ck_svconst(pTHX_ OP *o)
8267 PERL_ARGS_ASSERT_CK_SVCONST;
8268 PERL_UNUSED_CONTEXT;
8269 SvREADONLY_on(cSVOPo->op_sv);
8274 Perl_ck_chdir(pTHX_ OP *o)
8276 if (o->op_flags & OPf_KIDS) {
8277 SVOP * const kid = (SVOP*)cUNOPo->op_first;
8279 if (kid && kid->op_type == OP_CONST &&
8280 (kid->op_private & OPpCONST_BARE))
8282 o->op_flags |= OPf_SPECIAL;
8283 kid->op_private &= ~OPpCONST_STRICT;
8290 Perl_ck_trunc(pTHX_ OP *o)
8292 PERL_ARGS_ASSERT_CK_TRUNC;
8294 if (o->op_flags & OPf_KIDS) {
8295 SVOP *kid = (SVOP*)cUNOPo->op_first;
8297 if (kid->op_type == OP_NULL)
8298 kid = (SVOP*)kid->op_sibling;
8299 if (kid && kid->op_type == OP_CONST &&
8300 (kid->op_private & OPpCONST_BARE))
8302 o->op_flags |= OPf_SPECIAL;
8303 kid->op_private &= ~OPpCONST_STRICT;
8310 Perl_ck_unpack(pTHX_ OP *o)
8312 OP *kid = cLISTOPo->op_first;
8314 PERL_ARGS_ASSERT_CK_UNPACK;
8316 if (kid->op_sibling) {
8317 kid = kid->op_sibling;
8318 if (!kid->op_sibling)
8319 kid->op_sibling = newDEFSVOP();
8325 Perl_ck_substr(pTHX_ OP *o)
8327 PERL_ARGS_ASSERT_CK_SUBSTR;
8330 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
8331 OP *kid = cLISTOPo->op_first;
8333 if (kid->op_type == OP_NULL)
8334 kid = kid->op_sibling;
8336 kid->op_flags |= OPf_MOD;
8343 Perl_ck_each(pTHX_ OP *o)
8346 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
8348 PERL_ARGS_ASSERT_CK_EACH;
8351 if (kid->op_type == OP_PADAV || kid->op_type == OP_RV2AV) {
8352 const unsigned new_type = o->op_type == OP_EACH ? OP_AEACH
8353 : o->op_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
8354 o->op_type = new_type;
8355 o->op_ppaddr = PL_ppaddr[new_type];
8357 else if (!(kid->op_type == OP_PADHV || kid->op_type == OP_RV2HV
8358 || (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE)
8360 bad_type(1, "hash or array", PL_op_desc[o->op_type], kid);
8367 /* caller is supposed to assign the return to the
8368 container of the rep_op var */
8370 S_opt_scalarhv(pTHX_ OP *rep_op) {
8374 PERL_ARGS_ASSERT_OPT_SCALARHV;
8376 NewOp(1101, unop, 1, UNOP);
8377 unop->op_type = (OPCODE)OP_BOOLKEYS;
8378 unop->op_ppaddr = PL_ppaddr[OP_BOOLKEYS];
8379 unop->op_flags = (U8)(OPf_WANT_SCALAR | OPf_KIDS );
8380 unop->op_private = (U8)(1 | ((OPf_WANT_SCALAR | OPf_KIDS) >> 8));
8381 unop->op_first = rep_op;
8382 unop->op_next = rep_op->op_next;
8383 rep_op->op_next = (OP*)unop;
8384 rep_op->op_flags|=(OPf_REF | OPf_MOD);
8385 unop->op_sibling = rep_op->op_sibling;
8386 rep_op->op_sibling = NULL;
8387 /* unop->op_targ = pad_alloc(OP_BOOLKEYS, SVs_PADTMP); */
8388 if (rep_op->op_type == OP_PADHV) {
8389 rep_op->op_flags &= ~OPf_WANT_SCALAR;
8390 rep_op->op_flags |= OPf_WANT_LIST;
8395 /* Checks if o acts as an in-place operator on an array. oright points to the
8396 * beginning of the right-hand side. Returns the left-hand side of the
8397 * assignment if o acts in-place, or NULL otherwise. */
8400 S_is_inplace_av(pTHX_ OP *o, OP *oright) {
8404 PERL_ARGS_ASSERT_IS_INPLACE_AV;
8407 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
8408 || oright->op_next != o
8409 || (oright->op_private & OPpLVAL_INTRO)
8413 /* o2 follows the chain of op_nexts through the LHS of the
8414 * assign (if any) to the aassign op itself */
8416 if (!o2 || o2->op_type != OP_NULL)
8419 if (!o2 || o2->op_type != OP_PUSHMARK)
8422 if (o2 && o2->op_type == OP_GV)
8425 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8426 || (o2->op_private & OPpLVAL_INTRO)
8431 if (!o2 || o2->op_type != OP_NULL)
8434 if (!o2 || o2->op_type != OP_AASSIGN
8435 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8438 /* check that the sort is the first arg on RHS of assign */
8440 o2 = cUNOPx(o2)->op_first;
8441 if (!o2 || o2->op_type != OP_NULL)
8443 o2 = cUNOPx(o2)->op_first;
8444 if (!o2 || o2->op_type != OP_PUSHMARK)
8446 if (o2->op_sibling != o)
8449 /* check the array is the same on both sides */
8450 if (oleft->op_type == OP_RV2AV) {
8451 if (oright->op_type != OP_RV2AV
8452 || !cUNOPx(oright)->op_first
8453 || cUNOPx(oright)->op_first->op_type != OP_GV
8454 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8455 cGVOPx_gv(cUNOPx(oright)->op_first)
8459 else if (oright->op_type != OP_PADAV
8460 || oright->op_targ != oleft->op_targ
8467 /* A peephole optimizer. We visit the ops in the order they're to execute.
8468 * See the comments at the top of this file for more details about when
8469 * peep() is called */
8472 Perl_peep(pTHX_ register OP *o)
8475 register OP* oldop = NULL;
8477 if (!o || o->op_opt)
8481 SAVEVPTR(PL_curcop);
8482 for (; o; o = o->op_next) {
8485 /* By default, this op has now been optimised. A couple of cases below
8486 clear this again. */
8489 switch (o->op_type) {
8492 PL_curcop = ((COP*)o); /* for warnings */
8496 if (cSVOPo->op_private & OPpCONST_STRICT)
8497 no_bareword_allowed(o);
8500 case OP_METHOD_NAMED:
8501 /* Relocate sv to the pad for thread safety.
8502 * Despite being a "constant", the SV is written to,
8503 * for reference counts, sv_upgrade() etc. */
8505 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
8506 if (o->op_type != OP_METHOD_NAMED && SvPADTMP(cSVOPo->op_sv)) {
8507 /* If op_sv is already a PADTMP then it is being used by
8508 * some pad, so make a copy. */
8509 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
8510 SvREADONLY_on(PAD_SVl(ix));
8511 SvREFCNT_dec(cSVOPo->op_sv);
8513 else if (o->op_type != OP_METHOD_NAMED
8514 && cSVOPo->op_sv == &PL_sv_undef) {
8515 /* PL_sv_undef is hack - it's unsafe to store it in the
8516 AV that is the pad, because av_fetch treats values of
8517 PL_sv_undef as a "free" AV entry and will merrily
8518 replace them with a new SV, causing pad_alloc to think
8519 that this pad slot is free. (When, clearly, it is not)
8521 SvOK_off(PAD_SVl(ix));
8522 SvPADTMP_on(PAD_SVl(ix));
8523 SvREADONLY_on(PAD_SVl(ix));
8526 SvREFCNT_dec(PAD_SVl(ix));
8527 SvPADTMP_on(cSVOPo->op_sv);
8528 PAD_SETSV(ix, cSVOPo->op_sv);
8529 /* XXX I don't know how this isn't readonly already. */
8530 SvREADONLY_on(PAD_SVl(ix));
8532 cSVOPo->op_sv = NULL;
8539 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
8540 if (o->op_next->op_private & OPpTARGET_MY) {
8541 if (o->op_flags & OPf_STACKED) /* chained concats */
8542 break; /* ignore_optimization */
8544 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
8545 o->op_targ = o->op_next->op_targ;
8546 o->op_next->op_targ = 0;
8547 o->op_private |= OPpTARGET_MY;
8550 op_null(o->op_next);
8554 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
8555 break; /* Scalar stub must produce undef. List stub is noop */
8559 if (o->op_targ == OP_NEXTSTATE
8560 || o->op_targ == OP_DBSTATE)
8562 PL_curcop = ((COP*)o);
8564 /* XXX: We avoid setting op_seq here to prevent later calls
8565 to peep() from mistakenly concluding that optimisation
8566 has already occurred. This doesn't fix the real problem,
8567 though (See 20010220.007). AMS 20010719 */
8568 /* op_seq functionality is now replaced by op_opt */
8575 if (oldop && o->op_next) {
8576 oldop->op_next = o->op_next;
8584 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
8585 OP* const pop = (o->op_type == OP_PADAV) ?
8586 o->op_next : o->op_next->op_next;
8588 if (pop && pop->op_type == OP_CONST &&
8589 ((PL_op = pop->op_next)) &&
8590 pop->op_next->op_type == OP_AELEM &&
8591 !(pop->op_next->op_private &
8592 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
8593 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
8598 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
8599 no_bareword_allowed(pop);
8600 if (o->op_type == OP_GV)
8601 op_null(o->op_next);
8602 op_null(pop->op_next);
8604 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
8605 o->op_next = pop->op_next->op_next;
8606 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
8607 o->op_private = (U8)i;
8608 if (o->op_type == OP_GV) {
8613 o->op_flags |= OPf_SPECIAL;
8614 o->op_type = OP_AELEMFAST;
8619 if (o->op_next->op_type == OP_RV2SV) {
8620 if (!(o->op_next->op_private & OPpDEREF)) {
8621 op_null(o->op_next);
8622 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
8624 o->op_next = o->op_next->op_next;
8625 o->op_type = OP_GVSV;
8626 o->op_ppaddr = PL_ppaddr[OP_GVSV];
8629 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
8630 GV * const gv = cGVOPo_gv;
8631 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
8632 /* XXX could check prototype here instead of just carping */
8633 SV * const sv = sv_newmortal();
8634 gv_efullname3(sv, gv, NULL);
8635 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
8636 "%"SVf"() called too early to check prototype",
8640 else if (o->op_next->op_type == OP_READLINE
8641 && o->op_next->op_next->op_type == OP_CONCAT
8642 && (o->op_next->op_next->op_flags & OPf_STACKED))
8644 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
8645 o->op_type = OP_RCATLINE;
8646 o->op_flags |= OPf_STACKED;
8647 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
8648 op_null(o->op_next->op_next);
8649 op_null(o->op_next);
8659 fop = cUNOP->op_first;
8667 fop = cLOGOP->op_first;
8668 sop = fop->op_sibling;
8669 while (cLOGOP->op_other->op_type == OP_NULL)
8670 cLOGOP->op_other = cLOGOP->op_other->op_next;
8671 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
8675 if ((fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
8677 (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV)
8682 if (!((nop->op_flags & OPf_WANT) == OPf_WANT_VOID)) {
8683 while (nop && nop->op_next) {
8684 switch (nop->op_next->op_type) {
8689 lop = nop = nop->op_next;
8700 if ((lop->op_flags & OPf_WANT) == OPf_WANT_VOID) {
8701 if (fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
8702 cLOGOP->op_first = opt_scalarhv(fop);
8703 if (sop && (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV))
8704 cLOGOP->op_first->op_sibling = opt_scalarhv(sop);
8720 while (cLOGOP->op_other->op_type == OP_NULL)
8721 cLOGOP->op_other = cLOGOP->op_other->op_next;
8722 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
8727 while (cLOOP->op_redoop->op_type == OP_NULL)
8728 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
8729 peep(cLOOP->op_redoop);
8730 while (cLOOP->op_nextop->op_type == OP_NULL)
8731 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
8732 peep(cLOOP->op_nextop);
8733 while (cLOOP->op_lastop->op_type == OP_NULL)
8734 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
8735 peep(cLOOP->op_lastop);
8739 assert(!(cPMOP->op_pmflags & PMf_ONCE));
8740 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
8741 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
8742 cPMOP->op_pmstashstartu.op_pmreplstart
8743 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
8744 peep(cPMOP->op_pmstashstartu.op_pmreplstart);
8748 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
8749 && ckWARN(WARN_SYNTAX))
8751 if (o->op_next->op_sibling) {
8752 const OPCODE type = o->op_next->op_sibling->op_type;
8753 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
8754 const line_t oldline = CopLINE(PL_curcop);
8755 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
8756 Perl_warner(aTHX_ packWARN(WARN_EXEC),
8757 "Statement unlikely to be reached");
8758 Perl_warner(aTHX_ packWARN(WARN_EXEC),
8759 "\t(Maybe you meant system() when you said exec()?)\n");
8760 CopLINE_set(PL_curcop, oldline);
8771 const char *key = NULL;
8774 if (((BINOP*)o)->op_last->op_type != OP_CONST)
8777 /* Make the CONST have a shared SV */
8778 svp = cSVOPx_svp(((BINOP*)o)->op_last);
8779 if (!SvFAKE(sv = *svp) || !SvREADONLY(sv)) {
8780 key = SvPV_const(sv, keylen);
8781 lexname = newSVpvn_share(key,
8782 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
8788 if ((o->op_private & (OPpLVAL_INTRO)))
8791 rop = (UNOP*)((BINOP*)o)->op_first;
8792 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
8794 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
8795 if (!SvPAD_TYPED(lexname))
8797 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8798 if (!fields || !GvHV(*fields))
8800 key = SvPV_const(*svp, keylen);
8801 if (!hv_fetch(GvHV(*fields), key,
8802 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8804 Perl_croak(aTHX_ "No such class field \"%s\" "
8805 "in variable %s of type %s",
8806 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
8819 SVOP *first_key_op, *key_op;
8821 if ((o->op_private & (OPpLVAL_INTRO))
8822 /* I bet there's always a pushmark... */
8823 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
8824 /* hmmm, no optimization if list contains only one key. */
8826 rop = (UNOP*)((LISTOP*)o)->op_last;
8827 if (rop->op_type != OP_RV2HV)
8829 if (rop->op_first->op_type == OP_PADSV)
8830 /* @$hash{qw(keys here)} */
8831 rop = (UNOP*)rop->op_first;
8833 /* @{$hash}{qw(keys here)} */
8834 if (rop->op_first->op_type == OP_SCOPE
8835 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
8837 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
8843 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
8844 if (!SvPAD_TYPED(lexname))
8846 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8847 if (!fields || !GvHV(*fields))
8849 /* Again guessing that the pushmark can be jumped over.... */
8850 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
8851 ->op_first->op_sibling;
8852 for (key_op = first_key_op; key_op;
8853 key_op = (SVOP*)key_op->op_sibling) {
8854 if (key_op->op_type != OP_CONST)
8856 svp = cSVOPx_svp(key_op);
8857 key = SvPV_const(*svp, keylen);
8858 if (!hv_fetch(GvHV(*fields), key,
8859 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8861 Perl_croak(aTHX_ "No such class field \"%s\" "
8862 "in variable %s of type %s",
8863 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
8870 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
8874 /* check that RHS of sort is a single plain array */
8875 OP *oright = cUNOPo->op_first;
8876 if (!oright || oright->op_type != OP_PUSHMARK)
8879 /* reverse sort ... can be optimised. */
8880 if (!cUNOPo->op_sibling) {
8881 /* Nothing follows us on the list. */
8882 OP * const reverse = o->op_next;
8884 if (reverse->op_type == OP_REVERSE &&
8885 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
8886 OP * const pushmark = cUNOPx(reverse)->op_first;
8887 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
8888 && (cUNOPx(pushmark)->op_sibling == o)) {
8889 /* reverse -> pushmark -> sort */
8890 o->op_private |= OPpSORT_REVERSE;
8892 pushmark->op_next = oright->op_next;
8898 /* make @a = sort @a act in-place */
8900 oright = cUNOPx(oright)->op_sibling;
8903 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
8904 oright = cUNOPx(oright)->op_sibling;
8907 oleft = is_inplace_av(o, oright);
8911 /* transfer MODishness etc from LHS arg to RHS arg */
8912 oright->op_flags = oleft->op_flags;
8913 o->op_private |= OPpSORT_INPLACE;
8915 /* excise push->gv->rv2av->null->aassign */
8916 o2 = o->op_next->op_next;
8917 op_null(o2); /* PUSHMARK */
8919 if (o2->op_type == OP_GV) {
8920 op_null(o2); /* GV */
8923 op_null(o2); /* RV2AV or PADAV */
8924 o2 = o2->op_next->op_next;
8925 op_null(o2); /* AASSIGN */
8927 o->op_next = o2->op_next;
8933 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
8936 LISTOP *enter, *exlist;
8938 /* @a = reverse @a */
8939 if ((oright = cLISTOPo->op_first)
8940 && (oright->op_type == OP_PUSHMARK)
8941 && (oright = oright->op_sibling)
8942 && (oleft = is_inplace_av(o, oright))) {
8945 /* transfer MODishness etc from LHS arg to RHS arg */
8946 oright->op_flags = oleft->op_flags;
8947 o->op_private |= OPpREVERSE_INPLACE;
8949 /* excise push->gv->rv2av->null->aassign */
8950 o2 = o->op_next->op_next;
8951 op_null(o2); /* PUSHMARK */
8953 if (o2->op_type == OP_GV) {
8954 op_null(o2); /* GV */
8957 op_null(o2); /* RV2AV or PADAV */
8958 o2 = o2->op_next->op_next;
8959 op_null(o2); /* AASSIGN */
8961 o->op_next = o2->op_next;
8965 enter = (LISTOP *) o->op_next;
8968 if (enter->op_type == OP_NULL) {
8969 enter = (LISTOP *) enter->op_next;
8973 /* for $a (...) will have OP_GV then OP_RV2GV here.
8974 for (...) just has an OP_GV. */
8975 if (enter->op_type == OP_GV) {
8976 gvop = (OP *) enter;
8977 enter = (LISTOP *) enter->op_next;
8980 if (enter->op_type == OP_RV2GV) {
8981 enter = (LISTOP *) enter->op_next;
8987 if (enter->op_type != OP_ENTERITER)
8990 iter = enter->op_next;
8991 if (!iter || iter->op_type != OP_ITER)
8994 expushmark = enter->op_first;
8995 if (!expushmark || expushmark->op_type != OP_NULL
8996 || expushmark->op_targ != OP_PUSHMARK)
8999 exlist = (LISTOP *) expushmark->op_sibling;
9000 if (!exlist || exlist->op_type != OP_NULL
9001 || exlist->op_targ != OP_LIST)
9004 if (exlist->op_last != o) {
9005 /* Mmm. Was expecting to point back to this op. */
9008 theirmark = exlist->op_first;
9009 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
9012 if (theirmark->op_sibling != o) {
9013 /* There's something between the mark and the reverse, eg
9014 for (1, reverse (...))
9019 ourmark = ((LISTOP *)o)->op_first;
9020 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
9023 ourlast = ((LISTOP *)o)->op_last;
9024 if (!ourlast || ourlast->op_next != o)
9027 rv2av = ourmark->op_sibling;
9028 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
9029 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
9030 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
9031 /* We're just reversing a single array. */
9032 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
9033 enter->op_flags |= OPf_STACKED;
9036 /* We don't have control over who points to theirmark, so sacrifice
9038 theirmark->op_next = ourmark->op_next;
9039 theirmark->op_flags = ourmark->op_flags;
9040 ourlast->op_next = gvop ? gvop : (OP *) enter;
9043 enter->op_private |= OPpITER_REVERSED;
9044 iter->op_private |= OPpITER_REVERSED;
9051 UNOP *refgen, *rv2cv;
9054 if ((o->op_flags & OPf_WANT) != OPf_WANT_VOID)
9057 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
9060 rv2gv = ((BINOP *)o)->op_last;
9061 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
9064 refgen = (UNOP *)((BINOP *)o)->op_first;
9066 if (!refgen || refgen->op_type != OP_REFGEN)
9069 exlist = (LISTOP *)refgen->op_first;
9070 if (!exlist || exlist->op_type != OP_NULL
9071 || exlist->op_targ != OP_LIST)
9074 if (exlist->op_first->op_type != OP_PUSHMARK)
9077 rv2cv = (UNOP*)exlist->op_last;
9079 if (rv2cv->op_type != OP_RV2CV)
9082 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
9083 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
9084 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
9086 o->op_private |= OPpASSIGN_CV_TO_GV;
9087 rv2gv->op_private |= OPpDONT_INIT_GV;
9088 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
9096 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
9097 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
9107 Perl_custom_op_name(pTHX_ const OP* o)
9110 const IV index = PTR2IV(o->op_ppaddr);
9114 PERL_ARGS_ASSERT_CUSTOM_OP_NAME;
9116 if (!PL_custom_op_names) /* This probably shouldn't happen */
9117 return (char *)PL_op_name[OP_CUSTOM];
9119 keysv = sv_2mortal(newSViv(index));
9121 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
9123 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
9125 return SvPV_nolen(HeVAL(he));
9129 Perl_custom_op_desc(pTHX_ const OP* o)
9132 const IV index = PTR2IV(o->op_ppaddr);
9136 PERL_ARGS_ASSERT_CUSTOM_OP_DESC;
9138 if (!PL_custom_op_descs)
9139 return (char *)PL_op_desc[OP_CUSTOM];
9141 keysv = sv_2mortal(newSViv(index));
9143 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
9145 return (char *)PL_op_desc[OP_CUSTOM];
9147 return SvPV_nolen(HeVAL(he));
9152 /* Efficient sub that returns a constant scalar value. */
9154 const_sv_xsub(pTHX_ CV* cv)
9158 SV *const sv = MUTABLE_SV(XSANY.any_ptr);
9162 /* diag_listed_as: SKIPME */
9163 Perl_croak(aTHX_ "usage: %s::%s()",
9164 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
9177 * c-indentation-style: bsd
9179 * indent-tabs-mode: t
9182 * ex: set ts=8 sts=4 sw=4 noet: