3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
13 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
14 * youngest of the Old Took's daughters); and Mr. Drogo was his second
15 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
16 * either way, as the saying is, if you follow me." --the Gaffer
19 /* This file contains the functions that create, manipulate and optimize
20 * the OP structures that hold a compiled perl program.
22 * A Perl program is compiled into a tree of OPs. Each op contains
23 * structural pointers (eg to its siblings and the next op in the
24 * execution sequence), a pointer to the function that would execute the
25 * op, plus any data specific to that op. For example, an OP_CONST op
26 * points to the pp_const() function and to an SV containing the constant
27 * value. When pp_const() is executed, its job is to push that SV onto the
30 * OPs are mainly created by the newFOO() functions, which are mainly
31 * called from the parser (in perly.y) as the code is parsed. For example
32 * the Perl code $a + $b * $c would cause the equivalent of the following
33 * to be called (oversimplifying a bit):
35 * newBINOP(OP_ADD, flags,
37 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
40 * Note that during the build of miniperl, a temporary copy of this file
41 * is made, called opmini.c.
45 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
49 An execution-order pass
51 The bottom-up pass is represented by all the "newOP" routines and
52 the ck_ routines. The bottom-upness is actually driven by yacc.
53 So at the point that a ck_ routine fires, we have no idea what the
54 context is, either upward in the syntax tree, or either forward or
55 backward in the execution order. (The bottom-up parser builds that
56 part of the execution order it knows about, but if you follow the "next"
57 links around, you'll find it's actually a closed loop through the
60 Whenever the bottom-up parser gets to a node that supplies context to
61 its components, it invokes that portion of the top-down pass that applies
62 to that part of the subtree (and marks the top node as processed, so
63 if a node further up supplies context, it doesn't have to take the
64 plunge again). As a particular subcase of this, as the new node is
65 built, it takes all the closed execution loops of its subcomponents
66 and links them into a new closed loop for the higher level node. But
67 it's still not the real execution order.
69 The actual execution order is not known till we get a grammar reduction
70 to a top-level unit like a subroutine or file that will be called by
71 "name" rather than via a "next" pointer. At that point, we can call
72 into peep() to do that code's portion of the 3rd pass. It has to be
73 recursive, but it's recursive on basic blocks, not on tree nodes.
76 /* To implement user lexical pragmas, there needs to be a way at run time to
77 get the compile time state of %^H for that block. Storing %^H in every
78 block (or even COP) would be very expensive, so a different approach is
79 taken. The (running) state of %^H is serialised into a tree of HE-like
80 structs. Stores into %^H are chained onto the current leaf as a struct
81 refcounted_he * with the key and the value. Deletes from %^H are saved
82 with a value of PL_sv_placeholder. The state of %^H at any point can be
83 turned back into a regular HV by walking back up the tree from that point's
84 leaf, ignoring any key you've already seen (placeholder or not), storing
85 the rest into the HV structure, then removing the placeholders. Hence
86 memory is only used to store the %^H deltas from the enclosing COP, rather
87 than the entire %^H on each COP.
89 To cause actions on %^H to write out the serialisation records, it has
90 magic type 'H'. This magic (itself) does nothing, but its presence causes
91 the values to gain magic type 'h', which has entries for set and clear.
92 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
93 record, with deletes written by C<Perl_magic_clearhint>. C<SAVE_HINTS>
94 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
95 it will be correctly restored when any inner compiling scope is exited.
101 #include "keywords.h"
103 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
105 #if defined(PL_OP_SLAB_ALLOC)
107 #ifdef PERL_DEBUG_READONLY_OPS
108 # define PERL_SLAB_SIZE 4096
109 # include <sys/mman.h>
112 #ifndef PERL_SLAB_SIZE
113 #define PERL_SLAB_SIZE 2048
117 Perl_Slab_Alloc(pTHX_ size_t sz)
121 * To make incrementing use count easy PL_OpSlab is an I32 *
122 * To make inserting the link to slab PL_OpPtr is I32 **
123 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
124 * Add an overhead for pointer to slab and round up as a number of pointers
126 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
127 if ((PL_OpSpace -= sz) < 0) {
128 #ifdef PERL_DEBUG_READONLY_OPS
129 /* We need to allocate chunk by chunk so that we can control the VM
131 PL_OpPtr = (I32**) mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
132 MAP_ANON|MAP_PRIVATE, -1, 0);
134 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
135 (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
137 if(PL_OpPtr == MAP_FAILED) {
138 perror("mmap failed");
143 PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*));
148 /* We reserve the 0'th I32 sized chunk as a use count */
149 PL_OpSlab = (I32 *) PL_OpPtr;
150 /* Reduce size by the use count word, and by the size we need.
151 * Latter is to mimic the '-=' in the if() above
153 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
154 /* Allocation pointer starts at the top.
155 Theory: because we build leaves before trunk allocating at end
156 means that at run time access is cache friendly upward
158 PL_OpPtr += PERL_SLAB_SIZE;
160 #ifdef PERL_DEBUG_READONLY_OPS
161 /* We remember this slab. */
162 /* This implementation isn't efficient, but it is simple. */
163 PL_slabs = (I32**) realloc(PL_slabs, sizeof(I32**) * (PL_slab_count + 1));
164 PL_slabs[PL_slab_count++] = PL_OpSlab;
165 DEBUG_m(PerlIO_printf(Perl_debug_log, "Allocate %p\n", PL_OpSlab));
168 assert( PL_OpSpace >= 0 );
169 /* Move the allocation pointer down */
171 assert( PL_OpPtr > (I32 **) PL_OpSlab );
172 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
173 (*PL_OpSlab)++; /* Increment use count of slab */
174 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
175 assert( *PL_OpSlab > 0 );
176 return (void *)(PL_OpPtr + 1);
179 #ifdef PERL_DEBUG_READONLY_OPS
181 Perl_pending_Slabs_to_ro(pTHX) {
182 /* Turn all the allocated op slabs read only. */
183 U32 count = PL_slab_count;
184 I32 **const slabs = PL_slabs;
186 /* Reset the array of pending OP slabs, as we're about to turn this lot
187 read only. Also, do it ahead of the loop in case the warn triggers,
188 and a warn handler has an eval */
193 /* Force a new slab for any further allocation. */
197 void *const start = slabs[count];
198 const size_t size = PERL_SLAB_SIZE* sizeof(I32*);
199 if(mprotect(start, size, PROT_READ)) {
200 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d",
201 start, (unsigned long) size, errno);
209 S_Slab_to_rw(pTHX_ void *op)
211 I32 * const * const ptr = (I32 **) op;
212 I32 * const slab = ptr[-1];
213 assert( ptr-1 > (I32 **) slab );
214 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
216 if(mprotect(slab, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE)) {
217 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d",
218 slab, (unsigned long) PERL_SLAB_SIZE*sizeof(I32*), errno);
223 Perl_op_refcnt_inc(pTHX_ OP *o)
234 Perl_op_refcnt_dec(pTHX_ OP *o)
240 # define Slab_to_rw(op)
244 Perl_Slab_Free(pTHX_ void *op)
246 I32 * const * const ptr = (I32 **) op;
247 I32 * const slab = ptr[-1];
248 assert( ptr-1 > (I32 **) slab );
249 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
252 if (--(*slab) == 0) {
254 # define PerlMemShared PerlMem
257 #ifdef PERL_DEBUG_READONLY_OPS
258 U32 count = PL_slab_count;
259 /* Need to remove this slab from our list of slabs */
262 if (PL_slabs[count] == slab) {
264 /* Found it. Move the entry at the end to overwrite it. */
265 DEBUG_m(PerlIO_printf(Perl_debug_log,
266 "Deallocate %p by moving %p from %lu to %lu\n",
268 PL_slabs[PL_slab_count - 1],
269 PL_slab_count, count));
270 PL_slabs[count] = PL_slabs[--PL_slab_count];
271 /* Could realloc smaller at this point, but probably not
273 if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
274 perror("munmap failed");
282 PerlMemShared_free(slab);
284 if (slab == PL_OpSlab) {
291 * In the following definition, the ", (OP*)0" is just to make the compiler
292 * think the expression is of the right type: croak actually does a Siglongjmp.
294 #define CHECKOP(type,o) \
295 ((PL_op_mask && PL_op_mask[type]) \
296 ? ( op_free((OP*)o), \
297 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
299 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
301 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
304 S_gv_ename(pTHX_ GV *gv)
306 SV* const tmpsv = sv_newmortal();
307 gv_efullname3(tmpsv, gv, NULL);
308 return SvPV_nolen_const(tmpsv);
312 S_no_fh_allowed(pTHX_ OP *o)
314 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
320 S_too_few_arguments(pTHX_ OP *o, const char *name)
322 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
327 S_too_many_arguments(pTHX_ OP *o, const char *name)
329 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
334 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
336 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
337 (int)n, name, t, OP_DESC(kid)));
341 S_no_bareword_allowed(pTHX_ const OP *o)
344 return; /* various ok barewords are hidden in extra OP_NULL */
345 qerror(Perl_mess(aTHX_
346 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
350 /* "register" allocation */
353 Perl_allocmy(pTHX_ const char *const name)
357 const bool is_our = (PL_parser->in_my == KEY_our);
359 /* complain about "my $<special_var>" etc etc */
363 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
364 (name[1] == '_' && (*name == '$' || name[2]))))
366 /* name[2] is true if strlen(name) > 2 */
367 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
368 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%s in \"%s\"",
369 name[0], toCTRL(name[1]), name + 2,
370 PL_parser->in_my == KEY_state ? "state" : "my"));
372 yyerror(Perl_form(aTHX_ "Can't use global %s in \"%s\"",name,
373 PL_parser->in_my == KEY_state ? "state" : "my"));
377 /* check for duplicate declaration */
378 pad_check_dup(name, is_our, (PL_curstash ? PL_curstash : PL_defstash));
380 if (PL_parser->in_my_stash && *name != '$') {
381 yyerror(Perl_form(aTHX_
382 "Can't declare class for non-scalar %s in \"%s\"",
385 : PL_parser->in_my == KEY_state ? "state" : "my"));
388 /* allocate a spare slot and store the name in that slot */
390 off = pad_add_name(name,
391 PL_parser->in_my_stash,
393 /* $_ is always in main::, even with our */
394 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
398 PL_parser->in_my == KEY_state
400 /* anon sub prototypes contains state vars should always be cloned,
401 * otherwise the state var would be shared between anon subs */
403 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
404 CvCLONE_on(PL_compcv);
409 /* free the body of an op without examining its contents.
410 * Always use this rather than FreeOp directly */
413 S_op_destroy(pTHX_ OP *o)
415 if (o->op_latefree) {
423 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
425 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
431 Perl_op_free(pTHX_ OP *o)
438 if (o->op_latefreed) {
445 if (o->op_private & OPpREFCOUNTED) {
456 refcnt = OpREFCNT_dec(o);
459 /* Need to find and remove any pattern match ops from the list
460 we maintain for reset(). */
461 find_and_forget_pmops(o);
471 if (o->op_flags & OPf_KIDS) {
472 register OP *kid, *nextkid;
473 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
474 nextkid = kid->op_sibling; /* Get before next freeing kid */
479 type = (OPCODE)o->op_targ;
481 #ifdef PERL_DEBUG_READONLY_OPS
485 /* COP* is not cleared by op_clear() so that we may track line
486 * numbers etc even after null() */
487 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE) {
492 if (o->op_latefree) {
498 #ifdef DEBUG_LEAKING_SCALARS
505 Perl_op_clear(pTHX_ OP *o)
510 /* if (o->op_madprop && o->op_madprop->mad_next)
512 /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
513 "modification of a read only value" for a reason I can't fathom why.
514 It's the "" stringification of $_, where $_ was set to '' in a foreach
515 loop, but it defies simplification into a small test case.
516 However, commenting them out has caused ext/List/Util/t/weak.t to fail
519 mad_free(o->op_madprop);
525 switch (o->op_type) {
526 case OP_NULL: /* Was holding old type, if any. */
527 if (PL_madskills && o->op_targ != OP_NULL) {
528 o->op_type = o->op_targ;
532 case OP_ENTEREVAL: /* Was holding hints. */
536 if (!(o->op_flags & OPf_REF)
537 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
543 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
544 /* not an OP_PADAV replacement */
546 if (cPADOPo->op_padix > 0) {
547 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
548 * may still exist on the pad */
549 pad_swipe(cPADOPo->op_padix, TRUE);
550 cPADOPo->op_padix = 0;
553 SvREFCNT_dec(cSVOPo->op_sv);
554 cSVOPo->op_sv = NULL;
558 case OP_METHOD_NAMED:
560 SvREFCNT_dec(cSVOPo->op_sv);
561 cSVOPo->op_sv = NULL;
564 Even if op_clear does a pad_free for the target of the op,
565 pad_free doesn't actually remove the sv that exists in the pad;
566 instead it lives on. This results in that it could be reused as
567 a target later on when the pad was reallocated.
570 pad_swipe(o->op_targ,1);
579 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
583 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
585 if (cPADOPo->op_padix > 0) {
586 pad_swipe(cPADOPo->op_padix, TRUE);
587 cPADOPo->op_padix = 0;
590 SvREFCNT_dec(cSVOPo->op_sv);
591 cSVOPo->op_sv = NULL;
595 PerlMemShared_free(cPVOPo->op_pv);
596 cPVOPo->op_pv = NULL;
600 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
604 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
605 /* No GvIN_PAD_off here, because other references may still
606 * exist on the pad */
607 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
610 SvREFCNT_dec((SV*)cPMOPo->op_pmreplrootu.op_pmtargetgv);
616 forget_pmop(cPMOPo, 1);
617 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
618 /* we use the same protection as the "SAFE" version of the PM_ macros
619 * here since sv_clean_all might release some PMOPs
620 * after PL_regex_padav has been cleared
621 * and the clearing of PL_regex_padav needs to
622 * happen before sv_clean_all
625 if(PL_regex_pad) { /* We could be in destruction */
626 ReREFCNT_dec(PM_GETRE(cPMOPo));
627 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
628 SvREADONLY_off(PL_regex_pad[(cPMOPo)->op_pmoffset]);
629 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
630 PM_SETRE_OFFSET(cPMOPo, (cPMOPo)->op_pmoffset);
633 ReREFCNT_dec(PM_GETRE(cPMOPo));
634 PM_SETRE(cPMOPo, NULL);
640 if (o->op_targ > 0) {
641 pad_free(o->op_targ);
647 S_cop_free(pTHX_ COP* cop)
652 if (! specialWARN(cop->cop_warnings))
653 PerlMemShared_free(cop->cop_warnings);
654 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
658 S_forget_pmop(pTHX_ PMOP *const o
664 HV * const pmstash = PmopSTASH(o);
665 if (pmstash && !SvIS_FREED(pmstash)) {
666 MAGIC * const mg = mg_find((SV*)pmstash, PERL_MAGIC_symtab);
668 PMOP **const array = (PMOP**) mg->mg_ptr;
669 U32 count = mg->mg_len / sizeof(PMOP**);
674 /* Found it. Move the entry at the end to overwrite it. */
675 array[i] = array[--count];
676 mg->mg_len = count * sizeof(PMOP**);
677 /* Could realloc smaller at this point always, but probably
678 not worth it. Probably worth free()ing if we're the
681 Safefree(mg->mg_ptr);
698 S_find_and_forget_pmops(pTHX_ OP *o)
700 if (o->op_flags & OPf_KIDS) {
701 OP *kid = cUNOPo->op_first;
703 switch (kid->op_type) {
708 forget_pmop((PMOP*)kid, 0);
710 find_and_forget_pmops(kid);
711 kid = kid->op_sibling;
717 Perl_op_null(pTHX_ OP *o)
720 if (o->op_type == OP_NULL)
724 o->op_targ = o->op_type;
725 o->op_type = OP_NULL;
726 o->op_ppaddr = PL_ppaddr[OP_NULL];
730 Perl_op_refcnt_lock(pTHX)
738 Perl_op_refcnt_unlock(pTHX)
745 /* Contextualizers */
747 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
750 Perl_linklist(pTHX_ OP *o)
757 /* establish postfix order */
758 first = cUNOPo->op_first;
761 o->op_next = LINKLIST(first);
764 if (kid->op_sibling) {
765 kid->op_next = LINKLIST(kid->op_sibling);
766 kid = kid->op_sibling;
780 Perl_scalarkids(pTHX_ OP *o)
782 if (o && o->op_flags & OPf_KIDS) {
784 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
791 S_scalarboolean(pTHX_ OP *o)
794 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
795 if (ckWARN(WARN_SYNTAX)) {
796 const line_t oldline = CopLINE(PL_curcop);
798 if (PL_parser && PL_parser->copline != NOLINE)
799 CopLINE_set(PL_curcop, PL_parser->copline);
800 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
801 CopLINE_set(PL_curcop, oldline);
808 Perl_scalar(pTHX_ OP *o)
813 /* assumes no premature commitment */
814 if (!o || (PL_parser && PL_parser->error_count)
815 || (o->op_flags & OPf_WANT)
816 || o->op_type == OP_RETURN)
821 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
823 switch (o->op_type) {
825 scalar(cBINOPo->op_first);
830 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
834 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
835 if (!kPMOP->op_pmreplrootu.op_pmreplroot)
836 deprecate_old("implicit split to @_");
844 if (o->op_flags & OPf_KIDS) {
845 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
851 kid = cLISTOPo->op_first;
853 while ((kid = kid->op_sibling)) {
859 PL_curcop = &PL_compiling;
864 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
870 PL_curcop = &PL_compiling;
873 if (ckWARN(WARN_VOID))
874 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
880 Perl_scalarvoid(pTHX_ OP *o)
884 const char* useless = NULL;
888 /* trailing mad null ops don't count as "there" for void processing */
890 o->op_type != OP_NULL &&
892 o->op_sibling->op_type == OP_NULL)
895 for (sib = o->op_sibling;
896 sib && sib->op_type == OP_NULL;
897 sib = sib->op_sibling) ;
903 if (o->op_type == OP_NEXTSTATE
904 || o->op_type == OP_SETSTATE
905 || o->op_type == OP_DBSTATE
906 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
907 || o->op_targ == OP_SETSTATE
908 || o->op_targ == OP_DBSTATE)))
909 PL_curcop = (COP*)o; /* for warning below */
911 /* assumes no premature commitment */
912 want = o->op_flags & OPf_WANT;
913 if ((want && want != OPf_WANT_SCALAR)
914 || (PL_parser && PL_parser->error_count)
915 || o->op_type == OP_RETURN)
920 if ((o->op_private & OPpTARGET_MY)
921 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
923 return scalar(o); /* As if inside SASSIGN */
926 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
928 switch (o->op_type) {
930 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
934 if (o->op_flags & OPf_STACKED)
938 if (o->op_private == 4)
1012 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1013 /* Otherwise it's "Useless use of grep iterator" */
1014 useless = (o->op_type == OP_GREPWHILE) ? "grep"
1019 kid = cUNOPo->op_first;
1020 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1021 kid->op_type != OP_TRANS) {
1024 useless = "negative pattern binding (!~)";
1031 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1032 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1033 useless = "a variable";
1038 if (cSVOPo->op_private & OPpCONST_STRICT)
1039 no_bareword_allowed(o);
1041 if (ckWARN(WARN_VOID)) {
1042 useless = "a constant";
1043 if (o->op_private & OPpCONST_ARYBASE)
1045 /* don't warn on optimised away booleans, eg
1046 * use constant Foo, 5; Foo || print; */
1047 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1049 /* the constants 0 and 1 are permitted as they are
1050 conventionally used as dummies in constructs like
1051 1 while some_condition_with_side_effects; */
1052 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1054 else if (SvPOK(sv)) {
1055 /* perl4's way of mixing documentation and code
1056 (before the invention of POD) was based on a
1057 trick to mix nroff and perl code. The trick was
1058 built upon these three nroff macros being used in
1059 void context. The pink camel has the details in
1060 the script wrapman near page 319. */
1061 const char * const maybe_macro = SvPVX_const(sv);
1062 if (strnEQ(maybe_macro, "di", 2) ||
1063 strnEQ(maybe_macro, "ds", 2) ||
1064 strnEQ(maybe_macro, "ig", 2))
1069 op_null(o); /* don't execute or even remember it */
1073 o->op_type = OP_PREINC; /* pre-increment is faster */
1074 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1078 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1079 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1083 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1084 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1088 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1089 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1098 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1103 if (o->op_flags & OPf_STACKED)
1110 if (!(o->op_flags & OPf_KIDS))
1121 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1128 /* all requires must return a boolean value */
1129 o->op_flags &= ~OPf_WANT;
1134 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
1135 if (!kPMOP->op_pmreplrootu.op_pmreplroot)
1136 deprecate_old("implicit split to @_");
1140 if (useless && ckWARN(WARN_VOID))
1141 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1146 Perl_listkids(pTHX_ OP *o)
1148 if (o && o->op_flags & OPf_KIDS) {
1150 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1157 Perl_list(pTHX_ OP *o)
1162 /* assumes no premature commitment */
1163 if (!o || (o->op_flags & OPf_WANT)
1164 || (PL_parser && PL_parser->error_count)
1165 || o->op_type == OP_RETURN)
1170 if ((o->op_private & OPpTARGET_MY)
1171 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1173 return o; /* As if inside SASSIGN */
1176 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1178 switch (o->op_type) {
1181 list(cBINOPo->op_first);
1186 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1194 if (!(o->op_flags & OPf_KIDS))
1196 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1197 list(cBINOPo->op_first);
1198 return gen_constant_list(o);
1205 kid = cLISTOPo->op_first;
1207 while ((kid = kid->op_sibling)) {
1208 if (kid->op_sibling)
1213 PL_curcop = &PL_compiling;
1217 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1218 if (kid->op_sibling)
1223 PL_curcop = &PL_compiling;
1226 /* all requires must return a boolean value */
1227 o->op_flags &= ~OPf_WANT;
1234 Perl_scalarseq(pTHX_ OP *o)
1238 const OPCODE type = o->op_type;
1240 if (type == OP_LINESEQ || type == OP_SCOPE ||
1241 type == OP_LEAVE || type == OP_LEAVETRY)
1244 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1245 if (kid->op_sibling) {
1249 PL_curcop = &PL_compiling;
1251 o->op_flags &= ~OPf_PARENS;
1252 if (PL_hints & HINT_BLOCK_SCOPE)
1253 o->op_flags |= OPf_PARENS;
1256 o = newOP(OP_STUB, 0);
1261 S_modkids(pTHX_ OP *o, I32 type)
1263 if (o && o->op_flags & OPf_KIDS) {
1265 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1271 /* Propagate lvalue ("modifiable") context to an op and its children.
1272 * 'type' represents the context type, roughly based on the type of op that
1273 * would do the modifying, although local() is represented by OP_NULL.
1274 * It's responsible for detecting things that can't be modified, flag
1275 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1276 * might have to vivify a reference in $x), and so on.
1278 * For example, "$a+1 = 2" would cause mod() to be called with o being
1279 * OP_ADD and type being OP_SASSIGN, and would output an error.
1283 Perl_mod(pTHX_ OP *o, I32 type)
1287 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1290 if (!o || (PL_parser && PL_parser->error_count))
1293 if ((o->op_private & OPpTARGET_MY)
1294 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1299 switch (o->op_type) {
1305 if (!(o->op_private & OPpCONST_ARYBASE))
1308 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1309 CopARYBASE_set(&PL_compiling,
1310 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1314 SAVECOPARYBASE(&PL_compiling);
1315 CopARYBASE_set(&PL_compiling, 0);
1317 else if (type == OP_REFGEN)
1320 Perl_croak(aTHX_ "That use of $[ is unsupported");
1323 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1327 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1328 !(o->op_flags & OPf_STACKED)) {
1329 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1330 /* The default is to set op_private to the number of children,
1331 which for a UNOP such as RV2CV is always 1. And w're using
1332 the bit for a flag in RV2CV, so we need it clear. */
1333 o->op_private &= ~1;
1334 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1335 assert(cUNOPo->op_first->op_type == OP_NULL);
1336 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1339 else if (o->op_private & OPpENTERSUB_NOMOD)
1341 else { /* lvalue subroutine call */
1342 o->op_private |= OPpLVAL_INTRO;
1343 PL_modcount = RETURN_UNLIMITED_NUMBER;
1344 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1345 /* Backward compatibility mode: */
1346 o->op_private |= OPpENTERSUB_INARGS;
1349 else { /* Compile-time error message: */
1350 OP *kid = cUNOPo->op_first;
1354 if (kid->op_type != OP_PUSHMARK) {
1355 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1357 "panic: unexpected lvalue entersub "
1358 "args: type/targ %ld:%"UVuf,
1359 (long)kid->op_type, (UV)kid->op_targ);
1360 kid = kLISTOP->op_first;
1362 while (kid->op_sibling)
1363 kid = kid->op_sibling;
1364 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1366 if (kid->op_type == OP_METHOD_NAMED
1367 || kid->op_type == OP_METHOD)
1371 NewOp(1101, newop, 1, UNOP);
1372 newop->op_type = OP_RV2CV;
1373 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1374 newop->op_first = NULL;
1375 newop->op_next = (OP*)newop;
1376 kid->op_sibling = (OP*)newop;
1377 newop->op_private |= OPpLVAL_INTRO;
1378 newop->op_private &= ~1;
1382 if (kid->op_type != OP_RV2CV)
1384 "panic: unexpected lvalue entersub "
1385 "entry via type/targ %ld:%"UVuf,
1386 (long)kid->op_type, (UV)kid->op_targ);
1387 kid->op_private |= OPpLVAL_INTRO;
1388 break; /* Postpone until runtime */
1392 kid = kUNOP->op_first;
1393 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1394 kid = kUNOP->op_first;
1395 if (kid->op_type == OP_NULL)
1397 "Unexpected constant lvalue entersub "
1398 "entry via type/targ %ld:%"UVuf,
1399 (long)kid->op_type, (UV)kid->op_targ);
1400 if (kid->op_type != OP_GV) {
1401 /* Restore RV2CV to check lvalueness */
1403 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1404 okid->op_next = kid->op_next;
1405 kid->op_next = okid;
1408 okid->op_next = NULL;
1409 okid->op_type = OP_RV2CV;
1411 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1412 okid->op_private |= OPpLVAL_INTRO;
1413 okid->op_private &= ~1;
1417 cv = GvCV(kGVOP_gv);
1427 /* grep, foreach, subcalls, refgen */
1428 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1430 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1431 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1433 : (o->op_type == OP_ENTERSUB
1434 ? "non-lvalue subroutine call"
1436 type ? PL_op_desc[type] : "local"));
1450 case OP_RIGHT_SHIFT:
1459 if (!(o->op_flags & OPf_STACKED))
1466 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1472 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1473 PL_modcount = RETURN_UNLIMITED_NUMBER;
1474 return o; /* Treat \(@foo) like ordinary list. */
1478 if (scalar_mod_type(o, type))
1480 ref(cUNOPo->op_first, o->op_type);
1484 if (type == OP_LEAVESUBLV)
1485 o->op_private |= OPpMAYBE_LVSUB;
1491 PL_modcount = RETURN_UNLIMITED_NUMBER;
1494 ref(cUNOPo->op_first, o->op_type);
1499 PL_hints |= HINT_BLOCK_SCOPE;
1514 PL_modcount = RETURN_UNLIMITED_NUMBER;
1515 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1516 return o; /* Treat \(@foo) like ordinary list. */
1517 if (scalar_mod_type(o, type))
1519 if (type == OP_LEAVESUBLV)
1520 o->op_private |= OPpMAYBE_LVSUB;
1524 if (!type) /* local() */
1525 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1526 PAD_COMPNAME_PV(o->op_targ));
1534 if (type != OP_SASSIGN)
1538 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1543 if (type == OP_LEAVESUBLV)
1544 o->op_private |= OPpMAYBE_LVSUB;
1546 pad_free(o->op_targ);
1547 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1548 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1549 if (o->op_flags & OPf_KIDS)
1550 mod(cBINOPo->op_first->op_sibling, type);
1555 ref(cBINOPo->op_first, o->op_type);
1556 if (type == OP_ENTERSUB &&
1557 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1558 o->op_private |= OPpLVAL_DEFER;
1559 if (type == OP_LEAVESUBLV)
1560 o->op_private |= OPpMAYBE_LVSUB;
1570 if (o->op_flags & OPf_KIDS)
1571 mod(cLISTOPo->op_last, type);
1576 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1578 else if (!(o->op_flags & OPf_KIDS))
1580 if (o->op_targ != OP_LIST) {
1581 mod(cBINOPo->op_first, type);
1587 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1592 if (type != OP_LEAVESUBLV)
1594 break; /* mod()ing was handled by ck_return() */
1597 /* [20011101.069] File test operators interpret OPf_REF to mean that
1598 their argument is a filehandle; thus \stat(".") should not set
1600 if (type == OP_REFGEN &&
1601 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1604 if (type != OP_LEAVESUBLV)
1605 o->op_flags |= OPf_MOD;
1607 if (type == OP_AASSIGN || type == OP_SASSIGN)
1608 o->op_flags |= OPf_SPECIAL|OPf_REF;
1609 else if (!type) { /* local() */
1612 o->op_private |= OPpLVAL_INTRO;
1613 o->op_flags &= ~OPf_SPECIAL;
1614 PL_hints |= HINT_BLOCK_SCOPE;
1619 if (ckWARN(WARN_SYNTAX)) {
1620 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1621 "Useless localization of %s", OP_DESC(o));
1625 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1626 && type != OP_LEAVESUBLV)
1627 o->op_flags |= OPf_REF;
1632 S_scalar_mod_type(const OP *o, I32 type)
1636 if (o->op_type == OP_RV2GV)
1660 case OP_RIGHT_SHIFT:
1680 S_is_handle_constructor(const OP *o, I32 numargs)
1682 switch (o->op_type) {
1690 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1703 Perl_refkids(pTHX_ OP *o, I32 type)
1705 if (o && o->op_flags & OPf_KIDS) {
1707 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1714 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1719 if (!o || (PL_parser && PL_parser->error_count))
1722 switch (o->op_type) {
1724 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1725 !(o->op_flags & OPf_STACKED)) {
1726 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1727 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1728 assert(cUNOPo->op_first->op_type == OP_NULL);
1729 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1730 o->op_flags |= OPf_SPECIAL;
1731 o->op_private &= ~1;
1736 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1737 doref(kid, type, set_op_ref);
1740 if (type == OP_DEFINED)
1741 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1742 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1745 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1746 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1747 : type == OP_RV2HV ? OPpDEREF_HV
1749 o->op_flags |= OPf_MOD;
1756 o->op_flags |= OPf_REF;
1759 if (type == OP_DEFINED)
1760 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1761 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1767 o->op_flags |= OPf_REF;
1772 if (!(o->op_flags & OPf_KIDS))
1774 doref(cBINOPo->op_first, type, set_op_ref);
1778 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1779 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1780 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1781 : type == OP_RV2HV ? OPpDEREF_HV
1783 o->op_flags |= OPf_MOD;
1793 if (!(o->op_flags & OPf_KIDS))
1795 doref(cLISTOPo->op_last, type, set_op_ref);
1805 S_dup_attrlist(pTHX_ OP *o)
1810 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1811 * where the first kid is OP_PUSHMARK and the remaining ones
1812 * are OP_CONST. We need to push the OP_CONST values.
1814 if (o->op_type == OP_CONST)
1815 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1817 else if (o->op_type == OP_NULL)
1821 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1823 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1824 if (o->op_type == OP_CONST)
1825 rop = append_elem(OP_LIST, rop,
1826 newSVOP(OP_CONST, o->op_flags,
1827 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1834 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1839 /* fake up C<use attributes $pkg,$rv,@attrs> */
1840 ENTER; /* need to protect against side-effects of 'use' */
1841 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1843 #define ATTRSMODULE "attributes"
1844 #define ATTRSMODULE_PM "attributes.pm"
1847 /* Don't force the C<use> if we don't need it. */
1848 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1849 if (svp && *svp != &PL_sv_undef)
1850 NOOP; /* already in %INC */
1852 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1853 newSVpvs(ATTRSMODULE), NULL);
1856 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1857 newSVpvs(ATTRSMODULE),
1859 prepend_elem(OP_LIST,
1860 newSVOP(OP_CONST, 0, stashsv),
1861 prepend_elem(OP_LIST,
1862 newSVOP(OP_CONST, 0,
1864 dup_attrlist(attrs))));
1870 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1873 OP *pack, *imop, *arg;
1879 assert(target->op_type == OP_PADSV ||
1880 target->op_type == OP_PADHV ||
1881 target->op_type == OP_PADAV);
1883 /* Ensure that attributes.pm is loaded. */
1884 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1886 /* Need package name for method call. */
1887 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1889 /* Build up the real arg-list. */
1890 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1892 arg = newOP(OP_PADSV, 0);
1893 arg->op_targ = target->op_targ;
1894 arg = prepend_elem(OP_LIST,
1895 newSVOP(OP_CONST, 0, stashsv),
1896 prepend_elem(OP_LIST,
1897 newUNOP(OP_REFGEN, 0,
1898 mod(arg, OP_REFGEN)),
1899 dup_attrlist(attrs)));
1901 /* Fake up a method call to import */
1902 meth = newSVpvs_share("import");
1903 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1904 append_elem(OP_LIST,
1905 prepend_elem(OP_LIST, pack, list(arg)),
1906 newSVOP(OP_METHOD_NAMED, 0, meth)));
1907 imop->op_private |= OPpENTERSUB_NOMOD;
1909 /* Combine the ops. */
1910 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1914 =notfor apidoc apply_attrs_string
1916 Attempts to apply a list of attributes specified by the C<attrstr> and
1917 C<len> arguments to the subroutine identified by the C<cv> argument which
1918 is expected to be associated with the package identified by the C<stashpv>
1919 argument (see L<attributes>). It gets this wrong, though, in that it
1920 does not correctly identify the boundaries of the individual attribute
1921 specifications within C<attrstr>. This is not really intended for the
1922 public API, but has to be listed here for systems such as AIX which
1923 need an explicit export list for symbols. (It's called from XS code
1924 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1925 to respect attribute syntax properly would be welcome.
1931 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1932 const char *attrstr, STRLEN len)
1937 len = strlen(attrstr);
1941 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1943 const char * const sstr = attrstr;
1944 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1945 attrs = append_elem(OP_LIST, attrs,
1946 newSVOP(OP_CONST, 0,
1947 newSVpvn(sstr, attrstr-sstr)));
1951 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1952 newSVpvs(ATTRSMODULE),
1953 NULL, prepend_elem(OP_LIST,
1954 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1955 prepend_elem(OP_LIST,
1956 newSVOP(OP_CONST, 0,
1962 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1967 if (!o || (PL_parser && PL_parser->error_count))
1971 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
1972 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
1976 if (type == OP_LIST) {
1978 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1979 my_kid(kid, attrs, imopsp);
1980 } else if (type == OP_UNDEF
1986 } else if (type == OP_RV2SV || /* "our" declaration */
1988 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1989 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1990 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1992 PL_parser->in_my == KEY_our
1994 : PL_parser->in_my == KEY_state ? "state" : "my"));
1996 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1997 PL_parser->in_my = FALSE;
1998 PL_parser->in_my_stash = NULL;
1999 apply_attrs(GvSTASH(gv),
2000 (type == OP_RV2SV ? GvSV(gv) :
2001 type == OP_RV2AV ? (SV*)GvAV(gv) :
2002 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
2005 o->op_private |= OPpOUR_INTRO;
2008 else if (type != OP_PADSV &&
2011 type != OP_PUSHMARK)
2013 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2015 PL_parser->in_my == KEY_our
2017 : PL_parser->in_my == KEY_state ? "state" : "my"));
2020 else if (attrs && type != OP_PUSHMARK) {
2023 PL_parser->in_my = FALSE;
2024 PL_parser->in_my_stash = NULL;
2026 /* check for C<my Dog $spot> when deciding package */
2027 stash = PAD_COMPNAME_TYPE(o->op_targ);
2029 stash = PL_curstash;
2030 apply_attrs_my(stash, o, attrs, imopsp);
2032 o->op_flags |= OPf_MOD;
2033 o->op_private |= OPpLVAL_INTRO;
2034 if (PL_parser->in_my == KEY_state)
2035 o->op_private |= OPpPAD_STATE;
2040 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2044 int maybe_scalar = 0;
2046 /* [perl #17376]: this appears to be premature, and results in code such as
2047 C< our(%x); > executing in list mode rather than void mode */
2049 if (o->op_flags & OPf_PARENS)
2059 o = my_kid(o, attrs, &rops);
2061 if (maybe_scalar && o->op_type == OP_PADSV) {
2062 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
2063 o->op_private |= OPpLVAL_INTRO;
2066 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
2068 PL_parser->in_my = FALSE;
2069 PL_parser->in_my_stash = NULL;
2074 Perl_my(pTHX_ OP *o)
2076 return my_attrs(o, NULL);
2080 Perl_sawparens(pTHX_ OP *o)
2082 PERL_UNUSED_CONTEXT;
2084 o->op_flags |= OPf_PARENS;
2089 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2093 const OPCODE ltype = left->op_type;
2094 const OPCODE rtype = right->op_type;
2096 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2097 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2099 const char * const desc
2100 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
2101 ? (int)rtype : OP_MATCH];
2102 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2103 ? "@array" : "%hash");
2104 Perl_warner(aTHX_ packWARN(WARN_MISC),
2105 "Applying %s to %s will act on scalar(%s)",
2106 desc, sample, sample);
2109 if (rtype == OP_CONST &&
2110 cSVOPx(right)->op_private & OPpCONST_BARE &&
2111 cSVOPx(right)->op_private & OPpCONST_STRICT)
2113 no_bareword_allowed(right);
2116 ismatchop = rtype == OP_MATCH ||
2117 rtype == OP_SUBST ||
2119 if (ismatchop && right->op_private & OPpTARGET_MY) {
2121 right->op_private &= ~OPpTARGET_MY;
2123 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2126 right->op_flags |= OPf_STACKED;
2127 if (rtype != OP_MATCH &&
2128 ! (rtype == OP_TRANS &&
2129 right->op_private & OPpTRANS_IDENTICAL))
2130 newleft = mod(left, rtype);
2133 if (right->op_type == OP_TRANS)
2134 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2136 o = prepend_elem(rtype, scalar(newleft), right);
2138 return newUNOP(OP_NOT, 0, scalar(o));
2142 return bind_match(type, left,
2143 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2147 Perl_invert(pTHX_ OP *o)
2151 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2155 Perl_scope(pTHX_ OP *o)
2159 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2160 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2161 o->op_type = OP_LEAVE;
2162 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2164 else if (o->op_type == OP_LINESEQ) {
2166 o->op_type = OP_SCOPE;
2167 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2168 kid = ((LISTOP*)o)->op_first;
2169 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2172 /* The following deals with things like 'do {1 for 1}' */
2173 kid = kid->op_sibling;
2175 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2180 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2186 Perl_block_start(pTHX_ int full)
2189 const int retval = PL_savestack_ix;
2190 pad_block_start(full);
2192 PL_hints &= ~HINT_BLOCK_SCOPE;
2193 SAVECOMPILEWARNINGS();
2194 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2199 Perl_block_end(pTHX_ I32 floor, OP *seq)
2202 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2203 OP* const retval = scalarseq(seq);
2205 CopHINTS_set(&PL_compiling, PL_hints);
2207 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2216 const PADOFFSET offset = pad_findmy("$_");
2217 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2218 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2221 OP * const o = newOP(OP_PADSV, 0);
2222 o->op_targ = offset;
2228 Perl_newPROG(pTHX_ OP *o)
2234 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2235 ((PL_in_eval & EVAL_KEEPERR)
2236 ? OPf_SPECIAL : 0), o);
2237 PL_eval_start = linklist(PL_eval_root);
2238 PL_eval_root->op_private |= OPpREFCOUNTED;
2239 OpREFCNT_set(PL_eval_root, 1);
2240 PL_eval_root->op_next = 0;
2241 CALL_PEEP(PL_eval_start);
2244 if (o->op_type == OP_STUB) {
2245 PL_comppad_name = 0;
2247 S_op_destroy(aTHX_ o);
2250 PL_main_root = scope(sawparens(scalarvoid(o)));
2251 PL_curcop = &PL_compiling;
2252 PL_main_start = LINKLIST(PL_main_root);
2253 PL_main_root->op_private |= OPpREFCOUNTED;
2254 OpREFCNT_set(PL_main_root, 1);
2255 PL_main_root->op_next = 0;
2256 CALL_PEEP(PL_main_start);
2259 /* Register with debugger */
2262 = Perl_get_cvn_flags(aTHX_ STR_WITH_LEN("DB::postponed"), 0);
2266 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2268 call_sv((SV*)cv, G_DISCARD);
2275 Perl_localize(pTHX_ OP *o, I32 lex)
2278 if (o->op_flags & OPf_PARENS)
2279 /* [perl #17376]: this appears to be premature, and results in code such as
2280 C< our(%x); > executing in list mode rather than void mode */
2287 if ( PL_parser->bufptr > PL_parser->oldbufptr
2288 && PL_parser->bufptr[-1] == ','
2289 && ckWARN(WARN_PARENTHESIS))
2291 char *s = PL_parser->bufptr;
2294 /* some heuristics to detect a potential error */
2295 while (*s && (strchr(", \t\n", *s)))
2299 if (*s && strchr("@$%*", *s) && *++s
2300 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2303 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2305 while (*s && (strchr(", \t\n", *s)))
2311 if (sigil && (*s == ';' || *s == '=')) {
2312 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2313 "Parentheses missing around \"%s\" list",
2315 ? (PL_parser->in_my == KEY_our
2317 : PL_parser->in_my == KEY_state
2327 o = mod(o, OP_NULL); /* a bit kludgey */
2328 PL_parser->in_my = FALSE;
2329 PL_parser->in_my_stash = NULL;
2334 Perl_jmaybe(pTHX_ OP *o)
2336 if (o->op_type == OP_LIST) {
2338 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2339 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2345 Perl_fold_constants(pTHX_ register OP *o)
2350 VOL I32 type = o->op_type;
2355 SV * const oldwarnhook = PL_warnhook;
2356 SV * const olddiehook = PL_diehook;
2359 if (PL_opargs[type] & OA_RETSCALAR)
2361 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2362 o->op_targ = pad_alloc(type, SVs_PADTMP);
2364 /* integerize op, unless it happens to be C<-foo>.
2365 * XXX should pp_i_negate() do magic string negation instead? */
2366 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2367 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2368 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2370 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2373 if (!(PL_opargs[type] & OA_FOLDCONST))
2378 /* XXX might want a ck_negate() for this */
2379 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2390 /* XXX what about the numeric ops? */
2391 if (PL_hints & HINT_LOCALE)
2395 if (PL_parser && PL_parser->error_count)
2396 goto nope; /* Don't try to run w/ errors */
2398 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2399 const OPCODE type = curop->op_type;
2400 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2402 type != OP_SCALAR &&
2404 type != OP_PUSHMARK)
2410 curop = LINKLIST(o);
2411 old_next = o->op_next;
2415 oldscope = PL_scopestack_ix;
2416 create_eval_scope(G_FAKINGEVAL);
2418 PL_warnhook = PERL_WARNHOOK_FATAL;
2425 sv = *(PL_stack_sp--);
2426 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2427 pad_swipe(o->op_targ, FALSE);
2428 else if (SvTEMP(sv)) { /* grab mortal temp? */
2429 SvREFCNT_inc_simple_void(sv);
2434 /* Something tried to die. Abandon constant folding. */
2435 /* Pretend the error never happened. */
2436 sv_setpvn(ERRSV,"",0);
2437 o->op_next = old_next;
2441 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2442 PL_warnhook = oldwarnhook;
2443 PL_diehook = olddiehook;
2444 /* XXX note that this croak may fail as we've already blown away
2445 * the stack - eg any nested evals */
2446 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2449 PL_warnhook = oldwarnhook;
2450 PL_diehook = olddiehook;
2452 if (PL_scopestack_ix > oldscope)
2453 delete_eval_scope();
2462 if (type == OP_RV2GV)
2463 newop = newGVOP(OP_GV, 0, (GV*)sv);
2465 newop = newSVOP(OP_CONST, 0, (SV*)sv);
2466 op_getmad(o,newop,'f');
2474 Perl_gen_constant_list(pTHX_ register OP *o)
2478 const I32 oldtmps_floor = PL_tmps_floor;
2481 if (PL_parser && PL_parser->error_count)
2482 return o; /* Don't attempt to run with errors */
2484 PL_op = curop = LINKLIST(o);
2490 assert (!(curop->op_flags & OPf_SPECIAL));
2491 assert(curop->op_type == OP_RANGE);
2493 PL_tmps_floor = oldtmps_floor;
2495 o->op_type = OP_RV2AV;
2496 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2497 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2498 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2499 o->op_opt = 0; /* needs to be revisited in peep() */
2500 curop = ((UNOP*)o)->op_first;
2501 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2503 op_getmad(curop,o,'O');
2512 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2515 if (!o || o->op_type != OP_LIST)
2516 o = newLISTOP(OP_LIST, 0, o, NULL);
2518 o->op_flags &= ~OPf_WANT;
2520 if (!(PL_opargs[type] & OA_MARK))
2521 op_null(cLISTOPo->op_first);
2523 o->op_type = (OPCODE)type;
2524 o->op_ppaddr = PL_ppaddr[type];
2525 o->op_flags |= flags;
2527 o = CHECKOP(type, o);
2528 if (o->op_type != (unsigned)type)
2531 return fold_constants(o);
2534 /* List constructors */
2537 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2545 if (first->op_type != (unsigned)type
2546 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2548 return newLISTOP(type, 0, first, last);
2551 if (first->op_flags & OPf_KIDS)
2552 ((LISTOP*)first)->op_last->op_sibling = last;
2554 first->op_flags |= OPf_KIDS;
2555 ((LISTOP*)first)->op_first = last;
2557 ((LISTOP*)first)->op_last = last;
2562 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2570 if (first->op_type != (unsigned)type)
2571 return prepend_elem(type, (OP*)first, (OP*)last);
2573 if (last->op_type != (unsigned)type)
2574 return append_elem(type, (OP*)first, (OP*)last);
2576 first->op_last->op_sibling = last->op_first;
2577 first->op_last = last->op_last;
2578 first->op_flags |= (last->op_flags & OPf_KIDS);
2581 if (last->op_first && first->op_madprop) {
2582 MADPROP *mp = last->op_first->op_madprop;
2584 while (mp->mad_next)
2586 mp->mad_next = first->op_madprop;
2589 last->op_first->op_madprop = first->op_madprop;
2592 first->op_madprop = last->op_madprop;
2593 last->op_madprop = 0;
2596 S_op_destroy(aTHX_ (OP*)last);
2602 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2610 if (last->op_type == (unsigned)type) {
2611 if (type == OP_LIST) { /* already a PUSHMARK there */
2612 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2613 ((LISTOP*)last)->op_first->op_sibling = first;
2614 if (!(first->op_flags & OPf_PARENS))
2615 last->op_flags &= ~OPf_PARENS;
2618 if (!(last->op_flags & OPf_KIDS)) {
2619 ((LISTOP*)last)->op_last = first;
2620 last->op_flags |= OPf_KIDS;
2622 first->op_sibling = ((LISTOP*)last)->op_first;
2623 ((LISTOP*)last)->op_first = first;
2625 last->op_flags |= OPf_KIDS;
2629 return newLISTOP(type, 0, first, last);
2637 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2640 Newxz(tk, 1, TOKEN);
2641 tk->tk_type = (OPCODE)optype;
2642 tk->tk_type = 12345;
2644 tk->tk_mad = madprop;
2649 Perl_token_free(pTHX_ TOKEN* tk)
2651 if (tk->tk_type != 12345)
2653 mad_free(tk->tk_mad);
2658 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2662 if (tk->tk_type != 12345) {
2663 Perl_warner(aTHX_ packWARN(WARN_MISC),
2664 "Invalid TOKEN object ignored");
2671 /* faked up qw list? */
2673 tm->mad_type == MAD_SV &&
2674 SvPVX((SV*)tm->mad_val)[0] == 'q')
2681 /* pretend constant fold didn't happen? */
2682 if (mp->mad_key == 'f' &&
2683 (o->op_type == OP_CONST ||
2684 o->op_type == OP_GV) )
2686 token_getmad(tk,(OP*)mp->mad_val,slot);
2700 if (mp->mad_key == 'X')
2701 mp->mad_key = slot; /* just change the first one */
2711 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2720 /* pretend constant fold didn't happen? */
2721 if (mp->mad_key == 'f' &&
2722 (o->op_type == OP_CONST ||
2723 o->op_type == OP_GV) )
2725 op_getmad(from,(OP*)mp->mad_val,slot);
2732 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2735 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2741 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2750 /* pretend constant fold didn't happen? */
2751 if (mp->mad_key == 'f' &&
2752 (o->op_type == OP_CONST ||
2753 o->op_type == OP_GV) )
2755 op_getmad(from,(OP*)mp->mad_val,slot);
2762 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2765 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2769 PerlIO_printf(PerlIO_stderr(),
2770 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2776 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2794 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2798 addmad(tm, &(o->op_madprop), slot);
2802 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2823 Perl_newMADsv(pTHX_ char key, SV* sv)
2825 return newMADPROP(key, MAD_SV, sv, 0);
2829 Perl_newMADPROP(pTHX_ char key, char type, const void* val, I32 vlen)
2832 Newxz(mp, 1, MADPROP);
2835 mp->mad_vlen = vlen;
2836 mp->mad_type = type;
2838 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2843 Perl_mad_free(pTHX_ MADPROP* mp)
2845 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2849 mad_free(mp->mad_next);
2850 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
2851 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2852 switch (mp->mad_type) {
2856 Safefree((char*)mp->mad_val);
2859 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2860 op_free((OP*)mp->mad_val);
2863 sv_free((SV*)mp->mad_val);
2866 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
2875 Perl_newNULLLIST(pTHX)
2877 return newOP(OP_STUB, 0);
2881 Perl_force_list(pTHX_ OP *o)
2883 if (!o || o->op_type != OP_LIST)
2884 o = newLISTOP(OP_LIST, 0, o, NULL);
2890 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2895 NewOp(1101, listop, 1, LISTOP);
2897 listop->op_type = (OPCODE)type;
2898 listop->op_ppaddr = PL_ppaddr[type];
2901 listop->op_flags = (U8)flags;
2905 else if (!first && last)
2908 first->op_sibling = last;
2909 listop->op_first = first;
2910 listop->op_last = last;
2911 if (type == OP_LIST) {
2912 OP* const pushop = newOP(OP_PUSHMARK, 0);
2913 pushop->op_sibling = first;
2914 listop->op_first = pushop;
2915 listop->op_flags |= OPf_KIDS;
2917 listop->op_last = pushop;
2920 return CHECKOP(type, listop);
2924 Perl_newOP(pTHX_ I32 type, I32 flags)
2928 NewOp(1101, o, 1, OP);
2929 o->op_type = (OPCODE)type;
2930 o->op_ppaddr = PL_ppaddr[type];
2931 o->op_flags = (U8)flags;
2933 o->op_latefreed = 0;
2937 o->op_private = (U8)(0 | (flags >> 8));
2938 if (PL_opargs[type] & OA_RETSCALAR)
2940 if (PL_opargs[type] & OA_TARGET)
2941 o->op_targ = pad_alloc(type, SVs_PADTMP);
2942 return CHECKOP(type, o);
2946 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2952 first = newOP(OP_STUB, 0);
2953 if (PL_opargs[type] & OA_MARK)
2954 first = force_list(first);
2956 NewOp(1101, unop, 1, UNOP);
2957 unop->op_type = (OPCODE)type;
2958 unop->op_ppaddr = PL_ppaddr[type];
2959 unop->op_first = first;
2960 unop->op_flags = (U8)(flags | OPf_KIDS);
2961 unop->op_private = (U8)(1 | (flags >> 8));
2962 unop = (UNOP*) CHECKOP(type, unop);
2966 return fold_constants((OP *) unop);
2970 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2974 NewOp(1101, binop, 1, BINOP);
2977 first = newOP(OP_NULL, 0);
2979 binop->op_type = (OPCODE)type;
2980 binop->op_ppaddr = PL_ppaddr[type];
2981 binop->op_first = first;
2982 binop->op_flags = (U8)(flags | OPf_KIDS);
2985 binop->op_private = (U8)(1 | (flags >> 8));
2988 binop->op_private = (U8)(2 | (flags >> 8));
2989 first->op_sibling = last;
2992 binop = (BINOP*)CHECKOP(type, binop);
2993 if (binop->op_next || binop->op_type != (OPCODE)type)
2996 binop->op_last = binop->op_first->op_sibling;
2998 return fold_constants((OP *)binop);
3001 static int uvcompare(const void *a, const void *b)
3002 __attribute__nonnull__(1)
3003 __attribute__nonnull__(2)
3004 __attribute__pure__;
3005 static int uvcompare(const void *a, const void *b)
3007 if (*((const UV *)a) < (*(const UV *)b))
3009 if (*((const UV *)a) > (*(const UV *)b))
3011 if (*((const UV *)a+1) < (*(const UV *)b+1))
3013 if (*((const UV *)a+1) > (*(const UV *)b+1))
3019 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3022 SV * const tstr = ((SVOP*)expr)->op_sv;
3025 (repl->op_type == OP_NULL)
3026 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3028 ((SVOP*)repl)->op_sv;
3031 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3032 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3036 register short *tbl;
3038 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3039 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3040 I32 del = o->op_private & OPpTRANS_DELETE;
3042 PL_hints |= HINT_BLOCK_SCOPE;
3045 o->op_private |= OPpTRANS_FROM_UTF;
3048 o->op_private |= OPpTRANS_TO_UTF;
3050 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3051 SV* const listsv = newSVpvs("# comment\n");
3053 const U8* tend = t + tlen;
3054 const U8* rend = r + rlen;
3068 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3069 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3072 const U32 flags = UTF8_ALLOW_DEFAULT;
3076 t = tsave = bytes_to_utf8(t, &len);
3079 if (!to_utf && rlen) {
3081 r = rsave = bytes_to_utf8(r, &len);
3085 /* There are several snags with this code on EBCDIC:
3086 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3087 2. scan_const() in toke.c has encoded chars in native encoding which makes
3088 ranges at least in EBCDIC 0..255 range the bottom odd.
3092 U8 tmpbuf[UTF8_MAXBYTES+1];
3095 Newx(cp, 2*tlen, UV);
3097 transv = newSVpvs("");
3099 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3101 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3103 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3107 cp[2*i+1] = cp[2*i];
3111 qsort(cp, i, 2*sizeof(UV), uvcompare);
3112 for (j = 0; j < i; j++) {
3114 diff = val - nextmin;
3116 t = uvuni_to_utf8(tmpbuf,nextmin);
3117 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3119 U8 range_mark = UTF_TO_NATIVE(0xff);
3120 t = uvuni_to_utf8(tmpbuf, val - 1);
3121 sv_catpvn(transv, (char *)&range_mark, 1);
3122 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3129 t = uvuni_to_utf8(tmpbuf,nextmin);
3130 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3132 U8 range_mark = UTF_TO_NATIVE(0xff);
3133 sv_catpvn(transv, (char *)&range_mark, 1);
3135 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
3136 UNICODE_ALLOW_SUPER);
3137 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3138 t = (const U8*)SvPVX_const(transv);
3139 tlen = SvCUR(transv);
3143 else if (!rlen && !del) {
3144 r = t; rlen = tlen; rend = tend;
3147 if ((!rlen && !del) || t == r ||
3148 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3150 o->op_private |= OPpTRANS_IDENTICAL;
3154 while (t < tend || tfirst <= tlast) {
3155 /* see if we need more "t" chars */
3156 if (tfirst > tlast) {
3157 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3159 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3161 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3168 /* now see if we need more "r" chars */
3169 if (rfirst > rlast) {
3171 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3173 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3175 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3184 rfirst = rlast = 0xffffffff;
3188 /* now see which range will peter our first, if either. */
3189 tdiff = tlast - tfirst;
3190 rdiff = rlast - rfirst;
3197 if (rfirst == 0xffffffff) {
3198 diff = tdiff; /* oops, pretend rdiff is infinite */
3200 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3201 (long)tfirst, (long)tlast);
3203 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3207 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3208 (long)tfirst, (long)(tfirst + diff),
3211 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3212 (long)tfirst, (long)rfirst);
3214 if (rfirst + diff > max)
3215 max = rfirst + diff;
3217 grows = (tfirst < rfirst &&
3218 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3230 else if (max > 0xff)
3235 PerlMemShared_free(cPVOPo->op_pv);
3236 cPVOPo->op_pv = NULL;
3238 swash = (SV*)swash_init("utf8", "", listsv, bits, none);
3240 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3241 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3242 PAD_SETSV(cPADOPo->op_padix, swash);
3245 cSVOPo->op_sv = swash;
3247 SvREFCNT_dec(listsv);
3248 SvREFCNT_dec(transv);
3250 if (!del && havefinal && rlen)
3251 (void)hv_store((HV*)SvRV(swash), "FINAL", 5,
3252 newSVuv((UV)final), 0);
3255 o->op_private |= OPpTRANS_GROWS;
3261 op_getmad(expr,o,'e');
3262 op_getmad(repl,o,'r');
3270 tbl = (short*)cPVOPo->op_pv;
3272 Zero(tbl, 256, short);
3273 for (i = 0; i < (I32)tlen; i++)
3275 for (i = 0, j = 0; i < 256; i++) {
3277 if (j >= (I32)rlen) {
3286 if (i < 128 && r[j] >= 128)
3296 o->op_private |= OPpTRANS_IDENTICAL;
3298 else if (j >= (I32)rlen)
3303 PerlMemShared_realloc(tbl,
3304 (0x101+rlen-j) * sizeof(short));
3305 cPVOPo->op_pv = (char*)tbl;
3307 tbl[0x100] = (short)(rlen - j);
3308 for (i=0; i < (I32)rlen - j; i++)
3309 tbl[0x101+i] = r[j+i];
3313 if (!rlen && !del) {
3316 o->op_private |= OPpTRANS_IDENTICAL;
3318 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3319 o->op_private |= OPpTRANS_IDENTICAL;
3321 for (i = 0; i < 256; i++)
3323 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3324 if (j >= (I32)rlen) {
3326 if (tbl[t[i]] == -1)
3332 if (tbl[t[i]] == -1) {
3333 if (t[i] < 128 && r[j] >= 128)
3340 o->op_private |= OPpTRANS_GROWS;
3342 op_getmad(expr,o,'e');
3343 op_getmad(repl,o,'r');
3353 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3358 NewOp(1101, pmop, 1, PMOP);
3359 pmop->op_type = (OPCODE)type;
3360 pmop->op_ppaddr = PL_ppaddr[type];
3361 pmop->op_flags = (U8)flags;
3362 pmop->op_private = (U8)(0 | (flags >> 8));
3364 if (PL_hints & HINT_RE_TAINT)
3365 pmop->op_pmflags |= PMf_RETAINT;
3366 if (PL_hints & HINT_LOCALE)
3367 pmop->op_pmflags |= PMf_LOCALE;
3371 if (av_len((AV*) PL_regex_pad[0]) > -1) {
3372 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
3373 pmop->op_pmoffset = SvIV(repointer);
3374 SvREPADTMP_off(repointer);
3375 sv_setiv(repointer,0);
3377 SV * const repointer = newSViv(0);
3378 av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
3379 pmop->op_pmoffset = av_len(PL_regex_padav);
3380 PL_regex_pad = AvARRAY(PL_regex_padav);
3384 return CHECKOP(type, pmop);
3387 /* Given some sort of match op o, and an expression expr containing a
3388 * pattern, either compile expr into a regex and attach it to o (if it's
3389 * constant), or convert expr into a runtime regcomp op sequence (if it's
3392 * isreg indicates that the pattern is part of a regex construct, eg
3393 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3394 * split "pattern", which aren't. In the former case, expr will be a list
3395 * if the pattern contains more than one term (eg /a$b/) or if it contains
3396 * a replacement, ie s/// or tr///.
3400 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3405 I32 repl_has_vars = 0;
3409 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3410 /* last element in list is the replacement; pop it */
3412 repl = cLISTOPx(expr)->op_last;
3413 kid = cLISTOPx(expr)->op_first;
3414 while (kid->op_sibling != repl)
3415 kid = kid->op_sibling;
3416 kid->op_sibling = NULL;
3417 cLISTOPx(expr)->op_last = kid;
3420 if (isreg && expr->op_type == OP_LIST &&
3421 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3423 /* convert single element list to element */
3424 OP* const oe = expr;
3425 expr = cLISTOPx(oe)->op_first->op_sibling;
3426 cLISTOPx(oe)->op_first->op_sibling = NULL;
3427 cLISTOPx(oe)->op_last = NULL;
3431 if (o->op_type == OP_TRANS) {
3432 return pmtrans(o, expr, repl);
3435 reglist = isreg && expr->op_type == OP_LIST;
3439 PL_hints |= HINT_BLOCK_SCOPE;
3442 if (expr->op_type == OP_CONST) {
3443 SV *pat = ((SVOP*)expr)->op_sv;
3444 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
3446 if (o->op_flags & OPf_SPECIAL)
3447 pm_flags |= RXf_SPLIT;
3450 assert (SvUTF8(pat));
3451 } else if (SvUTF8(pat)) {
3452 /* Not doing UTF-8, despite what the SV says. Is this only if we're
3453 trapped in use 'bytes'? */
3454 /* Make a copy of the octet sequence, but without the flag on, as
3455 the compiler now honours the SvUTF8 flag on pat. */
3457 const char *const p = SvPV(pat, len);
3458 pat = newSVpvn_flags(p, len, SVs_TEMP);
3461 PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
3464 op_getmad(expr,(OP*)pm,'e');
3470 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3471 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3473 : OP_REGCMAYBE),0,expr);
3475 NewOp(1101, rcop, 1, LOGOP);
3476 rcop->op_type = OP_REGCOMP;
3477 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3478 rcop->op_first = scalar(expr);
3479 rcop->op_flags |= OPf_KIDS
3480 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3481 | (reglist ? OPf_STACKED : 0);
3482 rcop->op_private = 1;
3485 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3487 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3490 /* establish postfix order */
3491 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3493 rcop->op_next = expr;
3494 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3497 rcop->op_next = LINKLIST(expr);
3498 expr->op_next = (OP*)rcop;
3501 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3506 if (pm->op_pmflags & PMf_EVAL) {
3508 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
3509 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
3511 else if (repl->op_type == OP_CONST)
3515 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3516 if (curop->op_type == OP_SCOPE
3517 || curop->op_type == OP_LEAVE
3518 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3519 if (curop->op_type == OP_GV) {
3520 GV * const gv = cGVOPx_gv(curop);
3522 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3525 else if (curop->op_type == OP_RV2CV)
3527 else if (curop->op_type == OP_RV2SV ||
3528 curop->op_type == OP_RV2AV ||
3529 curop->op_type == OP_RV2HV ||
3530 curop->op_type == OP_RV2GV) {
3531 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3534 else if (curop->op_type == OP_PADSV ||
3535 curop->op_type == OP_PADAV ||
3536 curop->op_type == OP_PADHV ||
3537 curop->op_type == OP_PADANY)
3541 else if (curop->op_type == OP_PUSHRE)
3542 NOOP; /* Okay here, dangerous in newASSIGNOP */
3552 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
3554 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3555 prepend_elem(o->op_type, scalar(repl), o);
3558 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3559 pm->op_pmflags |= PMf_MAYBE_CONST;
3561 NewOp(1101, rcop, 1, LOGOP);
3562 rcop->op_type = OP_SUBSTCONT;
3563 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3564 rcop->op_first = scalar(repl);
3565 rcop->op_flags |= OPf_KIDS;
3566 rcop->op_private = 1;
3569 /* establish postfix order */
3570 rcop->op_next = LINKLIST(repl);
3571 repl->op_next = (OP*)rcop;
3573 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
3574 assert(!(pm->op_pmflags & PMf_ONCE));
3575 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
3584 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3588 NewOp(1101, svop, 1, SVOP);
3589 svop->op_type = (OPCODE)type;
3590 svop->op_ppaddr = PL_ppaddr[type];
3592 svop->op_next = (OP*)svop;
3593 svop->op_flags = (U8)flags;
3594 if (PL_opargs[type] & OA_RETSCALAR)
3596 if (PL_opargs[type] & OA_TARGET)
3597 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3598 return CHECKOP(type, svop);
3603 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3607 NewOp(1101, padop, 1, PADOP);
3608 padop->op_type = (OPCODE)type;
3609 padop->op_ppaddr = PL_ppaddr[type];
3610 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3611 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3612 PAD_SETSV(padop->op_padix, sv);
3615 padop->op_next = (OP*)padop;
3616 padop->op_flags = (U8)flags;
3617 if (PL_opargs[type] & OA_RETSCALAR)
3619 if (PL_opargs[type] & OA_TARGET)
3620 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3621 return CHECKOP(type, padop);
3626 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3632 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3634 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3639 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3643 NewOp(1101, pvop, 1, PVOP);
3644 pvop->op_type = (OPCODE)type;
3645 pvop->op_ppaddr = PL_ppaddr[type];
3647 pvop->op_next = (OP*)pvop;
3648 pvop->op_flags = (U8)flags;
3649 if (PL_opargs[type] & OA_RETSCALAR)
3651 if (PL_opargs[type] & OA_TARGET)
3652 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3653 return CHECKOP(type, pvop);
3661 Perl_package(pTHX_ OP *o)
3664 SV *const sv = cSVOPo->op_sv;
3669 save_hptr(&PL_curstash);
3670 save_item(PL_curstname);
3672 PL_curstash = gv_stashsv(sv, GV_ADD);
3674 sv_setsv(PL_curstname, sv);
3676 PL_hints |= HINT_BLOCK_SCOPE;
3677 PL_parser->copline = NOLINE;
3678 PL_parser->expect = XSTATE;
3683 if (!PL_madskills) {
3688 pegop = newOP(OP_NULL,0);
3689 op_getmad(o,pegop,'P');
3699 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3706 OP *pegop = newOP(OP_NULL,0);
3709 if (idop->op_type != OP_CONST)
3710 Perl_croak(aTHX_ "Module name must be constant");
3713 op_getmad(idop,pegop,'U');
3718 SV * const vesv = ((SVOP*)version)->op_sv;
3721 op_getmad(version,pegop,'V');
3722 if (!arg && !SvNIOKp(vesv)) {
3729 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3730 Perl_croak(aTHX_ "Version number must be constant number");
3732 /* Make copy of idop so we don't free it twice */
3733 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3735 /* Fake up a method call to VERSION */
3736 meth = newSVpvs_share("VERSION");
3737 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3738 append_elem(OP_LIST,
3739 prepend_elem(OP_LIST, pack, list(version)),
3740 newSVOP(OP_METHOD_NAMED, 0, meth)));
3744 /* Fake up an import/unimport */
3745 if (arg && arg->op_type == OP_STUB) {
3747 op_getmad(arg,pegop,'S');
3748 imop = arg; /* no import on explicit () */
3750 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3751 imop = NULL; /* use 5.0; */
3753 idop->op_private |= OPpCONST_NOVER;
3759 op_getmad(arg,pegop,'A');
3761 /* Make copy of idop so we don't free it twice */
3762 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3764 /* Fake up a method call to import/unimport */
3766 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3767 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3768 append_elem(OP_LIST,
3769 prepend_elem(OP_LIST, pack, list(arg)),
3770 newSVOP(OP_METHOD_NAMED, 0, meth)));
3773 /* Fake up the BEGIN {}, which does its thing immediately. */
3775 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3778 append_elem(OP_LINESEQ,
3779 append_elem(OP_LINESEQ,
3780 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3781 newSTATEOP(0, NULL, veop)),
3782 newSTATEOP(0, NULL, imop) ));
3784 /* The "did you use incorrect case?" warning used to be here.
3785 * The problem is that on case-insensitive filesystems one
3786 * might get false positives for "use" (and "require"):
3787 * "use Strict" or "require CARP" will work. This causes
3788 * portability problems for the script: in case-strict
3789 * filesystems the script will stop working.
3791 * The "incorrect case" warning checked whether "use Foo"
3792 * imported "Foo" to your namespace, but that is wrong, too:
3793 * there is no requirement nor promise in the language that
3794 * a Foo.pm should or would contain anything in package "Foo".
3796 * There is very little Configure-wise that can be done, either:
3797 * the case-sensitivity of the build filesystem of Perl does not
3798 * help in guessing the case-sensitivity of the runtime environment.
3801 PL_hints |= HINT_BLOCK_SCOPE;
3802 PL_parser->copline = NOLINE;
3803 PL_parser->expect = XSTATE;
3804 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3807 if (!PL_madskills) {
3808 /* FIXME - don't allocate pegop if !PL_madskills */
3817 =head1 Embedding Functions
3819 =for apidoc load_module
3821 Loads the module whose name is pointed to by the string part of name.
3822 Note that the actual module name, not its filename, should be given.
3823 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3824 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3825 (or 0 for no flags). ver, if specified, provides version semantics
3826 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3827 arguments can be used to specify arguments to the module's import()
3828 method, similar to C<use Foo::Bar VERSION LIST>.
3833 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3836 va_start(args, ver);
3837 vload_module(flags, name, ver, &args);
3841 #ifdef PERL_IMPLICIT_CONTEXT
3843 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3847 va_start(args, ver);
3848 vload_module(flags, name, ver, &args);
3854 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3859 OP * const modname = newSVOP(OP_CONST, 0, name);
3860 modname->op_private |= OPpCONST_BARE;
3862 veop = newSVOP(OP_CONST, 0, ver);
3866 if (flags & PERL_LOADMOD_NOIMPORT) {
3867 imop = sawparens(newNULLLIST());
3869 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3870 imop = va_arg(*args, OP*);
3875 sv = va_arg(*args, SV*);
3877 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3878 sv = va_arg(*args, SV*);
3882 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
3883 * that it has a PL_parser to play with while doing that, and also
3884 * that it doesn't mess with any existing parser, by creating a tmp
3885 * new parser with lex_start(). This won't actually be used for much,
3886 * since pp_require() will create another parser for the real work. */
3889 SAVEVPTR(PL_curcop);
3890 lex_start(NULL, NULL, FALSE);
3891 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3892 veop, modname, imop);
3897 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3903 if (!force_builtin) {
3904 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3905 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3906 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3907 gv = gvp ? *gvp : NULL;
3911 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3912 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3913 append_elem(OP_LIST, term,
3914 scalar(newUNOP(OP_RV2CV, 0,
3915 newGVOP(OP_GV, 0, gv))))));
3918 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3924 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3926 return newBINOP(OP_LSLICE, flags,
3927 list(force_list(subscript)),
3928 list(force_list(listval)) );
3932 S_is_list_assignment(pTHX_ register const OP *o)
3940 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
3941 o = cUNOPo->op_first;
3943 flags = o->op_flags;
3945 if (type == OP_COND_EXPR) {
3946 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3947 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3952 yyerror("Assignment to both a list and a scalar");
3956 if (type == OP_LIST &&
3957 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
3958 o->op_private & OPpLVAL_INTRO)
3961 if (type == OP_LIST || flags & OPf_PARENS ||
3962 type == OP_RV2AV || type == OP_RV2HV ||
3963 type == OP_ASLICE || type == OP_HSLICE)
3966 if (type == OP_PADAV || type == OP_PADHV)
3969 if (type == OP_RV2SV)
3976 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3982 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3983 return newLOGOP(optype, 0,
3984 mod(scalar(left), optype),
3985 newUNOP(OP_SASSIGN, 0, scalar(right)));
3988 return newBINOP(optype, OPf_STACKED,
3989 mod(scalar(left), optype), scalar(right));
3993 if (is_list_assignment(left)) {
3994 static const char no_list_state[] = "Initialization of state variables"
3995 " in list context currently forbidden";
3999 /* Grandfathering $[ assignment here. Bletch.*/
4000 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
4001 PL_eval_start = (left->op_type == OP_CONST) ? right : NULL;
4002 left = mod(left, OP_AASSIGN);
4005 else if (left->op_type == OP_CONST) {
4007 /* Result of assignment is always 1 (or we'd be dead already) */
4008 return newSVOP(OP_CONST, 0, newSViv(1));
4010 curop = list(force_list(left));
4011 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
4012 o->op_private = (U8)(0 | (flags >> 8));
4014 /* PL_generation sorcery:
4015 * an assignment like ($a,$b) = ($c,$d) is easier than
4016 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
4017 * To detect whether there are common vars, the global var
4018 * PL_generation is incremented for each assign op we compile.
4019 * Then, while compiling the assign op, we run through all the
4020 * variables on both sides of the assignment, setting a spare slot
4021 * in each of them to PL_generation. If any of them already have
4022 * that value, we know we've got commonality. We could use a
4023 * single bit marker, but then we'd have to make 2 passes, first
4024 * to clear the flag, then to test and set it. To find somewhere
4025 * to store these values, evil chicanery is done with SvUVX().
4031 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4032 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4033 if (curop->op_type == OP_GV) {
4034 GV *gv = cGVOPx_gv(curop);
4036 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4038 GvASSIGN_GENERATION_set(gv, PL_generation);
4040 else if (curop->op_type == OP_PADSV ||
4041 curop->op_type == OP_PADAV ||
4042 curop->op_type == OP_PADHV ||
4043 curop->op_type == OP_PADANY)
4045 if (PAD_COMPNAME_GEN(curop->op_targ)
4046 == (STRLEN)PL_generation)
4048 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4051 else if (curop->op_type == OP_RV2CV)
4053 else if (curop->op_type == OP_RV2SV ||
4054 curop->op_type == OP_RV2AV ||
4055 curop->op_type == OP_RV2HV ||
4056 curop->op_type == OP_RV2GV) {
4057 if (lastop->op_type != OP_GV) /* funny deref? */
4060 else if (curop->op_type == OP_PUSHRE) {
4062 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4063 GV *const gv = (GV*)PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff);
4065 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4067 GvASSIGN_GENERATION_set(gv, PL_generation);
4071 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4074 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4076 GvASSIGN_GENERATION_set(gv, PL_generation);
4086 o->op_private |= OPpASSIGN_COMMON;
4089 if ((left->op_type == OP_LIST
4090 || (left->op_type == OP_NULL && left->op_targ == OP_LIST))) {
4091 OP* lop = ((LISTOP*)left)->op_first;
4093 if (lop->op_type == OP_PADSV ||
4094 lop->op_type == OP_PADAV ||
4095 lop->op_type == OP_PADHV ||
4096 lop->op_type == OP_PADANY) {
4097 if (lop->op_private & OPpPAD_STATE) {
4098 if (left->op_private & OPpLVAL_INTRO) {
4099 /* Each variable in state($a, $b, $c) = ... */
4102 /* Each state variable in
4103 (state $a, my $b, our $c, $d, undef) = ... */
4105 yyerror(no_list_state);
4107 /* Each my variable in
4108 (state $a, my $b, our $c, $d, undef) = ... */
4111 /* Other ops in the list. undef may be interesting in
4112 (state $a, undef, state $c) */
4114 lop = lop->op_sibling;
4117 else if (((left->op_private & (OPpLVAL_INTRO | OPpPAD_STATE))
4118 == (OPpLVAL_INTRO | OPpPAD_STATE))
4119 && ( left->op_type == OP_PADSV
4120 || left->op_type == OP_PADAV
4121 || left->op_type == OP_PADHV
4122 || left->op_type == OP_PADANY))
4124 /* All single variable list context state assignments, hence
4134 yyerror(no_list_state);
4137 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
4138 OP* tmpop = ((LISTOP*)right)->op_first;
4139 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4140 PMOP * const pm = (PMOP*)tmpop;
4141 if (left->op_type == OP_RV2AV &&
4142 !(left->op_private & OPpLVAL_INTRO) &&
4143 !(o->op_private & OPpASSIGN_COMMON) )
4145 tmpop = ((UNOP*)left)->op_first;
4146 if (tmpop->op_type == OP_GV
4148 && !pm->op_pmreplrootu.op_pmtargetoff
4150 && !pm->op_pmreplrootu.op_pmtargetgv
4154 pm->op_pmreplrootu.op_pmtargetoff
4155 = cPADOPx(tmpop)->op_padix;
4156 cPADOPx(tmpop)->op_padix = 0; /* steal it */
4158 pm->op_pmreplrootu.op_pmtargetgv
4159 = (GV*)cSVOPx(tmpop)->op_sv;
4160 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
4162 pm->op_pmflags |= PMf_ONCE;
4163 tmpop = cUNOPo->op_first; /* to list (nulled) */
4164 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4165 tmpop->op_sibling = NULL; /* don't free split */
4166 right->op_next = tmpop->op_next; /* fix starting loc */
4167 op_free(o); /* blow off assign */
4168 right->op_flags &= ~OPf_WANT;
4169 /* "I don't know and I don't care." */
4174 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4175 ((LISTOP*)right)->op_last->op_type == OP_CONST)
4177 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4179 sv_setiv(sv, PL_modcount+1);
4187 right = newOP(OP_UNDEF, 0);
4188 if (right->op_type == OP_READLINE) {
4189 right->op_flags |= OPf_STACKED;
4190 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
4193 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
4194 o = newBINOP(OP_SASSIGN, flags,
4195 scalar(right), mod(scalar(left), OP_SASSIGN) );
4201 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4202 o->op_private |= OPpCONST_ARYBASE;
4209 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4212 const U32 seq = intro_my();
4215 NewOp(1101, cop, 1, COP);
4216 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4217 cop->op_type = OP_DBSTATE;
4218 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4221 cop->op_type = OP_NEXTSTATE;
4222 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4224 cop->op_flags = (U8)flags;
4225 CopHINTS_set(cop, PL_hints);
4227 cop->op_private |= NATIVE_HINTS;
4229 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4230 cop->op_next = (OP*)cop;
4233 CopLABEL_set(cop, label);
4234 PL_hints |= HINT_BLOCK_SCOPE;
4237 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4238 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4240 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4241 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4242 if (cop->cop_hints_hash) {
4244 cop->cop_hints_hash->refcounted_he_refcnt++;
4245 HINTS_REFCNT_UNLOCK;
4248 if (PL_parser && PL_parser->copline == NOLINE)
4249 CopLINE_set(cop, CopLINE(PL_curcop));
4251 CopLINE_set(cop, PL_parser->copline);
4253 PL_parser->copline = NOLINE;
4256 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4258 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4260 CopSTASH_set(cop, PL_curstash);
4262 if (PERLDB_LINE && PL_curstash != PL_debstash) {
4263 AV *av = CopFILEAVx(PL_curcop);
4265 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4266 if (svp && *svp != &PL_sv_undef ) {
4267 (void)SvIOK_on(*svp);
4268 SvIV_set(*svp, PTR2IV(cop));
4273 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4278 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4281 return new_logop(type, flags, &first, &other);
4285 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4290 OP *first = *firstp;
4291 OP * const other = *otherp;
4293 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4294 return newBINOP(type, flags, scalar(first), scalar(other));
4296 scalarboolean(first);
4297 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
4298 if (first->op_type == OP_NOT
4299 && (first->op_flags & OPf_SPECIAL)
4300 && (first->op_flags & OPf_KIDS)
4302 if (type == OP_AND || type == OP_OR) {
4308 first = *firstp = cUNOPo->op_first;
4310 first->op_next = o->op_next;
4311 cUNOPo->op_first = NULL;
4315 if (first->op_type == OP_CONST) {
4316 if (first->op_private & OPpCONST_STRICT)
4317 no_bareword_allowed(first);
4318 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
4319 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4320 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
4321 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
4322 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
4324 if (other->op_type == OP_CONST)
4325 other->op_private |= OPpCONST_SHORTCIRCUIT;
4327 OP *newop = newUNOP(OP_NULL, 0, other);
4328 op_getmad(first, newop, '1');
4329 newop->op_targ = type; /* set "was" field */
4336 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4337 const OP *o2 = other;
4338 if ( ! (o2->op_type == OP_LIST
4339 && (( o2 = cUNOPx(o2)->op_first))
4340 && o2->op_type == OP_PUSHMARK
4341 && (( o2 = o2->op_sibling)) )
4344 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4345 || o2->op_type == OP_PADHV)
4346 && o2->op_private & OPpLVAL_INTRO
4347 && !(o2->op_private & OPpPAD_STATE)
4348 && ckWARN(WARN_DEPRECATED))
4350 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4351 "Deprecated use of my() in false conditional");
4355 if (first->op_type == OP_CONST)
4356 first->op_private |= OPpCONST_SHORTCIRCUIT;
4358 first = newUNOP(OP_NULL, 0, first);
4359 op_getmad(other, first, '2');
4360 first->op_targ = type; /* set "was" field */
4367 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4368 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4370 const OP * const k1 = ((UNOP*)first)->op_first;
4371 const OP * const k2 = k1->op_sibling;
4373 switch (first->op_type)
4376 if (k2 && k2->op_type == OP_READLINE
4377 && (k2->op_flags & OPf_STACKED)
4378 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4380 warnop = k2->op_type;
4385 if (k1->op_type == OP_READDIR
4386 || k1->op_type == OP_GLOB
4387 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4388 || k1->op_type == OP_EACH)
4390 warnop = ((k1->op_type == OP_NULL)
4391 ? (OPCODE)k1->op_targ : k1->op_type);
4396 const line_t oldline = CopLINE(PL_curcop);
4397 CopLINE_set(PL_curcop, PL_parser->copline);
4398 Perl_warner(aTHX_ packWARN(WARN_MISC),
4399 "Value of %s%s can be \"0\"; test with defined()",
4401 ((warnop == OP_READLINE || warnop == OP_GLOB)
4402 ? " construct" : "() operator"));
4403 CopLINE_set(PL_curcop, oldline);
4410 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4411 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4413 NewOp(1101, logop, 1, LOGOP);
4415 logop->op_type = (OPCODE)type;
4416 logop->op_ppaddr = PL_ppaddr[type];
4417 logop->op_first = first;
4418 logop->op_flags = (U8)(flags | OPf_KIDS);
4419 logop->op_other = LINKLIST(other);
4420 logop->op_private = (U8)(1 | (flags >> 8));
4422 /* establish postfix order */
4423 logop->op_next = LINKLIST(first);
4424 first->op_next = (OP*)logop;
4425 first->op_sibling = other;
4427 CHECKOP(type,logop);
4429 o = newUNOP(OP_NULL, 0, (OP*)logop);
4436 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4444 return newLOGOP(OP_AND, 0, first, trueop);
4446 return newLOGOP(OP_OR, 0, first, falseop);
4448 scalarboolean(first);
4449 if (first->op_type == OP_CONST) {
4450 /* Left or right arm of the conditional? */
4451 const bool left = SvTRUE(((SVOP*)first)->op_sv);
4452 OP *live = left ? trueop : falseop;
4453 OP *const dead = left ? falseop : trueop;
4454 if (first->op_private & OPpCONST_BARE &&
4455 first->op_private & OPpCONST_STRICT) {
4456 no_bareword_allowed(first);
4459 /* This is all dead code when PERL_MAD is not defined. */
4460 live = newUNOP(OP_NULL, 0, live);
4461 op_getmad(first, live, 'C');
4462 op_getmad(dead, live, left ? 'e' : 't');
4469 NewOp(1101, logop, 1, LOGOP);
4470 logop->op_type = OP_COND_EXPR;
4471 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4472 logop->op_first = first;
4473 logop->op_flags = (U8)(flags | OPf_KIDS);
4474 logop->op_private = (U8)(1 | (flags >> 8));
4475 logop->op_other = LINKLIST(trueop);
4476 logop->op_next = LINKLIST(falseop);
4478 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4481 /* establish postfix order */
4482 start = LINKLIST(first);
4483 first->op_next = (OP*)logop;
4485 first->op_sibling = trueop;
4486 trueop->op_sibling = falseop;
4487 o = newUNOP(OP_NULL, 0, (OP*)logop);
4489 trueop->op_next = falseop->op_next = o;
4496 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4505 NewOp(1101, range, 1, LOGOP);
4507 range->op_type = OP_RANGE;
4508 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4509 range->op_first = left;
4510 range->op_flags = OPf_KIDS;
4511 leftstart = LINKLIST(left);
4512 range->op_other = LINKLIST(right);
4513 range->op_private = (U8)(1 | (flags >> 8));
4515 left->op_sibling = right;
4517 range->op_next = (OP*)range;
4518 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4519 flop = newUNOP(OP_FLOP, 0, flip);
4520 o = newUNOP(OP_NULL, 0, flop);
4522 range->op_next = leftstart;
4524 left->op_next = flip;
4525 right->op_next = flop;
4527 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4528 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4529 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4530 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4532 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4533 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4536 if (!flip->op_private || !flop->op_private)
4537 linklist(o); /* blow off optimizer unless constant */
4543 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4548 const bool once = block && block->op_flags & OPf_SPECIAL &&
4549 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4551 PERL_UNUSED_ARG(debuggable);
4554 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4555 return block; /* do {} while 0 does once */
4556 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4557 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4558 expr = newUNOP(OP_DEFINED, 0,
4559 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4560 } else if (expr->op_flags & OPf_KIDS) {
4561 const OP * const k1 = ((UNOP*)expr)->op_first;
4562 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4563 switch (expr->op_type) {
4565 if (k2 && k2->op_type == OP_READLINE
4566 && (k2->op_flags & OPf_STACKED)
4567 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4568 expr = newUNOP(OP_DEFINED, 0, expr);
4572 if (k1 && (k1->op_type == OP_READDIR
4573 || k1->op_type == OP_GLOB
4574 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4575 || k1->op_type == OP_EACH))
4576 expr = newUNOP(OP_DEFINED, 0, expr);
4582 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4583 * op, in listop. This is wrong. [perl #27024] */
4585 block = newOP(OP_NULL, 0);
4586 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4587 o = new_logop(OP_AND, 0, &expr, &listop);
4590 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4592 if (once && o != listop)
4593 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4596 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4598 o->op_flags |= flags;
4600 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4605 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4606 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4615 PERL_UNUSED_ARG(debuggable);
4618 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4619 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4620 expr = newUNOP(OP_DEFINED, 0,
4621 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4622 } else if (expr->op_flags & OPf_KIDS) {
4623 const OP * const k1 = ((UNOP*)expr)->op_first;
4624 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4625 switch (expr->op_type) {
4627 if (k2 && k2->op_type == OP_READLINE
4628 && (k2->op_flags & OPf_STACKED)
4629 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4630 expr = newUNOP(OP_DEFINED, 0, expr);
4634 if (k1 && (k1->op_type == OP_READDIR
4635 || k1->op_type == OP_GLOB
4636 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4637 || k1->op_type == OP_EACH))
4638 expr = newUNOP(OP_DEFINED, 0, expr);
4645 block = newOP(OP_NULL, 0);
4646 else if (cont || has_my) {
4647 block = scope(block);
4651 next = LINKLIST(cont);
4654 OP * const unstack = newOP(OP_UNSTACK, 0);
4657 cont = append_elem(OP_LINESEQ, cont, unstack);
4661 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4663 redo = LINKLIST(listop);
4666 PL_parser->copline = (line_t)whileline;
4668 o = new_logop(OP_AND, 0, &expr, &listop);
4669 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4670 op_free(expr); /* oops, it's a while (0) */
4672 return NULL; /* listop already freed by new_logop */
4675 ((LISTOP*)listop)->op_last->op_next =
4676 (o == listop ? redo : LINKLIST(o));
4682 NewOp(1101,loop,1,LOOP);
4683 loop->op_type = OP_ENTERLOOP;
4684 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4685 loop->op_private = 0;
4686 loop->op_next = (OP*)loop;
4689 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
4691 loop->op_redoop = redo;
4692 loop->op_lastop = o;
4693 o->op_private |= loopflags;
4696 loop->op_nextop = next;
4698 loop->op_nextop = o;
4700 o->op_flags |= flags;
4701 o->op_private |= (flags >> 8);
4706 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
4711 PADOFFSET padoff = 0;
4717 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
4718 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
4719 sv->op_type = OP_RV2GV;
4720 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
4722 /* The op_type check is needed to prevent a possible segfault
4723 * if the loop variable is undeclared and 'strict vars' is in
4724 * effect. This is illegal but is nonetheless parsed, so we
4725 * may reach this point with an OP_CONST where we're expecting
4728 if (cUNOPx(sv)->op_first->op_type == OP_GV
4729 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
4730 iterpflags |= OPpITER_DEF;
4732 else if (sv->op_type == OP_PADSV) { /* private variable */
4733 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
4734 padoff = sv->op_targ;
4744 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
4746 SV *const namesv = PAD_COMPNAME_SV(padoff);
4748 const char *const name = SvPV_const(namesv, len);
4750 if (len == 2 && name[0] == '$' && name[1] == '_')
4751 iterpflags |= OPpITER_DEF;
4755 const PADOFFSET offset = pad_findmy("$_");
4756 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
4757 sv = newGVOP(OP_GV, 0, PL_defgv);
4762 iterpflags |= OPpITER_DEF;
4764 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
4765 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4766 iterflags |= OPf_STACKED;
4768 else if (expr->op_type == OP_NULL &&
4769 (expr->op_flags & OPf_KIDS) &&
4770 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4772 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4773 * set the STACKED flag to indicate that these values are to be
4774 * treated as min/max values by 'pp_iterinit'.
4776 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4777 LOGOP* const range = (LOGOP*) flip->op_first;
4778 OP* const left = range->op_first;
4779 OP* const right = left->op_sibling;
4782 range->op_flags &= ~OPf_KIDS;
4783 range->op_first = NULL;
4785 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4786 listop->op_first->op_next = range->op_next;
4787 left->op_next = range->op_other;
4788 right->op_next = (OP*)listop;
4789 listop->op_next = listop->op_first;
4792 op_getmad(expr,(OP*)listop,'O');
4796 expr = (OP*)(listop);
4798 iterflags |= OPf_STACKED;
4801 expr = mod(force_list(expr), OP_GREPSTART);
4804 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4805 append_elem(OP_LIST, expr, scalar(sv))));
4806 assert(!loop->op_next);
4807 /* for my $x () sets OPpLVAL_INTRO;
4808 * for our $x () sets OPpOUR_INTRO */
4809 loop->op_private = (U8)iterpflags;
4810 #ifdef PL_OP_SLAB_ALLOC
4813 NewOp(1234,tmp,1,LOOP);
4814 Copy(loop,tmp,1,LISTOP);
4815 S_op_destroy(aTHX_ (OP*)loop);
4819 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
4821 loop->op_targ = padoff;
4822 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4824 op_getmad(madsv, (OP*)loop, 'v');
4825 PL_parser->copline = forline;
4826 return newSTATEOP(0, label, wop);
4830 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4835 if (type != OP_GOTO || label->op_type == OP_CONST) {
4836 /* "last()" means "last" */
4837 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4838 o = newOP(type, OPf_SPECIAL);
4840 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
4841 ? SvPV_nolen_const(((SVOP*)label)->op_sv)
4845 op_getmad(label,o,'L');
4851 /* Check whether it's going to be a goto &function */
4852 if (label->op_type == OP_ENTERSUB
4853 && !(label->op_flags & OPf_STACKED))
4854 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4855 o = newUNOP(type, OPf_STACKED, label);
4857 PL_hints |= HINT_BLOCK_SCOPE;
4861 /* if the condition is a literal array or hash
4862 (or @{ ... } etc), make a reference to it.
4865 S_ref_array_or_hash(pTHX_ OP *cond)
4868 && (cond->op_type == OP_RV2AV
4869 || cond->op_type == OP_PADAV
4870 || cond->op_type == OP_RV2HV
4871 || cond->op_type == OP_PADHV))
4873 return newUNOP(OP_REFGEN,
4874 0, mod(cond, OP_REFGEN));
4880 /* These construct the optree fragments representing given()
4883 entergiven and enterwhen are LOGOPs; the op_other pointer
4884 points up to the associated leave op. We need this so we
4885 can put it in the context and make break/continue work.
4886 (Also, of course, pp_enterwhen will jump straight to
4887 op_other if the match fails.)
4891 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4892 I32 enter_opcode, I32 leave_opcode,
4893 PADOFFSET entertarg)
4899 NewOp(1101, enterop, 1, LOGOP);
4900 enterop->op_type = enter_opcode;
4901 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4902 enterop->op_flags = (U8) OPf_KIDS;
4903 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4904 enterop->op_private = 0;
4906 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4909 enterop->op_first = scalar(cond);
4910 cond->op_sibling = block;
4912 o->op_next = LINKLIST(cond);
4913 cond->op_next = (OP *) enterop;
4916 /* This is a default {} block */
4917 enterop->op_first = block;
4918 enterop->op_flags |= OPf_SPECIAL;
4920 o->op_next = (OP *) enterop;
4923 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4924 entergiven and enterwhen both
4927 enterop->op_next = LINKLIST(block);
4928 block->op_next = enterop->op_other = o;
4933 /* Does this look like a boolean operation? For these purposes
4934 a boolean operation is:
4935 - a subroutine call [*]
4936 - a logical connective
4937 - a comparison operator
4938 - a filetest operator, with the exception of -s -M -A -C
4939 - defined(), exists() or eof()
4940 - /$re/ or $foo =~ /$re/
4942 [*] possibly surprising
4945 S_looks_like_bool(pTHX_ const OP *o)
4948 switch(o->op_type) {
4950 return looks_like_bool(cLOGOPo->op_first);
4954 looks_like_bool(cLOGOPo->op_first)
4955 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4959 o->op_flags & OPf_KIDS
4960 && looks_like_bool(cUNOPo->op_first));
4964 case OP_NOT: case OP_XOR:
4965 /* Note that OP_DOR is not here */
4967 case OP_EQ: case OP_NE: case OP_LT:
4968 case OP_GT: case OP_LE: case OP_GE:
4970 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4971 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4973 case OP_SEQ: case OP_SNE: case OP_SLT:
4974 case OP_SGT: case OP_SLE: case OP_SGE:
4978 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4979 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4980 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4981 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4982 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4983 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4984 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4985 case OP_FTTEXT: case OP_FTBINARY:
4987 case OP_DEFINED: case OP_EXISTS:
4988 case OP_MATCH: case OP_EOF:
4993 /* Detect comparisons that have been optimized away */
4994 if (cSVOPo->op_sv == &PL_sv_yes
4995 || cSVOPo->op_sv == &PL_sv_no)
5006 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
5010 return newGIVWHENOP(
5011 ref_array_or_hash(cond),
5013 OP_ENTERGIVEN, OP_LEAVEGIVEN,
5017 /* If cond is null, this is a default {} block */
5019 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
5021 const bool cond_llb = (!cond || looks_like_bool(cond));
5027 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
5029 scalar(ref_array_or_hash(cond)));
5032 return newGIVWHENOP(
5034 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
5035 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
5039 =for apidoc cv_undef
5041 Clear out all the active components of a CV. This can happen either
5042 by an explicit C<undef &foo>, or by the reference count going to zero.
5043 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
5044 children can still follow the full lexical scope chain.
5050 Perl_cv_undef(pTHX_ CV *cv)
5054 DEBUG_X(PerlIO_printf(Perl_debug_log,
5055 "CV undef: cv=0x%"UVxf" comppad=0x%"UVxf"\n",
5056 PTR2UV(cv), PTR2UV(PL_comppad))
5060 if (CvFILE(cv) && !CvISXSUB(cv)) {
5061 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
5062 Safefree(CvFILE(cv));
5067 if (!CvISXSUB(cv) && CvROOT(cv)) {
5068 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
5069 Perl_croak(aTHX_ "Can't undef active subroutine");
5072 PAD_SAVE_SETNULLPAD();
5074 op_free(CvROOT(cv));
5079 SvPOK_off((SV*)cv); /* forget prototype */
5084 /* remove CvOUTSIDE unless this is an undef rather than a free */
5085 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
5086 if (!CvWEAKOUTSIDE(cv))
5087 SvREFCNT_dec(CvOUTSIDE(cv));
5088 CvOUTSIDE(cv) = NULL;
5091 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
5094 if (CvISXSUB(cv) && CvXSUB(cv)) {
5097 /* delete all flags except WEAKOUTSIDE */
5098 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
5102 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
5105 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
5106 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
5107 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
5108 || (p && (len != SvCUR(cv) /* Not the same length. */
5109 || memNE(p, SvPVX_const(cv), len))))
5110 && ckWARN_d(WARN_PROTOTYPE)) {
5111 SV* const msg = sv_newmortal();
5115 gv_efullname3(name = sv_newmortal(), gv, NULL);
5116 sv_setpvs(msg, "Prototype mismatch:");
5118 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
5120 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
5122 sv_catpvs(msg, ": none");
5123 sv_catpvs(msg, " vs ");
5125 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
5127 sv_catpvs(msg, "none");
5128 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
5132 static void const_sv_xsub(pTHX_ CV* cv);
5136 =head1 Optree Manipulation Functions
5138 =for apidoc cv_const_sv
5140 If C<cv> is a constant sub eligible for inlining. returns the constant
5141 value returned by the sub. Otherwise, returns NULL.
5143 Constant subs can be created with C<newCONSTSUB> or as described in
5144 L<perlsub/"Constant Functions">.
5149 Perl_cv_const_sv(pTHX_ CV *cv)
5151 PERL_UNUSED_CONTEXT;
5154 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
5156 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
5159 /* op_const_sv: examine an optree to determine whether it's in-lineable.
5160 * Can be called in 3 ways:
5163 * look for a single OP_CONST with attached value: return the value
5165 * cv && CvCLONE(cv) && !CvCONST(cv)
5167 * examine the clone prototype, and if contains only a single
5168 * OP_CONST referencing a pad const, or a single PADSV referencing
5169 * an outer lexical, return a non-zero value to indicate the CV is
5170 * a candidate for "constizing" at clone time
5174 * We have just cloned an anon prototype that was marked as a const
5175 * candidiate. Try to grab the current value, and in the case of
5176 * PADSV, ignore it if it has multiple references. Return the value.
5180 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
5191 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
5192 o = cLISTOPo->op_first->op_sibling;
5194 for (; o; o = o->op_next) {
5195 const OPCODE type = o->op_type;
5197 if (sv && o->op_next == o)
5199 if (o->op_next != o) {
5200 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
5202 if (type == OP_DBSTATE)
5205 if (type == OP_LEAVESUB || type == OP_RETURN)
5209 if (type == OP_CONST && cSVOPo->op_sv)
5211 else if (cv && type == OP_CONST) {
5212 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5216 else if (cv && type == OP_PADSV) {
5217 if (CvCONST(cv)) { /* newly cloned anon */
5218 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5219 /* the candidate should have 1 ref from this pad and 1 ref
5220 * from the parent */
5221 if (!sv || SvREFCNT(sv) != 2)
5228 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
5229 sv = &PL_sv_undef; /* an arbitrary non-null value */
5244 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5247 /* This would be the return value, but the return cannot be reached. */
5248 OP* pegop = newOP(OP_NULL, 0);
5251 PERL_UNUSED_ARG(floor);
5261 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
5263 NORETURN_FUNCTION_END;
5268 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
5270 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
5274 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5281 register CV *cv = NULL;
5283 /* If the subroutine has no body, no attributes, and no builtin attributes
5284 then it's just a sub declaration, and we may be able to get away with
5285 storing with a placeholder scalar in the symbol table, rather than a
5286 full GV and CV. If anything is present then it will take a full CV to
5288 const I32 gv_fetch_flags
5289 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5291 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
5292 const char * const name = o ? SvPV_nolen_const(cSVOPo->op_sv) : NULL;
5295 assert(proto->op_type == OP_CONST);
5296 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
5301 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
5302 SV * const sv = sv_newmortal();
5303 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
5304 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
5305 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
5306 aname = SvPVX_const(sv);
5311 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
5312 : gv_fetchpv(aname ? aname
5313 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5314 gv_fetch_flags, SVt_PVCV);
5316 if (!PL_madskills) {
5325 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
5326 maximum a prototype before. */
5327 if (SvTYPE(gv) > SVt_NULL) {
5328 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
5329 && ckWARN_d(WARN_PROTOTYPE))
5331 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
5333 cv_ckproto_len((CV*)gv, NULL, ps, ps_len);
5336 sv_setpvn((SV*)gv, ps, ps_len);
5338 sv_setiv((SV*)gv, -1);
5340 SvREFCNT_dec(PL_compcv);
5341 cv = PL_compcv = NULL;
5345 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
5347 #ifdef GV_UNIQUE_CHECK
5348 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
5349 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
5353 if (!block || !ps || *ps || attrs
5354 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5356 || block->op_type == OP_NULL
5361 const_sv = op_const_sv(block, NULL);
5364 const bool exists = CvROOT(cv) || CvXSUB(cv);
5366 #ifdef GV_UNIQUE_CHECK
5367 if (exists && GvUNIQUE(gv)) {
5368 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
5372 /* if the subroutine doesn't exist and wasn't pre-declared
5373 * with a prototype, assume it will be AUTOLOADed,
5374 * skipping the prototype check
5376 if (exists || SvPOK(cv))
5377 cv_ckproto_len(cv, gv, ps, ps_len);
5378 /* already defined (or promised)? */
5379 if (exists || GvASSUMECV(gv)) {
5382 || block->op_type == OP_NULL
5385 if (CvFLAGS(PL_compcv)) {
5386 /* might have had built-in attrs applied */
5387 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5389 /* just a "sub foo;" when &foo is already defined */
5390 SAVEFREESV(PL_compcv);
5395 && block->op_type != OP_NULL
5398 if (ckWARN(WARN_REDEFINE)
5400 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
5402 const line_t oldline = CopLINE(PL_curcop);
5403 if (PL_parser && PL_parser->copline != NOLINE)
5404 CopLINE_set(PL_curcop, PL_parser->copline);
5405 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5406 CvCONST(cv) ? "Constant subroutine %s redefined"
5407 : "Subroutine %s redefined", name);
5408 CopLINE_set(PL_curcop, oldline);
5411 if (!PL_minus_c) /* keep old one around for madskills */
5414 /* (PL_madskills unset in used file.) */
5422 SvREFCNT_inc_simple_void_NN(const_sv);
5424 assert(!CvROOT(cv) && !CvCONST(cv));
5425 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
5426 CvXSUBANY(cv).any_ptr = const_sv;
5427 CvXSUB(cv) = const_sv_xsub;
5433 cv = newCONSTSUB(NULL, name, const_sv);
5435 mro_method_changed_in( /* sub Foo::Bar () { 123 } */
5436 (CvGV(cv) && GvSTASH(CvGV(cv)))
5445 SvREFCNT_dec(PL_compcv);
5453 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
5454 * before we clobber PL_compcv.
5458 || block->op_type == OP_NULL
5462 /* Might have had built-in attributes applied -- propagate them. */
5463 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5464 if (CvGV(cv) && GvSTASH(CvGV(cv)))
5465 stash = GvSTASH(CvGV(cv));
5466 else if (CvSTASH(cv))
5467 stash = CvSTASH(cv);
5469 stash = PL_curstash;
5472 /* possibly about to re-define existing subr -- ignore old cv */
5473 rcv = (SV*)PL_compcv;
5474 if (name && GvSTASH(gv))
5475 stash = GvSTASH(gv);
5477 stash = PL_curstash;
5479 apply_attrs(stash, rcv, attrs, FALSE);
5481 if (cv) { /* must reuse cv if autoloaded */
5488 || block->op_type == OP_NULL) && !PL_madskills
5491 /* got here with just attrs -- work done, so bug out */
5492 SAVEFREESV(PL_compcv);
5495 /* transfer PL_compcv to cv */
5497 CvFLAGS(cv) = CvFLAGS(PL_compcv);
5498 if (!CvWEAKOUTSIDE(cv))
5499 SvREFCNT_dec(CvOUTSIDE(cv));
5500 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
5501 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
5502 CvOUTSIDE(PL_compcv) = 0;
5503 CvPADLIST(cv) = CvPADLIST(PL_compcv);
5504 CvPADLIST(PL_compcv) = 0;
5505 /* inner references to PL_compcv must be fixed up ... */
5506 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
5507 /* ... before we throw it away */
5508 SvREFCNT_dec(PL_compcv);
5510 if (PERLDB_INTER)/* Advice debugger on the new sub. */
5511 ++PL_sub_generation;
5518 if (strEQ(name, "import")) {
5519 PL_formfeed = (SV*)cv;
5520 Perl_warner(aTHX_ packWARN(WARN_VOID), "%lx\n", (long)cv);
5524 mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar { (shift)+1 } */
5528 CvFILE_set_from_cop(cv, PL_curcop);
5529 CvSTASH(cv) = PL_curstash;
5532 sv_setpvn((SV*)cv, ps, ps_len);
5534 if (PL_parser && PL_parser->error_count) {
5538 const char *s = strrchr(name, ':');
5540 if (strEQ(s, "BEGIN")) {
5541 const char not_safe[] =
5542 "BEGIN not safe after errors--compilation aborted";
5543 if (PL_in_eval & EVAL_KEEPERR)
5544 Perl_croak(aTHX_ not_safe);
5546 /* force display of errors found but not reported */
5547 sv_catpv(ERRSV, not_safe);
5548 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
5558 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5559 mod(scalarseq(block), OP_LEAVESUBLV));
5560 block->op_attached = 1;
5563 /* This makes sub {}; work as expected. */
5564 if (block->op_type == OP_STUB) {
5565 OP* const newblock = newSTATEOP(0, NULL, 0);
5567 op_getmad(block,newblock,'B');
5574 block->op_attached = 1;
5575 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5577 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5578 OpREFCNT_set(CvROOT(cv), 1);
5579 CvSTART(cv) = LINKLIST(CvROOT(cv));
5580 CvROOT(cv)->op_next = 0;
5581 CALL_PEEP(CvSTART(cv));
5583 /* now that optimizer has done its work, adjust pad values */
5585 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
5588 assert(!CvCONST(cv));
5589 if (ps && !*ps && op_const_sv(block, cv))
5593 if (name || aname) {
5594 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5595 SV * const sv = newSV(0);
5596 SV * const tmpstr = sv_newmortal();
5597 GV * const db_postponed = gv_fetchpvs("DB::postponed",
5598 GV_ADDMULTI, SVt_PVHV);
5601 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5603 (long)PL_subline, (long)CopLINE(PL_curcop));
5604 gv_efullname3(tmpstr, gv, NULL);
5605 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
5606 SvCUR(tmpstr), sv, 0);
5607 hv = GvHVn(db_postponed);
5608 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
5609 CV * const pcv = GvCV(db_postponed);
5615 call_sv((SV*)pcv, G_DISCARD);
5620 if (name && ! (PL_parser && PL_parser->error_count))
5621 process_special_blocks(name, gv, cv);
5626 PL_parser->copline = NOLINE;
5632 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
5635 const char *const colon = strrchr(fullname,':');
5636 const char *const name = colon ? colon + 1 : fullname;
5639 if (strEQ(name, "BEGIN")) {
5640 const I32 oldscope = PL_scopestack_ix;
5642 SAVECOPFILE(&PL_compiling);
5643 SAVECOPLINE(&PL_compiling);
5645 DEBUG_x( dump_sub(gv) );
5646 Perl_av_create_and_push(aTHX_ &PL_beginav, (SV*)cv);
5647 GvCV(gv) = 0; /* cv has been hijacked */
5648 call_list(oldscope, PL_beginav);
5650 PL_curcop = &PL_compiling;
5651 CopHINTS_set(&PL_compiling, PL_hints);
5658 if strEQ(name, "END") {
5659 DEBUG_x( dump_sub(gv) );
5660 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, (SV*)cv);
5663 } else if (*name == 'U') {
5664 if (strEQ(name, "UNITCHECK")) {
5665 /* It's never too late to run a unitcheck block */
5666 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, (SV*)cv);
5670 } else if (*name == 'C') {
5671 if (strEQ(name, "CHECK")) {
5672 if (PL_main_start && ckWARN(WARN_VOID))
5673 Perl_warner(aTHX_ packWARN(WARN_VOID),
5674 "Too late to run CHECK block");
5675 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, (SV*)cv);
5679 } else if (*name == 'I') {
5680 if (strEQ(name, "INIT")) {
5681 if (PL_main_start && ckWARN(WARN_VOID))
5682 Perl_warner(aTHX_ packWARN(WARN_VOID),
5683 "Too late to run INIT block");
5684 Perl_av_create_and_push(aTHX_ &PL_initav, (SV*)cv);
5690 DEBUG_x( dump_sub(gv) );
5691 GvCV(gv) = 0; /* cv has been hijacked */
5696 =for apidoc newCONSTSUB
5698 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
5699 eligible for inlining at compile-time.
5705 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
5710 const char *const temp_p = CopFILE(PL_curcop);
5711 const STRLEN len = temp_p ? strlen(temp_p) : 0;
5713 SV *const temp_sv = CopFILESV(PL_curcop);
5715 const char *const temp_p = temp_sv ? SvPV_const(temp_sv, len) : NULL;
5717 char *const file = savepvn(temp_p, temp_p ? len : 0);
5721 if (IN_PERL_RUNTIME) {
5722 /* at runtime, it's not safe to manipulate PL_curcop: it may be
5723 * an op shared between threads. Use a non-shared COP for our
5725 SAVEVPTR(PL_curcop);
5726 PL_curcop = &PL_compiling;
5728 SAVECOPLINE(PL_curcop);
5729 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
5732 PL_hints &= ~HINT_BLOCK_SCOPE;
5735 SAVESPTR(PL_curstash);
5736 SAVECOPSTASH(PL_curcop);
5737 PL_curstash = stash;
5738 CopSTASH_set(PL_curcop,stash);
5741 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
5742 and so doesn't get free()d. (It's expected to be from the C pre-
5743 processor __FILE__ directive). But we need a dynamically allocated one,
5744 and we need it to get freed. */
5745 cv = newXS_flags(name, const_sv_xsub, file, "", XS_DYNAMIC_FILENAME);
5746 CvXSUBANY(cv).any_ptr = sv;
5752 CopSTASH_free(PL_curcop);
5760 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
5761 const char *const filename, const char *const proto,
5764 CV *cv = newXS(name, subaddr, filename);
5766 if (flags & XS_DYNAMIC_FILENAME) {
5767 /* We need to "make arrangements" (ie cheat) to ensure that the
5768 filename lasts as long as the PVCV we just created, but also doesn't
5770 STRLEN filename_len = strlen(filename);
5771 STRLEN proto_and_file_len = filename_len;
5772 char *proto_and_file;
5776 proto_len = strlen(proto);
5777 proto_and_file_len += proto_len;
5779 Newx(proto_and_file, proto_and_file_len + 1, char);
5780 Copy(proto, proto_and_file, proto_len, char);
5781 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
5784 proto_and_file = savepvn(filename, filename_len);
5787 /* This gets free()d. :-) */
5788 sv_usepvn_flags((SV*)cv, proto_and_file, proto_and_file_len,
5789 SV_HAS_TRAILING_NUL);
5791 /* This gives us the correct prototype, rather than one with the
5792 file name appended. */
5793 SvCUR_set(cv, proto_len);
5797 CvFILE(cv) = proto_and_file + proto_len;
5799 sv_setpv((SV *)cv, proto);
5805 =for apidoc U||newXS
5807 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
5808 static storage, as it is used directly as CvFILE(), without a copy being made.
5814 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
5817 GV * const gv = gv_fetchpv(name ? name :
5818 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5819 GV_ADDMULTI, SVt_PVCV);
5823 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
5825 if ((cv = (name ? GvCV(gv) : NULL))) {
5827 /* just a cached method */
5831 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
5832 /* already defined (or promised) */
5833 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
5834 if (ckWARN(WARN_REDEFINE)) {
5835 GV * const gvcv = CvGV(cv);
5837 HV * const stash = GvSTASH(gvcv);
5839 const char *redefined_name = HvNAME_get(stash);
5840 if ( strEQ(redefined_name,"autouse") ) {
5841 const line_t oldline = CopLINE(PL_curcop);
5842 if (PL_parser && PL_parser->copline != NOLINE)
5843 CopLINE_set(PL_curcop, PL_parser->copline);
5844 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5845 CvCONST(cv) ? "Constant subroutine %s redefined"
5846 : "Subroutine %s redefined"
5848 CopLINE_set(PL_curcop, oldline);
5858 if (cv) /* must reuse cv if autoloaded */
5861 cv = (CV*)newSV_type(SVt_PVCV);
5865 mro_method_changed_in(GvSTASH(gv)); /* newXS */
5869 (void)gv_fetchfile(filename);
5870 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
5871 an external constant string */
5873 CvXSUB(cv) = subaddr;
5876 process_special_blocks(name, gv, cv);
5888 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
5893 OP* pegop = newOP(OP_NULL, 0);
5897 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
5898 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
5900 #ifdef GV_UNIQUE_CHECK
5902 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
5906 if ((cv = GvFORM(gv))) {
5907 if (ckWARN(WARN_REDEFINE)) {
5908 const line_t oldline = CopLINE(PL_curcop);
5909 if (PL_parser && PL_parser->copline != NOLINE)
5910 CopLINE_set(PL_curcop, PL_parser->copline);
5911 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5912 o ? "Format %"SVf" redefined"
5913 : "Format STDOUT redefined", SVfARG(cSVOPo->op_sv));
5914 CopLINE_set(PL_curcop, oldline);
5921 CvFILE_set_from_cop(cv, PL_curcop);
5924 pad_tidy(padtidy_FORMAT);
5925 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5926 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5927 OpREFCNT_set(CvROOT(cv), 1);
5928 CvSTART(cv) = LINKLIST(CvROOT(cv));
5929 CvROOT(cv)->op_next = 0;
5930 CALL_PEEP(CvSTART(cv));
5932 op_getmad(o,pegop,'n');
5933 op_getmad_weak(block, pegop, 'b');
5938 PL_parser->copline = NOLINE;
5946 Perl_newANONLIST(pTHX_ OP *o)
5948 return convert(OP_ANONLIST, OPf_SPECIAL, o);
5952 Perl_newANONHASH(pTHX_ OP *o)
5954 return convert(OP_ANONHASH, OPf_SPECIAL, o);
5958 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5960 return newANONATTRSUB(floor, proto, NULL, block);
5964 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5966 return newUNOP(OP_REFGEN, 0,
5967 newSVOP(OP_ANONCODE, 0,
5968 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5972 Perl_oopsAV(pTHX_ OP *o)
5975 switch (o->op_type) {
5977 o->op_type = OP_PADAV;
5978 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5979 return ref(o, OP_RV2AV);
5982 o->op_type = OP_RV2AV;
5983 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5988 if (ckWARN_d(WARN_INTERNAL))
5989 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5996 Perl_oopsHV(pTHX_ OP *o)
5999 switch (o->op_type) {
6002 o->op_type = OP_PADHV;
6003 o->op_ppaddr = PL_ppaddr[OP_PADHV];
6004 return ref(o, OP_RV2HV);
6008 o->op_type = OP_RV2HV;
6009 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
6014 if (ckWARN_d(WARN_INTERNAL))
6015 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
6022 Perl_newAVREF(pTHX_ OP *o)
6025 if (o->op_type == OP_PADANY) {
6026 o->op_type = OP_PADAV;
6027 o->op_ppaddr = PL_ppaddr[OP_PADAV];
6030 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
6031 && ckWARN(WARN_DEPRECATED)) {
6032 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
6033 "Using an array as a reference is deprecated");
6035 return newUNOP(OP_RV2AV, 0, scalar(o));
6039 Perl_newGVREF(pTHX_ I32 type, OP *o)
6041 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
6042 return newUNOP(OP_NULL, 0, o);
6043 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
6047 Perl_newHVREF(pTHX_ OP *o)
6050 if (o->op_type == OP_PADANY) {
6051 o->op_type = OP_PADHV;
6052 o->op_ppaddr = PL_ppaddr[OP_PADHV];
6055 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
6056 && ckWARN(WARN_DEPRECATED)) {
6057 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
6058 "Using a hash as a reference is deprecated");
6060 return newUNOP(OP_RV2HV, 0, scalar(o));
6064 Perl_newCVREF(pTHX_ I32 flags, OP *o)
6066 return newUNOP(OP_RV2CV, flags, scalar(o));
6070 Perl_newSVREF(pTHX_ OP *o)
6073 if (o->op_type == OP_PADANY) {
6074 o->op_type = OP_PADSV;
6075 o->op_ppaddr = PL_ppaddr[OP_PADSV];
6078 return newUNOP(OP_RV2SV, 0, scalar(o));
6081 /* Check routines. See the comments at the top of this file for details
6082 * on when these are called */
6085 Perl_ck_anoncode(pTHX_ OP *o)
6087 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
6089 cSVOPo->op_sv = NULL;
6094 Perl_ck_bitop(pTHX_ OP *o)
6097 #define OP_IS_NUMCOMPARE(op) \
6098 ((op) == OP_LT || (op) == OP_I_LT || \
6099 (op) == OP_GT || (op) == OP_I_GT || \
6100 (op) == OP_LE || (op) == OP_I_LE || \
6101 (op) == OP_GE || (op) == OP_I_GE || \
6102 (op) == OP_EQ || (op) == OP_I_EQ || \
6103 (op) == OP_NE || (op) == OP_I_NE || \
6104 (op) == OP_NCMP || (op) == OP_I_NCMP)
6105 o->op_private = (U8)(PL_hints & HINT_INTEGER);
6106 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
6107 && (o->op_type == OP_BIT_OR
6108 || o->op_type == OP_BIT_AND
6109 || o->op_type == OP_BIT_XOR))
6111 const OP * const left = cBINOPo->op_first;
6112 const OP * const right = left->op_sibling;
6113 if ((OP_IS_NUMCOMPARE(left->op_type) &&
6114 (left->op_flags & OPf_PARENS) == 0) ||
6115 (OP_IS_NUMCOMPARE(right->op_type) &&
6116 (right->op_flags & OPf_PARENS) == 0))
6117 if (ckWARN(WARN_PRECEDENCE))
6118 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
6119 "Possible precedence problem on bitwise %c operator",
6120 o->op_type == OP_BIT_OR ? '|'
6121 : o->op_type == OP_BIT_AND ? '&' : '^'
6128 Perl_ck_concat(pTHX_ OP *o)
6130 const OP * const kid = cUNOPo->op_first;
6131 PERL_UNUSED_CONTEXT;
6132 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
6133 !(kUNOP->op_first->op_flags & OPf_MOD))
6134 o->op_flags |= OPf_STACKED;
6139 Perl_ck_spair(pTHX_ OP *o)
6142 if (o->op_flags & OPf_KIDS) {
6145 const OPCODE type = o->op_type;
6146 o = modkids(ck_fun(o), type);
6147 kid = cUNOPo->op_first;
6148 newop = kUNOP->op_first->op_sibling;
6150 const OPCODE type = newop->op_type;
6151 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
6152 type == OP_PADAV || type == OP_PADHV ||
6153 type == OP_RV2AV || type == OP_RV2HV)
6157 op_getmad(kUNOP->op_first,newop,'K');
6159 op_free(kUNOP->op_first);
6161 kUNOP->op_first = newop;
6163 o->op_ppaddr = PL_ppaddr[++o->op_type];
6168 Perl_ck_delete(pTHX_ OP *o)
6172 if (o->op_flags & OPf_KIDS) {
6173 OP * const kid = cUNOPo->op_first;
6174 switch (kid->op_type) {
6176 o->op_flags |= OPf_SPECIAL;
6179 o->op_private |= OPpSLICE;
6182 o->op_flags |= OPf_SPECIAL;
6187 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
6196 Perl_ck_die(pTHX_ OP *o)
6199 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6205 Perl_ck_eof(pTHX_ OP *o)
6209 if (o->op_flags & OPf_KIDS) {
6210 if (cLISTOPo->op_first->op_type == OP_STUB) {
6212 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
6214 op_getmad(o,newop,'O');
6226 Perl_ck_eval(pTHX_ OP *o)
6229 PL_hints |= HINT_BLOCK_SCOPE;
6230 if (o->op_flags & OPf_KIDS) {
6231 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6234 o->op_flags &= ~OPf_KIDS;
6237 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
6243 cUNOPo->op_first = 0;
6248 NewOp(1101, enter, 1, LOGOP);
6249 enter->op_type = OP_ENTERTRY;
6250 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
6251 enter->op_private = 0;
6253 /* establish postfix order */
6254 enter->op_next = (OP*)enter;
6256 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
6257 o->op_type = OP_LEAVETRY;
6258 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
6259 enter->op_other = o;
6260 op_getmad(oldo,o,'O');
6274 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
6275 op_getmad(oldo,o,'O');
6277 o->op_targ = (PADOFFSET)PL_hints;
6278 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
6279 /* Store a copy of %^H that pp_entereval can pick up.
6280 OPf_SPECIAL flags the opcode as being for this purpose,
6281 so that it in turn will return a copy at every
6283 OP *hhop = newSVOP(OP_CONST, OPf_SPECIAL,
6284 (SV*)Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)));
6285 cUNOPo->op_first->op_sibling = hhop;
6286 o->op_private |= OPpEVAL_HAS_HH;
6292 Perl_ck_exit(pTHX_ OP *o)
6295 HV * const table = GvHV(PL_hintgv);
6297 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
6298 if (svp && *svp && SvTRUE(*svp))
6299 o->op_private |= OPpEXIT_VMSISH;
6301 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6307 Perl_ck_exec(pTHX_ OP *o)
6309 if (o->op_flags & OPf_STACKED) {
6312 kid = cUNOPo->op_first->op_sibling;
6313 if (kid->op_type == OP_RV2GV)
6322 Perl_ck_exists(pTHX_ OP *o)
6326 if (o->op_flags & OPf_KIDS) {
6327 OP * const kid = cUNOPo->op_first;
6328 if (kid->op_type == OP_ENTERSUB) {
6329 (void) ref(kid, o->op_type);
6330 if (kid->op_type != OP_RV2CV
6331 && !(PL_parser && PL_parser->error_count))
6332 Perl_croak(aTHX_ "%s argument is not a subroutine name",
6334 o->op_private |= OPpEXISTS_SUB;
6336 else if (kid->op_type == OP_AELEM)
6337 o->op_flags |= OPf_SPECIAL;
6338 else if (kid->op_type != OP_HELEM)
6339 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
6347 Perl_ck_rvconst(pTHX_ register OP *o)
6350 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6352 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6353 if (o->op_type == OP_RV2CV)
6354 o->op_private &= ~1;
6356 if (kid->op_type == OP_CONST) {
6359 SV * const kidsv = kid->op_sv;
6361 /* Is it a constant from cv_const_sv()? */
6362 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
6363 SV * const rsv = SvRV(kidsv);
6364 const svtype type = SvTYPE(rsv);
6365 const char *badtype = NULL;
6367 switch (o->op_type) {
6369 if (type > SVt_PVMG)
6370 badtype = "a SCALAR";
6373 if (type != SVt_PVAV)
6374 badtype = "an ARRAY";
6377 if (type != SVt_PVHV)
6381 if (type != SVt_PVCV)
6386 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
6389 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
6390 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
6391 /* If this is an access to a stash, disable "strict refs", because
6392 * stashes aren't auto-vivified at compile-time (unless we store
6393 * symbols in them), and we don't want to produce a run-time
6394 * stricture error when auto-vivifying the stash. */
6395 const char *s = SvPV_nolen(kidsv);
6396 const STRLEN l = SvCUR(kidsv);
6397 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
6398 o->op_private &= ~HINT_STRICT_REFS;
6400 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
6401 const char *badthing;
6402 switch (o->op_type) {
6404 badthing = "a SCALAR";
6407 badthing = "an ARRAY";
6410 badthing = "a HASH";
6418 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
6419 SVfARG(kidsv), badthing);
6422 * This is a little tricky. We only want to add the symbol if we
6423 * didn't add it in the lexer. Otherwise we get duplicate strict
6424 * warnings. But if we didn't add it in the lexer, we must at
6425 * least pretend like we wanted to add it even if it existed before,
6426 * or we get possible typo warnings. OPpCONST_ENTERED says
6427 * whether the lexer already added THIS instance of this symbol.
6429 iscv = (o->op_type == OP_RV2CV) * 2;
6431 gv = gv_fetchsv(kidsv,
6432 iscv | !(kid->op_private & OPpCONST_ENTERED),
6435 : o->op_type == OP_RV2SV
6437 : o->op_type == OP_RV2AV
6439 : o->op_type == OP_RV2HV
6442 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
6444 kid->op_type = OP_GV;
6445 SvREFCNT_dec(kid->op_sv);
6447 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
6448 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
6449 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
6451 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
6453 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
6455 kid->op_private = 0;
6456 kid->op_ppaddr = PL_ppaddr[OP_GV];
6463 Perl_ck_ftst(pTHX_ OP *o)
6466 const I32 type = o->op_type;
6468 if (o->op_flags & OPf_REF) {
6471 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
6472 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6473 const OPCODE kidtype = kid->op_type;
6475 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6476 OP * const newop = newGVOP(type, OPf_REF,
6477 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
6479 op_getmad(o,newop,'O');
6485 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o))
6486 o->op_private |= OPpFT_ACCESS;
6487 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
6488 && kidtype != OP_STAT && kidtype != OP_LSTAT)
6489 o->op_private |= OPpFT_STACKED;
6497 if (type == OP_FTTTY)
6498 o = newGVOP(type, OPf_REF, PL_stdingv);
6500 o = newUNOP(type, 0, newDEFSVOP());
6501 op_getmad(oldo,o,'O');
6507 Perl_ck_fun(pTHX_ OP *o)
6510 const int type = o->op_type;
6511 register I32 oa = PL_opargs[type] >> OASHIFT;
6513 if (o->op_flags & OPf_STACKED) {
6514 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
6517 return no_fh_allowed(o);
6520 if (o->op_flags & OPf_KIDS) {
6521 OP **tokid = &cLISTOPo->op_first;
6522 register OP *kid = cLISTOPo->op_first;
6526 if (kid->op_type == OP_PUSHMARK ||
6527 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
6529 tokid = &kid->op_sibling;
6530 kid = kid->op_sibling;
6532 if (!kid && PL_opargs[type] & OA_DEFGV)
6533 *tokid = kid = newDEFSVOP();
6537 sibl = kid->op_sibling;
6539 if (!sibl && kid->op_type == OP_STUB) {
6546 /* list seen where single (scalar) arg expected? */
6547 if (numargs == 1 && !(oa >> 4)
6548 && kid->op_type == OP_LIST && type != OP_SCALAR)
6550 return too_many_arguments(o,PL_op_desc[type]);
6563 if ((type == OP_PUSH || type == OP_UNSHIFT)
6564 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
6565 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6566 "Useless use of %s with no values",
6569 if (kid->op_type == OP_CONST &&
6570 (kid->op_private & OPpCONST_BARE))
6572 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
6573 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
6574 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6575 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6576 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
6577 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6579 op_getmad(kid,newop,'K');
6584 kid->op_sibling = sibl;
6587 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
6588 bad_type(numargs, "array", PL_op_desc[type], kid);
6592 if (kid->op_type == OP_CONST &&
6593 (kid->op_private & OPpCONST_BARE))
6595 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
6596 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
6597 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6598 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6599 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
6600 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6602 op_getmad(kid,newop,'K');
6607 kid->op_sibling = sibl;
6610 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6611 bad_type(numargs, "hash", PL_op_desc[type], kid);
6616 OP * const newop = newUNOP(OP_NULL, 0, kid);
6617 kid->op_sibling = 0;
6619 newop->op_next = newop;
6621 kid->op_sibling = sibl;
6626 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6627 if (kid->op_type == OP_CONST &&
6628 (kid->op_private & OPpCONST_BARE))
6630 OP * const newop = newGVOP(OP_GV, 0,
6631 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
6632 if (!(o->op_private & 1) && /* if not unop */
6633 kid == cLISTOPo->op_last)
6634 cLISTOPo->op_last = newop;
6636 op_getmad(kid,newop,'K');
6642 else if (kid->op_type == OP_READLINE) {
6643 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6644 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
6647 I32 flags = OPf_SPECIAL;
6651 /* is this op a FH constructor? */
6652 if (is_handle_constructor(o,numargs)) {
6653 const char *name = NULL;
6657 /* Set a flag to tell rv2gv to vivify
6658 * need to "prove" flag does not mean something
6659 * else already - NI-S 1999/05/07
6662 if (kid->op_type == OP_PADSV) {
6664 = PAD_COMPNAME_SV(kid->op_targ);
6665 name = SvPV_const(namesv, len);
6667 else if (kid->op_type == OP_RV2SV
6668 && kUNOP->op_first->op_type == OP_GV)
6670 GV * const gv = cGVOPx_gv(kUNOP->op_first);
6672 len = GvNAMELEN(gv);
6674 else if (kid->op_type == OP_AELEM
6675 || kid->op_type == OP_HELEM)
6678 OP *op = ((BINOP*)kid)->op_first;
6682 const char * const a =
6683 kid->op_type == OP_AELEM ?
6685 if (((op->op_type == OP_RV2AV) ||
6686 (op->op_type == OP_RV2HV)) &&
6687 (firstop = ((UNOP*)op)->op_first) &&
6688 (firstop->op_type == OP_GV)) {
6689 /* packagevar $a[] or $h{} */
6690 GV * const gv = cGVOPx_gv(firstop);
6698 else if (op->op_type == OP_PADAV
6699 || op->op_type == OP_PADHV) {
6700 /* lexicalvar $a[] or $h{} */
6701 const char * const padname =
6702 PAD_COMPNAME_PV(op->op_targ);
6711 name = SvPV_const(tmpstr, len);
6716 name = "__ANONIO__";
6723 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
6724 namesv = PAD_SVl(targ);
6725 SvUPGRADE(namesv, SVt_PV);
6727 sv_setpvn(namesv, "$", 1);
6728 sv_catpvn(namesv, name, len);
6731 kid->op_sibling = 0;
6732 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
6733 kid->op_targ = targ;
6734 kid->op_private |= priv;
6736 kid->op_sibling = sibl;
6742 mod(scalar(kid), type);
6746 tokid = &kid->op_sibling;
6747 kid = kid->op_sibling;
6750 if (kid && kid->op_type != OP_STUB)
6751 return too_many_arguments(o,OP_DESC(o));
6752 o->op_private |= numargs;
6754 /* FIXME - should the numargs move as for the PERL_MAD case? */
6755 o->op_private |= numargs;
6757 return too_many_arguments(o,OP_DESC(o));
6761 else if (PL_opargs[type] & OA_DEFGV) {
6763 OP *newop = newUNOP(type, 0, newDEFSVOP());
6764 op_getmad(o,newop,'O');
6767 /* Ordering of these two is important to keep f_map.t passing. */
6769 return newUNOP(type, 0, newDEFSVOP());
6774 while (oa & OA_OPTIONAL)
6776 if (oa && oa != OA_LIST)
6777 return too_few_arguments(o,OP_DESC(o));
6783 Perl_ck_glob(pTHX_ OP *o)
6789 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
6790 append_elem(OP_GLOB, o, newDEFSVOP());
6792 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
6793 && GvCVu(gv) && GvIMPORTED_CV(gv)))
6795 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6798 #if !defined(PERL_EXTERNAL_GLOB)
6799 /* XXX this can be tightened up and made more failsafe. */
6800 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6803 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
6804 newSVpvs("File::Glob"), NULL, NULL, NULL);
6805 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6806 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
6807 GvCV(gv) = GvCV(glob_gv);
6808 SvREFCNT_inc_void((SV*)GvCV(gv));
6809 GvIMPORTED_CV_on(gv);
6812 #endif /* PERL_EXTERNAL_GLOB */
6814 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6815 append_elem(OP_GLOB, o,
6816 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
6817 o->op_type = OP_LIST;
6818 o->op_ppaddr = PL_ppaddr[OP_LIST];
6819 cLISTOPo->op_first->op_type = OP_PUSHMARK;
6820 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
6821 cLISTOPo->op_first->op_targ = 0;
6822 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
6823 append_elem(OP_LIST, o,
6824 scalar(newUNOP(OP_RV2CV, 0,
6825 newGVOP(OP_GV, 0, gv)))));
6826 o = newUNOP(OP_NULL, 0, ck_subr(o));
6827 o->op_targ = OP_GLOB; /* hint at what it used to be */
6830 gv = newGVgen("main");
6832 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
6838 Perl_ck_grep(pTHX_ OP *o)
6843 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
6846 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
6847 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
6849 if (o->op_flags & OPf_STACKED) {
6852 kid = cLISTOPo->op_first->op_sibling;
6853 if (!cUNOPx(kid)->op_next)
6854 Perl_croak(aTHX_ "panic: ck_grep");
6855 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
6858 NewOp(1101, gwop, 1, LOGOP);
6859 kid->op_next = (OP*)gwop;
6860 o->op_flags &= ~OPf_STACKED;
6862 kid = cLISTOPo->op_first->op_sibling;
6863 if (type == OP_MAPWHILE)
6868 if (PL_parser && PL_parser->error_count)
6870 kid = cLISTOPo->op_first->op_sibling;
6871 if (kid->op_type != OP_NULL)
6872 Perl_croak(aTHX_ "panic: ck_grep");
6873 kid = kUNOP->op_first;
6876 NewOp(1101, gwop, 1, LOGOP);
6877 gwop->op_type = type;
6878 gwop->op_ppaddr = PL_ppaddr[type];
6879 gwop->op_first = listkids(o);
6880 gwop->op_flags |= OPf_KIDS;
6881 gwop->op_other = LINKLIST(kid);
6882 kid->op_next = (OP*)gwop;
6883 offset = pad_findmy("$_");
6884 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
6885 o->op_private = gwop->op_private = 0;
6886 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
6889 o->op_private = gwop->op_private = OPpGREP_LEX;
6890 gwop->op_targ = o->op_targ = offset;
6893 kid = cLISTOPo->op_first->op_sibling;
6894 if (!kid || !kid->op_sibling)
6895 return too_few_arguments(o,OP_DESC(o));
6896 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
6897 mod(kid, OP_GREPSTART);
6903 Perl_ck_index(pTHX_ OP *o)
6905 if (o->op_flags & OPf_KIDS) {
6906 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6908 kid = kid->op_sibling; /* get past "big" */
6909 if (kid && kid->op_type == OP_CONST)
6910 fbm_compile(((SVOP*)kid)->op_sv, 0);
6916 Perl_ck_lengthconst(pTHX_ OP *o)
6918 /* XXX length optimization goes here */
6923 Perl_ck_lfun(pTHX_ OP *o)
6925 const OPCODE type = o->op_type;
6926 return modkids(ck_fun(o), type);
6930 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
6932 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
6933 switch (cUNOPo->op_first->op_type) {
6935 /* This is needed for
6936 if (defined %stash::)
6937 to work. Do not break Tk.
6939 break; /* Globals via GV can be undef */
6941 case OP_AASSIGN: /* Is this a good idea? */
6942 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6943 "defined(@array) is deprecated");
6944 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6945 "\t(Maybe you should just omit the defined()?)\n");
6948 /* This is needed for
6949 if (defined %stash::)
6950 to work. Do not break Tk.
6952 break; /* Globals via GV can be undef */
6954 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6955 "defined(%%hash) is deprecated");
6956 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6957 "\t(Maybe you should just omit the defined()?)\n");
6968 Perl_ck_readline(pTHX_ OP *o)
6970 if (!(o->op_flags & OPf_KIDS)) {
6972 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
6974 op_getmad(o,newop,'O');
6984 Perl_ck_rfun(pTHX_ OP *o)
6986 const OPCODE type = o->op_type;
6987 return refkids(ck_fun(o), type);
6991 Perl_ck_listiob(pTHX_ OP *o)
6995 kid = cLISTOPo->op_first;
6998 kid = cLISTOPo->op_first;
7000 if (kid->op_type == OP_PUSHMARK)
7001 kid = kid->op_sibling;
7002 if (kid && o->op_flags & OPf_STACKED)
7003 kid = kid->op_sibling;
7004 else if (kid && !kid->op_sibling) { /* print HANDLE; */
7005 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
7006 o->op_flags |= OPf_STACKED; /* make it a filehandle */
7007 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
7008 cLISTOPo->op_first->op_sibling = kid;
7009 cLISTOPo->op_last = kid;
7010 kid = kid->op_sibling;
7015 append_elem(o->op_type, o, newDEFSVOP());
7021 Perl_ck_smartmatch(pTHX_ OP *o)
7024 if (0 == (o->op_flags & OPf_SPECIAL)) {
7025 OP *first = cBINOPo->op_first;
7026 OP *second = first->op_sibling;
7028 /* Implicitly take a reference to an array or hash */
7029 first->op_sibling = NULL;
7030 first = cBINOPo->op_first = ref_array_or_hash(first);
7031 second = first->op_sibling = ref_array_or_hash(second);
7033 /* Implicitly take a reference to a regular expression */
7034 if (first->op_type == OP_MATCH) {
7035 first->op_type = OP_QR;
7036 first->op_ppaddr = PL_ppaddr[OP_QR];
7038 if (second->op_type == OP_MATCH) {
7039 second->op_type = OP_QR;
7040 second->op_ppaddr = PL_ppaddr[OP_QR];
7049 Perl_ck_sassign(pTHX_ OP *o)
7052 OP * const kid = cLISTOPo->op_first;
7053 /* has a disposable target? */
7054 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
7055 && !(kid->op_flags & OPf_STACKED)
7056 /* Cannot steal the second time! */
7057 && !(kid->op_private & OPpTARGET_MY)
7058 /* Keep the full thing for madskills */
7062 OP * const kkid = kid->op_sibling;
7064 /* Can just relocate the target. */
7065 if (kkid && kkid->op_type == OP_PADSV
7066 && !(kkid->op_private & OPpLVAL_INTRO))
7068 kid->op_targ = kkid->op_targ;
7070 /* Now we do not need PADSV and SASSIGN. */
7071 kid->op_sibling = o->op_sibling; /* NULL */
7072 cLISTOPo->op_first = NULL;
7075 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
7079 if (kid->op_sibling) {
7080 OP *kkid = kid->op_sibling;
7081 if (kkid->op_type == OP_PADSV
7082 && (kkid->op_private & OPpLVAL_INTRO)
7083 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
7084 const PADOFFSET target = kkid->op_targ;
7085 OP *const other = newOP(OP_PADSV,
7087 | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
7088 OP *const first = newOP(OP_NULL, 0);
7089 OP *const nullop = newCONDOP(0, first, o, other);
7090 OP *const condop = first->op_next;
7091 /* hijacking PADSTALE for uninitialized state variables */
7092 SvPADSTALE_on(PAD_SVl(target));
7094 condop->op_type = OP_ONCE;
7095 condop->op_ppaddr = PL_ppaddr[OP_ONCE];
7096 condop->op_targ = target;
7097 other->op_targ = target;
7099 /* Because we change the type of the op here, we will skip the
7100 assinment binop->op_last = binop->op_first->op_sibling; at the
7101 end of Perl_newBINOP(). So need to do it here. */
7102 cBINOPo->op_last = cBINOPo->op_first->op_sibling;
7111 Perl_ck_match(pTHX_ OP *o)
7114 if (o->op_type != OP_QR && PL_compcv) {
7115 const PADOFFSET offset = pad_findmy("$_");
7116 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
7117 o->op_targ = offset;
7118 o->op_private |= OPpTARGET_MY;
7121 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
7122 o->op_private |= OPpRUNTIME;
7127 Perl_ck_method(pTHX_ OP *o)
7129 OP * const kid = cUNOPo->op_first;
7130 if (kid->op_type == OP_CONST) {
7131 SV* sv = kSVOP->op_sv;
7132 const char * const method = SvPVX_const(sv);
7133 if (!(strchr(method, ':') || strchr(method, '\''))) {
7135 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
7136 sv = newSVpvn_share(method, SvCUR(sv), 0);
7139 kSVOP->op_sv = NULL;
7141 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
7143 op_getmad(o,cmop,'O');
7154 Perl_ck_null(pTHX_ OP *o)
7156 PERL_UNUSED_CONTEXT;
7161 Perl_ck_open(pTHX_ OP *o)
7164 HV * const table = GvHV(PL_hintgv);
7166 SV **svp = hv_fetchs(table, "open_IN", FALSE);
7168 const I32 mode = mode_from_discipline(*svp);
7169 if (mode & O_BINARY)
7170 o->op_private |= OPpOPEN_IN_RAW;
7171 else if (mode & O_TEXT)
7172 o->op_private |= OPpOPEN_IN_CRLF;
7175 svp = hv_fetchs(table, "open_OUT", FALSE);
7177 const I32 mode = mode_from_discipline(*svp);
7178 if (mode & O_BINARY)
7179 o->op_private |= OPpOPEN_OUT_RAW;
7180 else if (mode & O_TEXT)
7181 o->op_private |= OPpOPEN_OUT_CRLF;
7184 if (o->op_type == OP_BACKTICK) {
7185 if (!(o->op_flags & OPf_KIDS)) {
7186 OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
7188 op_getmad(o,newop,'O');
7197 /* In case of three-arg dup open remove strictness
7198 * from the last arg if it is a bareword. */
7199 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
7200 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
7204 if ((last->op_type == OP_CONST) && /* The bareword. */
7205 (last->op_private & OPpCONST_BARE) &&
7206 (last->op_private & OPpCONST_STRICT) &&
7207 (oa = first->op_sibling) && /* The fh. */
7208 (oa = oa->op_sibling) && /* The mode. */
7209 (oa->op_type == OP_CONST) &&
7210 SvPOK(((SVOP*)oa)->op_sv) &&
7211 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
7212 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
7213 (last == oa->op_sibling)) /* The bareword. */
7214 last->op_private &= ~OPpCONST_STRICT;
7220 Perl_ck_repeat(pTHX_ OP *o)
7222 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
7223 o->op_private |= OPpREPEAT_DOLIST;
7224 cBINOPo->op_first = force_list(cBINOPo->op_first);
7232 Perl_ck_require(pTHX_ OP *o)
7237 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
7238 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7240 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7241 SV * const sv = kid->op_sv;
7242 U32 was_readonly = SvREADONLY(sv);
7249 sv_force_normal_flags(sv, 0);
7250 assert(!SvREADONLY(sv));
7260 for (; s < end; s++) {
7261 if (*s == ':' && s[1] == ':') {
7263 Move(s+2, s+1, end - s - 1, char);
7268 sv_catpvs(sv, ".pm");
7269 SvFLAGS(sv) |= was_readonly;
7273 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
7274 /* handle override, if any */
7275 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
7276 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7277 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
7278 gv = gvp ? *gvp : NULL;
7282 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7283 OP * const kid = cUNOPo->op_first;
7286 cUNOPo->op_first = 0;
7290 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
7291 append_elem(OP_LIST, kid,
7292 scalar(newUNOP(OP_RV2CV, 0,
7295 op_getmad(o,newop,'O');
7303 Perl_ck_return(pTHX_ OP *o)
7306 if (CvLVALUE(PL_compcv)) {
7308 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
7309 mod(kid, OP_LEAVESUBLV);
7315 Perl_ck_select(pTHX_ OP *o)
7319 if (o->op_flags & OPf_KIDS) {
7320 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7321 if (kid && kid->op_sibling) {
7322 o->op_type = OP_SSELECT;
7323 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
7325 return fold_constants(o);
7329 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7330 if (kid && kid->op_type == OP_RV2GV)
7331 kid->op_private &= ~HINT_STRICT_REFS;
7336 Perl_ck_shift(pTHX_ OP *o)
7339 const I32 type = o->op_type;
7341 if (!(o->op_flags & OPf_KIDS)) {
7343 /* FIXME - this can be refactored to reduce code in #ifdefs */
7345 OP * const oldo = o;
7349 argop = newUNOP(OP_RV2AV, 0,
7350 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
7352 o = newUNOP(type, 0, scalar(argop));
7353 op_getmad(oldo,o,'O');
7356 return newUNOP(type, 0, scalar(argop));
7359 return scalar(modkids(ck_fun(o), type));
7363 Perl_ck_sort(pTHX_ OP *o)
7368 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
7369 HV * const hinthv = GvHV(PL_hintgv);
7371 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
7373 const I32 sorthints = (I32)SvIV(*svp);
7374 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
7375 o->op_private |= OPpSORT_QSORT;
7376 if ((sorthints & HINT_SORT_STABLE) != 0)
7377 o->op_private |= OPpSORT_STABLE;
7382 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
7384 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7385 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
7387 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
7389 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
7391 if (kid->op_type == OP_SCOPE) {
7395 else if (kid->op_type == OP_LEAVE) {
7396 if (o->op_type == OP_SORT) {
7397 op_null(kid); /* wipe out leave */
7400 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
7401 if (k->op_next == kid)
7403 /* don't descend into loops */
7404 else if (k->op_type == OP_ENTERLOOP
7405 || k->op_type == OP_ENTERITER)
7407 k = cLOOPx(k)->op_lastop;
7412 kid->op_next = 0; /* just disconnect the leave */
7413 k = kLISTOP->op_first;
7418 if (o->op_type == OP_SORT) {
7419 /* provide scalar context for comparison function/block */
7425 o->op_flags |= OPf_SPECIAL;
7427 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
7430 firstkid = firstkid->op_sibling;
7433 /* provide list context for arguments */
7434 if (o->op_type == OP_SORT)
7441 S_simplify_sort(pTHX_ OP *o)
7444 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7449 if (!(o->op_flags & OPf_STACKED))
7451 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
7452 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
7453 kid = kUNOP->op_first; /* get past null */
7454 if (kid->op_type != OP_SCOPE)
7456 kid = kLISTOP->op_last; /* get past scope */
7457 switch(kid->op_type) {
7465 k = kid; /* remember this node*/
7466 if (kBINOP->op_first->op_type != OP_RV2SV)
7468 kid = kBINOP->op_first; /* get past cmp */
7469 if (kUNOP->op_first->op_type != OP_GV)
7471 kid = kUNOP->op_first; /* get past rv2sv */
7473 if (GvSTASH(gv) != PL_curstash)
7475 gvname = GvNAME(gv);
7476 if (*gvname == 'a' && gvname[1] == '\0')
7478 else if (*gvname == 'b' && gvname[1] == '\0')
7483 kid = k; /* back to cmp */
7484 if (kBINOP->op_last->op_type != OP_RV2SV)
7486 kid = kBINOP->op_last; /* down to 2nd arg */
7487 if (kUNOP->op_first->op_type != OP_GV)
7489 kid = kUNOP->op_first; /* get past rv2sv */
7491 if (GvSTASH(gv) != PL_curstash)
7493 gvname = GvNAME(gv);
7495 ? !(*gvname == 'a' && gvname[1] == '\0')
7496 : !(*gvname == 'b' && gvname[1] == '\0'))
7498 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
7500 o->op_private |= OPpSORT_DESCEND;
7501 if (k->op_type == OP_NCMP)
7502 o->op_private |= OPpSORT_NUMERIC;
7503 if (k->op_type == OP_I_NCMP)
7504 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
7505 kid = cLISTOPo->op_first->op_sibling;
7506 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
7508 op_getmad(kid,o,'S'); /* then delete it */
7510 op_free(kid); /* then delete it */
7515 Perl_ck_split(pTHX_ OP *o)
7520 if (o->op_flags & OPf_STACKED)
7521 return no_fh_allowed(o);
7523 kid = cLISTOPo->op_first;
7524 if (kid->op_type != OP_NULL)
7525 Perl_croak(aTHX_ "panic: ck_split");
7526 kid = kid->op_sibling;
7527 op_free(cLISTOPo->op_first);
7528 cLISTOPo->op_first = kid;
7530 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
7531 cLISTOPo->op_last = kid; /* There was only one element previously */
7534 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
7535 OP * const sibl = kid->op_sibling;
7536 kid->op_sibling = 0;
7537 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
7538 if (cLISTOPo->op_first == cLISTOPo->op_last)
7539 cLISTOPo->op_last = kid;
7540 cLISTOPo->op_first = kid;
7541 kid->op_sibling = sibl;
7544 kid->op_type = OP_PUSHRE;
7545 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
7547 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
7548 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
7549 "Use of /g modifier is meaningless in split");
7552 if (!kid->op_sibling)
7553 append_elem(OP_SPLIT, o, newDEFSVOP());
7555 kid = kid->op_sibling;
7558 if (!kid->op_sibling)
7559 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
7560 assert(kid->op_sibling);
7562 kid = kid->op_sibling;
7565 if (kid->op_sibling)
7566 return too_many_arguments(o,OP_DESC(o));
7572 Perl_ck_join(pTHX_ OP *o)
7574 const OP * const kid = cLISTOPo->op_first->op_sibling;
7575 if (kid && kid->op_type == OP_MATCH) {
7576 if (ckWARN(WARN_SYNTAX)) {
7577 const REGEXP *re = PM_GETRE(kPMOP);
7578 const char *pmstr = re ? RX_PRECOMP(re) : "STRING";
7579 const STRLEN len = re ? RX_PRELEN(re) : 6;
7580 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7581 "/%.*s/ should probably be written as \"%.*s\"",
7582 (int)len, pmstr, (int)len, pmstr);
7589 Perl_ck_subr(pTHX_ OP *o)
7592 OP *prev = ((cUNOPo->op_first->op_sibling)
7593 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
7594 OP *o2 = prev->op_sibling;
7596 const char *proto = NULL;
7597 const char *proto_end = NULL;
7602 I32 contextclass = 0;
7603 const char *e = NULL;
7606 o->op_private |= OPpENTERSUB_HASTARG;
7607 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
7608 if (cvop->op_type == OP_RV2CV) {
7610 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
7611 op_null(cvop); /* disable rv2cv */
7612 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
7613 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
7614 GV *gv = cGVOPx_gv(tmpop);
7617 tmpop->op_private |= OPpEARLY_CV;
7621 namegv = CvANON(cv) ? gv : CvGV(cv);
7622 proto = SvPV((SV*)cv, len);
7623 proto_end = proto + len;
7628 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
7629 if (o2->op_type == OP_CONST)
7630 o2->op_private &= ~OPpCONST_STRICT;
7631 else if (o2->op_type == OP_LIST) {
7632 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
7633 if (sib && sib->op_type == OP_CONST)
7634 sib->op_private &= ~OPpCONST_STRICT;
7637 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7638 if (PERLDB_SUB && PL_curstash != PL_debstash)
7639 o->op_private |= OPpENTERSUB_DB;
7640 while (o2 != cvop) {
7642 if (PL_madskills && o2->op_type == OP_STUB) {
7643 o2 = o2->op_sibling;
7646 if (PL_madskills && o2->op_type == OP_NULL)
7647 o3 = ((UNOP*)o2)->op_first;
7651 if (proto >= proto_end)
7652 return too_many_arguments(o, gv_ename(namegv));
7660 /* _ must be at the end */
7661 if (proto[1] && proto[1] != ';')
7676 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
7678 arg == 1 ? "block or sub {}" : "sub {}",
7679 gv_ename(namegv), o3);
7682 /* '*' allows any scalar type, including bareword */
7685 if (o3->op_type == OP_RV2GV)
7686 goto wrapref; /* autoconvert GLOB -> GLOBref */
7687 else if (o3->op_type == OP_CONST)
7688 o3->op_private &= ~OPpCONST_STRICT;
7689 else if (o3->op_type == OP_ENTERSUB) {
7690 /* accidental subroutine, revert to bareword */
7691 OP *gvop = ((UNOP*)o3)->op_first;
7692 if (gvop && gvop->op_type == OP_NULL) {
7693 gvop = ((UNOP*)gvop)->op_first;
7695 for (; gvop->op_sibling; gvop = gvop->op_sibling)
7698 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
7699 (gvop = ((UNOP*)gvop)->op_first) &&
7700 gvop->op_type == OP_GV)
7702 GV * const gv = cGVOPx_gv(gvop);
7703 OP * const sibling = o2->op_sibling;
7704 SV * const n = newSVpvs("");
7706 OP * const oldo2 = o2;
7710 gv_fullname4(n, gv, "", FALSE);
7711 o2 = newSVOP(OP_CONST, 0, n);
7712 op_getmad(oldo2,o2,'O');
7713 prev->op_sibling = o2;
7714 o2->op_sibling = sibling;
7730 if (contextclass++ == 0) {
7731 e = strchr(proto, ']');
7732 if (!e || e == proto)
7741 const char *p = proto;
7742 const char *const end = proto;
7744 while (*--p != '[');
7745 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
7747 gv_ename(namegv), o3);
7752 if (o3->op_type == OP_RV2GV)
7755 bad_type(arg, "symbol", gv_ename(namegv), o3);
7758 if (o3->op_type == OP_ENTERSUB)
7761 bad_type(arg, "subroutine entry", gv_ename(namegv),
7765 if (o3->op_type == OP_RV2SV ||
7766 o3->op_type == OP_PADSV ||
7767 o3->op_type == OP_HELEM ||
7768 o3->op_type == OP_AELEM)
7771 bad_type(arg, "scalar", gv_ename(namegv), o3);
7774 if (o3->op_type == OP_RV2AV ||
7775 o3->op_type == OP_PADAV)
7778 bad_type(arg, "array", gv_ename(namegv), o3);
7781 if (o3->op_type == OP_RV2HV ||
7782 o3->op_type == OP_PADHV)
7785 bad_type(arg, "hash", gv_ename(namegv), o3);
7790 OP* const sib = kid->op_sibling;
7791 kid->op_sibling = 0;
7792 o2 = newUNOP(OP_REFGEN, 0, kid);
7793 o2->op_sibling = sib;
7794 prev->op_sibling = o2;
7796 if (contextclass && e) {
7811 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
7812 gv_ename(namegv), SVfARG(cv));
7817 mod(o2, OP_ENTERSUB);
7819 o2 = o2->op_sibling;
7821 if (o2 == cvop && proto && *proto == '_') {
7822 /* generate an access to $_ */
7824 o2->op_sibling = prev->op_sibling;
7825 prev->op_sibling = o2; /* instead of cvop */
7827 if (proto && !optional && proto_end > proto &&
7828 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
7829 return too_few_arguments(o, gv_ename(namegv));
7832 OP * const oldo = o;
7836 o=newSVOP(OP_CONST, 0, newSViv(0));
7837 op_getmad(oldo,o,'O');
7843 Perl_ck_svconst(pTHX_ OP *o)
7845 PERL_UNUSED_CONTEXT;
7846 SvREADONLY_on(cSVOPo->op_sv);
7851 Perl_ck_chdir(pTHX_ OP *o)
7853 if (o->op_flags & OPf_KIDS) {
7854 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7856 if (kid && kid->op_type == OP_CONST &&
7857 (kid->op_private & OPpCONST_BARE))
7859 o->op_flags |= OPf_SPECIAL;
7860 kid->op_private &= ~OPpCONST_STRICT;
7867 Perl_ck_trunc(pTHX_ OP *o)
7869 if (o->op_flags & OPf_KIDS) {
7870 SVOP *kid = (SVOP*)cUNOPo->op_first;
7872 if (kid->op_type == OP_NULL)
7873 kid = (SVOP*)kid->op_sibling;
7874 if (kid && kid->op_type == OP_CONST &&
7875 (kid->op_private & OPpCONST_BARE))
7877 o->op_flags |= OPf_SPECIAL;
7878 kid->op_private &= ~OPpCONST_STRICT;
7885 Perl_ck_unpack(pTHX_ OP *o)
7887 OP *kid = cLISTOPo->op_first;
7888 if (kid->op_sibling) {
7889 kid = kid->op_sibling;
7890 if (!kid->op_sibling)
7891 kid->op_sibling = newDEFSVOP();
7897 Perl_ck_substr(pTHX_ OP *o)
7900 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
7901 OP *kid = cLISTOPo->op_first;
7903 if (kid->op_type == OP_NULL)
7904 kid = kid->op_sibling;
7906 kid->op_flags |= OPf_MOD;
7913 Perl_ck_each(pTHX_ OP *o)
7916 OP *kid = cLISTOPo->op_first;
7918 if (kid->op_type == OP_PADAV || kid->op_type == OP_RV2AV) {
7919 const unsigned new_type = o->op_type == OP_EACH ? OP_AEACH
7920 : o->op_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
7921 o->op_type = new_type;
7922 o->op_ppaddr = PL_ppaddr[new_type];
7924 else if (!(kid->op_type == OP_PADHV || kid->op_type == OP_RV2HV
7925 || (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE)
7927 bad_type(1, "hash or array", PL_op_desc[o->op_type], kid);
7933 /* A peephole optimizer. We visit the ops in the order they're to execute.
7934 * See the comments at the top of this file for more details about when
7935 * peep() is called */
7938 Perl_peep(pTHX_ register OP *o)
7941 register OP* oldop = NULL;
7943 if (!o || o->op_opt)
7947 SAVEVPTR(PL_curcop);
7948 for (; o; o = o->op_next) {
7951 /* By default, this op has now been optimised. A couple of cases below
7952 clear this again. */
7955 switch (o->op_type) {
7959 PL_curcop = ((COP*)o); /* for warnings */
7963 if (cSVOPo->op_private & OPpCONST_STRICT)
7964 no_bareword_allowed(o);
7966 case OP_METHOD_NAMED:
7967 /* Relocate sv to the pad for thread safety.
7968 * Despite being a "constant", the SV is written to,
7969 * for reference counts, sv_upgrade() etc. */
7971 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
7972 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
7973 /* If op_sv is already a PADTMP then it is being used by
7974 * some pad, so make a copy. */
7975 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
7976 SvREADONLY_on(PAD_SVl(ix));
7977 SvREFCNT_dec(cSVOPo->op_sv);
7979 else if (o->op_type == OP_CONST
7980 && cSVOPo->op_sv == &PL_sv_undef) {
7981 /* PL_sv_undef is hack - it's unsafe to store it in the
7982 AV that is the pad, because av_fetch treats values of
7983 PL_sv_undef as a "free" AV entry and will merrily
7984 replace them with a new SV, causing pad_alloc to think
7985 that this pad slot is free. (When, clearly, it is not)
7987 SvOK_off(PAD_SVl(ix));
7988 SvPADTMP_on(PAD_SVl(ix));
7989 SvREADONLY_on(PAD_SVl(ix));
7992 SvREFCNT_dec(PAD_SVl(ix));
7993 SvPADTMP_on(cSVOPo->op_sv);
7994 PAD_SETSV(ix, cSVOPo->op_sv);
7995 /* XXX I don't know how this isn't readonly already. */
7996 SvREADONLY_on(PAD_SVl(ix));
7998 cSVOPo->op_sv = NULL;
8005 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
8006 if (o->op_next->op_private & OPpTARGET_MY) {
8007 if (o->op_flags & OPf_STACKED) /* chained concats */
8008 break; /* ignore_optimization */
8010 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
8011 o->op_targ = o->op_next->op_targ;
8012 o->op_next->op_targ = 0;
8013 o->op_private |= OPpTARGET_MY;
8016 op_null(o->op_next);
8020 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
8021 break; /* Scalar stub must produce undef. List stub is noop */
8025 if (o->op_targ == OP_NEXTSTATE
8026 || o->op_targ == OP_DBSTATE
8027 || o->op_targ == OP_SETSTATE)
8029 PL_curcop = ((COP*)o);
8031 /* XXX: We avoid setting op_seq here to prevent later calls
8032 to peep() from mistakenly concluding that optimisation
8033 has already occurred. This doesn't fix the real problem,
8034 though (See 20010220.007). AMS 20010719 */
8035 /* op_seq functionality is now replaced by op_opt */
8042 if (oldop && o->op_next) {
8043 oldop->op_next = o->op_next;
8051 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
8052 OP* const pop = (o->op_type == OP_PADAV) ?
8053 o->op_next : o->op_next->op_next;
8055 if (pop && pop->op_type == OP_CONST &&
8056 ((PL_op = pop->op_next)) &&
8057 pop->op_next->op_type == OP_AELEM &&
8058 !(pop->op_next->op_private &
8059 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
8060 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
8065 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
8066 no_bareword_allowed(pop);
8067 if (o->op_type == OP_GV)
8068 op_null(o->op_next);
8069 op_null(pop->op_next);
8071 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
8072 o->op_next = pop->op_next->op_next;
8073 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
8074 o->op_private = (U8)i;
8075 if (o->op_type == OP_GV) {
8080 o->op_flags |= OPf_SPECIAL;
8081 o->op_type = OP_AELEMFAST;
8086 if (o->op_next->op_type == OP_RV2SV) {
8087 if (!(o->op_next->op_private & OPpDEREF)) {
8088 op_null(o->op_next);
8089 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
8091 o->op_next = o->op_next->op_next;
8092 o->op_type = OP_GVSV;
8093 o->op_ppaddr = PL_ppaddr[OP_GVSV];
8096 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
8097 GV * const gv = cGVOPo_gv;
8098 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
8099 /* XXX could check prototype here instead of just carping */
8100 SV * const sv = sv_newmortal();
8101 gv_efullname3(sv, gv, NULL);
8102 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
8103 "%"SVf"() called too early to check prototype",
8107 else if (o->op_next->op_type == OP_READLINE
8108 && o->op_next->op_next->op_type == OP_CONCAT
8109 && (o->op_next->op_next->op_flags & OPf_STACKED))
8111 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
8112 o->op_type = OP_RCATLINE;
8113 o->op_flags |= OPf_STACKED;
8114 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
8115 op_null(o->op_next->op_next);
8116 op_null(o->op_next);
8132 while (cLOGOP->op_other->op_type == OP_NULL)
8133 cLOGOP->op_other = cLOGOP->op_other->op_next;
8134 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
8139 while (cLOOP->op_redoop->op_type == OP_NULL)
8140 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
8141 peep(cLOOP->op_redoop);
8142 while (cLOOP->op_nextop->op_type == OP_NULL)
8143 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
8144 peep(cLOOP->op_nextop);
8145 while (cLOOP->op_lastop->op_type == OP_NULL)
8146 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
8147 peep(cLOOP->op_lastop);
8151 assert(!(cPMOP->op_pmflags & PMf_ONCE));
8152 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
8153 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
8154 cPMOP->op_pmstashstartu.op_pmreplstart
8155 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
8156 peep(cPMOP->op_pmstashstartu.op_pmreplstart);
8160 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
8161 && ckWARN(WARN_SYNTAX))
8163 if (o->op_next->op_sibling) {
8164 const OPCODE type = o->op_next->op_sibling->op_type;
8165 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
8166 const line_t oldline = CopLINE(PL_curcop);
8167 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
8168 Perl_warner(aTHX_ packWARN(WARN_EXEC),
8169 "Statement unlikely to be reached");
8170 Perl_warner(aTHX_ packWARN(WARN_EXEC),
8171 "\t(Maybe you meant system() when you said exec()?)\n");
8172 CopLINE_set(PL_curcop, oldline);
8183 const char *key = NULL;
8186 if (((BINOP*)o)->op_last->op_type != OP_CONST)
8189 /* Make the CONST have a shared SV */
8190 svp = cSVOPx_svp(((BINOP*)o)->op_last);
8191 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
8192 key = SvPV_const(sv, keylen);
8193 lexname = newSVpvn_share(key,
8194 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
8200 if ((o->op_private & (OPpLVAL_INTRO)))
8203 rop = (UNOP*)((BINOP*)o)->op_first;
8204 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
8206 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
8207 if (!SvPAD_TYPED(lexname))
8209 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8210 if (!fields || !GvHV(*fields))
8212 key = SvPV_const(*svp, keylen);
8213 if (!hv_fetch(GvHV(*fields), key,
8214 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8216 Perl_croak(aTHX_ "No such class field \"%s\" "
8217 "in variable %s of type %s",
8218 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
8231 SVOP *first_key_op, *key_op;
8233 if ((o->op_private & (OPpLVAL_INTRO))
8234 /* I bet there's always a pushmark... */
8235 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
8236 /* hmmm, no optimization if list contains only one key. */
8238 rop = (UNOP*)((LISTOP*)o)->op_last;
8239 if (rop->op_type != OP_RV2HV)
8241 if (rop->op_first->op_type == OP_PADSV)
8242 /* @$hash{qw(keys here)} */
8243 rop = (UNOP*)rop->op_first;
8245 /* @{$hash}{qw(keys here)} */
8246 if (rop->op_first->op_type == OP_SCOPE
8247 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
8249 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
8255 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
8256 if (!SvPAD_TYPED(lexname))
8258 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8259 if (!fields || !GvHV(*fields))
8261 /* Again guessing that the pushmark can be jumped over.... */
8262 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
8263 ->op_first->op_sibling;
8264 for (key_op = first_key_op; key_op;
8265 key_op = (SVOP*)key_op->op_sibling) {
8266 if (key_op->op_type != OP_CONST)
8268 svp = cSVOPx_svp(key_op);
8269 key = SvPV_const(*svp, keylen);
8270 if (!hv_fetch(GvHV(*fields), key,
8271 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8273 Perl_croak(aTHX_ "No such class field \"%s\" "
8274 "in variable %s of type %s",
8275 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
8282 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
8286 /* check that RHS of sort is a single plain array */
8287 OP *oright = cUNOPo->op_first;
8288 if (!oright || oright->op_type != OP_PUSHMARK)
8291 /* reverse sort ... can be optimised. */
8292 if (!cUNOPo->op_sibling) {
8293 /* Nothing follows us on the list. */
8294 OP * const reverse = o->op_next;
8296 if (reverse->op_type == OP_REVERSE &&
8297 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
8298 OP * const pushmark = cUNOPx(reverse)->op_first;
8299 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
8300 && (cUNOPx(pushmark)->op_sibling == o)) {
8301 /* reverse -> pushmark -> sort */
8302 o->op_private |= OPpSORT_REVERSE;
8304 pushmark->op_next = oright->op_next;
8310 /* make @a = sort @a act in-place */
8312 oright = cUNOPx(oright)->op_sibling;
8315 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
8316 oright = cUNOPx(oright)->op_sibling;
8320 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
8321 || oright->op_next != o
8322 || (oright->op_private & OPpLVAL_INTRO)
8326 /* o2 follows the chain of op_nexts through the LHS of the
8327 * assign (if any) to the aassign op itself */
8329 if (!o2 || o2->op_type != OP_NULL)
8332 if (!o2 || o2->op_type != OP_PUSHMARK)
8335 if (o2 && o2->op_type == OP_GV)
8338 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8339 || (o2->op_private & OPpLVAL_INTRO)
8344 if (!o2 || o2->op_type != OP_NULL)
8347 if (!o2 || o2->op_type != OP_AASSIGN
8348 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8351 /* check that the sort is the first arg on RHS of assign */
8353 o2 = cUNOPx(o2)->op_first;
8354 if (!o2 || o2->op_type != OP_NULL)
8356 o2 = cUNOPx(o2)->op_first;
8357 if (!o2 || o2->op_type != OP_PUSHMARK)
8359 if (o2->op_sibling != o)
8362 /* check the array is the same on both sides */
8363 if (oleft->op_type == OP_RV2AV) {
8364 if (oright->op_type != OP_RV2AV
8365 || !cUNOPx(oright)->op_first
8366 || cUNOPx(oright)->op_first->op_type != OP_GV
8367 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8368 cGVOPx_gv(cUNOPx(oright)->op_first)
8372 else if (oright->op_type != OP_PADAV
8373 || oright->op_targ != oleft->op_targ
8377 /* transfer MODishness etc from LHS arg to RHS arg */
8378 oright->op_flags = oleft->op_flags;
8379 o->op_private |= OPpSORT_INPLACE;
8381 /* excise push->gv->rv2av->null->aassign */
8382 o2 = o->op_next->op_next;
8383 op_null(o2); /* PUSHMARK */
8385 if (o2->op_type == OP_GV) {
8386 op_null(o2); /* GV */
8389 op_null(o2); /* RV2AV or PADAV */
8390 o2 = o2->op_next->op_next;
8391 op_null(o2); /* AASSIGN */
8393 o->op_next = o2->op_next;
8399 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
8401 LISTOP *enter, *exlist;
8403 enter = (LISTOP *) o->op_next;
8406 if (enter->op_type == OP_NULL) {
8407 enter = (LISTOP *) enter->op_next;
8411 /* for $a (...) will have OP_GV then OP_RV2GV here.
8412 for (...) just has an OP_GV. */
8413 if (enter->op_type == OP_GV) {
8414 gvop = (OP *) enter;
8415 enter = (LISTOP *) enter->op_next;
8418 if (enter->op_type == OP_RV2GV) {
8419 enter = (LISTOP *) enter->op_next;
8425 if (enter->op_type != OP_ENTERITER)
8428 iter = enter->op_next;
8429 if (!iter || iter->op_type != OP_ITER)
8432 expushmark = enter->op_first;
8433 if (!expushmark || expushmark->op_type != OP_NULL
8434 || expushmark->op_targ != OP_PUSHMARK)
8437 exlist = (LISTOP *) expushmark->op_sibling;
8438 if (!exlist || exlist->op_type != OP_NULL
8439 || exlist->op_targ != OP_LIST)
8442 if (exlist->op_last != o) {
8443 /* Mmm. Was expecting to point back to this op. */
8446 theirmark = exlist->op_first;
8447 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
8450 if (theirmark->op_sibling != o) {
8451 /* There's something between the mark and the reverse, eg
8452 for (1, reverse (...))
8457 ourmark = ((LISTOP *)o)->op_first;
8458 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
8461 ourlast = ((LISTOP *)o)->op_last;
8462 if (!ourlast || ourlast->op_next != o)
8465 rv2av = ourmark->op_sibling;
8466 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
8467 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
8468 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
8469 /* We're just reversing a single array. */
8470 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
8471 enter->op_flags |= OPf_STACKED;
8474 /* We don't have control over who points to theirmark, so sacrifice
8476 theirmark->op_next = ourmark->op_next;
8477 theirmark->op_flags = ourmark->op_flags;
8478 ourlast->op_next = gvop ? gvop : (OP *) enter;
8481 enter->op_private |= OPpITER_REVERSED;
8482 iter->op_private |= OPpITER_REVERSED;
8489 UNOP *refgen, *rv2cv;
8492 if ((o->op_flags & OPf_WANT) != OPf_WANT_VOID)
8495 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
8498 rv2gv = ((BINOP *)o)->op_last;
8499 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
8502 refgen = (UNOP *)((BINOP *)o)->op_first;
8504 if (!refgen || refgen->op_type != OP_REFGEN)
8507 exlist = (LISTOP *)refgen->op_first;
8508 if (!exlist || exlist->op_type != OP_NULL
8509 || exlist->op_targ != OP_LIST)
8512 if (exlist->op_first->op_type != OP_PUSHMARK)
8515 rv2cv = (UNOP*)exlist->op_last;
8517 if (rv2cv->op_type != OP_RV2CV)
8520 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
8521 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
8522 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
8524 o->op_private |= OPpASSIGN_CV_TO_GV;
8525 rv2gv->op_private |= OPpDONT_INIT_GV;
8526 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
8534 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
8535 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
8545 Perl_custom_op_name(pTHX_ const OP* o)
8548 const IV index = PTR2IV(o->op_ppaddr);
8552 if (!PL_custom_op_names) /* This probably shouldn't happen */
8553 return (char *)PL_op_name[OP_CUSTOM];
8555 keysv = sv_2mortal(newSViv(index));
8557 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
8559 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
8561 return SvPV_nolen(HeVAL(he));
8565 Perl_custom_op_desc(pTHX_ const OP* o)
8568 const IV index = PTR2IV(o->op_ppaddr);
8572 if (!PL_custom_op_descs)
8573 return (char *)PL_op_desc[OP_CUSTOM];
8575 keysv = sv_2mortal(newSViv(index));
8577 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
8579 return (char *)PL_op_desc[OP_CUSTOM];
8581 return SvPV_nolen(HeVAL(he));
8586 /* Efficient sub that returns a constant scalar value. */
8588 const_sv_xsub(pTHX_ CV* cv)
8595 Perl_croak(aTHX_ "usage: %s::%s()",
8596 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
8600 ST(0) = (SV*)XSANY.any_ptr;
8606 * c-indentation-style: bsd
8608 * indent-tabs-mode: t
8611 * ex: set ts=8 sts=4 sw=4 noet: