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)
120 * To make incrementing use count easy PL_OpSlab is an I32 *
121 * To make inserting the link to slab PL_OpPtr is I32 **
122 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
123 * Add an overhead for pointer to slab and round up as a number of pointers
125 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
126 if ((PL_OpSpace -= sz) < 0) {
127 #ifdef PERL_DEBUG_READONLY_OPS
128 /* We need to allocate chunk by chunk so that we can control the VM
130 PL_OpPtr = mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
131 MAP_ANON|MAP_PRIVATE, -1, 0);
133 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
134 (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
136 if(PL_OpPtr == MAP_FAILED) {
137 perror("mmap failed");
142 PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*));
147 /* We reserve the 0'th I32 sized chunk as a use count */
148 PL_OpSlab = (I32 *) PL_OpPtr;
149 /* Reduce size by the use count word, and by the size we need.
150 * Latter is to mimic the '-=' in the if() above
152 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
153 /* Allocation pointer starts at the top.
154 Theory: because we build leaves before trunk allocating at end
155 means that at run time access is cache friendly upward
157 PL_OpPtr += PERL_SLAB_SIZE;
159 #ifdef PERL_DEBUG_READONLY_OPS
160 /* We remember this slab. */
161 /* This implementation isn't efficient, but it is simple. */
162 PL_slabs = realloc(PL_slabs, sizeof(I32**) * (PL_slab_count + 1));
163 PL_slabs[PL_slab_count++] = PL_OpSlab;
164 DEBUG_m(PerlIO_printf(Perl_debug_log, "Allocate %p\n", PL_OpSlab));
167 assert( PL_OpSpace >= 0 );
168 /* Move the allocation pointer down */
170 assert( PL_OpPtr > (I32 **) PL_OpSlab );
171 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
172 (*PL_OpSlab)++; /* Increment use count of slab */
173 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
174 assert( *PL_OpSlab > 0 );
175 return (void *)(PL_OpPtr + 1);
178 #ifdef PERL_DEBUG_READONLY_OPS
180 Perl_pending_Slabs_to_ro(pTHX) {
181 /* Turn all the allocated op slabs read only. */
182 U32 count = PL_slab_count;
183 I32 **const slabs = PL_slabs;
185 /* Reset the array of pending OP slabs, as we're about to turn this lot
186 read only. Also, do it ahead of the loop in case the warn triggers,
187 and a warn handler has an eval */
192 /* Force a new slab for any further allocation. */
196 void *const start = slabs[count];
197 const size_t size = PERL_SLAB_SIZE* sizeof(I32*);
198 if(mprotect(start, size, PROT_READ)) {
199 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d",
200 start, (unsigned long) size, errno);
208 S_Slab_to_rw(pTHX_ void *op)
210 I32 * const * const ptr = (I32 **) op;
211 I32 * const slab = ptr[-1];
212 assert( ptr-1 > (I32 **) slab );
213 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
215 if(mprotect(slab, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE)) {
216 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d",
217 slab, (unsigned long) PERL_SLAB_SIZE*sizeof(I32*), errno);
222 Perl_op_refcnt_inc(pTHX_ OP *o)
233 Perl_op_refcnt_dec(pTHX_ OP *o)
239 # define Slab_to_rw(op)
243 Perl_Slab_Free(pTHX_ void *op)
245 I32 * const * const ptr = (I32 **) op;
246 I32 * const slab = ptr[-1];
247 assert( ptr-1 > (I32 **) slab );
248 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
251 if (--(*slab) == 0) {
253 # define PerlMemShared PerlMem
256 #ifdef PERL_DEBUG_READONLY_OPS
257 U32 count = PL_slab_count;
258 /* Need to remove this slab from our list of slabs */
261 if (PL_slabs[count] == slab) {
262 /* Found it. Move the entry at the end to overwrite it. */
263 DEBUG_m(PerlIO_printf(Perl_debug_log,
264 "Deallocate %p by moving %p from %lu to %lu\n",
266 PL_slabs[PL_slab_count - 1],
267 PL_slab_count, count));
268 PL_slabs[count] = PL_slabs[--PL_slab_count];
269 /* Could realloc smaller at this point, but probably not
271 if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
272 perror("munmap failed");
280 PerlMemShared_free(slab);
282 if (slab == PL_OpSlab) {
289 * In the following definition, the ", (OP*)0" is just to make the compiler
290 * think the expression is of the right type: croak actually does a Siglongjmp.
292 #define CHECKOP(type,o) \
293 ((PL_op_mask && PL_op_mask[type]) \
294 ? ( op_free((OP*)o), \
295 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
297 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
299 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
302 S_gv_ename(pTHX_ GV *gv)
304 SV* const tmpsv = sv_newmortal();
305 gv_efullname3(tmpsv, gv, NULL);
306 return SvPV_nolen_const(tmpsv);
310 S_no_fh_allowed(pTHX_ OP *o)
312 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
318 S_too_few_arguments(pTHX_ OP *o, const char *name)
320 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
325 S_too_many_arguments(pTHX_ OP *o, const char *name)
327 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
332 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
334 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
335 (int)n, name, t, OP_DESC(kid)));
339 S_no_bareword_allowed(pTHX_ const OP *o)
342 return; /* various ok barewords are hidden in extra OP_NULL */
343 qerror(Perl_mess(aTHX_
344 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
348 /* "register" allocation */
351 Perl_allocmy(pTHX_ const char *const name)
355 const bool is_our = (PL_parser->in_my == KEY_our);
357 /* complain about "my $<special_var>" etc etc */
361 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
362 (name[1] == '_' && (*name == '$' || name[2]))))
364 /* name[2] is true if strlen(name) > 2 */
365 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
366 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%s in \"%s\"",
367 name[0], toCTRL(name[1]), name + 2,
368 PL_parser->in_my == KEY_state ? "state" : "my"));
370 yyerror(Perl_form(aTHX_ "Can't use global %s in \"%s\"",name,
371 PL_parser->in_my == KEY_state ? "state" : "my"));
375 /* check for duplicate declaration */
376 pad_check_dup(name, is_our, (PL_curstash ? PL_curstash : PL_defstash));
378 if (PL_parser->in_my_stash && *name != '$') {
379 yyerror(Perl_form(aTHX_
380 "Can't declare class for non-scalar %s in \"%s\"",
383 : PL_parser->in_my == KEY_state ? "state" : "my"));
386 /* allocate a spare slot and store the name in that slot */
388 off = pad_add_name(name,
389 PL_parser->in_my_stash,
391 /* $_ is always in main::, even with our */
392 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
396 PL_parser->in_my == KEY_state
398 /* anon sub prototypes contains state vars should always be cloned,
399 * otherwise the state var would be shared between anon subs */
401 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
402 CvCLONE_on(PL_compcv);
407 /* free the body of an op without examining its contents.
408 * Always use this rather than FreeOp directly */
411 S_op_destroy(pTHX_ OP *o)
413 if (o->op_latefree) {
421 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
423 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
429 Perl_op_free(pTHX_ OP *o)
436 if (o->op_latefreed) {
443 if (o->op_private & OPpREFCOUNTED) {
454 refcnt = OpREFCNT_dec(o);
457 /* Need to find and remove any pattern match ops from the list
458 we maintain for reset(). */
459 find_and_forget_pmops(o);
469 if (o->op_flags & OPf_KIDS) {
470 register OP *kid, *nextkid;
471 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
472 nextkid = kid->op_sibling; /* Get before next freeing kid */
477 type = (OPCODE)o->op_targ;
479 #ifdef PERL_DEBUG_READONLY_OPS
483 /* COP* is not cleared by op_clear() so that we may track line
484 * numbers etc even after null() */
485 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE) {
490 if (o->op_latefree) {
496 #ifdef DEBUG_LEAKING_SCALARS
503 Perl_op_clear(pTHX_ OP *o)
508 /* if (o->op_madprop && o->op_madprop->mad_next)
510 /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
511 "modification of a read only value" for a reason I can't fathom why.
512 It's the "" stringification of $_, where $_ was set to '' in a foreach
513 loop, but it defies simplification into a small test case.
514 However, commenting them out has caused ext/List/Util/t/weak.t to fail
517 mad_free(o->op_madprop);
523 switch (o->op_type) {
524 case OP_NULL: /* Was holding old type, if any. */
525 if (PL_madskills && o->op_targ != OP_NULL) {
526 o->op_type = o->op_targ;
530 case OP_ENTEREVAL: /* Was holding hints. */
534 if (!(o->op_flags & OPf_REF)
535 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
541 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
542 /* not an OP_PADAV replacement */
544 if (cPADOPo->op_padix > 0) {
545 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
546 * may still exist on the pad */
547 pad_swipe(cPADOPo->op_padix, TRUE);
548 cPADOPo->op_padix = 0;
551 SvREFCNT_dec(cSVOPo->op_sv);
552 cSVOPo->op_sv = NULL;
556 case OP_METHOD_NAMED:
558 SvREFCNT_dec(cSVOPo->op_sv);
559 cSVOPo->op_sv = NULL;
562 Even if op_clear does a pad_free for the target of the op,
563 pad_free doesn't actually remove the sv that exists in the pad;
564 instead it lives on. This results in that it could be reused as
565 a target later on when the pad was reallocated.
568 pad_swipe(o->op_targ,1);
577 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
581 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
583 if (cPADOPo->op_padix > 0) {
584 pad_swipe(cPADOPo->op_padix, TRUE);
585 cPADOPo->op_padix = 0;
588 SvREFCNT_dec(cSVOPo->op_sv);
589 cSVOPo->op_sv = NULL;
593 PerlMemShared_free(cPVOPo->op_pv);
594 cPVOPo->op_pv = NULL;
598 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
602 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
603 /* No GvIN_PAD_off here, because other references may still
604 * exist on the pad */
605 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
608 SvREFCNT_dec((SV*)cPMOPo->op_pmreplrootu.op_pmtargetgv);
614 forget_pmop(cPMOPo, 1);
615 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
616 /* we use the "SAFE" version of the PM_ macros here
617 * since sv_clean_all might release some PMOPs
618 * after PL_regex_padav has been cleared
619 * and the clearing of PL_regex_padav needs to
620 * happen before sv_clean_all
622 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
623 PM_SETRE_SAFE(cPMOPo, NULL);
625 if(PL_regex_pad) { /* We could be in destruction */
626 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
627 SvREADONLY_off(PL_regex_pad[(cPMOPo)->op_pmoffset]);
628 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
629 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
636 if (o->op_targ > 0) {
637 pad_free(o->op_targ);
643 S_cop_free(pTHX_ COP* cop)
648 if (! specialWARN(cop->cop_warnings))
649 PerlMemShared_free(cop->cop_warnings);
650 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
654 S_forget_pmop(pTHX_ PMOP *const o
660 HV * const pmstash = PmopSTASH(o);
661 if (pmstash && !SvIS_FREED(pmstash)) {
662 MAGIC * const mg = mg_find((SV*)pmstash, PERL_MAGIC_symtab);
664 PMOP **const array = (PMOP**) mg->mg_ptr;
665 U32 count = mg->mg_len / sizeof(PMOP**);
670 /* Found it. Move the entry at the end to overwrite it. */
671 array[i] = array[--count];
672 mg->mg_len = count * sizeof(PMOP**);
673 /* Could realloc smaller at this point always, but probably
674 not worth it. Probably worth free()ing if we're the
677 Safefree(mg->mg_ptr);
694 S_find_and_forget_pmops(pTHX_ OP *o)
696 if (o->op_flags & OPf_KIDS) {
697 OP *kid = cUNOPo->op_first;
699 switch (kid->op_type) {
704 forget_pmop((PMOP*)kid, 0);
706 find_and_forget_pmops(kid);
707 kid = kid->op_sibling;
713 Perl_op_null(pTHX_ OP *o)
716 if (o->op_type == OP_NULL)
720 o->op_targ = o->op_type;
721 o->op_type = OP_NULL;
722 o->op_ppaddr = PL_ppaddr[OP_NULL];
726 Perl_op_refcnt_lock(pTHX)
734 Perl_op_refcnt_unlock(pTHX)
741 /* Contextualizers */
743 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
746 Perl_linklist(pTHX_ OP *o)
753 /* establish postfix order */
754 first = cUNOPo->op_first;
757 o->op_next = LINKLIST(first);
760 if (kid->op_sibling) {
761 kid->op_next = LINKLIST(kid->op_sibling);
762 kid = kid->op_sibling;
776 Perl_scalarkids(pTHX_ OP *o)
778 if (o && o->op_flags & OPf_KIDS) {
780 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
787 S_scalarboolean(pTHX_ OP *o)
790 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
791 if (ckWARN(WARN_SYNTAX)) {
792 const line_t oldline = CopLINE(PL_curcop);
794 if (PL_parser && PL_parser->copline != NOLINE)
795 CopLINE_set(PL_curcop, PL_parser->copline);
796 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
797 CopLINE_set(PL_curcop, oldline);
804 Perl_scalar(pTHX_ OP *o)
809 /* assumes no premature commitment */
810 if (!o || (PL_parser && PL_parser->error_count)
811 || (o->op_flags & OPf_WANT)
812 || o->op_type == OP_RETURN)
817 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
819 switch (o->op_type) {
821 scalar(cBINOPo->op_first);
826 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
830 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
831 if (!kPMOP->op_pmreplrootu.op_pmreplroot)
832 deprecate_old("implicit split to @_");
840 if (o->op_flags & OPf_KIDS) {
841 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
847 kid = cLISTOPo->op_first;
849 while ((kid = kid->op_sibling)) {
855 PL_curcop = &PL_compiling;
860 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
866 PL_curcop = &PL_compiling;
869 if (ckWARN(WARN_VOID))
870 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
876 Perl_scalarvoid(pTHX_ OP *o)
880 const char* useless = NULL;
884 /* trailing mad null ops don't count as "there" for void processing */
886 o->op_type != OP_NULL &&
888 o->op_sibling->op_type == OP_NULL)
891 for (sib = o->op_sibling;
892 sib && sib->op_type == OP_NULL;
893 sib = sib->op_sibling) ;
899 if (o->op_type == OP_NEXTSTATE
900 || o->op_type == OP_SETSTATE
901 || o->op_type == OP_DBSTATE
902 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
903 || o->op_targ == OP_SETSTATE
904 || o->op_targ == OP_DBSTATE)))
905 PL_curcop = (COP*)o; /* for warning below */
907 /* assumes no premature commitment */
908 want = o->op_flags & OPf_WANT;
909 if ((want && want != OPf_WANT_SCALAR)
910 || (PL_parser && PL_parser->error_count)
911 || o->op_type == OP_RETURN)
916 if ((o->op_private & OPpTARGET_MY)
917 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
919 return scalar(o); /* As if inside SASSIGN */
922 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
924 switch (o->op_type) {
926 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
930 if (o->op_flags & OPf_STACKED)
934 if (o->op_private == 4)
1006 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1007 useless = OP_DESC(o);
1011 kid = cUNOPo->op_first;
1012 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1013 kid->op_type != OP_TRANS) {
1016 useless = "negative pattern binding (!~)";
1023 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1024 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1025 useless = "a variable";
1030 if (cSVOPo->op_private & OPpCONST_STRICT)
1031 no_bareword_allowed(o);
1033 if (ckWARN(WARN_VOID)) {
1034 useless = "a constant";
1035 if (o->op_private & OPpCONST_ARYBASE)
1037 /* don't warn on optimised away booleans, eg
1038 * use constant Foo, 5; Foo || print; */
1039 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1041 /* the constants 0 and 1 are permitted as they are
1042 conventionally used as dummies in constructs like
1043 1 while some_condition_with_side_effects; */
1044 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1046 else if (SvPOK(sv)) {
1047 /* perl4's way of mixing documentation and code
1048 (before the invention of POD) was based on a
1049 trick to mix nroff and perl code. The trick was
1050 built upon these three nroff macros being used in
1051 void context. The pink camel has the details in
1052 the script wrapman near page 319. */
1053 const char * const maybe_macro = SvPVX_const(sv);
1054 if (strnEQ(maybe_macro, "di", 2) ||
1055 strnEQ(maybe_macro, "ds", 2) ||
1056 strnEQ(maybe_macro, "ig", 2))
1061 op_null(o); /* don't execute or even remember it */
1065 o->op_type = OP_PREINC; /* pre-increment is faster */
1066 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1070 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1071 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1075 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1076 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1080 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1081 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1090 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1095 if (o->op_flags & OPf_STACKED)
1102 if (!(o->op_flags & OPf_KIDS))
1113 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1120 /* all requires must return a boolean value */
1121 o->op_flags &= ~OPf_WANT;
1126 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
1127 if (!kPMOP->op_pmreplrootu.op_pmreplroot)
1128 deprecate_old("implicit split to @_");
1132 if (useless && ckWARN(WARN_VOID))
1133 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1138 Perl_listkids(pTHX_ OP *o)
1140 if (o && o->op_flags & OPf_KIDS) {
1142 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1149 Perl_list(pTHX_ OP *o)
1154 /* assumes no premature commitment */
1155 if (!o || (o->op_flags & OPf_WANT)
1156 || (PL_parser && PL_parser->error_count)
1157 || o->op_type == OP_RETURN)
1162 if ((o->op_private & OPpTARGET_MY)
1163 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1165 return o; /* As if inside SASSIGN */
1168 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1170 switch (o->op_type) {
1173 list(cBINOPo->op_first);
1178 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1186 if (!(o->op_flags & OPf_KIDS))
1188 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1189 list(cBINOPo->op_first);
1190 return gen_constant_list(o);
1197 kid = cLISTOPo->op_first;
1199 while ((kid = kid->op_sibling)) {
1200 if (kid->op_sibling)
1205 PL_curcop = &PL_compiling;
1209 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1210 if (kid->op_sibling)
1215 PL_curcop = &PL_compiling;
1218 /* all requires must return a boolean value */
1219 o->op_flags &= ~OPf_WANT;
1226 Perl_scalarseq(pTHX_ OP *o)
1230 const OPCODE type = o->op_type;
1232 if (type == OP_LINESEQ || type == OP_SCOPE ||
1233 type == OP_LEAVE || type == OP_LEAVETRY)
1236 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1237 if (kid->op_sibling) {
1241 PL_curcop = &PL_compiling;
1243 o->op_flags &= ~OPf_PARENS;
1244 if (PL_hints & HINT_BLOCK_SCOPE)
1245 o->op_flags |= OPf_PARENS;
1248 o = newOP(OP_STUB, 0);
1253 S_modkids(pTHX_ OP *o, I32 type)
1255 if (o && o->op_flags & OPf_KIDS) {
1257 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1263 /* Propagate lvalue ("modifiable") context to an op and its children.
1264 * 'type' represents the context type, roughly based on the type of op that
1265 * would do the modifying, although local() is represented by OP_NULL.
1266 * It's responsible for detecting things that can't be modified, flag
1267 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1268 * might have to vivify a reference in $x), and so on.
1270 * For example, "$a+1 = 2" would cause mod() to be called with o being
1271 * OP_ADD and type being OP_SASSIGN, and would output an error.
1275 Perl_mod(pTHX_ OP *o, I32 type)
1279 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1282 if (!o || (PL_parser && PL_parser->error_count))
1285 if ((o->op_private & OPpTARGET_MY)
1286 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1291 switch (o->op_type) {
1297 if (!(o->op_private & OPpCONST_ARYBASE))
1300 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1301 CopARYBASE_set(&PL_compiling,
1302 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1306 SAVECOPARYBASE(&PL_compiling);
1307 CopARYBASE_set(&PL_compiling, 0);
1309 else if (type == OP_REFGEN)
1312 Perl_croak(aTHX_ "That use of $[ is unsupported");
1315 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1319 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1320 !(o->op_flags & OPf_STACKED)) {
1321 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1322 /* The default is to set op_private to the number of children,
1323 which for a UNOP such as RV2CV is always 1. And w're using
1324 the bit for a flag in RV2CV, so we need it clear. */
1325 o->op_private &= ~1;
1326 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1327 assert(cUNOPo->op_first->op_type == OP_NULL);
1328 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1331 else if (o->op_private & OPpENTERSUB_NOMOD)
1333 else { /* lvalue subroutine call */
1334 o->op_private |= OPpLVAL_INTRO;
1335 PL_modcount = RETURN_UNLIMITED_NUMBER;
1336 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1337 /* Backward compatibility mode: */
1338 o->op_private |= OPpENTERSUB_INARGS;
1341 else { /* Compile-time error message: */
1342 OP *kid = cUNOPo->op_first;
1346 if (kid->op_type != OP_PUSHMARK) {
1347 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1349 "panic: unexpected lvalue entersub "
1350 "args: type/targ %ld:%"UVuf,
1351 (long)kid->op_type, (UV)kid->op_targ);
1352 kid = kLISTOP->op_first;
1354 while (kid->op_sibling)
1355 kid = kid->op_sibling;
1356 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1358 if (kid->op_type == OP_METHOD_NAMED
1359 || kid->op_type == OP_METHOD)
1363 NewOp(1101, newop, 1, UNOP);
1364 newop->op_type = OP_RV2CV;
1365 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1366 newop->op_first = NULL;
1367 newop->op_next = (OP*)newop;
1368 kid->op_sibling = (OP*)newop;
1369 newop->op_private |= OPpLVAL_INTRO;
1370 newop->op_private &= ~1;
1374 if (kid->op_type != OP_RV2CV)
1376 "panic: unexpected lvalue entersub "
1377 "entry via type/targ %ld:%"UVuf,
1378 (long)kid->op_type, (UV)kid->op_targ);
1379 kid->op_private |= OPpLVAL_INTRO;
1380 break; /* Postpone until runtime */
1384 kid = kUNOP->op_first;
1385 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1386 kid = kUNOP->op_first;
1387 if (kid->op_type == OP_NULL)
1389 "Unexpected constant lvalue entersub "
1390 "entry via type/targ %ld:%"UVuf,
1391 (long)kid->op_type, (UV)kid->op_targ);
1392 if (kid->op_type != OP_GV) {
1393 /* Restore RV2CV to check lvalueness */
1395 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1396 okid->op_next = kid->op_next;
1397 kid->op_next = okid;
1400 okid->op_next = NULL;
1401 okid->op_type = OP_RV2CV;
1403 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1404 okid->op_private |= OPpLVAL_INTRO;
1405 okid->op_private &= ~1;
1409 cv = GvCV(kGVOP_gv);
1419 /* grep, foreach, subcalls, refgen */
1420 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1422 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1423 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1425 : (o->op_type == OP_ENTERSUB
1426 ? "non-lvalue subroutine call"
1428 type ? PL_op_desc[type] : "local"));
1442 case OP_RIGHT_SHIFT:
1451 if (!(o->op_flags & OPf_STACKED))
1458 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1464 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1465 PL_modcount = RETURN_UNLIMITED_NUMBER;
1466 return o; /* Treat \(@foo) like ordinary list. */
1470 if (scalar_mod_type(o, type))
1472 ref(cUNOPo->op_first, o->op_type);
1476 if (type == OP_LEAVESUBLV)
1477 o->op_private |= OPpMAYBE_LVSUB;
1483 PL_modcount = RETURN_UNLIMITED_NUMBER;
1486 ref(cUNOPo->op_first, o->op_type);
1491 PL_hints |= HINT_BLOCK_SCOPE;
1506 PL_modcount = RETURN_UNLIMITED_NUMBER;
1507 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1508 return o; /* Treat \(@foo) like ordinary list. */
1509 if (scalar_mod_type(o, type))
1511 if (type == OP_LEAVESUBLV)
1512 o->op_private |= OPpMAYBE_LVSUB;
1516 if (!type) /* local() */
1517 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1518 PAD_COMPNAME_PV(o->op_targ));
1526 if (type != OP_SASSIGN)
1530 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1535 if (type == OP_LEAVESUBLV)
1536 o->op_private |= OPpMAYBE_LVSUB;
1538 pad_free(o->op_targ);
1539 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1540 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1541 if (o->op_flags & OPf_KIDS)
1542 mod(cBINOPo->op_first->op_sibling, type);
1547 ref(cBINOPo->op_first, o->op_type);
1548 if (type == OP_ENTERSUB &&
1549 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1550 o->op_private |= OPpLVAL_DEFER;
1551 if (type == OP_LEAVESUBLV)
1552 o->op_private |= OPpMAYBE_LVSUB;
1562 if (o->op_flags & OPf_KIDS)
1563 mod(cLISTOPo->op_last, type);
1568 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1570 else if (!(o->op_flags & OPf_KIDS))
1572 if (o->op_targ != OP_LIST) {
1573 mod(cBINOPo->op_first, type);
1579 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1584 if (type != OP_LEAVESUBLV)
1586 break; /* mod()ing was handled by ck_return() */
1589 /* [20011101.069] File test operators interpret OPf_REF to mean that
1590 their argument is a filehandle; thus \stat(".") should not set
1592 if (type == OP_REFGEN &&
1593 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1596 if (type != OP_LEAVESUBLV)
1597 o->op_flags |= OPf_MOD;
1599 if (type == OP_AASSIGN || type == OP_SASSIGN)
1600 o->op_flags |= OPf_SPECIAL|OPf_REF;
1601 else if (!type) { /* local() */
1604 o->op_private |= OPpLVAL_INTRO;
1605 o->op_flags &= ~OPf_SPECIAL;
1606 PL_hints |= HINT_BLOCK_SCOPE;
1611 if (ckWARN(WARN_SYNTAX)) {
1612 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1613 "Useless localization of %s", OP_DESC(o));
1617 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1618 && type != OP_LEAVESUBLV)
1619 o->op_flags |= OPf_REF;
1624 S_scalar_mod_type(const OP *o, I32 type)
1628 if (o->op_type == OP_RV2GV)
1652 case OP_RIGHT_SHIFT:
1672 S_is_handle_constructor(const OP *o, I32 numargs)
1674 switch (o->op_type) {
1682 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1695 Perl_refkids(pTHX_ OP *o, I32 type)
1697 if (o && o->op_flags & OPf_KIDS) {
1699 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1706 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1711 if (!o || (PL_parser && PL_parser->error_count))
1714 switch (o->op_type) {
1716 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1717 !(o->op_flags & OPf_STACKED)) {
1718 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1719 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1720 assert(cUNOPo->op_first->op_type == OP_NULL);
1721 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1722 o->op_flags |= OPf_SPECIAL;
1723 o->op_private &= ~1;
1728 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1729 doref(kid, type, set_op_ref);
1732 if (type == OP_DEFINED)
1733 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1734 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1737 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1738 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1739 : type == OP_RV2HV ? OPpDEREF_HV
1741 o->op_flags |= OPf_MOD;
1748 o->op_flags |= OPf_REF;
1751 if (type == OP_DEFINED)
1752 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1753 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1759 o->op_flags |= OPf_REF;
1764 if (!(o->op_flags & OPf_KIDS))
1766 doref(cBINOPo->op_first, type, set_op_ref);
1770 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1771 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1772 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1773 : type == OP_RV2HV ? OPpDEREF_HV
1775 o->op_flags |= OPf_MOD;
1785 if (!(o->op_flags & OPf_KIDS))
1787 doref(cLISTOPo->op_last, type, set_op_ref);
1797 S_dup_attrlist(pTHX_ OP *o)
1802 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1803 * where the first kid is OP_PUSHMARK and the remaining ones
1804 * are OP_CONST. We need to push the OP_CONST values.
1806 if (o->op_type == OP_CONST)
1807 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1809 else if (o->op_type == OP_NULL)
1813 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1815 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1816 if (o->op_type == OP_CONST)
1817 rop = append_elem(OP_LIST, rop,
1818 newSVOP(OP_CONST, o->op_flags,
1819 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1826 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1831 /* fake up C<use attributes $pkg,$rv,@attrs> */
1832 ENTER; /* need to protect against side-effects of 'use' */
1833 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1835 #define ATTRSMODULE "attributes"
1836 #define ATTRSMODULE_PM "attributes.pm"
1839 /* Don't force the C<use> if we don't need it. */
1840 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1841 if (svp && *svp != &PL_sv_undef)
1842 NOOP; /* already in %INC */
1844 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1845 newSVpvs(ATTRSMODULE), NULL);
1848 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1849 newSVpvs(ATTRSMODULE),
1851 prepend_elem(OP_LIST,
1852 newSVOP(OP_CONST, 0, stashsv),
1853 prepend_elem(OP_LIST,
1854 newSVOP(OP_CONST, 0,
1856 dup_attrlist(attrs))));
1862 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1865 OP *pack, *imop, *arg;
1871 assert(target->op_type == OP_PADSV ||
1872 target->op_type == OP_PADHV ||
1873 target->op_type == OP_PADAV);
1875 /* Ensure that attributes.pm is loaded. */
1876 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1878 /* Need package name for method call. */
1879 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1881 /* Build up the real arg-list. */
1882 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1884 arg = newOP(OP_PADSV, 0);
1885 arg->op_targ = target->op_targ;
1886 arg = prepend_elem(OP_LIST,
1887 newSVOP(OP_CONST, 0, stashsv),
1888 prepend_elem(OP_LIST,
1889 newUNOP(OP_REFGEN, 0,
1890 mod(arg, OP_REFGEN)),
1891 dup_attrlist(attrs)));
1893 /* Fake up a method call to import */
1894 meth = newSVpvs_share("import");
1895 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1896 append_elem(OP_LIST,
1897 prepend_elem(OP_LIST, pack, list(arg)),
1898 newSVOP(OP_METHOD_NAMED, 0, meth)));
1899 imop->op_private |= OPpENTERSUB_NOMOD;
1901 /* Combine the ops. */
1902 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1906 =notfor apidoc apply_attrs_string
1908 Attempts to apply a list of attributes specified by the C<attrstr> and
1909 C<len> arguments to the subroutine identified by the C<cv> argument which
1910 is expected to be associated with the package identified by the C<stashpv>
1911 argument (see L<attributes>). It gets this wrong, though, in that it
1912 does not correctly identify the boundaries of the individual attribute
1913 specifications within C<attrstr>. This is not really intended for the
1914 public API, but has to be listed here for systems such as AIX which
1915 need an explicit export list for symbols. (It's called from XS code
1916 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1917 to respect attribute syntax properly would be welcome.
1923 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1924 const char *attrstr, STRLEN len)
1929 len = strlen(attrstr);
1933 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1935 const char * const sstr = attrstr;
1936 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1937 attrs = append_elem(OP_LIST, attrs,
1938 newSVOP(OP_CONST, 0,
1939 newSVpvn(sstr, attrstr-sstr)));
1943 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1944 newSVpvs(ATTRSMODULE),
1945 NULL, prepend_elem(OP_LIST,
1946 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1947 prepend_elem(OP_LIST,
1948 newSVOP(OP_CONST, 0,
1954 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1959 if (!o || (PL_parser && PL_parser->error_count))
1963 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
1964 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
1968 if (type == OP_LIST) {
1970 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1971 my_kid(kid, attrs, imopsp);
1972 } else if (type == OP_UNDEF
1978 } else if (type == OP_RV2SV || /* "our" declaration */
1980 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1981 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1982 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1984 PL_parser->in_my == KEY_our
1986 : PL_parser->in_my == KEY_state ? "state" : "my"));
1988 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1989 PL_parser->in_my = FALSE;
1990 PL_parser->in_my_stash = NULL;
1991 apply_attrs(GvSTASH(gv),
1992 (type == OP_RV2SV ? GvSV(gv) :
1993 type == OP_RV2AV ? (SV*)GvAV(gv) :
1994 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1997 o->op_private |= OPpOUR_INTRO;
2000 else if (type != OP_PADSV &&
2003 type != OP_PUSHMARK)
2005 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2007 PL_parser->in_my == KEY_our
2009 : PL_parser->in_my == KEY_state ? "state" : "my"));
2012 else if (attrs && type != OP_PUSHMARK) {
2015 PL_parser->in_my = FALSE;
2016 PL_parser->in_my_stash = NULL;
2018 /* check for C<my Dog $spot> when deciding package */
2019 stash = PAD_COMPNAME_TYPE(o->op_targ);
2021 stash = PL_curstash;
2022 apply_attrs_my(stash, o, attrs, imopsp);
2024 o->op_flags |= OPf_MOD;
2025 o->op_private |= OPpLVAL_INTRO;
2026 if (PL_parser->in_my == KEY_state)
2027 o->op_private |= OPpPAD_STATE;
2032 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2036 int maybe_scalar = 0;
2038 /* [perl #17376]: this appears to be premature, and results in code such as
2039 C< our(%x); > executing in list mode rather than void mode */
2041 if (o->op_flags & OPf_PARENS)
2051 o = my_kid(o, attrs, &rops);
2053 if (maybe_scalar && o->op_type == OP_PADSV) {
2054 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
2055 o->op_private |= OPpLVAL_INTRO;
2058 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
2060 PL_parser->in_my = FALSE;
2061 PL_parser->in_my_stash = NULL;
2066 Perl_my(pTHX_ OP *o)
2068 return my_attrs(o, NULL);
2072 Perl_sawparens(pTHX_ OP *o)
2074 PERL_UNUSED_CONTEXT;
2076 o->op_flags |= OPf_PARENS;
2081 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2085 const OPCODE ltype = left->op_type;
2086 const OPCODE rtype = right->op_type;
2088 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2089 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2091 const char * const desc
2092 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
2093 ? (int)rtype : OP_MATCH];
2094 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2095 ? "@array" : "%hash");
2096 Perl_warner(aTHX_ packWARN(WARN_MISC),
2097 "Applying %s to %s will act on scalar(%s)",
2098 desc, sample, sample);
2101 if (rtype == OP_CONST &&
2102 cSVOPx(right)->op_private & OPpCONST_BARE &&
2103 cSVOPx(right)->op_private & OPpCONST_STRICT)
2105 no_bareword_allowed(right);
2108 ismatchop = rtype == OP_MATCH ||
2109 rtype == OP_SUBST ||
2111 if (ismatchop && right->op_private & OPpTARGET_MY) {
2113 right->op_private &= ~OPpTARGET_MY;
2115 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2118 right->op_flags |= OPf_STACKED;
2119 if (rtype != OP_MATCH &&
2120 ! (rtype == OP_TRANS &&
2121 right->op_private & OPpTRANS_IDENTICAL))
2122 newleft = mod(left, rtype);
2125 if (right->op_type == OP_TRANS)
2126 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2128 o = prepend_elem(rtype, scalar(newleft), right);
2130 return newUNOP(OP_NOT, 0, scalar(o));
2134 return bind_match(type, left,
2135 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2139 Perl_invert(pTHX_ OP *o)
2143 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2147 Perl_scope(pTHX_ OP *o)
2151 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2152 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2153 o->op_type = OP_LEAVE;
2154 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2156 else if (o->op_type == OP_LINESEQ) {
2158 o->op_type = OP_SCOPE;
2159 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2160 kid = ((LISTOP*)o)->op_first;
2161 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2164 /* The following deals with things like 'do {1 for 1}' */
2165 kid = kid->op_sibling;
2167 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2172 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2178 Perl_block_start(pTHX_ int full)
2181 const int retval = PL_savestack_ix;
2182 pad_block_start(full);
2184 PL_hints &= ~HINT_BLOCK_SCOPE;
2185 SAVECOMPILEWARNINGS();
2186 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2191 Perl_block_end(pTHX_ I32 floor, OP *seq)
2194 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2195 OP* const retval = scalarseq(seq);
2197 CopHINTS_set(&PL_compiling, PL_hints);
2199 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2208 const PADOFFSET offset = pad_findmy("$_");
2209 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2210 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2213 OP * const o = newOP(OP_PADSV, 0);
2214 o->op_targ = offset;
2220 Perl_newPROG(pTHX_ OP *o)
2226 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2227 ((PL_in_eval & EVAL_KEEPERR)
2228 ? OPf_SPECIAL : 0), o);
2229 PL_eval_start = linklist(PL_eval_root);
2230 PL_eval_root->op_private |= OPpREFCOUNTED;
2231 OpREFCNT_set(PL_eval_root, 1);
2232 PL_eval_root->op_next = 0;
2233 CALL_PEEP(PL_eval_start);
2236 if (o->op_type == OP_STUB) {
2237 PL_comppad_name = 0;
2239 S_op_destroy(aTHX_ o);
2242 PL_main_root = scope(sawparens(scalarvoid(o)));
2243 PL_curcop = &PL_compiling;
2244 PL_main_start = LINKLIST(PL_main_root);
2245 PL_main_root->op_private |= OPpREFCOUNTED;
2246 OpREFCNT_set(PL_main_root, 1);
2247 PL_main_root->op_next = 0;
2248 CALL_PEEP(PL_main_start);
2251 /* Register with debugger */
2254 = Perl_get_cvn_flags(aTHX_ STR_WITH_LEN("DB::postponed"), 0);
2258 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2260 call_sv((SV*)cv, G_DISCARD);
2267 Perl_localize(pTHX_ OP *o, I32 lex)
2270 if (o->op_flags & OPf_PARENS)
2271 /* [perl #17376]: this appears to be premature, and results in code such as
2272 C< our(%x); > executing in list mode rather than void mode */
2279 if ( PL_parser->bufptr > PL_parser->oldbufptr
2280 && PL_parser->bufptr[-1] == ','
2281 && ckWARN(WARN_PARENTHESIS))
2283 char *s = PL_parser->bufptr;
2286 /* some heuristics to detect a potential error */
2287 while (*s && (strchr(", \t\n", *s)))
2291 if (*s && strchr("@$%*", *s) && *++s
2292 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2295 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2297 while (*s && (strchr(", \t\n", *s)))
2303 if (sigil && (*s == ';' || *s == '=')) {
2304 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2305 "Parentheses missing around \"%s\" list",
2307 ? (PL_parser->in_my == KEY_our
2309 : PL_parser->in_my == KEY_state
2319 o = mod(o, OP_NULL); /* a bit kludgey */
2320 PL_parser->in_my = FALSE;
2321 PL_parser->in_my_stash = NULL;
2326 Perl_jmaybe(pTHX_ OP *o)
2328 if (o->op_type == OP_LIST) {
2330 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2331 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2337 Perl_fold_constants(pTHX_ register OP *o)
2342 VOL I32 type = o->op_type;
2347 SV * const oldwarnhook = PL_warnhook;
2348 SV * const olddiehook = PL_diehook;
2351 if (PL_opargs[type] & OA_RETSCALAR)
2353 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2354 o->op_targ = pad_alloc(type, SVs_PADTMP);
2356 /* integerize op, unless it happens to be C<-foo>.
2357 * XXX should pp_i_negate() do magic string negation instead? */
2358 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2359 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2360 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2362 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2365 if (!(PL_opargs[type] & OA_FOLDCONST))
2370 /* XXX might want a ck_negate() for this */
2371 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2382 /* XXX what about the numeric ops? */
2383 if (PL_hints & HINT_LOCALE)
2387 if (PL_parser && PL_parser->error_count)
2388 goto nope; /* Don't try to run w/ errors */
2390 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2391 const OPCODE type = curop->op_type;
2392 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2394 type != OP_SCALAR &&
2396 type != OP_PUSHMARK)
2402 curop = LINKLIST(o);
2403 old_next = o->op_next;
2407 oldscope = PL_scopestack_ix;
2408 create_eval_scope(G_FAKINGEVAL);
2410 PL_warnhook = PERL_WARNHOOK_FATAL;
2417 sv = *(PL_stack_sp--);
2418 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2419 pad_swipe(o->op_targ, FALSE);
2420 else if (SvTEMP(sv)) { /* grab mortal temp? */
2421 SvREFCNT_inc_simple_void(sv);
2426 /* Something tried to die. Abandon constant folding. */
2427 /* Pretend the error never happened. */
2428 sv_setpvn(ERRSV,"",0);
2429 o->op_next = old_next;
2433 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2434 PL_warnhook = oldwarnhook;
2435 PL_diehook = olddiehook;
2436 /* XXX note that this croak may fail as we've already blown away
2437 * the stack - eg any nested evals */
2438 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2441 PL_warnhook = oldwarnhook;
2442 PL_diehook = olddiehook;
2444 if (PL_scopestack_ix > oldscope)
2445 delete_eval_scope();
2454 if (type == OP_RV2GV)
2455 newop = newGVOP(OP_GV, 0, (GV*)sv);
2457 newop = newSVOP(OP_CONST, 0, (SV*)sv);
2458 op_getmad(o,newop,'f');
2466 Perl_gen_constant_list(pTHX_ register OP *o)
2470 const I32 oldtmps_floor = PL_tmps_floor;
2473 if (PL_parser && PL_parser->error_count)
2474 return o; /* Don't attempt to run with errors */
2476 PL_op = curop = LINKLIST(o);
2482 assert (!(curop->op_flags & OPf_SPECIAL));
2483 assert(curop->op_type == OP_RANGE);
2485 PL_tmps_floor = oldtmps_floor;
2487 o->op_type = OP_RV2AV;
2488 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2489 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2490 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2491 o->op_opt = 0; /* needs to be revisited in peep() */
2492 curop = ((UNOP*)o)->op_first;
2493 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2495 op_getmad(curop,o,'O');
2504 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2507 if (!o || o->op_type != OP_LIST)
2508 o = newLISTOP(OP_LIST, 0, o, NULL);
2510 o->op_flags &= ~OPf_WANT;
2512 if (!(PL_opargs[type] & OA_MARK))
2513 op_null(cLISTOPo->op_first);
2515 o->op_type = (OPCODE)type;
2516 o->op_ppaddr = PL_ppaddr[type];
2517 o->op_flags |= flags;
2519 o = CHECKOP(type, o);
2520 if (o->op_type != (unsigned)type)
2523 return fold_constants(o);
2526 /* List constructors */
2529 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2537 if (first->op_type != (unsigned)type
2538 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2540 return newLISTOP(type, 0, first, last);
2543 if (first->op_flags & OPf_KIDS)
2544 ((LISTOP*)first)->op_last->op_sibling = last;
2546 first->op_flags |= OPf_KIDS;
2547 ((LISTOP*)first)->op_first = last;
2549 ((LISTOP*)first)->op_last = last;
2554 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2562 if (first->op_type != (unsigned)type)
2563 return prepend_elem(type, (OP*)first, (OP*)last);
2565 if (last->op_type != (unsigned)type)
2566 return append_elem(type, (OP*)first, (OP*)last);
2568 first->op_last->op_sibling = last->op_first;
2569 first->op_last = last->op_last;
2570 first->op_flags |= (last->op_flags & OPf_KIDS);
2573 if (last->op_first && first->op_madprop) {
2574 MADPROP *mp = last->op_first->op_madprop;
2576 while (mp->mad_next)
2578 mp->mad_next = first->op_madprop;
2581 last->op_first->op_madprop = first->op_madprop;
2584 first->op_madprop = last->op_madprop;
2585 last->op_madprop = 0;
2588 S_op_destroy(aTHX_ (OP*)last);
2594 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2602 if (last->op_type == (unsigned)type) {
2603 if (type == OP_LIST) { /* already a PUSHMARK there */
2604 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2605 ((LISTOP*)last)->op_first->op_sibling = first;
2606 if (!(first->op_flags & OPf_PARENS))
2607 last->op_flags &= ~OPf_PARENS;
2610 if (!(last->op_flags & OPf_KIDS)) {
2611 ((LISTOP*)last)->op_last = first;
2612 last->op_flags |= OPf_KIDS;
2614 first->op_sibling = ((LISTOP*)last)->op_first;
2615 ((LISTOP*)last)->op_first = first;
2617 last->op_flags |= OPf_KIDS;
2621 return newLISTOP(type, 0, first, last);
2629 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2632 Newxz(tk, 1, TOKEN);
2633 tk->tk_type = (OPCODE)optype;
2634 tk->tk_type = 12345;
2636 tk->tk_mad = madprop;
2641 Perl_token_free(pTHX_ TOKEN* tk)
2643 if (tk->tk_type != 12345)
2645 mad_free(tk->tk_mad);
2650 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2654 if (tk->tk_type != 12345) {
2655 Perl_warner(aTHX_ packWARN(WARN_MISC),
2656 "Invalid TOKEN object ignored");
2663 /* faked up qw list? */
2665 tm->mad_type == MAD_SV &&
2666 SvPVX((SV*)tm->mad_val)[0] == 'q')
2673 /* pretend constant fold didn't happen? */
2674 if (mp->mad_key == 'f' &&
2675 (o->op_type == OP_CONST ||
2676 o->op_type == OP_GV) )
2678 token_getmad(tk,(OP*)mp->mad_val,slot);
2692 if (mp->mad_key == 'X')
2693 mp->mad_key = slot; /* just change the first one */
2703 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2712 /* pretend constant fold didn't happen? */
2713 if (mp->mad_key == 'f' &&
2714 (o->op_type == OP_CONST ||
2715 o->op_type == OP_GV) )
2717 op_getmad(from,(OP*)mp->mad_val,slot);
2724 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2727 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2733 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2742 /* pretend constant fold didn't happen? */
2743 if (mp->mad_key == 'f' &&
2744 (o->op_type == OP_CONST ||
2745 o->op_type == OP_GV) )
2747 op_getmad(from,(OP*)mp->mad_val,slot);
2754 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2757 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2761 PerlIO_printf(PerlIO_stderr(),
2762 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2768 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2786 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2790 addmad(tm, &(o->op_madprop), slot);
2794 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2815 Perl_newMADsv(pTHX_ char key, SV* sv)
2817 return newMADPROP(key, MAD_SV, sv, 0);
2821 Perl_newMADPROP(pTHX_ char key, char type, const void* val, I32 vlen)
2824 Newxz(mp, 1, MADPROP);
2827 mp->mad_vlen = vlen;
2828 mp->mad_type = type;
2830 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2835 Perl_mad_free(pTHX_ MADPROP* mp)
2837 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2841 mad_free(mp->mad_next);
2842 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
2843 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2844 switch (mp->mad_type) {
2848 Safefree((char*)mp->mad_val);
2851 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2852 op_free((OP*)mp->mad_val);
2855 sv_free((SV*)mp->mad_val);
2858 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
2867 Perl_newNULLLIST(pTHX)
2869 return newOP(OP_STUB, 0);
2873 Perl_force_list(pTHX_ OP *o)
2875 if (!o || o->op_type != OP_LIST)
2876 o = newLISTOP(OP_LIST, 0, o, NULL);
2882 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2887 NewOp(1101, listop, 1, LISTOP);
2889 listop->op_type = (OPCODE)type;
2890 listop->op_ppaddr = PL_ppaddr[type];
2893 listop->op_flags = (U8)flags;
2897 else if (!first && last)
2900 first->op_sibling = last;
2901 listop->op_first = first;
2902 listop->op_last = last;
2903 if (type == OP_LIST) {
2904 OP* const pushop = newOP(OP_PUSHMARK, 0);
2905 pushop->op_sibling = first;
2906 listop->op_first = pushop;
2907 listop->op_flags |= OPf_KIDS;
2909 listop->op_last = pushop;
2912 return CHECKOP(type, listop);
2916 Perl_newOP(pTHX_ I32 type, I32 flags)
2920 NewOp(1101, o, 1, OP);
2921 o->op_type = (OPCODE)type;
2922 o->op_ppaddr = PL_ppaddr[type];
2923 o->op_flags = (U8)flags;
2925 o->op_latefreed = 0;
2929 o->op_private = (U8)(0 | (flags >> 8));
2930 if (PL_opargs[type] & OA_RETSCALAR)
2932 if (PL_opargs[type] & OA_TARGET)
2933 o->op_targ = pad_alloc(type, SVs_PADTMP);
2934 return CHECKOP(type, o);
2938 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2944 first = newOP(OP_STUB, 0);
2945 if (PL_opargs[type] & OA_MARK)
2946 first = force_list(first);
2948 NewOp(1101, unop, 1, UNOP);
2949 unop->op_type = (OPCODE)type;
2950 unop->op_ppaddr = PL_ppaddr[type];
2951 unop->op_first = first;
2952 unop->op_flags = (U8)(flags | OPf_KIDS);
2953 unop->op_private = (U8)(1 | (flags >> 8));
2954 unop = (UNOP*) CHECKOP(type, unop);
2958 return fold_constants((OP *) unop);
2962 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2966 NewOp(1101, binop, 1, BINOP);
2969 first = newOP(OP_NULL, 0);
2971 binop->op_type = (OPCODE)type;
2972 binop->op_ppaddr = PL_ppaddr[type];
2973 binop->op_first = first;
2974 binop->op_flags = (U8)(flags | OPf_KIDS);
2977 binop->op_private = (U8)(1 | (flags >> 8));
2980 binop->op_private = (U8)(2 | (flags >> 8));
2981 first->op_sibling = last;
2984 binop = (BINOP*)CHECKOP(type, binop);
2985 if (binop->op_next || binop->op_type != (OPCODE)type)
2988 binop->op_last = binop->op_first->op_sibling;
2990 return fold_constants((OP *)binop);
2993 static int uvcompare(const void *a, const void *b)
2994 __attribute__nonnull__(1)
2995 __attribute__nonnull__(2)
2996 __attribute__pure__;
2997 static int uvcompare(const void *a, const void *b)
2999 if (*((const UV *)a) < (*(const UV *)b))
3001 if (*((const UV *)a) > (*(const UV *)b))
3003 if (*((const UV *)a+1) < (*(const UV *)b+1))
3005 if (*((const UV *)a+1) > (*(const UV *)b+1))
3011 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3014 SV * const tstr = ((SVOP*)expr)->op_sv;
3017 (repl->op_type == OP_NULL)
3018 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3020 ((SVOP*)repl)->op_sv;
3023 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3024 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3028 register short *tbl;
3030 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3031 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3032 I32 del = o->op_private & OPpTRANS_DELETE;
3034 PL_hints |= HINT_BLOCK_SCOPE;
3037 o->op_private |= OPpTRANS_FROM_UTF;
3040 o->op_private |= OPpTRANS_TO_UTF;
3042 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3043 SV* const listsv = newSVpvs("# comment\n");
3045 const U8* tend = t + tlen;
3046 const U8* rend = r + rlen;
3060 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3061 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3064 const U32 flags = UTF8_ALLOW_DEFAULT;
3068 t = tsave = bytes_to_utf8(t, &len);
3071 if (!to_utf && rlen) {
3073 r = rsave = bytes_to_utf8(r, &len);
3077 /* There are several snags with this code on EBCDIC:
3078 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3079 2. scan_const() in toke.c has encoded chars in native encoding which makes
3080 ranges at least in EBCDIC 0..255 range the bottom odd.
3084 U8 tmpbuf[UTF8_MAXBYTES+1];
3087 Newx(cp, 2*tlen, UV);
3089 transv = newSVpvs("");
3091 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3093 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3095 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3099 cp[2*i+1] = cp[2*i];
3103 qsort(cp, i, 2*sizeof(UV), uvcompare);
3104 for (j = 0; j < i; j++) {
3106 diff = val - nextmin;
3108 t = uvuni_to_utf8(tmpbuf,nextmin);
3109 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3111 U8 range_mark = UTF_TO_NATIVE(0xff);
3112 t = uvuni_to_utf8(tmpbuf, val - 1);
3113 sv_catpvn(transv, (char *)&range_mark, 1);
3114 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3121 t = uvuni_to_utf8(tmpbuf,nextmin);
3122 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3124 U8 range_mark = UTF_TO_NATIVE(0xff);
3125 sv_catpvn(transv, (char *)&range_mark, 1);
3127 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
3128 UNICODE_ALLOW_SUPER);
3129 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3130 t = (const U8*)SvPVX_const(transv);
3131 tlen = SvCUR(transv);
3135 else if (!rlen && !del) {
3136 r = t; rlen = tlen; rend = tend;
3139 if ((!rlen && !del) || t == r ||
3140 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3142 o->op_private |= OPpTRANS_IDENTICAL;
3146 while (t < tend || tfirst <= tlast) {
3147 /* see if we need more "t" chars */
3148 if (tfirst > tlast) {
3149 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3151 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3153 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3160 /* now see if we need more "r" chars */
3161 if (rfirst > rlast) {
3163 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3165 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3167 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3176 rfirst = rlast = 0xffffffff;
3180 /* now see which range will peter our first, if either. */
3181 tdiff = tlast - tfirst;
3182 rdiff = rlast - rfirst;
3189 if (rfirst == 0xffffffff) {
3190 diff = tdiff; /* oops, pretend rdiff is infinite */
3192 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3193 (long)tfirst, (long)tlast);
3195 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3199 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3200 (long)tfirst, (long)(tfirst + diff),
3203 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3204 (long)tfirst, (long)rfirst);
3206 if (rfirst + diff > max)
3207 max = rfirst + diff;
3209 grows = (tfirst < rfirst &&
3210 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3222 else if (max > 0xff)
3227 PerlMemShared_free(cPVOPo->op_pv);
3228 cPVOPo->op_pv = NULL;
3230 swash = (SV*)swash_init("utf8", "", listsv, bits, none);
3232 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3233 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3234 PAD_SETSV(cPADOPo->op_padix, swash);
3237 cSVOPo->op_sv = swash;
3239 SvREFCNT_dec(listsv);
3240 SvREFCNT_dec(transv);
3242 if (!del && havefinal && rlen)
3243 (void)hv_store((HV*)SvRV(swash), "FINAL", 5,
3244 newSVuv((UV)final), 0);
3247 o->op_private |= OPpTRANS_GROWS;
3253 op_getmad(expr,o,'e');
3254 op_getmad(repl,o,'r');
3262 tbl = (short*)cPVOPo->op_pv;
3264 Zero(tbl, 256, short);
3265 for (i = 0; i < (I32)tlen; i++)
3267 for (i = 0, j = 0; i < 256; i++) {
3269 if (j >= (I32)rlen) {
3278 if (i < 128 && r[j] >= 128)
3288 o->op_private |= OPpTRANS_IDENTICAL;
3290 else if (j >= (I32)rlen)
3295 PerlMemShared_realloc(tbl,
3296 (0x101+rlen-j) * sizeof(short));
3297 cPVOPo->op_pv = (char*)tbl;
3299 tbl[0x100] = (short)(rlen - j);
3300 for (i=0; i < (I32)rlen - j; i++)
3301 tbl[0x101+i] = r[j+i];
3305 if (!rlen && !del) {
3308 o->op_private |= OPpTRANS_IDENTICAL;
3310 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3311 o->op_private |= OPpTRANS_IDENTICAL;
3313 for (i = 0; i < 256; i++)
3315 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3316 if (j >= (I32)rlen) {
3318 if (tbl[t[i]] == -1)
3324 if (tbl[t[i]] == -1) {
3325 if (t[i] < 128 && r[j] >= 128)
3332 o->op_private |= OPpTRANS_GROWS;
3334 op_getmad(expr,o,'e');
3335 op_getmad(repl,o,'r');
3345 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3350 NewOp(1101, pmop, 1, PMOP);
3351 pmop->op_type = (OPCODE)type;
3352 pmop->op_ppaddr = PL_ppaddr[type];
3353 pmop->op_flags = (U8)flags;
3354 pmop->op_private = (U8)(0 | (flags >> 8));
3356 if (PL_hints & HINT_RE_TAINT)
3357 pmop->op_pmflags |= PMf_RETAINT;
3358 if (PL_hints & HINT_LOCALE)
3359 pmop->op_pmflags |= PMf_LOCALE;
3363 if (av_len((AV*) PL_regex_pad[0]) > -1) {
3364 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
3365 pmop->op_pmoffset = SvIV(repointer);
3366 SvREPADTMP_off(repointer);
3367 sv_setiv(repointer,0);
3369 SV * const repointer = newSViv(0);
3370 av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
3371 pmop->op_pmoffset = av_len(PL_regex_padav);
3372 PL_regex_pad = AvARRAY(PL_regex_padav);
3376 return CHECKOP(type, pmop);
3379 /* Given some sort of match op o, and an expression expr containing a
3380 * pattern, either compile expr into a regex and attach it to o (if it's
3381 * constant), or convert expr into a runtime regcomp op sequence (if it's
3384 * isreg indicates that the pattern is part of a regex construct, eg
3385 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3386 * split "pattern", which aren't. In the former case, expr will be a list
3387 * if the pattern contains more than one term (eg /a$b/) or if it contains
3388 * a replacement, ie s/// or tr///.
3392 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3397 I32 repl_has_vars = 0;
3401 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3402 /* last element in list is the replacement; pop it */
3404 repl = cLISTOPx(expr)->op_last;
3405 kid = cLISTOPx(expr)->op_first;
3406 while (kid->op_sibling != repl)
3407 kid = kid->op_sibling;
3408 kid->op_sibling = NULL;
3409 cLISTOPx(expr)->op_last = kid;
3412 if (isreg && expr->op_type == OP_LIST &&
3413 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3415 /* convert single element list to element */
3416 OP* const oe = expr;
3417 expr = cLISTOPx(oe)->op_first->op_sibling;
3418 cLISTOPx(oe)->op_first->op_sibling = NULL;
3419 cLISTOPx(oe)->op_last = NULL;
3423 if (o->op_type == OP_TRANS) {
3424 return pmtrans(o, expr, repl);
3427 reglist = isreg && expr->op_type == OP_LIST;
3431 PL_hints |= HINT_BLOCK_SCOPE;
3434 if (expr->op_type == OP_CONST) {
3435 SV *pat = ((SVOP*)expr)->op_sv;
3436 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
3438 if (o->op_flags & OPf_SPECIAL)
3439 pm_flags |= RXf_SPLIT;
3442 assert (SvUTF8(pat));
3443 } else if (SvUTF8(pat)) {
3444 /* Not doing UTF-8, despite what the SV says. Is this only if we're
3445 trapped in use 'bytes'? */
3446 /* Make a copy of the octet sequence, but without the flag on, as
3447 the compiler now honours the SvUTF8 flag on pat. */
3449 const char *const p = SvPV(pat, len);
3450 pat = newSVpvn_flags(p, len, SVs_TEMP);
3452 assert(!(pm_flags & RXf_UTF8));
3454 PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
3457 op_getmad(expr,(OP*)pm,'e');
3463 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3464 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3466 : OP_REGCMAYBE),0,expr);
3468 NewOp(1101, rcop, 1, LOGOP);
3469 rcop->op_type = OP_REGCOMP;
3470 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3471 rcop->op_first = scalar(expr);
3472 rcop->op_flags |= OPf_KIDS
3473 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3474 | (reglist ? OPf_STACKED : 0);
3475 rcop->op_private = 1;
3478 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3480 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3483 /* establish postfix order */
3484 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3486 rcop->op_next = expr;
3487 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3490 rcop->op_next = LINKLIST(expr);
3491 expr->op_next = (OP*)rcop;
3494 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3499 if (pm->op_pmflags & PMf_EVAL) {
3501 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
3502 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
3504 else if (repl->op_type == OP_CONST)
3508 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3509 if (curop->op_type == OP_SCOPE
3510 || curop->op_type == OP_LEAVE
3511 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3512 if (curop->op_type == OP_GV) {
3513 GV * const gv = cGVOPx_gv(curop);
3515 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3518 else if (curop->op_type == OP_RV2CV)
3520 else if (curop->op_type == OP_RV2SV ||
3521 curop->op_type == OP_RV2AV ||
3522 curop->op_type == OP_RV2HV ||
3523 curop->op_type == OP_RV2GV) {
3524 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3527 else if (curop->op_type == OP_PADSV ||
3528 curop->op_type == OP_PADAV ||
3529 curop->op_type == OP_PADHV ||
3530 curop->op_type == OP_PADANY)
3534 else if (curop->op_type == OP_PUSHRE)
3535 NOOP; /* Okay here, dangerous in newASSIGNOP */
3545 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
3547 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3548 prepend_elem(o->op_type, scalar(repl), o);
3551 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3552 pm->op_pmflags |= PMf_MAYBE_CONST;
3554 NewOp(1101, rcop, 1, LOGOP);
3555 rcop->op_type = OP_SUBSTCONT;
3556 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3557 rcop->op_first = scalar(repl);
3558 rcop->op_flags |= OPf_KIDS;
3559 rcop->op_private = 1;
3562 /* establish postfix order */
3563 rcop->op_next = LINKLIST(repl);
3564 repl->op_next = (OP*)rcop;
3566 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
3567 assert(!(pm->op_pmflags & PMf_ONCE));
3568 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
3577 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3581 NewOp(1101, svop, 1, SVOP);
3582 svop->op_type = (OPCODE)type;
3583 svop->op_ppaddr = PL_ppaddr[type];
3585 svop->op_next = (OP*)svop;
3586 svop->op_flags = (U8)flags;
3587 if (PL_opargs[type] & OA_RETSCALAR)
3589 if (PL_opargs[type] & OA_TARGET)
3590 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3591 return CHECKOP(type, svop);
3596 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3600 NewOp(1101, padop, 1, PADOP);
3601 padop->op_type = (OPCODE)type;
3602 padop->op_ppaddr = PL_ppaddr[type];
3603 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3604 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3605 PAD_SETSV(padop->op_padix, sv);
3608 padop->op_next = (OP*)padop;
3609 padop->op_flags = (U8)flags;
3610 if (PL_opargs[type] & OA_RETSCALAR)
3612 if (PL_opargs[type] & OA_TARGET)
3613 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3614 return CHECKOP(type, padop);
3619 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3625 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3627 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3632 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3636 NewOp(1101, pvop, 1, PVOP);
3637 pvop->op_type = (OPCODE)type;
3638 pvop->op_ppaddr = PL_ppaddr[type];
3640 pvop->op_next = (OP*)pvop;
3641 pvop->op_flags = (U8)flags;
3642 if (PL_opargs[type] & OA_RETSCALAR)
3644 if (PL_opargs[type] & OA_TARGET)
3645 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3646 return CHECKOP(type, pvop);
3654 Perl_package(pTHX_ OP *o)
3657 SV *const sv = cSVOPo->op_sv;
3662 save_hptr(&PL_curstash);
3663 save_item(PL_curstname);
3665 PL_curstash = gv_stashsv(sv, GV_ADD);
3667 sv_setsv(PL_curstname, sv);
3669 PL_hints |= HINT_BLOCK_SCOPE;
3670 PL_parser->copline = NOLINE;
3671 PL_parser->expect = XSTATE;
3676 if (!PL_madskills) {
3681 pegop = newOP(OP_NULL,0);
3682 op_getmad(o,pegop,'P');
3692 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3699 OP *pegop = newOP(OP_NULL,0);
3702 if (idop->op_type != OP_CONST)
3703 Perl_croak(aTHX_ "Module name must be constant");
3706 op_getmad(idop,pegop,'U');
3711 SV * const vesv = ((SVOP*)version)->op_sv;
3714 op_getmad(version,pegop,'V');
3715 if (!arg && !SvNIOKp(vesv)) {
3722 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3723 Perl_croak(aTHX_ "Version number must be constant number");
3725 /* Make copy of idop so we don't free it twice */
3726 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3728 /* Fake up a method call to VERSION */
3729 meth = newSVpvs_share("VERSION");
3730 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3731 append_elem(OP_LIST,
3732 prepend_elem(OP_LIST, pack, list(version)),
3733 newSVOP(OP_METHOD_NAMED, 0, meth)));
3737 /* Fake up an import/unimport */
3738 if (arg && arg->op_type == OP_STUB) {
3740 op_getmad(arg,pegop,'S');
3741 imop = arg; /* no import on explicit () */
3743 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3744 imop = NULL; /* use 5.0; */
3746 idop->op_private |= OPpCONST_NOVER;
3752 op_getmad(arg,pegop,'A');
3754 /* Make copy of idop so we don't free it twice */
3755 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3757 /* Fake up a method call to import/unimport */
3759 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3760 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3761 append_elem(OP_LIST,
3762 prepend_elem(OP_LIST, pack, list(arg)),
3763 newSVOP(OP_METHOD_NAMED, 0, meth)));
3766 /* Fake up the BEGIN {}, which does its thing immediately. */
3768 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3771 append_elem(OP_LINESEQ,
3772 append_elem(OP_LINESEQ,
3773 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3774 newSTATEOP(0, NULL, veop)),
3775 newSTATEOP(0, NULL, imop) ));
3777 /* The "did you use incorrect case?" warning used to be here.
3778 * The problem is that on case-insensitive filesystems one
3779 * might get false positives for "use" (and "require"):
3780 * "use Strict" or "require CARP" will work. This causes
3781 * portability problems for the script: in case-strict
3782 * filesystems the script will stop working.
3784 * The "incorrect case" warning checked whether "use Foo"
3785 * imported "Foo" to your namespace, but that is wrong, too:
3786 * there is no requirement nor promise in the language that
3787 * a Foo.pm should or would contain anything in package "Foo".
3789 * There is very little Configure-wise that can be done, either:
3790 * the case-sensitivity of the build filesystem of Perl does not
3791 * help in guessing the case-sensitivity of the runtime environment.
3794 PL_hints |= HINT_BLOCK_SCOPE;
3795 PL_parser->copline = NOLINE;
3796 PL_parser->expect = XSTATE;
3797 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3800 if (!PL_madskills) {
3801 /* FIXME - don't allocate pegop if !PL_madskills */
3810 =head1 Embedding Functions
3812 =for apidoc load_module
3814 Loads the module whose name is pointed to by the string part of name.
3815 Note that the actual module name, not its filename, should be given.
3816 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3817 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3818 (or 0 for no flags). ver, if specified, provides version semantics
3819 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3820 arguments can be used to specify arguments to the module's import()
3821 method, similar to C<use Foo::Bar VERSION LIST>.
3826 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3829 va_start(args, ver);
3830 vload_module(flags, name, ver, &args);
3834 #ifdef PERL_IMPLICIT_CONTEXT
3836 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3840 va_start(args, ver);
3841 vload_module(flags, name, ver, &args);
3847 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3852 OP * const modname = newSVOP(OP_CONST, 0, name);
3853 modname->op_private |= OPpCONST_BARE;
3855 veop = newSVOP(OP_CONST, 0, ver);
3859 if (flags & PERL_LOADMOD_NOIMPORT) {
3860 imop = sawparens(newNULLLIST());
3862 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3863 imop = va_arg(*args, OP*);
3868 sv = va_arg(*args, SV*);
3870 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3871 sv = va_arg(*args, SV*);
3875 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
3876 * that it has a PL_parser to play with while doing that, and also
3877 * that it doesn't mess with any existing parser, by creating a tmp
3878 * new parser with lex_start(). This won't actually be used for much,
3879 * since pp_require() will create another parser for the real work. */
3882 SAVEVPTR(PL_curcop);
3883 lex_start(NULL, NULL, FALSE);
3884 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3885 veop, modname, imop);
3890 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3896 if (!force_builtin) {
3897 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3898 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3899 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3900 gv = gvp ? *gvp : NULL;
3904 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3905 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3906 append_elem(OP_LIST, term,
3907 scalar(newUNOP(OP_RV2CV, 0,
3908 newGVOP(OP_GV, 0, gv))))));
3911 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3917 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3919 return newBINOP(OP_LSLICE, flags,
3920 list(force_list(subscript)),
3921 list(force_list(listval)) );
3925 S_is_list_assignment(pTHX_ register const OP *o)
3933 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
3934 o = cUNOPo->op_first;
3936 flags = o->op_flags;
3938 if (type == OP_COND_EXPR) {
3939 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3940 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3945 yyerror("Assignment to both a list and a scalar");
3949 if (type == OP_LIST &&
3950 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
3951 o->op_private & OPpLVAL_INTRO)
3954 if (type == OP_LIST || flags & OPf_PARENS ||
3955 type == OP_RV2AV || type == OP_RV2HV ||
3956 type == OP_ASLICE || type == OP_HSLICE)
3959 if (type == OP_PADAV || type == OP_PADHV)
3962 if (type == OP_RV2SV)
3969 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3975 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3976 return newLOGOP(optype, 0,
3977 mod(scalar(left), optype),
3978 newUNOP(OP_SASSIGN, 0, scalar(right)));
3981 return newBINOP(optype, OPf_STACKED,
3982 mod(scalar(left), optype), scalar(right));
3986 if (is_list_assignment(left)) {
3987 static const char no_list_state[] = "Initialization of state variables"
3988 " in list context currently forbidden";
3992 /* Grandfathering $[ assignment here. Bletch.*/
3993 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3994 PL_eval_start = (left->op_type == OP_CONST) ? right : NULL;
3995 left = mod(left, OP_AASSIGN);
3998 else if (left->op_type == OP_CONST) {
4000 /* Result of assignment is always 1 (or we'd be dead already) */
4001 return newSVOP(OP_CONST, 0, newSViv(1));
4003 curop = list(force_list(left));
4004 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
4005 o->op_private = (U8)(0 | (flags >> 8));
4007 /* PL_generation sorcery:
4008 * an assignment like ($a,$b) = ($c,$d) is easier than
4009 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
4010 * To detect whether there are common vars, the global var
4011 * PL_generation is incremented for each assign op we compile.
4012 * Then, while compiling the assign op, we run through all the
4013 * variables on both sides of the assignment, setting a spare slot
4014 * in each of them to PL_generation. If any of them already have
4015 * that value, we know we've got commonality. We could use a
4016 * single bit marker, but then we'd have to make 2 passes, first
4017 * to clear the flag, then to test and set it. To find somewhere
4018 * to store these values, evil chicanery is done with SvUVX().
4024 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4025 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4026 if (curop->op_type == OP_GV) {
4027 GV *gv = cGVOPx_gv(curop);
4029 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4031 GvASSIGN_GENERATION_set(gv, PL_generation);
4033 else if (curop->op_type == OP_PADSV ||
4034 curop->op_type == OP_PADAV ||
4035 curop->op_type == OP_PADHV ||
4036 curop->op_type == OP_PADANY)
4038 if (PAD_COMPNAME_GEN(curop->op_targ)
4039 == (STRLEN)PL_generation)
4041 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4044 else if (curop->op_type == OP_RV2CV)
4046 else if (curop->op_type == OP_RV2SV ||
4047 curop->op_type == OP_RV2AV ||
4048 curop->op_type == OP_RV2HV ||
4049 curop->op_type == OP_RV2GV) {
4050 if (lastop->op_type != OP_GV) /* funny deref? */
4053 else if (curop->op_type == OP_PUSHRE) {
4055 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4056 GV *const gv = (GV*)PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff);
4058 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4060 GvASSIGN_GENERATION_set(gv, PL_generation);
4064 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4067 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4069 GvASSIGN_GENERATION_set(gv, PL_generation);
4079 o->op_private |= OPpASSIGN_COMMON;
4082 if ((left->op_type == OP_LIST
4083 || (left->op_type == OP_NULL && left->op_targ == OP_LIST))) {
4084 OP* lop = ((LISTOP*)left)->op_first;
4086 if (lop->op_type == OP_PADSV ||
4087 lop->op_type == OP_PADAV ||
4088 lop->op_type == OP_PADHV ||
4089 lop->op_type == OP_PADANY) {
4090 if (lop->op_private & OPpPAD_STATE) {
4091 if (left->op_private & OPpLVAL_INTRO) {
4092 /* Each variable in state($a, $b, $c) = ... */
4095 /* Each state variable in
4096 (state $a, my $b, our $c, $d, undef) = ... */
4098 yyerror(no_list_state);
4100 /* Each my variable in
4101 (state $a, my $b, our $c, $d, undef) = ... */
4104 /* Other ops in the list. undef may be interesting in
4105 (state $a, undef, state $c) */
4107 lop = lop->op_sibling;
4110 else if (((left->op_private & (OPpLVAL_INTRO | OPpPAD_STATE))
4111 == (OPpLVAL_INTRO | OPpPAD_STATE))
4112 && ( left->op_type == OP_PADSV
4113 || left->op_type == OP_PADAV
4114 || left->op_type == OP_PADHV
4115 || left->op_type == OP_PADANY))
4117 /* All single variable list context state assignments, hence
4127 yyerror(no_list_state);
4130 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
4131 OP* tmpop = ((LISTOP*)right)->op_first;
4132 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4133 PMOP * const pm = (PMOP*)tmpop;
4134 if (left->op_type == OP_RV2AV &&
4135 !(left->op_private & OPpLVAL_INTRO) &&
4136 !(o->op_private & OPpASSIGN_COMMON) )
4138 tmpop = ((UNOP*)left)->op_first;
4139 if (tmpop->op_type == OP_GV
4141 && !pm->op_pmreplrootu.op_pmtargetoff
4143 && !pm->op_pmreplrootu.op_pmtargetgv
4147 pm->op_pmreplrootu.op_pmtargetoff
4148 = cPADOPx(tmpop)->op_padix;
4149 cPADOPx(tmpop)->op_padix = 0; /* steal it */
4151 pm->op_pmreplrootu.op_pmtargetgv
4152 = (GV*)cSVOPx(tmpop)->op_sv;
4153 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
4155 pm->op_pmflags |= PMf_ONCE;
4156 tmpop = cUNOPo->op_first; /* to list (nulled) */
4157 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4158 tmpop->op_sibling = NULL; /* don't free split */
4159 right->op_next = tmpop->op_next; /* fix starting loc */
4160 op_free(o); /* blow off assign */
4161 right->op_flags &= ~OPf_WANT;
4162 /* "I don't know and I don't care." */
4167 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4168 ((LISTOP*)right)->op_last->op_type == OP_CONST)
4170 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4172 sv_setiv(sv, PL_modcount+1);
4180 right = newOP(OP_UNDEF, 0);
4181 if (right->op_type == OP_READLINE) {
4182 right->op_flags |= OPf_STACKED;
4183 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
4186 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
4187 o = newBINOP(OP_SASSIGN, flags,
4188 scalar(right), mod(scalar(left), OP_SASSIGN) );
4194 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4195 o->op_private |= OPpCONST_ARYBASE;
4202 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4205 const U32 seq = intro_my();
4208 NewOp(1101, cop, 1, COP);
4209 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4210 cop->op_type = OP_DBSTATE;
4211 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4214 cop->op_type = OP_NEXTSTATE;
4215 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4217 cop->op_flags = (U8)flags;
4218 CopHINTS_set(cop, PL_hints);
4220 cop->op_private |= NATIVE_HINTS;
4222 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4223 cop->op_next = (OP*)cop;
4226 CopLABEL_set(cop, label);
4227 PL_hints |= HINT_BLOCK_SCOPE;
4230 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4231 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4233 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4234 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4235 if (cop->cop_hints_hash) {
4237 cop->cop_hints_hash->refcounted_he_refcnt++;
4238 HINTS_REFCNT_UNLOCK;
4241 if (PL_parser && PL_parser->copline == NOLINE)
4242 CopLINE_set(cop, CopLINE(PL_curcop));
4244 CopLINE_set(cop, PL_parser->copline);
4246 PL_parser->copline = NOLINE;
4249 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4251 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4253 CopSTASH_set(cop, PL_curstash);
4255 if (PERLDB_LINE && PL_curstash != PL_debstash) {
4256 AV *av = CopFILEAVx(PL_curcop);
4258 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4259 if (svp && *svp != &PL_sv_undef ) {
4260 (void)SvIOK_on(*svp);
4261 SvIV_set(*svp, PTR2IV(cop));
4266 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4271 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4274 return new_logop(type, flags, &first, &other);
4278 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4283 OP *first = *firstp;
4284 OP * const other = *otherp;
4286 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4287 return newBINOP(type, flags, scalar(first), scalar(other));
4289 scalarboolean(first);
4290 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
4291 if (first->op_type == OP_NOT
4292 && (first->op_flags & OPf_SPECIAL)
4293 && (first->op_flags & OPf_KIDS)
4295 if (type == OP_AND || type == OP_OR) {
4301 first = *firstp = cUNOPo->op_first;
4303 first->op_next = o->op_next;
4304 cUNOPo->op_first = NULL;
4308 if (first->op_type == OP_CONST) {
4309 if (first->op_private & OPpCONST_STRICT)
4310 no_bareword_allowed(first);
4311 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
4312 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4313 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
4314 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
4315 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
4317 if (other->op_type == OP_CONST)
4318 other->op_private |= OPpCONST_SHORTCIRCUIT;
4320 OP *newop = newUNOP(OP_NULL, 0, other);
4321 op_getmad(first, newop, '1');
4322 newop->op_targ = type; /* set "was" field */
4329 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4330 const OP *o2 = other;
4331 if ( ! (o2->op_type == OP_LIST
4332 && (( o2 = cUNOPx(o2)->op_first))
4333 && o2->op_type == OP_PUSHMARK
4334 && (( o2 = o2->op_sibling)) )
4337 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4338 || o2->op_type == OP_PADHV)
4339 && o2->op_private & OPpLVAL_INTRO
4340 && !(o2->op_private & OPpPAD_STATE)
4341 && ckWARN(WARN_DEPRECATED))
4343 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4344 "Deprecated use of my() in false conditional");
4348 if (first->op_type == OP_CONST)
4349 first->op_private |= OPpCONST_SHORTCIRCUIT;
4351 first = newUNOP(OP_NULL, 0, first);
4352 op_getmad(other, first, '2');
4353 first->op_targ = type; /* set "was" field */
4360 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4361 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4363 const OP * const k1 = ((UNOP*)first)->op_first;
4364 const OP * const k2 = k1->op_sibling;
4366 switch (first->op_type)
4369 if (k2 && k2->op_type == OP_READLINE
4370 && (k2->op_flags & OPf_STACKED)
4371 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4373 warnop = k2->op_type;
4378 if (k1->op_type == OP_READDIR
4379 || k1->op_type == OP_GLOB
4380 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4381 || k1->op_type == OP_EACH)
4383 warnop = ((k1->op_type == OP_NULL)
4384 ? (OPCODE)k1->op_targ : k1->op_type);
4389 const line_t oldline = CopLINE(PL_curcop);
4390 CopLINE_set(PL_curcop, PL_parser->copline);
4391 Perl_warner(aTHX_ packWARN(WARN_MISC),
4392 "Value of %s%s can be \"0\"; test with defined()",
4394 ((warnop == OP_READLINE || warnop == OP_GLOB)
4395 ? " construct" : "() operator"));
4396 CopLINE_set(PL_curcop, oldline);
4403 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4404 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4406 NewOp(1101, logop, 1, LOGOP);
4408 logop->op_type = (OPCODE)type;
4409 logop->op_ppaddr = PL_ppaddr[type];
4410 logop->op_first = first;
4411 logop->op_flags = (U8)(flags | OPf_KIDS);
4412 logop->op_other = LINKLIST(other);
4413 logop->op_private = (U8)(1 | (flags >> 8));
4415 /* establish postfix order */
4416 logop->op_next = LINKLIST(first);
4417 first->op_next = (OP*)logop;
4418 first->op_sibling = other;
4420 CHECKOP(type,logop);
4422 o = newUNOP(OP_NULL, 0, (OP*)logop);
4429 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4437 return newLOGOP(OP_AND, 0, first, trueop);
4439 return newLOGOP(OP_OR, 0, first, falseop);
4441 scalarboolean(first);
4442 if (first->op_type == OP_CONST) {
4443 /* Left or right arm of the conditional? */
4444 const bool left = SvTRUE(((SVOP*)first)->op_sv);
4445 OP *live = left ? trueop : falseop;
4446 OP *const dead = left ? falseop : trueop;
4447 if (first->op_private & OPpCONST_BARE &&
4448 first->op_private & OPpCONST_STRICT) {
4449 no_bareword_allowed(first);
4452 /* This is all dead code when PERL_MAD is not defined. */
4453 live = newUNOP(OP_NULL, 0, live);
4454 op_getmad(first, live, 'C');
4455 op_getmad(dead, live, left ? 'e' : 't');
4462 NewOp(1101, logop, 1, LOGOP);
4463 logop->op_type = OP_COND_EXPR;
4464 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4465 logop->op_first = first;
4466 logop->op_flags = (U8)(flags | OPf_KIDS);
4467 logop->op_private = (U8)(1 | (flags >> 8));
4468 logop->op_other = LINKLIST(trueop);
4469 logop->op_next = LINKLIST(falseop);
4471 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4474 /* establish postfix order */
4475 start = LINKLIST(first);
4476 first->op_next = (OP*)logop;
4478 first->op_sibling = trueop;
4479 trueop->op_sibling = falseop;
4480 o = newUNOP(OP_NULL, 0, (OP*)logop);
4482 trueop->op_next = falseop->op_next = o;
4489 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4498 NewOp(1101, range, 1, LOGOP);
4500 range->op_type = OP_RANGE;
4501 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4502 range->op_first = left;
4503 range->op_flags = OPf_KIDS;
4504 leftstart = LINKLIST(left);
4505 range->op_other = LINKLIST(right);
4506 range->op_private = (U8)(1 | (flags >> 8));
4508 left->op_sibling = right;
4510 range->op_next = (OP*)range;
4511 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4512 flop = newUNOP(OP_FLOP, 0, flip);
4513 o = newUNOP(OP_NULL, 0, flop);
4515 range->op_next = leftstart;
4517 left->op_next = flip;
4518 right->op_next = flop;
4520 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4521 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4522 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4523 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4525 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4526 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4529 if (!flip->op_private || !flop->op_private)
4530 linklist(o); /* blow off optimizer unless constant */
4536 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4541 const bool once = block && block->op_flags & OPf_SPECIAL &&
4542 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4544 PERL_UNUSED_ARG(debuggable);
4547 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4548 return block; /* do {} while 0 does once */
4549 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4550 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4551 expr = newUNOP(OP_DEFINED, 0,
4552 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4553 } else if (expr->op_flags & OPf_KIDS) {
4554 const OP * const k1 = ((UNOP*)expr)->op_first;
4555 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4556 switch (expr->op_type) {
4558 if (k2 && k2->op_type == OP_READLINE
4559 && (k2->op_flags & OPf_STACKED)
4560 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4561 expr = newUNOP(OP_DEFINED, 0, expr);
4565 if (k1 && (k1->op_type == OP_READDIR
4566 || k1->op_type == OP_GLOB
4567 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4568 || k1->op_type == OP_EACH))
4569 expr = newUNOP(OP_DEFINED, 0, expr);
4575 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4576 * op, in listop. This is wrong. [perl #27024] */
4578 block = newOP(OP_NULL, 0);
4579 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4580 o = new_logop(OP_AND, 0, &expr, &listop);
4583 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4585 if (once && o != listop)
4586 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4589 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4591 o->op_flags |= flags;
4593 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4598 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4599 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4608 PERL_UNUSED_ARG(debuggable);
4611 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4612 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4613 expr = newUNOP(OP_DEFINED, 0,
4614 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4615 } else if (expr->op_flags & OPf_KIDS) {
4616 const OP * const k1 = ((UNOP*)expr)->op_first;
4617 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4618 switch (expr->op_type) {
4620 if (k2 && k2->op_type == OP_READLINE
4621 && (k2->op_flags & OPf_STACKED)
4622 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4623 expr = newUNOP(OP_DEFINED, 0, expr);
4627 if (k1 && (k1->op_type == OP_READDIR
4628 || k1->op_type == OP_GLOB
4629 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4630 || k1->op_type == OP_EACH))
4631 expr = newUNOP(OP_DEFINED, 0, expr);
4638 block = newOP(OP_NULL, 0);
4639 else if (cont || has_my) {
4640 block = scope(block);
4644 next = LINKLIST(cont);
4647 OP * const unstack = newOP(OP_UNSTACK, 0);
4650 cont = append_elem(OP_LINESEQ, cont, unstack);
4654 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4656 redo = LINKLIST(listop);
4659 PL_parser->copline = (line_t)whileline;
4661 o = new_logop(OP_AND, 0, &expr, &listop);
4662 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4663 op_free(expr); /* oops, it's a while (0) */
4665 return NULL; /* listop already freed by new_logop */
4668 ((LISTOP*)listop)->op_last->op_next =
4669 (o == listop ? redo : LINKLIST(o));
4675 NewOp(1101,loop,1,LOOP);
4676 loop->op_type = OP_ENTERLOOP;
4677 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4678 loop->op_private = 0;
4679 loop->op_next = (OP*)loop;
4682 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
4684 loop->op_redoop = redo;
4685 loop->op_lastop = o;
4686 o->op_private |= loopflags;
4689 loop->op_nextop = next;
4691 loop->op_nextop = o;
4693 o->op_flags |= flags;
4694 o->op_private |= (flags >> 8);
4699 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
4704 PADOFFSET padoff = 0;
4710 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
4711 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
4712 sv->op_type = OP_RV2GV;
4713 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
4715 /* The op_type check is needed to prevent a possible segfault
4716 * if the loop variable is undeclared and 'strict vars' is in
4717 * effect. This is illegal but is nonetheless parsed, so we
4718 * may reach this point with an OP_CONST where we're expecting
4721 if (cUNOPx(sv)->op_first->op_type == OP_GV
4722 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
4723 iterpflags |= OPpITER_DEF;
4725 else if (sv->op_type == OP_PADSV) { /* private variable */
4726 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
4727 padoff = sv->op_targ;
4737 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
4739 SV *const namesv = PAD_COMPNAME_SV(padoff);
4741 const char *const name = SvPV_const(namesv, len);
4743 if (len == 2 && name[0] == '$' && name[1] == '_')
4744 iterpflags |= OPpITER_DEF;
4748 const PADOFFSET offset = pad_findmy("$_");
4749 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
4750 sv = newGVOP(OP_GV, 0, PL_defgv);
4755 iterpflags |= OPpITER_DEF;
4757 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
4758 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4759 iterflags |= OPf_STACKED;
4761 else if (expr->op_type == OP_NULL &&
4762 (expr->op_flags & OPf_KIDS) &&
4763 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4765 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4766 * set the STACKED flag to indicate that these values are to be
4767 * treated as min/max values by 'pp_iterinit'.
4769 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4770 LOGOP* const range = (LOGOP*) flip->op_first;
4771 OP* const left = range->op_first;
4772 OP* const right = left->op_sibling;
4775 range->op_flags &= ~OPf_KIDS;
4776 range->op_first = NULL;
4778 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4779 listop->op_first->op_next = range->op_next;
4780 left->op_next = range->op_other;
4781 right->op_next = (OP*)listop;
4782 listop->op_next = listop->op_first;
4785 op_getmad(expr,(OP*)listop,'O');
4789 expr = (OP*)(listop);
4791 iterflags |= OPf_STACKED;
4794 expr = mod(force_list(expr), OP_GREPSTART);
4797 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4798 append_elem(OP_LIST, expr, scalar(sv))));
4799 assert(!loop->op_next);
4800 /* for my $x () sets OPpLVAL_INTRO;
4801 * for our $x () sets OPpOUR_INTRO */
4802 loop->op_private = (U8)iterpflags;
4803 #ifdef PL_OP_SLAB_ALLOC
4806 NewOp(1234,tmp,1,LOOP);
4807 Copy(loop,tmp,1,LISTOP);
4808 S_op_destroy(aTHX_ (OP*)loop);
4812 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
4814 loop->op_targ = padoff;
4815 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4817 op_getmad(madsv, (OP*)loop, 'v');
4818 PL_parser->copline = forline;
4819 return newSTATEOP(0, label, wop);
4823 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4828 if (type != OP_GOTO || label->op_type == OP_CONST) {
4829 /* "last()" means "last" */
4830 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4831 o = newOP(type, OPf_SPECIAL);
4833 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
4834 ? SvPV_nolen_const(((SVOP*)label)->op_sv)
4838 op_getmad(label,o,'L');
4844 /* Check whether it's going to be a goto &function */
4845 if (label->op_type == OP_ENTERSUB
4846 && !(label->op_flags & OPf_STACKED))
4847 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4848 o = newUNOP(type, OPf_STACKED, label);
4850 PL_hints |= HINT_BLOCK_SCOPE;
4854 /* if the condition is a literal array or hash
4855 (or @{ ... } etc), make a reference to it.
4858 S_ref_array_or_hash(pTHX_ OP *cond)
4861 && (cond->op_type == OP_RV2AV
4862 || cond->op_type == OP_PADAV
4863 || cond->op_type == OP_RV2HV
4864 || cond->op_type == OP_PADHV))
4866 return newUNOP(OP_REFGEN,
4867 0, mod(cond, OP_REFGEN));
4873 /* These construct the optree fragments representing given()
4876 entergiven and enterwhen are LOGOPs; the op_other pointer
4877 points up to the associated leave op. We need this so we
4878 can put it in the context and make break/continue work.
4879 (Also, of course, pp_enterwhen will jump straight to
4880 op_other if the match fails.)
4884 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4885 I32 enter_opcode, I32 leave_opcode,
4886 PADOFFSET entertarg)
4892 NewOp(1101, enterop, 1, LOGOP);
4893 enterop->op_type = enter_opcode;
4894 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4895 enterop->op_flags = (U8) OPf_KIDS;
4896 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4897 enterop->op_private = 0;
4899 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4902 enterop->op_first = scalar(cond);
4903 cond->op_sibling = block;
4905 o->op_next = LINKLIST(cond);
4906 cond->op_next = (OP *) enterop;
4909 /* This is a default {} block */
4910 enterop->op_first = block;
4911 enterop->op_flags |= OPf_SPECIAL;
4913 o->op_next = (OP *) enterop;
4916 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4917 entergiven and enterwhen both
4920 enterop->op_next = LINKLIST(block);
4921 block->op_next = enterop->op_other = o;
4926 /* Does this look like a boolean operation? For these purposes
4927 a boolean operation is:
4928 - a subroutine call [*]
4929 - a logical connective
4930 - a comparison operator
4931 - a filetest operator, with the exception of -s -M -A -C
4932 - defined(), exists() or eof()
4933 - /$re/ or $foo =~ /$re/
4935 [*] possibly surprising
4938 S_looks_like_bool(pTHX_ const OP *o)
4941 switch(o->op_type) {
4943 return looks_like_bool(cLOGOPo->op_first);
4947 looks_like_bool(cLOGOPo->op_first)
4948 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4952 o->op_flags & OPf_KIDS
4953 && looks_like_bool(cUNOPo->op_first));
4957 case OP_NOT: case OP_XOR:
4958 /* Note that OP_DOR is not here */
4960 case OP_EQ: case OP_NE: case OP_LT:
4961 case OP_GT: case OP_LE: case OP_GE:
4963 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4964 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4966 case OP_SEQ: case OP_SNE: case OP_SLT:
4967 case OP_SGT: case OP_SLE: case OP_SGE:
4971 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4972 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4973 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4974 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4975 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4976 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4977 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4978 case OP_FTTEXT: case OP_FTBINARY:
4980 case OP_DEFINED: case OP_EXISTS:
4981 case OP_MATCH: case OP_EOF:
4986 /* Detect comparisons that have been optimized away */
4987 if (cSVOPo->op_sv == &PL_sv_yes
4988 || cSVOPo->op_sv == &PL_sv_no)
4999 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
5003 return newGIVWHENOP(
5004 ref_array_or_hash(cond),
5006 OP_ENTERGIVEN, OP_LEAVEGIVEN,
5010 /* If cond is null, this is a default {} block */
5012 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
5014 const bool cond_llb = (!cond || looks_like_bool(cond));
5020 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
5022 scalar(ref_array_or_hash(cond)));
5025 return newGIVWHENOP(
5027 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
5028 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
5032 =for apidoc cv_undef
5034 Clear out all the active components of a CV. This can happen either
5035 by an explicit C<undef &foo>, or by the reference count going to zero.
5036 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
5037 children can still follow the full lexical scope chain.
5043 Perl_cv_undef(pTHX_ CV *cv)
5047 DEBUG_X(PerlIO_printf(Perl_debug_log,
5048 "CV undef: cv=0x%"UVxf" comppad=0x%"UVxf"\n",
5049 PTR2UV(cv), PTR2UV(PL_comppad))
5053 if (CvFILE(cv) && !CvISXSUB(cv)) {
5054 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
5055 Safefree(CvFILE(cv));
5060 if (!CvISXSUB(cv) && CvROOT(cv)) {
5061 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
5062 Perl_croak(aTHX_ "Can't undef active subroutine");
5065 PAD_SAVE_SETNULLPAD();
5067 op_free(CvROOT(cv));
5072 SvPOK_off((SV*)cv); /* forget prototype */
5077 /* remove CvOUTSIDE unless this is an undef rather than a free */
5078 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
5079 if (!CvWEAKOUTSIDE(cv))
5080 SvREFCNT_dec(CvOUTSIDE(cv));
5081 CvOUTSIDE(cv) = NULL;
5084 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
5087 if (CvISXSUB(cv) && CvXSUB(cv)) {
5090 /* delete all flags except WEAKOUTSIDE */
5091 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
5095 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
5098 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
5099 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
5100 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
5101 || (p && (len != SvCUR(cv) /* Not the same length. */
5102 || memNE(p, SvPVX_const(cv), len))))
5103 && ckWARN_d(WARN_PROTOTYPE)) {
5104 SV* const msg = sv_newmortal();
5108 gv_efullname3(name = sv_newmortal(), gv, NULL);
5109 sv_setpvs(msg, "Prototype mismatch:");
5111 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
5113 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
5115 sv_catpvs(msg, ": none");
5116 sv_catpvs(msg, " vs ");
5118 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
5120 sv_catpvs(msg, "none");
5121 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
5125 static void const_sv_xsub(pTHX_ CV* cv);
5129 =head1 Optree Manipulation Functions
5131 =for apidoc cv_const_sv
5133 If C<cv> is a constant sub eligible for inlining. returns the constant
5134 value returned by the sub. Otherwise, returns NULL.
5136 Constant subs can be created with C<newCONSTSUB> or as described in
5137 L<perlsub/"Constant Functions">.
5142 Perl_cv_const_sv(pTHX_ CV *cv)
5144 PERL_UNUSED_CONTEXT;
5147 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
5149 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
5152 /* op_const_sv: examine an optree to determine whether it's in-lineable.
5153 * Can be called in 3 ways:
5156 * look for a single OP_CONST with attached value: return the value
5158 * cv && CvCLONE(cv) && !CvCONST(cv)
5160 * examine the clone prototype, and if contains only a single
5161 * OP_CONST referencing a pad const, or a single PADSV referencing
5162 * an outer lexical, return a non-zero value to indicate the CV is
5163 * a candidate for "constizing" at clone time
5167 * We have just cloned an anon prototype that was marked as a const
5168 * candidiate. Try to grab the current value, and in the case of
5169 * PADSV, ignore it if it has multiple references. Return the value.
5173 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
5184 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
5185 o = cLISTOPo->op_first->op_sibling;
5187 for (; o; o = o->op_next) {
5188 const OPCODE type = o->op_type;
5190 if (sv && o->op_next == o)
5192 if (o->op_next != o) {
5193 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
5195 if (type == OP_DBSTATE)
5198 if (type == OP_LEAVESUB || type == OP_RETURN)
5202 if (type == OP_CONST && cSVOPo->op_sv)
5204 else if (cv && type == OP_CONST) {
5205 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5209 else if (cv && type == OP_PADSV) {
5210 if (CvCONST(cv)) { /* newly cloned anon */
5211 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5212 /* the candidate should have 1 ref from this pad and 1 ref
5213 * from the parent */
5214 if (!sv || SvREFCNT(sv) != 2)
5221 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
5222 sv = &PL_sv_undef; /* an arbitrary non-null value */
5237 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5240 /* This would be the return value, but the return cannot be reached. */
5241 OP* pegop = newOP(OP_NULL, 0);
5244 PERL_UNUSED_ARG(floor);
5254 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
5256 NORETURN_FUNCTION_END;
5261 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
5263 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
5267 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5274 register CV *cv = NULL;
5276 /* If the subroutine has no body, no attributes, and no builtin attributes
5277 then it's just a sub declaration, and we may be able to get away with
5278 storing with a placeholder scalar in the symbol table, rather than a
5279 full GV and CV. If anything is present then it will take a full CV to
5281 const I32 gv_fetch_flags
5282 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5284 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
5285 const char * const name = o ? SvPV_nolen_const(cSVOPo->op_sv) : NULL;
5288 assert(proto->op_type == OP_CONST);
5289 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
5294 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
5295 SV * const sv = sv_newmortal();
5296 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
5297 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
5298 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
5299 aname = SvPVX_const(sv);
5304 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
5305 : gv_fetchpv(aname ? aname
5306 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5307 gv_fetch_flags, SVt_PVCV);
5309 if (!PL_madskills) {
5318 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
5319 maximum a prototype before. */
5320 if (SvTYPE(gv) > SVt_NULL) {
5321 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
5322 && ckWARN_d(WARN_PROTOTYPE))
5324 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
5326 cv_ckproto_len((CV*)gv, NULL, ps, ps_len);
5329 sv_setpvn((SV*)gv, ps, ps_len);
5331 sv_setiv((SV*)gv, -1);
5333 SvREFCNT_dec(PL_compcv);
5334 cv = PL_compcv = NULL;
5338 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
5340 #ifdef GV_UNIQUE_CHECK
5341 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
5342 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
5346 if (!block || !ps || *ps || attrs
5347 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5349 || block->op_type == OP_NULL
5354 const_sv = op_const_sv(block, NULL);
5357 const bool exists = CvROOT(cv) || CvXSUB(cv);
5359 #ifdef GV_UNIQUE_CHECK
5360 if (exists && GvUNIQUE(gv)) {
5361 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
5365 /* if the subroutine doesn't exist and wasn't pre-declared
5366 * with a prototype, assume it will be AUTOLOADed,
5367 * skipping the prototype check
5369 if (exists || SvPOK(cv))
5370 cv_ckproto_len(cv, gv, ps, ps_len);
5371 /* already defined (or promised)? */
5372 if (exists || GvASSUMECV(gv)) {
5375 || block->op_type == OP_NULL
5378 if (CvFLAGS(PL_compcv)) {
5379 /* might have had built-in attrs applied */
5380 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5382 /* just a "sub foo;" when &foo is already defined */
5383 SAVEFREESV(PL_compcv);
5388 && block->op_type != OP_NULL
5391 if (ckWARN(WARN_REDEFINE)
5393 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
5395 const line_t oldline = CopLINE(PL_curcop);
5396 if (PL_parser && PL_parser->copline != NOLINE)
5397 CopLINE_set(PL_curcop, PL_parser->copline);
5398 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5399 CvCONST(cv) ? "Constant subroutine %s redefined"
5400 : "Subroutine %s redefined", name);
5401 CopLINE_set(PL_curcop, oldline);
5404 if (!PL_minus_c) /* keep old one around for madskills */
5407 /* (PL_madskills unset in used file.) */
5415 SvREFCNT_inc_simple_void_NN(const_sv);
5417 assert(!CvROOT(cv) && !CvCONST(cv));
5418 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
5419 CvXSUBANY(cv).any_ptr = const_sv;
5420 CvXSUB(cv) = const_sv_xsub;
5426 cv = newCONSTSUB(NULL, name, const_sv);
5428 mro_method_changed_in( /* sub Foo::Bar () { 123 } */
5429 (CvGV(cv) && GvSTASH(CvGV(cv)))
5438 SvREFCNT_dec(PL_compcv);
5446 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
5447 * before we clobber PL_compcv.
5451 || block->op_type == OP_NULL
5455 /* Might have had built-in attributes applied -- propagate them. */
5456 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5457 if (CvGV(cv) && GvSTASH(CvGV(cv)))
5458 stash = GvSTASH(CvGV(cv));
5459 else if (CvSTASH(cv))
5460 stash = CvSTASH(cv);
5462 stash = PL_curstash;
5465 /* possibly about to re-define existing subr -- ignore old cv */
5466 rcv = (SV*)PL_compcv;
5467 if (name && GvSTASH(gv))
5468 stash = GvSTASH(gv);
5470 stash = PL_curstash;
5472 apply_attrs(stash, rcv, attrs, FALSE);
5474 if (cv) { /* must reuse cv if autoloaded */
5481 || block->op_type == OP_NULL) && !PL_madskills
5484 /* got here with just attrs -- work done, so bug out */
5485 SAVEFREESV(PL_compcv);
5488 /* transfer PL_compcv to cv */
5490 CvFLAGS(cv) = CvFLAGS(PL_compcv);
5491 if (!CvWEAKOUTSIDE(cv))
5492 SvREFCNT_dec(CvOUTSIDE(cv));
5493 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
5494 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
5495 CvOUTSIDE(PL_compcv) = 0;
5496 CvPADLIST(cv) = CvPADLIST(PL_compcv);
5497 CvPADLIST(PL_compcv) = 0;
5498 /* inner references to PL_compcv must be fixed up ... */
5499 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
5500 /* ... before we throw it away */
5501 SvREFCNT_dec(PL_compcv);
5503 if (PERLDB_INTER)/* Advice debugger on the new sub. */
5504 ++PL_sub_generation;
5511 if (strEQ(name, "import")) {
5512 PL_formfeed = (SV*)cv;
5513 Perl_warner(aTHX_ packWARN(WARN_VOID), "%lx\n", (long)cv);
5517 mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar { (shift)+1 } */
5521 CvFILE_set_from_cop(cv, PL_curcop);
5522 CvSTASH(cv) = PL_curstash;
5525 sv_setpvn((SV*)cv, ps, ps_len);
5527 if (PL_parser && PL_parser->error_count) {
5531 const char *s = strrchr(name, ':');
5533 if (strEQ(s, "BEGIN")) {
5534 const char not_safe[] =
5535 "BEGIN not safe after errors--compilation aborted";
5536 if (PL_in_eval & EVAL_KEEPERR)
5537 Perl_croak(aTHX_ not_safe);
5539 /* force display of errors found but not reported */
5540 sv_catpv(ERRSV, not_safe);
5541 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
5551 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5552 mod(scalarseq(block), OP_LEAVESUBLV));
5553 block->op_attached = 1;
5556 /* This makes sub {}; work as expected. */
5557 if (block->op_type == OP_STUB) {
5558 OP* const newblock = newSTATEOP(0, NULL, 0);
5560 op_getmad(block,newblock,'B');
5567 block->op_attached = 1;
5568 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5570 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5571 OpREFCNT_set(CvROOT(cv), 1);
5572 CvSTART(cv) = LINKLIST(CvROOT(cv));
5573 CvROOT(cv)->op_next = 0;
5574 CALL_PEEP(CvSTART(cv));
5576 /* now that optimizer has done its work, adjust pad values */
5578 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
5581 assert(!CvCONST(cv));
5582 if (ps && !*ps && op_const_sv(block, cv))
5586 if (name || aname) {
5587 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5588 SV * const sv = newSV(0);
5589 SV * const tmpstr = sv_newmortal();
5590 GV * const db_postponed = gv_fetchpvs("DB::postponed",
5591 GV_ADDMULTI, SVt_PVHV);
5594 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5596 (long)PL_subline, (long)CopLINE(PL_curcop));
5597 gv_efullname3(tmpstr, gv, NULL);
5598 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
5599 SvCUR(tmpstr), sv, 0);
5600 hv = GvHVn(db_postponed);
5601 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
5602 CV * const pcv = GvCV(db_postponed);
5608 call_sv((SV*)pcv, G_DISCARD);
5613 if (name && ! (PL_parser && PL_parser->error_count))
5614 process_special_blocks(name, gv, cv);
5619 PL_parser->copline = NOLINE;
5625 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
5628 const char *const colon = strrchr(fullname,':');
5629 const char *const name = colon ? colon + 1 : fullname;
5632 if (strEQ(name, "BEGIN")) {
5633 const I32 oldscope = PL_scopestack_ix;
5635 SAVECOPFILE(&PL_compiling);
5636 SAVECOPLINE(&PL_compiling);
5638 DEBUG_x( dump_sub(gv) );
5639 Perl_av_create_and_push(aTHX_ &PL_beginav, (SV*)cv);
5640 GvCV(gv) = 0; /* cv has been hijacked */
5641 call_list(oldscope, PL_beginav);
5643 PL_curcop = &PL_compiling;
5644 CopHINTS_set(&PL_compiling, PL_hints);
5651 if strEQ(name, "END") {
5652 DEBUG_x( dump_sub(gv) );
5653 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, (SV*)cv);
5656 } else if (*name == 'U') {
5657 if (strEQ(name, "UNITCHECK")) {
5658 /* It's never too late to run a unitcheck block */
5659 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, (SV*)cv);
5663 } else if (*name == 'C') {
5664 if (strEQ(name, "CHECK")) {
5665 if (PL_main_start && ckWARN(WARN_VOID))
5666 Perl_warner(aTHX_ packWARN(WARN_VOID),
5667 "Too late to run CHECK block");
5668 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, (SV*)cv);
5672 } else if (*name == 'I') {
5673 if (strEQ(name, "INIT")) {
5674 if (PL_main_start && ckWARN(WARN_VOID))
5675 Perl_warner(aTHX_ packWARN(WARN_VOID),
5676 "Too late to run INIT block");
5677 Perl_av_create_and_push(aTHX_ &PL_initav, (SV*)cv);
5683 DEBUG_x( dump_sub(gv) );
5684 GvCV(gv) = 0; /* cv has been hijacked */
5689 =for apidoc newCONSTSUB
5691 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
5692 eligible for inlining at compile-time.
5698 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
5703 const char *const temp_p = CopFILE(PL_curcop);
5704 const STRLEN len = temp_p ? strlen(temp_p) : 0;
5706 SV *const temp_sv = CopFILESV(PL_curcop);
5708 const char *const temp_p = temp_sv ? SvPV_const(temp_sv, len) : NULL;
5710 char *const file = savepvn(temp_p, temp_p ? len : 0);
5714 if (IN_PERL_RUNTIME) {
5715 /* at runtime, it's not safe to manipulate PL_curcop: it may be
5716 * an op shared between threads. Use a non-shared COP for our
5718 SAVEVPTR(PL_curcop);
5719 PL_curcop = &PL_compiling;
5721 SAVECOPLINE(PL_curcop);
5722 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
5725 PL_hints &= ~HINT_BLOCK_SCOPE;
5728 SAVESPTR(PL_curstash);
5729 SAVECOPSTASH(PL_curcop);
5730 PL_curstash = stash;
5731 CopSTASH_set(PL_curcop,stash);
5734 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
5735 and so doesn't get free()d. (It's expected to be from the C pre-
5736 processor __FILE__ directive). But we need a dynamically allocated one,
5737 and we need it to get freed. */
5738 cv = newXS_flags(name, const_sv_xsub, file, "", XS_DYNAMIC_FILENAME);
5739 CvXSUBANY(cv).any_ptr = sv;
5745 CopSTASH_free(PL_curcop);
5753 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
5754 const char *const filename, const char *const proto,
5757 CV *cv = newXS(name, subaddr, filename);
5759 if (flags & XS_DYNAMIC_FILENAME) {
5760 /* We need to "make arrangements" (ie cheat) to ensure that the
5761 filename lasts as long as the PVCV we just created, but also doesn't
5763 STRLEN filename_len = strlen(filename);
5764 STRLEN proto_and_file_len = filename_len;
5765 char *proto_and_file;
5769 proto_len = strlen(proto);
5770 proto_and_file_len += proto_len;
5772 Newx(proto_and_file, proto_and_file_len + 1, char);
5773 Copy(proto, proto_and_file, proto_len, char);
5774 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
5777 proto_and_file = savepvn(filename, filename_len);
5780 /* This gets free()d. :-) */
5781 sv_usepvn_flags((SV*)cv, proto_and_file, proto_and_file_len,
5782 SV_HAS_TRAILING_NUL);
5784 /* This gives us the correct prototype, rather than one with the
5785 file name appended. */
5786 SvCUR_set(cv, proto_len);
5790 CvFILE(cv) = proto_and_file + proto_len;
5792 sv_setpv((SV *)cv, proto);
5798 =for apidoc U||newXS
5800 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
5801 static storage, as it is used directly as CvFILE(), without a copy being made.
5807 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
5810 GV * const gv = gv_fetchpv(name ? name :
5811 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5812 GV_ADDMULTI, SVt_PVCV);
5816 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
5818 if ((cv = (name ? GvCV(gv) : NULL))) {
5820 /* just a cached method */
5824 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
5825 /* already defined (or promised) */
5826 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
5827 if (ckWARN(WARN_REDEFINE)) {
5828 GV * const gvcv = CvGV(cv);
5830 HV * const stash = GvSTASH(gvcv);
5832 const char *redefined_name = HvNAME_get(stash);
5833 if ( strEQ(redefined_name,"autouse") ) {
5834 const line_t oldline = CopLINE(PL_curcop);
5835 if (PL_parser && PL_parser->copline != NOLINE)
5836 CopLINE_set(PL_curcop, PL_parser->copline);
5837 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5838 CvCONST(cv) ? "Constant subroutine %s redefined"
5839 : "Subroutine %s redefined"
5841 CopLINE_set(PL_curcop, oldline);
5851 if (cv) /* must reuse cv if autoloaded */
5854 cv = (CV*)newSV_type(SVt_PVCV);
5858 mro_method_changed_in(GvSTASH(gv)); /* newXS */
5862 (void)gv_fetchfile(filename);
5863 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
5864 an external constant string */
5866 CvXSUB(cv) = subaddr;
5869 process_special_blocks(name, gv, cv);
5881 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
5886 OP* pegop = newOP(OP_NULL, 0);
5890 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
5891 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
5893 #ifdef GV_UNIQUE_CHECK
5895 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
5899 if ((cv = GvFORM(gv))) {
5900 if (ckWARN(WARN_REDEFINE)) {
5901 const line_t oldline = CopLINE(PL_curcop);
5902 if (PL_parser && PL_parser->copline != NOLINE)
5903 CopLINE_set(PL_curcop, PL_parser->copline);
5904 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5905 o ? "Format %"SVf" redefined"
5906 : "Format STDOUT redefined", SVfARG(cSVOPo->op_sv));
5907 CopLINE_set(PL_curcop, oldline);
5914 CvFILE_set_from_cop(cv, PL_curcop);
5917 pad_tidy(padtidy_FORMAT);
5918 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5919 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5920 OpREFCNT_set(CvROOT(cv), 1);
5921 CvSTART(cv) = LINKLIST(CvROOT(cv));
5922 CvROOT(cv)->op_next = 0;
5923 CALL_PEEP(CvSTART(cv));
5925 op_getmad(o,pegop,'n');
5926 op_getmad_weak(block, pegop, 'b');
5931 PL_parser->copline = NOLINE;
5939 Perl_newANONLIST(pTHX_ OP *o)
5941 return convert(OP_ANONLIST, OPf_SPECIAL, o);
5945 Perl_newANONHASH(pTHX_ OP *o)
5947 return convert(OP_ANONHASH, OPf_SPECIAL, o);
5951 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5953 return newANONATTRSUB(floor, proto, NULL, block);
5957 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5959 return newUNOP(OP_REFGEN, 0,
5960 newSVOP(OP_ANONCODE, 0,
5961 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5965 Perl_oopsAV(pTHX_ OP *o)
5968 switch (o->op_type) {
5970 o->op_type = OP_PADAV;
5971 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5972 return ref(o, OP_RV2AV);
5975 o->op_type = OP_RV2AV;
5976 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5981 if (ckWARN_d(WARN_INTERNAL))
5982 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5989 Perl_oopsHV(pTHX_ OP *o)
5992 switch (o->op_type) {
5995 o->op_type = OP_PADHV;
5996 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5997 return ref(o, OP_RV2HV);
6001 o->op_type = OP_RV2HV;
6002 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
6007 if (ckWARN_d(WARN_INTERNAL))
6008 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
6015 Perl_newAVREF(pTHX_ OP *o)
6018 if (o->op_type == OP_PADANY) {
6019 o->op_type = OP_PADAV;
6020 o->op_ppaddr = PL_ppaddr[OP_PADAV];
6023 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
6024 && ckWARN(WARN_DEPRECATED)) {
6025 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
6026 "Using an array as a reference is deprecated");
6028 return newUNOP(OP_RV2AV, 0, scalar(o));
6032 Perl_newGVREF(pTHX_ I32 type, OP *o)
6034 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
6035 return newUNOP(OP_NULL, 0, o);
6036 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
6040 Perl_newHVREF(pTHX_ OP *o)
6043 if (o->op_type == OP_PADANY) {
6044 o->op_type = OP_PADHV;
6045 o->op_ppaddr = PL_ppaddr[OP_PADHV];
6048 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
6049 && ckWARN(WARN_DEPRECATED)) {
6050 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
6051 "Using a hash as a reference is deprecated");
6053 return newUNOP(OP_RV2HV, 0, scalar(o));
6057 Perl_newCVREF(pTHX_ I32 flags, OP *o)
6059 return newUNOP(OP_RV2CV, flags, scalar(o));
6063 Perl_newSVREF(pTHX_ OP *o)
6066 if (o->op_type == OP_PADANY) {
6067 o->op_type = OP_PADSV;
6068 o->op_ppaddr = PL_ppaddr[OP_PADSV];
6071 return newUNOP(OP_RV2SV, 0, scalar(o));
6074 /* Check routines. See the comments at the top of this file for details
6075 * on when these are called */
6078 Perl_ck_anoncode(pTHX_ OP *o)
6080 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
6082 cSVOPo->op_sv = NULL;
6087 Perl_ck_bitop(pTHX_ OP *o)
6090 #define OP_IS_NUMCOMPARE(op) \
6091 ((op) == OP_LT || (op) == OP_I_LT || \
6092 (op) == OP_GT || (op) == OP_I_GT || \
6093 (op) == OP_LE || (op) == OP_I_LE || \
6094 (op) == OP_GE || (op) == OP_I_GE || \
6095 (op) == OP_EQ || (op) == OP_I_EQ || \
6096 (op) == OP_NE || (op) == OP_I_NE || \
6097 (op) == OP_NCMP || (op) == OP_I_NCMP)
6098 o->op_private = (U8)(PL_hints & HINT_INTEGER);
6099 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
6100 && (o->op_type == OP_BIT_OR
6101 || o->op_type == OP_BIT_AND
6102 || o->op_type == OP_BIT_XOR))
6104 const OP * const left = cBINOPo->op_first;
6105 const OP * const right = left->op_sibling;
6106 if ((OP_IS_NUMCOMPARE(left->op_type) &&
6107 (left->op_flags & OPf_PARENS) == 0) ||
6108 (OP_IS_NUMCOMPARE(right->op_type) &&
6109 (right->op_flags & OPf_PARENS) == 0))
6110 if (ckWARN(WARN_PRECEDENCE))
6111 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
6112 "Possible precedence problem on bitwise %c operator",
6113 o->op_type == OP_BIT_OR ? '|'
6114 : o->op_type == OP_BIT_AND ? '&' : '^'
6121 Perl_ck_concat(pTHX_ OP *o)
6123 const OP * const kid = cUNOPo->op_first;
6124 PERL_UNUSED_CONTEXT;
6125 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
6126 !(kUNOP->op_first->op_flags & OPf_MOD))
6127 o->op_flags |= OPf_STACKED;
6132 Perl_ck_spair(pTHX_ OP *o)
6135 if (o->op_flags & OPf_KIDS) {
6138 const OPCODE type = o->op_type;
6139 o = modkids(ck_fun(o), type);
6140 kid = cUNOPo->op_first;
6141 newop = kUNOP->op_first->op_sibling;
6143 const OPCODE type = newop->op_type;
6144 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
6145 type == OP_PADAV || type == OP_PADHV ||
6146 type == OP_RV2AV || type == OP_RV2HV)
6150 op_getmad(kUNOP->op_first,newop,'K');
6152 op_free(kUNOP->op_first);
6154 kUNOP->op_first = newop;
6156 o->op_ppaddr = PL_ppaddr[++o->op_type];
6161 Perl_ck_delete(pTHX_ OP *o)
6165 if (o->op_flags & OPf_KIDS) {
6166 OP * const kid = cUNOPo->op_first;
6167 switch (kid->op_type) {
6169 o->op_flags |= OPf_SPECIAL;
6172 o->op_private |= OPpSLICE;
6175 o->op_flags |= OPf_SPECIAL;
6180 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
6189 Perl_ck_die(pTHX_ OP *o)
6192 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6198 Perl_ck_eof(pTHX_ OP *o)
6202 if (o->op_flags & OPf_KIDS) {
6203 if (cLISTOPo->op_first->op_type == OP_STUB) {
6205 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
6207 op_getmad(o,newop,'O');
6219 Perl_ck_eval(pTHX_ OP *o)
6222 PL_hints |= HINT_BLOCK_SCOPE;
6223 if (o->op_flags & OPf_KIDS) {
6224 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6227 o->op_flags &= ~OPf_KIDS;
6230 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
6236 cUNOPo->op_first = 0;
6241 NewOp(1101, enter, 1, LOGOP);
6242 enter->op_type = OP_ENTERTRY;
6243 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
6244 enter->op_private = 0;
6246 /* establish postfix order */
6247 enter->op_next = (OP*)enter;
6249 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
6250 o->op_type = OP_LEAVETRY;
6251 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
6252 enter->op_other = o;
6253 op_getmad(oldo,o,'O');
6267 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
6268 op_getmad(oldo,o,'O');
6270 o->op_targ = (PADOFFSET)PL_hints;
6271 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
6272 /* Store a copy of %^H that pp_entereval can pick up.
6273 OPf_SPECIAL flags the opcode as being for this purpose,
6274 so that it in turn will return a copy at every
6276 OP *hhop = newSVOP(OP_CONST, OPf_SPECIAL,
6277 (SV*)Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)));
6278 cUNOPo->op_first->op_sibling = hhop;
6279 o->op_private |= OPpEVAL_HAS_HH;
6285 Perl_ck_exit(pTHX_ OP *o)
6288 HV * const table = GvHV(PL_hintgv);
6290 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
6291 if (svp && *svp && SvTRUE(*svp))
6292 o->op_private |= OPpEXIT_VMSISH;
6294 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6300 Perl_ck_exec(pTHX_ OP *o)
6302 if (o->op_flags & OPf_STACKED) {
6305 kid = cUNOPo->op_first->op_sibling;
6306 if (kid->op_type == OP_RV2GV)
6315 Perl_ck_exists(pTHX_ OP *o)
6319 if (o->op_flags & OPf_KIDS) {
6320 OP * const kid = cUNOPo->op_first;
6321 if (kid->op_type == OP_ENTERSUB) {
6322 (void) ref(kid, o->op_type);
6323 if (kid->op_type != OP_RV2CV
6324 && !(PL_parser && PL_parser->error_count))
6325 Perl_croak(aTHX_ "%s argument is not a subroutine name",
6327 o->op_private |= OPpEXISTS_SUB;
6329 else if (kid->op_type == OP_AELEM)
6330 o->op_flags |= OPf_SPECIAL;
6331 else if (kid->op_type != OP_HELEM)
6332 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
6340 Perl_ck_rvconst(pTHX_ register OP *o)
6343 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6345 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6346 if (o->op_type == OP_RV2CV)
6347 o->op_private &= ~1;
6349 if (kid->op_type == OP_CONST) {
6352 SV * const kidsv = kid->op_sv;
6354 /* Is it a constant from cv_const_sv()? */
6355 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
6356 SV * const rsv = SvRV(kidsv);
6357 const svtype type = SvTYPE(rsv);
6358 const char *badtype = NULL;
6360 switch (o->op_type) {
6362 if (type > SVt_PVMG)
6363 badtype = "a SCALAR";
6366 if (type != SVt_PVAV)
6367 badtype = "an ARRAY";
6370 if (type != SVt_PVHV)
6374 if (type != SVt_PVCV)
6379 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
6382 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
6383 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
6384 /* If this is an access to a stash, disable "strict refs", because
6385 * stashes aren't auto-vivified at compile-time (unless we store
6386 * symbols in them), and we don't want to produce a run-time
6387 * stricture error when auto-vivifying the stash. */
6388 const char *s = SvPV_nolen(kidsv);
6389 const STRLEN l = SvCUR(kidsv);
6390 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
6391 o->op_private &= ~HINT_STRICT_REFS;
6393 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
6394 const char *badthing;
6395 switch (o->op_type) {
6397 badthing = "a SCALAR";
6400 badthing = "an ARRAY";
6403 badthing = "a HASH";
6411 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
6412 SVfARG(kidsv), badthing);
6415 * This is a little tricky. We only want to add the symbol if we
6416 * didn't add it in the lexer. Otherwise we get duplicate strict
6417 * warnings. But if we didn't add it in the lexer, we must at
6418 * least pretend like we wanted to add it even if it existed before,
6419 * or we get possible typo warnings. OPpCONST_ENTERED says
6420 * whether the lexer already added THIS instance of this symbol.
6422 iscv = (o->op_type == OP_RV2CV) * 2;
6424 gv = gv_fetchsv(kidsv,
6425 iscv | !(kid->op_private & OPpCONST_ENTERED),
6428 : o->op_type == OP_RV2SV
6430 : o->op_type == OP_RV2AV
6432 : o->op_type == OP_RV2HV
6435 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
6437 kid->op_type = OP_GV;
6438 SvREFCNT_dec(kid->op_sv);
6440 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
6441 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
6442 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
6444 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
6446 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
6448 kid->op_private = 0;
6449 kid->op_ppaddr = PL_ppaddr[OP_GV];
6456 Perl_ck_ftst(pTHX_ OP *o)
6459 const I32 type = o->op_type;
6461 if (o->op_flags & OPf_REF) {
6464 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
6465 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6466 const OPCODE kidtype = kid->op_type;
6468 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6469 OP * const newop = newGVOP(type, OPf_REF,
6470 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
6472 op_getmad(o,newop,'O');
6478 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o))
6479 o->op_private |= OPpFT_ACCESS;
6480 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
6481 && kidtype != OP_STAT && kidtype != OP_LSTAT)
6482 o->op_private |= OPpFT_STACKED;
6490 if (type == OP_FTTTY)
6491 o = newGVOP(type, OPf_REF, PL_stdingv);
6493 o = newUNOP(type, 0, newDEFSVOP());
6494 op_getmad(oldo,o,'O');
6500 Perl_ck_fun(pTHX_ OP *o)
6503 const int type = o->op_type;
6504 register I32 oa = PL_opargs[type] >> OASHIFT;
6506 if (o->op_flags & OPf_STACKED) {
6507 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
6510 return no_fh_allowed(o);
6513 if (o->op_flags & OPf_KIDS) {
6514 OP **tokid = &cLISTOPo->op_first;
6515 register OP *kid = cLISTOPo->op_first;
6519 if (kid->op_type == OP_PUSHMARK ||
6520 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
6522 tokid = &kid->op_sibling;
6523 kid = kid->op_sibling;
6525 if (!kid && PL_opargs[type] & OA_DEFGV)
6526 *tokid = kid = newDEFSVOP();
6530 sibl = kid->op_sibling;
6532 if (!sibl && kid->op_type == OP_STUB) {
6539 /* list seen where single (scalar) arg expected? */
6540 if (numargs == 1 && !(oa >> 4)
6541 && kid->op_type == OP_LIST && type != OP_SCALAR)
6543 return too_many_arguments(o,PL_op_desc[type]);
6556 if ((type == OP_PUSH || type == OP_UNSHIFT)
6557 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
6558 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6559 "Useless use of %s with no values",
6562 if (kid->op_type == OP_CONST &&
6563 (kid->op_private & OPpCONST_BARE))
6565 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
6566 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
6567 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6568 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6569 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
6570 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6572 op_getmad(kid,newop,'K');
6577 kid->op_sibling = sibl;
6580 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
6581 bad_type(numargs, "array", PL_op_desc[type], kid);
6585 if (kid->op_type == OP_CONST &&
6586 (kid->op_private & OPpCONST_BARE))
6588 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
6589 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
6590 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6591 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6592 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
6593 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6595 op_getmad(kid,newop,'K');
6600 kid->op_sibling = sibl;
6603 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6604 bad_type(numargs, "hash", PL_op_desc[type], kid);
6609 OP * const newop = newUNOP(OP_NULL, 0, kid);
6610 kid->op_sibling = 0;
6612 newop->op_next = newop;
6614 kid->op_sibling = sibl;
6619 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6620 if (kid->op_type == OP_CONST &&
6621 (kid->op_private & OPpCONST_BARE))
6623 OP * const newop = newGVOP(OP_GV, 0,
6624 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
6625 if (!(o->op_private & 1) && /* if not unop */
6626 kid == cLISTOPo->op_last)
6627 cLISTOPo->op_last = newop;
6629 op_getmad(kid,newop,'K');
6635 else if (kid->op_type == OP_READLINE) {
6636 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6637 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
6640 I32 flags = OPf_SPECIAL;
6644 /* is this op a FH constructor? */
6645 if (is_handle_constructor(o,numargs)) {
6646 const char *name = NULL;
6650 /* Set a flag to tell rv2gv to vivify
6651 * need to "prove" flag does not mean something
6652 * else already - NI-S 1999/05/07
6655 if (kid->op_type == OP_PADSV) {
6657 = PAD_COMPNAME_SV(kid->op_targ);
6658 name = SvPV_const(namesv, len);
6660 else if (kid->op_type == OP_RV2SV
6661 && kUNOP->op_first->op_type == OP_GV)
6663 GV * const gv = cGVOPx_gv(kUNOP->op_first);
6665 len = GvNAMELEN(gv);
6667 else if (kid->op_type == OP_AELEM
6668 || kid->op_type == OP_HELEM)
6671 OP *op = ((BINOP*)kid)->op_first;
6675 const char * const a =
6676 kid->op_type == OP_AELEM ?
6678 if (((op->op_type == OP_RV2AV) ||
6679 (op->op_type == OP_RV2HV)) &&
6680 (firstop = ((UNOP*)op)->op_first) &&
6681 (firstop->op_type == OP_GV)) {
6682 /* packagevar $a[] or $h{} */
6683 GV * const gv = cGVOPx_gv(firstop);
6691 else if (op->op_type == OP_PADAV
6692 || op->op_type == OP_PADHV) {
6693 /* lexicalvar $a[] or $h{} */
6694 const char * const padname =
6695 PAD_COMPNAME_PV(op->op_targ);
6704 name = SvPV_const(tmpstr, len);
6709 name = "__ANONIO__";
6716 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
6717 namesv = PAD_SVl(targ);
6718 SvUPGRADE(namesv, SVt_PV);
6720 sv_setpvn(namesv, "$", 1);
6721 sv_catpvn(namesv, name, len);
6724 kid->op_sibling = 0;
6725 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
6726 kid->op_targ = targ;
6727 kid->op_private |= priv;
6729 kid->op_sibling = sibl;
6735 mod(scalar(kid), type);
6739 tokid = &kid->op_sibling;
6740 kid = kid->op_sibling;
6743 if (kid && kid->op_type != OP_STUB)
6744 return too_many_arguments(o,OP_DESC(o));
6745 o->op_private |= numargs;
6747 /* FIXME - should the numargs move as for the PERL_MAD case? */
6748 o->op_private |= numargs;
6750 return too_many_arguments(o,OP_DESC(o));
6754 else if (PL_opargs[type] & OA_DEFGV) {
6756 OP *newop = newUNOP(type, 0, newDEFSVOP());
6757 op_getmad(o,newop,'O');
6760 /* Ordering of these two is important to keep f_map.t passing. */
6762 return newUNOP(type, 0, newDEFSVOP());
6767 while (oa & OA_OPTIONAL)
6769 if (oa && oa != OA_LIST)
6770 return too_few_arguments(o,OP_DESC(o));
6776 Perl_ck_glob(pTHX_ OP *o)
6782 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
6783 append_elem(OP_GLOB, o, newDEFSVOP());
6785 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
6786 && GvCVu(gv) && GvIMPORTED_CV(gv)))
6788 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6791 #if !defined(PERL_EXTERNAL_GLOB)
6792 /* XXX this can be tightened up and made more failsafe. */
6793 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6796 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
6797 newSVpvs("File::Glob"), NULL, NULL, NULL);
6798 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6799 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
6800 GvCV(gv) = GvCV(glob_gv);
6801 SvREFCNT_inc_void((SV*)GvCV(gv));
6802 GvIMPORTED_CV_on(gv);
6805 #endif /* PERL_EXTERNAL_GLOB */
6807 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6808 append_elem(OP_GLOB, o,
6809 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
6810 o->op_type = OP_LIST;
6811 o->op_ppaddr = PL_ppaddr[OP_LIST];
6812 cLISTOPo->op_first->op_type = OP_PUSHMARK;
6813 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
6814 cLISTOPo->op_first->op_targ = 0;
6815 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
6816 append_elem(OP_LIST, o,
6817 scalar(newUNOP(OP_RV2CV, 0,
6818 newGVOP(OP_GV, 0, gv)))));
6819 o = newUNOP(OP_NULL, 0, ck_subr(o));
6820 o->op_targ = OP_GLOB; /* hint at what it used to be */
6823 gv = newGVgen("main");
6825 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
6831 Perl_ck_grep(pTHX_ OP *o)
6836 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
6839 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
6840 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
6842 if (o->op_flags & OPf_STACKED) {
6845 kid = cLISTOPo->op_first->op_sibling;
6846 if (!cUNOPx(kid)->op_next)
6847 Perl_croak(aTHX_ "panic: ck_grep");
6848 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
6851 NewOp(1101, gwop, 1, LOGOP);
6852 kid->op_next = (OP*)gwop;
6853 o->op_flags &= ~OPf_STACKED;
6855 kid = cLISTOPo->op_first->op_sibling;
6856 if (type == OP_MAPWHILE)
6861 if (PL_parser && PL_parser->error_count)
6863 kid = cLISTOPo->op_first->op_sibling;
6864 if (kid->op_type != OP_NULL)
6865 Perl_croak(aTHX_ "panic: ck_grep");
6866 kid = kUNOP->op_first;
6869 NewOp(1101, gwop, 1, LOGOP);
6870 gwop->op_type = type;
6871 gwop->op_ppaddr = PL_ppaddr[type];
6872 gwop->op_first = listkids(o);
6873 gwop->op_flags |= OPf_KIDS;
6874 gwop->op_other = LINKLIST(kid);
6875 kid->op_next = (OP*)gwop;
6876 offset = pad_findmy("$_");
6877 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
6878 o->op_private = gwop->op_private = 0;
6879 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
6882 o->op_private = gwop->op_private = OPpGREP_LEX;
6883 gwop->op_targ = o->op_targ = offset;
6886 kid = cLISTOPo->op_first->op_sibling;
6887 if (!kid || !kid->op_sibling)
6888 return too_few_arguments(o,OP_DESC(o));
6889 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
6890 mod(kid, OP_GREPSTART);
6896 Perl_ck_index(pTHX_ OP *o)
6898 if (o->op_flags & OPf_KIDS) {
6899 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6901 kid = kid->op_sibling; /* get past "big" */
6902 if (kid && kid->op_type == OP_CONST)
6903 fbm_compile(((SVOP*)kid)->op_sv, 0);
6909 Perl_ck_lengthconst(pTHX_ OP *o)
6911 /* XXX length optimization goes here */
6916 Perl_ck_lfun(pTHX_ OP *o)
6918 const OPCODE type = o->op_type;
6919 return modkids(ck_fun(o), type);
6923 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
6925 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
6926 switch (cUNOPo->op_first->op_type) {
6928 /* This is needed for
6929 if (defined %stash::)
6930 to work. Do not break Tk.
6932 break; /* Globals via GV can be undef */
6934 case OP_AASSIGN: /* Is this a good idea? */
6935 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6936 "defined(@array) is deprecated");
6937 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6938 "\t(Maybe you should just omit the defined()?)\n");
6941 /* This is needed for
6942 if (defined %stash::)
6943 to work. Do not break Tk.
6945 break; /* Globals via GV can be undef */
6947 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6948 "defined(%%hash) is deprecated");
6949 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6950 "\t(Maybe you should just omit the defined()?)\n");
6961 Perl_ck_readline(pTHX_ OP *o)
6963 if (!(o->op_flags & OPf_KIDS)) {
6965 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
6967 op_getmad(o,newop,'O');
6977 Perl_ck_rfun(pTHX_ OP *o)
6979 const OPCODE type = o->op_type;
6980 return refkids(ck_fun(o), type);
6984 Perl_ck_listiob(pTHX_ OP *o)
6988 kid = cLISTOPo->op_first;
6991 kid = cLISTOPo->op_first;
6993 if (kid->op_type == OP_PUSHMARK)
6994 kid = kid->op_sibling;
6995 if (kid && o->op_flags & OPf_STACKED)
6996 kid = kid->op_sibling;
6997 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6998 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6999 o->op_flags |= OPf_STACKED; /* make it a filehandle */
7000 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
7001 cLISTOPo->op_first->op_sibling = kid;
7002 cLISTOPo->op_last = kid;
7003 kid = kid->op_sibling;
7008 append_elem(o->op_type, o, newDEFSVOP());
7014 Perl_ck_smartmatch(pTHX_ OP *o)
7017 if (0 == (o->op_flags & OPf_SPECIAL)) {
7018 OP *first = cBINOPo->op_first;
7019 OP *second = first->op_sibling;
7021 /* Implicitly take a reference to an array or hash */
7022 first->op_sibling = NULL;
7023 first = cBINOPo->op_first = ref_array_or_hash(first);
7024 second = first->op_sibling = ref_array_or_hash(second);
7026 /* Implicitly take a reference to a regular expression */
7027 if (first->op_type == OP_MATCH) {
7028 first->op_type = OP_QR;
7029 first->op_ppaddr = PL_ppaddr[OP_QR];
7031 if (second->op_type == OP_MATCH) {
7032 second->op_type = OP_QR;
7033 second->op_ppaddr = PL_ppaddr[OP_QR];
7042 Perl_ck_sassign(pTHX_ OP *o)
7045 OP * const kid = cLISTOPo->op_first;
7046 /* has a disposable target? */
7047 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
7048 && !(kid->op_flags & OPf_STACKED)
7049 /* Cannot steal the second time! */
7050 && !(kid->op_private & OPpTARGET_MY)
7051 /* Keep the full thing for madskills */
7055 OP * const kkid = kid->op_sibling;
7057 /* Can just relocate the target. */
7058 if (kkid && kkid->op_type == OP_PADSV
7059 && !(kkid->op_private & OPpLVAL_INTRO))
7061 kid->op_targ = kkid->op_targ;
7063 /* Now we do not need PADSV and SASSIGN. */
7064 kid->op_sibling = o->op_sibling; /* NULL */
7065 cLISTOPo->op_first = NULL;
7068 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
7072 if (kid->op_sibling) {
7073 OP *kkid = kid->op_sibling;
7074 if (kkid->op_type == OP_PADSV
7075 && (kkid->op_private & OPpLVAL_INTRO)
7076 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
7077 const PADOFFSET target = kkid->op_targ;
7078 OP *const other = newOP(OP_PADSV,
7080 | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
7081 OP *const first = newOP(OP_NULL, 0);
7082 OP *const nullop = newCONDOP(0, first, o, other);
7083 OP *const condop = first->op_next;
7084 /* hijacking PADSTALE for uninitialized state variables */
7085 SvPADSTALE_on(PAD_SVl(target));
7087 condop->op_type = OP_ONCE;
7088 condop->op_ppaddr = PL_ppaddr[OP_ONCE];
7089 condop->op_targ = target;
7090 other->op_targ = target;
7092 /* Because we change the type of the op here, we will skip the
7093 assinment binop->op_last = binop->op_first->op_sibling; at the
7094 end of Perl_newBINOP(). So need to do it here. */
7095 cBINOPo->op_last = cBINOPo->op_first->op_sibling;
7104 Perl_ck_match(pTHX_ OP *o)
7107 if (o->op_type != OP_QR && PL_compcv) {
7108 const PADOFFSET offset = pad_findmy("$_");
7109 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
7110 o->op_targ = offset;
7111 o->op_private |= OPpTARGET_MY;
7114 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
7115 o->op_private |= OPpRUNTIME;
7120 Perl_ck_method(pTHX_ OP *o)
7122 OP * const kid = cUNOPo->op_first;
7123 if (kid->op_type == OP_CONST) {
7124 SV* sv = kSVOP->op_sv;
7125 const char * const method = SvPVX_const(sv);
7126 if (!(strchr(method, ':') || strchr(method, '\''))) {
7128 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
7129 sv = newSVpvn_share(method, SvCUR(sv), 0);
7132 kSVOP->op_sv = NULL;
7134 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
7136 op_getmad(o,cmop,'O');
7147 Perl_ck_null(pTHX_ OP *o)
7149 PERL_UNUSED_CONTEXT;
7154 Perl_ck_open(pTHX_ OP *o)
7157 HV * const table = GvHV(PL_hintgv);
7159 SV **svp = hv_fetchs(table, "open_IN", FALSE);
7161 const I32 mode = mode_from_discipline(*svp);
7162 if (mode & O_BINARY)
7163 o->op_private |= OPpOPEN_IN_RAW;
7164 else if (mode & O_TEXT)
7165 o->op_private |= OPpOPEN_IN_CRLF;
7168 svp = hv_fetchs(table, "open_OUT", FALSE);
7170 const I32 mode = mode_from_discipline(*svp);
7171 if (mode & O_BINARY)
7172 o->op_private |= OPpOPEN_OUT_RAW;
7173 else if (mode & O_TEXT)
7174 o->op_private |= OPpOPEN_OUT_CRLF;
7177 if (o->op_type == OP_BACKTICK) {
7178 if (!(o->op_flags & OPf_KIDS)) {
7179 OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
7181 op_getmad(o,newop,'O');
7190 /* In case of three-arg dup open remove strictness
7191 * from the last arg if it is a bareword. */
7192 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
7193 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
7197 if ((last->op_type == OP_CONST) && /* The bareword. */
7198 (last->op_private & OPpCONST_BARE) &&
7199 (last->op_private & OPpCONST_STRICT) &&
7200 (oa = first->op_sibling) && /* The fh. */
7201 (oa = oa->op_sibling) && /* The mode. */
7202 (oa->op_type == OP_CONST) &&
7203 SvPOK(((SVOP*)oa)->op_sv) &&
7204 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
7205 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
7206 (last == oa->op_sibling)) /* The bareword. */
7207 last->op_private &= ~OPpCONST_STRICT;
7213 Perl_ck_repeat(pTHX_ OP *o)
7215 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
7216 o->op_private |= OPpREPEAT_DOLIST;
7217 cBINOPo->op_first = force_list(cBINOPo->op_first);
7225 Perl_ck_require(pTHX_ OP *o)
7230 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
7231 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7233 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7234 SV * const sv = kid->op_sv;
7235 U32 was_readonly = SvREADONLY(sv);
7242 sv_force_normal_flags(sv, 0);
7243 assert(!SvREADONLY(sv));
7253 for (; s < end; s++) {
7254 if (*s == ':' && s[1] == ':') {
7256 Move(s+2, s+1, end - s - 1, char);
7261 sv_catpvs(sv, ".pm");
7262 SvFLAGS(sv) |= was_readonly;
7266 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
7267 /* handle override, if any */
7268 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
7269 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7270 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
7271 gv = gvp ? *gvp : NULL;
7275 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7276 OP * const kid = cUNOPo->op_first;
7279 cUNOPo->op_first = 0;
7283 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
7284 append_elem(OP_LIST, kid,
7285 scalar(newUNOP(OP_RV2CV, 0,
7288 op_getmad(o,newop,'O');
7296 Perl_ck_return(pTHX_ OP *o)
7299 if (CvLVALUE(PL_compcv)) {
7301 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
7302 mod(kid, OP_LEAVESUBLV);
7308 Perl_ck_select(pTHX_ OP *o)
7312 if (o->op_flags & OPf_KIDS) {
7313 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7314 if (kid && kid->op_sibling) {
7315 o->op_type = OP_SSELECT;
7316 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
7318 return fold_constants(o);
7322 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7323 if (kid && kid->op_type == OP_RV2GV)
7324 kid->op_private &= ~HINT_STRICT_REFS;
7329 Perl_ck_shift(pTHX_ OP *o)
7332 const I32 type = o->op_type;
7334 if (!(o->op_flags & OPf_KIDS)) {
7336 /* FIXME - this can be refactored to reduce code in #ifdefs */
7338 OP * const oldo = o;
7342 argop = newUNOP(OP_RV2AV, 0,
7343 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
7345 o = newUNOP(type, 0, scalar(argop));
7346 op_getmad(oldo,o,'O');
7349 return newUNOP(type, 0, scalar(argop));
7352 return scalar(modkids(ck_fun(o), type));
7356 Perl_ck_sort(pTHX_ OP *o)
7361 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
7362 HV * const hinthv = GvHV(PL_hintgv);
7364 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
7366 const I32 sorthints = (I32)SvIV(*svp);
7367 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
7368 o->op_private |= OPpSORT_QSORT;
7369 if ((sorthints & HINT_SORT_STABLE) != 0)
7370 o->op_private |= OPpSORT_STABLE;
7375 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
7377 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7378 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
7380 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
7382 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
7384 if (kid->op_type == OP_SCOPE) {
7388 else if (kid->op_type == OP_LEAVE) {
7389 if (o->op_type == OP_SORT) {
7390 op_null(kid); /* wipe out leave */
7393 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
7394 if (k->op_next == kid)
7396 /* don't descend into loops */
7397 else if (k->op_type == OP_ENTERLOOP
7398 || k->op_type == OP_ENTERITER)
7400 k = cLOOPx(k)->op_lastop;
7405 kid->op_next = 0; /* just disconnect the leave */
7406 k = kLISTOP->op_first;
7411 if (o->op_type == OP_SORT) {
7412 /* provide scalar context for comparison function/block */
7418 o->op_flags |= OPf_SPECIAL;
7420 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
7423 firstkid = firstkid->op_sibling;
7426 /* provide list context for arguments */
7427 if (o->op_type == OP_SORT)
7434 S_simplify_sort(pTHX_ OP *o)
7437 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7442 if (!(o->op_flags & OPf_STACKED))
7444 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
7445 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
7446 kid = kUNOP->op_first; /* get past null */
7447 if (kid->op_type != OP_SCOPE)
7449 kid = kLISTOP->op_last; /* get past scope */
7450 switch(kid->op_type) {
7458 k = kid; /* remember this node*/
7459 if (kBINOP->op_first->op_type != OP_RV2SV)
7461 kid = kBINOP->op_first; /* get past cmp */
7462 if (kUNOP->op_first->op_type != OP_GV)
7464 kid = kUNOP->op_first; /* get past rv2sv */
7466 if (GvSTASH(gv) != PL_curstash)
7468 gvname = GvNAME(gv);
7469 if (*gvname == 'a' && gvname[1] == '\0')
7471 else if (*gvname == 'b' && gvname[1] == '\0')
7476 kid = k; /* back to cmp */
7477 if (kBINOP->op_last->op_type != OP_RV2SV)
7479 kid = kBINOP->op_last; /* down to 2nd arg */
7480 if (kUNOP->op_first->op_type != OP_GV)
7482 kid = kUNOP->op_first; /* get past rv2sv */
7484 if (GvSTASH(gv) != PL_curstash)
7486 gvname = GvNAME(gv);
7488 ? !(*gvname == 'a' && gvname[1] == '\0')
7489 : !(*gvname == 'b' && gvname[1] == '\0'))
7491 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
7493 o->op_private |= OPpSORT_DESCEND;
7494 if (k->op_type == OP_NCMP)
7495 o->op_private |= OPpSORT_NUMERIC;
7496 if (k->op_type == OP_I_NCMP)
7497 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
7498 kid = cLISTOPo->op_first->op_sibling;
7499 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
7501 op_getmad(kid,o,'S'); /* then delete it */
7503 op_free(kid); /* then delete it */
7508 Perl_ck_split(pTHX_ OP *o)
7513 if (o->op_flags & OPf_STACKED)
7514 return no_fh_allowed(o);
7516 kid = cLISTOPo->op_first;
7517 if (kid->op_type != OP_NULL)
7518 Perl_croak(aTHX_ "panic: ck_split");
7519 kid = kid->op_sibling;
7520 op_free(cLISTOPo->op_first);
7521 cLISTOPo->op_first = kid;
7523 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
7524 cLISTOPo->op_last = kid; /* There was only one element previously */
7527 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
7528 OP * const sibl = kid->op_sibling;
7529 kid->op_sibling = 0;
7530 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
7531 if (cLISTOPo->op_first == cLISTOPo->op_last)
7532 cLISTOPo->op_last = kid;
7533 cLISTOPo->op_first = kid;
7534 kid->op_sibling = sibl;
7537 kid->op_type = OP_PUSHRE;
7538 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
7540 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
7541 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
7542 "Use of /g modifier is meaningless in split");
7545 if (!kid->op_sibling)
7546 append_elem(OP_SPLIT, o, newDEFSVOP());
7548 kid = kid->op_sibling;
7551 if (!kid->op_sibling)
7552 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
7553 assert(kid->op_sibling);
7555 kid = kid->op_sibling;
7558 if (kid->op_sibling)
7559 return too_many_arguments(o,OP_DESC(o));
7565 Perl_ck_join(pTHX_ OP *o)
7567 const OP * const kid = cLISTOPo->op_first->op_sibling;
7568 if (kid && kid->op_type == OP_MATCH) {
7569 if (ckWARN(WARN_SYNTAX)) {
7570 const REGEXP *re = PM_GETRE(kPMOP);
7571 const char *pmstr = re ? RX_PRECOMP(re) : "STRING";
7572 const STRLEN len = re ? RX_PRELEN(re) : 6;
7573 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7574 "/%.*s/ should probably be written as \"%.*s\"",
7575 (int)len, pmstr, (int)len, pmstr);
7582 Perl_ck_subr(pTHX_ OP *o)
7585 OP *prev = ((cUNOPo->op_first->op_sibling)
7586 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
7587 OP *o2 = prev->op_sibling;
7589 const char *proto = NULL;
7590 const char *proto_end = NULL;
7595 I32 contextclass = 0;
7596 const char *e = NULL;
7599 o->op_private |= OPpENTERSUB_HASTARG;
7600 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
7601 if (cvop->op_type == OP_RV2CV) {
7603 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
7604 op_null(cvop); /* disable rv2cv */
7605 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
7606 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
7607 GV *gv = cGVOPx_gv(tmpop);
7610 tmpop->op_private |= OPpEARLY_CV;
7614 namegv = CvANON(cv) ? gv : CvGV(cv);
7615 proto = SvPV((SV*)cv, len);
7616 proto_end = proto + len;
7621 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
7622 if (o2->op_type == OP_CONST)
7623 o2->op_private &= ~OPpCONST_STRICT;
7624 else if (o2->op_type == OP_LIST) {
7625 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
7626 if (sib && sib->op_type == OP_CONST)
7627 sib->op_private &= ~OPpCONST_STRICT;
7630 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7631 if (PERLDB_SUB && PL_curstash != PL_debstash)
7632 o->op_private |= OPpENTERSUB_DB;
7633 while (o2 != cvop) {
7635 if (PL_madskills && o2->op_type == OP_STUB) {
7636 o2 = o2->op_sibling;
7639 if (PL_madskills && o2->op_type == OP_NULL)
7640 o3 = ((UNOP*)o2)->op_first;
7644 if (proto >= proto_end)
7645 return too_many_arguments(o, gv_ename(namegv));
7653 /* _ must be at the end */
7654 if (proto[1] && proto[1] != ';')
7669 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
7671 arg == 1 ? "block or sub {}" : "sub {}",
7672 gv_ename(namegv), o3);
7675 /* '*' allows any scalar type, including bareword */
7678 if (o3->op_type == OP_RV2GV)
7679 goto wrapref; /* autoconvert GLOB -> GLOBref */
7680 else if (o3->op_type == OP_CONST)
7681 o3->op_private &= ~OPpCONST_STRICT;
7682 else if (o3->op_type == OP_ENTERSUB) {
7683 /* accidental subroutine, revert to bareword */
7684 OP *gvop = ((UNOP*)o3)->op_first;
7685 if (gvop && gvop->op_type == OP_NULL) {
7686 gvop = ((UNOP*)gvop)->op_first;
7688 for (; gvop->op_sibling; gvop = gvop->op_sibling)
7691 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
7692 (gvop = ((UNOP*)gvop)->op_first) &&
7693 gvop->op_type == OP_GV)
7695 GV * const gv = cGVOPx_gv(gvop);
7696 OP * const sibling = o2->op_sibling;
7697 SV * const n = newSVpvs("");
7699 OP * const oldo2 = o2;
7703 gv_fullname4(n, gv, "", FALSE);
7704 o2 = newSVOP(OP_CONST, 0, n);
7705 op_getmad(oldo2,o2,'O');
7706 prev->op_sibling = o2;
7707 o2->op_sibling = sibling;
7723 if (contextclass++ == 0) {
7724 e = strchr(proto, ']');
7725 if (!e || e == proto)
7734 const char *p = proto;
7735 const char *const end = proto;
7737 while (*--p != '[');
7738 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
7740 gv_ename(namegv), o3);
7745 if (o3->op_type == OP_RV2GV)
7748 bad_type(arg, "symbol", gv_ename(namegv), o3);
7751 if (o3->op_type == OP_ENTERSUB)
7754 bad_type(arg, "subroutine entry", gv_ename(namegv),
7758 if (o3->op_type == OP_RV2SV ||
7759 o3->op_type == OP_PADSV ||
7760 o3->op_type == OP_HELEM ||
7761 o3->op_type == OP_AELEM)
7764 bad_type(arg, "scalar", gv_ename(namegv), o3);
7767 if (o3->op_type == OP_RV2AV ||
7768 o3->op_type == OP_PADAV)
7771 bad_type(arg, "array", gv_ename(namegv), o3);
7774 if (o3->op_type == OP_RV2HV ||
7775 o3->op_type == OP_PADHV)
7778 bad_type(arg, "hash", gv_ename(namegv), o3);
7783 OP* const sib = kid->op_sibling;
7784 kid->op_sibling = 0;
7785 o2 = newUNOP(OP_REFGEN, 0, kid);
7786 o2->op_sibling = sib;
7787 prev->op_sibling = o2;
7789 if (contextclass && e) {
7804 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
7805 gv_ename(namegv), SVfARG(cv));
7810 mod(o2, OP_ENTERSUB);
7812 o2 = o2->op_sibling;
7814 if (o2 == cvop && proto && *proto == '_') {
7815 /* generate an access to $_ */
7817 o2->op_sibling = prev->op_sibling;
7818 prev->op_sibling = o2; /* instead of cvop */
7820 if (proto && !optional && proto_end > proto &&
7821 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
7822 return too_few_arguments(o, gv_ename(namegv));
7825 OP * const oldo = o;
7829 o=newSVOP(OP_CONST, 0, newSViv(0));
7830 op_getmad(oldo,o,'O');
7836 Perl_ck_svconst(pTHX_ OP *o)
7838 PERL_UNUSED_CONTEXT;
7839 SvREADONLY_on(cSVOPo->op_sv);
7844 Perl_ck_chdir(pTHX_ OP *o)
7846 if (o->op_flags & OPf_KIDS) {
7847 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7849 if (kid && kid->op_type == OP_CONST &&
7850 (kid->op_private & OPpCONST_BARE))
7852 o->op_flags |= OPf_SPECIAL;
7853 kid->op_private &= ~OPpCONST_STRICT;
7860 Perl_ck_trunc(pTHX_ OP *o)
7862 if (o->op_flags & OPf_KIDS) {
7863 SVOP *kid = (SVOP*)cUNOPo->op_first;
7865 if (kid->op_type == OP_NULL)
7866 kid = (SVOP*)kid->op_sibling;
7867 if (kid && kid->op_type == OP_CONST &&
7868 (kid->op_private & OPpCONST_BARE))
7870 o->op_flags |= OPf_SPECIAL;
7871 kid->op_private &= ~OPpCONST_STRICT;
7878 Perl_ck_unpack(pTHX_ OP *o)
7880 OP *kid = cLISTOPo->op_first;
7881 if (kid->op_sibling) {
7882 kid = kid->op_sibling;
7883 if (!kid->op_sibling)
7884 kid->op_sibling = newDEFSVOP();
7890 Perl_ck_substr(pTHX_ OP *o)
7893 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
7894 OP *kid = cLISTOPo->op_first;
7896 if (kid->op_type == OP_NULL)
7897 kid = kid->op_sibling;
7899 kid->op_flags |= OPf_MOD;
7906 Perl_ck_each(pTHX_ OP *o)
7909 OP *kid = cLISTOPo->op_first;
7911 if (kid->op_type == OP_PADAV || kid->op_type == OP_RV2AV) {
7912 const unsigned new_type = o->op_type == OP_EACH ? OP_AEACH
7913 : o->op_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
7914 o->op_type = new_type;
7915 o->op_ppaddr = PL_ppaddr[new_type];
7917 else if (!(kid->op_type == OP_PADHV || kid->op_type == OP_RV2HV
7918 || (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE)
7920 bad_type(1, "hash or array", PL_op_desc[o->op_type], kid);
7926 /* A peephole optimizer. We visit the ops in the order they're to execute.
7927 * See the comments at the top of this file for more details about when
7928 * peep() is called */
7931 Perl_peep(pTHX_ register OP *o)
7934 register OP* oldop = NULL;
7936 if (!o || o->op_opt)
7940 SAVEVPTR(PL_curcop);
7941 for (; o; o = o->op_next) {
7944 /* By default, this op has now been optimised. A couple of cases below
7945 clear this again. */
7948 switch (o->op_type) {
7952 PL_curcop = ((COP*)o); /* for warnings */
7956 if (cSVOPo->op_private & OPpCONST_STRICT)
7957 no_bareword_allowed(o);
7959 case OP_METHOD_NAMED:
7960 /* Relocate sv to the pad for thread safety.
7961 * Despite being a "constant", the SV is written to,
7962 * for reference counts, sv_upgrade() etc. */
7964 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
7965 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
7966 /* If op_sv is already a PADTMP then it is being used by
7967 * some pad, so make a copy. */
7968 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
7969 SvREADONLY_on(PAD_SVl(ix));
7970 SvREFCNT_dec(cSVOPo->op_sv);
7972 else if (o->op_type == OP_CONST
7973 && cSVOPo->op_sv == &PL_sv_undef) {
7974 /* PL_sv_undef is hack - it's unsafe to store it in the
7975 AV that is the pad, because av_fetch treats values of
7976 PL_sv_undef as a "free" AV entry and will merrily
7977 replace them with a new SV, causing pad_alloc to think
7978 that this pad slot is free. (When, clearly, it is not)
7980 SvOK_off(PAD_SVl(ix));
7981 SvPADTMP_on(PAD_SVl(ix));
7982 SvREADONLY_on(PAD_SVl(ix));
7985 SvREFCNT_dec(PAD_SVl(ix));
7986 SvPADTMP_on(cSVOPo->op_sv);
7987 PAD_SETSV(ix, cSVOPo->op_sv);
7988 /* XXX I don't know how this isn't readonly already. */
7989 SvREADONLY_on(PAD_SVl(ix));
7991 cSVOPo->op_sv = NULL;
7998 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
7999 if (o->op_next->op_private & OPpTARGET_MY) {
8000 if (o->op_flags & OPf_STACKED) /* chained concats */
8001 break; /* ignore_optimization */
8003 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
8004 o->op_targ = o->op_next->op_targ;
8005 o->op_next->op_targ = 0;
8006 o->op_private |= OPpTARGET_MY;
8009 op_null(o->op_next);
8013 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
8014 break; /* Scalar stub must produce undef. List stub is noop */
8018 if (o->op_targ == OP_NEXTSTATE
8019 || o->op_targ == OP_DBSTATE
8020 || o->op_targ == OP_SETSTATE)
8022 PL_curcop = ((COP*)o);
8024 /* XXX: We avoid setting op_seq here to prevent later calls
8025 to peep() from mistakenly concluding that optimisation
8026 has already occurred. This doesn't fix the real problem,
8027 though (See 20010220.007). AMS 20010719 */
8028 /* op_seq functionality is now replaced by op_opt */
8035 if (oldop && o->op_next) {
8036 oldop->op_next = o->op_next;
8044 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
8045 OP* const pop = (o->op_type == OP_PADAV) ?
8046 o->op_next : o->op_next->op_next;
8048 if (pop && pop->op_type == OP_CONST &&
8049 ((PL_op = pop->op_next)) &&
8050 pop->op_next->op_type == OP_AELEM &&
8051 !(pop->op_next->op_private &
8052 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
8053 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
8058 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
8059 no_bareword_allowed(pop);
8060 if (o->op_type == OP_GV)
8061 op_null(o->op_next);
8062 op_null(pop->op_next);
8064 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
8065 o->op_next = pop->op_next->op_next;
8066 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
8067 o->op_private = (U8)i;
8068 if (o->op_type == OP_GV) {
8073 o->op_flags |= OPf_SPECIAL;
8074 o->op_type = OP_AELEMFAST;
8079 if (o->op_next->op_type == OP_RV2SV) {
8080 if (!(o->op_next->op_private & OPpDEREF)) {
8081 op_null(o->op_next);
8082 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
8084 o->op_next = o->op_next->op_next;
8085 o->op_type = OP_GVSV;
8086 o->op_ppaddr = PL_ppaddr[OP_GVSV];
8089 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
8090 GV * const gv = cGVOPo_gv;
8091 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
8092 /* XXX could check prototype here instead of just carping */
8093 SV * const sv = sv_newmortal();
8094 gv_efullname3(sv, gv, NULL);
8095 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
8096 "%"SVf"() called too early to check prototype",
8100 else if (o->op_next->op_type == OP_READLINE
8101 && o->op_next->op_next->op_type == OP_CONCAT
8102 && (o->op_next->op_next->op_flags & OPf_STACKED))
8104 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
8105 o->op_type = OP_RCATLINE;
8106 o->op_flags |= OPf_STACKED;
8107 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
8108 op_null(o->op_next->op_next);
8109 op_null(o->op_next);
8125 while (cLOGOP->op_other->op_type == OP_NULL)
8126 cLOGOP->op_other = cLOGOP->op_other->op_next;
8127 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
8132 while (cLOOP->op_redoop->op_type == OP_NULL)
8133 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
8134 peep(cLOOP->op_redoop);
8135 while (cLOOP->op_nextop->op_type == OP_NULL)
8136 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
8137 peep(cLOOP->op_nextop);
8138 while (cLOOP->op_lastop->op_type == OP_NULL)
8139 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
8140 peep(cLOOP->op_lastop);
8144 assert(!(cPMOP->op_pmflags & PMf_ONCE));
8145 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
8146 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
8147 cPMOP->op_pmstashstartu.op_pmreplstart
8148 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
8149 peep(cPMOP->op_pmstashstartu.op_pmreplstart);
8153 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
8154 && ckWARN(WARN_SYNTAX))
8156 if (o->op_next->op_sibling) {
8157 const OPCODE type = o->op_next->op_sibling->op_type;
8158 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
8159 const line_t oldline = CopLINE(PL_curcop);
8160 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
8161 Perl_warner(aTHX_ packWARN(WARN_EXEC),
8162 "Statement unlikely to be reached");
8163 Perl_warner(aTHX_ packWARN(WARN_EXEC),
8164 "\t(Maybe you meant system() when you said exec()?)\n");
8165 CopLINE_set(PL_curcop, oldline);
8176 const char *key = NULL;
8179 if (((BINOP*)o)->op_last->op_type != OP_CONST)
8182 /* Make the CONST have a shared SV */
8183 svp = cSVOPx_svp(((BINOP*)o)->op_last);
8184 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
8185 key = SvPV_const(sv, keylen);
8186 lexname = newSVpvn_share(key,
8187 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
8193 if ((o->op_private & (OPpLVAL_INTRO)))
8196 rop = (UNOP*)((BINOP*)o)->op_first;
8197 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
8199 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
8200 if (!SvPAD_TYPED(lexname))
8202 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8203 if (!fields || !GvHV(*fields))
8205 key = SvPV_const(*svp, keylen);
8206 if (!hv_fetch(GvHV(*fields), key,
8207 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8209 Perl_croak(aTHX_ "No such class field \"%s\" "
8210 "in variable %s of type %s",
8211 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
8224 SVOP *first_key_op, *key_op;
8226 if ((o->op_private & (OPpLVAL_INTRO))
8227 /* I bet there's always a pushmark... */
8228 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
8229 /* hmmm, no optimization if list contains only one key. */
8231 rop = (UNOP*)((LISTOP*)o)->op_last;
8232 if (rop->op_type != OP_RV2HV)
8234 if (rop->op_first->op_type == OP_PADSV)
8235 /* @$hash{qw(keys here)} */
8236 rop = (UNOP*)rop->op_first;
8238 /* @{$hash}{qw(keys here)} */
8239 if (rop->op_first->op_type == OP_SCOPE
8240 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
8242 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
8248 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
8249 if (!SvPAD_TYPED(lexname))
8251 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8252 if (!fields || !GvHV(*fields))
8254 /* Again guessing that the pushmark can be jumped over.... */
8255 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
8256 ->op_first->op_sibling;
8257 for (key_op = first_key_op; key_op;
8258 key_op = (SVOP*)key_op->op_sibling) {
8259 if (key_op->op_type != OP_CONST)
8261 svp = cSVOPx_svp(key_op);
8262 key = SvPV_const(*svp, keylen);
8263 if (!hv_fetch(GvHV(*fields), key,
8264 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8266 Perl_croak(aTHX_ "No such class field \"%s\" "
8267 "in variable %s of type %s",
8268 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
8275 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
8279 /* check that RHS of sort is a single plain array */
8280 OP *oright = cUNOPo->op_first;
8281 if (!oright || oright->op_type != OP_PUSHMARK)
8284 /* reverse sort ... can be optimised. */
8285 if (!cUNOPo->op_sibling) {
8286 /* Nothing follows us on the list. */
8287 OP * const reverse = o->op_next;
8289 if (reverse->op_type == OP_REVERSE &&
8290 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
8291 OP * const pushmark = cUNOPx(reverse)->op_first;
8292 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
8293 && (cUNOPx(pushmark)->op_sibling == o)) {
8294 /* reverse -> pushmark -> sort */
8295 o->op_private |= OPpSORT_REVERSE;
8297 pushmark->op_next = oright->op_next;
8303 /* make @a = sort @a act in-place */
8305 oright = cUNOPx(oright)->op_sibling;
8308 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
8309 oright = cUNOPx(oright)->op_sibling;
8313 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
8314 || oright->op_next != o
8315 || (oright->op_private & OPpLVAL_INTRO)
8319 /* o2 follows the chain of op_nexts through the LHS of the
8320 * assign (if any) to the aassign op itself */
8322 if (!o2 || o2->op_type != OP_NULL)
8325 if (!o2 || o2->op_type != OP_PUSHMARK)
8328 if (o2 && o2->op_type == OP_GV)
8331 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8332 || (o2->op_private & OPpLVAL_INTRO)
8337 if (!o2 || o2->op_type != OP_NULL)
8340 if (!o2 || o2->op_type != OP_AASSIGN
8341 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8344 /* check that the sort is the first arg on RHS of assign */
8346 o2 = cUNOPx(o2)->op_first;
8347 if (!o2 || o2->op_type != OP_NULL)
8349 o2 = cUNOPx(o2)->op_first;
8350 if (!o2 || o2->op_type != OP_PUSHMARK)
8352 if (o2->op_sibling != o)
8355 /* check the array is the same on both sides */
8356 if (oleft->op_type == OP_RV2AV) {
8357 if (oright->op_type != OP_RV2AV
8358 || !cUNOPx(oright)->op_first
8359 || cUNOPx(oright)->op_first->op_type != OP_GV
8360 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8361 cGVOPx_gv(cUNOPx(oright)->op_first)
8365 else if (oright->op_type != OP_PADAV
8366 || oright->op_targ != oleft->op_targ
8370 /* transfer MODishness etc from LHS arg to RHS arg */
8371 oright->op_flags = oleft->op_flags;
8372 o->op_private |= OPpSORT_INPLACE;
8374 /* excise push->gv->rv2av->null->aassign */
8375 o2 = o->op_next->op_next;
8376 op_null(o2); /* PUSHMARK */
8378 if (o2->op_type == OP_GV) {
8379 op_null(o2); /* GV */
8382 op_null(o2); /* RV2AV or PADAV */
8383 o2 = o2->op_next->op_next;
8384 op_null(o2); /* AASSIGN */
8386 o->op_next = o2->op_next;
8392 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
8394 LISTOP *enter, *exlist;
8396 enter = (LISTOP *) o->op_next;
8399 if (enter->op_type == OP_NULL) {
8400 enter = (LISTOP *) enter->op_next;
8404 /* for $a (...) will have OP_GV then OP_RV2GV here.
8405 for (...) just has an OP_GV. */
8406 if (enter->op_type == OP_GV) {
8407 gvop = (OP *) enter;
8408 enter = (LISTOP *) enter->op_next;
8411 if (enter->op_type == OP_RV2GV) {
8412 enter = (LISTOP *) enter->op_next;
8418 if (enter->op_type != OP_ENTERITER)
8421 iter = enter->op_next;
8422 if (!iter || iter->op_type != OP_ITER)
8425 expushmark = enter->op_first;
8426 if (!expushmark || expushmark->op_type != OP_NULL
8427 || expushmark->op_targ != OP_PUSHMARK)
8430 exlist = (LISTOP *) expushmark->op_sibling;
8431 if (!exlist || exlist->op_type != OP_NULL
8432 || exlist->op_targ != OP_LIST)
8435 if (exlist->op_last != o) {
8436 /* Mmm. Was expecting to point back to this op. */
8439 theirmark = exlist->op_first;
8440 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
8443 if (theirmark->op_sibling != o) {
8444 /* There's something between the mark and the reverse, eg
8445 for (1, reverse (...))
8450 ourmark = ((LISTOP *)o)->op_first;
8451 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
8454 ourlast = ((LISTOP *)o)->op_last;
8455 if (!ourlast || ourlast->op_next != o)
8458 rv2av = ourmark->op_sibling;
8459 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
8460 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
8461 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
8462 /* We're just reversing a single array. */
8463 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
8464 enter->op_flags |= OPf_STACKED;
8467 /* We don't have control over who points to theirmark, so sacrifice
8469 theirmark->op_next = ourmark->op_next;
8470 theirmark->op_flags = ourmark->op_flags;
8471 ourlast->op_next = gvop ? gvop : (OP *) enter;
8474 enter->op_private |= OPpITER_REVERSED;
8475 iter->op_private |= OPpITER_REVERSED;
8482 UNOP *refgen, *rv2cv;
8485 if ((o->op_flags & OPf_WANT) != OPf_WANT_VOID)
8488 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
8491 rv2gv = ((BINOP *)o)->op_last;
8492 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
8495 refgen = (UNOP *)((BINOP *)o)->op_first;
8497 if (!refgen || refgen->op_type != OP_REFGEN)
8500 exlist = (LISTOP *)refgen->op_first;
8501 if (!exlist || exlist->op_type != OP_NULL
8502 || exlist->op_targ != OP_LIST)
8505 if (exlist->op_first->op_type != OP_PUSHMARK)
8508 rv2cv = (UNOP*)exlist->op_last;
8510 if (rv2cv->op_type != OP_RV2CV)
8513 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
8514 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
8515 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
8517 o->op_private |= OPpASSIGN_CV_TO_GV;
8518 rv2gv->op_private |= OPpDONT_INIT_GV;
8519 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
8527 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
8528 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
8538 Perl_custom_op_name(pTHX_ const OP* o)
8541 const IV index = PTR2IV(o->op_ppaddr);
8545 if (!PL_custom_op_names) /* This probably shouldn't happen */
8546 return (char *)PL_op_name[OP_CUSTOM];
8548 keysv = sv_2mortal(newSViv(index));
8550 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
8552 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
8554 return SvPV_nolen(HeVAL(he));
8558 Perl_custom_op_desc(pTHX_ const OP* o)
8561 const IV index = PTR2IV(o->op_ppaddr);
8565 if (!PL_custom_op_descs)
8566 return (char *)PL_op_desc[OP_CUSTOM];
8568 keysv = sv_2mortal(newSViv(index));
8570 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
8572 return (char *)PL_op_desc[OP_CUSTOM];
8574 return SvPV_nolen(HeVAL(he));
8579 /* Efficient sub that returns a constant scalar value. */
8581 const_sv_xsub(pTHX_ CV* cv)
8588 Perl_croak(aTHX_ "usage: %s::%s()",
8589 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
8593 ST(0) = (SV*)XSANY.any_ptr;
8599 * c-indentation-style: bsd
8601 * indent-tabs-mode: t
8604 * ex: set ts=8 sts=4 sw=4 noet: