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;
565 case OP_ENTEREVAL: /* Was holding hints. */
569 if (!(o->op_flags & OPf_REF)
570 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
576 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
577 /* not an OP_PADAV replacement */
578 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
583 /* It's possible during global destruction that the GV is freed
584 before the optree. Whilst the SvREFCNT_inc is happy to bump from
585 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
586 will trigger an assertion failure, because the entry to sv_clear
587 checks that the scalar is not already freed. A check of for
588 !SvIS_FREED(gv) turns out to be invalid, because during global
589 destruction the reference count can be forced down to zero
590 (with SVf_BREAK set). In which case raising to 1 and then
591 dropping to 0 triggers cleanup before it should happen. I
592 *think* that this might actually be a general, systematic,
593 weakness of the whole idea of SVf_BREAK, in that code *is*
594 allowed to raise and lower references during global destruction,
595 so any *valid* code that happens to do this during global
596 destruction might well trigger premature cleanup. */
597 bool still_valid = gv && SvREFCNT(gv);
600 SvREFCNT_inc_simple_void(gv);
602 if (cPADOPo->op_padix > 0) {
603 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
604 * may still exist on the pad */
605 pad_swipe(cPADOPo->op_padix, TRUE);
606 cPADOPo->op_padix = 0;
609 SvREFCNT_dec(cSVOPo->op_sv);
610 cSVOPo->op_sv = NULL;
613 int try_downgrade = SvREFCNT(gv) == 2;
616 gv_try_downgrade(gv);
620 case OP_METHOD_NAMED:
623 SvREFCNT_dec(cSVOPo->op_sv);
624 cSVOPo->op_sv = NULL;
627 Even if op_clear does a pad_free for the target of the op,
628 pad_free doesn't actually remove the sv that exists in the pad;
629 instead it lives on. This results in that it could be reused as
630 a target later on when the pad was reallocated.
633 pad_swipe(o->op_targ,1);
642 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
646 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
648 if (cPADOPo->op_padix > 0) {
649 pad_swipe(cPADOPo->op_padix, TRUE);
650 cPADOPo->op_padix = 0;
653 SvREFCNT_dec(cSVOPo->op_sv);
654 cSVOPo->op_sv = NULL;
658 PerlMemShared_free(cPVOPo->op_pv);
659 cPVOPo->op_pv = NULL;
663 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
667 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
668 /* No GvIN_PAD_off here, because other references may still
669 * exist on the pad */
670 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
673 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
679 forget_pmop(cPMOPo, 1);
680 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
681 /* we use the same protection as the "SAFE" version of the PM_ macros
682 * here since sv_clean_all might release some PMOPs
683 * after PL_regex_padav has been cleared
684 * and the clearing of PL_regex_padav needs to
685 * happen before sv_clean_all
688 if(PL_regex_pad) { /* We could be in destruction */
689 const IV offset = (cPMOPo)->op_pmoffset;
690 ReREFCNT_dec(PM_GETRE(cPMOPo));
691 PL_regex_pad[offset] = &PL_sv_undef;
692 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
696 ReREFCNT_dec(PM_GETRE(cPMOPo));
697 PM_SETRE(cPMOPo, NULL);
703 if (o->op_targ > 0) {
704 pad_free(o->op_targ);
710 S_cop_free(pTHX_ COP* cop)
712 PERL_ARGS_ASSERT_COP_FREE;
716 if (! specialWARN(cop->cop_warnings))
717 PerlMemShared_free(cop->cop_warnings);
718 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
722 S_forget_pmop(pTHX_ PMOP *const o
728 HV * const pmstash = PmopSTASH(o);
730 PERL_ARGS_ASSERT_FORGET_PMOP;
732 if (pmstash && !SvIS_FREED(pmstash)) {
733 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
735 PMOP **const array = (PMOP**) mg->mg_ptr;
736 U32 count = mg->mg_len / sizeof(PMOP**);
741 /* Found it. Move the entry at the end to overwrite it. */
742 array[i] = array[--count];
743 mg->mg_len = count * sizeof(PMOP**);
744 /* Could realloc smaller at this point always, but probably
745 not worth it. Probably worth free()ing if we're the
748 Safefree(mg->mg_ptr);
765 S_find_and_forget_pmops(pTHX_ OP *o)
767 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
769 if (o->op_flags & OPf_KIDS) {
770 OP *kid = cUNOPo->op_first;
772 switch (kid->op_type) {
777 forget_pmop((PMOP*)kid, 0);
779 find_and_forget_pmops(kid);
780 kid = kid->op_sibling;
786 Perl_op_null(pTHX_ OP *o)
790 PERL_ARGS_ASSERT_OP_NULL;
792 if (o->op_type == OP_NULL)
796 o->op_targ = o->op_type;
797 o->op_type = OP_NULL;
798 o->op_ppaddr = PL_ppaddr[OP_NULL];
802 Perl_op_refcnt_lock(pTHX)
810 Perl_op_refcnt_unlock(pTHX)
817 /* Contextualizers */
819 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
822 S_linklist(pTHX_ OP *o)
826 PERL_ARGS_ASSERT_LINKLIST;
831 /* establish postfix order */
832 first = cUNOPo->op_first;
835 o->op_next = LINKLIST(first);
838 if (kid->op_sibling) {
839 kid->op_next = LINKLIST(kid->op_sibling);
840 kid = kid->op_sibling;
854 S_scalarkids(pTHX_ OP *o)
856 if (o && o->op_flags & OPf_KIDS) {
858 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
865 S_scalarboolean(pTHX_ OP *o)
869 PERL_ARGS_ASSERT_SCALARBOOLEAN;
871 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
872 if (ckWARN(WARN_SYNTAX)) {
873 const line_t oldline = CopLINE(PL_curcop);
875 if (PL_parser && PL_parser->copline != NOLINE)
876 CopLINE_set(PL_curcop, PL_parser->copline);
877 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
878 CopLINE_set(PL_curcop, oldline);
885 Perl_scalar(pTHX_ OP *o)
890 /* assumes no premature commitment */
891 if (!o || (PL_parser && PL_parser->error_count)
892 || (o->op_flags & OPf_WANT)
893 || o->op_type == OP_RETURN)
898 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
900 switch (o->op_type) {
902 scalar(cBINOPo->op_first);
907 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
917 if (o->op_flags & OPf_KIDS) {
918 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
924 kid = cLISTOPo->op_first;
926 while ((kid = kid->op_sibling)) {
932 PL_curcop = &PL_compiling;
937 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
943 PL_curcop = &PL_compiling;
946 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
953 Perl_scalarvoid(pTHX_ OP *o)
957 const char* useless = NULL;
961 PERL_ARGS_ASSERT_SCALARVOID;
963 /* trailing mad null ops don't count as "there" for void processing */
965 o->op_type != OP_NULL &&
967 o->op_sibling->op_type == OP_NULL)
970 for (sib = o->op_sibling;
971 sib && sib->op_type == OP_NULL;
972 sib = sib->op_sibling) ;
978 if (o->op_type == OP_NEXTSTATE
979 || o->op_type == OP_DBSTATE
980 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
981 || o->op_targ == OP_DBSTATE)))
982 PL_curcop = (COP*)o; /* for warning below */
984 /* assumes no premature commitment */
985 want = o->op_flags & OPf_WANT;
986 if ((want && want != OPf_WANT_SCALAR)
987 || (PL_parser && PL_parser->error_count)
988 || o->op_type == OP_RETURN)
993 if ((o->op_private & OPpTARGET_MY)
994 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
996 return scalar(o); /* As if inside SASSIGN */
999 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1001 switch (o->op_type) {
1003 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1007 if (o->op_flags & OPf_STACKED)
1011 if (o->op_private == 4)
1054 case OP_GETSOCKNAME:
1055 case OP_GETPEERNAME:
1060 case OP_GETPRIORITY:
1084 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1085 /* Otherwise it's "Useless use of grep iterator" */
1086 useless = OP_DESC(o);
1090 kid = cUNOPo->op_first;
1091 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1092 kid->op_type != OP_TRANS) {
1095 useless = "negative pattern binding (!~)";
1102 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1103 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1104 useless = "a variable";
1109 if (cSVOPo->op_private & OPpCONST_STRICT)
1110 no_bareword_allowed(o);
1112 if (ckWARN(WARN_VOID)) {
1114 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1115 "a constant (%"SVf")", sv));
1116 useless = SvPV_nolen(msv);
1119 useless = "a constant (undef)";
1120 if (o->op_private & OPpCONST_ARYBASE)
1122 /* don't warn on optimised away booleans, eg
1123 * use constant Foo, 5; Foo || print; */
1124 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1126 /* the constants 0 and 1 are permitted as they are
1127 conventionally used as dummies in constructs like
1128 1 while some_condition_with_side_effects; */
1129 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1131 else if (SvPOK(sv)) {
1132 /* perl4's way of mixing documentation and code
1133 (before the invention of POD) was based on a
1134 trick to mix nroff and perl code. The trick was
1135 built upon these three nroff macros being used in
1136 void context. The pink camel has the details in
1137 the script wrapman near page 319. */
1138 const char * const maybe_macro = SvPVX_const(sv);
1139 if (strnEQ(maybe_macro, "di", 2) ||
1140 strnEQ(maybe_macro, "ds", 2) ||
1141 strnEQ(maybe_macro, "ig", 2))
1146 op_null(o); /* don't execute or even remember it */
1150 o->op_type = OP_PREINC; /* pre-increment is faster */
1151 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1155 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1156 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1160 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1161 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1165 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1166 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1171 kid = cLOGOPo->op_first;
1172 if (kid->op_type == OP_NOT
1173 && (kid->op_flags & OPf_KIDS)
1175 if (o->op_type == OP_AND) {
1177 o->op_ppaddr = PL_ppaddr[OP_OR];
1179 o->op_type = OP_AND;
1180 o->op_ppaddr = PL_ppaddr[OP_AND];
1189 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1194 if (o->op_flags & OPf_STACKED)
1201 if (!(o->op_flags & OPf_KIDS))
1212 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1219 /* all requires must return a boolean value */
1220 o->op_flags &= ~OPf_WANT;
1226 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1231 S_listkids(pTHX_ OP *o)
1233 if (o && o->op_flags & OPf_KIDS) {
1235 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1242 Perl_list(pTHX_ OP *o)
1247 /* assumes no premature commitment */
1248 if (!o || (o->op_flags & OPf_WANT)
1249 || (PL_parser && PL_parser->error_count)
1250 || o->op_type == OP_RETURN)
1255 if ((o->op_private & OPpTARGET_MY)
1256 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1258 return o; /* As if inside SASSIGN */
1261 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1263 switch (o->op_type) {
1266 list(cBINOPo->op_first);
1271 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1279 if (!(o->op_flags & OPf_KIDS))
1281 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1282 list(cBINOPo->op_first);
1283 return gen_constant_list(o);
1290 kid = cLISTOPo->op_first;
1292 while ((kid = kid->op_sibling)) {
1293 if (kid->op_sibling)
1298 PL_curcop = &PL_compiling;
1302 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1303 if (kid->op_sibling)
1308 PL_curcop = &PL_compiling;
1311 /* all requires must return a boolean value */
1312 o->op_flags &= ~OPf_WANT;
1319 S_scalarseq(pTHX_ OP *o)
1323 const OPCODE type = o->op_type;
1325 if (type == OP_LINESEQ || type == OP_SCOPE ||
1326 type == OP_LEAVE || type == OP_LEAVETRY)
1329 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1330 if (kid->op_sibling) {
1334 PL_curcop = &PL_compiling;
1336 o->op_flags &= ~OPf_PARENS;
1337 if (PL_hints & HINT_BLOCK_SCOPE)
1338 o->op_flags |= OPf_PARENS;
1341 o = newOP(OP_STUB, 0);
1346 S_modkids(pTHX_ OP *o, I32 type)
1348 if (o && o->op_flags & OPf_KIDS) {
1350 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1356 /* Propagate lvalue ("modifiable") context to an op and its children.
1357 * 'type' represents the context type, roughly based on the type of op that
1358 * would do the modifying, although local() is represented by OP_NULL.
1359 * It's responsible for detecting things that can't be modified, flag
1360 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1361 * might have to vivify a reference in $x), and so on.
1363 * For example, "$a+1 = 2" would cause mod() to be called with o being
1364 * OP_ADD and type being OP_SASSIGN, and would output an error.
1368 Perl_mod(pTHX_ OP *o, I32 type)
1372 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1375 if (!o || (PL_parser && PL_parser->error_count))
1378 if ((o->op_private & OPpTARGET_MY)
1379 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1384 switch (o->op_type) {
1390 if (!(o->op_private & OPpCONST_ARYBASE))
1393 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1394 CopARYBASE_set(&PL_compiling,
1395 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1399 SAVECOPARYBASE(&PL_compiling);
1400 CopARYBASE_set(&PL_compiling, 0);
1402 else if (type == OP_REFGEN)
1405 Perl_croak(aTHX_ "That use of $[ is unsupported");
1408 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1412 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1413 !(o->op_flags & OPf_STACKED)) {
1414 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1415 /* The default is to set op_private to the number of children,
1416 which for a UNOP such as RV2CV is always 1. And w're using
1417 the bit for a flag in RV2CV, so we need it clear. */
1418 o->op_private &= ~1;
1419 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1420 assert(cUNOPo->op_first->op_type == OP_NULL);
1421 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1424 else if (o->op_private & OPpENTERSUB_NOMOD)
1426 else { /* lvalue subroutine call */
1427 o->op_private |= OPpLVAL_INTRO;
1428 PL_modcount = RETURN_UNLIMITED_NUMBER;
1429 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1430 /* Backward compatibility mode: */
1431 o->op_private |= OPpENTERSUB_INARGS;
1434 else { /* Compile-time error message: */
1435 OP *kid = cUNOPo->op_first;
1439 if (kid->op_type != OP_PUSHMARK) {
1440 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1442 "panic: unexpected lvalue entersub "
1443 "args: type/targ %ld:%"UVuf,
1444 (long)kid->op_type, (UV)kid->op_targ);
1445 kid = kLISTOP->op_first;
1447 while (kid->op_sibling)
1448 kid = kid->op_sibling;
1449 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1451 if (kid->op_type == OP_METHOD_NAMED
1452 || kid->op_type == OP_METHOD)
1456 NewOp(1101, newop, 1, UNOP);
1457 newop->op_type = OP_RV2CV;
1458 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1459 newop->op_first = NULL;
1460 newop->op_next = (OP*)newop;
1461 kid->op_sibling = (OP*)newop;
1462 newop->op_private |= OPpLVAL_INTRO;
1463 newop->op_private &= ~1;
1467 if (kid->op_type != OP_RV2CV)
1469 "panic: unexpected lvalue entersub "
1470 "entry via type/targ %ld:%"UVuf,
1471 (long)kid->op_type, (UV)kid->op_targ);
1472 kid->op_private |= OPpLVAL_INTRO;
1473 break; /* Postpone until runtime */
1477 kid = kUNOP->op_first;
1478 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1479 kid = kUNOP->op_first;
1480 if (kid->op_type == OP_NULL)
1482 "Unexpected constant lvalue entersub "
1483 "entry via type/targ %ld:%"UVuf,
1484 (long)kid->op_type, (UV)kid->op_targ);
1485 if (kid->op_type != OP_GV) {
1486 /* Restore RV2CV to check lvalueness */
1488 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1489 okid->op_next = kid->op_next;
1490 kid->op_next = okid;
1493 okid->op_next = NULL;
1494 okid->op_type = OP_RV2CV;
1496 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1497 okid->op_private |= OPpLVAL_INTRO;
1498 okid->op_private &= ~1;
1502 cv = GvCV(kGVOP_gv);
1512 /* grep, foreach, subcalls, refgen */
1513 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1515 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1516 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1518 : (o->op_type == OP_ENTERSUB
1519 ? "non-lvalue subroutine call"
1521 type ? PL_op_desc[type] : "local"));
1535 case OP_RIGHT_SHIFT:
1544 if (!(o->op_flags & OPf_STACKED))
1551 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1557 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1558 PL_modcount = RETURN_UNLIMITED_NUMBER;
1559 return o; /* Treat \(@foo) like ordinary list. */
1563 if (scalar_mod_type(o, type))
1565 ref(cUNOPo->op_first, o->op_type);
1569 if (type == OP_LEAVESUBLV)
1570 o->op_private |= OPpMAYBE_LVSUB;
1576 PL_modcount = RETURN_UNLIMITED_NUMBER;
1579 PL_hints |= HINT_BLOCK_SCOPE;
1580 if (type == OP_LEAVESUBLV)
1581 o->op_private |= OPpMAYBE_LVSUB;
1585 ref(cUNOPo->op_first, o->op_type);
1589 PL_hints |= HINT_BLOCK_SCOPE;
1604 PL_modcount = RETURN_UNLIMITED_NUMBER;
1605 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1606 return o; /* Treat \(@foo) like ordinary list. */
1607 if (scalar_mod_type(o, type))
1609 if (type == OP_LEAVESUBLV)
1610 o->op_private |= OPpMAYBE_LVSUB;
1614 if (!type) /* local() */
1615 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1616 PAD_COMPNAME_PV(o->op_targ));
1624 if (type != OP_SASSIGN)
1628 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1633 if (type == OP_LEAVESUBLV)
1634 o->op_private |= OPpMAYBE_LVSUB;
1636 pad_free(o->op_targ);
1637 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1638 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1639 if (o->op_flags & OPf_KIDS)
1640 mod(cBINOPo->op_first->op_sibling, type);
1645 ref(cBINOPo->op_first, o->op_type);
1646 if (type == OP_ENTERSUB &&
1647 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1648 o->op_private |= OPpLVAL_DEFER;
1649 if (type == OP_LEAVESUBLV)
1650 o->op_private |= OPpMAYBE_LVSUB;
1660 if (o->op_flags & OPf_KIDS)
1661 mod(cLISTOPo->op_last, type);
1666 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1668 else if (!(o->op_flags & OPf_KIDS))
1670 if (o->op_targ != OP_LIST) {
1671 mod(cBINOPo->op_first, type);
1677 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1682 if (type != OP_LEAVESUBLV)
1684 break; /* mod()ing was handled by ck_return() */
1687 /* [20011101.069] File test operators interpret OPf_REF to mean that
1688 their argument is a filehandle; thus \stat(".") should not set
1690 if (type == OP_REFGEN &&
1691 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1694 if (type != OP_LEAVESUBLV)
1695 o->op_flags |= OPf_MOD;
1697 if (type == OP_AASSIGN || type == OP_SASSIGN)
1698 o->op_flags |= OPf_SPECIAL|OPf_REF;
1699 else if (!type) { /* local() */
1702 o->op_private |= OPpLVAL_INTRO;
1703 o->op_flags &= ~OPf_SPECIAL;
1704 PL_hints |= HINT_BLOCK_SCOPE;
1709 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
1710 "Useless localization of %s", OP_DESC(o));
1713 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1714 && type != OP_LEAVESUBLV)
1715 o->op_flags |= OPf_REF;
1720 S_scalar_mod_type(const OP *o, I32 type)
1722 PERL_ARGS_ASSERT_SCALAR_MOD_TYPE;
1726 if (o->op_type == OP_RV2GV)
1750 case OP_RIGHT_SHIFT:
1770 S_is_handle_constructor(const OP *o, I32 numargs)
1772 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
1774 switch (o->op_type) {
1782 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1795 S_refkids(pTHX_ OP *o, I32 type)
1797 if (o && o->op_flags & OPf_KIDS) {
1799 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1806 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1811 PERL_ARGS_ASSERT_DOREF;
1813 if (!o || (PL_parser && PL_parser->error_count))
1816 switch (o->op_type) {
1818 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1819 !(o->op_flags & OPf_STACKED)) {
1820 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1821 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1822 assert(cUNOPo->op_first->op_type == OP_NULL);
1823 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1824 o->op_flags |= OPf_SPECIAL;
1825 o->op_private &= ~1;
1830 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1831 doref(kid, type, set_op_ref);
1834 if (type == OP_DEFINED)
1835 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1836 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1839 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1840 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1841 : type == OP_RV2HV ? OPpDEREF_HV
1843 o->op_flags |= OPf_MOD;
1850 o->op_flags |= OPf_REF;
1853 if (type == OP_DEFINED)
1854 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1855 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1861 o->op_flags |= OPf_REF;
1866 if (!(o->op_flags & OPf_KIDS))
1868 doref(cBINOPo->op_first, type, set_op_ref);
1872 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1873 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1874 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1875 : type == OP_RV2HV ? OPpDEREF_HV
1877 o->op_flags |= OPf_MOD;
1887 if (!(o->op_flags & OPf_KIDS))
1889 doref(cLISTOPo->op_last, type, set_op_ref);
1899 S_dup_attrlist(pTHX_ OP *o)
1904 PERL_ARGS_ASSERT_DUP_ATTRLIST;
1906 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1907 * where the first kid is OP_PUSHMARK and the remaining ones
1908 * are OP_CONST. We need to push the OP_CONST values.
1910 if (o->op_type == OP_CONST)
1911 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1913 else if (o->op_type == OP_NULL)
1917 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1919 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1920 if (o->op_type == OP_CONST)
1921 rop = append_elem(OP_LIST, rop,
1922 newSVOP(OP_CONST, o->op_flags,
1923 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1930 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1935 PERL_ARGS_ASSERT_APPLY_ATTRS;
1937 /* fake up C<use attributes $pkg,$rv,@attrs> */
1938 ENTER; /* need to protect against side-effects of 'use' */
1939 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1941 #define ATTRSMODULE "attributes"
1942 #define ATTRSMODULE_PM "attributes.pm"
1945 /* Don't force the C<use> if we don't need it. */
1946 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1947 if (svp && *svp != &PL_sv_undef)
1948 NOOP; /* already in %INC */
1950 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1951 newSVpvs(ATTRSMODULE), NULL);
1954 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1955 newSVpvs(ATTRSMODULE),
1957 prepend_elem(OP_LIST,
1958 newSVOP(OP_CONST, 0, stashsv),
1959 prepend_elem(OP_LIST,
1960 newSVOP(OP_CONST, 0,
1962 dup_attrlist(attrs))));
1968 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1971 OP *pack, *imop, *arg;
1974 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
1979 assert(target->op_type == OP_PADSV ||
1980 target->op_type == OP_PADHV ||
1981 target->op_type == OP_PADAV);
1983 /* Ensure that attributes.pm is loaded. */
1984 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1986 /* Need package name for method call. */
1987 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1989 /* Build up the real arg-list. */
1990 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1992 arg = newOP(OP_PADSV, 0);
1993 arg->op_targ = target->op_targ;
1994 arg = prepend_elem(OP_LIST,
1995 newSVOP(OP_CONST, 0, stashsv),
1996 prepend_elem(OP_LIST,
1997 newUNOP(OP_REFGEN, 0,
1998 mod(arg, OP_REFGEN)),
1999 dup_attrlist(attrs)));
2001 /* Fake up a method call to import */
2002 meth = newSVpvs_share("import");
2003 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2004 append_elem(OP_LIST,
2005 prepend_elem(OP_LIST, pack, list(arg)),
2006 newSVOP(OP_METHOD_NAMED, 0, meth)));
2007 imop->op_private |= OPpENTERSUB_NOMOD;
2009 /* Combine the ops. */
2010 *imopsp = append_elem(OP_LIST, *imopsp, imop);
2014 =notfor apidoc apply_attrs_string
2016 Attempts to apply a list of attributes specified by the C<attrstr> and
2017 C<len> arguments to the subroutine identified by the C<cv> argument which
2018 is expected to be associated with the package identified by the C<stashpv>
2019 argument (see L<attributes>). It gets this wrong, though, in that it
2020 does not correctly identify the boundaries of the individual attribute
2021 specifications within C<attrstr>. This is not really intended for the
2022 public API, but has to be listed here for systems such as AIX which
2023 need an explicit export list for symbols. (It's called from XS code
2024 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2025 to respect attribute syntax properly would be welcome.
2031 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2032 const char *attrstr, STRLEN len)
2036 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2039 len = strlen(attrstr);
2043 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2045 const char * const sstr = attrstr;
2046 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2047 attrs = append_elem(OP_LIST, attrs,
2048 newSVOP(OP_CONST, 0,
2049 newSVpvn(sstr, attrstr-sstr)));
2053 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2054 newSVpvs(ATTRSMODULE),
2055 NULL, prepend_elem(OP_LIST,
2056 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2057 prepend_elem(OP_LIST,
2058 newSVOP(OP_CONST, 0,
2059 newRV(MUTABLE_SV(cv))),
2064 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2069 PERL_ARGS_ASSERT_MY_KID;
2071 if (!o || (PL_parser && PL_parser->error_count))
2075 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2076 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2080 if (type == OP_LIST) {
2082 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2083 my_kid(kid, attrs, imopsp);
2084 } else if (type == OP_UNDEF
2090 } else if (type == OP_RV2SV || /* "our" declaration */
2092 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2093 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2094 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2096 PL_parser->in_my == KEY_our
2098 : PL_parser->in_my == KEY_state ? "state" : "my"));
2100 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
2101 PL_parser->in_my = FALSE;
2102 PL_parser->in_my_stash = NULL;
2103 apply_attrs(GvSTASH(gv),
2104 (type == OP_RV2SV ? GvSV(gv) :
2105 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2106 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
2109 o->op_private |= OPpOUR_INTRO;
2112 else if (type != OP_PADSV &&
2115 type != OP_PUSHMARK)
2117 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2119 PL_parser->in_my == KEY_our
2121 : PL_parser->in_my == KEY_state ? "state" : "my"));
2124 else if (attrs && type != OP_PUSHMARK) {
2127 PL_parser->in_my = FALSE;
2128 PL_parser->in_my_stash = NULL;
2130 /* check for C<my Dog $spot> when deciding package */
2131 stash = PAD_COMPNAME_TYPE(o->op_targ);
2133 stash = PL_curstash;
2134 apply_attrs_my(stash, o, attrs, imopsp);
2136 o->op_flags |= OPf_MOD;
2137 o->op_private |= OPpLVAL_INTRO;
2138 if (PL_parser->in_my == KEY_state)
2139 o->op_private |= OPpPAD_STATE;
2144 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2148 int maybe_scalar = 0;
2150 PERL_ARGS_ASSERT_MY_ATTRS;
2152 /* [perl #17376]: this appears to be premature, and results in code such as
2153 C< our(%x); > executing in list mode rather than void mode */
2155 if (o->op_flags & OPf_PARENS)
2165 o = my_kid(o, attrs, &rops);
2167 if (maybe_scalar && o->op_type == OP_PADSV) {
2168 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
2169 o->op_private |= OPpLVAL_INTRO;
2172 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
2174 PL_parser->in_my = FALSE;
2175 PL_parser->in_my_stash = NULL;
2180 Perl_sawparens(pTHX_ OP *o)
2182 PERL_UNUSED_CONTEXT;
2184 o->op_flags |= OPf_PARENS;
2189 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2193 const OPCODE ltype = left->op_type;
2194 const OPCODE rtype = right->op_type;
2196 PERL_ARGS_ASSERT_BIND_MATCH;
2198 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2199 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2201 const char * const desc
2202 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
2203 ? (int)rtype : OP_MATCH];
2204 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2205 ? "@array" : "%hash");
2206 Perl_warner(aTHX_ packWARN(WARN_MISC),
2207 "Applying %s to %s will act on scalar(%s)",
2208 desc, sample, sample);
2211 if (rtype == OP_CONST &&
2212 cSVOPx(right)->op_private & OPpCONST_BARE &&
2213 cSVOPx(right)->op_private & OPpCONST_STRICT)
2215 no_bareword_allowed(right);
2218 ismatchop = rtype == OP_MATCH ||
2219 rtype == OP_SUBST ||
2221 if (ismatchop && right->op_private & OPpTARGET_MY) {
2223 right->op_private &= ~OPpTARGET_MY;
2225 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2228 right->op_flags |= OPf_STACKED;
2229 if (rtype != OP_MATCH &&
2230 ! (rtype == OP_TRANS &&
2231 right->op_private & OPpTRANS_IDENTICAL))
2232 newleft = mod(left, rtype);
2235 if (right->op_type == OP_TRANS)
2236 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2238 o = prepend_elem(rtype, scalar(newleft), right);
2240 return newUNOP(OP_NOT, 0, scalar(o));
2244 return bind_match(type, left,
2245 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2249 Perl_invert(pTHX_ OP *o)
2253 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2257 Perl_scope(pTHX_ OP *o)
2261 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2262 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2263 o->op_type = OP_LEAVE;
2264 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2266 else if (o->op_type == OP_LINESEQ) {
2268 o->op_type = OP_SCOPE;
2269 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2270 kid = ((LISTOP*)o)->op_first;
2271 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2274 /* The following deals with things like 'do {1 for 1}' */
2275 kid = kid->op_sibling;
2277 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2282 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2288 Perl_block_start(pTHX_ int full)
2291 const int retval = PL_savestack_ix;
2292 pad_block_start(full);
2294 PL_hints &= ~HINT_BLOCK_SCOPE;
2295 SAVECOMPILEWARNINGS();
2296 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2301 Perl_block_end(pTHX_ I32 floor, OP *seq)
2304 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2305 OP* const retval = scalarseq(seq);
2307 CopHINTS_set(&PL_compiling, PL_hints);
2309 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2318 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
2319 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2320 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2323 OP * const o = newOP(OP_PADSV, 0);
2324 o->op_targ = offset;
2330 Perl_newPROG(pTHX_ OP *o)
2334 PERL_ARGS_ASSERT_NEWPROG;
2339 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2340 ((PL_in_eval & EVAL_KEEPERR)
2341 ? OPf_SPECIAL : 0), o);
2342 PL_eval_start = linklist(PL_eval_root);
2343 PL_eval_root->op_private |= OPpREFCOUNTED;
2344 OpREFCNT_set(PL_eval_root, 1);
2345 PL_eval_root->op_next = 0;
2346 CALL_PEEP(PL_eval_start);
2349 if (o->op_type == OP_STUB) {
2350 PL_comppad_name = 0;
2352 S_op_destroy(aTHX_ o);
2355 PL_main_root = scope(sawparens(scalarvoid(o)));
2356 PL_curcop = &PL_compiling;
2357 PL_main_start = LINKLIST(PL_main_root);
2358 PL_main_root->op_private |= OPpREFCOUNTED;
2359 OpREFCNT_set(PL_main_root, 1);
2360 PL_main_root->op_next = 0;
2361 CALL_PEEP(PL_main_start);
2364 /* Register with debugger */
2366 CV * const cv = get_cvs("DB::postponed", 0);
2370 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2372 call_sv(MUTABLE_SV(cv), G_DISCARD);
2379 Perl_localize(pTHX_ OP *o, I32 lex)
2383 PERL_ARGS_ASSERT_LOCALIZE;
2385 if (o->op_flags & OPf_PARENS)
2386 /* [perl #17376]: this appears to be premature, and results in code such as
2387 C< our(%x); > executing in list mode rather than void mode */
2394 if ( PL_parser->bufptr > PL_parser->oldbufptr
2395 && PL_parser->bufptr[-1] == ','
2396 && ckWARN(WARN_PARENTHESIS))
2398 char *s = PL_parser->bufptr;
2401 /* some heuristics to detect a potential error */
2402 while (*s && (strchr(", \t\n", *s)))
2406 if (*s && strchr("@$%*", *s) && *++s
2407 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2410 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2412 while (*s && (strchr(", \t\n", *s)))
2418 if (sigil && (*s == ';' || *s == '=')) {
2419 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2420 "Parentheses missing around \"%s\" list",
2422 ? (PL_parser->in_my == KEY_our
2424 : PL_parser->in_my == KEY_state
2434 o = mod(o, OP_NULL); /* a bit kludgey */
2435 PL_parser->in_my = FALSE;
2436 PL_parser->in_my_stash = NULL;
2441 Perl_jmaybe(pTHX_ OP *o)
2443 PERL_ARGS_ASSERT_JMAYBE;
2445 if (o->op_type == OP_LIST) {
2447 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2448 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2454 S_fold_constants(pTHX_ register OP *o)
2457 register OP * VOL curop;
2459 VOL I32 type = o->op_type;
2464 SV * const oldwarnhook = PL_warnhook;
2465 SV * const olddiehook = PL_diehook;
2469 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
2471 if (PL_opargs[type] & OA_RETSCALAR)
2473 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2474 o->op_targ = pad_alloc(type, SVs_PADTMP);
2476 /* integerize op, unless it happens to be C<-foo>.
2477 * XXX should pp_i_negate() do magic string negation instead? */
2478 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2479 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2480 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2482 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2485 if (!(PL_opargs[type] & OA_FOLDCONST))
2490 /* XXX might want a ck_negate() for this */
2491 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2502 /* XXX what about the numeric ops? */
2503 if (PL_hints & HINT_LOCALE)
2508 if (PL_parser && PL_parser->error_count)
2509 goto nope; /* Don't try to run w/ errors */
2511 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2512 const OPCODE type = curop->op_type;
2513 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2515 type != OP_SCALAR &&
2517 type != OP_PUSHMARK)
2523 curop = LINKLIST(o);
2524 old_next = o->op_next;
2528 oldscope = PL_scopestack_ix;
2529 create_eval_scope(G_FAKINGEVAL);
2531 /* Verify that we don't need to save it: */
2532 assert(PL_curcop == &PL_compiling);
2533 StructCopy(&PL_compiling, ¬_compiling, COP);
2534 PL_curcop = ¬_compiling;
2535 /* The above ensures that we run with all the correct hints of the
2536 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
2537 assert(IN_PERL_RUNTIME);
2538 PL_warnhook = PERL_WARNHOOK_FATAL;
2545 sv = *(PL_stack_sp--);
2546 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2547 pad_swipe(o->op_targ, FALSE);
2548 else if (SvTEMP(sv)) { /* grab mortal temp? */
2549 SvREFCNT_inc_simple_void(sv);
2554 /* Something tried to die. Abandon constant folding. */
2555 /* Pretend the error never happened. */
2557 o->op_next = old_next;
2561 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2562 PL_warnhook = oldwarnhook;
2563 PL_diehook = olddiehook;
2564 /* XXX note that this croak may fail as we've already blown away
2565 * the stack - eg any nested evals */
2566 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2569 PL_warnhook = oldwarnhook;
2570 PL_diehook = olddiehook;
2571 PL_curcop = &PL_compiling;
2573 if (PL_scopestack_ix > oldscope)
2574 delete_eval_scope();
2583 if (type == OP_RV2GV)
2584 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
2586 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
2587 op_getmad(o,newop,'f');
2595 S_gen_constant_list(pTHX_ register OP *o)
2599 const I32 oldtmps_floor = PL_tmps_floor;
2602 if (PL_parser && PL_parser->error_count)
2603 return o; /* Don't attempt to run with errors */
2605 PL_op = curop = LINKLIST(o);
2611 assert (!(curop->op_flags & OPf_SPECIAL));
2612 assert(curop->op_type == OP_RANGE);
2614 PL_tmps_floor = oldtmps_floor;
2616 o->op_type = OP_RV2AV;
2617 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2618 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2619 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2620 o->op_opt = 0; /* needs to be revisited in peep() */
2621 curop = ((UNOP*)o)->op_first;
2622 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2624 op_getmad(curop,o,'O');
2633 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2636 if (!o || o->op_type != OP_LIST)
2637 o = newLISTOP(OP_LIST, 0, o, NULL);
2639 o->op_flags &= ~OPf_WANT;
2641 if (!(PL_opargs[type] & OA_MARK))
2642 op_null(cLISTOPo->op_first);
2644 o->op_type = (OPCODE)type;
2645 o->op_ppaddr = PL_ppaddr[type];
2646 o->op_flags |= flags;
2648 o = CHECKOP(type, o);
2649 if (o->op_type != (unsigned)type)
2652 return fold_constants(o);
2655 /* List constructors */
2658 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2666 if (first->op_type != (unsigned)type
2667 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2669 return newLISTOP(type, 0, first, last);
2672 if (first->op_flags & OPf_KIDS)
2673 ((LISTOP*)first)->op_last->op_sibling = last;
2675 first->op_flags |= OPf_KIDS;
2676 ((LISTOP*)first)->op_first = last;
2678 ((LISTOP*)first)->op_last = last;
2683 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2691 if (first->op_type != (unsigned)type)
2692 return prepend_elem(type, (OP*)first, (OP*)last);
2694 if (last->op_type != (unsigned)type)
2695 return append_elem(type, (OP*)first, (OP*)last);
2697 first->op_last->op_sibling = last->op_first;
2698 first->op_last = last->op_last;
2699 first->op_flags |= (last->op_flags & OPf_KIDS);
2702 if (last->op_first && first->op_madprop) {
2703 MADPROP *mp = last->op_first->op_madprop;
2705 while (mp->mad_next)
2707 mp->mad_next = first->op_madprop;
2710 last->op_first->op_madprop = first->op_madprop;
2713 first->op_madprop = last->op_madprop;
2714 last->op_madprop = 0;
2717 S_op_destroy(aTHX_ (OP*)last);
2723 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2731 if (last->op_type == (unsigned)type) {
2732 if (type == OP_LIST) { /* already a PUSHMARK there */
2733 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2734 ((LISTOP*)last)->op_first->op_sibling = first;
2735 if (!(first->op_flags & OPf_PARENS))
2736 last->op_flags &= ~OPf_PARENS;
2739 if (!(last->op_flags & OPf_KIDS)) {
2740 ((LISTOP*)last)->op_last = first;
2741 last->op_flags |= OPf_KIDS;
2743 first->op_sibling = ((LISTOP*)last)->op_first;
2744 ((LISTOP*)last)->op_first = first;
2746 last->op_flags |= OPf_KIDS;
2750 return newLISTOP(type, 0, first, last);
2758 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2761 Newxz(tk, 1, TOKEN);
2762 tk->tk_type = (OPCODE)optype;
2763 tk->tk_type = 12345;
2765 tk->tk_mad = madprop;
2770 Perl_token_free(pTHX_ TOKEN* tk)
2772 PERL_ARGS_ASSERT_TOKEN_FREE;
2774 if (tk->tk_type != 12345)
2776 mad_free(tk->tk_mad);
2781 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2786 PERL_ARGS_ASSERT_TOKEN_GETMAD;
2788 if (tk->tk_type != 12345) {
2789 Perl_warner(aTHX_ packWARN(WARN_MISC),
2790 "Invalid TOKEN object ignored");
2797 /* faked up qw list? */
2799 tm->mad_type == MAD_SV &&
2800 SvPVX((SV *)tm->mad_val)[0] == 'q')
2807 /* pretend constant fold didn't happen? */
2808 if (mp->mad_key == 'f' &&
2809 (o->op_type == OP_CONST ||
2810 o->op_type == OP_GV) )
2812 token_getmad(tk,(OP*)mp->mad_val,slot);
2826 if (mp->mad_key == 'X')
2827 mp->mad_key = slot; /* just change the first one */
2837 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2846 /* pretend constant fold didn't happen? */
2847 if (mp->mad_key == 'f' &&
2848 (o->op_type == OP_CONST ||
2849 o->op_type == OP_GV) )
2851 op_getmad(from,(OP*)mp->mad_val,slot);
2858 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2861 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2867 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2876 /* pretend constant fold didn't happen? */
2877 if (mp->mad_key == 'f' &&
2878 (o->op_type == OP_CONST ||
2879 o->op_type == OP_GV) )
2881 op_getmad(from,(OP*)mp->mad_val,slot);
2888 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2891 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2895 PerlIO_printf(PerlIO_stderr(),
2896 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2902 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2920 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2924 addmad(tm, &(o->op_madprop), slot);
2928 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2949 Perl_newMADsv(pTHX_ char key, SV* sv)
2951 PERL_ARGS_ASSERT_NEWMADSV;
2953 return newMADPROP(key, MAD_SV, sv, 0);
2957 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
2960 Newxz(mp, 1, MADPROP);
2963 mp->mad_vlen = vlen;
2964 mp->mad_type = type;
2966 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2971 Perl_mad_free(pTHX_ MADPROP* mp)
2973 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2977 mad_free(mp->mad_next);
2978 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
2979 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2980 switch (mp->mad_type) {
2984 Safefree((char*)mp->mad_val);
2987 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2988 op_free((OP*)mp->mad_val);
2991 sv_free(MUTABLE_SV(mp->mad_val));
2994 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3003 Perl_newNULLLIST(pTHX)
3005 return newOP(OP_STUB, 0);
3009 S_force_list(pTHX_ OP *o)
3011 if (!o || o->op_type != OP_LIST)
3012 o = newLISTOP(OP_LIST, 0, o, NULL);
3018 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3023 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3025 NewOp(1101, listop, 1, LISTOP);
3027 listop->op_type = (OPCODE)type;
3028 listop->op_ppaddr = PL_ppaddr[type];
3031 listop->op_flags = (U8)flags;
3035 else if (!first && last)
3038 first->op_sibling = last;
3039 listop->op_first = first;
3040 listop->op_last = last;
3041 if (type == OP_LIST) {
3042 OP* const pushop = newOP(OP_PUSHMARK, 0);
3043 pushop->op_sibling = first;
3044 listop->op_first = pushop;
3045 listop->op_flags |= OPf_KIDS;
3047 listop->op_last = pushop;
3050 return CHECKOP(type, listop);
3054 Perl_newOP(pTHX_ I32 type, I32 flags)
3059 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3060 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3061 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3062 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3064 NewOp(1101, o, 1, OP);
3065 o->op_type = (OPCODE)type;
3066 o->op_ppaddr = PL_ppaddr[type];
3067 o->op_flags = (U8)flags;
3069 o->op_latefreed = 0;
3073 o->op_private = (U8)(0 | (flags >> 8));
3074 if (PL_opargs[type] & OA_RETSCALAR)
3076 if (PL_opargs[type] & OA_TARGET)
3077 o->op_targ = pad_alloc(type, SVs_PADTMP);
3078 return CHECKOP(type, o);
3082 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3087 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3088 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3089 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3090 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3091 || type == OP_SASSIGN
3092 || type == OP_NULL );
3095 first = newOP(OP_STUB, 0);
3096 if (PL_opargs[type] & OA_MARK)
3097 first = force_list(first);
3099 NewOp(1101, unop, 1, UNOP);
3100 unop->op_type = (OPCODE)type;
3101 unop->op_ppaddr = PL_ppaddr[type];
3102 unop->op_first = first;
3103 unop->op_flags = (U8)(flags | OPf_KIDS);
3104 unop->op_private = (U8)(1 | (flags >> 8));
3105 unop = (UNOP*) CHECKOP(type, unop);
3109 return fold_constants((OP *) unop);
3113 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3118 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3119 || type == OP_SASSIGN || type == OP_NULL );
3121 NewOp(1101, binop, 1, BINOP);
3124 first = newOP(OP_NULL, 0);
3126 binop->op_type = (OPCODE)type;
3127 binop->op_ppaddr = PL_ppaddr[type];
3128 binop->op_first = first;
3129 binop->op_flags = (U8)(flags | OPf_KIDS);
3132 binop->op_private = (U8)(1 | (flags >> 8));
3135 binop->op_private = (U8)(2 | (flags >> 8));
3136 first->op_sibling = last;
3139 binop = (BINOP*)CHECKOP(type, binop);
3140 if (binop->op_next || binop->op_type != (OPCODE)type)
3143 binop->op_last = binop->op_first->op_sibling;
3145 return fold_constants((OP *)binop);
3148 static int uvcompare(const void *a, const void *b)
3149 __attribute__nonnull__(1)
3150 __attribute__nonnull__(2)
3151 __attribute__pure__;
3152 static int uvcompare(const void *a, const void *b)
3154 if (*((const UV *)a) < (*(const UV *)b))
3156 if (*((const UV *)a) > (*(const UV *)b))
3158 if (*((const UV *)a+1) < (*(const UV *)b+1))
3160 if (*((const UV *)a+1) > (*(const UV *)b+1))
3166 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3169 SV * const tstr = ((SVOP*)expr)->op_sv;
3172 (repl->op_type == OP_NULL)
3173 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3175 ((SVOP*)repl)->op_sv;
3178 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3179 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3183 register short *tbl;
3185 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3186 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3187 I32 del = o->op_private & OPpTRANS_DELETE;
3190 PERL_ARGS_ASSERT_PMTRANS;
3192 PL_hints |= HINT_BLOCK_SCOPE;
3195 o->op_private |= OPpTRANS_FROM_UTF;
3198 o->op_private |= OPpTRANS_TO_UTF;
3200 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3201 SV* const listsv = newSVpvs("# comment\n");
3203 const U8* tend = t + tlen;
3204 const U8* rend = r + rlen;
3218 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3219 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3222 const U32 flags = UTF8_ALLOW_DEFAULT;
3226 t = tsave = bytes_to_utf8(t, &len);
3229 if (!to_utf && rlen) {
3231 r = rsave = bytes_to_utf8(r, &len);
3235 /* There are several snags with this code on EBCDIC:
3236 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3237 2. scan_const() in toke.c has encoded chars in native encoding which makes
3238 ranges at least in EBCDIC 0..255 range the bottom odd.
3242 U8 tmpbuf[UTF8_MAXBYTES+1];
3245 Newx(cp, 2*tlen, UV);
3247 transv = newSVpvs("");
3249 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3251 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3253 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3257 cp[2*i+1] = cp[2*i];
3261 qsort(cp, i, 2*sizeof(UV), uvcompare);
3262 for (j = 0; j < i; j++) {
3264 diff = val - nextmin;
3266 t = uvuni_to_utf8(tmpbuf,nextmin);
3267 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3269 U8 range_mark = UTF_TO_NATIVE(0xff);
3270 t = uvuni_to_utf8(tmpbuf, val - 1);
3271 sv_catpvn(transv, (char *)&range_mark, 1);
3272 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3279 t = uvuni_to_utf8(tmpbuf,nextmin);
3280 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3282 U8 range_mark = UTF_TO_NATIVE(0xff);
3283 sv_catpvn(transv, (char *)&range_mark, 1);
3285 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
3286 UNICODE_ALLOW_SUPER);
3287 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3288 t = (const U8*)SvPVX_const(transv);
3289 tlen = SvCUR(transv);
3293 else if (!rlen && !del) {
3294 r = t; rlen = tlen; rend = tend;
3297 if ((!rlen && !del) || t == r ||
3298 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3300 o->op_private |= OPpTRANS_IDENTICAL;
3304 while (t < tend || tfirst <= tlast) {
3305 /* see if we need more "t" chars */
3306 if (tfirst > tlast) {
3307 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3309 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3311 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3318 /* now see if we need more "r" chars */
3319 if (rfirst > rlast) {
3321 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3323 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3325 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3334 rfirst = rlast = 0xffffffff;
3338 /* now see which range will peter our first, if either. */
3339 tdiff = tlast - tfirst;
3340 rdiff = rlast - rfirst;
3347 if (rfirst == 0xffffffff) {
3348 diff = tdiff; /* oops, pretend rdiff is infinite */
3350 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3351 (long)tfirst, (long)tlast);
3353 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3357 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3358 (long)tfirst, (long)(tfirst + diff),
3361 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3362 (long)tfirst, (long)rfirst);
3364 if (rfirst + diff > max)
3365 max = rfirst + diff;
3367 grows = (tfirst < rfirst &&
3368 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3380 else if (max > 0xff)
3385 PerlMemShared_free(cPVOPo->op_pv);
3386 cPVOPo->op_pv = NULL;
3388 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
3390 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3391 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3392 PAD_SETSV(cPADOPo->op_padix, swash);
3394 SvREADONLY_on(swash);
3396 cSVOPo->op_sv = swash;
3398 SvREFCNT_dec(listsv);
3399 SvREFCNT_dec(transv);
3401 if (!del && havefinal && rlen)
3402 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
3403 newSVuv((UV)final), 0);
3406 o->op_private |= OPpTRANS_GROWS;
3412 op_getmad(expr,o,'e');
3413 op_getmad(repl,o,'r');
3421 tbl = (short*)cPVOPo->op_pv;
3423 Zero(tbl, 256, short);
3424 for (i = 0; i < (I32)tlen; i++)
3426 for (i = 0, j = 0; i < 256; i++) {
3428 if (j >= (I32)rlen) {
3437 if (i < 128 && r[j] >= 128)
3447 o->op_private |= OPpTRANS_IDENTICAL;
3449 else if (j >= (I32)rlen)
3454 PerlMemShared_realloc(tbl,
3455 (0x101+rlen-j) * sizeof(short));
3456 cPVOPo->op_pv = (char*)tbl;
3458 tbl[0x100] = (short)(rlen - j);
3459 for (i=0; i < (I32)rlen - j; i++)
3460 tbl[0x101+i] = r[j+i];
3464 if (!rlen && !del) {
3467 o->op_private |= OPpTRANS_IDENTICAL;
3469 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3470 o->op_private |= OPpTRANS_IDENTICAL;
3472 for (i = 0; i < 256; i++)
3474 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3475 if (j >= (I32)rlen) {
3477 if (tbl[t[i]] == -1)
3483 if (tbl[t[i]] == -1) {
3484 if (t[i] < 128 && r[j] >= 128)
3491 if(del && rlen == tlen) {
3492 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
3493 } else if(rlen > tlen) {
3494 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
3498 o->op_private |= OPpTRANS_GROWS;
3500 op_getmad(expr,o,'e');
3501 op_getmad(repl,o,'r');
3511 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3516 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
3518 NewOp(1101, pmop, 1, PMOP);
3519 pmop->op_type = (OPCODE)type;
3520 pmop->op_ppaddr = PL_ppaddr[type];
3521 pmop->op_flags = (U8)flags;
3522 pmop->op_private = (U8)(0 | (flags >> 8));
3524 if (PL_hints & HINT_RE_TAINT)
3525 pmop->op_pmflags |= PMf_RETAINT;
3526 if (PL_hints & HINT_LOCALE)
3527 pmop->op_pmflags |= PMf_LOCALE;
3531 assert(SvPOK(PL_regex_pad[0]));
3532 if (SvCUR(PL_regex_pad[0])) {
3533 /* Pop off the "packed" IV from the end. */
3534 SV *const repointer_list = PL_regex_pad[0];
3535 const char *p = SvEND(repointer_list) - sizeof(IV);
3536 const IV offset = *((IV*)p);
3538 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
3540 SvEND_set(repointer_list, p);
3542 pmop->op_pmoffset = offset;
3543 /* This slot should be free, so assert this: */
3544 assert(PL_regex_pad[offset] == &PL_sv_undef);
3546 SV * const repointer = &PL_sv_undef;
3547 av_push(PL_regex_padav, repointer);
3548 pmop->op_pmoffset = av_len(PL_regex_padav);
3549 PL_regex_pad = AvARRAY(PL_regex_padav);
3553 return CHECKOP(type, pmop);
3556 /* Given some sort of match op o, and an expression expr containing a
3557 * pattern, either compile expr into a regex and attach it to o (if it's
3558 * constant), or convert expr into a runtime regcomp op sequence (if it's
3561 * isreg indicates that the pattern is part of a regex construct, eg
3562 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3563 * split "pattern", which aren't. In the former case, expr will be a list
3564 * if the pattern contains more than one term (eg /a$b/) or if it contains
3565 * a replacement, ie s/// or tr///.
3569 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3574 I32 repl_has_vars = 0;
3578 PERL_ARGS_ASSERT_PMRUNTIME;
3580 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3581 /* last element in list is the replacement; pop it */
3583 repl = cLISTOPx(expr)->op_last;
3584 kid = cLISTOPx(expr)->op_first;
3585 while (kid->op_sibling != repl)
3586 kid = kid->op_sibling;
3587 kid->op_sibling = NULL;
3588 cLISTOPx(expr)->op_last = kid;
3591 if (isreg && expr->op_type == OP_LIST &&
3592 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3594 /* convert single element list to element */
3595 OP* const oe = expr;
3596 expr = cLISTOPx(oe)->op_first->op_sibling;
3597 cLISTOPx(oe)->op_first->op_sibling = NULL;
3598 cLISTOPx(oe)->op_last = NULL;
3602 if (o->op_type == OP_TRANS) {
3603 return pmtrans(o, expr, repl);
3606 reglist = isreg && expr->op_type == OP_LIST;
3610 PL_hints |= HINT_BLOCK_SCOPE;
3613 if (expr->op_type == OP_CONST) {
3614 SV *pat = ((SVOP*)expr)->op_sv;
3615 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
3617 if (o->op_flags & OPf_SPECIAL)
3618 pm_flags |= RXf_SPLIT;
3621 assert (SvUTF8(pat));
3622 } else if (SvUTF8(pat)) {
3623 /* Not doing UTF-8, despite what the SV says. Is this only if we're
3624 trapped in use 'bytes'? */
3625 /* Make a copy of the octet sequence, but without the flag on, as
3626 the compiler now honours the SvUTF8 flag on pat. */
3628 const char *const p = SvPV(pat, len);
3629 pat = newSVpvn_flags(p, len, SVs_TEMP);
3632 PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
3635 op_getmad(expr,(OP*)pm,'e');
3641 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3642 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3644 : OP_REGCMAYBE),0,expr);
3646 NewOp(1101, rcop, 1, LOGOP);
3647 rcop->op_type = OP_REGCOMP;
3648 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3649 rcop->op_first = scalar(expr);
3650 rcop->op_flags |= OPf_KIDS
3651 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3652 | (reglist ? OPf_STACKED : 0);
3653 rcop->op_private = 1;
3656 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3658 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3661 /* establish postfix order */
3662 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3664 rcop->op_next = expr;
3665 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3668 rcop->op_next = LINKLIST(expr);
3669 expr->op_next = (OP*)rcop;
3672 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3677 if (pm->op_pmflags & PMf_EVAL) {
3679 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
3680 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
3682 else if (repl->op_type == OP_CONST)
3686 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3687 if (curop->op_type == OP_SCOPE
3688 || curop->op_type == OP_LEAVE
3689 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3690 if (curop->op_type == OP_GV) {
3691 GV * const gv = cGVOPx_gv(curop);
3693 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3696 else if (curop->op_type == OP_RV2CV)
3698 else if (curop->op_type == OP_RV2SV ||
3699 curop->op_type == OP_RV2AV ||
3700 curop->op_type == OP_RV2HV ||
3701 curop->op_type == OP_RV2GV) {
3702 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3705 else if (curop->op_type == OP_PADSV ||
3706 curop->op_type == OP_PADAV ||
3707 curop->op_type == OP_PADHV ||
3708 curop->op_type == OP_PADANY)
3712 else if (curop->op_type == OP_PUSHRE)
3713 NOOP; /* Okay here, dangerous in newASSIGNOP */
3723 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
3725 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3726 prepend_elem(o->op_type, scalar(repl), o);
3729 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3730 pm->op_pmflags |= PMf_MAYBE_CONST;
3732 NewOp(1101, rcop, 1, LOGOP);
3733 rcop->op_type = OP_SUBSTCONT;
3734 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3735 rcop->op_first = scalar(repl);
3736 rcop->op_flags |= OPf_KIDS;
3737 rcop->op_private = 1;
3740 /* establish postfix order */
3741 rcop->op_next = LINKLIST(repl);
3742 repl->op_next = (OP*)rcop;
3744 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
3745 assert(!(pm->op_pmflags & PMf_ONCE));
3746 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
3755 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3760 PERL_ARGS_ASSERT_NEWSVOP;
3762 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
3763 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3764 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
3766 NewOp(1101, svop, 1, SVOP);
3767 svop->op_type = (OPCODE)type;
3768 svop->op_ppaddr = PL_ppaddr[type];
3770 svop->op_next = (OP*)svop;
3771 svop->op_flags = (U8)flags;
3772 if (PL_opargs[type] & OA_RETSCALAR)
3774 if (PL_opargs[type] & OA_TARGET)
3775 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3776 return CHECKOP(type, svop);
3781 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3786 PERL_ARGS_ASSERT_NEWPADOP;
3788 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
3789 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3790 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
3792 NewOp(1101, padop, 1, PADOP);
3793 padop->op_type = (OPCODE)type;
3794 padop->op_ppaddr = PL_ppaddr[type];
3795 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3796 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3797 PAD_SETSV(padop->op_padix, sv);
3800 padop->op_next = (OP*)padop;
3801 padop->op_flags = (U8)flags;
3802 if (PL_opargs[type] & OA_RETSCALAR)
3804 if (PL_opargs[type] & OA_TARGET)
3805 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3806 return CHECKOP(type, padop);
3811 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3815 PERL_ARGS_ASSERT_NEWGVOP;
3819 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3821 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3826 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3831 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3832 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3834 NewOp(1101, pvop, 1, PVOP);
3835 pvop->op_type = (OPCODE)type;
3836 pvop->op_ppaddr = PL_ppaddr[type];
3838 pvop->op_next = (OP*)pvop;
3839 pvop->op_flags = (U8)flags;
3840 if (PL_opargs[type] & OA_RETSCALAR)
3842 if (PL_opargs[type] & OA_TARGET)
3843 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3844 return CHECKOP(type, pvop);
3852 Perl_package(pTHX_ OP *o)
3855 SV *const sv = cSVOPo->op_sv;
3860 PERL_ARGS_ASSERT_PACKAGE;
3862 save_hptr(&PL_curstash);
3863 save_item(PL_curstname);
3865 PL_curstash = gv_stashsv(sv, GV_ADD);
3867 sv_setsv(PL_curstname, sv);
3869 PL_hints |= HINT_BLOCK_SCOPE;
3870 PL_parser->copline = NOLINE;
3871 PL_parser->expect = XSTATE;
3876 if (!PL_madskills) {
3881 pegop = newOP(OP_NULL,0);
3882 op_getmad(o,pegop,'P');
3888 Perl_package_version( pTHX_ OP *v )
3891 U32 savehints = PL_hints;
3892 PERL_ARGS_ASSERT_PACKAGE_VERSION;
3893 PL_hints &= ~HINT_STRICT_VARS;
3894 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
3895 PL_hints = savehints;
3904 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3911 OP *pegop = newOP(OP_NULL,0);
3914 PERL_ARGS_ASSERT_UTILIZE;
3916 if (idop->op_type != OP_CONST)
3917 Perl_croak(aTHX_ "Module name must be constant");
3920 op_getmad(idop,pegop,'U');
3925 SV * const vesv = ((SVOP*)version)->op_sv;
3928 op_getmad(version,pegop,'V');
3929 if (!arg && !SvNIOKp(vesv)) {
3936 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3937 Perl_croak(aTHX_ "Version number must be a constant number");
3939 /* Make copy of idop so we don't free it twice */
3940 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3942 /* Fake up a method call to VERSION */
3943 meth = newSVpvs_share("VERSION");
3944 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3945 append_elem(OP_LIST,
3946 prepend_elem(OP_LIST, pack, list(version)),
3947 newSVOP(OP_METHOD_NAMED, 0, meth)));
3951 /* Fake up an import/unimport */
3952 if (arg && arg->op_type == OP_STUB) {
3954 op_getmad(arg,pegop,'S');
3955 imop = arg; /* no import on explicit () */
3957 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3958 imop = NULL; /* use 5.0; */
3960 idop->op_private |= OPpCONST_NOVER;
3966 op_getmad(arg,pegop,'A');
3968 /* Make copy of idop so we don't free it twice */
3969 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3971 /* Fake up a method call to import/unimport */
3973 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3974 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3975 append_elem(OP_LIST,
3976 prepend_elem(OP_LIST, pack, list(arg)),
3977 newSVOP(OP_METHOD_NAMED, 0, meth)));
3980 /* Fake up the BEGIN {}, which does its thing immediately. */
3982 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3985 append_elem(OP_LINESEQ,
3986 append_elem(OP_LINESEQ,
3987 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3988 newSTATEOP(0, NULL, veop)),
3989 newSTATEOP(0, NULL, imop) ));
3991 /* The "did you use incorrect case?" warning used to be here.
3992 * The problem is that on case-insensitive filesystems one
3993 * might get false positives for "use" (and "require"):
3994 * "use Strict" or "require CARP" will work. This causes
3995 * portability problems for the script: in case-strict
3996 * filesystems the script will stop working.
3998 * The "incorrect case" warning checked whether "use Foo"
3999 * imported "Foo" to your namespace, but that is wrong, too:
4000 * there is no requirement nor promise in the language that
4001 * a Foo.pm should or would contain anything in package "Foo".
4003 * There is very little Configure-wise that can be done, either:
4004 * the case-sensitivity of the build filesystem of Perl does not
4005 * help in guessing the case-sensitivity of the runtime environment.
4008 PL_hints |= HINT_BLOCK_SCOPE;
4009 PL_parser->copline = NOLINE;
4010 PL_parser->expect = XSTATE;
4011 PL_cop_seqmax++; /* Purely for B::*'s benefit */
4014 if (!PL_madskills) {
4015 /* FIXME - don't allocate pegop if !PL_madskills */
4024 =head1 Embedding Functions
4026 =for apidoc load_module
4028 Loads the module whose name is pointed to by the string part of name.
4029 Note that the actual module name, not its filename, should be given.
4030 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
4031 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
4032 (or 0 for no flags). ver, if specified, provides version semantics
4033 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
4034 arguments can be used to specify arguments to the module's import()
4035 method, similar to C<use Foo::Bar VERSION LIST>. They must be
4036 terminated with a final NULL pointer. Note that this list can only
4037 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
4038 Otherwise at least a single NULL pointer to designate the default
4039 import list is required.
4044 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
4048 PERL_ARGS_ASSERT_LOAD_MODULE;
4050 va_start(args, ver);
4051 vload_module(flags, name, ver, &args);
4055 #ifdef PERL_IMPLICIT_CONTEXT
4057 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
4061 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
4062 va_start(args, ver);
4063 vload_module(flags, name, ver, &args);
4069 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
4073 OP * const modname = newSVOP(OP_CONST, 0, name);
4075 PERL_ARGS_ASSERT_VLOAD_MODULE;
4077 modname->op_private |= OPpCONST_BARE;
4079 veop = newSVOP(OP_CONST, 0, ver);
4083 if (flags & PERL_LOADMOD_NOIMPORT) {
4084 imop = sawparens(newNULLLIST());
4086 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
4087 imop = va_arg(*args, OP*);
4092 sv = va_arg(*args, SV*);
4094 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
4095 sv = va_arg(*args, SV*);
4099 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
4100 * that it has a PL_parser to play with while doing that, and also
4101 * that it doesn't mess with any existing parser, by creating a tmp
4102 * new parser with lex_start(). This won't actually be used for much,
4103 * since pp_require() will create another parser for the real work. */
4106 SAVEVPTR(PL_curcop);
4107 lex_start(NULL, NULL, FALSE);
4108 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
4109 veop, modname, imop);
4114 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
4120 PERL_ARGS_ASSERT_DOFILE;
4122 if (!force_builtin) {
4123 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
4124 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
4125 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
4126 gv = gvp ? *gvp : NULL;
4130 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
4131 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
4132 append_elem(OP_LIST, term,
4133 scalar(newUNOP(OP_RV2CV, 0,
4134 newGVOP(OP_GV, 0, gv))))));
4137 doop = newUNOP(OP_DOFILE, 0, scalar(term));
4143 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
4145 return newBINOP(OP_LSLICE, flags,
4146 list(force_list(subscript)),
4147 list(force_list(listval)) );
4151 S_is_list_assignment(pTHX_ register const OP *o)
4159 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
4160 o = cUNOPo->op_first;
4162 flags = o->op_flags;
4164 if (type == OP_COND_EXPR) {
4165 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
4166 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
4171 yyerror("Assignment to both a list and a scalar");
4175 if (type == OP_LIST &&
4176 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
4177 o->op_private & OPpLVAL_INTRO)
4180 if (type == OP_LIST || flags & OPf_PARENS ||
4181 type == OP_RV2AV || type == OP_RV2HV ||
4182 type == OP_ASLICE || type == OP_HSLICE)
4185 if (type == OP_PADAV || type == OP_PADHV)
4188 if (type == OP_RV2SV)
4195 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
4201 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
4202 return newLOGOP(optype, 0,
4203 mod(scalar(left), optype),
4204 newUNOP(OP_SASSIGN, 0, scalar(right)));
4207 return newBINOP(optype, OPf_STACKED,
4208 mod(scalar(left), optype), scalar(right));
4212 if (is_list_assignment(left)) {
4213 static const char no_list_state[] = "Initialization of state variables"
4214 " in list context currently forbidden";
4216 bool maybe_common_vars = TRUE;
4219 /* Grandfathering $[ assignment here. Bletch.*/
4220 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
4221 PL_eval_start = (left->op_type == OP_CONST) ? right : NULL;
4222 left = mod(left, OP_AASSIGN);
4225 else if (left->op_type == OP_CONST) {
4227 /* Result of assignment is always 1 (or we'd be dead already) */
4228 return newSVOP(OP_CONST, 0, newSViv(1));
4230 curop = list(force_list(left));
4231 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
4232 o->op_private = (U8)(0 | (flags >> 8));
4234 if ((left->op_type == OP_LIST
4235 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
4237 OP* lop = ((LISTOP*)left)->op_first;
4238 maybe_common_vars = FALSE;
4240 if (lop->op_type == OP_PADSV ||
4241 lop->op_type == OP_PADAV ||
4242 lop->op_type == OP_PADHV ||
4243 lop->op_type == OP_PADANY) {
4244 if (!(lop->op_private & OPpLVAL_INTRO))
4245 maybe_common_vars = TRUE;
4247 if (lop->op_private & OPpPAD_STATE) {
4248 if (left->op_private & OPpLVAL_INTRO) {
4249 /* Each variable in state($a, $b, $c) = ... */
4252 /* Each state variable in
4253 (state $a, my $b, our $c, $d, undef) = ... */
4255 yyerror(no_list_state);
4257 /* Each my variable in
4258 (state $a, my $b, our $c, $d, undef) = ... */
4260 } else if (lop->op_type == OP_UNDEF ||
4261 lop->op_type == OP_PUSHMARK) {
4262 /* undef may be interesting in
4263 (state $a, undef, state $c) */
4265 /* Other ops in the list. */
4266 maybe_common_vars = TRUE;
4268 lop = lop->op_sibling;
4271 else if ((left->op_private & OPpLVAL_INTRO)
4272 && ( left->op_type == OP_PADSV
4273 || left->op_type == OP_PADAV
4274 || left->op_type == OP_PADHV
4275 || left->op_type == OP_PADANY))
4277 maybe_common_vars = FALSE;
4278 if (left->op_private & OPpPAD_STATE) {
4279 /* All single variable list context state assignments, hence
4289 yyerror(no_list_state);
4293 /* PL_generation sorcery:
4294 * an assignment like ($a,$b) = ($c,$d) is easier than
4295 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
4296 * To detect whether there are common vars, the global var
4297 * PL_generation is incremented for each assign op we compile.
4298 * Then, while compiling the assign op, we run through all the
4299 * variables on both sides of the assignment, setting a spare slot
4300 * in each of them to PL_generation. If any of them already have
4301 * that value, we know we've got commonality. We could use a
4302 * single bit marker, but then we'd have to make 2 passes, first
4303 * to clear the flag, then to test and set it. To find somewhere
4304 * to store these values, evil chicanery is done with SvUVX().
4307 if (maybe_common_vars) {
4310 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4311 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4312 if (curop->op_type == OP_GV) {
4313 GV *gv = cGVOPx_gv(curop);
4315 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4317 GvASSIGN_GENERATION_set(gv, PL_generation);
4319 else if (curop->op_type == OP_PADSV ||
4320 curop->op_type == OP_PADAV ||
4321 curop->op_type == OP_PADHV ||
4322 curop->op_type == OP_PADANY)
4324 if (PAD_COMPNAME_GEN(curop->op_targ)
4325 == (STRLEN)PL_generation)
4327 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4330 else if (curop->op_type == OP_RV2CV)
4332 else if (curop->op_type == OP_RV2SV ||
4333 curop->op_type == OP_RV2AV ||
4334 curop->op_type == OP_RV2HV ||
4335 curop->op_type == OP_RV2GV) {
4336 if (lastop->op_type != OP_GV) /* funny deref? */
4339 else if (curop->op_type == OP_PUSHRE) {
4341 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4342 GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
4344 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4346 GvASSIGN_GENERATION_set(gv, PL_generation);
4350 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4353 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4355 GvASSIGN_GENERATION_set(gv, PL_generation);
4365 o->op_private |= OPpASSIGN_COMMON;
4368 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
4369 OP* tmpop = ((LISTOP*)right)->op_first;
4370 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4371 PMOP * const pm = (PMOP*)tmpop;
4372 if (left->op_type == OP_RV2AV &&
4373 !(left->op_private & OPpLVAL_INTRO) &&
4374 !(o->op_private & OPpASSIGN_COMMON) )
4376 tmpop = ((UNOP*)left)->op_first;
4377 if (tmpop->op_type == OP_GV
4379 && !pm->op_pmreplrootu.op_pmtargetoff
4381 && !pm->op_pmreplrootu.op_pmtargetgv
4385 pm->op_pmreplrootu.op_pmtargetoff
4386 = cPADOPx(tmpop)->op_padix;
4387 cPADOPx(tmpop)->op_padix = 0; /* steal it */
4389 pm->op_pmreplrootu.op_pmtargetgv
4390 = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
4391 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
4393 pm->op_pmflags |= PMf_ONCE;
4394 tmpop = cUNOPo->op_first; /* to list (nulled) */
4395 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4396 tmpop->op_sibling = NULL; /* don't free split */
4397 right->op_next = tmpop->op_next; /* fix starting loc */
4398 op_free(o); /* blow off assign */
4399 right->op_flags &= ~OPf_WANT;
4400 /* "I don't know and I don't care." */
4405 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4406 ((LISTOP*)right)->op_last->op_type == OP_CONST)
4408 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4409 if (SvIOK(sv) && SvIVX(sv) == 0)
4410 sv_setiv(sv, PL_modcount+1);
4418 right = newOP(OP_UNDEF, 0);
4419 if (right->op_type == OP_READLINE) {
4420 right->op_flags |= OPf_STACKED;
4421 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
4424 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
4425 o = newBINOP(OP_SASSIGN, flags,
4426 scalar(right), mod(scalar(left), OP_SASSIGN) );
4430 if (!PL_madskills) { /* assignment to $[ is ignored when making a mad dump */
4431 deprecate("assignment to $[");
4433 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4434 o->op_private |= OPpCONST_ARYBASE;
4442 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4445 const U32 seq = intro_my();
4448 NewOp(1101, cop, 1, COP);
4449 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4450 cop->op_type = OP_DBSTATE;
4451 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4454 cop->op_type = OP_NEXTSTATE;
4455 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4457 cop->op_flags = (U8)flags;
4458 CopHINTS_set(cop, PL_hints);
4460 cop->op_private |= NATIVE_HINTS;
4462 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4463 cop->op_next = (OP*)cop;
4466 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4467 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4469 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4470 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4471 if (cop->cop_hints_hash) {
4473 cop->cop_hints_hash->refcounted_he_refcnt++;
4474 HINTS_REFCNT_UNLOCK;
4478 = Perl_store_cop_label(aTHX_ cop->cop_hints_hash, label);
4480 PL_hints |= HINT_BLOCK_SCOPE;
4481 /* It seems that we need to defer freeing this pointer, as other parts
4482 of the grammar end up wanting to copy it after this op has been
4487 if (PL_parser && PL_parser->copline == NOLINE)
4488 CopLINE_set(cop, CopLINE(PL_curcop));
4490 CopLINE_set(cop, PL_parser->copline);
4492 PL_parser->copline = NOLINE;
4495 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4497 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4499 CopSTASH_set(cop, PL_curstash);
4501 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash) {
4502 /* this line can have a breakpoint - store the cop in IV */
4503 AV *av = CopFILEAVx(PL_curcop);
4505 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4506 if (svp && *svp != &PL_sv_undef ) {
4507 (void)SvIOK_on(*svp);
4508 SvIV_set(*svp, PTR2IV(cop));
4513 if (flags & OPf_SPECIAL)
4515 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4520 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4524 PERL_ARGS_ASSERT_NEWLOGOP;
4526 return new_logop(type, flags, &first, &other);
4530 S_search_const(pTHX_ OP *o)
4532 PERL_ARGS_ASSERT_SEARCH_CONST;
4534 switch (o->op_type) {
4538 if (o->op_flags & OPf_KIDS)
4539 return search_const(cUNOPo->op_first);
4546 if (!(o->op_flags & OPf_KIDS))
4548 kid = cLISTOPo->op_first;
4550 switch (kid->op_type) {
4554 kid = kid->op_sibling;
4557 if (kid != cLISTOPo->op_last)
4563 kid = cLISTOPo->op_last;
4565 return search_const(kid);
4573 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4581 int prepend_not = 0;
4583 PERL_ARGS_ASSERT_NEW_LOGOP;
4588 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4589 return newBINOP(type, flags, scalar(first), scalar(other));
4591 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
4593 scalarboolean(first);
4594 /* optimize AND and OR ops that have NOTs as children */
4595 if (first->op_type == OP_NOT
4596 && (first->op_flags & OPf_KIDS)
4597 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
4598 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
4600 if (type == OP_AND || type == OP_OR) {
4606 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
4608 prepend_not = 1; /* prepend a NOT op later */
4612 /* search for a constant op that could let us fold the test */
4613 if ((cstop = search_const(first))) {
4614 if (cstop->op_private & OPpCONST_STRICT)
4615 no_bareword_allowed(cstop);
4616 else if ((cstop->op_private & OPpCONST_BARE))
4617 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4618 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
4619 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
4620 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
4622 if (other->op_type == OP_CONST)
4623 other->op_private |= OPpCONST_SHORTCIRCUIT;
4625 OP *newop = newUNOP(OP_NULL, 0, other);
4626 op_getmad(first, newop, '1');
4627 newop->op_targ = type; /* set "was" field */
4631 if (other->op_type == OP_LEAVE)
4632 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
4636 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4637 const OP *o2 = other;
4638 if ( ! (o2->op_type == OP_LIST
4639 && (( o2 = cUNOPx(o2)->op_first))
4640 && o2->op_type == OP_PUSHMARK
4641 && (( o2 = o2->op_sibling)) )
4644 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4645 || o2->op_type == OP_PADHV)
4646 && o2->op_private & OPpLVAL_INTRO
4647 && !(o2->op_private & OPpPAD_STATE))
4649 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
4650 "Deprecated use of my() in false conditional");
4654 if (first->op_type == OP_CONST)
4655 first->op_private |= OPpCONST_SHORTCIRCUIT;
4657 first = newUNOP(OP_NULL, 0, first);
4658 op_getmad(other, first, '2');
4659 first->op_targ = type; /* set "was" field */
4666 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4667 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4669 const OP * const k1 = ((UNOP*)first)->op_first;
4670 const OP * const k2 = k1->op_sibling;
4672 switch (first->op_type)
4675 if (k2 && k2->op_type == OP_READLINE
4676 && (k2->op_flags & OPf_STACKED)
4677 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4679 warnop = k2->op_type;
4684 if (k1->op_type == OP_READDIR
4685 || k1->op_type == OP_GLOB
4686 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4687 || k1->op_type == OP_EACH)
4689 warnop = ((k1->op_type == OP_NULL)
4690 ? (OPCODE)k1->op_targ : k1->op_type);
4695 const line_t oldline = CopLINE(PL_curcop);
4696 CopLINE_set(PL_curcop, PL_parser->copline);
4697 Perl_warner(aTHX_ packWARN(WARN_MISC),
4698 "Value of %s%s can be \"0\"; test with defined()",
4700 ((warnop == OP_READLINE || warnop == OP_GLOB)
4701 ? " construct" : "() operator"));
4702 CopLINE_set(PL_curcop, oldline);
4709 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4710 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4712 NewOp(1101, logop, 1, LOGOP);
4714 logop->op_type = (OPCODE)type;
4715 logop->op_ppaddr = PL_ppaddr[type];
4716 logop->op_first = first;
4717 logop->op_flags = (U8)(flags | OPf_KIDS);
4718 logop->op_other = LINKLIST(other);
4719 logop->op_private = (U8)(1 | (flags >> 8));
4721 /* establish postfix order */
4722 logop->op_next = LINKLIST(first);
4723 first->op_next = (OP*)logop;
4724 first->op_sibling = other;
4726 CHECKOP(type,logop);
4728 o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
4735 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4743 PERL_ARGS_ASSERT_NEWCONDOP;
4746 return newLOGOP(OP_AND, 0, first, trueop);
4748 return newLOGOP(OP_OR, 0, first, falseop);
4750 scalarboolean(first);
4751 if ((cstop = search_const(first))) {
4752 /* Left or right arm of the conditional? */
4753 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
4754 OP *live = left ? trueop : falseop;
4755 OP *const dead = left ? falseop : trueop;
4756 if (cstop->op_private & OPpCONST_BARE &&
4757 cstop->op_private & OPpCONST_STRICT) {
4758 no_bareword_allowed(cstop);
4761 /* This is all dead code when PERL_MAD is not defined. */
4762 live = newUNOP(OP_NULL, 0, live);
4763 op_getmad(first, live, 'C');
4764 op_getmad(dead, live, left ? 'e' : 't');
4769 if (live->op_type == OP_LEAVE)
4770 live = newUNOP(OP_NULL, OPf_SPECIAL, live);
4773 NewOp(1101, logop, 1, LOGOP);
4774 logop->op_type = OP_COND_EXPR;
4775 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4776 logop->op_first = first;
4777 logop->op_flags = (U8)(flags | OPf_KIDS);
4778 logop->op_private = (U8)(1 | (flags >> 8));
4779 logop->op_other = LINKLIST(trueop);
4780 logop->op_next = LINKLIST(falseop);
4782 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4785 /* establish postfix order */
4786 start = LINKLIST(first);
4787 first->op_next = (OP*)logop;
4789 first->op_sibling = trueop;
4790 trueop->op_sibling = falseop;
4791 o = newUNOP(OP_NULL, 0, (OP*)logop);
4793 trueop->op_next = falseop->op_next = o;
4800 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4809 PERL_ARGS_ASSERT_NEWRANGE;
4811 NewOp(1101, range, 1, LOGOP);
4813 range->op_type = OP_RANGE;
4814 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4815 range->op_first = left;
4816 range->op_flags = OPf_KIDS;
4817 leftstart = LINKLIST(left);
4818 range->op_other = LINKLIST(right);
4819 range->op_private = (U8)(1 | (flags >> 8));
4821 left->op_sibling = right;
4823 range->op_next = (OP*)range;
4824 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4825 flop = newUNOP(OP_FLOP, 0, flip);
4826 o = newUNOP(OP_NULL, 0, flop);
4828 range->op_next = leftstart;
4830 left->op_next = flip;
4831 right->op_next = flop;
4833 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4834 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4835 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4836 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4838 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4839 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4842 if (!flip->op_private || !flop->op_private)
4843 linklist(o); /* blow off optimizer unless constant */
4849 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4854 const bool once = block && block->op_flags & OPf_SPECIAL &&
4855 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4857 PERL_UNUSED_ARG(debuggable);
4860 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4861 return block; /* do {} while 0 does once */
4862 if (expr->op_type == OP_READLINE
4863 || expr->op_type == OP_READDIR
4864 || expr->op_type == OP_GLOB
4865 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4866 expr = newUNOP(OP_DEFINED, 0,
4867 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4868 } else if (expr->op_flags & OPf_KIDS) {
4869 const OP * const k1 = ((UNOP*)expr)->op_first;
4870 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4871 switch (expr->op_type) {
4873 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
4874 && (k2->op_flags & OPf_STACKED)
4875 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4876 expr = newUNOP(OP_DEFINED, 0, expr);
4880 if (k1 && (k1->op_type == OP_READDIR
4881 || k1->op_type == OP_GLOB
4882 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4883 || k1->op_type == OP_EACH))
4884 expr = newUNOP(OP_DEFINED, 0, expr);
4890 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4891 * op, in listop. This is wrong. [perl #27024] */
4893 block = newOP(OP_NULL, 0);
4894 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4895 o = new_logop(OP_AND, 0, &expr, &listop);
4898 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4900 if (once && o != listop)
4901 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4904 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4906 o->op_flags |= flags;
4908 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4913 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4914 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4923 PERL_UNUSED_ARG(debuggable);
4926 if (expr->op_type == OP_READLINE
4927 || expr->op_type == OP_READDIR
4928 || expr->op_type == OP_GLOB
4929 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4930 expr = newUNOP(OP_DEFINED, 0,
4931 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4932 } else if (expr->op_flags & OPf_KIDS) {
4933 const OP * const k1 = ((UNOP*)expr)->op_first;
4934 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4935 switch (expr->op_type) {
4937 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
4938 && (k2->op_flags & OPf_STACKED)
4939 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4940 expr = newUNOP(OP_DEFINED, 0, expr);
4944 if (k1 && (k1->op_type == OP_READDIR
4945 || k1->op_type == OP_GLOB
4946 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4947 || k1->op_type == OP_EACH))
4948 expr = newUNOP(OP_DEFINED, 0, expr);
4955 block = newOP(OP_NULL, 0);
4956 else if (cont || has_my) {
4957 block = scope(block);
4961 next = LINKLIST(cont);
4964 OP * const unstack = newOP(OP_UNSTACK, 0);
4967 cont = append_elem(OP_LINESEQ, cont, unstack);
4971 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4973 redo = LINKLIST(listop);
4976 PL_parser->copline = (line_t)whileline;
4978 o = new_logop(OP_AND, 0, &expr, &listop);
4979 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4980 op_free(expr); /* oops, it's a while (0) */
4982 return NULL; /* listop already freed by new_logop */
4985 ((LISTOP*)listop)->op_last->op_next =
4986 (o == listop ? redo : LINKLIST(o));
4992 NewOp(1101,loop,1,LOOP);
4993 loop->op_type = OP_ENTERLOOP;
4994 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4995 loop->op_private = 0;
4996 loop->op_next = (OP*)loop;
4999 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
5001 loop->op_redoop = redo;
5002 loop->op_lastop = o;
5003 o->op_private |= loopflags;
5006 loop->op_nextop = next;
5008 loop->op_nextop = o;
5010 o->op_flags |= flags;
5011 o->op_private |= (flags >> 8);
5016 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
5021 PADOFFSET padoff = 0;
5026 PERL_ARGS_ASSERT_NEWFOROP;
5029 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
5030 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
5031 sv->op_type = OP_RV2GV;
5032 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
5034 /* The op_type check is needed to prevent a possible segfault
5035 * if the loop variable is undeclared and 'strict vars' is in
5036 * effect. This is illegal but is nonetheless parsed, so we
5037 * may reach this point with an OP_CONST where we're expecting
5040 if (cUNOPx(sv)->op_first->op_type == OP_GV
5041 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
5042 iterpflags |= OPpITER_DEF;
5044 else if (sv->op_type == OP_PADSV) { /* private variable */
5045 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
5046 padoff = sv->op_targ;
5056 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
5058 SV *const namesv = PAD_COMPNAME_SV(padoff);
5060 const char *const name = SvPV_const(namesv, len);
5062 if (len == 2 && name[0] == '$' && name[1] == '_')
5063 iterpflags |= OPpITER_DEF;
5067 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
5068 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
5069 sv = newGVOP(OP_GV, 0, PL_defgv);
5074 iterpflags |= OPpITER_DEF;
5076 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
5077 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
5078 iterflags |= OPf_STACKED;
5080 else if (expr->op_type == OP_NULL &&
5081 (expr->op_flags & OPf_KIDS) &&
5082 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
5084 /* Basically turn for($x..$y) into the same as for($x,$y), but we
5085 * set the STACKED flag to indicate that these values are to be
5086 * treated as min/max values by 'pp_iterinit'.
5088 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
5089 LOGOP* const range = (LOGOP*) flip->op_first;
5090 OP* const left = range->op_first;
5091 OP* const right = left->op_sibling;
5094 range->op_flags &= ~OPf_KIDS;
5095 range->op_first = NULL;
5097 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
5098 listop->op_first->op_next = range->op_next;
5099 left->op_next = range->op_other;
5100 right->op_next = (OP*)listop;
5101 listop->op_next = listop->op_first;
5104 op_getmad(expr,(OP*)listop,'O');
5108 expr = (OP*)(listop);
5110 iterflags |= OPf_STACKED;
5113 expr = mod(force_list(expr), OP_GREPSTART);
5116 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
5117 append_elem(OP_LIST, expr, scalar(sv))));
5118 assert(!loop->op_next);
5119 /* for my $x () sets OPpLVAL_INTRO;
5120 * for our $x () sets OPpOUR_INTRO */
5121 loop->op_private = (U8)iterpflags;
5122 #ifdef PL_OP_SLAB_ALLOC
5125 NewOp(1234,tmp,1,LOOP);
5126 Copy(loop,tmp,1,LISTOP);
5127 S_op_destroy(aTHX_ (OP*)loop);
5131 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
5133 loop->op_targ = padoff;
5134 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
5136 op_getmad(madsv, (OP*)loop, 'v');
5137 PL_parser->copline = forline;
5138 return newSTATEOP(0, label, wop);
5142 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
5147 PERL_ARGS_ASSERT_NEWLOOPEX;
5149 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
5151 if (type != OP_GOTO || label->op_type == OP_CONST) {
5152 /* "last()" means "last" */
5153 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
5154 o = newOP(type, OPf_SPECIAL);
5156 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
5157 ? SvPV_nolen_const(((SVOP*)label)->op_sv)
5161 op_getmad(label,o,'L');
5167 /* Check whether it's going to be a goto &function */
5168 if (label->op_type == OP_ENTERSUB
5169 && !(label->op_flags & OPf_STACKED))
5170 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
5171 o = newUNOP(type, OPf_STACKED, label);
5173 PL_hints |= HINT_BLOCK_SCOPE;
5177 /* if the condition is a literal array or hash
5178 (or @{ ... } etc), make a reference to it.
5181 S_ref_array_or_hash(pTHX_ OP *cond)
5184 && (cond->op_type == OP_RV2AV
5185 || cond->op_type == OP_PADAV
5186 || cond->op_type == OP_RV2HV
5187 || cond->op_type == OP_PADHV))
5189 return newUNOP(OP_REFGEN,
5190 0, mod(cond, OP_REFGEN));
5196 /* These construct the optree fragments representing given()
5199 entergiven and enterwhen are LOGOPs; the op_other pointer
5200 points up to the associated leave op. We need this so we
5201 can put it in the context and make break/continue work.
5202 (Also, of course, pp_enterwhen will jump straight to
5203 op_other if the match fails.)
5207 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
5208 I32 enter_opcode, I32 leave_opcode,
5209 PADOFFSET entertarg)
5215 PERL_ARGS_ASSERT_NEWGIVWHENOP;
5217 NewOp(1101, enterop, 1, LOGOP);
5218 enterop->op_type = (Optype)enter_opcode;
5219 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
5220 enterop->op_flags = (U8) OPf_KIDS;
5221 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
5222 enterop->op_private = 0;
5224 o = newUNOP(leave_opcode, 0, (OP *) enterop);
5227 enterop->op_first = scalar(cond);
5228 cond->op_sibling = block;
5230 o->op_next = LINKLIST(cond);
5231 cond->op_next = (OP *) enterop;
5234 /* This is a default {} block */
5235 enterop->op_first = block;
5236 enterop->op_flags |= OPf_SPECIAL;
5238 o->op_next = (OP *) enterop;
5241 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
5242 entergiven and enterwhen both
5245 enterop->op_next = LINKLIST(block);
5246 block->op_next = enterop->op_other = o;
5251 /* Does this look like a boolean operation? For these purposes
5252 a boolean operation is:
5253 - a subroutine call [*]
5254 - a logical connective
5255 - a comparison operator
5256 - a filetest operator, with the exception of -s -M -A -C
5257 - defined(), exists() or eof()
5258 - /$re/ or $foo =~ /$re/
5260 [*] possibly surprising
5263 S_looks_like_bool(pTHX_ const OP *o)
5267 PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
5269 switch(o->op_type) {
5272 return looks_like_bool(cLOGOPo->op_first);
5276 looks_like_bool(cLOGOPo->op_first)
5277 && looks_like_bool(cLOGOPo->op_first->op_sibling));
5281 o->op_flags & OPf_KIDS
5282 && looks_like_bool(cUNOPo->op_first));
5285 return looks_like_bool(cUNOPo->op_first);
5290 case OP_NOT: case OP_XOR:
5292 case OP_EQ: case OP_NE: case OP_LT:
5293 case OP_GT: case OP_LE: case OP_GE:
5295 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
5296 case OP_I_GT: case OP_I_LE: case OP_I_GE:
5298 case OP_SEQ: case OP_SNE: case OP_SLT:
5299 case OP_SGT: case OP_SLE: case OP_SGE:
5303 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
5304 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
5305 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
5306 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
5307 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
5308 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
5309 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
5310 case OP_FTTEXT: case OP_FTBINARY:
5312 case OP_DEFINED: case OP_EXISTS:
5313 case OP_MATCH: case OP_EOF:
5320 /* Detect comparisons that have been optimized away */
5321 if (cSVOPo->op_sv == &PL_sv_yes
5322 || cSVOPo->op_sv == &PL_sv_no)
5335 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
5338 PERL_ARGS_ASSERT_NEWGIVENOP;
5339 return newGIVWHENOP(
5340 ref_array_or_hash(cond),
5342 OP_ENTERGIVEN, OP_LEAVEGIVEN,
5346 /* If cond is null, this is a default {} block */
5348 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
5350 const bool cond_llb = (!cond || looks_like_bool(cond));
5353 PERL_ARGS_ASSERT_NEWWHENOP;
5358 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
5360 scalar(ref_array_or_hash(cond)));
5363 return newGIVWHENOP(
5365 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
5366 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
5370 =for apidoc cv_undef
5372 Clear out all the active components of a CV. This can happen either
5373 by an explicit C<undef &foo>, or by the reference count going to zero.
5374 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
5375 children can still follow the full lexical scope chain.
5381 Perl_cv_undef(pTHX_ CV *cv)
5385 PERL_ARGS_ASSERT_CV_UNDEF;
5387 DEBUG_X(PerlIO_printf(Perl_debug_log,
5388 "CV undef: cv=0x%"UVxf" comppad=0x%"UVxf"\n",
5389 PTR2UV(cv), PTR2UV(PL_comppad))
5393 if (CvFILE(cv) && !CvISXSUB(cv)) {
5394 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
5395 Safefree(CvFILE(cv));
5400 if (!CvISXSUB(cv) && CvROOT(cv)) {
5401 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
5402 Perl_croak(aTHX_ "Can't undef active subroutine");
5405 PAD_SAVE_SETNULLPAD();
5407 op_free(CvROOT(cv));
5412 SvPOK_off(MUTABLE_SV(cv)); /* forget prototype */
5417 /* remove CvOUTSIDE unless this is an undef rather than a free */
5418 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
5419 if (!CvWEAKOUTSIDE(cv))
5420 SvREFCNT_dec(CvOUTSIDE(cv));
5421 CvOUTSIDE(cv) = NULL;
5424 SvREFCNT_dec(MUTABLE_SV(CvXSUBANY(cv).any_ptr));
5427 if (CvISXSUB(cv) && CvXSUB(cv)) {
5430 /* delete all flags except WEAKOUTSIDE */
5431 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
5435 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
5438 PERL_ARGS_ASSERT_CV_CKPROTO_LEN;
5440 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
5441 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
5442 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
5443 || (p && (len != SvCUR(cv) /* Not the same length. */
5444 || memNE(p, SvPVX_const(cv), len))))
5445 && ckWARN_d(WARN_PROTOTYPE)) {
5446 SV* const msg = sv_newmortal();
5450 gv_efullname3(name = sv_newmortal(), gv, NULL);
5451 sv_setpvs(msg, "Prototype mismatch:");
5453 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
5455 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
5457 sv_catpvs(msg, ": none");
5458 sv_catpvs(msg, " vs ");
5460 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
5462 sv_catpvs(msg, "none");
5463 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
5467 static void const_sv_xsub(pTHX_ CV* cv);
5471 =head1 Optree Manipulation Functions
5473 =for apidoc cv_const_sv
5475 If C<cv> is a constant sub eligible for inlining. returns the constant
5476 value returned by the sub. Otherwise, returns NULL.
5478 Constant subs can be created with C<newCONSTSUB> or as described in
5479 L<perlsub/"Constant Functions">.
5484 Perl_cv_const_sv(pTHX_ const CV *const cv)
5486 PERL_UNUSED_CONTEXT;
5489 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
5491 return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
5494 /* op_const_sv: examine an optree to determine whether it's in-lineable.
5495 * Can be called in 3 ways:
5498 * look for a single OP_CONST with attached value: return the value
5500 * cv && CvCLONE(cv) && !CvCONST(cv)
5502 * examine the clone prototype, and if contains only a single
5503 * OP_CONST referencing a pad const, or a single PADSV referencing
5504 * an outer lexical, return a non-zero value to indicate the CV is
5505 * a candidate for "constizing" at clone time
5509 * We have just cloned an anon prototype that was marked as a const
5510 * candidiate. Try to grab the current value, and in the case of
5511 * PADSV, ignore it if it has multiple references. Return the value.
5515 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
5526 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
5527 o = cLISTOPo->op_first->op_sibling;
5529 for (; o; o = o->op_next) {
5530 const OPCODE type = o->op_type;
5532 if (sv && o->op_next == o)
5534 if (o->op_next != o) {
5535 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
5537 if (type == OP_DBSTATE)
5540 if (type == OP_LEAVESUB || type == OP_RETURN)
5544 if (type == OP_CONST && cSVOPo->op_sv)
5546 else if (cv && type == OP_CONST) {
5547 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5551 else if (cv && type == OP_PADSV) {
5552 if (CvCONST(cv)) { /* newly cloned anon */
5553 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5554 /* the candidate should have 1 ref from this pad and 1 ref
5555 * from the parent */
5556 if (!sv || SvREFCNT(sv) != 2)
5563 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
5564 sv = &PL_sv_undef; /* an arbitrary non-null value */
5579 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5582 /* This would be the return value, but the return cannot be reached. */
5583 OP* pegop = newOP(OP_NULL, 0);
5586 PERL_UNUSED_ARG(floor);
5596 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
5598 NORETURN_FUNCTION_END;
5603 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
5605 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
5609 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5615 register CV *cv = NULL;
5617 /* If the subroutine has no body, no attributes, and no builtin attributes
5618 then it's just a sub declaration, and we may be able to get away with
5619 storing with a placeholder scalar in the symbol table, rather than a
5620 full GV and CV. If anything is present then it will take a full CV to
5622 const I32 gv_fetch_flags
5623 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5625 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
5626 const char * const name = o ? SvPV_nolen_const(cSVOPo->op_sv) : NULL;
5630 assert(proto->op_type == OP_CONST);
5631 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
5637 gv = gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV);
5639 } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
5640 SV * const sv = sv_newmortal();
5641 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
5642 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
5643 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
5644 gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
5646 } else if (PL_curstash) {
5647 gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
5650 gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
5654 if (!PL_madskills) {
5663 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
5664 maximum a prototype before. */
5665 if (SvTYPE(gv) > SVt_NULL) {
5666 if (!SvPOK((const SV *)gv)
5667 && !(SvIOK((const SV *)gv) && SvIVX((const SV *)gv) == -1))
5669 Perl_ck_warner_d(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
5671 cv_ckproto_len((const CV *)gv, NULL, ps, ps_len);
5674 sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
5676 sv_setiv(MUTABLE_SV(gv), -1);
5678 SvREFCNT_dec(PL_compcv);
5679 cv = PL_compcv = NULL;
5683 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
5685 if (!block || !ps || *ps || attrs
5686 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5688 || block->op_type == OP_NULL
5693 const_sv = op_const_sv(block, NULL);
5696 const bool exists = CvROOT(cv) || CvXSUB(cv);
5698 /* if the subroutine doesn't exist and wasn't pre-declared
5699 * with a prototype, assume it will be AUTOLOADed,
5700 * skipping the prototype check
5702 if (exists || SvPOK(cv))
5703 cv_ckproto_len(cv, gv, ps, ps_len);
5704 /* already defined (or promised)? */
5705 if (exists || GvASSUMECV(gv)) {
5708 || block->op_type == OP_NULL
5711 if (CvFLAGS(PL_compcv)) {
5712 /* might have had built-in attrs applied */
5713 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5715 /* just a "sub foo;" when &foo is already defined */
5716 SAVEFREESV(PL_compcv);
5721 && block->op_type != OP_NULL
5724 if (ckWARN(WARN_REDEFINE)
5726 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
5728 const line_t oldline = CopLINE(PL_curcop);
5729 if (PL_parser && PL_parser->copline != NOLINE)
5730 CopLINE_set(PL_curcop, PL_parser->copline);
5731 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5732 CvCONST(cv) ? "Constant subroutine %s redefined"
5733 : "Subroutine %s redefined", name);
5734 CopLINE_set(PL_curcop, oldline);
5737 if (!PL_minus_c) /* keep old one around for madskills */
5740 /* (PL_madskills unset in used file.) */
5748 SvREFCNT_inc_simple_void_NN(const_sv);
5750 assert(!CvROOT(cv) && !CvCONST(cv));
5751 sv_setpvs(MUTABLE_SV(cv), ""); /* prototype is "" */
5752 CvXSUBANY(cv).any_ptr = const_sv;
5753 CvXSUB(cv) = const_sv_xsub;
5759 cv = newCONSTSUB(NULL, name, const_sv);
5761 mro_method_changed_in( /* sub Foo::Bar () { 123 } */
5762 (CvGV(cv) && GvSTASH(CvGV(cv)))
5771 SvREFCNT_dec(PL_compcv);
5775 if (cv) { /* must reuse cv if autoloaded */
5776 /* transfer PL_compcv to cv */
5779 && block->op_type != OP_NULL
5783 CvFLAGS(cv) = CvFLAGS(PL_compcv);
5784 if (!CvWEAKOUTSIDE(cv))
5785 SvREFCNT_dec(CvOUTSIDE(cv));
5786 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
5787 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
5788 CvOUTSIDE(PL_compcv) = 0;
5789 CvPADLIST(cv) = CvPADLIST(PL_compcv);
5790 CvPADLIST(PL_compcv) = 0;
5791 /* inner references to PL_compcv must be fixed up ... */
5792 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
5793 if (PERLDB_INTER)/* Advice debugger on the new sub. */
5794 ++PL_sub_generation;
5797 /* Might have had built-in attributes applied -- propagate them. */
5798 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5800 /* ... before we throw it away */
5801 SvREFCNT_dec(PL_compcv);
5809 if (strEQ(name, "import")) {
5810 PL_formfeed = MUTABLE_SV(cv);
5811 /* diag_listed_as: SKIPME */
5812 Perl_warner(aTHX_ packWARN(WARN_VOID), "0x%"UVxf"\n", PTR2UV(cv));
5816 mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar { (shift)+1 } */
5821 CvFILE_set_from_cop(cv, PL_curcop);
5822 CvSTASH(cv) = PL_curstash;
5825 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
5826 HV *stash = name && GvSTASH(CvGV(cv)) ? GvSTASH(CvGV(cv)) : PL_curstash;
5827 apply_attrs(stash, MUTABLE_SV(cv), attrs, FALSE);
5831 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
5833 if (PL_parser && PL_parser->error_count) {
5837 const char *s = strrchr(name, ':');
5839 if (strEQ(s, "BEGIN")) {
5840 const char not_safe[] =
5841 "BEGIN not safe after errors--compilation aborted";
5842 if (PL_in_eval & EVAL_KEEPERR)
5843 Perl_croak(aTHX_ not_safe);
5845 /* force display of errors found but not reported */
5846 sv_catpv(ERRSV, not_safe);
5847 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
5856 /* If we assign an optree to a PVCV, then we've defined a subroutine that
5857 the debugger could be able to set a breakpoint in, so signal to
5858 pp_entereval that it should not throw away any saved lines at scope
5861 PL_breakable_sub_gen++;
5863 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5864 mod(scalarseq(block), OP_LEAVESUBLV));
5865 block->op_attached = 1;
5868 /* This makes sub {}; work as expected. */
5869 if (block->op_type == OP_STUB) {
5870 OP* const newblock = newSTATEOP(0, NULL, 0);
5872 op_getmad(block,newblock,'B');
5879 block->op_attached = 1;
5880 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5882 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5883 OpREFCNT_set(CvROOT(cv), 1);
5884 CvSTART(cv) = LINKLIST(CvROOT(cv));
5885 CvROOT(cv)->op_next = 0;
5886 CALL_PEEP(CvSTART(cv));
5888 /* now that optimizer has done its work, adjust pad values */
5890 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
5893 assert(!CvCONST(cv));
5894 if (ps && !*ps && op_const_sv(block, cv))
5899 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5900 SV * const sv = newSV(0);
5901 SV * const tmpstr = sv_newmortal();
5902 GV * const db_postponed = gv_fetchpvs("DB::postponed",
5903 GV_ADDMULTI, SVt_PVHV);
5906 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5908 (long)PL_subline, (long)CopLINE(PL_curcop));
5909 gv_efullname3(tmpstr, gv, NULL);
5910 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
5911 SvCUR(tmpstr), sv, 0);
5912 hv = GvHVn(db_postponed);
5913 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
5914 CV * const pcv = GvCV(db_postponed);
5920 call_sv(MUTABLE_SV(pcv), G_DISCARD);
5925 if (name && ! (PL_parser && PL_parser->error_count))
5926 process_special_blocks(name, gv, cv);
5931 PL_parser->copline = NOLINE;
5937 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
5940 const char *const colon = strrchr(fullname,':');
5941 const char *const name = colon ? colon + 1 : fullname;
5943 PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
5946 if (strEQ(name, "BEGIN")) {
5947 const I32 oldscope = PL_scopestack_ix;
5949 SAVECOPFILE(&PL_compiling);
5950 SAVECOPLINE(&PL_compiling);
5952 DEBUG_x( dump_sub(gv) );
5953 Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
5954 GvCV(gv) = 0; /* cv has been hijacked */
5955 call_list(oldscope, PL_beginav);
5957 PL_curcop = &PL_compiling;
5958 CopHINTS_set(&PL_compiling, PL_hints);
5965 if strEQ(name, "END") {
5966 DEBUG_x( dump_sub(gv) );
5967 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
5970 } else if (*name == 'U') {
5971 if (strEQ(name, "UNITCHECK")) {
5972 /* It's never too late to run a unitcheck block */
5973 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
5977 } else if (*name == 'C') {
5978 if (strEQ(name, "CHECK")) {
5980 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
5981 "Too late to run CHECK block");
5982 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
5986 } else if (*name == 'I') {
5987 if (strEQ(name, "INIT")) {
5989 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
5990 "Too late to run INIT block");
5991 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
5997 DEBUG_x( dump_sub(gv) );
5998 GvCV(gv) = 0; /* cv has been hijacked */
6003 =for apidoc newCONSTSUB
6005 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
6006 eligible for inlining at compile-time.
6008 Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
6009 which won't be called if used as a destructor, but will suppress the overhead
6010 of a call to C<AUTOLOAD>. (This form, however, isn't eligible for inlining at
6017 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
6022 const char *const file = CopFILE(PL_curcop);
6024 SV *const temp_sv = CopFILESV(PL_curcop);
6025 const char *const file = temp_sv ? SvPV_nolen_const(temp_sv) : NULL;
6030 if (IN_PERL_RUNTIME) {
6031 /* at runtime, it's not safe to manipulate PL_curcop: it may be
6032 * an op shared between threads. Use a non-shared COP for our
6034 SAVEVPTR(PL_curcop);
6035 PL_curcop = &PL_compiling;
6037 SAVECOPLINE(PL_curcop);
6038 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
6041 PL_hints &= ~HINT_BLOCK_SCOPE;
6044 SAVESPTR(PL_curstash);
6045 SAVECOPSTASH(PL_curcop);
6046 PL_curstash = stash;
6047 CopSTASH_set(PL_curcop,stash);
6050 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
6051 and so doesn't get free()d. (It's expected to be from the C pre-
6052 processor __FILE__ directive). But we need a dynamically allocated one,
6053 and we need it to get freed. */
6054 cv = newXS_flags(name, const_sv_xsub, file ? file : "", "",
6055 XS_DYNAMIC_FILENAME);
6056 CvXSUBANY(cv).any_ptr = sv;
6061 CopSTASH_free(PL_curcop);
6069 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
6070 const char *const filename, const char *const proto,
6073 CV *cv = newXS(name, subaddr, filename);
6075 PERL_ARGS_ASSERT_NEWXS_FLAGS;
6077 if (flags & XS_DYNAMIC_FILENAME) {
6078 /* We need to "make arrangements" (ie cheat) to ensure that the
6079 filename lasts as long as the PVCV we just created, but also doesn't
6081 STRLEN filename_len = strlen(filename);
6082 STRLEN proto_and_file_len = filename_len;
6083 char *proto_and_file;
6087 proto_len = strlen(proto);
6088 proto_and_file_len += proto_len;
6090 Newx(proto_and_file, proto_and_file_len + 1, char);
6091 Copy(proto, proto_and_file, proto_len, char);
6092 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
6095 proto_and_file = savepvn(filename, filename_len);
6098 /* This gets free()d. :-) */
6099 sv_usepvn_flags(MUTABLE_SV(cv), proto_and_file, proto_and_file_len,
6100 SV_HAS_TRAILING_NUL);
6102 /* This gives us the correct prototype, rather than one with the
6103 file name appended. */
6104 SvCUR_set(cv, proto_len);
6108 CvFILE(cv) = proto_and_file + proto_len;
6110 sv_setpv(MUTABLE_SV(cv), proto);
6116 =for apidoc U||newXS
6118 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
6119 static storage, as it is used directly as CvFILE(), without a copy being made.
6125 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
6128 GV * const gv = gv_fetchpv(name ? name :
6129 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
6130 GV_ADDMULTI, SVt_PVCV);
6133 PERL_ARGS_ASSERT_NEWXS;
6136 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
6138 if ((cv = (name ? GvCV(gv) : NULL))) {
6140 /* just a cached method */
6144 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
6145 /* already defined (or promised) */
6146 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
6147 if (ckWARN(WARN_REDEFINE)) {
6148 GV * const gvcv = CvGV(cv);
6150 HV * const stash = GvSTASH(gvcv);
6152 const char *redefined_name = HvNAME_get(stash);
6153 if ( strEQ(redefined_name,"autouse") ) {
6154 const line_t oldline = CopLINE(PL_curcop);
6155 if (PL_parser && PL_parser->copline != NOLINE)
6156 CopLINE_set(PL_curcop, PL_parser->copline);
6157 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6158 CvCONST(cv) ? "Constant subroutine %s redefined"
6159 : "Subroutine %s redefined"
6161 CopLINE_set(PL_curcop, oldline);
6171 if (cv) /* must reuse cv if autoloaded */
6174 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
6178 mro_method_changed_in(GvSTASH(gv)); /* newXS */
6182 (void)gv_fetchfile(filename);
6183 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
6184 an external constant string */
6186 CvXSUB(cv) = subaddr;
6189 process_special_blocks(name, gv, cv);
6201 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
6206 OP* pegop = newOP(OP_NULL, 0);
6210 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
6211 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
6214 if ((cv = GvFORM(gv))) {
6215 if (ckWARN(WARN_REDEFINE)) {
6216 const line_t oldline = CopLINE(PL_curcop);
6217 if (PL_parser && PL_parser->copline != NOLINE)
6218 CopLINE_set(PL_curcop, PL_parser->copline);
6220 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6221 "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
6223 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6224 "Format STDOUT redefined");
6226 CopLINE_set(PL_curcop, oldline);
6233 CvFILE_set_from_cop(cv, PL_curcop);
6236 pad_tidy(padtidy_FORMAT);
6237 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
6238 CvROOT(cv)->op_private |= OPpREFCOUNTED;
6239 OpREFCNT_set(CvROOT(cv), 1);
6240 CvSTART(cv) = LINKLIST(CvROOT(cv));
6241 CvROOT(cv)->op_next = 0;
6242 CALL_PEEP(CvSTART(cv));
6244 op_getmad(o,pegop,'n');
6245 op_getmad_weak(block, pegop, 'b');
6250 PL_parser->copline = NOLINE;
6258 Perl_newANONLIST(pTHX_ OP *o)
6260 return convert(OP_ANONLIST, OPf_SPECIAL, o);
6264 Perl_newANONHASH(pTHX_ OP *o)
6266 return convert(OP_ANONHASH, OPf_SPECIAL, o);
6270 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
6272 return newANONATTRSUB(floor, proto, NULL, block);
6276 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
6278 return newUNOP(OP_REFGEN, 0,
6279 newSVOP(OP_ANONCODE, 0,
6280 MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block))));
6284 Perl_oopsAV(pTHX_ OP *o)
6288 PERL_ARGS_ASSERT_OOPSAV;
6290 switch (o->op_type) {
6292 o->op_type = OP_PADAV;
6293 o->op_ppaddr = PL_ppaddr[OP_PADAV];
6294 return ref(o, OP_RV2AV);
6297 o->op_type = OP_RV2AV;
6298 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
6303 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
6310 Perl_oopsHV(pTHX_ OP *o)
6314 PERL_ARGS_ASSERT_OOPSHV;
6316 switch (o->op_type) {
6319 o->op_type = OP_PADHV;
6320 o->op_ppaddr = PL_ppaddr[OP_PADHV];
6321 return ref(o, OP_RV2HV);
6325 o->op_type = OP_RV2HV;
6326 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
6331 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
6338 Perl_newAVREF(pTHX_ OP *o)
6342 PERL_ARGS_ASSERT_NEWAVREF;
6344 if (o->op_type == OP_PADANY) {
6345 o->op_type = OP_PADAV;
6346 o->op_ppaddr = PL_ppaddr[OP_PADAV];
6349 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
6350 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6351 "Using an array as a reference is deprecated");
6353 return newUNOP(OP_RV2AV, 0, scalar(o));
6357 Perl_newGVREF(pTHX_ I32 type, OP *o)
6359 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
6360 return newUNOP(OP_NULL, 0, o);
6361 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
6365 Perl_newHVREF(pTHX_ OP *o)
6369 PERL_ARGS_ASSERT_NEWHVREF;
6371 if (o->op_type == OP_PADANY) {
6372 o->op_type = OP_PADHV;
6373 o->op_ppaddr = PL_ppaddr[OP_PADHV];
6376 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
6377 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6378 "Using a hash as a reference is deprecated");
6380 return newUNOP(OP_RV2HV, 0, scalar(o));
6384 Perl_newCVREF(pTHX_ I32 flags, OP *o)
6386 return newUNOP(OP_RV2CV, flags, scalar(o));
6390 Perl_newSVREF(pTHX_ OP *o)
6394 PERL_ARGS_ASSERT_NEWSVREF;
6396 if (o->op_type == OP_PADANY) {
6397 o->op_type = OP_PADSV;
6398 o->op_ppaddr = PL_ppaddr[OP_PADSV];
6401 return newUNOP(OP_RV2SV, 0, scalar(o));
6404 /* Check routines. See the comments at the top of this file for details
6405 * on when these are called */
6408 Perl_ck_anoncode(pTHX_ OP *o)
6410 PERL_ARGS_ASSERT_CK_ANONCODE;
6412 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
6414 cSVOPo->op_sv = NULL;
6419 Perl_ck_bitop(pTHX_ OP *o)
6423 PERL_ARGS_ASSERT_CK_BITOP;
6425 #define OP_IS_NUMCOMPARE(op) \
6426 ((op) == OP_LT || (op) == OP_I_LT || \
6427 (op) == OP_GT || (op) == OP_I_GT || \
6428 (op) == OP_LE || (op) == OP_I_LE || \
6429 (op) == OP_GE || (op) == OP_I_GE || \
6430 (op) == OP_EQ || (op) == OP_I_EQ || \
6431 (op) == OP_NE || (op) == OP_I_NE || \
6432 (op) == OP_NCMP || (op) == OP_I_NCMP)
6433 o->op_private = (U8)(PL_hints & HINT_INTEGER);
6434 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
6435 && (o->op_type == OP_BIT_OR
6436 || o->op_type == OP_BIT_AND
6437 || o->op_type == OP_BIT_XOR))
6439 const OP * const left = cBINOPo->op_first;
6440 const OP * const right = left->op_sibling;
6441 if ((OP_IS_NUMCOMPARE(left->op_type) &&
6442 (left->op_flags & OPf_PARENS) == 0) ||
6443 (OP_IS_NUMCOMPARE(right->op_type) &&
6444 (right->op_flags & OPf_PARENS) == 0))
6445 Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
6446 "Possible precedence problem on bitwise %c operator",
6447 o->op_type == OP_BIT_OR ? '|'
6448 : o->op_type == OP_BIT_AND ? '&' : '^'
6455 Perl_ck_concat(pTHX_ OP *o)
6457 const OP * const kid = cUNOPo->op_first;
6459 PERL_ARGS_ASSERT_CK_CONCAT;
6460 PERL_UNUSED_CONTEXT;
6462 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
6463 !(kUNOP->op_first->op_flags & OPf_MOD))
6464 o->op_flags |= OPf_STACKED;
6469 Perl_ck_spair(pTHX_ OP *o)
6473 PERL_ARGS_ASSERT_CK_SPAIR;
6475 if (o->op_flags & OPf_KIDS) {
6478 const OPCODE type = o->op_type;
6479 o = modkids(ck_fun(o), type);
6480 kid = cUNOPo->op_first;
6481 newop = kUNOP->op_first->op_sibling;
6483 const OPCODE type = newop->op_type;
6484 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
6485 type == OP_PADAV || type == OP_PADHV ||
6486 type == OP_RV2AV || type == OP_RV2HV)
6490 op_getmad(kUNOP->op_first,newop,'K');
6492 op_free(kUNOP->op_first);
6494 kUNOP->op_first = newop;
6496 o->op_ppaddr = PL_ppaddr[++o->op_type];
6501 Perl_ck_delete(pTHX_ OP *o)
6503 PERL_ARGS_ASSERT_CK_DELETE;
6507 if (o->op_flags & OPf_KIDS) {
6508 OP * const kid = cUNOPo->op_first;
6509 switch (kid->op_type) {
6511 o->op_flags |= OPf_SPECIAL;
6514 o->op_private |= OPpSLICE;
6517 o->op_flags |= OPf_SPECIAL;
6522 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
6525 if (kid->op_private & OPpLVAL_INTRO)
6526 o->op_private |= OPpLVAL_INTRO;
6533 Perl_ck_die(pTHX_ OP *o)
6535 PERL_ARGS_ASSERT_CK_DIE;
6538 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6544 Perl_ck_eof(pTHX_ OP *o)
6548 PERL_ARGS_ASSERT_CK_EOF;
6550 if (o->op_flags & OPf_KIDS) {
6551 if (cLISTOPo->op_first->op_type == OP_STUB) {
6553 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
6555 op_getmad(o,newop,'O');
6567 Perl_ck_eval(pTHX_ OP *o)
6571 PERL_ARGS_ASSERT_CK_EVAL;
6573 PL_hints |= HINT_BLOCK_SCOPE;
6574 if (o->op_flags & OPf_KIDS) {
6575 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6578 o->op_flags &= ~OPf_KIDS;
6581 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
6587 cUNOPo->op_first = 0;
6592 NewOp(1101, enter, 1, LOGOP);
6593 enter->op_type = OP_ENTERTRY;
6594 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
6595 enter->op_private = 0;
6597 /* establish postfix order */
6598 enter->op_next = (OP*)enter;
6600 CHECKOP(OP_ENTERTRY, enter);
6602 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
6603 o->op_type = OP_LEAVETRY;
6604 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
6605 enter->op_other = o;
6606 op_getmad(oldo,o,'O');
6620 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
6621 op_getmad(oldo,o,'O');
6623 o->op_targ = (PADOFFSET)PL_hints;
6624 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
6625 /* Store a copy of %^H that pp_entereval can pick up. */
6626 OP *hhop = newSVOP(OP_HINTSEVAL, 0,
6627 MUTABLE_SV(Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv))));
6628 cUNOPo->op_first->op_sibling = hhop;
6629 o->op_private |= OPpEVAL_HAS_HH;
6635 Perl_ck_exit(pTHX_ OP *o)
6637 PERL_ARGS_ASSERT_CK_EXIT;
6640 HV * const table = GvHV(PL_hintgv);
6642 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
6643 if (svp && *svp && SvTRUE(*svp))
6644 o->op_private |= OPpEXIT_VMSISH;
6646 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6652 Perl_ck_exec(pTHX_ OP *o)
6654 PERL_ARGS_ASSERT_CK_EXEC;
6656 if (o->op_flags & OPf_STACKED) {
6659 kid = cUNOPo->op_first->op_sibling;
6660 if (kid->op_type == OP_RV2GV)
6669 Perl_ck_exists(pTHX_ OP *o)
6673 PERL_ARGS_ASSERT_CK_EXISTS;
6676 if (o->op_flags & OPf_KIDS) {
6677 OP * const kid = cUNOPo->op_first;
6678 if (kid->op_type == OP_ENTERSUB) {
6679 (void) ref(kid, o->op_type);
6680 if (kid->op_type != OP_RV2CV
6681 && !(PL_parser && PL_parser->error_count))
6682 Perl_croak(aTHX_ "%s argument is not a subroutine name",
6684 o->op_private |= OPpEXISTS_SUB;
6686 else if (kid->op_type == OP_AELEM)
6687 o->op_flags |= OPf_SPECIAL;
6688 else if (kid->op_type != OP_HELEM)
6689 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or a subroutine",
6697 Perl_ck_rvconst(pTHX_ register OP *o)
6700 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6702 PERL_ARGS_ASSERT_CK_RVCONST;
6704 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6705 if (o->op_type == OP_RV2CV)
6706 o->op_private &= ~1;
6708 if (kid->op_type == OP_CONST) {
6711 SV * const kidsv = kid->op_sv;
6713 /* Is it a constant from cv_const_sv()? */
6714 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
6715 SV * const rsv = SvRV(kidsv);
6716 const svtype type = SvTYPE(rsv);
6717 const char *badtype = NULL;
6719 switch (o->op_type) {
6721 if (type > SVt_PVMG)
6722 badtype = "a SCALAR";
6725 if (type != SVt_PVAV)
6726 badtype = "an ARRAY";
6729 if (type != SVt_PVHV)
6733 if (type != SVt_PVCV)
6738 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
6741 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
6742 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
6743 /* If this is an access to a stash, disable "strict refs", because
6744 * stashes aren't auto-vivified at compile-time (unless we store
6745 * symbols in them), and we don't want to produce a run-time
6746 * stricture error when auto-vivifying the stash. */
6747 const char *s = SvPV_nolen(kidsv);
6748 const STRLEN l = SvCUR(kidsv);
6749 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
6750 o->op_private &= ~HINT_STRICT_REFS;
6752 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
6753 const char *badthing;
6754 switch (o->op_type) {
6756 badthing = "a SCALAR";
6759 badthing = "an ARRAY";
6762 badthing = "a HASH";
6770 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
6771 SVfARG(kidsv), badthing);
6774 * This is a little tricky. We only want to add the symbol if we
6775 * didn't add it in the lexer. Otherwise we get duplicate strict
6776 * warnings. But if we didn't add it in the lexer, we must at
6777 * least pretend like we wanted to add it even if it existed before,
6778 * or we get possible typo warnings. OPpCONST_ENTERED says
6779 * whether the lexer already added THIS instance of this symbol.
6781 iscv = (o->op_type == OP_RV2CV) * 2;
6783 gv = gv_fetchsv(kidsv,
6784 iscv | !(kid->op_private & OPpCONST_ENTERED),
6787 : o->op_type == OP_RV2SV
6789 : o->op_type == OP_RV2AV
6791 : o->op_type == OP_RV2HV
6794 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
6796 kid->op_type = OP_GV;
6797 SvREFCNT_dec(kid->op_sv);
6799 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
6800 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
6801 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
6803 PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
6805 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
6807 kid->op_private = 0;
6808 kid->op_ppaddr = PL_ppaddr[OP_GV];
6815 Perl_ck_ftst(pTHX_ OP *o)
6818 const I32 type = o->op_type;
6820 PERL_ARGS_ASSERT_CK_FTST;
6822 if (o->op_flags & OPf_REF) {
6825 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
6826 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6827 const OPCODE kidtype = kid->op_type;
6829 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6830 OP * const newop = newGVOP(type, OPf_REF,
6831 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
6833 op_getmad(o,newop,'O');
6839 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
6840 o->op_private |= OPpFT_ACCESS;
6841 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
6842 && kidtype != OP_STAT && kidtype != OP_LSTAT)
6843 o->op_private |= OPpFT_STACKED;
6851 if (type == OP_FTTTY)
6852 o = newGVOP(type, OPf_REF, PL_stdingv);
6854 o = newUNOP(type, 0, newDEFSVOP());
6855 op_getmad(oldo,o,'O');
6861 Perl_ck_fun(pTHX_ OP *o)
6864 const int type = o->op_type;
6865 register I32 oa = PL_opargs[type] >> OASHIFT;
6867 PERL_ARGS_ASSERT_CK_FUN;
6869 if (o->op_flags & OPf_STACKED) {
6870 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
6873 return no_fh_allowed(o);
6876 if (o->op_flags & OPf_KIDS) {
6877 OP **tokid = &cLISTOPo->op_first;
6878 register OP *kid = cLISTOPo->op_first;
6882 if (kid->op_type == OP_PUSHMARK ||
6883 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
6885 tokid = &kid->op_sibling;
6886 kid = kid->op_sibling;
6888 if (!kid && PL_opargs[type] & OA_DEFGV)
6889 *tokid = kid = newDEFSVOP();
6893 sibl = kid->op_sibling;
6895 if (!sibl && kid->op_type == OP_STUB) {
6902 /* list seen where single (scalar) arg expected? */
6903 if (numargs == 1 && !(oa >> 4)
6904 && kid->op_type == OP_LIST && type != OP_SCALAR)
6906 return too_many_arguments(o,PL_op_desc[type]);
6919 if ((type == OP_PUSH || type == OP_UNSHIFT)
6920 && !kid->op_sibling)
6921 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
6922 "Useless use of %s with no values",
6925 if (kid->op_type == OP_CONST &&
6926 (kid->op_private & OPpCONST_BARE))
6928 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
6929 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
6930 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6931 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
6932 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6934 op_getmad(kid,newop,'K');
6939 kid->op_sibling = sibl;
6942 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
6943 bad_type(numargs, "array", PL_op_desc[type], kid);
6947 if (kid->op_type == OP_CONST &&
6948 (kid->op_private & OPpCONST_BARE))
6950 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
6951 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
6952 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6953 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
6954 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6956 op_getmad(kid,newop,'K');
6961 kid->op_sibling = sibl;
6964 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6965 bad_type(numargs, "hash", PL_op_desc[type], kid);
6970 OP * const newop = newUNOP(OP_NULL, 0, kid);
6971 kid->op_sibling = 0;
6973 newop->op_next = newop;
6975 kid->op_sibling = sibl;
6980 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6981 if (kid->op_type == OP_CONST &&
6982 (kid->op_private & OPpCONST_BARE))
6984 OP * const newop = newGVOP(OP_GV, 0,
6985 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
6986 if (!(o->op_private & 1) && /* if not unop */
6987 kid == cLISTOPo->op_last)
6988 cLISTOPo->op_last = newop;
6990 op_getmad(kid,newop,'K');
6996 else if (kid->op_type == OP_READLINE) {
6997 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6998 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
7001 I32 flags = OPf_SPECIAL;
7005 /* is this op a FH constructor? */
7006 if (is_handle_constructor(o,numargs)) {
7007 const char *name = NULL;
7011 /* Set a flag to tell rv2gv to vivify
7012 * need to "prove" flag does not mean something
7013 * else already - NI-S 1999/05/07
7016 if (kid->op_type == OP_PADSV) {
7018 = PAD_COMPNAME_SV(kid->op_targ);
7019 name = SvPV_const(namesv, len);
7021 else if (kid->op_type == OP_RV2SV
7022 && kUNOP->op_first->op_type == OP_GV)
7024 GV * const gv = cGVOPx_gv(kUNOP->op_first);
7026 len = GvNAMELEN(gv);
7028 else if (kid->op_type == OP_AELEM
7029 || kid->op_type == OP_HELEM)
7032 OP *op = ((BINOP*)kid)->op_first;
7036 const char * const a =
7037 kid->op_type == OP_AELEM ?
7039 if (((op->op_type == OP_RV2AV) ||
7040 (op->op_type == OP_RV2HV)) &&
7041 (firstop = ((UNOP*)op)->op_first) &&
7042 (firstop->op_type == OP_GV)) {
7043 /* packagevar $a[] or $h{} */
7044 GV * const gv = cGVOPx_gv(firstop);
7052 else if (op->op_type == OP_PADAV
7053 || op->op_type == OP_PADHV) {
7054 /* lexicalvar $a[] or $h{} */
7055 const char * const padname =
7056 PAD_COMPNAME_PV(op->op_targ);
7065 name = SvPV_const(tmpstr, len);
7070 name = "__ANONIO__";
7077 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
7078 namesv = PAD_SVl(targ);
7079 SvUPGRADE(namesv, SVt_PV);
7081 sv_setpvs(namesv, "$");
7082 sv_catpvn(namesv, name, len);
7085 kid->op_sibling = 0;
7086 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
7087 kid->op_targ = targ;
7088 kid->op_private |= priv;
7090 kid->op_sibling = sibl;
7096 mod(scalar(kid), type);
7100 tokid = &kid->op_sibling;
7101 kid = kid->op_sibling;
7104 if (kid && kid->op_type != OP_STUB)
7105 return too_many_arguments(o,OP_DESC(o));
7106 o->op_private |= numargs;
7108 /* FIXME - should the numargs move as for the PERL_MAD case? */
7109 o->op_private |= numargs;
7111 return too_many_arguments(o,OP_DESC(o));
7115 else if (PL_opargs[type] & OA_DEFGV) {
7117 OP *newop = newUNOP(type, 0, newDEFSVOP());
7118 op_getmad(o,newop,'O');
7121 /* Ordering of these two is important to keep f_map.t passing. */
7123 return newUNOP(type, 0, newDEFSVOP());
7128 while (oa & OA_OPTIONAL)
7130 if (oa && oa != OA_LIST)
7131 return too_few_arguments(o,OP_DESC(o));
7137 Perl_ck_glob(pTHX_ OP *o)
7142 PERL_ARGS_ASSERT_CK_GLOB;
7145 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
7146 append_elem(OP_GLOB, o, newDEFSVOP());
7148 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
7149 && GvCVu(gv) && GvIMPORTED_CV(gv)))
7151 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7154 #if !defined(PERL_EXTERNAL_GLOB)
7155 /* XXX this can be tightened up and made more failsafe. */
7156 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7159 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
7160 newSVpvs("File::Glob"), NULL, NULL, NULL);
7161 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7162 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
7163 GvCV(gv) = GvCV(glob_gv);
7164 SvREFCNT_inc_void(MUTABLE_SV(GvCV(gv)));
7165 GvIMPORTED_CV_on(gv);
7168 #endif /* PERL_EXTERNAL_GLOB */
7170 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7171 append_elem(OP_GLOB, o,
7172 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
7173 o->op_type = OP_LIST;
7174 o->op_ppaddr = PL_ppaddr[OP_LIST];
7175 cLISTOPo->op_first->op_type = OP_PUSHMARK;
7176 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
7177 cLISTOPo->op_first->op_targ = 0;
7178 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
7179 append_elem(OP_LIST, o,
7180 scalar(newUNOP(OP_RV2CV, 0,
7181 newGVOP(OP_GV, 0, gv)))));
7182 o = newUNOP(OP_NULL, 0, ck_subr(o));
7183 o->op_targ = OP_GLOB; /* hint at what it used to be */
7186 gv = newGVgen("main");
7188 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
7194 Perl_ck_grep(pTHX_ OP *o)
7199 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
7202 PERL_ARGS_ASSERT_CK_GREP;
7204 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
7205 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
7207 if (o->op_flags & OPf_STACKED) {
7210 kid = cLISTOPo->op_first->op_sibling;
7211 if (!cUNOPx(kid)->op_next)
7212 Perl_croak(aTHX_ "panic: ck_grep");
7213 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
7216 NewOp(1101, gwop, 1, LOGOP);
7217 kid->op_next = (OP*)gwop;
7218 o->op_flags &= ~OPf_STACKED;
7220 kid = cLISTOPo->op_first->op_sibling;
7221 if (type == OP_MAPWHILE)
7226 if (PL_parser && PL_parser->error_count)
7228 kid = cLISTOPo->op_first->op_sibling;
7229 if (kid->op_type != OP_NULL)
7230 Perl_croak(aTHX_ "panic: ck_grep");
7231 kid = kUNOP->op_first;
7234 NewOp(1101, gwop, 1, LOGOP);
7235 gwop->op_type = type;
7236 gwop->op_ppaddr = PL_ppaddr[type];
7237 gwop->op_first = listkids(o);
7238 gwop->op_flags |= OPf_KIDS;
7239 gwop->op_other = LINKLIST(kid);
7240 kid->op_next = (OP*)gwop;
7241 offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
7242 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
7243 o->op_private = gwop->op_private = 0;
7244 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
7247 o->op_private = gwop->op_private = OPpGREP_LEX;
7248 gwop->op_targ = o->op_targ = offset;
7251 kid = cLISTOPo->op_first->op_sibling;
7252 if (!kid || !kid->op_sibling)
7253 return too_few_arguments(o,OP_DESC(o));
7254 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
7255 mod(kid, OP_GREPSTART);
7261 Perl_ck_index(pTHX_ OP *o)
7263 PERL_ARGS_ASSERT_CK_INDEX;
7265 if (o->op_flags & OPf_KIDS) {
7266 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7268 kid = kid->op_sibling; /* get past "big" */
7269 if (kid && kid->op_type == OP_CONST)
7270 fbm_compile(((SVOP*)kid)->op_sv, 0);
7276 Perl_ck_lfun(pTHX_ OP *o)
7278 const OPCODE type = o->op_type;
7280 PERL_ARGS_ASSERT_CK_LFUN;
7282 return modkids(ck_fun(o), type);
7286 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
7288 PERL_ARGS_ASSERT_CK_DEFINED;
7290 if ((o->op_flags & OPf_KIDS)) {
7291 switch (cUNOPo->op_first->op_type) {
7293 /* This is needed for
7294 if (defined %stash::)
7295 to work. Do not break Tk.
7297 break; /* Globals via GV can be undef */
7299 case OP_AASSIGN: /* Is this a good idea? */
7300 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7301 "defined(@array) is deprecated");
7302 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7303 "\t(Maybe you should just omit the defined()?)\n");
7307 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7308 "defined(%%hash) is deprecated");
7309 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7310 "\t(Maybe you should just omit the defined()?)\n");
7321 Perl_ck_readline(pTHX_ OP *o)
7323 PERL_ARGS_ASSERT_CK_READLINE;
7325 if (!(o->op_flags & OPf_KIDS)) {
7327 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
7329 op_getmad(o,newop,'O');
7339 Perl_ck_rfun(pTHX_ OP *o)
7341 const OPCODE type = o->op_type;
7343 PERL_ARGS_ASSERT_CK_RFUN;
7345 return refkids(ck_fun(o), type);
7349 Perl_ck_listiob(pTHX_ OP *o)
7353 PERL_ARGS_ASSERT_CK_LISTIOB;
7355 kid = cLISTOPo->op_first;
7358 kid = cLISTOPo->op_first;
7360 if (kid->op_type == OP_PUSHMARK)
7361 kid = kid->op_sibling;
7362 if (kid && o->op_flags & OPf_STACKED)
7363 kid = kid->op_sibling;
7364 else if (kid && !kid->op_sibling) { /* print HANDLE; */
7365 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
7366 o->op_flags |= OPf_STACKED; /* make it a filehandle */
7367 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
7368 cLISTOPo->op_first->op_sibling = kid;
7369 cLISTOPo->op_last = kid;
7370 kid = kid->op_sibling;
7375 append_elem(o->op_type, o, newDEFSVOP());
7381 Perl_ck_smartmatch(pTHX_ OP *o)
7384 if (0 == (o->op_flags & OPf_SPECIAL)) {
7385 OP *first = cBINOPo->op_first;
7386 OP *second = first->op_sibling;
7388 /* Implicitly take a reference to an array or hash */
7389 first->op_sibling = NULL;
7390 first = cBINOPo->op_first = ref_array_or_hash(first);
7391 second = first->op_sibling = ref_array_or_hash(second);
7393 /* Implicitly take a reference to a regular expression */
7394 if (first->op_type == OP_MATCH) {
7395 first->op_type = OP_QR;
7396 first->op_ppaddr = PL_ppaddr[OP_QR];
7398 if (second->op_type == OP_MATCH) {
7399 second->op_type = OP_QR;
7400 second->op_ppaddr = PL_ppaddr[OP_QR];
7409 Perl_ck_sassign(pTHX_ OP *o)
7412 OP * const kid = cLISTOPo->op_first;
7414 PERL_ARGS_ASSERT_CK_SASSIGN;
7416 /* has a disposable target? */
7417 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
7418 && !(kid->op_flags & OPf_STACKED)
7419 /* Cannot steal the second time! */
7420 && !(kid->op_private & OPpTARGET_MY)
7421 /* Keep the full thing for madskills */
7425 OP * const kkid = kid->op_sibling;
7427 /* Can just relocate the target. */
7428 if (kkid && kkid->op_type == OP_PADSV
7429 && !(kkid->op_private & OPpLVAL_INTRO))
7431 kid->op_targ = kkid->op_targ;
7433 /* Now we do not need PADSV and SASSIGN. */
7434 kid->op_sibling = o->op_sibling; /* NULL */
7435 cLISTOPo->op_first = NULL;
7438 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
7442 if (kid->op_sibling) {
7443 OP *kkid = kid->op_sibling;
7444 if (kkid->op_type == OP_PADSV
7445 && (kkid->op_private & OPpLVAL_INTRO)
7446 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
7447 const PADOFFSET target = kkid->op_targ;
7448 OP *const other = newOP(OP_PADSV,
7450 | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
7451 OP *const first = newOP(OP_NULL, 0);
7452 OP *const nullop = newCONDOP(0, first, o, other);
7453 OP *const condop = first->op_next;
7454 /* hijacking PADSTALE for uninitialized state variables */
7455 SvPADSTALE_on(PAD_SVl(target));
7457 condop->op_type = OP_ONCE;
7458 condop->op_ppaddr = PL_ppaddr[OP_ONCE];
7459 condop->op_targ = target;
7460 other->op_targ = target;
7462 /* Because we change the type of the op here, we will skip the
7463 assinment binop->op_last = binop->op_first->op_sibling; at the
7464 end of Perl_newBINOP(). So need to do it here. */
7465 cBINOPo->op_last = cBINOPo->op_first->op_sibling;
7474 Perl_ck_match(pTHX_ OP *o)
7478 PERL_ARGS_ASSERT_CK_MATCH;
7480 if (o->op_type != OP_QR && PL_compcv) {
7481 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
7482 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
7483 o->op_targ = offset;
7484 o->op_private |= OPpTARGET_MY;
7487 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
7488 o->op_private |= OPpRUNTIME;
7493 Perl_ck_method(pTHX_ OP *o)
7495 OP * const kid = cUNOPo->op_first;
7497 PERL_ARGS_ASSERT_CK_METHOD;
7499 if (kid->op_type == OP_CONST) {
7500 SV* sv = kSVOP->op_sv;
7501 const char * const method = SvPVX_const(sv);
7502 if (!(strchr(method, ':') || strchr(method, '\''))) {
7504 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
7505 sv = newSVpvn_share(method, SvCUR(sv), 0);
7508 kSVOP->op_sv = NULL;
7510 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
7512 op_getmad(o,cmop,'O');
7523 Perl_ck_null(pTHX_ OP *o)
7525 PERL_ARGS_ASSERT_CK_NULL;
7526 PERL_UNUSED_CONTEXT;
7531 Perl_ck_open(pTHX_ OP *o)
7534 HV * const table = GvHV(PL_hintgv);
7536 PERL_ARGS_ASSERT_CK_OPEN;
7539 SV **svp = hv_fetchs(table, "open_IN", FALSE);
7542 const char *d = SvPV_const(*svp, len);
7543 const I32 mode = mode_from_discipline(d, len);
7544 if (mode & O_BINARY)
7545 o->op_private |= OPpOPEN_IN_RAW;
7546 else if (mode & O_TEXT)
7547 o->op_private |= OPpOPEN_IN_CRLF;
7550 svp = hv_fetchs(table, "open_OUT", FALSE);
7553 const char *d = SvPV_const(*svp, len);
7554 const I32 mode = mode_from_discipline(d, len);
7555 if (mode & O_BINARY)
7556 o->op_private |= OPpOPEN_OUT_RAW;
7557 else if (mode & O_TEXT)
7558 o->op_private |= OPpOPEN_OUT_CRLF;
7561 if (o->op_type == OP_BACKTICK) {
7562 if (!(o->op_flags & OPf_KIDS)) {
7563 OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
7565 op_getmad(o,newop,'O');
7574 /* In case of three-arg dup open remove strictness
7575 * from the last arg if it is a bareword. */
7576 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
7577 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
7581 if ((last->op_type == OP_CONST) && /* The bareword. */
7582 (last->op_private & OPpCONST_BARE) &&
7583 (last->op_private & OPpCONST_STRICT) &&
7584 (oa = first->op_sibling) && /* The fh. */
7585 (oa = oa->op_sibling) && /* The mode. */
7586 (oa->op_type == OP_CONST) &&
7587 SvPOK(((SVOP*)oa)->op_sv) &&
7588 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
7589 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
7590 (last == oa->op_sibling)) /* The bareword. */
7591 last->op_private &= ~OPpCONST_STRICT;
7597 Perl_ck_repeat(pTHX_ OP *o)
7599 PERL_ARGS_ASSERT_CK_REPEAT;
7601 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
7602 o->op_private |= OPpREPEAT_DOLIST;
7603 cBINOPo->op_first = force_list(cBINOPo->op_first);
7611 Perl_ck_require(pTHX_ OP *o)
7616 PERL_ARGS_ASSERT_CK_REQUIRE;
7618 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
7619 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7621 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7622 SV * const sv = kid->op_sv;
7623 U32 was_readonly = SvREADONLY(sv);
7630 sv_force_normal_flags(sv, 0);
7631 assert(!SvREADONLY(sv));
7641 for (; s < end; s++) {
7642 if (*s == ':' && s[1] == ':') {
7644 Move(s+2, s+1, end - s - 1, char);
7649 sv_catpvs(sv, ".pm");
7650 SvFLAGS(sv) |= was_readonly;
7654 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
7655 /* handle override, if any */
7656 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
7657 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7658 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
7659 gv = gvp ? *gvp : NULL;
7663 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7664 OP * const kid = cUNOPo->op_first;
7667 cUNOPo->op_first = 0;
7671 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
7672 append_elem(OP_LIST, kid,
7673 scalar(newUNOP(OP_RV2CV, 0,
7676 op_getmad(o,newop,'O');
7684 Perl_ck_return(pTHX_ OP *o)
7689 PERL_ARGS_ASSERT_CK_RETURN;
7691 kid = cLISTOPo->op_first->op_sibling;
7692 if (CvLVALUE(PL_compcv)) {
7693 for (; kid; kid = kid->op_sibling)
7694 mod(kid, OP_LEAVESUBLV);
7696 for (; kid; kid = kid->op_sibling)
7697 if ((kid->op_type == OP_NULL)
7698 && ((kid->op_flags & (OPf_SPECIAL|OPf_KIDS)) == (OPf_SPECIAL|OPf_KIDS))) {
7699 /* This is a do block */
7700 OP *op = kUNOP->op_first;
7701 if (op->op_type == OP_LEAVE && op->op_flags & OPf_KIDS) {
7702 op = cUNOPx(op)->op_first;
7703 assert(op->op_type == OP_ENTER && !(op->op_flags & OPf_SPECIAL));
7704 /* Force the use of the caller's context */
7705 op->op_flags |= OPf_SPECIAL;
7714 Perl_ck_select(pTHX_ OP *o)
7719 PERL_ARGS_ASSERT_CK_SELECT;
7721 if (o->op_flags & OPf_KIDS) {
7722 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7723 if (kid && kid->op_sibling) {
7724 o->op_type = OP_SSELECT;
7725 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
7727 return fold_constants(o);
7731 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7732 if (kid && kid->op_type == OP_RV2GV)
7733 kid->op_private &= ~HINT_STRICT_REFS;
7738 Perl_ck_shift(pTHX_ OP *o)
7741 const I32 type = o->op_type;
7743 PERL_ARGS_ASSERT_CK_SHIFT;
7745 if (!(o->op_flags & OPf_KIDS)) {
7746 OP *argop = newUNOP(OP_RV2AV, 0,
7747 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
7749 OP * const oldo = o;
7750 o = newUNOP(type, 0, scalar(argop));
7751 op_getmad(oldo,o,'O');
7755 return newUNOP(type, 0, scalar(argop));
7758 return scalar(modkids(ck_fun(o), type));
7762 Perl_ck_sort(pTHX_ OP *o)
7767 PERL_ARGS_ASSERT_CK_SORT;
7769 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
7770 HV * const hinthv = GvHV(PL_hintgv);
7772 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
7774 const I32 sorthints = (I32)SvIV(*svp);
7775 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
7776 o->op_private |= OPpSORT_QSORT;
7777 if ((sorthints & HINT_SORT_STABLE) != 0)
7778 o->op_private |= OPpSORT_STABLE;
7783 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
7785 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7786 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
7788 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
7790 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
7792 if (kid->op_type == OP_SCOPE) {
7796 else if (kid->op_type == OP_LEAVE) {
7797 if (o->op_type == OP_SORT) {
7798 op_null(kid); /* wipe out leave */
7801 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
7802 if (k->op_next == kid)
7804 /* don't descend into loops */
7805 else if (k->op_type == OP_ENTERLOOP
7806 || k->op_type == OP_ENTERITER)
7808 k = cLOOPx(k)->op_lastop;
7813 kid->op_next = 0; /* just disconnect the leave */
7814 k = kLISTOP->op_first;
7819 if (o->op_type == OP_SORT) {
7820 /* provide scalar context for comparison function/block */
7826 o->op_flags |= OPf_SPECIAL;
7828 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
7831 firstkid = firstkid->op_sibling;
7834 /* provide list context for arguments */
7835 if (o->op_type == OP_SORT)
7842 S_simplify_sort(pTHX_ OP *o)
7845 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7851 PERL_ARGS_ASSERT_SIMPLIFY_SORT;
7853 if (!(o->op_flags & OPf_STACKED))
7855 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
7856 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
7857 kid = kUNOP->op_first; /* get past null */
7858 if (kid->op_type != OP_SCOPE)
7860 kid = kLISTOP->op_last; /* get past scope */
7861 switch(kid->op_type) {
7869 k = kid; /* remember this node*/
7870 if (kBINOP->op_first->op_type != OP_RV2SV)
7872 kid = kBINOP->op_first; /* get past cmp */
7873 if (kUNOP->op_first->op_type != OP_GV)
7875 kid = kUNOP->op_first; /* get past rv2sv */
7877 if (GvSTASH(gv) != PL_curstash)
7879 gvname = GvNAME(gv);
7880 if (*gvname == 'a' && gvname[1] == '\0')
7882 else if (*gvname == 'b' && gvname[1] == '\0')
7887 kid = k; /* back to cmp */
7888 if (kBINOP->op_last->op_type != OP_RV2SV)
7890 kid = kBINOP->op_last; /* down to 2nd arg */
7891 if (kUNOP->op_first->op_type != OP_GV)
7893 kid = kUNOP->op_first; /* get past rv2sv */
7895 if (GvSTASH(gv) != PL_curstash)
7897 gvname = GvNAME(gv);
7899 ? !(*gvname == 'a' && gvname[1] == '\0')
7900 : !(*gvname == 'b' && gvname[1] == '\0'))
7902 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
7904 o->op_private |= OPpSORT_DESCEND;
7905 if (k->op_type == OP_NCMP)
7906 o->op_private |= OPpSORT_NUMERIC;
7907 if (k->op_type == OP_I_NCMP)
7908 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
7909 kid = cLISTOPo->op_first->op_sibling;
7910 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
7912 op_getmad(kid,o,'S'); /* then delete it */
7914 op_free(kid); /* then delete it */
7919 Perl_ck_split(pTHX_ OP *o)
7924 PERL_ARGS_ASSERT_CK_SPLIT;
7926 if (o->op_flags & OPf_STACKED)
7927 return no_fh_allowed(o);
7929 kid = cLISTOPo->op_first;
7930 if (kid->op_type != OP_NULL)
7931 Perl_croak(aTHX_ "panic: ck_split");
7932 kid = kid->op_sibling;
7933 op_free(cLISTOPo->op_first);
7934 cLISTOPo->op_first = kid;
7936 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
7937 cLISTOPo->op_last = kid; /* There was only one element previously */
7940 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
7941 OP * const sibl = kid->op_sibling;
7942 kid->op_sibling = 0;
7943 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
7944 if (cLISTOPo->op_first == cLISTOPo->op_last)
7945 cLISTOPo->op_last = kid;
7946 cLISTOPo->op_first = kid;
7947 kid->op_sibling = sibl;
7950 kid->op_type = OP_PUSHRE;
7951 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
7953 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
7954 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
7955 "Use of /g modifier is meaningless in split");
7958 if (!kid->op_sibling)
7959 append_elem(OP_SPLIT, o, newDEFSVOP());
7961 kid = kid->op_sibling;
7964 if (!kid->op_sibling)
7965 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
7966 assert(kid->op_sibling);
7968 kid = kid->op_sibling;
7971 if (kid->op_sibling)
7972 return too_many_arguments(o,OP_DESC(o));
7978 Perl_ck_join(pTHX_ OP *o)
7980 const OP * const kid = cLISTOPo->op_first->op_sibling;
7982 PERL_ARGS_ASSERT_CK_JOIN;
7984 if (kid && kid->op_type == OP_MATCH) {
7985 if (ckWARN(WARN_SYNTAX)) {
7986 const REGEXP *re = PM_GETRE(kPMOP);
7987 const char *pmstr = re ? RX_PRECOMP_const(re) : "STRING";
7988 const STRLEN len = re ? RX_PRELEN(re) : 6;
7989 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7990 "/%.*s/ should probably be written as \"%.*s\"",
7991 (int)len, pmstr, (int)len, pmstr);
7998 Perl_ck_subr(pTHX_ OP *o)
8001 OP *prev = ((cUNOPo->op_first->op_sibling)
8002 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
8003 OP *o2 = prev->op_sibling;
8005 const char *proto = NULL;
8006 const char *proto_end = NULL;
8011 I32 contextclass = 0;
8012 const char *e = NULL;
8015 PERL_ARGS_ASSERT_CK_SUBR;
8017 o->op_private |= OPpENTERSUB_HASTARG;
8018 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
8019 if (cvop->op_type == OP_RV2CV) {
8020 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
8021 op_null(cvop); /* disable rv2cv */
8022 if (!(o->op_private & OPpENTERSUB_AMPER)) {
8023 SVOP *tmpop = (SVOP*)((UNOP*)cvop)->op_first;
8025 switch (tmpop->op_type) {
8027 gv = cGVOPx_gv(tmpop);
8030 tmpop->op_private |= OPpEARLY_CV;
8033 SV *sv = cSVOPx_sv(tmpop);
8034 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV)
8038 if (cv && SvPOK(cv)) {
8040 namegv = gv && CvANON(cv) ? gv : CvGV(cv);
8041 proto = SvPV(MUTABLE_SV(cv), len);
8042 proto_end = proto + len;
8046 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
8047 if (o2->op_type == OP_CONST)
8048 o2->op_private &= ~OPpCONST_STRICT;
8049 else if (o2->op_type == OP_LIST) {
8050 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
8051 if (sib && sib->op_type == OP_CONST)
8052 sib->op_private &= ~OPpCONST_STRICT;
8055 o->op_private |= (PL_hints & HINT_STRICT_REFS);
8056 if (PERLDB_SUB && PL_curstash != PL_debstash)
8057 o->op_private |= OPpENTERSUB_DB;
8058 while (o2 != cvop) {
8060 if (PL_madskills && o2->op_type == OP_STUB) {
8061 o2 = o2->op_sibling;
8064 if (PL_madskills && o2->op_type == OP_NULL)
8065 o3 = ((UNOP*)o2)->op_first;
8069 if (proto >= proto_end)
8070 return too_many_arguments(o, gv_ename(namegv));
8078 /* _ must be at the end */
8079 if (proto[1] && proto[1] != ';')
8094 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
8096 arg == 1 ? "block or sub {}" : "sub {}",
8097 gv_ename(namegv), o3);
8100 /* '*' allows any scalar type, including bareword */
8103 if (o3->op_type == OP_RV2GV)
8104 goto wrapref; /* autoconvert GLOB -> GLOBref */
8105 else if (o3->op_type == OP_CONST)
8106 o3->op_private &= ~OPpCONST_STRICT;
8107 else if (o3->op_type == OP_ENTERSUB) {
8108 /* accidental subroutine, revert to bareword */
8109 OP *gvop = ((UNOP*)o3)->op_first;
8110 if (gvop && gvop->op_type == OP_NULL) {
8111 gvop = ((UNOP*)gvop)->op_first;
8113 for (; gvop->op_sibling; gvop = gvop->op_sibling)
8116 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
8117 (gvop = ((UNOP*)gvop)->op_first) &&
8118 gvop->op_type == OP_GV)
8120 GV * const gv = cGVOPx_gv(gvop);
8121 OP * const sibling = o2->op_sibling;
8122 SV * const n = newSVpvs("");
8124 OP * const oldo2 = o2;
8128 gv_fullname4(n, gv, "", FALSE);
8129 o2 = newSVOP(OP_CONST, 0, n);
8130 op_getmad(oldo2,o2,'O');
8131 prev->op_sibling = o2;
8132 o2->op_sibling = sibling;
8148 if (contextclass++ == 0) {
8149 e = strchr(proto, ']');
8150 if (!e || e == proto)
8159 const char *p = proto;
8160 const char *const end = proto;
8162 while (*--p != '[') {}
8163 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
8165 gv_ename(namegv), o3);
8170 if (o3->op_type == OP_RV2GV)
8173 bad_type(arg, "symbol", gv_ename(namegv), o3);
8176 if (o3->op_type == OP_ENTERSUB)
8179 bad_type(arg, "subroutine entry", gv_ename(namegv),
8183 if (o3->op_type == OP_RV2SV ||
8184 o3->op_type == OP_PADSV ||
8185 o3->op_type == OP_HELEM ||
8186 o3->op_type == OP_AELEM)
8189 bad_type(arg, "scalar", gv_ename(namegv), o3);
8192 if (o3->op_type == OP_RV2AV ||
8193 o3->op_type == OP_PADAV)
8196 bad_type(arg, "array", gv_ename(namegv), o3);
8199 if (o3->op_type == OP_RV2HV ||
8200 o3->op_type == OP_PADHV)
8203 bad_type(arg, "hash", gv_ename(namegv), o3);
8208 OP* const sib = kid->op_sibling;
8209 kid->op_sibling = 0;
8210 o2 = newUNOP(OP_REFGEN, 0, kid);
8211 o2->op_sibling = sib;
8212 prev->op_sibling = o2;
8214 if (contextclass && e) {
8229 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
8230 gv_ename(namegv), SVfARG(cv));
8235 mod(o2, OP_ENTERSUB);
8237 o2 = o2->op_sibling;
8239 if (o2 == cvop && proto && *proto == '_') {
8240 /* generate an access to $_ */
8242 o2->op_sibling = prev->op_sibling;
8243 prev->op_sibling = o2; /* instead of cvop */
8245 if (proto && !optional && proto_end > proto &&
8246 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
8247 return too_few_arguments(o, gv_ename(namegv));
8250 OP * const oldo = o;
8254 o=newSVOP(OP_CONST, 0, newSViv(0));
8255 op_getmad(oldo,o,'O');
8261 Perl_ck_svconst(pTHX_ OP *o)
8263 PERL_ARGS_ASSERT_CK_SVCONST;
8264 PERL_UNUSED_CONTEXT;
8265 SvREADONLY_on(cSVOPo->op_sv);
8270 Perl_ck_chdir(pTHX_ OP *o)
8272 if (o->op_flags & OPf_KIDS) {
8273 SVOP * const kid = (SVOP*)cUNOPo->op_first;
8275 if (kid && kid->op_type == OP_CONST &&
8276 (kid->op_private & OPpCONST_BARE))
8278 o->op_flags |= OPf_SPECIAL;
8279 kid->op_private &= ~OPpCONST_STRICT;
8286 Perl_ck_trunc(pTHX_ OP *o)
8288 PERL_ARGS_ASSERT_CK_TRUNC;
8290 if (o->op_flags & OPf_KIDS) {
8291 SVOP *kid = (SVOP*)cUNOPo->op_first;
8293 if (kid->op_type == OP_NULL)
8294 kid = (SVOP*)kid->op_sibling;
8295 if (kid && kid->op_type == OP_CONST &&
8296 (kid->op_private & OPpCONST_BARE))
8298 o->op_flags |= OPf_SPECIAL;
8299 kid->op_private &= ~OPpCONST_STRICT;
8306 Perl_ck_unpack(pTHX_ OP *o)
8308 OP *kid = cLISTOPo->op_first;
8310 PERL_ARGS_ASSERT_CK_UNPACK;
8312 if (kid->op_sibling) {
8313 kid = kid->op_sibling;
8314 if (!kid->op_sibling)
8315 kid->op_sibling = newDEFSVOP();
8321 Perl_ck_substr(pTHX_ OP *o)
8323 PERL_ARGS_ASSERT_CK_SUBSTR;
8326 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
8327 OP *kid = cLISTOPo->op_first;
8329 if (kid->op_type == OP_NULL)
8330 kid = kid->op_sibling;
8332 kid->op_flags |= OPf_MOD;
8339 Perl_ck_each(pTHX_ OP *o)
8342 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
8344 PERL_ARGS_ASSERT_CK_EACH;
8347 if (kid->op_type == OP_PADAV || kid->op_type == OP_RV2AV) {
8348 const unsigned new_type = o->op_type == OP_EACH ? OP_AEACH
8349 : o->op_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
8350 o->op_type = new_type;
8351 o->op_ppaddr = PL_ppaddr[new_type];
8353 else if (!(kid->op_type == OP_PADHV || kid->op_type == OP_RV2HV
8354 || (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE)
8356 bad_type(1, "hash or array", PL_op_desc[o->op_type], kid);
8363 /* caller is supposed to assign the return to the
8364 container of the rep_op var */
8366 S_opt_scalarhv(pTHX_ OP *rep_op) {
8369 PERL_ARGS_ASSERT_OPT_SCALARHV;
8371 NewOp(1101, unop, 1, UNOP);
8372 unop->op_type = (OPCODE)OP_BOOLKEYS;
8373 unop->op_ppaddr = PL_ppaddr[OP_BOOLKEYS];
8374 unop->op_flags = (U8)(OPf_WANT_SCALAR | OPf_KIDS );
8375 unop->op_private = (U8)(1 | ((OPf_WANT_SCALAR | OPf_KIDS) >> 8));
8376 unop->op_first = rep_op;
8377 unop->op_next = rep_op->op_next;
8378 rep_op->op_next = (OP*)unop;
8379 rep_op->op_flags|=(OPf_REF | OPf_MOD);
8380 unop->op_sibling = rep_op->op_sibling;
8381 rep_op->op_sibling = NULL;
8382 /* unop->op_targ = pad_alloc(OP_BOOLKEYS, SVs_PADTMP); */
8383 if (rep_op->op_type == OP_PADHV) {
8384 rep_op->op_flags &= ~OPf_WANT_SCALAR;
8385 rep_op->op_flags |= OPf_WANT_LIST;
8390 /* Checks if o acts as an in-place operator on an array. oright points to the
8391 * beginning of the right-hand side. Returns the left-hand side of the
8392 * assignment if o acts in-place, or NULL otherwise. */
8395 S_is_inplace_av(pTHX_ OP *o, OP *oright) {
8399 PERL_ARGS_ASSERT_IS_INPLACE_AV;
8402 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
8403 || oright->op_next != o
8404 || (oright->op_private & OPpLVAL_INTRO)
8408 /* o2 follows the chain of op_nexts through the LHS of the
8409 * assign (if any) to the aassign op itself */
8411 if (!o2 || o2->op_type != OP_NULL)
8414 if (!o2 || o2->op_type != OP_PUSHMARK)
8417 if (o2 && o2->op_type == OP_GV)
8420 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8421 || (o2->op_private & OPpLVAL_INTRO)
8426 if (!o2 || o2->op_type != OP_NULL)
8429 if (!o2 || o2->op_type != OP_AASSIGN
8430 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8433 /* check that the sort is the first arg on RHS of assign */
8435 o2 = cUNOPx(o2)->op_first;
8436 if (!o2 || o2->op_type != OP_NULL)
8438 o2 = cUNOPx(o2)->op_first;
8439 if (!o2 || o2->op_type != OP_PUSHMARK)
8441 if (o2->op_sibling != o)
8444 /* check the array is the same on both sides */
8445 if (oleft->op_type == OP_RV2AV) {
8446 if (oright->op_type != OP_RV2AV
8447 || !cUNOPx(oright)->op_first
8448 || cUNOPx(oright)->op_first->op_type != OP_GV
8449 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8450 cGVOPx_gv(cUNOPx(oright)->op_first)
8454 else if (oright->op_type != OP_PADAV
8455 || oright->op_targ != oleft->op_targ
8462 /* A peephole optimizer. We visit the ops in the order they're to execute.
8463 * See the comments at the top of this file for more details about when
8464 * peep() is called */
8467 Perl_peep(pTHX_ register OP *o)
8470 register OP* oldop = NULL;
8472 if (!o || o->op_opt)
8476 SAVEVPTR(PL_curcop);
8477 for (; o; o = o->op_next) {
8480 /* By default, this op has now been optimised. A couple of cases below
8481 clear this again. */
8484 switch (o->op_type) {
8487 PL_curcop = ((COP*)o); /* for warnings */
8491 if (cSVOPo->op_private & OPpCONST_STRICT)
8492 no_bareword_allowed(o);
8495 case OP_METHOD_NAMED:
8496 /* Relocate sv to the pad for thread safety.
8497 * Despite being a "constant", the SV is written to,
8498 * for reference counts, sv_upgrade() etc. */
8500 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
8501 if (o->op_type != OP_METHOD_NAMED && SvPADTMP(cSVOPo->op_sv)) {
8502 /* If op_sv is already a PADTMP then it is being used by
8503 * some pad, so make a copy. */
8504 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
8505 SvREADONLY_on(PAD_SVl(ix));
8506 SvREFCNT_dec(cSVOPo->op_sv);
8508 else if (o->op_type != OP_METHOD_NAMED
8509 && cSVOPo->op_sv == &PL_sv_undef) {
8510 /* PL_sv_undef is hack - it's unsafe to store it in the
8511 AV that is the pad, because av_fetch treats values of
8512 PL_sv_undef as a "free" AV entry and will merrily
8513 replace them with a new SV, causing pad_alloc to think
8514 that this pad slot is free. (When, clearly, it is not)
8516 SvOK_off(PAD_SVl(ix));
8517 SvPADTMP_on(PAD_SVl(ix));
8518 SvREADONLY_on(PAD_SVl(ix));
8521 SvREFCNT_dec(PAD_SVl(ix));
8522 SvPADTMP_on(cSVOPo->op_sv);
8523 PAD_SETSV(ix, cSVOPo->op_sv);
8524 /* XXX I don't know how this isn't readonly already. */
8525 SvREADONLY_on(PAD_SVl(ix));
8527 cSVOPo->op_sv = NULL;
8534 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
8535 if (o->op_next->op_private & OPpTARGET_MY) {
8536 if (o->op_flags & OPf_STACKED) /* chained concats */
8537 break; /* ignore_optimization */
8539 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
8540 o->op_targ = o->op_next->op_targ;
8541 o->op_next->op_targ = 0;
8542 o->op_private |= OPpTARGET_MY;
8545 op_null(o->op_next);
8549 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
8550 break; /* Scalar stub must produce undef. List stub is noop */
8554 if (o->op_targ == OP_NEXTSTATE
8555 || o->op_targ == OP_DBSTATE)
8557 PL_curcop = ((COP*)o);
8559 /* XXX: We avoid setting op_seq here to prevent later calls
8560 to peep() from mistakenly concluding that optimisation
8561 has already occurred. This doesn't fix the real problem,
8562 though (See 20010220.007). AMS 20010719 */
8563 /* op_seq functionality is now replaced by op_opt */
8570 if (oldop && o->op_next) {
8571 oldop->op_next = o->op_next;
8579 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
8580 OP* const pop = (o->op_type == OP_PADAV) ?
8581 o->op_next : o->op_next->op_next;
8583 if (pop && pop->op_type == OP_CONST &&
8584 ((PL_op = pop->op_next)) &&
8585 pop->op_next->op_type == OP_AELEM &&
8586 !(pop->op_next->op_private &
8587 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
8588 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
8593 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
8594 no_bareword_allowed(pop);
8595 if (o->op_type == OP_GV)
8596 op_null(o->op_next);
8597 op_null(pop->op_next);
8599 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
8600 o->op_next = pop->op_next->op_next;
8601 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
8602 o->op_private = (U8)i;
8603 if (o->op_type == OP_GV) {
8608 o->op_flags |= OPf_SPECIAL;
8609 o->op_type = OP_AELEMFAST;
8614 if (o->op_next->op_type == OP_RV2SV) {
8615 if (!(o->op_next->op_private & OPpDEREF)) {
8616 op_null(o->op_next);
8617 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
8619 o->op_next = o->op_next->op_next;
8620 o->op_type = OP_GVSV;
8621 o->op_ppaddr = PL_ppaddr[OP_GVSV];
8624 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
8625 GV * const gv = cGVOPo_gv;
8626 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
8627 /* XXX could check prototype here instead of just carping */
8628 SV * const sv = sv_newmortal();
8629 gv_efullname3(sv, gv, NULL);
8630 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
8631 "%"SVf"() called too early to check prototype",
8635 else if (o->op_next->op_type == OP_READLINE
8636 && o->op_next->op_next->op_type == OP_CONCAT
8637 && (o->op_next->op_next->op_flags & OPf_STACKED))
8639 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
8640 o->op_type = OP_RCATLINE;
8641 o->op_flags |= OPf_STACKED;
8642 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
8643 op_null(o->op_next->op_next);
8644 op_null(o->op_next);
8654 fop = cUNOP->op_first;
8662 fop = cLOGOP->op_first;
8663 sop = fop->op_sibling;
8664 while (cLOGOP->op_other->op_type == OP_NULL)
8665 cLOGOP->op_other = cLOGOP->op_other->op_next;
8666 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
8670 if ((fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
8672 (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV)
8677 if (!(nop->op_flags && OPf_WANT_VOID)) {
8678 while (nop && nop->op_next) {
8679 switch (nop->op_next->op_type) {
8684 lop = nop = nop->op_next;
8695 if (lop->op_flags && OPf_WANT_VOID) {
8696 if (fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
8697 cLOGOP->op_first = opt_scalarhv(fop);
8698 if (sop && (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV))
8699 cLOGOP->op_first->op_sibling = opt_scalarhv(sop);
8715 while (cLOGOP->op_other->op_type == OP_NULL)
8716 cLOGOP->op_other = cLOGOP->op_other->op_next;
8717 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
8722 while (cLOOP->op_redoop->op_type == OP_NULL)
8723 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
8724 peep(cLOOP->op_redoop);
8725 while (cLOOP->op_nextop->op_type == OP_NULL)
8726 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
8727 peep(cLOOP->op_nextop);
8728 while (cLOOP->op_lastop->op_type == OP_NULL)
8729 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
8730 peep(cLOOP->op_lastop);
8734 assert(!(cPMOP->op_pmflags & PMf_ONCE));
8735 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
8736 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
8737 cPMOP->op_pmstashstartu.op_pmreplstart
8738 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
8739 peep(cPMOP->op_pmstashstartu.op_pmreplstart);
8743 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
8744 && ckWARN(WARN_SYNTAX))
8746 if (o->op_next->op_sibling) {
8747 const OPCODE type = o->op_next->op_sibling->op_type;
8748 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
8749 const line_t oldline = CopLINE(PL_curcop);
8750 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
8751 Perl_warner(aTHX_ packWARN(WARN_EXEC),
8752 "Statement unlikely to be reached");
8753 Perl_warner(aTHX_ packWARN(WARN_EXEC),
8754 "\t(Maybe you meant system() when you said exec()?)\n");
8755 CopLINE_set(PL_curcop, oldline);
8766 const char *key = NULL;
8769 if (((BINOP*)o)->op_last->op_type != OP_CONST)
8772 /* Make the CONST have a shared SV */
8773 svp = cSVOPx_svp(((BINOP*)o)->op_last);
8774 if (!SvFAKE(sv = *svp) || !SvREADONLY(sv)) {
8775 key = SvPV_const(sv, keylen);
8776 lexname = newSVpvn_share(key,
8777 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
8783 if ((o->op_private & (OPpLVAL_INTRO)))
8786 rop = (UNOP*)((BINOP*)o)->op_first;
8787 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
8789 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
8790 if (!SvPAD_TYPED(lexname))
8792 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8793 if (!fields || !GvHV(*fields))
8795 key = SvPV_const(*svp, keylen);
8796 if (!hv_fetch(GvHV(*fields), key,
8797 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8799 Perl_croak(aTHX_ "No such class field \"%s\" "
8800 "in variable %s of type %s",
8801 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
8814 SVOP *first_key_op, *key_op;
8816 if ((o->op_private & (OPpLVAL_INTRO))
8817 /* I bet there's always a pushmark... */
8818 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
8819 /* hmmm, no optimization if list contains only one key. */
8821 rop = (UNOP*)((LISTOP*)o)->op_last;
8822 if (rop->op_type != OP_RV2HV)
8824 if (rop->op_first->op_type == OP_PADSV)
8825 /* @$hash{qw(keys here)} */
8826 rop = (UNOP*)rop->op_first;
8828 /* @{$hash}{qw(keys here)} */
8829 if (rop->op_first->op_type == OP_SCOPE
8830 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
8832 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
8838 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
8839 if (!SvPAD_TYPED(lexname))
8841 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8842 if (!fields || !GvHV(*fields))
8844 /* Again guessing that the pushmark can be jumped over.... */
8845 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
8846 ->op_first->op_sibling;
8847 for (key_op = first_key_op; key_op;
8848 key_op = (SVOP*)key_op->op_sibling) {
8849 if (key_op->op_type != OP_CONST)
8851 svp = cSVOPx_svp(key_op);
8852 key = SvPV_const(*svp, keylen);
8853 if (!hv_fetch(GvHV(*fields), key,
8854 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8856 Perl_croak(aTHX_ "No such class field \"%s\" "
8857 "in variable %s of type %s",
8858 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
8865 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
8869 /* check that RHS of sort is a single plain array */
8870 OP *oright = cUNOPo->op_first;
8871 if (!oright || oright->op_type != OP_PUSHMARK)
8874 /* reverse sort ... can be optimised. */
8875 if (!cUNOPo->op_sibling) {
8876 /* Nothing follows us on the list. */
8877 OP * const reverse = o->op_next;
8879 if (reverse->op_type == OP_REVERSE &&
8880 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
8881 OP * const pushmark = cUNOPx(reverse)->op_first;
8882 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
8883 && (cUNOPx(pushmark)->op_sibling == o)) {
8884 /* reverse -> pushmark -> sort */
8885 o->op_private |= OPpSORT_REVERSE;
8887 pushmark->op_next = oright->op_next;
8893 /* make @a = sort @a act in-place */
8895 oright = cUNOPx(oright)->op_sibling;
8898 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
8899 oright = cUNOPx(oright)->op_sibling;
8902 oleft = is_inplace_av(o, oright);
8906 /* transfer MODishness etc from LHS arg to RHS arg */
8907 oright->op_flags = oleft->op_flags;
8908 o->op_private |= OPpSORT_INPLACE;
8910 /* excise push->gv->rv2av->null->aassign */
8911 o2 = o->op_next->op_next;
8912 op_null(o2); /* PUSHMARK */
8914 if (o2->op_type == OP_GV) {
8915 op_null(o2); /* GV */
8918 op_null(o2); /* RV2AV or PADAV */
8919 o2 = o2->op_next->op_next;
8920 op_null(o2); /* AASSIGN */
8922 o->op_next = o2->op_next;
8928 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
8931 LISTOP *enter, *exlist;
8933 /* @a = reverse @a */
8934 if ((oright = cLISTOPo->op_first)
8935 && (oright->op_type == OP_PUSHMARK)
8936 && (oright = oright->op_sibling)
8937 && (oleft = is_inplace_av(o, oright))) {
8940 /* transfer MODishness etc from LHS arg to RHS arg */
8941 oright->op_flags = oleft->op_flags;
8942 o->op_private |= OPpREVERSE_INPLACE;
8944 /* excise push->gv->rv2av->null->aassign */
8945 o2 = o->op_next->op_next;
8946 op_null(o2); /* PUSHMARK */
8948 if (o2->op_type == OP_GV) {
8949 op_null(o2); /* GV */
8952 op_null(o2); /* RV2AV or PADAV */
8953 o2 = o2->op_next->op_next;
8954 op_null(o2); /* AASSIGN */
8956 o->op_next = o2->op_next;
8960 enter = (LISTOP *) o->op_next;
8963 if (enter->op_type == OP_NULL) {
8964 enter = (LISTOP *) enter->op_next;
8968 /* for $a (...) will have OP_GV then OP_RV2GV here.
8969 for (...) just has an OP_GV. */
8970 if (enter->op_type == OP_GV) {
8971 gvop = (OP *) enter;
8972 enter = (LISTOP *) enter->op_next;
8975 if (enter->op_type == OP_RV2GV) {
8976 enter = (LISTOP *) enter->op_next;
8982 if (enter->op_type != OP_ENTERITER)
8985 iter = enter->op_next;
8986 if (!iter || iter->op_type != OP_ITER)
8989 expushmark = enter->op_first;
8990 if (!expushmark || expushmark->op_type != OP_NULL
8991 || expushmark->op_targ != OP_PUSHMARK)
8994 exlist = (LISTOP *) expushmark->op_sibling;
8995 if (!exlist || exlist->op_type != OP_NULL
8996 || exlist->op_targ != OP_LIST)
8999 if (exlist->op_last != o) {
9000 /* Mmm. Was expecting to point back to this op. */
9003 theirmark = exlist->op_first;
9004 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
9007 if (theirmark->op_sibling != o) {
9008 /* There's something between the mark and the reverse, eg
9009 for (1, reverse (...))
9014 ourmark = ((LISTOP *)o)->op_first;
9015 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
9018 ourlast = ((LISTOP *)o)->op_last;
9019 if (!ourlast || ourlast->op_next != o)
9022 rv2av = ourmark->op_sibling;
9023 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
9024 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
9025 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
9026 /* We're just reversing a single array. */
9027 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
9028 enter->op_flags |= OPf_STACKED;
9031 /* We don't have control over who points to theirmark, so sacrifice
9033 theirmark->op_next = ourmark->op_next;
9034 theirmark->op_flags = ourmark->op_flags;
9035 ourlast->op_next = gvop ? gvop : (OP *) enter;
9038 enter->op_private |= OPpITER_REVERSED;
9039 iter->op_private |= OPpITER_REVERSED;
9046 UNOP *refgen, *rv2cv;
9049 if ((o->op_flags & OPf_WANT) != OPf_WANT_VOID)
9052 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
9055 rv2gv = ((BINOP *)o)->op_last;
9056 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
9059 refgen = (UNOP *)((BINOP *)o)->op_first;
9061 if (!refgen || refgen->op_type != OP_REFGEN)
9064 exlist = (LISTOP *)refgen->op_first;
9065 if (!exlist || exlist->op_type != OP_NULL
9066 || exlist->op_targ != OP_LIST)
9069 if (exlist->op_first->op_type != OP_PUSHMARK)
9072 rv2cv = (UNOP*)exlist->op_last;
9074 if (rv2cv->op_type != OP_RV2CV)
9077 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
9078 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
9079 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
9081 o->op_private |= OPpASSIGN_CV_TO_GV;
9082 rv2gv->op_private |= OPpDONT_INIT_GV;
9083 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
9091 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
9092 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
9102 Perl_custom_op_name(pTHX_ const OP* o)
9105 const IV index = PTR2IV(o->op_ppaddr);
9109 PERL_ARGS_ASSERT_CUSTOM_OP_NAME;
9111 if (!PL_custom_op_names) /* This probably shouldn't happen */
9112 return (char *)PL_op_name[OP_CUSTOM];
9114 keysv = sv_2mortal(newSViv(index));
9116 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
9118 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
9120 return SvPV_nolen(HeVAL(he));
9124 Perl_custom_op_desc(pTHX_ const OP* o)
9127 const IV index = PTR2IV(o->op_ppaddr);
9131 PERL_ARGS_ASSERT_CUSTOM_OP_DESC;
9133 if (!PL_custom_op_descs)
9134 return (char *)PL_op_desc[OP_CUSTOM];
9136 keysv = sv_2mortal(newSViv(index));
9138 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
9140 return (char *)PL_op_desc[OP_CUSTOM];
9142 return SvPV_nolen(HeVAL(he));
9147 /* Efficient sub that returns a constant scalar value. */
9149 const_sv_xsub(pTHX_ CV* cv)
9153 SV *const sv = MUTABLE_SV(XSANY.any_ptr);
9157 /* diag_listed_as: SKIPME */
9158 Perl_croak(aTHX_ "usage: %s::%s()",
9159 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
9172 * c-indentation-style: bsd
9174 * indent-tabs-mode: t
9177 * ex: set ts=8 sts=4 sw=4 noet: