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_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 \"my\"",
367 name[0], toCTRL(name[1]), name + 2));
369 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
373 /* check for duplicate declaration */
374 pad_check_dup(name, is_our, (PL_curstash ? PL_curstash : PL_defstash));
376 if (PL_in_my_stash && *name != '$') {
377 yyerror(Perl_form(aTHX_
378 "Can't declare class for non-scalar %s in \"%s\"",
380 is_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
383 /* allocate a spare slot and store the name in that slot */
385 off = pad_add_name(name,
388 /* $_ is always in main::, even with our */
389 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
393 PL_in_my == KEY_state
398 /* free the body of an op without examining its contents.
399 * Always use this rather than FreeOp directly */
402 S_op_destroy(pTHX_ OP *o)
404 if (o->op_latefree) {
412 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
414 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
420 Perl_op_free(pTHX_ OP *o)
425 if (!o || o->op_static)
427 if (o->op_latefreed) {
434 if (o->op_private & OPpREFCOUNTED) {
445 refcnt = OpREFCNT_dec(o);
448 /* Need to find and remove any pattern match ops from the list
449 we maintain for reset(). */
450 find_and_forget_pmops(o);
460 if (o->op_flags & OPf_KIDS) {
461 register OP *kid, *nextkid;
462 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
463 nextkid = kid->op_sibling; /* Get before next freeing kid */
468 type = (OPCODE)o->op_targ;
470 #ifdef PERL_DEBUG_READONLY_OPS
474 /* COP* is not cleared by op_clear() so that we may track line
475 * numbers etc even after null() */
476 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE) {
481 if (o->op_latefree) {
487 #ifdef DEBUG_LEAKING_SCALARS
494 Perl_op_clear(pTHX_ OP *o)
499 /* if (o->op_madprop && o->op_madprop->mad_next)
501 /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
502 "modification of a read only value" for a reason I can't fathom why.
503 It's the "" stringification of $_, where $_ was set to '' in a foreach
504 loop, but it defies simplification into a small test case.
505 However, commenting them out has caused ext/List/Util/t/weak.t to fail
508 mad_free(o->op_madprop);
514 switch (o->op_type) {
515 case OP_NULL: /* Was holding old type, if any. */
516 if (PL_madskills && o->op_targ != OP_NULL) {
517 o->op_type = o->op_targ;
521 case OP_ENTEREVAL: /* Was holding hints. */
525 if (!(o->op_flags & OPf_REF)
526 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
532 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
533 /* not an OP_PADAV replacement */
535 if (cPADOPo->op_padix > 0) {
536 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
537 * may still exist on the pad */
538 pad_swipe(cPADOPo->op_padix, TRUE);
539 cPADOPo->op_padix = 0;
542 SvREFCNT_dec(cSVOPo->op_sv);
543 cSVOPo->op_sv = NULL;
547 case OP_METHOD_NAMED:
549 SvREFCNT_dec(cSVOPo->op_sv);
550 cSVOPo->op_sv = NULL;
553 Even if op_clear does a pad_free for the target of the op,
554 pad_free doesn't actually remove the sv that exists in the pad;
555 instead it lives on. This results in that it could be reused as
556 a target later on when the pad was reallocated.
559 pad_swipe(o->op_targ,1);
568 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
572 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
574 if (cPADOPo->op_padix > 0) {
575 pad_swipe(cPADOPo->op_padix, TRUE);
576 cPADOPo->op_padix = 0;
579 SvREFCNT_dec(cSVOPo->op_sv);
580 cSVOPo->op_sv = NULL;
584 PerlMemShared_free(cPVOPo->op_pv);
585 cPVOPo->op_pv = NULL;
589 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
593 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
594 /* No GvIN_PAD_off here, because other references may still
595 * exist on the pad */
596 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
599 SvREFCNT_dec((SV*)cPMOPo->op_pmreplrootu.op_pmtargetgv);
605 forget_pmop(cPMOPo, 1);
606 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
607 /* we use the "SAFE" version of the PM_ macros here
608 * since sv_clean_all might release some PMOPs
609 * after PL_regex_padav has been cleared
610 * and the clearing of PL_regex_padav needs to
611 * happen before sv_clean_all
613 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
614 PM_SETRE_SAFE(cPMOPo, NULL);
616 if(PL_regex_pad) { /* We could be in destruction */
617 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
618 SvREADONLY_off(PL_regex_pad[(cPMOPo)->op_pmoffset]);
619 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
620 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
627 if (o->op_targ > 0) {
628 pad_free(o->op_targ);
634 S_cop_free(pTHX_ COP* cop)
639 if (! specialWARN(cop->cop_warnings))
640 PerlMemShared_free(cop->cop_warnings);
641 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
645 S_forget_pmop(pTHX_ PMOP *const o
651 HV * const pmstash = PmopSTASH(o);
652 if (pmstash && !SvIS_FREED(pmstash)) {
653 MAGIC * const mg = mg_find((SV*)pmstash, PERL_MAGIC_symtab);
655 PMOP **const array = (PMOP**) mg->mg_ptr;
656 U32 count = mg->mg_len / sizeof(PMOP**);
661 /* Found it. Move the entry at the end to overwrite it. */
662 array[i] = array[--count];
663 mg->mg_len = count * sizeof(PMOP**);
664 /* Could realloc smaller at this point always, but probably
665 not worth it. Probably worth free()ing if we're the
668 Safefree(mg->mg_ptr);
685 S_find_and_forget_pmops(pTHX_ OP *o)
687 if (o->op_flags & OPf_KIDS) {
688 OP *kid = cUNOPo->op_first;
690 switch (kid->op_type) {
695 forget_pmop((PMOP*)kid, 0);
697 find_and_forget_pmops(kid);
698 kid = kid->op_sibling;
704 Perl_op_null(pTHX_ OP *o)
707 if (o->op_type == OP_NULL)
711 o->op_targ = o->op_type;
712 o->op_type = OP_NULL;
713 o->op_ppaddr = PL_ppaddr[OP_NULL];
717 Perl_op_refcnt_lock(pTHX)
725 Perl_op_refcnt_unlock(pTHX)
732 /* Contextualizers */
734 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
737 Perl_linklist(pTHX_ OP *o)
744 /* establish postfix order */
745 first = cUNOPo->op_first;
748 o->op_next = LINKLIST(first);
751 if (kid->op_sibling) {
752 kid->op_next = LINKLIST(kid->op_sibling);
753 kid = kid->op_sibling;
767 Perl_scalarkids(pTHX_ OP *o)
769 if (o && o->op_flags & OPf_KIDS) {
771 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
778 S_scalarboolean(pTHX_ OP *o)
781 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
782 if (ckWARN(WARN_SYNTAX)) {
783 const line_t oldline = CopLINE(PL_curcop);
785 if (PL_copline != NOLINE)
786 CopLINE_set(PL_curcop, PL_copline);
787 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
788 CopLINE_set(PL_curcop, oldline);
795 Perl_scalar(pTHX_ OP *o)
800 /* assumes no premature commitment */
801 if (!o || PL_error_count || (o->op_flags & OPf_WANT)
802 || o->op_type == OP_RETURN)
807 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
809 switch (o->op_type) {
811 scalar(cBINOPo->op_first);
816 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
820 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
821 if (!kPMOP->op_pmreplrootu.op_pmreplroot)
822 deprecate_old("implicit split to @_");
830 if (o->op_flags & OPf_KIDS) {
831 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
837 kid = cLISTOPo->op_first;
839 while ((kid = kid->op_sibling)) {
845 PL_curcop = &PL_compiling;
850 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
856 PL_curcop = &PL_compiling;
859 if (ckWARN(WARN_VOID))
860 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
866 Perl_scalarvoid(pTHX_ OP *o)
870 const char* useless = NULL;
874 /* trailing mad null ops don't count as "there" for void processing */
876 o->op_type != OP_NULL &&
878 o->op_sibling->op_type == OP_NULL)
881 for (sib = o->op_sibling;
882 sib && sib->op_type == OP_NULL;
883 sib = sib->op_sibling) ;
889 if (o->op_type == OP_NEXTSTATE
890 || o->op_type == OP_SETSTATE
891 || o->op_type == OP_DBSTATE
892 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
893 || o->op_targ == OP_SETSTATE
894 || o->op_targ == OP_DBSTATE)))
895 PL_curcop = (COP*)o; /* for warning below */
897 /* assumes no premature commitment */
898 want = o->op_flags & OPf_WANT;
899 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
900 || o->op_type == OP_RETURN)
905 if ((o->op_private & OPpTARGET_MY)
906 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
908 return scalar(o); /* As if inside SASSIGN */
911 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
913 switch (o->op_type) {
915 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
919 if (o->op_flags & OPf_STACKED)
923 if (o->op_private == 4)
995 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
996 useless = OP_DESC(o);
1000 kid = cUNOPo->op_first;
1001 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1002 kid->op_type != OP_TRANS) {
1005 useless = "negative pattern binding (!~)";
1012 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1013 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1014 useless = "a variable";
1019 if (cSVOPo->op_private & OPpCONST_STRICT)
1020 no_bareword_allowed(o);
1022 if (ckWARN(WARN_VOID)) {
1023 useless = "a constant";
1024 if (o->op_private & OPpCONST_ARYBASE)
1026 /* don't warn on optimised away booleans, eg
1027 * use constant Foo, 5; Foo || print; */
1028 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1030 /* the constants 0 and 1 are permitted as they are
1031 conventionally used as dummies in constructs like
1032 1 while some_condition_with_side_effects; */
1033 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1035 else if (SvPOK(sv)) {
1036 /* perl4's way of mixing documentation and code
1037 (before the invention of POD) was based on a
1038 trick to mix nroff and perl code. The trick was
1039 built upon these three nroff macros being used in
1040 void context. The pink camel has the details in
1041 the script wrapman near page 319. */
1042 const char * const maybe_macro = SvPVX_const(sv);
1043 if (strnEQ(maybe_macro, "di", 2) ||
1044 strnEQ(maybe_macro, "ds", 2) ||
1045 strnEQ(maybe_macro, "ig", 2))
1050 op_null(o); /* don't execute or even remember it */
1054 o->op_type = OP_PREINC; /* pre-increment is faster */
1055 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1059 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1060 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1064 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1065 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1069 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1070 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1079 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1084 if (o->op_flags & OPf_STACKED)
1091 if (!(o->op_flags & OPf_KIDS))
1102 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1109 /* all requires must return a boolean value */
1110 o->op_flags &= ~OPf_WANT;
1115 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
1116 if (!kPMOP->op_pmreplrootu.op_pmreplroot)
1117 deprecate_old("implicit split to @_");
1121 if (useless && ckWARN(WARN_VOID))
1122 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1127 Perl_listkids(pTHX_ OP *o)
1129 if (o && o->op_flags & OPf_KIDS) {
1131 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1138 Perl_list(pTHX_ OP *o)
1143 /* assumes no premature commitment */
1144 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
1145 || o->op_type == OP_RETURN)
1150 if ((o->op_private & OPpTARGET_MY)
1151 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1153 return o; /* As if inside SASSIGN */
1156 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1158 switch (o->op_type) {
1161 list(cBINOPo->op_first);
1166 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1174 if (!(o->op_flags & OPf_KIDS))
1176 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1177 list(cBINOPo->op_first);
1178 return gen_constant_list(o);
1185 kid = cLISTOPo->op_first;
1187 while ((kid = kid->op_sibling)) {
1188 if (kid->op_sibling)
1193 PL_curcop = &PL_compiling;
1197 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1198 if (kid->op_sibling)
1203 PL_curcop = &PL_compiling;
1206 /* all requires must return a boolean value */
1207 o->op_flags &= ~OPf_WANT;
1214 Perl_scalarseq(pTHX_ OP *o)
1218 const OPCODE type = o->op_type;
1220 if (type == OP_LINESEQ || type == OP_SCOPE ||
1221 type == OP_LEAVE || type == OP_LEAVETRY)
1224 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1225 if (kid->op_sibling) {
1229 PL_curcop = &PL_compiling;
1231 o->op_flags &= ~OPf_PARENS;
1232 if (PL_hints & HINT_BLOCK_SCOPE)
1233 o->op_flags |= OPf_PARENS;
1236 o = newOP(OP_STUB, 0);
1241 S_modkids(pTHX_ OP *o, I32 type)
1243 if (o && o->op_flags & OPf_KIDS) {
1245 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1251 /* Propagate lvalue ("modifiable") context to an op and its children.
1252 * 'type' represents the context type, roughly based on the type of op that
1253 * would do the modifying, although local() is represented by OP_NULL.
1254 * It's responsible for detecting things that can't be modified, flag
1255 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1256 * might have to vivify a reference in $x), and so on.
1258 * For example, "$a+1 = 2" would cause mod() to be called with o being
1259 * OP_ADD and type being OP_SASSIGN, and would output an error.
1263 Perl_mod(pTHX_ OP *o, I32 type)
1267 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1270 if (!o || PL_error_count)
1273 if ((o->op_private & OPpTARGET_MY)
1274 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1279 switch (o->op_type) {
1285 if (!(o->op_private & OPpCONST_ARYBASE))
1288 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1289 CopARYBASE_set(&PL_compiling,
1290 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1294 SAVECOPARYBASE(&PL_compiling);
1295 CopARYBASE_set(&PL_compiling, 0);
1297 else if (type == OP_REFGEN)
1300 Perl_croak(aTHX_ "That use of $[ is unsupported");
1303 if (o->op_flags & OPf_PARENS || PL_madskills)
1307 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1308 !(o->op_flags & OPf_STACKED)) {
1309 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1310 /* The default is to set op_private to the number of children,
1311 which for a UNOP such as RV2CV is always 1. And w're using
1312 the bit for a flag in RV2CV, so we need it clear. */
1313 o->op_private &= ~1;
1314 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1315 assert(cUNOPo->op_first->op_type == OP_NULL);
1316 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1319 else if (o->op_private & OPpENTERSUB_NOMOD)
1321 else { /* lvalue subroutine call */
1322 o->op_private |= OPpLVAL_INTRO;
1323 PL_modcount = RETURN_UNLIMITED_NUMBER;
1324 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1325 /* Backward compatibility mode: */
1326 o->op_private |= OPpENTERSUB_INARGS;
1329 else { /* Compile-time error message: */
1330 OP *kid = cUNOPo->op_first;
1334 if (kid->op_type != OP_PUSHMARK) {
1335 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1337 "panic: unexpected lvalue entersub "
1338 "args: type/targ %ld:%"UVuf,
1339 (long)kid->op_type, (UV)kid->op_targ);
1340 kid = kLISTOP->op_first;
1342 while (kid->op_sibling)
1343 kid = kid->op_sibling;
1344 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1346 if (kid->op_type == OP_METHOD_NAMED
1347 || kid->op_type == OP_METHOD)
1351 NewOp(1101, newop, 1, UNOP);
1352 newop->op_type = OP_RV2CV;
1353 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1354 newop->op_first = NULL;
1355 newop->op_next = (OP*)newop;
1356 kid->op_sibling = (OP*)newop;
1357 newop->op_private |= OPpLVAL_INTRO;
1358 newop->op_private &= ~1;
1362 if (kid->op_type != OP_RV2CV)
1364 "panic: unexpected lvalue entersub "
1365 "entry via type/targ %ld:%"UVuf,
1366 (long)kid->op_type, (UV)kid->op_targ);
1367 kid->op_private |= OPpLVAL_INTRO;
1368 break; /* Postpone until runtime */
1372 kid = kUNOP->op_first;
1373 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1374 kid = kUNOP->op_first;
1375 if (kid->op_type == OP_NULL)
1377 "Unexpected constant lvalue entersub "
1378 "entry via type/targ %ld:%"UVuf,
1379 (long)kid->op_type, (UV)kid->op_targ);
1380 if (kid->op_type != OP_GV) {
1381 /* Restore RV2CV to check lvalueness */
1383 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1384 okid->op_next = kid->op_next;
1385 kid->op_next = okid;
1388 okid->op_next = NULL;
1389 okid->op_type = OP_RV2CV;
1391 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1392 okid->op_private |= OPpLVAL_INTRO;
1393 okid->op_private &= ~1;
1397 cv = GvCV(kGVOP_gv);
1407 /* grep, foreach, subcalls, refgen */
1408 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1410 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1411 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1413 : (o->op_type == OP_ENTERSUB
1414 ? "non-lvalue subroutine call"
1416 type ? PL_op_desc[type] : "local"));
1430 case OP_RIGHT_SHIFT:
1439 if (!(o->op_flags & OPf_STACKED))
1446 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1452 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1453 PL_modcount = RETURN_UNLIMITED_NUMBER;
1454 return o; /* Treat \(@foo) like ordinary list. */
1458 if (scalar_mod_type(o, type))
1460 ref(cUNOPo->op_first, o->op_type);
1464 if (type == OP_LEAVESUBLV)
1465 o->op_private |= OPpMAYBE_LVSUB;
1471 PL_modcount = RETURN_UNLIMITED_NUMBER;
1474 ref(cUNOPo->op_first, o->op_type);
1479 PL_hints |= HINT_BLOCK_SCOPE;
1494 PL_modcount = RETURN_UNLIMITED_NUMBER;
1495 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1496 return o; /* Treat \(@foo) like ordinary list. */
1497 if (scalar_mod_type(o, type))
1499 if (type == OP_LEAVESUBLV)
1500 o->op_private |= OPpMAYBE_LVSUB;
1504 if (!type) /* local() */
1505 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1506 PAD_COMPNAME_PV(o->op_targ));
1514 if (type != OP_SASSIGN)
1518 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1523 if (type == OP_LEAVESUBLV)
1524 o->op_private |= OPpMAYBE_LVSUB;
1526 pad_free(o->op_targ);
1527 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1528 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1529 if (o->op_flags & OPf_KIDS)
1530 mod(cBINOPo->op_first->op_sibling, type);
1535 ref(cBINOPo->op_first, o->op_type);
1536 if (type == OP_ENTERSUB &&
1537 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1538 o->op_private |= OPpLVAL_DEFER;
1539 if (type == OP_LEAVESUBLV)
1540 o->op_private |= OPpMAYBE_LVSUB;
1550 if (o->op_flags & OPf_KIDS)
1551 mod(cLISTOPo->op_last, type);
1556 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1558 else if (!(o->op_flags & OPf_KIDS))
1560 if (o->op_targ != OP_LIST) {
1561 mod(cBINOPo->op_first, type);
1567 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1572 if (type != OP_LEAVESUBLV)
1574 break; /* mod()ing was handled by ck_return() */
1577 /* [20011101.069] File test operators interpret OPf_REF to mean that
1578 their argument is a filehandle; thus \stat(".") should not set
1580 if (type == OP_REFGEN &&
1581 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1584 if (type != OP_LEAVESUBLV)
1585 o->op_flags |= OPf_MOD;
1587 if (type == OP_AASSIGN || type == OP_SASSIGN)
1588 o->op_flags |= OPf_SPECIAL|OPf_REF;
1589 else if (!type) { /* local() */
1592 o->op_private |= OPpLVAL_INTRO;
1593 o->op_flags &= ~OPf_SPECIAL;
1594 PL_hints |= HINT_BLOCK_SCOPE;
1599 if (ckWARN(WARN_SYNTAX)) {
1600 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1601 "Useless localization of %s", OP_DESC(o));
1605 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1606 && type != OP_LEAVESUBLV)
1607 o->op_flags |= OPf_REF;
1612 S_scalar_mod_type(const OP *o, I32 type)
1616 if (o->op_type == OP_RV2GV)
1640 case OP_RIGHT_SHIFT:
1659 S_is_handle_constructor(const OP *o, I32 numargs)
1661 switch (o->op_type) {
1669 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1682 Perl_refkids(pTHX_ OP *o, I32 type)
1684 if (o && o->op_flags & OPf_KIDS) {
1686 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1693 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1698 if (!o || PL_error_count)
1701 switch (o->op_type) {
1703 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1704 !(o->op_flags & OPf_STACKED)) {
1705 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1706 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1707 assert(cUNOPo->op_first->op_type == OP_NULL);
1708 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1709 o->op_flags |= OPf_SPECIAL;
1710 o->op_private &= ~1;
1715 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1716 doref(kid, type, set_op_ref);
1719 if (type == OP_DEFINED)
1720 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1721 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1724 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1725 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1726 : type == OP_RV2HV ? OPpDEREF_HV
1728 o->op_flags |= OPf_MOD;
1735 o->op_flags |= OPf_REF;
1738 if (type == OP_DEFINED)
1739 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1740 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1746 o->op_flags |= OPf_REF;
1751 if (!(o->op_flags & OPf_KIDS))
1753 doref(cBINOPo->op_first, type, set_op_ref);
1757 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1758 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1759 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1760 : type == OP_RV2HV ? OPpDEREF_HV
1762 o->op_flags |= OPf_MOD;
1772 if (!(o->op_flags & OPf_KIDS))
1774 doref(cLISTOPo->op_last, type, set_op_ref);
1784 S_dup_attrlist(pTHX_ OP *o)
1789 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1790 * where the first kid is OP_PUSHMARK and the remaining ones
1791 * are OP_CONST. We need to push the OP_CONST values.
1793 if (o->op_type == OP_CONST)
1794 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1796 else if (o->op_type == OP_NULL)
1800 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1802 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1803 if (o->op_type == OP_CONST)
1804 rop = append_elem(OP_LIST, rop,
1805 newSVOP(OP_CONST, o->op_flags,
1806 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1813 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1818 /* fake up C<use attributes $pkg,$rv,@attrs> */
1819 ENTER; /* need to protect against side-effects of 'use' */
1821 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1823 #define ATTRSMODULE "attributes"
1824 #define ATTRSMODULE_PM "attributes.pm"
1827 /* Don't force the C<use> if we don't need it. */
1828 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1829 if (svp && *svp != &PL_sv_undef)
1830 NOOP; /* already in %INC */
1832 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1833 newSVpvs(ATTRSMODULE), NULL);
1836 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1837 newSVpvs(ATTRSMODULE),
1839 prepend_elem(OP_LIST,
1840 newSVOP(OP_CONST, 0, stashsv),
1841 prepend_elem(OP_LIST,
1842 newSVOP(OP_CONST, 0,
1844 dup_attrlist(attrs))));
1850 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1853 OP *pack, *imop, *arg;
1859 assert(target->op_type == OP_PADSV ||
1860 target->op_type == OP_PADHV ||
1861 target->op_type == OP_PADAV);
1863 /* Ensure that attributes.pm is loaded. */
1864 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1866 /* Need package name for method call. */
1867 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1869 /* Build up the real arg-list. */
1870 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1872 arg = newOP(OP_PADSV, 0);
1873 arg->op_targ = target->op_targ;
1874 arg = prepend_elem(OP_LIST,
1875 newSVOP(OP_CONST, 0, stashsv),
1876 prepend_elem(OP_LIST,
1877 newUNOP(OP_REFGEN, 0,
1878 mod(arg, OP_REFGEN)),
1879 dup_attrlist(attrs)));
1881 /* Fake up a method call to import */
1882 meth = newSVpvs_share("import");
1883 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1884 append_elem(OP_LIST,
1885 prepend_elem(OP_LIST, pack, list(arg)),
1886 newSVOP(OP_METHOD_NAMED, 0, meth)));
1887 imop->op_private |= OPpENTERSUB_NOMOD;
1889 /* Combine the ops. */
1890 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1894 =notfor apidoc apply_attrs_string
1896 Attempts to apply a list of attributes specified by the C<attrstr> and
1897 C<len> arguments to the subroutine identified by the C<cv> argument which
1898 is expected to be associated with the package identified by the C<stashpv>
1899 argument (see L<attributes>). It gets this wrong, though, in that it
1900 does not correctly identify the boundaries of the individual attribute
1901 specifications within C<attrstr>. This is not really intended for the
1902 public API, but has to be listed here for systems such as AIX which
1903 need an explicit export list for symbols. (It's called from XS code
1904 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1905 to respect attribute syntax properly would be welcome.
1911 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1912 const char *attrstr, STRLEN len)
1917 len = strlen(attrstr);
1921 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1923 const char * const sstr = attrstr;
1924 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1925 attrs = append_elem(OP_LIST, attrs,
1926 newSVOP(OP_CONST, 0,
1927 newSVpvn(sstr, attrstr-sstr)));
1931 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1932 newSVpvs(ATTRSMODULE),
1933 NULL, prepend_elem(OP_LIST,
1934 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1935 prepend_elem(OP_LIST,
1936 newSVOP(OP_CONST, 0,
1942 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1947 if (!o || PL_error_count)
1951 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
1952 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
1956 if (type == OP_LIST) {
1958 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1959 my_kid(kid, attrs, imopsp);
1960 } else if (type == OP_UNDEF
1966 } else if (type == OP_RV2SV || /* "our" declaration */
1968 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1969 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1970 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1972 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1974 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1976 PL_in_my_stash = NULL;
1977 apply_attrs(GvSTASH(gv),
1978 (type == OP_RV2SV ? GvSV(gv) :
1979 type == OP_RV2AV ? (SV*)GvAV(gv) :
1980 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1983 o->op_private |= OPpOUR_INTRO;
1986 else if (type != OP_PADSV &&
1989 type != OP_PUSHMARK)
1991 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1993 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1996 else if (attrs && type != OP_PUSHMARK) {
2000 PL_in_my_stash = NULL;
2002 /* check for C<my Dog $spot> when deciding package */
2003 stash = PAD_COMPNAME_TYPE(o->op_targ);
2005 stash = PL_curstash;
2006 apply_attrs_my(stash, o, attrs, imopsp);
2008 o->op_flags |= OPf_MOD;
2009 o->op_private |= OPpLVAL_INTRO;
2010 if (PL_in_my == KEY_state)
2011 o->op_private |= OPpPAD_STATE;
2016 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2020 int maybe_scalar = 0;
2022 /* [perl #17376]: this appears to be premature, and results in code such as
2023 C< our(%x); > executing in list mode rather than void mode */
2025 if (o->op_flags & OPf_PARENS)
2035 o = my_kid(o, attrs, &rops);
2037 if (maybe_scalar && o->op_type == OP_PADSV) {
2038 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
2039 o->op_private |= OPpLVAL_INTRO;
2042 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
2045 PL_in_my_stash = NULL;
2050 Perl_my(pTHX_ OP *o)
2052 return my_attrs(o, NULL);
2056 Perl_sawparens(pTHX_ OP *o)
2058 PERL_UNUSED_CONTEXT;
2060 o->op_flags |= OPf_PARENS;
2065 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2069 const OPCODE ltype = left->op_type;
2070 const OPCODE rtype = right->op_type;
2072 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2073 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2075 const char * const desc
2076 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
2077 ? (int)rtype : OP_MATCH];
2078 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2079 ? "@array" : "%hash");
2080 Perl_warner(aTHX_ packWARN(WARN_MISC),
2081 "Applying %s to %s will act on scalar(%s)",
2082 desc, sample, sample);
2085 if (rtype == OP_CONST &&
2086 cSVOPx(right)->op_private & OPpCONST_BARE &&
2087 cSVOPx(right)->op_private & OPpCONST_STRICT)
2089 no_bareword_allowed(right);
2092 ismatchop = rtype == OP_MATCH ||
2093 rtype == OP_SUBST ||
2095 if (ismatchop && right->op_private & OPpTARGET_MY) {
2097 right->op_private &= ~OPpTARGET_MY;
2099 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2102 right->op_flags |= OPf_STACKED;
2103 if (rtype != OP_MATCH &&
2104 ! (rtype == OP_TRANS &&
2105 right->op_private & OPpTRANS_IDENTICAL))
2106 newleft = mod(left, rtype);
2109 if (right->op_type == OP_TRANS)
2110 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2112 o = prepend_elem(rtype, scalar(newleft), right);
2114 return newUNOP(OP_NOT, 0, scalar(o));
2118 return bind_match(type, left,
2119 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2123 Perl_invert(pTHX_ OP *o)
2127 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2131 Perl_scope(pTHX_ OP *o)
2135 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2136 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2137 o->op_type = OP_LEAVE;
2138 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2140 else if (o->op_type == OP_LINESEQ) {
2142 o->op_type = OP_SCOPE;
2143 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2144 kid = ((LISTOP*)o)->op_first;
2145 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2148 /* The following deals with things like 'do {1 for 1}' */
2149 kid = kid->op_sibling;
2151 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2156 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2162 Perl_block_start(pTHX_ int full)
2165 const int retval = PL_savestack_ix;
2166 pad_block_start(full);
2168 PL_hints &= ~HINT_BLOCK_SCOPE;
2169 SAVECOMPILEWARNINGS();
2170 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2175 Perl_block_end(pTHX_ I32 floor, OP *seq)
2178 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2179 OP* const retval = scalarseq(seq);
2181 CopHINTS_set(&PL_compiling, PL_hints);
2183 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2192 const PADOFFSET offset = pad_findmy("$_");
2193 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2194 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2197 OP * const o = newOP(OP_PADSV, 0);
2198 o->op_targ = offset;
2204 Perl_newPROG(pTHX_ OP *o)
2210 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2211 ((PL_in_eval & EVAL_KEEPERR)
2212 ? OPf_SPECIAL : 0), o);
2213 PL_eval_start = linklist(PL_eval_root);
2214 PL_eval_root->op_private |= OPpREFCOUNTED;
2215 OpREFCNT_set(PL_eval_root, 1);
2216 PL_eval_root->op_next = 0;
2217 CALL_PEEP(PL_eval_start);
2220 if (o->op_type == OP_STUB) {
2221 PL_comppad_name = 0;
2223 S_op_destroy(aTHX_ o);
2226 PL_main_root = scope(sawparens(scalarvoid(o)));
2227 PL_curcop = &PL_compiling;
2228 PL_main_start = LINKLIST(PL_main_root);
2229 PL_main_root->op_private |= OPpREFCOUNTED;
2230 OpREFCNT_set(PL_main_root, 1);
2231 PL_main_root->op_next = 0;
2232 CALL_PEEP(PL_main_start);
2235 /* Register with debugger */
2238 = Perl_get_cvn_flags(aTHX_ STR_WITH_LEN("DB::postponed"), 0);
2242 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2244 call_sv((SV*)cv, G_DISCARD);
2251 Perl_localize(pTHX_ OP *o, I32 lex)
2254 if (o->op_flags & OPf_PARENS)
2255 /* [perl #17376]: this appears to be premature, and results in code such as
2256 C< our(%x); > executing in list mode rather than void mode */
2263 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
2264 && ckWARN(WARN_PARENTHESIS))
2266 char *s = PL_bufptr;
2269 /* some heuristics to detect a potential error */
2270 while (*s && (strchr(", \t\n", *s)))
2274 if (*s && strchr("@$%*", *s) && *++s
2275 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2278 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2280 while (*s && (strchr(", \t\n", *s)))
2286 if (sigil && (*s == ';' || *s == '=')) {
2287 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2288 "Parentheses missing around \"%s\" list",
2289 lex ? (PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my")
2297 o = mod(o, OP_NULL); /* a bit kludgey */
2299 PL_in_my_stash = NULL;
2304 Perl_jmaybe(pTHX_ OP *o)
2306 if (o->op_type == OP_LIST) {
2308 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2309 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2315 Perl_fold_constants(pTHX_ register OP *o)
2320 VOL I32 type = o->op_type;
2325 SV * const oldwarnhook = PL_warnhook;
2326 SV * const olddiehook = PL_diehook;
2329 if (PL_opargs[type] & OA_RETSCALAR)
2331 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2332 o->op_targ = pad_alloc(type, SVs_PADTMP);
2334 /* integerize op, unless it happens to be C<-foo>.
2335 * XXX should pp_i_negate() do magic string negation instead? */
2336 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2337 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2338 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2340 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2343 if (!(PL_opargs[type] & OA_FOLDCONST))
2348 /* XXX might want a ck_negate() for this */
2349 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2360 /* XXX what about the numeric ops? */
2361 if (PL_hints & HINT_LOCALE)
2366 goto nope; /* Don't try to run w/ errors */
2368 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2369 const OPCODE type = curop->op_type;
2370 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2372 type != OP_SCALAR &&
2374 type != OP_PUSHMARK)
2380 curop = LINKLIST(o);
2381 old_next = o->op_next;
2385 oldscope = PL_scopestack_ix;
2386 create_eval_scope(G_FAKINGEVAL);
2388 PL_warnhook = PERL_WARNHOOK_FATAL;
2395 sv = *(PL_stack_sp--);
2396 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2397 pad_swipe(o->op_targ, FALSE);
2398 else if (SvTEMP(sv)) { /* grab mortal temp? */
2399 SvREFCNT_inc_simple_void(sv);
2404 /* Something tried to die. Abandon constant folding. */
2405 /* Pretend the error never happened. */
2406 sv_setpvn(ERRSV,"",0);
2407 o->op_next = old_next;
2411 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2412 PL_warnhook = oldwarnhook;
2413 PL_diehook = olddiehook;
2414 /* XXX note that this croak may fail as we've already blown away
2415 * the stack - eg any nested evals */
2416 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2419 PL_warnhook = oldwarnhook;
2420 PL_diehook = olddiehook;
2422 if (PL_scopestack_ix > oldscope)
2423 delete_eval_scope();
2432 if (type == OP_RV2GV)
2433 newop = newGVOP(OP_GV, 0, (GV*)sv);
2435 newop = newSVOP(OP_CONST, 0, (SV*)sv);
2436 op_getmad(o,newop,'f');
2444 Perl_gen_constant_list(pTHX_ register OP *o)
2448 const I32 oldtmps_floor = PL_tmps_floor;
2452 return o; /* Don't attempt to run with errors */
2454 PL_op = curop = LINKLIST(o);
2460 assert (!(curop->op_flags & OPf_SPECIAL));
2461 assert(curop->op_type == OP_RANGE);
2463 PL_tmps_floor = oldtmps_floor;
2465 o->op_type = OP_RV2AV;
2466 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2467 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2468 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2469 o->op_opt = 0; /* needs to be revisited in peep() */
2470 curop = ((UNOP*)o)->op_first;
2471 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2473 op_getmad(curop,o,'O');
2482 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2485 if (!o || o->op_type != OP_LIST)
2486 o = newLISTOP(OP_LIST, 0, o, NULL);
2488 o->op_flags &= ~OPf_WANT;
2490 if (!(PL_opargs[type] & OA_MARK))
2491 op_null(cLISTOPo->op_first);
2493 o->op_type = (OPCODE)type;
2494 o->op_ppaddr = PL_ppaddr[type];
2495 o->op_flags |= flags;
2497 o = CHECKOP(type, o);
2498 if (o->op_type != (unsigned)type)
2501 return fold_constants(o);
2504 /* List constructors */
2507 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2515 if (first->op_type != (unsigned)type
2516 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2518 return newLISTOP(type, 0, first, last);
2521 if (first->op_flags & OPf_KIDS)
2522 ((LISTOP*)first)->op_last->op_sibling = last;
2524 first->op_flags |= OPf_KIDS;
2525 ((LISTOP*)first)->op_first = last;
2527 ((LISTOP*)first)->op_last = last;
2532 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2540 if (first->op_type != (unsigned)type)
2541 return prepend_elem(type, (OP*)first, (OP*)last);
2543 if (last->op_type != (unsigned)type)
2544 return append_elem(type, (OP*)first, (OP*)last);
2546 first->op_last->op_sibling = last->op_first;
2547 first->op_last = last->op_last;
2548 first->op_flags |= (last->op_flags & OPf_KIDS);
2551 if (last->op_first && first->op_madprop) {
2552 MADPROP *mp = last->op_first->op_madprop;
2554 while (mp->mad_next)
2556 mp->mad_next = first->op_madprop;
2559 last->op_first->op_madprop = first->op_madprop;
2562 first->op_madprop = last->op_madprop;
2563 last->op_madprop = 0;
2566 S_op_destroy(aTHX_ (OP*)last);
2572 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2580 if (last->op_type == (unsigned)type) {
2581 if (type == OP_LIST) { /* already a PUSHMARK there */
2582 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2583 ((LISTOP*)last)->op_first->op_sibling = first;
2584 if (!(first->op_flags & OPf_PARENS))
2585 last->op_flags &= ~OPf_PARENS;
2588 if (!(last->op_flags & OPf_KIDS)) {
2589 ((LISTOP*)last)->op_last = first;
2590 last->op_flags |= OPf_KIDS;
2592 first->op_sibling = ((LISTOP*)last)->op_first;
2593 ((LISTOP*)last)->op_first = first;
2595 last->op_flags |= OPf_KIDS;
2599 return newLISTOP(type, 0, first, last);
2607 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2610 Newxz(tk, 1, TOKEN);
2611 tk->tk_type = (OPCODE)optype;
2612 tk->tk_type = 12345;
2614 tk->tk_mad = madprop;
2619 Perl_token_free(pTHX_ TOKEN* tk)
2621 if (tk->tk_type != 12345)
2623 mad_free(tk->tk_mad);
2628 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2632 if (tk->tk_type != 12345) {
2633 Perl_warner(aTHX_ packWARN(WARN_MISC),
2634 "Invalid TOKEN object ignored");
2641 /* faked up qw list? */
2643 tm->mad_type == MAD_SV &&
2644 SvPVX((SV*)tm->mad_val)[0] == 'q')
2651 /* pretend constant fold didn't happen? */
2652 if (mp->mad_key == 'f' &&
2653 (o->op_type == OP_CONST ||
2654 o->op_type == OP_GV) )
2656 token_getmad(tk,(OP*)mp->mad_val,slot);
2670 if (mp->mad_key == 'X')
2671 mp->mad_key = slot; /* just change the first one */
2681 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2690 /* pretend constant fold didn't happen? */
2691 if (mp->mad_key == 'f' &&
2692 (o->op_type == OP_CONST ||
2693 o->op_type == OP_GV) )
2695 op_getmad(from,(OP*)mp->mad_val,slot);
2702 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2705 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2711 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2720 /* pretend constant fold didn't happen? */
2721 if (mp->mad_key == 'f' &&
2722 (o->op_type == OP_CONST ||
2723 o->op_type == OP_GV) )
2725 op_getmad(from,(OP*)mp->mad_val,slot);
2732 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2735 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2739 PerlIO_printf(PerlIO_stderr(),
2740 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2746 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2764 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2768 addmad(tm, &(o->op_madprop), slot);
2772 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2793 Perl_newMADsv(pTHX_ char key, SV* sv)
2795 return newMADPROP(key, MAD_SV, sv, 0);
2799 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
2802 Newxz(mp, 1, MADPROP);
2805 mp->mad_vlen = vlen;
2806 mp->mad_type = type;
2808 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2813 Perl_mad_free(pTHX_ MADPROP* mp)
2815 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2819 mad_free(mp->mad_next);
2820 /* if (PL_lex_state != LEX_NOTPARSING && mp->mad_vlen)
2821 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2822 switch (mp->mad_type) {
2826 Safefree((char*)mp->mad_val);
2829 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2830 op_free((OP*)mp->mad_val);
2833 sv_free((SV*)mp->mad_val);
2836 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
2845 Perl_newNULLLIST(pTHX)
2847 return newOP(OP_STUB, 0);
2851 Perl_force_list(pTHX_ OP *o)
2853 if (!o || o->op_type != OP_LIST)
2854 o = newLISTOP(OP_LIST, 0, o, NULL);
2860 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2865 NewOp(1101, listop, 1, LISTOP);
2867 listop->op_type = (OPCODE)type;
2868 listop->op_ppaddr = PL_ppaddr[type];
2871 listop->op_flags = (U8)flags;
2875 else if (!first && last)
2878 first->op_sibling = last;
2879 listop->op_first = first;
2880 listop->op_last = last;
2881 if (type == OP_LIST) {
2882 OP* const pushop = newOP(OP_PUSHMARK, 0);
2883 pushop->op_sibling = first;
2884 listop->op_first = pushop;
2885 listop->op_flags |= OPf_KIDS;
2887 listop->op_last = pushop;
2890 return CHECKOP(type, listop);
2894 Perl_newOP(pTHX_ I32 type, I32 flags)
2898 NewOp(1101, o, 1, OP);
2899 o->op_type = (OPCODE)type;
2900 o->op_ppaddr = PL_ppaddr[type];
2901 o->op_flags = (U8)flags;
2903 o->op_latefreed = 0;
2907 o->op_private = (U8)(0 | (flags >> 8));
2908 if (PL_opargs[type] & OA_RETSCALAR)
2910 if (PL_opargs[type] & OA_TARGET)
2911 o->op_targ = pad_alloc(type, SVs_PADTMP);
2912 return CHECKOP(type, o);
2916 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2922 first = newOP(OP_STUB, 0);
2923 if (PL_opargs[type] & OA_MARK)
2924 first = force_list(first);
2926 NewOp(1101, unop, 1, UNOP);
2927 unop->op_type = (OPCODE)type;
2928 unop->op_ppaddr = PL_ppaddr[type];
2929 unop->op_first = first;
2930 unop->op_flags = (U8)(flags | OPf_KIDS);
2931 unop->op_private = (U8)(1 | (flags >> 8));
2932 unop = (UNOP*) CHECKOP(type, unop);
2936 return fold_constants((OP *) unop);
2940 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2944 NewOp(1101, binop, 1, BINOP);
2947 first = newOP(OP_NULL, 0);
2949 binop->op_type = (OPCODE)type;
2950 binop->op_ppaddr = PL_ppaddr[type];
2951 binop->op_first = first;
2952 binop->op_flags = (U8)(flags | OPf_KIDS);
2955 binop->op_private = (U8)(1 | (flags >> 8));
2958 binop->op_private = (U8)(2 | (flags >> 8));
2959 first->op_sibling = last;
2962 binop = (BINOP*)CHECKOP(type, binop);
2963 if (binop->op_next || binop->op_type != (OPCODE)type)
2966 binop->op_last = binop->op_first->op_sibling;
2968 return fold_constants((OP *)binop);
2971 static int uvcompare(const void *a, const void *b)
2972 __attribute__nonnull__(1)
2973 __attribute__nonnull__(2)
2974 __attribute__pure__;
2975 static int uvcompare(const void *a, const void *b)
2977 if (*((const UV *)a) < (*(const UV *)b))
2979 if (*((const UV *)a) > (*(const UV *)b))
2981 if (*((const UV *)a+1) < (*(const UV *)b+1))
2983 if (*((const UV *)a+1) > (*(const UV *)b+1))
2989 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2992 SV * const tstr = ((SVOP*)expr)->op_sv;
2995 (repl->op_type == OP_NULL)
2996 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
2998 ((SVOP*)repl)->op_sv;
3001 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3002 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3006 register short *tbl;
3008 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3009 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3010 I32 del = o->op_private & OPpTRANS_DELETE;
3012 PL_hints |= HINT_BLOCK_SCOPE;
3015 o->op_private |= OPpTRANS_FROM_UTF;
3018 o->op_private |= OPpTRANS_TO_UTF;
3020 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3021 SV* const listsv = newSVpvs("# comment\n");
3023 const U8* tend = t + tlen;
3024 const U8* rend = r + rlen;
3038 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3039 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3042 const U32 flags = UTF8_ALLOW_DEFAULT;
3046 t = tsave = bytes_to_utf8(t, &len);
3049 if (!to_utf && rlen) {
3051 r = rsave = bytes_to_utf8(r, &len);
3055 /* There are several snags with this code on EBCDIC:
3056 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3057 2. scan_const() in toke.c has encoded chars in native encoding which makes
3058 ranges at least in EBCDIC 0..255 range the bottom odd.
3062 U8 tmpbuf[UTF8_MAXBYTES+1];
3065 Newx(cp, 2*tlen, UV);
3067 transv = newSVpvs("");
3069 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3071 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3073 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3077 cp[2*i+1] = cp[2*i];
3081 qsort(cp, i, 2*sizeof(UV), uvcompare);
3082 for (j = 0; j < i; j++) {
3084 diff = val - nextmin;
3086 t = uvuni_to_utf8(tmpbuf,nextmin);
3087 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3089 U8 range_mark = UTF_TO_NATIVE(0xff);
3090 t = uvuni_to_utf8(tmpbuf, val - 1);
3091 sv_catpvn(transv, (char *)&range_mark, 1);
3092 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3099 t = uvuni_to_utf8(tmpbuf,nextmin);
3100 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3102 U8 range_mark = UTF_TO_NATIVE(0xff);
3103 sv_catpvn(transv, (char *)&range_mark, 1);
3105 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
3106 UNICODE_ALLOW_SUPER);
3107 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3108 t = (const U8*)SvPVX_const(transv);
3109 tlen = SvCUR(transv);
3113 else if (!rlen && !del) {
3114 r = t; rlen = tlen; rend = tend;
3117 if ((!rlen && !del) || t == r ||
3118 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3120 o->op_private |= OPpTRANS_IDENTICAL;
3124 while (t < tend || tfirst <= tlast) {
3125 /* see if we need more "t" chars */
3126 if (tfirst > tlast) {
3127 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3129 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3131 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3138 /* now see if we need more "r" chars */
3139 if (rfirst > rlast) {
3141 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3143 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3145 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3154 rfirst = rlast = 0xffffffff;
3158 /* now see which range will peter our first, if either. */
3159 tdiff = tlast - tfirst;
3160 rdiff = rlast - rfirst;
3167 if (rfirst == 0xffffffff) {
3168 diff = tdiff; /* oops, pretend rdiff is infinite */
3170 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3171 (long)tfirst, (long)tlast);
3173 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3177 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3178 (long)tfirst, (long)(tfirst + diff),
3181 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3182 (long)tfirst, (long)rfirst);
3184 if (rfirst + diff > max)
3185 max = rfirst + diff;
3187 grows = (tfirst < rfirst &&
3188 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3200 else if (max > 0xff)
3205 PerlMemShared_free(cPVOPo->op_pv);
3206 cPVOPo->op_pv = NULL;
3208 swash = (SV*)swash_init("utf8", "", listsv, bits, none);
3210 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3211 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3212 PAD_SETSV(cPADOPo->op_padix, swash);
3215 cSVOPo->op_sv = swash;
3217 SvREFCNT_dec(listsv);
3218 SvREFCNT_dec(transv);
3220 if (!del && havefinal && rlen)
3221 (void)hv_store((HV*)SvRV(swash), "FINAL", 5,
3222 newSVuv((UV)final), 0);
3225 o->op_private |= OPpTRANS_GROWS;
3231 op_getmad(expr,o,'e');
3232 op_getmad(repl,o,'r');
3240 tbl = (short*)cPVOPo->op_pv;
3242 Zero(tbl, 256, short);
3243 for (i = 0; i < (I32)tlen; i++)
3245 for (i = 0, j = 0; i < 256; i++) {
3247 if (j >= (I32)rlen) {
3256 if (i < 128 && r[j] >= 128)
3266 o->op_private |= OPpTRANS_IDENTICAL;
3268 else if (j >= (I32)rlen)
3273 PerlMemShared_realloc(tbl,
3274 (0x101+rlen-j) * sizeof(short));
3275 cPVOPo->op_pv = (char*)tbl;
3277 tbl[0x100] = (short)(rlen - j);
3278 for (i=0; i < (I32)rlen - j; i++)
3279 tbl[0x101+i] = r[j+i];
3283 if (!rlen && !del) {
3286 o->op_private |= OPpTRANS_IDENTICAL;
3288 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3289 o->op_private |= OPpTRANS_IDENTICAL;
3291 for (i = 0; i < 256; i++)
3293 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3294 if (j >= (I32)rlen) {
3296 if (tbl[t[i]] == -1)
3302 if (tbl[t[i]] == -1) {
3303 if (t[i] < 128 && r[j] >= 128)
3310 o->op_private |= OPpTRANS_GROWS;
3312 op_getmad(expr,o,'e');
3313 op_getmad(repl,o,'r');
3323 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3328 NewOp(1101, pmop, 1, PMOP);
3329 pmop->op_type = (OPCODE)type;
3330 pmop->op_ppaddr = PL_ppaddr[type];
3331 pmop->op_flags = (U8)flags;
3332 pmop->op_private = (U8)(0 | (flags >> 8));
3334 if (PL_hints & HINT_RE_TAINT)
3335 pmop->op_pmflags |= PMf_RETAINT;
3336 if (PL_hints & HINT_LOCALE)
3337 pmop->op_pmflags |= PMf_LOCALE;
3341 if (av_len((AV*) PL_regex_pad[0]) > -1) {
3342 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
3343 pmop->op_pmoffset = SvIV(repointer);
3344 SvREPADTMP_off(repointer);
3345 sv_setiv(repointer,0);
3347 SV * const repointer = newSViv(0);
3348 av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
3349 pmop->op_pmoffset = av_len(PL_regex_padav);
3350 PL_regex_pad = AvARRAY(PL_regex_padav);
3354 return CHECKOP(type, pmop);
3357 /* Given some sort of match op o, and an expression expr containing a
3358 * pattern, either compile expr into a regex and attach it to o (if it's
3359 * constant), or convert expr into a runtime regcomp op sequence (if it's
3362 * isreg indicates that the pattern is part of a regex construct, eg
3363 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3364 * split "pattern", which aren't. In the former case, expr will be a list
3365 * if the pattern contains more than one term (eg /a$b/) or if it contains
3366 * a replacement, ie s/// or tr///.
3370 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3375 I32 repl_has_vars = 0;
3379 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3380 /* last element in list is the replacement; pop it */
3382 repl = cLISTOPx(expr)->op_last;
3383 kid = cLISTOPx(expr)->op_first;
3384 while (kid->op_sibling != repl)
3385 kid = kid->op_sibling;
3386 kid->op_sibling = NULL;
3387 cLISTOPx(expr)->op_last = kid;
3390 if (isreg && expr->op_type == OP_LIST &&
3391 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3393 /* convert single element list to element */
3394 OP* const oe = expr;
3395 expr = cLISTOPx(oe)->op_first->op_sibling;
3396 cLISTOPx(oe)->op_first->op_sibling = NULL;
3397 cLISTOPx(oe)->op_last = NULL;
3401 if (o->op_type == OP_TRANS) {
3402 return pmtrans(o, expr, repl);
3405 reglist = isreg && expr->op_type == OP_LIST;
3409 PL_hints |= HINT_BLOCK_SCOPE;
3412 if (expr->op_type == OP_CONST) {
3414 SV * const pat = ((SVOP*)expr)->op_sv;
3415 const char *p = SvPV_const(pat, plen);
3416 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
3417 if ((o->op_flags & OPf_SPECIAL) && (plen == 1 && *p == ' ')) {
3418 U32 was_readonly = SvREADONLY(pat);
3422 sv_force_normal_flags(pat, 0);
3423 assert(!SvREADONLY(pat));
3426 SvREADONLY_off(pat);
3430 sv_setpvn(pat, "\\s+", 3);
3432 SvFLAGS(pat) |= was_readonly;
3434 p = SvPV_const(pat, plen);
3435 pm_flags |= RXf_SKIPWHITE;
3438 pm_flags |= RXf_UTF8;
3439 /* FIXME - can we make this function take const char * args? */
3440 PM_SETRE(pm, CALLREGCOMP((char*)p, (char*)p + plen, pm_flags));
3443 op_getmad(expr,(OP*)pm,'e');
3449 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3450 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3452 : OP_REGCMAYBE),0,expr);
3454 NewOp(1101, rcop, 1, LOGOP);
3455 rcop->op_type = OP_REGCOMP;
3456 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3457 rcop->op_first = scalar(expr);
3458 rcop->op_flags |= OPf_KIDS
3459 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3460 | (reglist ? OPf_STACKED : 0);
3461 rcop->op_private = 1;
3464 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3466 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3469 /* establish postfix order */
3470 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3472 rcop->op_next = expr;
3473 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3476 rcop->op_next = LINKLIST(expr);
3477 expr->op_next = (OP*)rcop;
3480 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3485 if (pm->op_pmflags & PMf_EVAL) {
3487 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
3488 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
3490 else if (repl->op_type == OP_CONST)
3494 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3495 if (curop->op_type == OP_SCOPE
3496 || curop->op_type == OP_LEAVE
3497 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3498 if (curop->op_type == OP_GV) {
3499 GV * const gv = cGVOPx_gv(curop);
3501 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3504 else if (curop->op_type == OP_RV2CV)
3506 else if (curop->op_type == OP_RV2SV ||
3507 curop->op_type == OP_RV2AV ||
3508 curop->op_type == OP_RV2HV ||
3509 curop->op_type == OP_RV2GV) {
3510 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3513 else if (curop->op_type == OP_PADSV ||
3514 curop->op_type == OP_PADAV ||
3515 curop->op_type == OP_PADHV ||
3516 curop->op_type == OP_PADANY)
3520 else if (curop->op_type == OP_PUSHRE)
3521 NOOP; /* Okay here, dangerous in newASSIGNOP */
3531 || PM_GETRE(pm)->extflags & RXf_EVAL_SEEN)))
3533 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3534 prepend_elem(o->op_type, scalar(repl), o);
3537 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3538 pm->op_pmflags |= PMf_MAYBE_CONST;
3540 NewOp(1101, rcop, 1, LOGOP);
3541 rcop->op_type = OP_SUBSTCONT;
3542 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3543 rcop->op_first = scalar(repl);
3544 rcop->op_flags |= OPf_KIDS;
3545 rcop->op_private = 1;
3548 /* establish postfix order */
3549 rcop->op_next = LINKLIST(repl);
3550 repl->op_next = (OP*)rcop;
3552 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
3553 assert(!(pm->op_pmflags & PMf_ONCE));
3554 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
3563 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3567 NewOp(1101, svop, 1, SVOP);
3568 svop->op_type = (OPCODE)type;
3569 svop->op_ppaddr = PL_ppaddr[type];
3571 svop->op_next = (OP*)svop;
3572 svop->op_flags = (U8)flags;
3573 if (PL_opargs[type] & OA_RETSCALAR)
3575 if (PL_opargs[type] & OA_TARGET)
3576 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3577 return CHECKOP(type, svop);
3582 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3586 NewOp(1101, padop, 1, PADOP);
3587 padop->op_type = (OPCODE)type;
3588 padop->op_ppaddr = PL_ppaddr[type];
3589 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3590 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3591 PAD_SETSV(padop->op_padix, sv);
3594 padop->op_next = (OP*)padop;
3595 padop->op_flags = (U8)flags;
3596 if (PL_opargs[type] & OA_RETSCALAR)
3598 if (PL_opargs[type] & OA_TARGET)
3599 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3600 return CHECKOP(type, padop);
3605 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3611 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3613 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3618 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3622 NewOp(1101, pvop, 1, PVOP);
3623 pvop->op_type = (OPCODE)type;
3624 pvop->op_ppaddr = PL_ppaddr[type];
3626 pvop->op_next = (OP*)pvop;
3627 pvop->op_flags = (U8)flags;
3628 if (PL_opargs[type] & OA_RETSCALAR)
3630 if (PL_opargs[type] & OA_TARGET)
3631 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3632 return CHECKOP(type, pvop);
3640 Perl_package(pTHX_ OP *o)
3643 SV *const sv = cSVOPo->op_sv;
3648 save_hptr(&PL_curstash);
3649 save_item(PL_curstname);
3651 PL_curstash = gv_stashsv(sv, GV_ADD);
3652 sv_setsv(PL_curstname, sv);
3654 PL_hints |= HINT_BLOCK_SCOPE;
3655 PL_copline = NOLINE;
3661 if (!PL_madskills) {
3666 pegop = newOP(OP_NULL,0);
3667 op_getmad(o,pegop,'P');
3677 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3684 OP *pegop = newOP(OP_NULL,0);
3687 if (idop->op_type != OP_CONST)
3688 Perl_croak(aTHX_ "Module name must be constant");
3691 op_getmad(idop,pegop,'U');
3696 SV * const vesv = ((SVOP*)version)->op_sv;
3699 op_getmad(version,pegop,'V');
3700 if (!arg && !SvNIOKp(vesv)) {
3707 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3708 Perl_croak(aTHX_ "Version number must be constant number");
3710 /* Make copy of idop so we don't free it twice */
3711 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3713 /* Fake up a method call to VERSION */
3714 meth = newSVpvs_share("VERSION");
3715 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3716 append_elem(OP_LIST,
3717 prepend_elem(OP_LIST, pack, list(version)),
3718 newSVOP(OP_METHOD_NAMED, 0, meth)));
3722 /* Fake up an import/unimport */
3723 if (arg && arg->op_type == OP_STUB) {
3725 op_getmad(arg,pegop,'S');
3726 imop = arg; /* no import on explicit () */
3728 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3729 imop = NULL; /* use 5.0; */
3731 idop->op_private |= OPpCONST_NOVER;
3737 op_getmad(arg,pegop,'A');
3739 /* Make copy of idop so we don't free it twice */
3740 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3742 /* Fake up a method call to import/unimport */
3744 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3745 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3746 append_elem(OP_LIST,
3747 prepend_elem(OP_LIST, pack, list(arg)),
3748 newSVOP(OP_METHOD_NAMED, 0, meth)));
3751 /* Fake up the BEGIN {}, which does its thing immediately. */
3753 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3756 append_elem(OP_LINESEQ,
3757 append_elem(OP_LINESEQ,
3758 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3759 newSTATEOP(0, NULL, veop)),
3760 newSTATEOP(0, NULL, imop) ));
3762 /* The "did you use incorrect case?" warning used to be here.
3763 * The problem is that on case-insensitive filesystems one
3764 * might get false positives for "use" (and "require"):
3765 * "use Strict" or "require CARP" will work. This causes
3766 * portability problems for the script: in case-strict
3767 * filesystems the script will stop working.
3769 * The "incorrect case" warning checked whether "use Foo"
3770 * imported "Foo" to your namespace, but that is wrong, too:
3771 * there is no requirement nor promise in the language that
3772 * a Foo.pm should or would contain anything in package "Foo".
3774 * There is very little Configure-wise that can be done, either:
3775 * the case-sensitivity of the build filesystem of Perl does not
3776 * help in guessing the case-sensitivity of the runtime environment.
3779 PL_hints |= HINT_BLOCK_SCOPE;
3780 PL_copline = NOLINE;
3782 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3785 if (!PL_madskills) {
3786 /* FIXME - don't allocate pegop if !PL_madskills */
3795 =head1 Embedding Functions
3797 =for apidoc load_module
3799 Loads the module whose name is pointed to by the string part of name.
3800 Note that the actual module name, not its filename, should be given.
3801 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3802 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3803 (or 0 for no flags). ver, if specified, provides version semantics
3804 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3805 arguments can be used to specify arguments to the module's import()
3806 method, similar to C<use Foo::Bar VERSION LIST>.
3811 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3814 va_start(args, ver);
3815 vload_module(flags, name, ver, &args);
3819 #ifdef PERL_IMPLICIT_CONTEXT
3821 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3825 va_start(args, ver);
3826 vload_module(flags, name, ver, &args);
3832 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3837 OP * const modname = newSVOP(OP_CONST, 0, name);
3838 modname->op_private |= OPpCONST_BARE;
3840 veop = newSVOP(OP_CONST, 0, ver);
3844 if (flags & PERL_LOADMOD_NOIMPORT) {
3845 imop = sawparens(newNULLLIST());
3847 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3848 imop = va_arg(*args, OP*);
3853 sv = va_arg(*args, SV*);
3855 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3856 sv = va_arg(*args, SV*);
3860 const line_t ocopline = PL_copline;
3861 COP * const ocurcop = PL_curcop;
3862 const int oexpect = PL_expect;
3864 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3865 veop, modname, imop);
3866 PL_expect = oexpect;
3867 PL_copline = ocopline;
3868 PL_curcop = ocurcop;
3873 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3879 if (!force_builtin) {
3880 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3881 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3882 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3883 gv = gvp ? *gvp : NULL;
3887 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3888 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3889 append_elem(OP_LIST, term,
3890 scalar(newUNOP(OP_RV2CV, 0,
3891 newGVOP(OP_GV, 0, gv))))));
3894 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3900 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3902 return newBINOP(OP_LSLICE, flags,
3903 list(force_list(subscript)),
3904 list(force_list(listval)) );
3908 S_is_list_assignment(pTHX_ register const OP *o)
3916 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
3917 o = cUNOPo->op_first;
3919 flags = o->op_flags;
3921 if (type == OP_COND_EXPR) {
3922 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3923 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3928 yyerror("Assignment to both a list and a scalar");
3932 if (type == OP_LIST &&
3933 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
3934 o->op_private & OPpLVAL_INTRO)
3937 if (type == OP_LIST || flags & OPf_PARENS ||
3938 type == OP_RV2AV || type == OP_RV2HV ||
3939 type == OP_ASLICE || type == OP_HSLICE)
3942 if (type == OP_PADAV || type == OP_PADHV)
3945 if (type == OP_RV2SV)
3952 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3958 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3959 return newLOGOP(optype, 0,
3960 mod(scalar(left), optype),
3961 newUNOP(OP_SASSIGN, 0, scalar(right)));
3964 return newBINOP(optype, OPf_STACKED,
3965 mod(scalar(left), optype), scalar(right));
3969 if (is_list_assignment(left)) {
3973 /* Grandfathering $[ assignment here. Bletch.*/
3974 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3975 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3976 left = mod(left, OP_AASSIGN);
3979 else if (left->op_type == OP_CONST) {
3981 /* Result of assignment is always 1 (or we'd be dead already) */
3982 return newSVOP(OP_CONST, 0, newSViv(1));
3984 curop = list(force_list(left));
3985 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3986 o->op_private = (U8)(0 | (flags >> 8));
3988 /* PL_generation sorcery:
3989 * an assignment like ($a,$b) = ($c,$d) is easier than
3990 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3991 * To detect whether there are common vars, the global var
3992 * PL_generation is incremented for each assign op we compile.
3993 * Then, while compiling the assign op, we run through all the
3994 * variables on both sides of the assignment, setting a spare slot
3995 * in each of them to PL_generation. If any of them already have
3996 * that value, we know we've got commonality. We could use a
3997 * single bit marker, but then we'd have to make 2 passes, first
3998 * to clear the flag, then to test and set it. To find somewhere
3999 * to store these values, evil chicanery is done with SvUVX().
4005 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4006 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4007 if (curop->op_type == OP_GV) {
4008 GV *gv = cGVOPx_gv(curop);
4010 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4012 GvASSIGN_GENERATION_set(gv, PL_generation);
4014 else if (curop->op_type == OP_PADSV ||
4015 curop->op_type == OP_PADAV ||
4016 curop->op_type == OP_PADHV ||
4017 curop->op_type == OP_PADANY)
4019 if (PAD_COMPNAME_GEN(curop->op_targ)
4020 == (STRLEN)PL_generation)
4022 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4025 else if (curop->op_type == OP_RV2CV)
4027 else if (curop->op_type == OP_RV2SV ||
4028 curop->op_type == OP_RV2AV ||
4029 curop->op_type == OP_RV2HV ||
4030 curop->op_type == OP_RV2GV) {
4031 if (lastop->op_type != OP_GV) /* funny deref? */
4034 else if (curop->op_type == OP_PUSHRE) {
4036 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4037 GV *const gv = (GV*)PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff);
4039 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4041 GvASSIGN_GENERATION_set(gv, PL_generation);
4045 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4048 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4050 GvASSIGN_GENERATION_set(gv, PL_generation);
4060 o->op_private |= OPpASSIGN_COMMON;
4063 if ( ((left->op_private & OPpLVAL_INTRO) || ckWARN(WARN_MISC))
4064 && (left->op_type == OP_LIST
4065 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
4067 OP* lop = ((LISTOP*)left)->op_first;
4069 if (lop->op_type == OP_PADSV ||
4070 lop->op_type == OP_PADAV ||
4071 lop->op_type == OP_PADHV ||
4072 lop->op_type == OP_PADANY)
4074 if (lop->op_private & OPpPAD_STATE) {
4075 if (left->op_private & OPpLVAL_INTRO) {
4076 o->op_private |= OPpASSIGN_STATE;
4077 /* hijacking PADSTALE for uninitialized state variables */
4078 SvPADSTALE_on(PAD_SVl(lop->op_targ));
4080 else { /* we already checked for WARN_MISC before */
4081 Perl_warner(aTHX_ packWARN(WARN_MISC), "State variable %s will be reinitialized",
4082 PAD_COMPNAME_PV(lop->op_targ));
4086 lop = lop->op_sibling;
4089 else if (((left->op_private & (OPpLVAL_INTRO | OPpPAD_STATE))
4090 == (OPpLVAL_INTRO | OPpPAD_STATE))
4091 && ( left->op_type == OP_PADSV
4092 || left->op_type == OP_PADAV
4093 || left->op_type == OP_PADHV
4094 || left->op_type == OP_PADANY))
4096 o->op_private |= OPpASSIGN_STATE;
4097 /* hijacking PADSTALE for uninitialized state variables */
4098 SvPADSTALE_on(PAD_SVl(left->op_targ));
4101 if (right && right->op_type == OP_SPLIT) {
4102 OP* tmpop = ((LISTOP*)right)->op_first;
4103 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4104 PMOP * const pm = (PMOP*)tmpop;
4105 if (left->op_type == OP_RV2AV &&
4106 !(left->op_private & OPpLVAL_INTRO) &&
4107 !(o->op_private & OPpASSIGN_COMMON) )
4109 tmpop = ((UNOP*)left)->op_first;
4110 if (tmpop->op_type == OP_GV
4112 && !pm->op_pmreplrootu.op_pmtargetoff
4114 && !pm->op_pmreplrootu.op_pmtargetgv
4118 pm->op_pmreplrootu.op_pmtargetoff
4119 = cPADOPx(tmpop)->op_padix;
4120 cPADOPx(tmpop)->op_padix = 0; /* steal it */
4122 pm->op_pmreplrootu.op_pmtargetgv
4123 = (GV*)cSVOPx(tmpop)->op_sv;
4124 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
4126 pm->op_pmflags |= PMf_ONCE;
4127 tmpop = cUNOPo->op_first; /* to list (nulled) */
4128 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4129 tmpop->op_sibling = NULL; /* don't free split */
4130 right->op_next = tmpop->op_next; /* fix starting loc */
4132 op_getmad(o,right,'R'); /* blow off assign */
4134 op_free(o); /* blow off assign */
4136 right->op_flags &= ~OPf_WANT;
4137 /* "I don't know and I don't care." */
4142 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4143 ((LISTOP*)right)->op_last->op_type == OP_CONST)
4145 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4147 sv_setiv(sv, PL_modcount+1);
4155 right = newOP(OP_UNDEF, 0);
4156 if (right->op_type == OP_READLINE) {
4157 right->op_flags |= OPf_STACKED;
4158 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
4161 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
4162 o = newBINOP(OP_SASSIGN, flags,
4163 scalar(right), mod(scalar(left), OP_SASSIGN) );
4169 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4170 o->op_private |= OPpCONST_ARYBASE;
4177 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4180 const U32 seq = intro_my();
4183 NewOp(1101, cop, 1, COP);
4184 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4185 cop->op_type = OP_DBSTATE;
4186 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4189 cop->op_type = OP_NEXTSTATE;
4190 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4192 cop->op_flags = (U8)flags;
4193 CopHINTS_set(cop, PL_hints);
4195 cop->op_private |= NATIVE_HINTS;
4197 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4198 cop->op_next = (OP*)cop;
4201 CopLABEL_set(cop, label);
4202 PL_hints |= HINT_BLOCK_SCOPE;
4205 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4206 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4208 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4209 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4210 if (cop->cop_hints_hash) {
4212 cop->cop_hints_hash->refcounted_he_refcnt++;
4213 HINTS_REFCNT_UNLOCK;
4216 if (PL_copline == NOLINE)
4217 CopLINE_set(cop, CopLINE(PL_curcop));
4219 CopLINE_set(cop, PL_copline);
4220 PL_copline = NOLINE;
4223 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4225 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4227 CopSTASH_set(cop, PL_curstash);
4229 if (PERLDB_LINE && PL_curstash != PL_debstash) {
4230 AV *av = CopFILEAVx(PL_curcop);
4232 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4233 if (svp && *svp != &PL_sv_undef ) {
4234 (void)SvIOK_on(*svp);
4235 SvIV_set(*svp, PTR2IV(cop));
4240 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4245 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4248 return new_logop(type, flags, &first, &other);
4252 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4257 OP *first = *firstp;
4258 OP * const other = *otherp;
4260 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4261 return newBINOP(type, flags, scalar(first), scalar(other));
4263 scalarboolean(first);
4264 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
4265 if (first->op_type == OP_NOT
4266 && (first->op_flags & OPf_SPECIAL)
4267 && (first->op_flags & OPf_KIDS)) {
4268 if (type == OP_AND || type == OP_OR) {
4274 first = *firstp = cUNOPo->op_first;
4276 first->op_next = o->op_next;
4277 cUNOPo->op_first = NULL;
4279 op_getmad(o,first,'O');
4285 if (first->op_type == OP_CONST) {
4286 if (first->op_private & OPpCONST_STRICT)
4287 no_bareword_allowed(first);
4288 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
4289 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4290 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
4291 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
4292 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
4294 if (other->op_type == OP_CONST)
4295 other->op_private |= OPpCONST_SHORTCIRCUIT;
4297 OP *newop = newUNOP(OP_NULL, 0, other);
4298 op_getmad(first, newop, '1');
4299 newop->op_targ = type; /* set "was" field */
4306 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4307 const OP *o2 = other;
4308 if ( ! (o2->op_type == OP_LIST
4309 && (( o2 = cUNOPx(o2)->op_first))
4310 && o2->op_type == OP_PUSHMARK
4311 && (( o2 = o2->op_sibling)) )
4314 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4315 || o2->op_type == OP_PADHV)
4316 && o2->op_private & OPpLVAL_INTRO
4317 && ckWARN(WARN_DEPRECATED))
4319 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4320 "Deprecated use of my() in false conditional");
4324 if (first->op_type == OP_CONST)
4325 first->op_private |= OPpCONST_SHORTCIRCUIT;
4327 first = newUNOP(OP_NULL, 0, first);
4328 op_getmad(other, first, '2');
4329 first->op_targ = type; /* set "was" field */
4336 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4337 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4339 const OP * const k1 = ((UNOP*)first)->op_first;
4340 const OP * const k2 = k1->op_sibling;
4342 switch (first->op_type)
4345 if (k2 && k2->op_type == OP_READLINE
4346 && (k2->op_flags & OPf_STACKED)
4347 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4349 warnop = k2->op_type;
4354 if (k1->op_type == OP_READDIR
4355 || k1->op_type == OP_GLOB
4356 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4357 || k1->op_type == OP_EACH)
4359 warnop = ((k1->op_type == OP_NULL)
4360 ? (OPCODE)k1->op_targ : k1->op_type);
4365 const line_t oldline = CopLINE(PL_curcop);
4366 CopLINE_set(PL_curcop, PL_copline);
4367 Perl_warner(aTHX_ packWARN(WARN_MISC),
4368 "Value of %s%s can be \"0\"; test with defined()",
4370 ((warnop == OP_READLINE || warnop == OP_GLOB)
4371 ? " construct" : "() operator"));
4372 CopLINE_set(PL_curcop, oldline);
4379 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4380 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4382 NewOp(1101, logop, 1, LOGOP);
4384 logop->op_type = (OPCODE)type;
4385 logop->op_ppaddr = PL_ppaddr[type];
4386 logop->op_first = first;
4387 logop->op_flags = (U8)(flags | OPf_KIDS);
4388 logop->op_other = LINKLIST(other);
4389 logop->op_private = (U8)(1 | (flags >> 8));
4391 /* establish postfix order */
4392 logop->op_next = LINKLIST(first);
4393 first->op_next = (OP*)logop;
4394 first->op_sibling = other;
4396 CHECKOP(type,logop);
4398 o = newUNOP(OP_NULL, 0, (OP*)logop);
4405 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4413 return newLOGOP(OP_AND, 0, first, trueop);
4415 return newLOGOP(OP_OR, 0, first, falseop);
4417 scalarboolean(first);
4418 if (first->op_type == OP_CONST) {
4419 /* Left or right arm of the conditional? */
4420 const bool left = SvTRUE(((SVOP*)first)->op_sv);
4421 OP *live = left ? trueop : falseop;
4422 OP *const dead = left ? falseop : trueop;
4423 if (first->op_private & OPpCONST_BARE &&
4424 first->op_private & OPpCONST_STRICT) {
4425 no_bareword_allowed(first);
4428 /* This is all dead code when PERL_MAD is not defined. */
4429 live = newUNOP(OP_NULL, 0, live);
4430 op_getmad(first, live, 'C');
4431 op_getmad(dead, live, left ? 'e' : 't');
4438 NewOp(1101, logop, 1, LOGOP);
4439 logop->op_type = OP_COND_EXPR;
4440 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4441 logop->op_first = first;
4442 logop->op_flags = (U8)(flags | OPf_KIDS);
4443 logop->op_private = (U8)(1 | (flags >> 8));
4444 logop->op_other = LINKLIST(trueop);
4445 logop->op_next = LINKLIST(falseop);
4447 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4450 /* establish postfix order */
4451 start = LINKLIST(first);
4452 first->op_next = (OP*)logop;
4454 first->op_sibling = trueop;
4455 trueop->op_sibling = falseop;
4456 o = newUNOP(OP_NULL, 0, (OP*)logop);
4458 trueop->op_next = falseop->op_next = o;
4465 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4474 NewOp(1101, range, 1, LOGOP);
4476 range->op_type = OP_RANGE;
4477 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4478 range->op_first = left;
4479 range->op_flags = OPf_KIDS;
4480 leftstart = LINKLIST(left);
4481 range->op_other = LINKLIST(right);
4482 range->op_private = (U8)(1 | (flags >> 8));
4484 left->op_sibling = right;
4486 range->op_next = (OP*)range;
4487 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4488 flop = newUNOP(OP_FLOP, 0, flip);
4489 o = newUNOP(OP_NULL, 0, flop);
4491 range->op_next = leftstart;
4493 left->op_next = flip;
4494 right->op_next = flop;
4496 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4497 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4498 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4499 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4501 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4502 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4505 if (!flip->op_private || !flop->op_private)
4506 linklist(o); /* blow off optimizer unless constant */
4512 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4517 const bool once = block && block->op_flags & OPf_SPECIAL &&
4518 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4520 PERL_UNUSED_ARG(debuggable);
4523 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4524 return block; /* do {} while 0 does once */
4525 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4526 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4527 expr = newUNOP(OP_DEFINED, 0,
4528 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4529 } else if (expr->op_flags & OPf_KIDS) {
4530 const OP * const k1 = ((UNOP*)expr)->op_first;
4531 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4532 switch (expr->op_type) {
4534 if (k2 && k2->op_type == OP_READLINE
4535 && (k2->op_flags & OPf_STACKED)
4536 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4537 expr = newUNOP(OP_DEFINED, 0, expr);
4541 if (k1 && (k1->op_type == OP_READDIR
4542 || k1->op_type == OP_GLOB
4543 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4544 || k1->op_type == OP_EACH))
4545 expr = newUNOP(OP_DEFINED, 0, expr);
4551 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4552 * op, in listop. This is wrong. [perl #27024] */
4554 block = newOP(OP_NULL, 0);
4555 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4556 o = new_logop(OP_AND, 0, &expr, &listop);
4559 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4561 if (once && o != listop)
4562 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4565 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4567 o->op_flags |= flags;
4569 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4574 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4575 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4584 PERL_UNUSED_ARG(debuggable);
4587 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4588 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4589 expr = newUNOP(OP_DEFINED, 0,
4590 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4591 } else if (expr->op_flags & OPf_KIDS) {
4592 const OP * const k1 = ((UNOP*)expr)->op_first;
4593 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4594 switch (expr->op_type) {
4596 if (k2 && k2->op_type == OP_READLINE
4597 && (k2->op_flags & OPf_STACKED)
4598 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4599 expr = newUNOP(OP_DEFINED, 0, expr);
4603 if (k1 && (k1->op_type == OP_READDIR
4604 || k1->op_type == OP_GLOB
4605 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4606 || k1->op_type == OP_EACH))
4607 expr = newUNOP(OP_DEFINED, 0, expr);
4614 block = newOP(OP_NULL, 0);
4615 else if (cont || has_my) {
4616 block = scope(block);
4620 next = LINKLIST(cont);
4623 OP * const unstack = newOP(OP_UNSTACK, 0);
4626 cont = append_elem(OP_LINESEQ, cont, unstack);
4630 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4632 redo = LINKLIST(listop);
4635 PL_copline = (line_t)whileline;
4637 o = new_logop(OP_AND, 0, &expr, &listop);
4638 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4639 op_free(expr); /* oops, it's a while (0) */
4641 return NULL; /* listop already freed by new_logop */
4644 ((LISTOP*)listop)->op_last->op_next =
4645 (o == listop ? redo : LINKLIST(o));
4651 NewOp(1101,loop,1,LOOP);
4652 loop->op_type = OP_ENTERLOOP;
4653 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4654 loop->op_private = 0;
4655 loop->op_next = (OP*)loop;
4658 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
4660 loop->op_redoop = redo;
4661 loop->op_lastop = o;
4662 o->op_private |= loopflags;
4665 loop->op_nextop = next;
4667 loop->op_nextop = o;
4669 o->op_flags |= flags;
4670 o->op_private |= (flags >> 8);
4675 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
4680 PADOFFSET padoff = 0;
4686 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
4687 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
4688 sv->op_type = OP_RV2GV;
4689 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
4691 /* The op_type check is needed to prevent a possible segfault
4692 * if the loop variable is undeclared and 'strict vars' is in
4693 * effect. This is illegal but is nonetheless parsed, so we
4694 * may reach this point with an OP_CONST where we're expecting
4697 if (cUNOPx(sv)->op_first->op_type == OP_GV
4698 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
4699 iterpflags |= OPpITER_DEF;
4701 else if (sv->op_type == OP_PADSV) { /* private variable */
4702 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
4703 padoff = sv->op_targ;
4713 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
4715 SV *const namesv = PAD_COMPNAME_SV(padoff);
4717 const char *const name = SvPV_const(namesv, len);
4719 if (len == 2 && name[0] == '$' && name[1] == '_')
4720 iterpflags |= OPpITER_DEF;
4724 const PADOFFSET offset = pad_findmy("$_");
4725 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
4726 sv = newGVOP(OP_GV, 0, PL_defgv);
4731 iterpflags |= OPpITER_DEF;
4733 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
4734 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4735 iterflags |= OPf_STACKED;
4737 else if (expr->op_type == OP_NULL &&
4738 (expr->op_flags & OPf_KIDS) &&
4739 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4741 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4742 * set the STACKED flag to indicate that these values are to be
4743 * treated as min/max values by 'pp_iterinit'.
4745 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4746 LOGOP* const range = (LOGOP*) flip->op_first;
4747 OP* const left = range->op_first;
4748 OP* const right = left->op_sibling;
4751 range->op_flags &= ~OPf_KIDS;
4752 range->op_first = NULL;
4754 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4755 listop->op_first->op_next = range->op_next;
4756 left->op_next = range->op_other;
4757 right->op_next = (OP*)listop;
4758 listop->op_next = listop->op_first;
4761 op_getmad(expr,(OP*)listop,'O');
4765 expr = (OP*)(listop);
4767 iterflags |= OPf_STACKED;
4770 expr = mod(force_list(expr), OP_GREPSTART);
4773 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4774 append_elem(OP_LIST, expr, scalar(sv))));
4775 assert(!loop->op_next);
4776 /* for my $x () sets OPpLVAL_INTRO;
4777 * for our $x () sets OPpOUR_INTRO */
4778 loop->op_private = (U8)iterpflags;
4779 #ifdef PL_OP_SLAB_ALLOC
4782 NewOp(1234,tmp,1,LOOP);
4783 Copy(loop,tmp,1,LISTOP);
4784 S_op_destroy(aTHX_ (OP*)loop);
4788 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
4790 loop->op_targ = padoff;
4791 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4793 op_getmad(madsv, (OP*)loop, 'v');
4794 PL_copline = forline;
4795 return newSTATEOP(0, label, wop);
4799 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4804 if (type != OP_GOTO || label->op_type == OP_CONST) {
4805 /* "last()" means "last" */
4806 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4807 o = newOP(type, OPf_SPECIAL);
4809 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
4810 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4814 op_getmad(label,o,'L');
4820 /* Check whether it's going to be a goto &function */
4821 if (label->op_type == OP_ENTERSUB
4822 && !(label->op_flags & OPf_STACKED))
4823 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4824 o = newUNOP(type, OPf_STACKED, label);
4826 PL_hints |= HINT_BLOCK_SCOPE;
4830 /* if the condition is a literal array or hash
4831 (or @{ ... } etc), make a reference to it.
4834 S_ref_array_or_hash(pTHX_ OP *cond)
4837 && (cond->op_type == OP_RV2AV
4838 || cond->op_type == OP_PADAV
4839 || cond->op_type == OP_RV2HV
4840 || cond->op_type == OP_PADHV))
4842 return newUNOP(OP_REFGEN,
4843 0, mod(cond, OP_REFGEN));
4849 /* These construct the optree fragments representing given()
4852 entergiven and enterwhen are LOGOPs; the op_other pointer
4853 points up to the associated leave op. We need this so we
4854 can put it in the context and make break/continue work.
4855 (Also, of course, pp_enterwhen will jump straight to
4856 op_other if the match fails.)
4860 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4861 I32 enter_opcode, I32 leave_opcode,
4862 PADOFFSET entertarg)
4868 NewOp(1101, enterop, 1, LOGOP);
4869 enterop->op_type = enter_opcode;
4870 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4871 enterop->op_flags = (U8) OPf_KIDS;
4872 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4873 enterop->op_private = 0;
4875 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4878 enterop->op_first = scalar(cond);
4879 cond->op_sibling = block;
4881 o->op_next = LINKLIST(cond);
4882 cond->op_next = (OP *) enterop;
4885 /* This is a default {} block */
4886 enterop->op_first = block;
4887 enterop->op_flags |= OPf_SPECIAL;
4889 o->op_next = (OP *) enterop;
4892 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4893 entergiven and enterwhen both
4896 enterop->op_next = LINKLIST(block);
4897 block->op_next = enterop->op_other = o;
4902 /* Does this look like a boolean operation? For these purposes
4903 a boolean operation is:
4904 - a subroutine call [*]
4905 - a logical connective
4906 - a comparison operator
4907 - a filetest operator, with the exception of -s -M -A -C
4908 - defined(), exists() or eof()
4909 - /$re/ or $foo =~ /$re/
4911 [*] possibly surprising
4914 S_looks_like_bool(pTHX_ const OP *o)
4917 switch(o->op_type) {
4919 return looks_like_bool(cLOGOPo->op_first);
4923 looks_like_bool(cLOGOPo->op_first)
4924 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4928 case OP_NOT: case OP_XOR:
4929 /* Note that OP_DOR is not here */
4931 case OP_EQ: case OP_NE: case OP_LT:
4932 case OP_GT: case OP_LE: case OP_GE:
4934 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4935 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4937 case OP_SEQ: case OP_SNE: case OP_SLT:
4938 case OP_SGT: case OP_SLE: case OP_SGE:
4942 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4943 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4944 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4945 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4946 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4947 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4948 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4949 case OP_FTTEXT: case OP_FTBINARY:
4951 case OP_DEFINED: case OP_EXISTS:
4952 case OP_MATCH: case OP_EOF:
4957 /* Detect comparisons that have been optimized away */
4958 if (cSVOPo->op_sv == &PL_sv_yes
4959 || cSVOPo->op_sv == &PL_sv_no)
4970 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4974 return newGIVWHENOP(
4975 ref_array_or_hash(cond),
4977 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4981 /* If cond is null, this is a default {} block */
4983 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4985 const bool cond_llb = (!cond || looks_like_bool(cond));
4991 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4993 scalar(ref_array_or_hash(cond)));
4996 return newGIVWHENOP(
4998 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4999 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
5003 =for apidoc cv_undef
5005 Clear out all the active components of a CV. This can happen either
5006 by an explicit C<undef &foo>, or by the reference count going to zero.
5007 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
5008 children can still follow the full lexical scope chain.
5014 Perl_cv_undef(pTHX_ CV *cv)
5018 if (CvFILE(cv) && !CvISXSUB(cv)) {
5019 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
5020 Safefree(CvFILE(cv));
5025 if (!CvISXSUB(cv) && CvROOT(cv)) {
5026 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
5027 Perl_croak(aTHX_ "Can't undef active subroutine");
5030 PAD_SAVE_SETNULLPAD();
5032 op_free(CvROOT(cv));
5037 SvPOK_off((SV*)cv); /* forget prototype */
5042 /* remove CvOUTSIDE unless this is an undef rather than a free */
5043 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
5044 if (!CvWEAKOUTSIDE(cv))
5045 SvREFCNT_dec(CvOUTSIDE(cv));
5046 CvOUTSIDE(cv) = NULL;
5049 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
5052 if (CvISXSUB(cv) && CvXSUB(cv)) {
5055 /* delete all flags except WEAKOUTSIDE */
5056 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
5060 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
5063 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
5064 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
5065 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
5066 || (p && (len != SvCUR(cv) /* Not the same length. */
5067 || memNE(p, SvPVX_const(cv), len))))
5068 && ckWARN_d(WARN_PROTOTYPE)) {
5069 SV* const msg = sv_newmortal();
5073 gv_efullname3(name = sv_newmortal(), gv, NULL);
5074 sv_setpvs(msg, "Prototype mismatch:");
5076 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
5078 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
5080 sv_catpvs(msg, ": none");
5081 sv_catpvs(msg, " vs ");
5083 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
5085 sv_catpvs(msg, "none");
5086 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
5090 static void const_sv_xsub(pTHX_ CV* cv);
5094 =head1 Optree Manipulation Functions
5096 =for apidoc cv_const_sv
5098 If C<cv> is a constant sub eligible for inlining. returns the constant
5099 value returned by the sub. Otherwise, returns NULL.
5101 Constant subs can be created with C<newCONSTSUB> or as described in
5102 L<perlsub/"Constant Functions">.
5107 Perl_cv_const_sv(pTHX_ CV *cv)
5109 PERL_UNUSED_CONTEXT;
5112 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
5114 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
5117 /* op_const_sv: examine an optree to determine whether it's in-lineable.
5118 * Can be called in 3 ways:
5121 * look for a single OP_CONST with attached value: return the value
5123 * cv && CvCLONE(cv) && !CvCONST(cv)
5125 * examine the clone prototype, and if contains only a single
5126 * OP_CONST referencing a pad const, or a single PADSV referencing
5127 * an outer lexical, return a non-zero value to indicate the CV is
5128 * a candidate for "constizing" at clone time
5132 * We have just cloned an anon prototype that was marked as a const
5133 * candidiate. Try to grab the current value, and in the case of
5134 * PADSV, ignore it if it has multiple references. Return the value.
5138 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
5146 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
5147 o = cLISTOPo->op_first->op_sibling;
5149 for (; o; o = o->op_next) {
5150 const OPCODE type = o->op_type;
5152 if (sv && o->op_next == o)
5154 if (o->op_next != o) {
5155 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
5157 if (type == OP_DBSTATE)
5160 if (type == OP_LEAVESUB || type == OP_RETURN)
5164 if (type == OP_CONST && cSVOPo->op_sv)
5166 else if (cv && type == OP_CONST) {
5167 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5171 else if (cv && type == OP_PADSV) {
5172 if (CvCONST(cv)) { /* newly cloned anon */
5173 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5174 /* the candidate should have 1 ref from this pad and 1 ref
5175 * from the parent */
5176 if (!sv || SvREFCNT(sv) != 2)
5183 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
5184 sv = &PL_sv_undef; /* an arbitrary non-null value */
5199 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5202 /* This would be the return value, but the return cannot be reached. */
5203 OP* pegop = newOP(OP_NULL, 0);
5206 PERL_UNUSED_ARG(floor);
5216 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
5218 NORETURN_FUNCTION_END;
5223 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
5225 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
5229 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5236 register CV *cv = NULL;
5238 /* If the subroutine has no body, no attributes, and no builtin attributes
5239 then it's just a sub declaration, and we may be able to get away with
5240 storing with a placeholder scalar in the symbol table, rather than a
5241 full GV and CV. If anything is present then it will take a full CV to
5243 const I32 gv_fetch_flags
5244 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5246 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
5247 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : NULL;
5250 assert(proto->op_type == OP_CONST);
5251 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
5256 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
5257 SV * const sv = sv_newmortal();
5258 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
5259 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
5260 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
5261 aname = SvPVX_const(sv);
5266 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
5267 : gv_fetchpv(aname ? aname
5268 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5269 gv_fetch_flags, SVt_PVCV);
5271 if (!PL_madskills) {
5280 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
5281 maximum a prototype before. */
5282 if (SvTYPE(gv) > SVt_NULL) {
5283 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
5284 && ckWARN_d(WARN_PROTOTYPE))
5286 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
5288 cv_ckproto_len((CV*)gv, NULL, ps, ps_len);
5291 sv_setpvn((SV*)gv, ps, ps_len);
5293 sv_setiv((SV*)gv, -1);
5294 SvREFCNT_dec(PL_compcv);
5295 cv = PL_compcv = NULL;
5296 PL_sub_generation++;
5300 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
5302 #ifdef GV_UNIQUE_CHECK
5303 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
5304 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
5308 if (!block || !ps || *ps || attrs
5309 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5311 || block->op_type == OP_NULL
5316 const_sv = op_const_sv(block, NULL);
5319 const bool exists = CvROOT(cv) || CvXSUB(cv);
5321 #ifdef GV_UNIQUE_CHECK
5322 if (exists && GvUNIQUE(gv)) {
5323 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
5327 /* if the subroutine doesn't exist and wasn't pre-declared
5328 * with a prototype, assume it will be AUTOLOADed,
5329 * skipping the prototype check
5331 if (exists || SvPOK(cv))
5332 cv_ckproto_len(cv, gv, ps, ps_len);
5333 /* already defined (or promised)? */
5334 if (exists || GvASSUMECV(gv)) {
5337 || block->op_type == OP_NULL
5340 if (CvFLAGS(PL_compcv)) {
5341 /* might have had built-in attrs applied */
5342 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5344 /* just a "sub foo;" when &foo is already defined */
5345 SAVEFREESV(PL_compcv);
5350 && block->op_type != OP_NULL
5353 if (ckWARN(WARN_REDEFINE)
5355 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
5357 const line_t oldline = CopLINE(PL_curcop);
5358 if (PL_copline != NOLINE)
5359 CopLINE_set(PL_curcop, PL_copline);
5360 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5361 CvCONST(cv) ? "Constant subroutine %s redefined"
5362 : "Subroutine %s redefined", name);
5363 CopLINE_set(PL_curcop, oldline);
5366 if (!PL_minus_c) /* keep old one around for madskills */
5369 /* (PL_madskills unset in used file.) */
5377 SvREFCNT_inc_simple_void_NN(const_sv);
5379 assert(!CvROOT(cv) && !CvCONST(cv));
5380 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
5381 CvXSUBANY(cv).any_ptr = const_sv;
5382 CvXSUB(cv) = const_sv_xsub;
5388 cv = newCONSTSUB(NULL, name, const_sv);
5390 PL_sub_generation++;
5394 SvREFCNT_dec(PL_compcv);
5402 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
5403 * before we clobber PL_compcv.
5407 || block->op_type == OP_NULL
5411 /* Might have had built-in attributes applied -- propagate them. */
5412 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5413 if (CvGV(cv) && GvSTASH(CvGV(cv)))
5414 stash = GvSTASH(CvGV(cv));
5415 else if (CvSTASH(cv))
5416 stash = CvSTASH(cv);
5418 stash = PL_curstash;
5421 /* possibly about to re-define existing subr -- ignore old cv */
5422 rcv = (SV*)PL_compcv;
5423 if (name && GvSTASH(gv))
5424 stash = GvSTASH(gv);
5426 stash = PL_curstash;
5428 apply_attrs(stash, rcv, attrs, FALSE);
5430 if (cv) { /* must reuse cv if autoloaded */
5437 || block->op_type == OP_NULL) && !PL_madskills
5440 /* got here with just attrs -- work done, so bug out */
5441 SAVEFREESV(PL_compcv);
5444 /* transfer PL_compcv to cv */
5446 CvFLAGS(cv) = CvFLAGS(PL_compcv);
5447 if (!CvWEAKOUTSIDE(cv))
5448 SvREFCNT_dec(CvOUTSIDE(cv));
5449 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
5450 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
5451 CvOUTSIDE(PL_compcv) = 0;
5452 CvPADLIST(cv) = CvPADLIST(PL_compcv);
5453 CvPADLIST(PL_compcv) = 0;
5454 /* inner references to PL_compcv must be fixed up ... */
5455 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
5456 /* ... before we throw it away */
5457 SvREFCNT_dec(PL_compcv);
5459 if (PERLDB_INTER)/* Advice debugger on the new sub. */
5460 ++PL_sub_generation;
5467 if (strEQ(name, "import")) {
5468 PL_formfeed = (SV*)cv;
5469 Perl_warner(aTHX_ packWARN(WARN_VOID), "%lx\n", (long)cv);
5473 PL_sub_generation++;
5477 CvFILE_set_from_cop(cv, PL_curcop);
5478 CvSTASH(cv) = PL_curstash;
5481 sv_setpvn((SV*)cv, ps, ps_len);
5483 if (PL_error_count) {
5487 const char *s = strrchr(name, ':');
5489 if (strEQ(s, "BEGIN")) {
5490 const char not_safe[] =
5491 "BEGIN not safe after errors--compilation aborted";
5492 if (PL_in_eval & EVAL_KEEPERR)
5493 Perl_croak(aTHX_ not_safe);
5495 /* force display of errors found but not reported */
5496 sv_catpv(ERRSV, not_safe);
5497 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
5507 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5508 mod(scalarseq(block), OP_LEAVESUBLV));
5509 block->op_attached = 1;
5512 /* This makes sub {}; work as expected. */
5513 if (block->op_type == OP_STUB) {
5514 OP* const newblock = newSTATEOP(0, NULL, 0);
5516 op_getmad(block,newblock,'B');
5523 block->op_attached = 1;
5524 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5526 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5527 OpREFCNT_set(CvROOT(cv), 1);
5528 CvSTART(cv) = LINKLIST(CvROOT(cv));
5529 CvROOT(cv)->op_next = 0;
5530 CALL_PEEP(CvSTART(cv));
5532 /* now that optimizer has done its work, adjust pad values */
5534 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
5537 assert(!CvCONST(cv));
5538 if (ps && !*ps && op_const_sv(block, cv))
5542 if (name || aname) {
5543 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5544 SV * const sv = newSV(0);
5545 SV * const tmpstr = sv_newmortal();
5546 GV * const db_postponed = gv_fetchpvs("DB::postponed",
5547 GV_ADDMULTI, SVt_PVHV);
5550 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5552 (long)PL_subline, (long)CopLINE(PL_curcop));
5553 gv_efullname3(tmpstr, gv, NULL);
5554 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
5555 hv = GvHVn(db_postponed);
5556 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
5557 CV * const pcv = GvCV(db_postponed);
5563 call_sv((SV*)pcv, G_DISCARD);
5568 if (name && !PL_error_count)
5569 process_special_blocks(name, gv, cv);
5573 PL_copline = NOLINE;
5579 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
5582 const char *const colon = strrchr(fullname,':');
5583 const char *const name = colon ? colon + 1 : fullname;
5586 if (strEQ(name, "BEGIN")) {
5587 const I32 oldscope = PL_scopestack_ix;
5589 SAVECOPFILE(&PL_compiling);
5590 SAVECOPLINE(&PL_compiling);
5592 DEBUG_x( dump_sub(gv) );
5593 Perl_av_create_and_push(aTHX_ &PL_beginav, (SV*)cv);
5594 GvCV(gv) = 0; /* cv has been hijacked */
5595 call_list(oldscope, PL_beginav);
5597 PL_curcop = &PL_compiling;
5598 CopHINTS_set(&PL_compiling, PL_hints);
5605 if strEQ(name, "END") {
5606 DEBUG_x( dump_sub(gv) );
5607 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, (SV*)cv);
5610 } else if (*name == 'U') {
5611 if (strEQ(name, "UNITCHECK")) {
5612 /* It's never too late to run a unitcheck block */
5613 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, (SV*)cv);
5617 } else if (*name == 'C') {
5618 if (strEQ(name, "CHECK")) {
5619 if (PL_main_start && ckWARN(WARN_VOID))
5620 Perl_warner(aTHX_ packWARN(WARN_VOID),
5621 "Too late to run CHECK block");
5622 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, (SV*)cv);
5626 } else if (*name == 'I') {
5627 if (strEQ(name, "INIT")) {
5628 if (PL_main_start && ckWARN(WARN_VOID))
5629 Perl_warner(aTHX_ packWARN(WARN_VOID),
5630 "Too late to run INIT block");
5631 Perl_av_create_and_push(aTHX_ &PL_initav, (SV*)cv);
5637 DEBUG_x( dump_sub(gv) );
5638 GvCV(gv) = 0; /* cv has been hijacked */
5643 =for apidoc newCONSTSUB
5645 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
5646 eligible for inlining at compile-time.
5652 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
5657 const char *const temp_p = CopFILE(PL_curcop);
5658 const STRLEN len = temp_p ? strlen(temp_p) : 0;
5660 SV *const temp_sv = CopFILESV(PL_curcop);
5662 const char *const temp_p = temp_sv ? SvPV_const(temp_sv, len) : NULL;
5664 char *const file = savepvn(temp_p, temp_p ? len : 0);
5668 SAVECOPLINE(PL_curcop);
5669 CopLINE_set(PL_curcop, PL_copline);
5672 PL_hints &= ~HINT_BLOCK_SCOPE;
5675 SAVESPTR(PL_curstash);
5676 SAVECOPSTASH(PL_curcop);
5677 PL_curstash = stash;
5678 CopSTASH_set(PL_curcop,stash);
5681 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
5682 and so doesn't get free()d. (It's expected to be from the C pre-
5683 processor __FILE__ directive). But we need a dynamically allocated one,
5684 and we need it to get freed. */
5685 cv = newXS_flags(name, const_sv_xsub, file, "", XS_DYNAMIC_FILENAME);
5686 CvXSUBANY(cv).any_ptr = sv;
5692 CopSTASH_free(PL_curcop);
5700 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
5701 const char *const filename, const char *const proto,
5704 CV *cv = newXS(name, subaddr, filename);
5706 if (flags & XS_DYNAMIC_FILENAME) {
5707 /* We need to "make arrangements" (ie cheat) to ensure that the
5708 filename lasts as long as the PVCV we just created, but also doesn't
5710 STRLEN filename_len = strlen(filename);
5711 STRLEN proto_and_file_len = filename_len;
5712 char *proto_and_file;
5716 proto_len = strlen(proto);
5717 proto_and_file_len += proto_len;
5719 Newx(proto_and_file, proto_and_file_len + 1, char);
5720 Copy(proto, proto_and_file, proto_len, char);
5721 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
5724 proto_and_file = savepvn(filename, filename_len);
5727 /* This gets free()d. :-) */
5728 sv_usepvn_flags((SV*)cv, proto_and_file, proto_and_file_len,
5729 SV_HAS_TRAILING_NUL);
5731 /* This gives us the correct prototype, rather than one with the
5732 file name appended. */
5733 SvCUR_set(cv, proto_len);
5737 CvFILE(cv) = proto_and_file + proto_len;
5739 sv_setpv((SV *)cv, proto);
5745 =for apidoc U||newXS
5747 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
5748 static storage, as it is used directly as CvFILE(), without a copy being made.
5754 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
5757 GV * const gv = gv_fetchpv(name ? name :
5758 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5759 GV_ADDMULTI, SVt_PVCV);
5763 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
5765 if ((cv = (name ? GvCV(gv) : NULL))) {
5767 /* just a cached method */
5771 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
5772 /* already defined (or promised) */
5773 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
5774 if (ckWARN(WARN_REDEFINE)) {
5775 GV * const gvcv = CvGV(cv);
5777 HV * const stash = GvSTASH(gvcv);
5779 const char *redefined_name = HvNAME_get(stash);
5780 if ( strEQ(redefined_name,"autouse") ) {
5781 const line_t oldline = CopLINE(PL_curcop);
5782 if (PL_copline != NOLINE)
5783 CopLINE_set(PL_curcop, PL_copline);
5784 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5785 CvCONST(cv) ? "Constant subroutine %s redefined"
5786 : "Subroutine %s redefined"
5788 CopLINE_set(PL_curcop, oldline);
5798 if (cv) /* must reuse cv if autoloaded */
5801 cv = (CV*)newSV_type(SVt_PVCV);
5805 PL_sub_generation++;
5809 (void)gv_fetchfile(filename);
5810 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
5811 an external constant string */
5813 CvXSUB(cv) = subaddr;
5816 process_special_blocks(name, gv, cv);
5828 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
5833 OP* pegop = newOP(OP_NULL, 0);
5837 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
5838 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
5840 #ifdef GV_UNIQUE_CHECK
5842 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
5846 if ((cv = GvFORM(gv))) {
5847 if (ckWARN(WARN_REDEFINE)) {
5848 const line_t oldline = CopLINE(PL_curcop);
5849 if (PL_copline != NOLINE)
5850 CopLINE_set(PL_curcop, PL_copline);
5851 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5852 o ? "Format %"SVf" redefined"
5853 : "Format STDOUT redefined", SVfARG(cSVOPo->op_sv));
5854 CopLINE_set(PL_curcop, oldline);
5861 CvFILE_set_from_cop(cv, PL_curcop);
5864 pad_tidy(padtidy_FORMAT);
5865 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5866 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5867 OpREFCNT_set(CvROOT(cv), 1);
5868 CvSTART(cv) = LINKLIST(CvROOT(cv));
5869 CvROOT(cv)->op_next = 0;
5870 CALL_PEEP(CvSTART(cv));
5872 op_getmad(o,pegop,'n');
5873 op_getmad_weak(block, pegop, 'b');
5877 PL_copline = NOLINE;
5885 Perl_newANONLIST(pTHX_ OP *o)
5887 return convert(OP_ANONLIST, OPf_SPECIAL, o);
5891 Perl_newANONHASH(pTHX_ OP *o)
5893 return convert(OP_ANONHASH, OPf_SPECIAL, o);
5897 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5899 return newANONATTRSUB(floor, proto, NULL, block);
5903 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5905 return newUNOP(OP_REFGEN, 0,
5906 newSVOP(OP_ANONCODE, 0,
5907 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5911 Perl_oopsAV(pTHX_ OP *o)
5914 switch (o->op_type) {
5916 o->op_type = OP_PADAV;
5917 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5918 return ref(o, OP_RV2AV);
5921 o->op_type = OP_RV2AV;
5922 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5927 if (ckWARN_d(WARN_INTERNAL))
5928 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5935 Perl_oopsHV(pTHX_ OP *o)
5938 switch (o->op_type) {
5941 o->op_type = OP_PADHV;
5942 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5943 return ref(o, OP_RV2HV);
5947 o->op_type = OP_RV2HV;
5948 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
5953 if (ckWARN_d(WARN_INTERNAL))
5954 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
5961 Perl_newAVREF(pTHX_ OP *o)
5964 if (o->op_type == OP_PADANY) {
5965 o->op_type = OP_PADAV;
5966 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5969 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
5970 && ckWARN(WARN_DEPRECATED)) {
5971 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5972 "Using an array as a reference is deprecated");
5974 return newUNOP(OP_RV2AV, 0, scalar(o));
5978 Perl_newGVREF(pTHX_ I32 type, OP *o)
5980 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
5981 return newUNOP(OP_NULL, 0, o);
5982 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
5986 Perl_newHVREF(pTHX_ OP *o)
5989 if (o->op_type == OP_PADANY) {
5990 o->op_type = OP_PADHV;
5991 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5994 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
5995 && ckWARN(WARN_DEPRECATED)) {
5996 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5997 "Using a hash as a reference is deprecated");
5999 return newUNOP(OP_RV2HV, 0, scalar(o));
6003 Perl_newCVREF(pTHX_ I32 flags, OP *o)
6005 return newUNOP(OP_RV2CV, flags, scalar(o));
6009 Perl_newSVREF(pTHX_ OP *o)
6012 if (o->op_type == OP_PADANY) {
6013 o->op_type = OP_PADSV;
6014 o->op_ppaddr = PL_ppaddr[OP_PADSV];
6017 return newUNOP(OP_RV2SV, 0, scalar(o));
6020 /* Check routines. See the comments at the top of this file for details
6021 * on when these are called */
6024 Perl_ck_anoncode(pTHX_ OP *o)
6026 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
6028 cSVOPo->op_sv = NULL;
6033 Perl_ck_bitop(pTHX_ OP *o)
6036 #define OP_IS_NUMCOMPARE(op) \
6037 ((op) == OP_LT || (op) == OP_I_LT || \
6038 (op) == OP_GT || (op) == OP_I_GT || \
6039 (op) == OP_LE || (op) == OP_I_LE || \
6040 (op) == OP_GE || (op) == OP_I_GE || \
6041 (op) == OP_EQ || (op) == OP_I_EQ || \
6042 (op) == OP_NE || (op) == OP_I_NE || \
6043 (op) == OP_NCMP || (op) == OP_I_NCMP)
6044 o->op_private = (U8)(PL_hints & HINT_INTEGER);
6045 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
6046 && (o->op_type == OP_BIT_OR
6047 || o->op_type == OP_BIT_AND
6048 || o->op_type == OP_BIT_XOR))
6050 const OP * const left = cBINOPo->op_first;
6051 const OP * const right = left->op_sibling;
6052 if ((OP_IS_NUMCOMPARE(left->op_type) &&
6053 (left->op_flags & OPf_PARENS) == 0) ||
6054 (OP_IS_NUMCOMPARE(right->op_type) &&
6055 (right->op_flags & OPf_PARENS) == 0))
6056 if (ckWARN(WARN_PRECEDENCE))
6057 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
6058 "Possible precedence problem on bitwise %c operator",
6059 o->op_type == OP_BIT_OR ? '|'
6060 : o->op_type == OP_BIT_AND ? '&' : '^'
6067 Perl_ck_concat(pTHX_ OP *o)
6069 const OP * const kid = cUNOPo->op_first;
6070 PERL_UNUSED_CONTEXT;
6071 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
6072 !(kUNOP->op_first->op_flags & OPf_MOD))
6073 o->op_flags |= OPf_STACKED;
6078 Perl_ck_spair(pTHX_ OP *o)
6081 if (o->op_flags & OPf_KIDS) {
6084 const OPCODE type = o->op_type;
6085 o = modkids(ck_fun(o), type);
6086 kid = cUNOPo->op_first;
6087 newop = kUNOP->op_first->op_sibling;
6089 const OPCODE type = newop->op_type;
6090 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
6091 type == OP_PADAV || type == OP_PADHV ||
6092 type == OP_RV2AV || type == OP_RV2HV)
6096 op_getmad(kUNOP->op_first,newop,'K');
6098 op_free(kUNOP->op_first);
6100 kUNOP->op_first = newop;
6102 o->op_ppaddr = PL_ppaddr[++o->op_type];
6107 Perl_ck_delete(pTHX_ OP *o)
6111 if (o->op_flags & OPf_KIDS) {
6112 OP * const kid = cUNOPo->op_first;
6113 switch (kid->op_type) {
6115 o->op_flags |= OPf_SPECIAL;
6118 o->op_private |= OPpSLICE;
6121 o->op_flags |= OPf_SPECIAL;
6126 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
6135 Perl_ck_die(pTHX_ OP *o)
6138 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6144 Perl_ck_eof(pTHX_ OP *o)
6148 if (o->op_flags & OPf_KIDS) {
6149 if (cLISTOPo->op_first->op_type == OP_STUB) {
6151 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
6153 op_getmad(o,newop,'O');
6165 Perl_ck_eval(pTHX_ OP *o)
6168 PL_hints |= HINT_BLOCK_SCOPE;
6169 if (o->op_flags & OPf_KIDS) {
6170 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6173 o->op_flags &= ~OPf_KIDS;
6176 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
6182 cUNOPo->op_first = 0;
6187 NewOp(1101, enter, 1, LOGOP);
6188 enter->op_type = OP_ENTERTRY;
6189 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
6190 enter->op_private = 0;
6192 /* establish postfix order */
6193 enter->op_next = (OP*)enter;
6195 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
6196 o->op_type = OP_LEAVETRY;
6197 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
6198 enter->op_other = o;
6199 op_getmad(oldo,o,'O');
6213 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
6214 op_getmad(oldo,o,'O');
6216 o->op_targ = (PADOFFSET)PL_hints;
6217 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
6218 /* Store a copy of %^H that pp_entereval can pick up.
6219 OPf_SPECIAL flags the opcode as being for this purpose,
6220 so that it in turn will return a copy at every
6222 OP *hhop = newSVOP(OP_CONST, OPf_SPECIAL,
6223 (SV*)Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)));
6224 cUNOPo->op_first->op_sibling = hhop;
6225 o->op_private |= OPpEVAL_HAS_HH;
6231 Perl_ck_exit(pTHX_ OP *o)
6234 HV * const table = GvHV(PL_hintgv);
6236 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
6237 if (svp && *svp && SvTRUE(*svp))
6238 o->op_private |= OPpEXIT_VMSISH;
6240 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6246 Perl_ck_exec(pTHX_ OP *o)
6248 if (o->op_flags & OPf_STACKED) {
6251 kid = cUNOPo->op_first->op_sibling;
6252 if (kid->op_type == OP_RV2GV)
6261 Perl_ck_exists(pTHX_ OP *o)
6265 if (o->op_flags & OPf_KIDS) {
6266 OP * const kid = cUNOPo->op_first;
6267 if (kid->op_type == OP_ENTERSUB) {
6268 (void) ref(kid, o->op_type);
6269 if (kid->op_type != OP_RV2CV && !PL_error_count)
6270 Perl_croak(aTHX_ "%s argument is not a subroutine name",
6272 o->op_private |= OPpEXISTS_SUB;
6274 else if (kid->op_type == OP_AELEM)
6275 o->op_flags |= OPf_SPECIAL;
6276 else if (kid->op_type != OP_HELEM)
6277 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
6285 Perl_ck_rvconst(pTHX_ register OP *o)
6288 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6290 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6291 if (o->op_type == OP_RV2CV)
6292 o->op_private &= ~1;
6294 if (kid->op_type == OP_CONST) {
6297 SV * const kidsv = kid->op_sv;
6299 /* Is it a constant from cv_const_sv()? */
6300 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
6301 SV * const rsv = SvRV(kidsv);
6302 const svtype type = SvTYPE(rsv);
6303 const char *badtype = NULL;
6305 switch (o->op_type) {
6307 if (type > SVt_PVMG)
6308 badtype = "a SCALAR";
6311 if (type != SVt_PVAV)
6312 badtype = "an ARRAY";
6315 if (type != SVt_PVHV)
6319 if (type != SVt_PVCV)
6324 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
6327 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
6328 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
6329 /* If this is an access to a stash, disable "strict refs", because
6330 * stashes aren't auto-vivified at compile-time (unless we store
6331 * symbols in them), and we don't want to produce a run-time
6332 * stricture error when auto-vivifying the stash. */
6333 const char *s = SvPV_nolen(kidsv);
6334 const STRLEN l = SvCUR(kidsv);
6335 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
6336 o->op_private &= ~HINT_STRICT_REFS;
6338 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
6339 const char *badthing;
6340 switch (o->op_type) {
6342 badthing = "a SCALAR";
6345 badthing = "an ARRAY";
6348 badthing = "a HASH";
6356 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
6357 SVfARG(kidsv), badthing);
6360 * This is a little tricky. We only want to add the symbol if we
6361 * didn't add it in the lexer. Otherwise we get duplicate strict
6362 * warnings. But if we didn't add it in the lexer, we must at
6363 * least pretend like we wanted to add it even if it existed before,
6364 * or we get possible typo warnings. OPpCONST_ENTERED says
6365 * whether the lexer already added THIS instance of this symbol.
6367 iscv = (o->op_type == OP_RV2CV) * 2;
6369 gv = gv_fetchsv(kidsv,
6370 iscv | !(kid->op_private & OPpCONST_ENTERED),
6373 : o->op_type == OP_RV2SV
6375 : o->op_type == OP_RV2AV
6377 : o->op_type == OP_RV2HV
6380 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
6382 kid->op_type = OP_GV;
6383 SvREFCNT_dec(kid->op_sv);
6385 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
6386 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
6387 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
6389 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
6391 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
6393 kid->op_private = 0;
6394 kid->op_ppaddr = PL_ppaddr[OP_GV];
6401 Perl_ck_ftst(pTHX_ OP *o)
6404 const I32 type = o->op_type;
6406 if (o->op_flags & OPf_REF) {
6409 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
6410 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6411 const OPCODE kidtype = kid->op_type;
6413 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6414 OP * const newop = newGVOP(type, OPf_REF,
6415 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
6417 op_getmad(o,newop,'O');
6423 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o))
6424 o->op_private |= OPpFT_ACCESS;
6425 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
6426 && kidtype != OP_STAT && kidtype != OP_LSTAT)
6427 o->op_private |= OPpFT_STACKED;
6435 if (type == OP_FTTTY)
6436 o = newGVOP(type, OPf_REF, PL_stdingv);
6438 o = newUNOP(type, 0, newDEFSVOP());
6439 op_getmad(oldo,o,'O');
6445 Perl_ck_fun(pTHX_ OP *o)
6448 const int type = o->op_type;
6449 register I32 oa = PL_opargs[type] >> OASHIFT;
6451 if (o->op_flags & OPf_STACKED) {
6452 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
6455 return no_fh_allowed(o);
6458 if (o->op_flags & OPf_KIDS) {
6459 OP **tokid = &cLISTOPo->op_first;
6460 register OP *kid = cLISTOPo->op_first;
6464 if (kid->op_type == OP_PUSHMARK ||
6465 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
6467 tokid = &kid->op_sibling;
6468 kid = kid->op_sibling;
6470 if (!kid && PL_opargs[type] & OA_DEFGV)
6471 *tokid = kid = newDEFSVOP();
6475 sibl = kid->op_sibling;
6477 if (!sibl && kid->op_type == OP_STUB) {
6484 /* list seen where single (scalar) arg expected? */
6485 if (numargs == 1 && !(oa >> 4)
6486 && kid->op_type == OP_LIST && type != OP_SCALAR)
6488 return too_many_arguments(o,PL_op_desc[type]);
6501 if ((type == OP_PUSH || type == OP_UNSHIFT)
6502 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
6503 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6504 "Useless use of %s with no values",
6507 if (kid->op_type == OP_CONST &&
6508 (kid->op_private & OPpCONST_BARE))
6510 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
6511 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
6512 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6513 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6514 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
6515 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6517 op_getmad(kid,newop,'K');
6522 kid->op_sibling = sibl;
6525 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
6526 bad_type(numargs, "array", PL_op_desc[type], kid);
6530 if (kid->op_type == OP_CONST &&
6531 (kid->op_private & OPpCONST_BARE))
6533 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
6534 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
6535 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6536 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6537 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
6538 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6540 op_getmad(kid,newop,'K');
6545 kid->op_sibling = sibl;
6548 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6549 bad_type(numargs, "hash", PL_op_desc[type], kid);
6554 OP * const newop = newUNOP(OP_NULL, 0, kid);
6555 kid->op_sibling = 0;
6557 newop->op_next = newop;
6559 kid->op_sibling = sibl;
6564 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6565 if (kid->op_type == OP_CONST &&
6566 (kid->op_private & OPpCONST_BARE))
6568 OP * const newop = newGVOP(OP_GV, 0,
6569 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
6570 if (!(o->op_private & 1) && /* if not unop */
6571 kid == cLISTOPo->op_last)
6572 cLISTOPo->op_last = newop;
6574 op_getmad(kid,newop,'K');
6580 else if (kid->op_type == OP_READLINE) {
6581 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6582 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
6585 I32 flags = OPf_SPECIAL;
6589 /* is this op a FH constructor? */
6590 if (is_handle_constructor(o,numargs)) {
6591 const char *name = NULL;
6595 /* Set a flag to tell rv2gv to vivify
6596 * need to "prove" flag does not mean something
6597 * else already - NI-S 1999/05/07
6600 if (kid->op_type == OP_PADSV) {
6602 = PAD_COMPNAME_SV(kid->op_targ);
6603 name = SvPV_const(namesv, len);
6605 else if (kid->op_type == OP_RV2SV
6606 && kUNOP->op_first->op_type == OP_GV)
6608 GV * const gv = cGVOPx_gv(kUNOP->op_first);
6610 len = GvNAMELEN(gv);
6612 else if (kid->op_type == OP_AELEM
6613 || kid->op_type == OP_HELEM)
6616 OP *op = ((BINOP*)kid)->op_first;
6620 const char * const a =
6621 kid->op_type == OP_AELEM ?
6623 if (((op->op_type == OP_RV2AV) ||
6624 (op->op_type == OP_RV2HV)) &&
6625 (firstop = ((UNOP*)op)->op_first) &&
6626 (firstop->op_type == OP_GV)) {
6627 /* packagevar $a[] or $h{} */
6628 GV * const gv = cGVOPx_gv(firstop);
6636 else if (op->op_type == OP_PADAV
6637 || op->op_type == OP_PADHV) {
6638 /* lexicalvar $a[] or $h{} */
6639 const char * const padname =
6640 PAD_COMPNAME_PV(op->op_targ);
6649 name = SvPV_const(tmpstr, len);
6654 name = "__ANONIO__";
6661 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
6662 namesv = PAD_SVl(targ);
6663 SvUPGRADE(namesv, SVt_PV);
6665 sv_setpvn(namesv, "$", 1);
6666 sv_catpvn(namesv, name, len);
6669 kid->op_sibling = 0;
6670 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
6671 kid->op_targ = targ;
6672 kid->op_private |= priv;
6674 kid->op_sibling = sibl;
6680 mod(scalar(kid), type);
6684 tokid = &kid->op_sibling;
6685 kid = kid->op_sibling;
6688 if (kid && kid->op_type != OP_STUB)
6689 return too_many_arguments(o,OP_DESC(o));
6690 o->op_private |= numargs;
6692 /* FIXME - should the numargs move as for the PERL_MAD case? */
6693 o->op_private |= numargs;
6695 return too_many_arguments(o,OP_DESC(o));
6699 else if (PL_opargs[type] & OA_DEFGV) {
6701 OP *newop = newUNOP(type, 0, newDEFSVOP());
6702 op_getmad(o,newop,'O');
6705 /* Ordering of these two is important to keep f_map.t passing. */
6707 return newUNOP(type, 0, newDEFSVOP());
6712 while (oa & OA_OPTIONAL)
6714 if (oa && oa != OA_LIST)
6715 return too_few_arguments(o,OP_DESC(o));
6721 Perl_ck_glob(pTHX_ OP *o)
6727 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
6728 append_elem(OP_GLOB, o, newDEFSVOP());
6730 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
6731 && GvCVu(gv) && GvIMPORTED_CV(gv)))
6733 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6736 #if !defined(PERL_EXTERNAL_GLOB)
6737 /* XXX this can be tightened up and made more failsafe. */
6738 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6741 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
6742 newSVpvs("File::Glob"), NULL, NULL, NULL);
6743 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6744 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
6745 GvCV(gv) = GvCV(glob_gv);
6746 SvREFCNT_inc_void((SV*)GvCV(gv));
6747 GvIMPORTED_CV_on(gv);
6750 #endif /* PERL_EXTERNAL_GLOB */
6752 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6753 append_elem(OP_GLOB, o,
6754 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
6755 o->op_type = OP_LIST;
6756 o->op_ppaddr = PL_ppaddr[OP_LIST];
6757 cLISTOPo->op_first->op_type = OP_PUSHMARK;
6758 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
6759 cLISTOPo->op_first->op_targ = 0;
6760 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
6761 append_elem(OP_LIST, o,
6762 scalar(newUNOP(OP_RV2CV, 0,
6763 newGVOP(OP_GV, 0, gv)))));
6764 o = newUNOP(OP_NULL, 0, ck_subr(o));
6765 o->op_targ = OP_GLOB; /* hint at what it used to be */
6768 gv = newGVgen("main");
6770 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
6776 Perl_ck_grep(pTHX_ OP *o)
6781 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
6784 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
6785 /* don't allocate gwop here, as we may leak it if PL_error_count > 0 */
6787 if (o->op_flags & OPf_STACKED) {
6790 kid = cLISTOPo->op_first->op_sibling;
6791 if (!cUNOPx(kid)->op_next)
6792 Perl_croak(aTHX_ "panic: ck_grep");
6793 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
6796 NewOp(1101, gwop, 1, LOGOP);
6797 kid->op_next = (OP*)gwop;
6798 o->op_flags &= ~OPf_STACKED;
6800 kid = cLISTOPo->op_first->op_sibling;
6801 if (type == OP_MAPWHILE)
6808 kid = cLISTOPo->op_first->op_sibling;
6809 if (kid->op_type != OP_NULL)
6810 Perl_croak(aTHX_ "panic: ck_grep");
6811 kid = kUNOP->op_first;
6814 NewOp(1101, gwop, 1, LOGOP);
6815 gwop->op_type = type;
6816 gwop->op_ppaddr = PL_ppaddr[type];
6817 gwop->op_first = listkids(o);
6818 gwop->op_flags |= OPf_KIDS;
6819 gwop->op_other = LINKLIST(kid);
6820 kid->op_next = (OP*)gwop;
6821 offset = pad_findmy("$_");
6822 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
6823 o->op_private = gwop->op_private = 0;
6824 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
6827 o->op_private = gwop->op_private = OPpGREP_LEX;
6828 gwop->op_targ = o->op_targ = offset;
6831 kid = cLISTOPo->op_first->op_sibling;
6832 if (!kid || !kid->op_sibling)
6833 return too_few_arguments(o,OP_DESC(o));
6834 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
6835 mod(kid, OP_GREPSTART);
6841 Perl_ck_index(pTHX_ OP *o)
6843 if (o->op_flags & OPf_KIDS) {
6844 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6846 kid = kid->op_sibling; /* get past "big" */
6847 if (kid && kid->op_type == OP_CONST)
6848 fbm_compile(((SVOP*)kid)->op_sv, 0);
6854 Perl_ck_lengthconst(pTHX_ OP *o)
6856 /* XXX length optimization goes here */
6861 Perl_ck_lfun(pTHX_ OP *o)
6863 const OPCODE type = o->op_type;
6864 return modkids(ck_fun(o), type);
6868 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
6870 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
6871 switch (cUNOPo->op_first->op_type) {
6873 /* This is needed for
6874 if (defined %stash::)
6875 to work. Do not break Tk.
6877 break; /* Globals via GV can be undef */
6879 case OP_AASSIGN: /* Is this a good idea? */
6880 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6881 "defined(@array) is deprecated");
6882 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6883 "\t(Maybe you should just omit the defined()?)\n");
6886 /* This is needed for
6887 if (defined %stash::)
6888 to work. Do not break Tk.
6890 break; /* Globals via GV can be undef */
6892 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6893 "defined(%%hash) is deprecated");
6894 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6895 "\t(Maybe you should just omit the defined()?)\n");
6906 Perl_ck_readline(pTHX_ OP *o)
6908 if (!(o->op_flags & OPf_KIDS)) {
6910 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
6912 op_getmad(o,newop,'O');
6922 Perl_ck_rfun(pTHX_ OP *o)
6924 const OPCODE type = o->op_type;
6925 return refkids(ck_fun(o), type);
6929 Perl_ck_listiob(pTHX_ OP *o)
6933 kid = cLISTOPo->op_first;
6936 kid = cLISTOPo->op_first;
6938 if (kid->op_type == OP_PUSHMARK)
6939 kid = kid->op_sibling;
6940 if (kid && o->op_flags & OPf_STACKED)
6941 kid = kid->op_sibling;
6942 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6943 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6944 o->op_flags |= OPf_STACKED; /* make it a filehandle */
6945 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
6946 cLISTOPo->op_first->op_sibling = kid;
6947 cLISTOPo->op_last = kid;
6948 kid = kid->op_sibling;
6953 append_elem(o->op_type, o, newDEFSVOP());
6959 Perl_ck_smartmatch(pTHX_ OP *o)
6962 if (0 == (o->op_flags & OPf_SPECIAL)) {
6963 OP *first = cBINOPo->op_first;
6964 OP *second = first->op_sibling;
6966 /* Implicitly take a reference to an array or hash */
6967 first->op_sibling = NULL;
6968 first = cBINOPo->op_first = ref_array_or_hash(first);
6969 second = first->op_sibling = ref_array_or_hash(second);
6971 /* Implicitly take a reference to a regular expression */
6972 if (first->op_type == OP_MATCH) {
6973 first->op_type = OP_QR;
6974 first->op_ppaddr = PL_ppaddr[OP_QR];
6976 if (second->op_type == OP_MATCH) {
6977 second->op_type = OP_QR;
6978 second->op_ppaddr = PL_ppaddr[OP_QR];
6987 Perl_ck_sassign(pTHX_ OP *o)
6989 OP * const kid = cLISTOPo->op_first;
6990 /* has a disposable target? */
6991 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
6992 && !(kid->op_flags & OPf_STACKED)
6993 /* Cannot steal the second time! */
6994 && !(kid->op_private & OPpTARGET_MY))
6996 OP * const kkid = kid->op_sibling;
6998 /* Can just relocate the target. */
6999 if (kkid && kkid->op_type == OP_PADSV
7000 && !(kkid->op_private & OPpLVAL_INTRO))
7002 kid->op_targ = kkid->op_targ;
7004 /* Now we do not need PADSV and SASSIGN. */
7005 kid->op_sibling = o->op_sibling; /* NULL */
7006 cLISTOPo->op_first = NULL;
7008 op_getmad(o,kid,'O');
7009 op_getmad(kkid,kid,'M');
7014 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
7018 if (kid->op_sibling) {
7019 OP *kkid = kid->op_sibling;
7020 if (kkid->op_type == OP_PADSV
7021 && (kkid->op_private & OPpLVAL_INTRO)
7022 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
7023 o->op_private |= OPpASSIGN_STATE;
7024 /* hijacking PADSTALE for uninitialized state variables */
7025 SvPADSTALE_on(PAD_SVl(kkid->op_targ));
7032 Perl_ck_match(pTHX_ OP *o)
7035 if (o->op_type != OP_QR && PL_compcv) {
7036 const PADOFFSET offset = pad_findmy("$_");
7037 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
7038 o->op_targ = offset;
7039 o->op_private |= OPpTARGET_MY;
7042 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
7043 o->op_private |= OPpRUNTIME;
7048 Perl_ck_method(pTHX_ OP *o)
7050 OP * const kid = cUNOPo->op_first;
7051 if (kid->op_type == OP_CONST) {
7052 SV* sv = kSVOP->op_sv;
7053 const char * const method = SvPVX_const(sv);
7054 if (!(strchr(method, ':') || strchr(method, '\''))) {
7056 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
7057 sv = newSVpvn_share(method, SvCUR(sv), 0);
7060 kSVOP->op_sv = NULL;
7062 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
7064 op_getmad(o,cmop,'O');
7075 Perl_ck_null(pTHX_ OP *o)
7077 PERL_UNUSED_CONTEXT;
7082 Perl_ck_open(pTHX_ OP *o)
7085 HV * const table = GvHV(PL_hintgv);
7087 SV **svp = hv_fetchs(table, "open_IN", FALSE);
7089 const I32 mode = mode_from_discipline(*svp);
7090 if (mode & O_BINARY)
7091 o->op_private |= OPpOPEN_IN_RAW;
7092 else if (mode & O_TEXT)
7093 o->op_private |= OPpOPEN_IN_CRLF;
7096 svp = hv_fetchs(table, "open_OUT", FALSE);
7098 const I32 mode = mode_from_discipline(*svp);
7099 if (mode & O_BINARY)
7100 o->op_private |= OPpOPEN_OUT_RAW;
7101 else if (mode & O_TEXT)
7102 o->op_private |= OPpOPEN_OUT_CRLF;
7105 if (o->op_type == OP_BACKTICK) {
7106 if (!(o->op_flags & OPf_KIDS)) {
7107 OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
7109 op_getmad(o,newop,'O');
7118 /* In case of three-arg dup open remove strictness
7119 * from the last arg if it is a bareword. */
7120 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
7121 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
7125 if ((last->op_type == OP_CONST) && /* The bareword. */
7126 (last->op_private & OPpCONST_BARE) &&
7127 (last->op_private & OPpCONST_STRICT) &&
7128 (oa = first->op_sibling) && /* The fh. */
7129 (oa = oa->op_sibling) && /* The mode. */
7130 (oa->op_type == OP_CONST) &&
7131 SvPOK(((SVOP*)oa)->op_sv) &&
7132 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
7133 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
7134 (last == oa->op_sibling)) /* The bareword. */
7135 last->op_private &= ~OPpCONST_STRICT;
7141 Perl_ck_repeat(pTHX_ OP *o)
7143 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
7144 o->op_private |= OPpREPEAT_DOLIST;
7145 cBINOPo->op_first = force_list(cBINOPo->op_first);
7153 Perl_ck_require(pTHX_ OP *o)
7158 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
7159 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7161 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7162 SV * const sv = kid->op_sv;
7163 U32 was_readonly = SvREADONLY(sv);
7168 sv_force_normal_flags(sv, 0);
7169 assert(!SvREADONLY(sv));
7176 for (s = SvPVX(sv); *s; s++) {
7177 if (*s == ':' && s[1] == ':') {
7178 const STRLEN len = strlen(s+2)+1;
7180 Move(s+2, s+1, len, char);
7181 SvCUR_set(sv, SvCUR(sv) - 1);
7184 sv_catpvs(sv, ".pm");
7185 SvFLAGS(sv) |= was_readonly;
7189 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
7190 /* handle override, if any */
7191 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
7192 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7193 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
7194 gv = gvp ? *gvp : NULL;
7198 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7199 OP * const kid = cUNOPo->op_first;
7202 cUNOPo->op_first = 0;
7206 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
7207 append_elem(OP_LIST, kid,
7208 scalar(newUNOP(OP_RV2CV, 0,
7211 op_getmad(o,newop,'O');
7219 Perl_ck_return(pTHX_ OP *o)
7222 if (CvLVALUE(PL_compcv)) {
7224 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
7225 mod(kid, OP_LEAVESUBLV);
7231 Perl_ck_select(pTHX_ OP *o)
7235 if (o->op_flags & OPf_KIDS) {
7236 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7237 if (kid && kid->op_sibling) {
7238 o->op_type = OP_SSELECT;
7239 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
7241 return fold_constants(o);
7245 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7246 if (kid && kid->op_type == OP_RV2GV)
7247 kid->op_private &= ~HINT_STRICT_REFS;
7252 Perl_ck_shift(pTHX_ OP *o)
7255 const I32 type = o->op_type;
7257 if (!(o->op_flags & OPf_KIDS)) {
7259 /* FIXME - this can be refactored to reduce code in #ifdefs */
7261 OP * const oldo = o;
7265 argop = newUNOP(OP_RV2AV, 0,
7266 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
7268 o = newUNOP(type, 0, scalar(argop));
7269 op_getmad(oldo,o,'O');
7272 return newUNOP(type, 0, scalar(argop));
7275 return scalar(modkids(ck_fun(o), type));
7279 Perl_ck_sort(pTHX_ OP *o)
7284 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
7285 HV * const hinthv = GvHV(PL_hintgv);
7287 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
7289 const I32 sorthints = (I32)SvIV(*svp);
7290 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
7291 o->op_private |= OPpSORT_QSORT;
7292 if ((sorthints & HINT_SORT_STABLE) != 0)
7293 o->op_private |= OPpSORT_STABLE;
7298 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
7300 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7301 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
7303 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
7305 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
7307 if (kid->op_type == OP_SCOPE) {
7311 else if (kid->op_type == OP_LEAVE) {
7312 if (o->op_type == OP_SORT) {
7313 op_null(kid); /* wipe out leave */
7316 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
7317 if (k->op_next == kid)
7319 /* don't descend into loops */
7320 else if (k->op_type == OP_ENTERLOOP
7321 || k->op_type == OP_ENTERITER)
7323 k = cLOOPx(k)->op_lastop;
7328 kid->op_next = 0; /* just disconnect the leave */
7329 k = kLISTOP->op_first;
7334 if (o->op_type == OP_SORT) {
7335 /* provide scalar context for comparison function/block */
7341 o->op_flags |= OPf_SPECIAL;
7343 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
7346 firstkid = firstkid->op_sibling;
7349 /* provide list context for arguments */
7350 if (o->op_type == OP_SORT)
7357 S_simplify_sort(pTHX_ OP *o)
7360 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7365 if (!(o->op_flags & OPf_STACKED))
7367 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
7368 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
7369 kid = kUNOP->op_first; /* get past null */
7370 if (kid->op_type != OP_SCOPE)
7372 kid = kLISTOP->op_last; /* get past scope */
7373 switch(kid->op_type) {
7381 k = kid; /* remember this node*/
7382 if (kBINOP->op_first->op_type != OP_RV2SV)
7384 kid = kBINOP->op_first; /* get past cmp */
7385 if (kUNOP->op_first->op_type != OP_GV)
7387 kid = kUNOP->op_first; /* get past rv2sv */
7389 if (GvSTASH(gv) != PL_curstash)
7391 gvname = GvNAME(gv);
7392 if (*gvname == 'a' && gvname[1] == '\0')
7394 else if (*gvname == 'b' && gvname[1] == '\0')
7399 kid = k; /* back to cmp */
7400 if (kBINOP->op_last->op_type != OP_RV2SV)
7402 kid = kBINOP->op_last; /* down to 2nd arg */
7403 if (kUNOP->op_first->op_type != OP_GV)
7405 kid = kUNOP->op_first; /* get past rv2sv */
7407 if (GvSTASH(gv) != PL_curstash)
7409 gvname = GvNAME(gv);
7411 ? !(*gvname == 'a' && gvname[1] == '\0')
7412 : !(*gvname == 'b' && gvname[1] == '\0'))
7414 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
7416 o->op_private |= OPpSORT_DESCEND;
7417 if (k->op_type == OP_NCMP)
7418 o->op_private |= OPpSORT_NUMERIC;
7419 if (k->op_type == OP_I_NCMP)
7420 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
7421 kid = cLISTOPo->op_first->op_sibling;
7422 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
7424 op_getmad(kid,o,'S'); /* then delete it */
7426 op_free(kid); /* then delete it */
7431 Perl_ck_split(pTHX_ OP *o)
7436 if (o->op_flags & OPf_STACKED)
7437 return no_fh_allowed(o);
7439 kid = cLISTOPo->op_first;
7440 if (kid->op_type != OP_NULL)
7441 Perl_croak(aTHX_ "panic: ck_split");
7442 kid = kid->op_sibling;
7443 op_free(cLISTOPo->op_first);
7444 cLISTOPo->op_first = kid;
7446 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
7447 cLISTOPo->op_last = kid; /* There was only one element previously */
7450 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
7451 OP * const sibl = kid->op_sibling;
7452 kid->op_sibling = 0;
7453 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
7454 if (cLISTOPo->op_first == cLISTOPo->op_last)
7455 cLISTOPo->op_last = kid;
7456 cLISTOPo->op_first = kid;
7457 kid->op_sibling = sibl;
7460 kid->op_type = OP_PUSHRE;
7461 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
7463 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
7464 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
7465 "Use of /g modifier is meaningless in split");
7468 if (!kid->op_sibling)
7469 append_elem(OP_SPLIT, o, newDEFSVOP());
7471 kid = kid->op_sibling;
7474 if (!kid->op_sibling)
7475 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
7476 assert(kid->op_sibling);
7478 kid = kid->op_sibling;
7481 if (kid->op_sibling)
7482 return too_many_arguments(o,OP_DESC(o));
7488 Perl_ck_join(pTHX_ OP *o)
7490 const OP * const kid = cLISTOPo->op_first->op_sibling;
7491 if (kid && kid->op_type == OP_MATCH) {
7492 if (ckWARN(WARN_SYNTAX)) {
7493 const REGEXP *re = PM_GETRE(kPMOP);
7494 const char *pmstr = re ? re->precomp : "STRING";
7495 const STRLEN len = re ? re->prelen : 6;
7496 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7497 "/%.*s/ should probably be written as \"%.*s\"",
7498 (int)len, pmstr, (int)len, pmstr);
7505 Perl_ck_subr(pTHX_ OP *o)
7508 OP *prev = ((cUNOPo->op_first->op_sibling)
7509 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
7510 OP *o2 = prev->op_sibling;
7512 const char *proto = NULL;
7513 const char *proto_end = NULL;
7518 I32 contextclass = 0;
7519 const char *e = NULL;
7522 o->op_private |= OPpENTERSUB_HASTARG;
7523 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
7524 if (cvop->op_type == OP_RV2CV) {
7526 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
7527 op_null(cvop); /* disable rv2cv */
7528 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
7529 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
7530 GV *gv = cGVOPx_gv(tmpop);
7533 tmpop->op_private |= OPpEARLY_CV;
7537 namegv = CvANON(cv) ? gv : CvGV(cv);
7538 proto = SvPV((SV*)cv, len);
7539 proto_end = proto + len;
7541 if (CvASSERTION(cv)) {
7542 U32 asserthints = 0;
7543 HV *const hinthv = GvHV(PL_hintgv);
7545 SV **svp = hv_fetchs(hinthv, "assertions", FALSE);
7547 asserthints = SvUV(*svp);
7549 if (asserthints & HINT_ASSERTING) {
7550 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
7551 o->op_private |= OPpENTERSUB_DB;
7555 if (!(asserthints & HINT_ASSERTIONSSEEN) && ckWARN(WARN_ASSERTIONS)) {
7556 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
7557 "Impossible to activate assertion call");
7564 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
7565 if (o2->op_type == OP_CONST)
7566 o2->op_private &= ~OPpCONST_STRICT;
7567 else if (o2->op_type == OP_LIST) {
7568 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
7569 if (sib && sib->op_type == OP_CONST)
7570 sib->op_private &= ~OPpCONST_STRICT;
7573 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7574 if (PERLDB_SUB && PL_curstash != PL_debstash)
7575 o->op_private |= OPpENTERSUB_DB;
7576 while (o2 != cvop) {
7578 if (PL_madskills && o2->op_type == OP_STUB) {
7579 o2 = o2->op_sibling;
7582 if (PL_madskills && o2->op_type == OP_NULL)
7583 o3 = ((UNOP*)o2)->op_first;
7587 if (proto >= proto_end)
7588 return too_many_arguments(o, gv_ename(namegv));
7596 /* _ must be at the end */
7597 if (proto[1] && proto[1] != ';')
7612 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
7614 arg == 1 ? "block or sub {}" : "sub {}",
7615 gv_ename(namegv), o3);
7618 /* '*' allows any scalar type, including bareword */
7621 if (o3->op_type == OP_RV2GV)
7622 goto wrapref; /* autoconvert GLOB -> GLOBref */
7623 else if (o3->op_type == OP_CONST)
7624 o3->op_private &= ~OPpCONST_STRICT;
7625 else if (o3->op_type == OP_ENTERSUB) {
7626 /* accidental subroutine, revert to bareword */
7627 OP *gvop = ((UNOP*)o3)->op_first;
7628 if (gvop && gvop->op_type == OP_NULL) {
7629 gvop = ((UNOP*)gvop)->op_first;
7631 for (; gvop->op_sibling; gvop = gvop->op_sibling)
7634 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
7635 (gvop = ((UNOP*)gvop)->op_first) &&
7636 gvop->op_type == OP_GV)
7638 GV * const gv = cGVOPx_gv(gvop);
7639 OP * const sibling = o2->op_sibling;
7640 SV * const n = newSVpvs("");
7642 OP * const oldo2 = o2;
7646 gv_fullname4(n, gv, "", FALSE);
7647 o2 = newSVOP(OP_CONST, 0, n);
7648 op_getmad(oldo2,o2,'O');
7649 prev->op_sibling = o2;
7650 o2->op_sibling = sibling;
7666 if (contextclass++ == 0) {
7667 e = strchr(proto, ']');
7668 if (!e || e == proto)
7677 const char *p = proto;
7678 const char *const end = proto;
7680 while (*--p != '[');
7681 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
7683 gv_ename(namegv), o3);
7688 if (o3->op_type == OP_RV2GV)
7691 bad_type(arg, "symbol", gv_ename(namegv), o3);
7694 if (o3->op_type == OP_ENTERSUB)
7697 bad_type(arg, "subroutine entry", gv_ename(namegv),
7701 if (o3->op_type == OP_RV2SV ||
7702 o3->op_type == OP_PADSV ||
7703 o3->op_type == OP_HELEM ||
7704 o3->op_type == OP_AELEM)
7707 bad_type(arg, "scalar", gv_ename(namegv), o3);
7710 if (o3->op_type == OP_RV2AV ||
7711 o3->op_type == OP_PADAV)
7714 bad_type(arg, "array", gv_ename(namegv), o3);
7717 if (o3->op_type == OP_RV2HV ||
7718 o3->op_type == OP_PADHV)
7721 bad_type(arg, "hash", gv_ename(namegv), o3);
7726 OP* const sib = kid->op_sibling;
7727 kid->op_sibling = 0;
7728 o2 = newUNOP(OP_REFGEN, 0, kid);
7729 o2->op_sibling = sib;
7730 prev->op_sibling = o2;
7732 if (contextclass && e) {
7747 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
7748 gv_ename(namegv), SVfARG(cv));
7753 mod(o2, OP_ENTERSUB);
7755 o2 = o2->op_sibling;
7757 if (o2 == cvop && proto && *proto == '_') {
7758 /* generate an access to $_ */
7760 o2->op_sibling = prev->op_sibling;
7761 prev->op_sibling = o2; /* instead of cvop */
7763 if (proto && !optional && proto_end > proto &&
7764 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
7765 return too_few_arguments(o, gv_ename(namegv));
7768 OP * const oldo = o;
7772 o=newSVOP(OP_CONST, 0, newSViv(0));
7773 op_getmad(oldo,o,'O');
7779 Perl_ck_svconst(pTHX_ OP *o)
7781 PERL_UNUSED_CONTEXT;
7782 SvREADONLY_on(cSVOPo->op_sv);
7787 Perl_ck_chdir(pTHX_ OP *o)
7789 if (o->op_flags & OPf_KIDS) {
7790 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7792 if (kid && kid->op_type == OP_CONST &&
7793 (kid->op_private & OPpCONST_BARE))
7795 o->op_flags |= OPf_SPECIAL;
7796 kid->op_private &= ~OPpCONST_STRICT;
7803 Perl_ck_trunc(pTHX_ OP *o)
7805 if (o->op_flags & OPf_KIDS) {
7806 SVOP *kid = (SVOP*)cUNOPo->op_first;
7808 if (kid->op_type == OP_NULL)
7809 kid = (SVOP*)kid->op_sibling;
7810 if (kid && kid->op_type == OP_CONST &&
7811 (kid->op_private & OPpCONST_BARE))
7813 o->op_flags |= OPf_SPECIAL;
7814 kid->op_private &= ~OPpCONST_STRICT;
7821 Perl_ck_unpack(pTHX_ OP *o)
7823 OP *kid = cLISTOPo->op_first;
7824 if (kid->op_sibling) {
7825 kid = kid->op_sibling;
7826 if (!kid->op_sibling)
7827 kid->op_sibling = newDEFSVOP();
7833 Perl_ck_substr(pTHX_ OP *o)
7836 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
7837 OP *kid = cLISTOPo->op_first;
7839 if (kid->op_type == OP_NULL)
7840 kid = kid->op_sibling;
7842 kid->op_flags |= OPf_MOD;
7848 /* A peephole optimizer. We visit the ops in the order they're to execute.
7849 * See the comments at the top of this file for more details about when
7850 * peep() is called */
7853 Perl_peep(pTHX_ register OP *o)
7856 register OP* oldop = NULL;
7858 if (!o || o->op_opt)
7862 SAVEVPTR(PL_curcop);
7863 for (; o; o = o->op_next) {
7866 /* By default, this op has now been optimised. A couple of cases below
7867 clear this again. */
7870 switch (o->op_type) {
7874 PL_curcop = ((COP*)o); /* for warnings */
7878 if (cSVOPo->op_private & OPpCONST_STRICT)
7879 no_bareword_allowed(o);
7881 case OP_METHOD_NAMED:
7882 /* Relocate sv to the pad for thread safety.
7883 * Despite being a "constant", the SV is written to,
7884 * for reference counts, sv_upgrade() etc. */
7886 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
7887 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
7888 /* If op_sv is already a PADTMP then it is being used by
7889 * some pad, so make a copy. */
7890 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
7891 SvREADONLY_on(PAD_SVl(ix));
7892 SvREFCNT_dec(cSVOPo->op_sv);
7894 else if (o->op_type == OP_CONST
7895 && cSVOPo->op_sv == &PL_sv_undef) {
7896 /* PL_sv_undef is hack - it's unsafe to store it in the
7897 AV that is the pad, because av_fetch treats values of
7898 PL_sv_undef as a "free" AV entry and will merrily
7899 replace them with a new SV, causing pad_alloc to think
7900 that this pad slot is free. (When, clearly, it is not)
7902 SvOK_off(PAD_SVl(ix));
7903 SvPADTMP_on(PAD_SVl(ix));
7904 SvREADONLY_on(PAD_SVl(ix));
7907 SvREFCNT_dec(PAD_SVl(ix));
7908 SvPADTMP_on(cSVOPo->op_sv);
7909 PAD_SETSV(ix, cSVOPo->op_sv);
7910 /* XXX I don't know how this isn't readonly already. */
7911 SvREADONLY_on(PAD_SVl(ix));
7913 cSVOPo->op_sv = NULL;
7920 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
7921 if (o->op_next->op_private & OPpTARGET_MY) {
7922 if (o->op_flags & OPf_STACKED) /* chained concats */
7923 break; /* ignore_optimization */
7925 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
7926 o->op_targ = o->op_next->op_targ;
7927 o->op_next->op_targ = 0;
7928 o->op_private |= OPpTARGET_MY;
7931 op_null(o->op_next);
7935 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
7936 break; /* Scalar stub must produce undef. List stub is noop */
7940 if (o->op_targ == OP_NEXTSTATE
7941 || o->op_targ == OP_DBSTATE
7942 || o->op_targ == OP_SETSTATE)
7944 PL_curcop = ((COP*)o);
7946 /* XXX: We avoid setting op_seq here to prevent later calls
7947 to peep() from mistakenly concluding that optimisation
7948 has already occurred. This doesn't fix the real problem,
7949 though (See 20010220.007). AMS 20010719 */
7950 /* op_seq functionality is now replaced by op_opt */
7957 if (oldop && o->op_next) {
7958 oldop->op_next = o->op_next;
7966 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
7967 OP* const pop = (o->op_type == OP_PADAV) ?
7968 o->op_next : o->op_next->op_next;
7970 if (pop && pop->op_type == OP_CONST &&
7971 ((PL_op = pop->op_next)) &&
7972 pop->op_next->op_type == OP_AELEM &&
7973 !(pop->op_next->op_private &
7974 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
7975 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
7980 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
7981 no_bareword_allowed(pop);
7982 if (o->op_type == OP_GV)
7983 op_null(o->op_next);
7984 op_null(pop->op_next);
7986 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
7987 o->op_next = pop->op_next->op_next;
7988 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
7989 o->op_private = (U8)i;
7990 if (o->op_type == OP_GV) {
7995 o->op_flags |= OPf_SPECIAL;
7996 o->op_type = OP_AELEMFAST;
8001 if (o->op_next->op_type == OP_RV2SV) {
8002 if (!(o->op_next->op_private & OPpDEREF)) {
8003 op_null(o->op_next);
8004 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
8006 o->op_next = o->op_next->op_next;
8007 o->op_type = OP_GVSV;
8008 o->op_ppaddr = PL_ppaddr[OP_GVSV];
8011 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
8012 GV * const gv = cGVOPo_gv;
8013 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
8014 /* XXX could check prototype here instead of just carping */
8015 SV * const sv = sv_newmortal();
8016 gv_efullname3(sv, gv, NULL);
8017 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
8018 "%"SVf"() called too early to check prototype",
8022 else if (o->op_next->op_type == OP_READLINE
8023 && o->op_next->op_next->op_type == OP_CONCAT
8024 && (o->op_next->op_next->op_flags & OPf_STACKED))
8026 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
8027 o->op_type = OP_RCATLINE;
8028 o->op_flags |= OPf_STACKED;
8029 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
8030 op_null(o->op_next->op_next);
8031 op_null(o->op_next);
8046 while (cLOGOP->op_other->op_type == OP_NULL)
8047 cLOGOP->op_other = cLOGOP->op_other->op_next;
8048 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
8053 while (cLOOP->op_redoop->op_type == OP_NULL)
8054 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
8055 peep(cLOOP->op_redoop);
8056 while (cLOOP->op_nextop->op_type == OP_NULL)
8057 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
8058 peep(cLOOP->op_nextop);
8059 while (cLOOP->op_lastop->op_type == OP_NULL)
8060 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
8061 peep(cLOOP->op_lastop);
8065 assert(!(cPMOP->op_pmflags & PMf_ONCE));
8066 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
8067 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
8068 cPMOP->op_pmstashstartu.op_pmreplstart
8069 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
8070 peep(cPMOP->op_pmstashstartu.op_pmreplstart);
8074 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
8075 && ckWARN(WARN_SYNTAX))
8077 if (o->op_next->op_sibling) {
8078 const OPCODE type = o->op_next->op_sibling->op_type;
8079 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
8080 const line_t oldline = CopLINE(PL_curcop);
8081 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
8082 Perl_warner(aTHX_ packWARN(WARN_EXEC),
8083 "Statement unlikely to be reached");
8084 Perl_warner(aTHX_ packWARN(WARN_EXEC),
8085 "\t(Maybe you meant system() when you said exec()?)\n");
8086 CopLINE_set(PL_curcop, oldline);
8097 const char *key = NULL;
8100 if (((BINOP*)o)->op_last->op_type != OP_CONST)
8103 /* Make the CONST have a shared SV */
8104 svp = cSVOPx_svp(((BINOP*)o)->op_last);
8105 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
8106 key = SvPV_const(sv, keylen);
8107 lexname = newSVpvn_share(key,
8108 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
8114 if ((o->op_private & (OPpLVAL_INTRO)))
8117 rop = (UNOP*)((BINOP*)o)->op_first;
8118 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
8120 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
8121 if (!SvPAD_TYPED(lexname))
8123 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8124 if (!fields || !GvHV(*fields))
8126 key = SvPV_const(*svp, keylen);
8127 if (!hv_fetch(GvHV(*fields), key,
8128 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8130 Perl_croak(aTHX_ "No such class field \"%s\" "
8131 "in variable %s of type %s",
8132 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
8145 SVOP *first_key_op, *key_op;
8147 if ((o->op_private & (OPpLVAL_INTRO))
8148 /* I bet there's always a pushmark... */
8149 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
8150 /* hmmm, no optimization if list contains only one key. */
8152 rop = (UNOP*)((LISTOP*)o)->op_last;
8153 if (rop->op_type != OP_RV2HV)
8155 if (rop->op_first->op_type == OP_PADSV)
8156 /* @$hash{qw(keys here)} */
8157 rop = (UNOP*)rop->op_first;
8159 /* @{$hash}{qw(keys here)} */
8160 if (rop->op_first->op_type == OP_SCOPE
8161 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
8163 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
8169 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
8170 if (!SvPAD_TYPED(lexname))
8172 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8173 if (!fields || !GvHV(*fields))
8175 /* Again guessing that the pushmark can be jumped over.... */
8176 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
8177 ->op_first->op_sibling;
8178 for (key_op = first_key_op; key_op;
8179 key_op = (SVOP*)key_op->op_sibling) {
8180 if (key_op->op_type != OP_CONST)
8182 svp = cSVOPx_svp(key_op);
8183 key = SvPV_const(*svp, keylen);
8184 if (!hv_fetch(GvHV(*fields), key,
8185 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8187 Perl_croak(aTHX_ "No such class field \"%s\" "
8188 "in variable %s of type %s",
8189 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
8196 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
8200 /* check that RHS of sort is a single plain array */
8201 OP *oright = cUNOPo->op_first;
8202 if (!oright || oright->op_type != OP_PUSHMARK)
8205 /* reverse sort ... can be optimised. */
8206 if (!cUNOPo->op_sibling) {
8207 /* Nothing follows us on the list. */
8208 OP * const reverse = o->op_next;
8210 if (reverse->op_type == OP_REVERSE &&
8211 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
8212 OP * const pushmark = cUNOPx(reverse)->op_first;
8213 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
8214 && (cUNOPx(pushmark)->op_sibling == o)) {
8215 /* reverse -> pushmark -> sort */
8216 o->op_private |= OPpSORT_REVERSE;
8218 pushmark->op_next = oright->op_next;
8224 /* make @a = sort @a act in-place */
8226 oright = cUNOPx(oright)->op_sibling;
8229 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
8230 oright = cUNOPx(oright)->op_sibling;
8234 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
8235 || oright->op_next != o
8236 || (oright->op_private & OPpLVAL_INTRO)
8240 /* o2 follows the chain of op_nexts through the LHS of the
8241 * assign (if any) to the aassign op itself */
8243 if (!o2 || o2->op_type != OP_NULL)
8246 if (!o2 || o2->op_type != OP_PUSHMARK)
8249 if (o2 && o2->op_type == OP_GV)
8252 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8253 || (o2->op_private & OPpLVAL_INTRO)
8258 if (!o2 || o2->op_type != OP_NULL)
8261 if (!o2 || o2->op_type != OP_AASSIGN
8262 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8265 /* check that the sort is the first arg on RHS of assign */
8267 o2 = cUNOPx(o2)->op_first;
8268 if (!o2 || o2->op_type != OP_NULL)
8270 o2 = cUNOPx(o2)->op_first;
8271 if (!o2 || o2->op_type != OP_PUSHMARK)
8273 if (o2->op_sibling != o)
8276 /* check the array is the same on both sides */
8277 if (oleft->op_type == OP_RV2AV) {
8278 if (oright->op_type != OP_RV2AV
8279 || !cUNOPx(oright)->op_first
8280 || cUNOPx(oright)->op_first->op_type != OP_GV
8281 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8282 cGVOPx_gv(cUNOPx(oright)->op_first)
8286 else if (oright->op_type != OP_PADAV
8287 || oright->op_targ != oleft->op_targ
8291 /* transfer MODishness etc from LHS arg to RHS arg */
8292 oright->op_flags = oleft->op_flags;
8293 o->op_private |= OPpSORT_INPLACE;
8295 /* excise push->gv->rv2av->null->aassign */
8296 o2 = o->op_next->op_next;
8297 op_null(o2); /* PUSHMARK */
8299 if (o2->op_type == OP_GV) {
8300 op_null(o2); /* GV */
8303 op_null(o2); /* RV2AV or PADAV */
8304 o2 = o2->op_next->op_next;
8305 op_null(o2); /* AASSIGN */
8307 o->op_next = o2->op_next;
8313 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
8315 LISTOP *enter, *exlist;
8317 enter = (LISTOP *) o->op_next;
8320 if (enter->op_type == OP_NULL) {
8321 enter = (LISTOP *) enter->op_next;
8325 /* for $a (...) will have OP_GV then OP_RV2GV here.
8326 for (...) just has an OP_GV. */
8327 if (enter->op_type == OP_GV) {
8328 gvop = (OP *) enter;
8329 enter = (LISTOP *) enter->op_next;
8332 if (enter->op_type == OP_RV2GV) {
8333 enter = (LISTOP *) enter->op_next;
8339 if (enter->op_type != OP_ENTERITER)
8342 iter = enter->op_next;
8343 if (!iter || iter->op_type != OP_ITER)
8346 expushmark = enter->op_first;
8347 if (!expushmark || expushmark->op_type != OP_NULL
8348 || expushmark->op_targ != OP_PUSHMARK)
8351 exlist = (LISTOP *) expushmark->op_sibling;
8352 if (!exlist || exlist->op_type != OP_NULL
8353 || exlist->op_targ != OP_LIST)
8356 if (exlist->op_last != o) {
8357 /* Mmm. Was expecting to point back to this op. */
8360 theirmark = exlist->op_first;
8361 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
8364 if (theirmark->op_sibling != o) {
8365 /* There's something between the mark and the reverse, eg
8366 for (1, reverse (...))
8371 ourmark = ((LISTOP *)o)->op_first;
8372 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
8375 ourlast = ((LISTOP *)o)->op_last;
8376 if (!ourlast || ourlast->op_next != o)
8379 rv2av = ourmark->op_sibling;
8380 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
8381 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
8382 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
8383 /* We're just reversing a single array. */
8384 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
8385 enter->op_flags |= OPf_STACKED;
8388 /* We don't have control over who points to theirmark, so sacrifice
8390 theirmark->op_next = ourmark->op_next;
8391 theirmark->op_flags = ourmark->op_flags;
8392 ourlast->op_next = gvop ? gvop : (OP *) enter;
8395 enter->op_private |= OPpITER_REVERSED;
8396 iter->op_private |= OPpITER_REVERSED;
8403 UNOP *refgen, *rv2cv;
8406 if ((o->op_flags && OPf_WANT) != OPf_WANT_VOID)
8409 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
8412 rv2gv = ((BINOP *)o)->op_last;
8413 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
8416 refgen = (UNOP *)((BINOP *)o)->op_first;
8418 if (!refgen || refgen->op_type != OP_REFGEN)
8421 exlist = (LISTOP *)refgen->op_first;
8422 if (!exlist || exlist->op_type != OP_NULL
8423 || exlist->op_targ != OP_LIST)
8426 if (exlist->op_first->op_type != OP_PUSHMARK)
8429 rv2cv = (UNOP*)exlist->op_last;
8431 if (rv2cv->op_type != OP_RV2CV)
8434 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
8435 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
8436 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
8438 o->op_private |= OPpASSIGN_CV_TO_GV;
8439 rv2gv->op_private |= OPpDONT_INIT_GV;
8440 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
8448 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
8449 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
8459 Perl_custom_op_name(pTHX_ const OP* o)
8462 const IV index = PTR2IV(o->op_ppaddr);
8466 if (!PL_custom_op_names) /* This probably shouldn't happen */
8467 return (char *)PL_op_name[OP_CUSTOM];
8469 keysv = sv_2mortal(newSViv(index));
8471 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
8473 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
8475 return SvPV_nolen(HeVAL(he));
8479 Perl_custom_op_desc(pTHX_ const OP* o)
8482 const IV index = PTR2IV(o->op_ppaddr);
8486 if (!PL_custom_op_descs)
8487 return (char *)PL_op_desc[OP_CUSTOM];
8489 keysv = sv_2mortal(newSViv(index));
8491 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
8493 return (char *)PL_op_desc[OP_CUSTOM];
8495 return SvPV_nolen(HeVAL(he));
8500 /* Efficient sub that returns a constant scalar value. */
8502 const_sv_xsub(pTHX_ CV* cv)
8509 Perl_croak(aTHX_ "usage: %s::%s()",
8510 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
8514 ST(0) = (SV*)XSANY.any_ptr;
8520 * c-indentation-style: bsd
8522 * indent-tabs-mode: t
8525 * ex: set ts=8 sts=4 sw=4 noet: