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_ int m, size_t sz)
121 * To make incrementing use count easy PL_OpSlab is an I32 *
122 * To make inserting the link to slab PL_OpPtr is I32 **
123 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
124 * Add an overhead for pointer to slab and round up as a number of pointers
126 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
127 if ((PL_OpSpace -= sz) < 0) {
128 #ifdef PERL_DEBUG_READONLY_OPS
129 /* We need to allocate chunk by chunk so that we can control the VM
131 PL_OpPtr = mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
132 MAP_ANON|MAP_PRIVATE, -1, 0);
134 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
135 (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
137 if(PL_OpPtr == MAP_FAILED) {
138 perror("mmap failed");
143 PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*));
148 /* We reserve the 0'th I32 sized chunk as a use count */
149 PL_OpSlab = (I32 *) PL_OpPtr;
150 /* Reduce size by the use count word, and by the size we need.
151 * Latter is to mimic the '-=' in the if() above
153 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
154 /* Allocation pointer starts at the top.
155 Theory: because we build leaves before trunk allocating at end
156 means that at run time access is cache friendly upward
158 PL_OpPtr += PERL_SLAB_SIZE;
160 #ifdef PERL_DEBUG_READONLY_OPS
161 /* We remember this slab. */
162 /* This implementation isn't efficient, but it is simple. */
163 PL_slabs = realloc(PL_slabs, sizeof(I32**) * (PL_slab_count + 1));
164 PL_slabs[PL_slab_count++] = PL_OpSlab;
165 DEBUG_m(PerlIO_printf(Perl_debug_log, "Allocate %p\n", PL_OpSlab));
168 assert( PL_OpSpace >= 0 );
169 /* Move the allocation pointer down */
171 assert( PL_OpPtr > (I32 **) PL_OpSlab );
172 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
173 (*PL_OpSlab)++; /* Increment use count of slab */
174 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
175 assert( *PL_OpSlab > 0 );
176 return (void *)(PL_OpPtr + 1);
179 #ifdef PERL_DEBUG_READONLY_OPS
181 Perl_pending_Slabs_to_ro(pTHX) {
182 /* Turn all the allocated op slabs read only. */
183 U32 count = PL_slab_count;
184 I32 **const slabs = PL_slabs;
186 /* Reset the array of pending OP slabs, as we're about to turn this lot
187 read only. Also, do it ahead of the loop in case the warn triggers,
188 and a warn handler has an eval */
194 /* Force a new slab for any further allocation. */
198 const void *start = slabs[count];
199 const size_t size = PERL_SLAB_SIZE* sizeof(I32*);
200 if(mprotect(start, size, PROT_READ)) {
201 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d",
202 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);
221 # define Slab_to_rw(op)
225 Perl_Slab_Free(pTHX_ void *op)
227 I32 * const * const ptr = (I32 **) op;
228 I32 * const slab = ptr[-1];
229 assert( ptr-1 > (I32 **) slab );
230 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
233 if (--(*slab) == 0) {
235 # define PerlMemShared PerlMem
238 #ifdef PERL_DEBUG_READONLY_OPS
239 /* Need to remove this slab from our list of slabs */
241 U32 count = PL_slab_count;
244 if (PL_slabs[count] == slab) {
245 /* Found it. Move the entry at the end to overwrite it. */
246 DEBUG_m(PerlIO_printf(Perl_debug_log,
247 "Deallocate %p by moving %p from %lu to %lu\n",
249 PL_slabs[PL_slab_count - 1],
250 PL_slab_count, count));
251 PL_slabs[count] = PL_slabs[--PL_slab_count];
252 /* Could realloc smaller at this point, but probably not
259 "panic: Couldn't find slab at %p (%lu allocated)",
260 slab, (unsigned long) PL_slabs);
262 if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
263 perror("munmap failed");
268 PerlMemShared_free(slab);
270 if (slab == PL_OpSlab) {
277 * In the following definition, the ", (OP*)0" is just to make the compiler
278 * think the expression is of the right type: croak actually does a Siglongjmp.
280 #define CHECKOP(type,o) \
281 ((PL_op_mask && PL_op_mask[type]) \
282 ? ( op_free((OP*)o), \
283 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
285 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
287 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
290 S_gv_ename(pTHX_ GV *gv)
292 SV* const tmpsv = sv_newmortal();
293 gv_efullname3(tmpsv, gv, NULL);
294 return SvPV_nolen_const(tmpsv);
298 S_no_fh_allowed(pTHX_ OP *o)
300 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
306 S_too_few_arguments(pTHX_ OP *o, const char *name)
308 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
313 S_too_many_arguments(pTHX_ OP *o, const char *name)
315 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
320 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
322 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
323 (int)n, name, t, OP_DESC(kid)));
327 S_no_bareword_allowed(pTHX_ const OP *o)
330 return; /* various ok barewords are hidden in extra OP_NULL */
331 qerror(Perl_mess(aTHX_
332 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
336 /* "register" allocation */
339 Perl_allocmy(pTHX_ const char *const name)
343 const bool is_our = (PL_in_my == KEY_our);
345 /* complain about "my $<special_var>" etc etc */
349 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
350 (name[1] == '_' && (*name == '$' || name[2]))))
352 /* name[2] is true if strlen(name) > 2 */
353 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
354 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%s in \"my\"",
355 name[0], toCTRL(name[1]), name + 2));
357 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
361 /* check for duplicate declaration */
362 pad_check_dup(name, is_our, (PL_curstash ? PL_curstash : PL_defstash));
364 if (PL_in_my_stash && *name != '$') {
365 yyerror(Perl_form(aTHX_
366 "Can't declare class for non-scalar %s in \"%s\"",
368 is_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
371 /* allocate a spare slot and store the name in that slot */
373 off = pad_add_name(name,
376 /* $_ is always in main::, even with our */
377 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
381 PL_in_my == KEY_state
386 /* free the body of an op without examining its contents.
387 * Always use this rather than FreeOp directly */
390 S_op_destroy(pTHX_ OP *o)
392 if (o->op_latefree) {
403 Perl_op_free(pTHX_ OP *o)
408 if (!o || o->op_static)
410 if (o->op_latefreed) {
417 if (o->op_private & OPpREFCOUNTED) {
427 #ifdef PERL_DEBUG_READONLY_OPS
431 refcnt = OpREFCNT_dec(o);
442 if (o->op_flags & OPf_KIDS) {
443 register OP *kid, *nextkid;
444 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
445 nextkid = kid->op_sibling; /* Get before next freeing kid */
450 type = (OPCODE)o->op_targ;
452 /* COP* is not cleared by op_clear() so that we may track line
453 * numbers etc even after null() */
454 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
458 if (o->op_latefree) {
464 #ifdef DEBUG_LEAKING_SCALARS
471 Perl_op_clear(pTHX_ OP *o)
476 /* if (o->op_madprop && o->op_madprop->mad_next)
478 /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
479 "modification of a read only value" for a reason I can't fathom why.
480 It's the "" stringification of $_, where $_ was set to '' in a foreach
481 loop, but it defies simplification into a small test case.
482 However, commenting them out has caused ext/List/Util/t/weak.t to fail
485 mad_free(o->op_madprop);
491 switch (o->op_type) {
492 case OP_NULL: /* Was holding old type, if any. */
493 if (PL_madskills && o->op_targ != OP_NULL) {
494 o->op_type = o->op_targ;
498 case OP_ENTEREVAL: /* Was holding hints. */
502 if (!(o->op_flags & OPf_REF)
503 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
509 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
510 /* not an OP_PADAV replacement */
512 if (cPADOPo->op_padix > 0) {
513 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
514 * may still exist on the pad */
515 pad_swipe(cPADOPo->op_padix, TRUE);
516 cPADOPo->op_padix = 0;
519 SvREFCNT_dec(cSVOPo->op_sv);
520 cSVOPo->op_sv = NULL;
524 case OP_METHOD_NAMED:
526 SvREFCNT_dec(cSVOPo->op_sv);
527 cSVOPo->op_sv = NULL;
530 Even if op_clear does a pad_free for the target of the op,
531 pad_free doesn't actually remove the sv that exists in the pad;
532 instead it lives on. This results in that it could be reused as
533 a target later on when the pad was reallocated.
536 pad_swipe(o->op_targ,1);
545 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
549 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
551 if (cPADOPo->op_padix > 0) {
552 pad_swipe(cPADOPo->op_padix, TRUE);
553 cPADOPo->op_padix = 0;
556 SvREFCNT_dec(cSVOPo->op_sv);
557 cSVOPo->op_sv = NULL;
561 PerlMemShared_free(cPVOPo->op_pv);
562 cPVOPo->op_pv = NULL;
566 op_free(cPMOPo->op_pmreplroot);
570 if (INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot)) {
571 /* No GvIN_PAD_off here, because other references may still
572 * exist on the pad */
573 pad_swipe(INT2PTR(PADOFFSET, cPMOPo->op_pmreplroot), TRUE);
576 SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
583 HV * const pmstash = PmopSTASH(cPMOPo);
584 if (pmstash && !SvIS_FREED(pmstash)) {
585 MAGIC * const mg = mg_find((SV*)pmstash, PERL_MAGIC_symtab);
587 PMOP *pmop = (PMOP*) mg->mg_obj;
588 PMOP *lastpmop = NULL;
590 if (cPMOPo == pmop) {
592 lastpmop->op_pmnext = pmop->op_pmnext;
594 mg->mg_obj = (SV*) pmop->op_pmnext;
598 pmop = pmop->op_pmnext;
602 PmopSTASH_free(cPMOPo);
604 cPMOPo->op_pmreplroot = NULL;
605 /* we use the "SAFE" version of the PM_ macros here
606 * since sv_clean_all might release some PMOPs
607 * after PL_regex_padav has been cleared
608 * and the clearing of PL_regex_padav needs to
609 * happen before sv_clean_all
611 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
612 PM_SETRE_SAFE(cPMOPo, NULL);
614 if(PL_regex_pad) { /* We could be in destruction */
615 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
616 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
617 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
624 if (o->op_targ > 0) {
625 pad_free(o->op_targ);
631 S_cop_free(pTHX_ COP* cop)
636 if (! specialWARN(cop->cop_warnings))
637 PerlMemShared_free(cop->cop_warnings);
638 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
642 Perl_op_null(pTHX_ OP *o)
645 if (o->op_type == OP_NULL)
649 o->op_targ = o->op_type;
650 o->op_type = OP_NULL;
651 o->op_ppaddr = PL_ppaddr[OP_NULL];
655 Perl_op_refcnt_lock(pTHX)
663 Perl_op_refcnt_unlock(pTHX)
670 /* Contextualizers */
672 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
675 Perl_linklist(pTHX_ OP *o)
682 /* establish postfix order */
683 first = cUNOPo->op_first;
686 o->op_next = LINKLIST(first);
689 if (kid->op_sibling) {
690 kid->op_next = LINKLIST(kid->op_sibling);
691 kid = kid->op_sibling;
705 Perl_scalarkids(pTHX_ OP *o)
707 if (o && o->op_flags & OPf_KIDS) {
709 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
716 S_scalarboolean(pTHX_ OP *o)
719 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
720 if (ckWARN(WARN_SYNTAX)) {
721 const line_t oldline = CopLINE(PL_curcop);
723 if (PL_copline != NOLINE)
724 CopLINE_set(PL_curcop, PL_copline);
725 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
726 CopLINE_set(PL_curcop, oldline);
733 Perl_scalar(pTHX_ OP *o)
738 /* assumes no premature commitment */
739 if (!o || PL_error_count || (o->op_flags & OPf_WANT)
740 || o->op_type == OP_RETURN)
745 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
747 switch (o->op_type) {
749 scalar(cBINOPo->op_first);
754 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
758 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
759 if (!kPMOP->op_pmreplroot)
760 deprecate_old("implicit split to @_");
768 if (o->op_flags & OPf_KIDS) {
769 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
775 kid = cLISTOPo->op_first;
777 while ((kid = kid->op_sibling)) {
783 PL_curcop = &PL_compiling;
788 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
794 PL_curcop = &PL_compiling;
797 if (ckWARN(WARN_VOID))
798 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
804 Perl_scalarvoid(pTHX_ OP *o)
808 const char* useless = NULL;
812 /* trailing mad null ops don't count as "there" for void processing */
814 o->op_type != OP_NULL &&
816 o->op_sibling->op_type == OP_NULL)
819 for (sib = o->op_sibling;
820 sib && sib->op_type == OP_NULL;
821 sib = sib->op_sibling) ;
827 if (o->op_type == OP_NEXTSTATE
828 || o->op_type == OP_SETSTATE
829 || o->op_type == OP_DBSTATE
830 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
831 || o->op_targ == OP_SETSTATE
832 || o->op_targ == OP_DBSTATE)))
833 PL_curcop = (COP*)o; /* for warning below */
835 /* assumes no premature commitment */
836 want = o->op_flags & OPf_WANT;
837 if ((want && want != OPf_WANT_SCALAR) || PL_error_count
838 || o->op_type == OP_RETURN)
843 if ((o->op_private & OPpTARGET_MY)
844 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
846 return scalar(o); /* As if inside SASSIGN */
849 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
851 switch (o->op_type) {
853 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
857 if (o->op_flags & OPf_STACKED)
861 if (o->op_private == 4)
933 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
934 useless = OP_DESC(o);
938 kid = cUNOPo->op_first;
939 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
940 kid->op_type != OP_TRANS) {
943 useless = "negative pattern binding (!~)";
950 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
951 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
952 useless = "a variable";
957 if (cSVOPo->op_private & OPpCONST_STRICT)
958 no_bareword_allowed(o);
960 if (ckWARN(WARN_VOID)) {
961 useless = "a constant";
962 if (o->op_private & OPpCONST_ARYBASE)
964 /* don't warn on optimised away booleans, eg
965 * use constant Foo, 5; Foo || print; */
966 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
968 /* the constants 0 and 1 are permitted as they are
969 conventionally used as dummies in constructs like
970 1 while some_condition_with_side_effects; */
971 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
973 else if (SvPOK(sv)) {
974 /* perl4's way of mixing documentation and code
975 (before the invention of POD) was based on a
976 trick to mix nroff and perl code. The trick was
977 built upon these three nroff macros being used in
978 void context. The pink camel has the details in
979 the script wrapman near page 319. */
980 const char * const maybe_macro = SvPVX_const(sv);
981 if (strnEQ(maybe_macro, "di", 2) ||
982 strnEQ(maybe_macro, "ds", 2) ||
983 strnEQ(maybe_macro, "ig", 2))
988 op_null(o); /* don't execute or even remember it */
992 o->op_type = OP_PREINC; /* pre-increment is faster */
993 o->op_ppaddr = PL_ppaddr[OP_PREINC];
997 o->op_type = OP_PREDEC; /* pre-decrement is faster */
998 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1002 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1003 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1007 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1008 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1017 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1022 if (o->op_flags & OPf_STACKED)
1029 if (!(o->op_flags & OPf_KIDS))
1040 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1047 /* all requires must return a boolean value */
1048 o->op_flags &= ~OPf_WANT;
1053 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
1054 if (!kPMOP->op_pmreplroot)
1055 deprecate_old("implicit split to @_");
1059 if (useless && ckWARN(WARN_VOID))
1060 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1065 Perl_listkids(pTHX_ OP *o)
1067 if (o && o->op_flags & OPf_KIDS) {
1069 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1076 Perl_list(pTHX_ OP *o)
1081 /* assumes no premature commitment */
1082 if (!o || (o->op_flags & OPf_WANT) || PL_error_count
1083 || o->op_type == OP_RETURN)
1088 if ((o->op_private & OPpTARGET_MY)
1089 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1091 return o; /* As if inside SASSIGN */
1094 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1096 switch (o->op_type) {
1099 list(cBINOPo->op_first);
1104 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1112 if (!(o->op_flags & OPf_KIDS))
1114 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1115 list(cBINOPo->op_first);
1116 return gen_constant_list(o);
1123 kid = cLISTOPo->op_first;
1125 while ((kid = kid->op_sibling)) {
1126 if (kid->op_sibling)
1131 PL_curcop = &PL_compiling;
1135 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1136 if (kid->op_sibling)
1141 PL_curcop = &PL_compiling;
1144 /* all requires must return a boolean value */
1145 o->op_flags &= ~OPf_WANT;
1152 Perl_scalarseq(pTHX_ OP *o)
1156 const OPCODE type = o->op_type;
1158 if (type == OP_LINESEQ || type == OP_SCOPE ||
1159 type == OP_LEAVE || type == OP_LEAVETRY)
1162 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1163 if (kid->op_sibling) {
1167 PL_curcop = &PL_compiling;
1169 o->op_flags &= ~OPf_PARENS;
1170 if (PL_hints & HINT_BLOCK_SCOPE)
1171 o->op_flags |= OPf_PARENS;
1174 o = newOP(OP_STUB, 0);
1179 S_modkids(pTHX_ OP *o, I32 type)
1181 if (o && o->op_flags & OPf_KIDS) {
1183 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1189 /* Propagate lvalue ("modifiable") context to an op and its children.
1190 * 'type' represents the context type, roughly based on the type of op that
1191 * would do the modifying, although local() is represented by OP_NULL.
1192 * It's responsible for detecting things that can't be modified, flag
1193 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1194 * might have to vivify a reference in $x), and so on.
1196 * For example, "$a+1 = 2" would cause mod() to be called with o being
1197 * OP_ADD and type being OP_SASSIGN, and would output an error.
1201 Perl_mod(pTHX_ OP *o, I32 type)
1205 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1208 if (!o || PL_error_count)
1211 if ((o->op_private & OPpTARGET_MY)
1212 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1217 switch (o->op_type) {
1223 if (!(o->op_private & OPpCONST_ARYBASE))
1226 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1227 CopARYBASE_set(&PL_compiling,
1228 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1232 SAVECOPARYBASE(&PL_compiling);
1233 CopARYBASE_set(&PL_compiling, 0);
1235 else if (type == OP_REFGEN)
1238 Perl_croak(aTHX_ "That use of $[ is unsupported");
1241 if (o->op_flags & OPf_PARENS || PL_madskills)
1245 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1246 !(o->op_flags & OPf_STACKED)) {
1247 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1248 /* The default is to set op_private to the number of children,
1249 which for a UNOP such as RV2CV is always 1. And w're using
1250 the bit for a flag in RV2CV, so we need it clear. */
1251 o->op_private &= ~1;
1252 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1253 assert(cUNOPo->op_first->op_type == OP_NULL);
1254 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1257 else if (o->op_private & OPpENTERSUB_NOMOD)
1259 else { /* lvalue subroutine call */
1260 o->op_private |= OPpLVAL_INTRO;
1261 PL_modcount = RETURN_UNLIMITED_NUMBER;
1262 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1263 /* Backward compatibility mode: */
1264 o->op_private |= OPpENTERSUB_INARGS;
1267 else { /* Compile-time error message: */
1268 OP *kid = cUNOPo->op_first;
1272 if (kid->op_type != OP_PUSHMARK) {
1273 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1275 "panic: unexpected lvalue entersub "
1276 "args: type/targ %ld:%"UVuf,
1277 (long)kid->op_type, (UV)kid->op_targ);
1278 kid = kLISTOP->op_first;
1280 while (kid->op_sibling)
1281 kid = kid->op_sibling;
1282 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1284 if (kid->op_type == OP_METHOD_NAMED
1285 || kid->op_type == OP_METHOD)
1289 NewOp(1101, newop, 1, UNOP);
1290 newop->op_type = OP_RV2CV;
1291 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1292 newop->op_first = NULL;
1293 newop->op_next = (OP*)newop;
1294 kid->op_sibling = (OP*)newop;
1295 newop->op_private |= OPpLVAL_INTRO;
1296 newop->op_private &= ~1;
1300 if (kid->op_type != OP_RV2CV)
1302 "panic: unexpected lvalue entersub "
1303 "entry via type/targ %ld:%"UVuf,
1304 (long)kid->op_type, (UV)kid->op_targ);
1305 kid->op_private |= OPpLVAL_INTRO;
1306 break; /* Postpone until runtime */
1310 kid = kUNOP->op_first;
1311 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1312 kid = kUNOP->op_first;
1313 if (kid->op_type == OP_NULL)
1315 "Unexpected constant lvalue entersub "
1316 "entry via type/targ %ld:%"UVuf,
1317 (long)kid->op_type, (UV)kid->op_targ);
1318 if (kid->op_type != OP_GV) {
1319 /* Restore RV2CV to check lvalueness */
1321 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1322 okid->op_next = kid->op_next;
1323 kid->op_next = okid;
1326 okid->op_next = NULL;
1327 okid->op_type = OP_RV2CV;
1329 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1330 okid->op_private |= OPpLVAL_INTRO;
1331 okid->op_private &= ~1;
1335 cv = GvCV(kGVOP_gv);
1345 /* grep, foreach, subcalls, refgen */
1346 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1348 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1349 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1351 : (o->op_type == OP_ENTERSUB
1352 ? "non-lvalue subroutine call"
1354 type ? PL_op_desc[type] : "local"));
1368 case OP_RIGHT_SHIFT:
1377 if (!(o->op_flags & OPf_STACKED))
1384 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1390 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1391 PL_modcount = RETURN_UNLIMITED_NUMBER;
1392 return o; /* Treat \(@foo) like ordinary list. */
1396 if (scalar_mod_type(o, type))
1398 ref(cUNOPo->op_first, o->op_type);
1402 if (type == OP_LEAVESUBLV)
1403 o->op_private |= OPpMAYBE_LVSUB;
1409 PL_modcount = RETURN_UNLIMITED_NUMBER;
1412 ref(cUNOPo->op_first, o->op_type);
1417 PL_hints |= HINT_BLOCK_SCOPE;
1432 PL_modcount = RETURN_UNLIMITED_NUMBER;
1433 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1434 return o; /* Treat \(@foo) like ordinary list. */
1435 if (scalar_mod_type(o, type))
1437 if (type == OP_LEAVESUBLV)
1438 o->op_private |= OPpMAYBE_LVSUB;
1442 if (!type) /* local() */
1443 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1444 PAD_COMPNAME_PV(o->op_targ));
1452 if (type != OP_SASSIGN)
1456 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1461 if (type == OP_LEAVESUBLV)
1462 o->op_private |= OPpMAYBE_LVSUB;
1464 pad_free(o->op_targ);
1465 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1466 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1467 if (o->op_flags & OPf_KIDS)
1468 mod(cBINOPo->op_first->op_sibling, type);
1473 ref(cBINOPo->op_first, o->op_type);
1474 if (type == OP_ENTERSUB &&
1475 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1476 o->op_private |= OPpLVAL_DEFER;
1477 if (type == OP_LEAVESUBLV)
1478 o->op_private |= OPpMAYBE_LVSUB;
1488 if (o->op_flags & OPf_KIDS)
1489 mod(cLISTOPo->op_last, type);
1494 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1496 else if (!(o->op_flags & OPf_KIDS))
1498 if (o->op_targ != OP_LIST) {
1499 mod(cBINOPo->op_first, type);
1505 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1510 if (type != OP_LEAVESUBLV)
1512 break; /* mod()ing was handled by ck_return() */
1515 /* [20011101.069] File test operators interpret OPf_REF to mean that
1516 their argument is a filehandle; thus \stat(".") should not set
1518 if (type == OP_REFGEN &&
1519 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1522 if (type != OP_LEAVESUBLV)
1523 o->op_flags |= OPf_MOD;
1525 if (type == OP_AASSIGN || type == OP_SASSIGN)
1526 o->op_flags |= OPf_SPECIAL|OPf_REF;
1527 else if (!type) { /* local() */
1530 o->op_private |= OPpLVAL_INTRO;
1531 o->op_flags &= ~OPf_SPECIAL;
1532 PL_hints |= HINT_BLOCK_SCOPE;
1537 if (ckWARN(WARN_SYNTAX)) {
1538 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1539 "Useless localization of %s", OP_DESC(o));
1543 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1544 && type != OP_LEAVESUBLV)
1545 o->op_flags |= OPf_REF;
1550 S_scalar_mod_type(const OP *o, I32 type)
1554 if (o->op_type == OP_RV2GV)
1578 case OP_RIGHT_SHIFT:
1597 S_is_handle_constructor(const OP *o, I32 numargs)
1599 switch (o->op_type) {
1607 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1620 Perl_refkids(pTHX_ OP *o, I32 type)
1622 if (o && o->op_flags & OPf_KIDS) {
1624 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1631 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1636 if (!o || PL_error_count)
1639 switch (o->op_type) {
1641 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1642 !(o->op_flags & OPf_STACKED)) {
1643 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1644 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1645 assert(cUNOPo->op_first->op_type == OP_NULL);
1646 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1647 o->op_flags |= OPf_SPECIAL;
1648 o->op_private &= ~1;
1653 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1654 doref(kid, type, set_op_ref);
1657 if (type == OP_DEFINED)
1658 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1659 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1662 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1663 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1664 : type == OP_RV2HV ? OPpDEREF_HV
1666 o->op_flags |= OPf_MOD;
1673 o->op_flags |= OPf_REF;
1676 if (type == OP_DEFINED)
1677 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1678 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1684 o->op_flags |= OPf_REF;
1689 if (!(o->op_flags & OPf_KIDS))
1691 doref(cBINOPo->op_first, type, set_op_ref);
1695 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1696 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1697 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1698 : type == OP_RV2HV ? OPpDEREF_HV
1700 o->op_flags |= OPf_MOD;
1710 if (!(o->op_flags & OPf_KIDS))
1712 doref(cLISTOPo->op_last, type, set_op_ref);
1722 S_dup_attrlist(pTHX_ OP *o)
1727 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1728 * where the first kid is OP_PUSHMARK and the remaining ones
1729 * are OP_CONST. We need to push the OP_CONST values.
1731 if (o->op_type == OP_CONST)
1732 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1734 else if (o->op_type == OP_NULL)
1738 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1740 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1741 if (o->op_type == OP_CONST)
1742 rop = append_elem(OP_LIST, rop,
1743 newSVOP(OP_CONST, o->op_flags,
1744 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1751 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1756 /* fake up C<use attributes $pkg,$rv,@attrs> */
1757 ENTER; /* need to protect against side-effects of 'use' */
1759 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1761 #define ATTRSMODULE "attributes"
1762 #define ATTRSMODULE_PM "attributes.pm"
1765 /* Don't force the C<use> if we don't need it. */
1766 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1767 if (svp && *svp != &PL_sv_undef)
1768 NOOP; /* already in %INC */
1770 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1771 newSVpvs(ATTRSMODULE), NULL);
1774 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1775 newSVpvs(ATTRSMODULE),
1777 prepend_elem(OP_LIST,
1778 newSVOP(OP_CONST, 0, stashsv),
1779 prepend_elem(OP_LIST,
1780 newSVOP(OP_CONST, 0,
1782 dup_attrlist(attrs))));
1788 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1791 OP *pack, *imop, *arg;
1797 assert(target->op_type == OP_PADSV ||
1798 target->op_type == OP_PADHV ||
1799 target->op_type == OP_PADAV);
1801 /* Ensure that attributes.pm is loaded. */
1802 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1804 /* Need package name for method call. */
1805 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1807 /* Build up the real arg-list. */
1808 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1810 arg = newOP(OP_PADSV, 0);
1811 arg->op_targ = target->op_targ;
1812 arg = prepend_elem(OP_LIST,
1813 newSVOP(OP_CONST, 0, stashsv),
1814 prepend_elem(OP_LIST,
1815 newUNOP(OP_REFGEN, 0,
1816 mod(arg, OP_REFGEN)),
1817 dup_attrlist(attrs)));
1819 /* Fake up a method call to import */
1820 meth = newSVpvs_share("import");
1821 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1822 append_elem(OP_LIST,
1823 prepend_elem(OP_LIST, pack, list(arg)),
1824 newSVOP(OP_METHOD_NAMED, 0, meth)));
1825 imop->op_private |= OPpENTERSUB_NOMOD;
1827 /* Combine the ops. */
1828 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1832 =notfor apidoc apply_attrs_string
1834 Attempts to apply a list of attributes specified by the C<attrstr> and
1835 C<len> arguments to the subroutine identified by the C<cv> argument which
1836 is expected to be associated with the package identified by the C<stashpv>
1837 argument (see L<attributes>). It gets this wrong, though, in that it
1838 does not correctly identify the boundaries of the individual attribute
1839 specifications within C<attrstr>. This is not really intended for the
1840 public API, but has to be listed here for systems such as AIX which
1841 need an explicit export list for symbols. (It's called from XS code
1842 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1843 to respect attribute syntax properly would be welcome.
1849 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1850 const char *attrstr, STRLEN len)
1855 len = strlen(attrstr);
1859 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1861 const char * const sstr = attrstr;
1862 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1863 attrs = append_elem(OP_LIST, attrs,
1864 newSVOP(OP_CONST, 0,
1865 newSVpvn(sstr, attrstr-sstr)));
1869 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1870 newSVpvs(ATTRSMODULE),
1871 NULL, prepend_elem(OP_LIST,
1872 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1873 prepend_elem(OP_LIST,
1874 newSVOP(OP_CONST, 0,
1880 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1885 if (!o || PL_error_count)
1889 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
1890 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
1894 if (type == OP_LIST) {
1896 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1897 my_kid(kid, attrs, imopsp);
1898 } else if (type == OP_UNDEF
1904 } else if (type == OP_RV2SV || /* "our" declaration */
1906 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1907 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1908 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1910 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1912 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1914 PL_in_my_stash = NULL;
1915 apply_attrs(GvSTASH(gv),
1916 (type == OP_RV2SV ? GvSV(gv) :
1917 type == OP_RV2AV ? (SV*)GvAV(gv) :
1918 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1921 o->op_private |= OPpOUR_INTRO;
1924 else if (type != OP_PADSV &&
1927 type != OP_PUSHMARK)
1929 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1931 PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my"));
1934 else if (attrs && type != OP_PUSHMARK) {
1938 PL_in_my_stash = NULL;
1940 /* check for C<my Dog $spot> when deciding package */
1941 stash = PAD_COMPNAME_TYPE(o->op_targ);
1943 stash = PL_curstash;
1944 apply_attrs_my(stash, o, attrs, imopsp);
1946 o->op_flags |= OPf_MOD;
1947 o->op_private |= OPpLVAL_INTRO;
1948 if (PL_in_my == KEY_state)
1949 o->op_private |= OPpPAD_STATE;
1954 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
1958 int maybe_scalar = 0;
1960 /* [perl #17376]: this appears to be premature, and results in code such as
1961 C< our(%x); > executing in list mode rather than void mode */
1963 if (o->op_flags & OPf_PARENS)
1973 o = my_kid(o, attrs, &rops);
1975 if (maybe_scalar && o->op_type == OP_PADSV) {
1976 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
1977 o->op_private |= OPpLVAL_INTRO;
1980 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
1983 PL_in_my_stash = NULL;
1988 Perl_my(pTHX_ OP *o)
1990 return my_attrs(o, NULL);
1994 Perl_sawparens(pTHX_ OP *o)
1996 PERL_UNUSED_CONTEXT;
1998 o->op_flags |= OPf_PARENS;
2003 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2007 const OPCODE ltype = left->op_type;
2008 const OPCODE rtype = right->op_type;
2010 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2011 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2013 const char * const desc
2014 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
2015 ? (int)rtype : OP_MATCH];
2016 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2017 ? "@array" : "%hash");
2018 Perl_warner(aTHX_ packWARN(WARN_MISC),
2019 "Applying %s to %s will act on scalar(%s)",
2020 desc, sample, sample);
2023 if (rtype == OP_CONST &&
2024 cSVOPx(right)->op_private & OPpCONST_BARE &&
2025 cSVOPx(right)->op_private & OPpCONST_STRICT)
2027 no_bareword_allowed(right);
2030 ismatchop = rtype == OP_MATCH ||
2031 rtype == OP_SUBST ||
2033 if (ismatchop && right->op_private & OPpTARGET_MY) {
2035 right->op_private &= ~OPpTARGET_MY;
2037 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2040 right->op_flags |= OPf_STACKED;
2041 if (rtype != OP_MATCH &&
2042 ! (rtype == OP_TRANS &&
2043 right->op_private & OPpTRANS_IDENTICAL))
2044 newleft = mod(left, rtype);
2047 if (right->op_type == OP_TRANS)
2048 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2050 o = prepend_elem(rtype, scalar(newleft), right);
2052 return newUNOP(OP_NOT, 0, scalar(o));
2056 return bind_match(type, left,
2057 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2061 Perl_invert(pTHX_ OP *o)
2065 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2069 Perl_scope(pTHX_ OP *o)
2073 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2074 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2075 o->op_type = OP_LEAVE;
2076 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2078 else if (o->op_type == OP_LINESEQ) {
2080 o->op_type = OP_SCOPE;
2081 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2082 kid = ((LISTOP*)o)->op_first;
2083 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2086 /* The following deals with things like 'do {1 for 1}' */
2087 kid = kid->op_sibling;
2089 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2094 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2100 Perl_block_start(pTHX_ int full)
2103 const int retval = PL_savestack_ix;
2104 pad_block_start(full);
2106 PL_hints &= ~HINT_BLOCK_SCOPE;
2107 SAVECOMPILEWARNINGS();
2108 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2113 Perl_block_end(pTHX_ I32 floor, OP *seq)
2116 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2117 OP* const retval = scalarseq(seq);
2119 CopHINTS_set(&PL_compiling, PL_hints);
2121 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2130 const PADOFFSET offset = pad_findmy("$_");
2131 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2132 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2135 OP * const o = newOP(OP_PADSV, 0);
2136 o->op_targ = offset;
2142 Perl_newPROG(pTHX_ OP *o)
2148 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2149 ((PL_in_eval & EVAL_KEEPERR)
2150 ? OPf_SPECIAL : 0), o);
2151 PL_eval_start = linklist(PL_eval_root);
2152 PL_eval_root->op_private |= OPpREFCOUNTED;
2153 OpREFCNT_set(PL_eval_root, 1);
2154 PL_eval_root->op_next = 0;
2155 CALL_PEEP(PL_eval_start);
2158 if (o->op_type == OP_STUB) {
2159 PL_comppad_name = 0;
2161 S_op_destroy(aTHX_ o);
2164 PL_main_root = scope(sawparens(scalarvoid(o)));
2165 PL_curcop = &PL_compiling;
2166 PL_main_start = LINKLIST(PL_main_root);
2167 PL_main_root->op_private |= OPpREFCOUNTED;
2168 OpREFCNT_set(PL_main_root, 1);
2169 PL_main_root->op_next = 0;
2170 CALL_PEEP(PL_main_start);
2173 /* Register with debugger */
2176 = Perl_get_cvn_flags(aTHX_ STR_WITH_LEN("DB::postponed"), 0);
2180 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2182 call_sv((SV*)cv, G_DISCARD);
2189 Perl_localize(pTHX_ OP *o, I32 lex)
2192 if (o->op_flags & OPf_PARENS)
2193 /* [perl #17376]: this appears to be premature, and results in code such as
2194 C< our(%x); > executing in list mode rather than void mode */
2201 if ( PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ','
2202 && ckWARN(WARN_PARENTHESIS))
2204 char *s = PL_bufptr;
2207 /* some heuristics to detect a potential error */
2208 while (*s && (strchr(", \t\n", *s)))
2212 if (*s && strchr("@$%*", *s) && *++s
2213 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2216 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2218 while (*s && (strchr(", \t\n", *s)))
2224 if (sigil && (*s == ';' || *s == '=')) {
2225 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2226 "Parentheses missing around \"%s\" list",
2227 lex ? (PL_in_my == KEY_our ? "our" : PL_in_my == KEY_state ? "state" : "my")
2235 o = mod(o, OP_NULL); /* a bit kludgey */
2237 PL_in_my_stash = NULL;
2242 Perl_jmaybe(pTHX_ OP *o)
2244 if (o->op_type == OP_LIST) {
2246 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2247 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2253 Perl_fold_constants(pTHX_ register OP *o)
2258 VOL I32 type = o->op_type;
2263 SV * const oldwarnhook = PL_warnhook;
2264 SV * const olddiehook = PL_diehook;
2267 if (PL_opargs[type] & OA_RETSCALAR)
2269 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2270 o->op_targ = pad_alloc(type, SVs_PADTMP);
2272 /* integerize op, unless it happens to be C<-foo>.
2273 * XXX should pp_i_negate() do magic string negation instead? */
2274 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2275 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2276 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2278 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2281 if (!(PL_opargs[type] & OA_FOLDCONST))
2286 /* XXX might want a ck_negate() for this */
2287 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2298 /* XXX what about the numeric ops? */
2299 if (PL_hints & HINT_LOCALE)
2304 goto nope; /* Don't try to run w/ errors */
2306 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2307 const OPCODE type = curop->op_type;
2308 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2310 type != OP_SCALAR &&
2312 type != OP_PUSHMARK)
2318 curop = LINKLIST(o);
2319 old_next = o->op_next;
2323 oldscope = PL_scopestack_ix;
2324 create_eval_scope(G_FAKINGEVAL);
2326 PL_warnhook = PERL_WARNHOOK_FATAL;
2333 sv = *(PL_stack_sp--);
2334 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2335 pad_swipe(o->op_targ, FALSE);
2336 else if (SvTEMP(sv)) { /* grab mortal temp? */
2337 SvREFCNT_inc_simple_void(sv);
2342 /* Something tried to die. Abandon constant folding. */
2343 /* Pretend the error never happened. */
2344 sv_setpvn(ERRSV,"",0);
2345 o->op_next = old_next;
2349 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2350 PL_warnhook = oldwarnhook;
2351 PL_diehook = olddiehook;
2352 /* XXX note that this croak may fail as we've already blown away
2353 * the stack - eg any nested evals */
2354 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2357 PL_warnhook = oldwarnhook;
2358 PL_diehook = olddiehook;
2360 if (PL_scopestack_ix > oldscope)
2361 delete_eval_scope();
2370 if (type == OP_RV2GV)
2371 newop = newGVOP(OP_GV, 0, (GV*)sv);
2373 newop = newSVOP(OP_CONST, 0, (SV*)sv);
2374 op_getmad(o,newop,'f');
2382 Perl_gen_constant_list(pTHX_ register OP *o)
2386 const I32 oldtmps_floor = PL_tmps_floor;
2390 return o; /* Don't attempt to run with errors */
2392 PL_op = curop = LINKLIST(o);
2398 assert (!(curop->op_flags & OPf_SPECIAL));
2399 assert(curop->op_type == OP_RANGE);
2401 PL_tmps_floor = oldtmps_floor;
2403 o->op_type = OP_RV2AV;
2404 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2405 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2406 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2407 o->op_opt = 0; /* needs to be revisited in peep() */
2408 curop = ((UNOP*)o)->op_first;
2409 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2411 op_getmad(curop,o,'O');
2420 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2423 if (!o || o->op_type != OP_LIST)
2424 o = newLISTOP(OP_LIST, 0, o, NULL);
2426 o->op_flags &= ~OPf_WANT;
2428 if (!(PL_opargs[type] & OA_MARK))
2429 op_null(cLISTOPo->op_first);
2431 o->op_type = (OPCODE)type;
2432 o->op_ppaddr = PL_ppaddr[type];
2433 o->op_flags |= flags;
2435 o = CHECKOP(type, o);
2436 if (o->op_type != (unsigned)type)
2439 return fold_constants(o);
2442 /* List constructors */
2445 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2453 if (first->op_type != (unsigned)type
2454 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2456 return newLISTOP(type, 0, first, last);
2459 if (first->op_flags & OPf_KIDS)
2460 ((LISTOP*)first)->op_last->op_sibling = last;
2462 first->op_flags |= OPf_KIDS;
2463 ((LISTOP*)first)->op_first = last;
2465 ((LISTOP*)first)->op_last = last;
2470 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2478 if (first->op_type != (unsigned)type)
2479 return prepend_elem(type, (OP*)first, (OP*)last);
2481 if (last->op_type != (unsigned)type)
2482 return append_elem(type, (OP*)first, (OP*)last);
2484 first->op_last->op_sibling = last->op_first;
2485 first->op_last = last->op_last;
2486 first->op_flags |= (last->op_flags & OPf_KIDS);
2489 if (last->op_first && first->op_madprop) {
2490 MADPROP *mp = last->op_first->op_madprop;
2492 while (mp->mad_next)
2494 mp->mad_next = first->op_madprop;
2497 last->op_first->op_madprop = first->op_madprop;
2500 first->op_madprop = last->op_madprop;
2501 last->op_madprop = 0;
2504 S_op_destroy(aTHX_ (OP*)last);
2510 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2518 if (last->op_type == (unsigned)type) {
2519 if (type == OP_LIST) { /* already a PUSHMARK there */
2520 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2521 ((LISTOP*)last)->op_first->op_sibling = first;
2522 if (!(first->op_flags & OPf_PARENS))
2523 last->op_flags &= ~OPf_PARENS;
2526 if (!(last->op_flags & OPf_KIDS)) {
2527 ((LISTOP*)last)->op_last = first;
2528 last->op_flags |= OPf_KIDS;
2530 first->op_sibling = ((LISTOP*)last)->op_first;
2531 ((LISTOP*)last)->op_first = first;
2533 last->op_flags |= OPf_KIDS;
2537 return newLISTOP(type, 0, first, last);
2545 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2548 Newxz(tk, 1, TOKEN);
2549 tk->tk_type = (OPCODE)optype;
2550 tk->tk_type = 12345;
2552 tk->tk_mad = madprop;
2557 Perl_token_free(pTHX_ TOKEN* tk)
2559 if (tk->tk_type != 12345)
2561 mad_free(tk->tk_mad);
2566 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2570 if (tk->tk_type != 12345) {
2571 Perl_warner(aTHX_ packWARN(WARN_MISC),
2572 "Invalid TOKEN object ignored");
2579 /* faked up qw list? */
2581 tm->mad_type == MAD_SV &&
2582 SvPVX((SV*)tm->mad_val)[0] == 'q')
2589 /* pretend constant fold didn't happen? */
2590 if (mp->mad_key == 'f' &&
2591 (o->op_type == OP_CONST ||
2592 o->op_type == OP_GV) )
2594 token_getmad(tk,(OP*)mp->mad_val,slot);
2608 if (mp->mad_key == 'X')
2609 mp->mad_key = slot; /* just change the first one */
2619 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2628 /* pretend constant fold didn't happen? */
2629 if (mp->mad_key == 'f' &&
2630 (o->op_type == OP_CONST ||
2631 o->op_type == OP_GV) )
2633 op_getmad(from,(OP*)mp->mad_val,slot);
2640 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2643 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2649 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2658 /* pretend constant fold didn't happen? */
2659 if (mp->mad_key == 'f' &&
2660 (o->op_type == OP_CONST ||
2661 o->op_type == OP_GV) )
2663 op_getmad(from,(OP*)mp->mad_val,slot);
2670 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2673 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2677 PerlIO_printf(PerlIO_stderr(),
2678 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2684 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2702 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2706 addmad(tm, &(o->op_madprop), slot);
2710 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2731 Perl_newMADsv(pTHX_ char key, SV* sv)
2733 return newMADPROP(key, MAD_SV, sv, 0);
2737 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
2740 Newxz(mp, 1, MADPROP);
2743 mp->mad_vlen = vlen;
2744 mp->mad_type = type;
2746 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2751 Perl_mad_free(pTHX_ MADPROP* mp)
2753 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2757 mad_free(mp->mad_next);
2758 /* if (PL_lex_state != LEX_NOTPARSING && mp->mad_vlen)
2759 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2760 switch (mp->mad_type) {
2764 Safefree((char*)mp->mad_val);
2767 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2768 op_free((OP*)mp->mad_val);
2771 sv_free((SV*)mp->mad_val);
2774 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
2783 Perl_newNULLLIST(pTHX)
2785 return newOP(OP_STUB, 0);
2789 Perl_force_list(pTHX_ OP *o)
2791 if (!o || o->op_type != OP_LIST)
2792 o = newLISTOP(OP_LIST, 0, o, NULL);
2798 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2803 NewOp(1101, listop, 1, LISTOP);
2805 listop->op_type = (OPCODE)type;
2806 listop->op_ppaddr = PL_ppaddr[type];
2809 listop->op_flags = (U8)flags;
2813 else if (!first && last)
2816 first->op_sibling = last;
2817 listop->op_first = first;
2818 listop->op_last = last;
2819 if (type == OP_LIST) {
2820 OP* const pushop = newOP(OP_PUSHMARK, 0);
2821 pushop->op_sibling = first;
2822 listop->op_first = pushop;
2823 listop->op_flags |= OPf_KIDS;
2825 listop->op_last = pushop;
2828 return CHECKOP(type, listop);
2832 Perl_newOP(pTHX_ I32 type, I32 flags)
2836 NewOp(1101, o, 1, OP);
2837 o->op_type = (OPCODE)type;
2838 o->op_ppaddr = PL_ppaddr[type];
2839 o->op_flags = (U8)flags;
2841 o->op_latefreed = 0;
2845 o->op_private = (U8)(0 | (flags >> 8));
2846 if (PL_opargs[type] & OA_RETSCALAR)
2848 if (PL_opargs[type] & OA_TARGET)
2849 o->op_targ = pad_alloc(type, SVs_PADTMP);
2850 return CHECKOP(type, o);
2854 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2860 first = newOP(OP_STUB, 0);
2861 if (PL_opargs[type] & OA_MARK)
2862 first = force_list(first);
2864 NewOp(1101, unop, 1, UNOP);
2865 unop->op_type = (OPCODE)type;
2866 unop->op_ppaddr = PL_ppaddr[type];
2867 unop->op_first = first;
2868 unop->op_flags = (U8)(flags | OPf_KIDS);
2869 unop->op_private = (U8)(1 | (flags >> 8));
2870 unop = (UNOP*) CHECKOP(type, unop);
2874 return fold_constants((OP *) unop);
2878 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2882 NewOp(1101, binop, 1, BINOP);
2885 first = newOP(OP_NULL, 0);
2887 binop->op_type = (OPCODE)type;
2888 binop->op_ppaddr = PL_ppaddr[type];
2889 binop->op_first = first;
2890 binop->op_flags = (U8)(flags | OPf_KIDS);
2893 binop->op_private = (U8)(1 | (flags >> 8));
2896 binop->op_private = (U8)(2 | (flags >> 8));
2897 first->op_sibling = last;
2900 binop = (BINOP*)CHECKOP(type, binop);
2901 if (binop->op_next || binop->op_type != (OPCODE)type)
2904 binop->op_last = binop->op_first->op_sibling;
2906 return fold_constants((OP *)binop);
2909 static int uvcompare(const void *a, const void *b)
2910 __attribute__nonnull__(1)
2911 __attribute__nonnull__(2)
2912 __attribute__pure__;
2913 static int uvcompare(const void *a, const void *b)
2915 if (*((const UV *)a) < (*(const UV *)b))
2917 if (*((const UV *)a) > (*(const UV *)b))
2919 if (*((const UV *)a+1) < (*(const UV *)b+1))
2921 if (*((const UV *)a+1) > (*(const UV *)b+1))
2927 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
2930 SV * const tstr = ((SVOP*)expr)->op_sv;
2933 (repl->op_type == OP_NULL)
2934 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
2936 ((SVOP*)repl)->op_sv;
2939 const U8 *t = (U8*)SvPV_const(tstr, tlen);
2940 const U8 *r = (U8*)SvPV_const(rstr, rlen);
2944 register short *tbl;
2946 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
2947 const I32 squash = o->op_private & OPpTRANS_SQUASH;
2948 I32 del = o->op_private & OPpTRANS_DELETE;
2950 PL_hints |= HINT_BLOCK_SCOPE;
2953 o->op_private |= OPpTRANS_FROM_UTF;
2956 o->op_private |= OPpTRANS_TO_UTF;
2958 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
2959 SV* const listsv = newSVpvs("# comment\n");
2961 const U8* tend = t + tlen;
2962 const U8* rend = r + rlen;
2976 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
2977 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
2980 const U32 flags = UTF8_ALLOW_DEFAULT;
2984 t = tsave = bytes_to_utf8(t, &len);
2987 if (!to_utf && rlen) {
2989 r = rsave = bytes_to_utf8(r, &len);
2993 /* There are several snags with this code on EBCDIC:
2994 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
2995 2. scan_const() in toke.c has encoded chars in native encoding which makes
2996 ranges at least in EBCDIC 0..255 range the bottom odd.
3000 U8 tmpbuf[UTF8_MAXBYTES+1];
3003 Newx(cp, 2*tlen, UV);
3005 transv = newSVpvs("");
3007 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3009 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3011 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3015 cp[2*i+1] = cp[2*i];
3019 qsort(cp, i, 2*sizeof(UV), uvcompare);
3020 for (j = 0; j < i; j++) {
3022 diff = val - nextmin;
3024 t = uvuni_to_utf8(tmpbuf,nextmin);
3025 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3027 U8 range_mark = UTF_TO_NATIVE(0xff);
3028 t = uvuni_to_utf8(tmpbuf, val - 1);
3029 sv_catpvn(transv, (char *)&range_mark, 1);
3030 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3037 t = uvuni_to_utf8(tmpbuf,nextmin);
3038 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3040 U8 range_mark = UTF_TO_NATIVE(0xff);
3041 sv_catpvn(transv, (char *)&range_mark, 1);
3043 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
3044 UNICODE_ALLOW_SUPER);
3045 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3046 t = (const U8*)SvPVX_const(transv);
3047 tlen = SvCUR(transv);
3051 else if (!rlen && !del) {
3052 r = t; rlen = tlen; rend = tend;
3055 if ((!rlen && !del) || t == r ||
3056 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3058 o->op_private |= OPpTRANS_IDENTICAL;
3062 while (t < tend || tfirst <= tlast) {
3063 /* see if we need more "t" chars */
3064 if (tfirst > tlast) {
3065 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3067 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3069 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3076 /* now see if we need more "r" chars */
3077 if (rfirst > rlast) {
3079 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3081 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3083 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3092 rfirst = rlast = 0xffffffff;
3096 /* now see which range will peter our first, if either. */
3097 tdiff = tlast - tfirst;
3098 rdiff = rlast - rfirst;
3105 if (rfirst == 0xffffffff) {
3106 diff = tdiff; /* oops, pretend rdiff is infinite */
3108 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3109 (long)tfirst, (long)tlast);
3111 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3115 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3116 (long)tfirst, (long)(tfirst + diff),
3119 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3120 (long)tfirst, (long)rfirst);
3122 if (rfirst + diff > max)
3123 max = rfirst + diff;
3125 grows = (tfirst < rfirst &&
3126 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3138 else if (max > 0xff)
3143 PerlMemShared_free(cPVOPo->op_pv);
3144 cPVOPo->op_pv = NULL;
3146 swash = (SV*)swash_init("utf8", "", listsv, bits, none);
3148 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3149 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3150 PAD_SETSV(cPADOPo->op_padix, swash);
3153 cSVOPo->op_sv = swash;
3155 SvREFCNT_dec(listsv);
3156 SvREFCNT_dec(transv);
3158 if (!del && havefinal && rlen)
3159 (void)hv_store((HV*)SvRV(swash), "FINAL", 5,
3160 newSVuv((UV)final), 0);
3163 o->op_private |= OPpTRANS_GROWS;
3169 op_getmad(expr,o,'e');
3170 op_getmad(repl,o,'r');
3178 tbl = (short*)cPVOPo->op_pv;
3180 Zero(tbl, 256, short);
3181 for (i = 0; i < (I32)tlen; i++)
3183 for (i = 0, j = 0; i < 256; i++) {
3185 if (j >= (I32)rlen) {
3194 if (i < 128 && r[j] >= 128)
3204 o->op_private |= OPpTRANS_IDENTICAL;
3206 else if (j >= (I32)rlen)
3211 PerlMemShared_realloc(tbl,
3212 (0x101+rlen-j) * sizeof(short));
3213 cPVOPo->op_pv = (char*)tbl;
3215 tbl[0x100] = (short)(rlen - j);
3216 for (i=0; i < (I32)rlen - j; i++)
3217 tbl[0x101+i] = r[j+i];
3221 if (!rlen && !del) {
3224 o->op_private |= OPpTRANS_IDENTICAL;
3226 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3227 o->op_private |= OPpTRANS_IDENTICAL;
3229 for (i = 0; i < 256; i++)
3231 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3232 if (j >= (I32)rlen) {
3234 if (tbl[t[i]] == -1)
3240 if (tbl[t[i]] == -1) {
3241 if (t[i] < 128 && r[j] >= 128)
3248 o->op_private |= OPpTRANS_GROWS;
3250 op_getmad(expr,o,'e');
3251 op_getmad(repl,o,'r');
3261 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3266 NewOp(1101, pmop, 1, PMOP);
3267 pmop->op_type = (OPCODE)type;
3268 pmop->op_ppaddr = PL_ppaddr[type];
3269 pmop->op_flags = (U8)flags;
3270 pmop->op_private = (U8)(0 | (flags >> 8));
3272 if (PL_hints & HINT_RE_TAINT)
3273 pmop->op_pmpermflags |= PMf_RETAINT;
3274 if (PL_hints & HINT_LOCALE)
3275 pmop->op_pmpermflags |= PMf_LOCALE;
3276 pmop->op_pmflags = pmop->op_pmpermflags;
3279 if (av_len((AV*) PL_regex_pad[0]) > -1) {
3280 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
3281 pmop->op_pmoffset = SvIV(repointer);
3282 SvREPADTMP_off(repointer);
3283 sv_setiv(repointer,0);
3285 SV * const repointer = newSViv(0);
3286 av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
3287 pmop->op_pmoffset = av_len(PL_regex_padav);
3288 PL_regex_pad = AvARRAY(PL_regex_padav);
3292 /* link into pm list */
3293 if (type != OP_TRANS && PL_curstash) {
3294 MAGIC *mg = mg_find((SV*)PL_curstash, PERL_MAGIC_symtab);
3297 mg = sv_magicext((SV*)PL_curstash, 0, PERL_MAGIC_symtab, 0, 0, 0);
3299 pmop->op_pmnext = (PMOP*)mg->mg_obj;
3300 mg->mg_obj = (SV*)pmop;
3301 PmopSTASH_set(pmop,PL_curstash);
3304 return CHECKOP(type, pmop);
3307 /* Given some sort of match op o, and an expression expr containing a
3308 * pattern, either compile expr into a regex and attach it to o (if it's
3309 * constant), or convert expr into a runtime regcomp op sequence (if it's
3312 * isreg indicates that the pattern is part of a regex construct, eg
3313 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3314 * split "pattern", which aren't. In the former case, expr will be a list
3315 * if the pattern contains more than one term (eg /a$b/) or if it contains
3316 * a replacement, ie s/// or tr///.
3320 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3325 I32 repl_has_vars = 0;
3329 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3330 /* last element in list is the replacement; pop it */
3332 repl = cLISTOPx(expr)->op_last;
3333 kid = cLISTOPx(expr)->op_first;
3334 while (kid->op_sibling != repl)
3335 kid = kid->op_sibling;
3336 kid->op_sibling = NULL;
3337 cLISTOPx(expr)->op_last = kid;
3340 if (isreg && expr->op_type == OP_LIST &&
3341 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3343 /* convert single element list to element */
3344 OP* const oe = expr;
3345 expr = cLISTOPx(oe)->op_first->op_sibling;
3346 cLISTOPx(oe)->op_first->op_sibling = NULL;
3347 cLISTOPx(oe)->op_last = NULL;
3351 if (o->op_type == OP_TRANS) {
3352 return pmtrans(o, expr, repl);
3355 reglist = isreg && expr->op_type == OP_LIST;
3359 PL_hints |= HINT_BLOCK_SCOPE;
3362 if (expr->op_type == OP_CONST) {
3364 SV * const pat = ((SVOP*)expr)->op_sv;
3365 const char *p = SvPV_const(pat, plen);
3366 if ((o->op_flags & OPf_SPECIAL) && (plen == 1 && *p == ' ')) {
3367 U32 was_readonly = SvREADONLY(pat);
3371 sv_force_normal_flags(pat, 0);
3372 assert(!SvREADONLY(pat));
3375 SvREADONLY_off(pat);
3379 sv_setpvn(pat, "\\s+", 3);
3381 SvFLAGS(pat) |= was_readonly;
3383 p = SvPV_const(pat, plen);
3384 pm->op_pmflags |= PMf_SKIPWHITE;
3387 pm->op_pmdynflags |= PMdf_UTF8;
3388 /* FIXME - can we make this function take const char * args? */
3389 PM_SETRE(pm, CALLREGCOMP((char*)p, (char*)p + plen, pm));
3390 if (PM_GETRE(pm)->extflags & RXf_WHITE)
3391 pm->op_pmflags |= PMf_WHITE;
3393 pm->op_pmflags &= ~PMf_WHITE;
3395 op_getmad(expr,(OP*)pm,'e');
3401 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3402 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3404 : OP_REGCMAYBE),0,expr);
3406 NewOp(1101, rcop, 1, LOGOP);
3407 rcop->op_type = OP_REGCOMP;
3408 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3409 rcop->op_first = scalar(expr);
3410 rcop->op_flags |= OPf_KIDS
3411 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3412 | (reglist ? OPf_STACKED : 0);
3413 rcop->op_private = 1;
3416 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3418 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3421 /* establish postfix order */
3422 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3424 rcop->op_next = expr;
3425 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3428 rcop->op_next = LINKLIST(expr);
3429 expr->op_next = (OP*)rcop;
3432 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3437 if (pm->op_pmflags & PMf_EVAL) {
3439 if (CopLINE(PL_curcop) < (line_t)PL_multi_end)
3440 CopLINE_set(PL_curcop, (line_t)PL_multi_end);
3442 else if (repl->op_type == OP_CONST)
3446 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3447 if (curop->op_type == OP_SCOPE
3448 || curop->op_type == OP_LEAVE
3449 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3450 if (curop->op_type == OP_GV) {
3451 GV * const gv = cGVOPx_gv(curop);
3453 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3456 else if (curop->op_type == OP_RV2CV)
3458 else if (curop->op_type == OP_RV2SV ||
3459 curop->op_type == OP_RV2AV ||
3460 curop->op_type == OP_RV2HV ||
3461 curop->op_type == OP_RV2GV) {
3462 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3465 else if (curop->op_type == OP_PADSV ||
3466 curop->op_type == OP_PADAV ||
3467 curop->op_type == OP_PADHV ||
3468 curop->op_type == OP_PADANY)
3472 else if (curop->op_type == OP_PUSHRE)
3473 NOOP; /* Okay here, dangerous in newASSIGNOP */
3483 || PM_GETRE(pm)->extflags & RXf_EVAL_SEEN)))
3485 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3486 pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
3487 prepend_elem(o->op_type, scalar(repl), o);
3490 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3491 pm->op_pmflags |= PMf_MAYBE_CONST;
3492 pm->op_pmpermflags |= PMf_MAYBE_CONST;
3494 NewOp(1101, rcop, 1, LOGOP);
3495 rcop->op_type = OP_SUBSTCONT;
3496 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3497 rcop->op_first = scalar(repl);
3498 rcop->op_flags |= OPf_KIDS;
3499 rcop->op_private = 1;
3502 /* establish postfix order */
3503 rcop->op_next = LINKLIST(repl);
3504 repl->op_next = (OP*)rcop;
3506 pm->op_pmreplroot = scalar((OP*)rcop);
3507 pm->op_pmreplstart = LINKLIST(rcop);
3516 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3520 NewOp(1101, svop, 1, SVOP);
3521 svop->op_type = (OPCODE)type;
3522 svop->op_ppaddr = PL_ppaddr[type];
3524 svop->op_next = (OP*)svop;
3525 svop->op_flags = (U8)flags;
3526 if (PL_opargs[type] & OA_RETSCALAR)
3528 if (PL_opargs[type] & OA_TARGET)
3529 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3530 return CHECKOP(type, svop);
3535 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3539 NewOp(1101, padop, 1, PADOP);
3540 padop->op_type = (OPCODE)type;
3541 padop->op_ppaddr = PL_ppaddr[type];
3542 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3543 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3544 PAD_SETSV(padop->op_padix, sv);
3547 padop->op_next = (OP*)padop;
3548 padop->op_flags = (U8)flags;
3549 if (PL_opargs[type] & OA_RETSCALAR)
3551 if (PL_opargs[type] & OA_TARGET)
3552 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3553 return CHECKOP(type, padop);
3558 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3564 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3566 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3571 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3575 NewOp(1101, pvop, 1, PVOP);
3576 pvop->op_type = (OPCODE)type;
3577 pvop->op_ppaddr = PL_ppaddr[type];
3579 pvop->op_next = (OP*)pvop;
3580 pvop->op_flags = (U8)flags;
3581 if (PL_opargs[type] & OA_RETSCALAR)
3583 if (PL_opargs[type] & OA_TARGET)
3584 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3585 return CHECKOP(type, pvop);
3593 Perl_package(pTHX_ OP *o)
3596 SV *const sv = cSVOPo->op_sv;
3601 save_hptr(&PL_curstash);
3602 save_item(PL_curstname);
3604 PL_curstash = gv_stashsv(sv, GV_ADD);
3605 sv_setsv(PL_curstname, sv);
3607 PL_hints |= HINT_BLOCK_SCOPE;
3608 PL_copline = NOLINE;
3614 if (!PL_madskills) {
3619 pegop = newOP(OP_NULL,0);
3620 op_getmad(o,pegop,'P');
3630 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3637 OP *pegop = newOP(OP_NULL,0);
3640 if (idop->op_type != OP_CONST)
3641 Perl_croak(aTHX_ "Module name must be constant");
3644 op_getmad(idop,pegop,'U');
3649 SV * const vesv = ((SVOP*)version)->op_sv;
3652 op_getmad(version,pegop,'V');
3653 if (!arg && !SvNIOKp(vesv)) {
3660 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3661 Perl_croak(aTHX_ "Version number must be constant number");
3663 /* Make copy of idop so we don't free it twice */
3664 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3666 /* Fake up a method call to VERSION */
3667 meth = newSVpvs_share("VERSION");
3668 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3669 append_elem(OP_LIST,
3670 prepend_elem(OP_LIST, pack, list(version)),
3671 newSVOP(OP_METHOD_NAMED, 0, meth)));
3675 /* Fake up an import/unimport */
3676 if (arg && arg->op_type == OP_STUB) {
3678 op_getmad(arg,pegop,'S');
3679 imop = arg; /* no import on explicit () */
3681 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3682 imop = NULL; /* use 5.0; */
3684 idop->op_private |= OPpCONST_NOVER;
3690 op_getmad(arg,pegop,'A');
3692 /* Make copy of idop so we don't free it twice */
3693 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3695 /* Fake up a method call to import/unimport */
3697 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3698 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3699 append_elem(OP_LIST,
3700 prepend_elem(OP_LIST, pack, list(arg)),
3701 newSVOP(OP_METHOD_NAMED, 0, meth)));
3704 /* Fake up the BEGIN {}, which does its thing immediately. */
3706 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3709 append_elem(OP_LINESEQ,
3710 append_elem(OP_LINESEQ,
3711 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3712 newSTATEOP(0, NULL, veop)),
3713 newSTATEOP(0, NULL, imop) ));
3715 /* The "did you use incorrect case?" warning used to be here.
3716 * The problem is that on case-insensitive filesystems one
3717 * might get false positives for "use" (and "require"):
3718 * "use Strict" or "require CARP" will work. This causes
3719 * portability problems for the script: in case-strict
3720 * filesystems the script will stop working.
3722 * The "incorrect case" warning checked whether "use Foo"
3723 * imported "Foo" to your namespace, but that is wrong, too:
3724 * there is no requirement nor promise in the language that
3725 * a Foo.pm should or would contain anything in package "Foo".
3727 * There is very little Configure-wise that can be done, either:
3728 * the case-sensitivity of the build filesystem of Perl does not
3729 * help in guessing the case-sensitivity of the runtime environment.
3732 PL_hints |= HINT_BLOCK_SCOPE;
3733 PL_copline = NOLINE;
3735 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3738 if (!PL_madskills) {
3739 /* FIXME - don't allocate pegop if !PL_madskills */
3748 =head1 Embedding Functions
3750 =for apidoc load_module
3752 Loads the module whose name is pointed to by the string part of name.
3753 Note that the actual module name, not its filename, should be given.
3754 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3755 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3756 (or 0 for no flags). ver, if specified, provides version semantics
3757 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3758 arguments can be used to specify arguments to the module's import()
3759 method, similar to C<use Foo::Bar VERSION LIST>.
3764 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3767 va_start(args, ver);
3768 vload_module(flags, name, ver, &args);
3772 #ifdef PERL_IMPLICIT_CONTEXT
3774 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3778 va_start(args, ver);
3779 vload_module(flags, name, ver, &args);
3785 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3790 OP * const modname = newSVOP(OP_CONST, 0, name);
3791 modname->op_private |= OPpCONST_BARE;
3793 veop = newSVOP(OP_CONST, 0, ver);
3797 if (flags & PERL_LOADMOD_NOIMPORT) {
3798 imop = sawparens(newNULLLIST());
3800 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3801 imop = va_arg(*args, OP*);
3806 sv = va_arg(*args, SV*);
3808 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3809 sv = va_arg(*args, SV*);
3813 const line_t ocopline = PL_copline;
3814 COP * const ocurcop = PL_curcop;
3815 const int oexpect = PL_expect;
3817 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3818 veop, modname, imop);
3819 PL_expect = oexpect;
3820 PL_copline = ocopline;
3821 PL_curcop = ocurcop;
3826 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3832 if (!force_builtin) {
3833 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3834 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3835 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3836 gv = gvp ? *gvp : NULL;
3840 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3841 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3842 append_elem(OP_LIST, term,
3843 scalar(newUNOP(OP_RV2CV, 0,
3844 newGVOP(OP_GV, 0, gv))))));
3847 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3853 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3855 return newBINOP(OP_LSLICE, flags,
3856 list(force_list(subscript)),
3857 list(force_list(listval)) );
3861 S_is_list_assignment(pTHX_ register const OP *o)
3869 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
3870 o = cUNOPo->op_first;
3872 flags = o->op_flags;
3874 if (type == OP_COND_EXPR) {
3875 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3876 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3881 yyerror("Assignment to both a list and a scalar");
3885 if (type == OP_LIST &&
3886 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
3887 o->op_private & OPpLVAL_INTRO)
3890 if (type == OP_LIST || flags & OPf_PARENS ||
3891 type == OP_RV2AV || type == OP_RV2HV ||
3892 type == OP_ASLICE || type == OP_HSLICE)
3895 if (type == OP_PADAV || type == OP_PADHV)
3898 if (type == OP_RV2SV)
3905 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3911 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3912 return newLOGOP(optype, 0,
3913 mod(scalar(left), optype),
3914 newUNOP(OP_SASSIGN, 0, scalar(right)));
3917 return newBINOP(optype, OPf_STACKED,
3918 mod(scalar(left), optype), scalar(right));
3922 if (is_list_assignment(left)) {
3926 /* Grandfathering $[ assignment here. Bletch.*/
3927 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3928 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3929 left = mod(left, OP_AASSIGN);
3932 else if (left->op_type == OP_CONST) {
3934 /* Result of assignment is always 1 (or we'd be dead already) */
3935 return newSVOP(OP_CONST, 0, newSViv(1));
3937 curop = list(force_list(left));
3938 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
3939 o->op_private = (U8)(0 | (flags >> 8));
3941 /* PL_generation sorcery:
3942 * an assignment like ($a,$b) = ($c,$d) is easier than
3943 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
3944 * To detect whether there are common vars, the global var
3945 * PL_generation is incremented for each assign op we compile.
3946 * Then, while compiling the assign op, we run through all the
3947 * variables on both sides of the assignment, setting a spare slot
3948 * in each of them to PL_generation. If any of them already have
3949 * that value, we know we've got commonality. We could use a
3950 * single bit marker, but then we'd have to make 2 passes, first
3951 * to clear the flag, then to test and set it. To find somewhere
3952 * to store these values, evil chicanery is done with SvUVX().
3958 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
3959 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
3960 if (curop->op_type == OP_GV) {
3961 GV *gv = cGVOPx_gv(curop);
3963 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3965 GvASSIGN_GENERATION_set(gv, PL_generation);
3967 else if (curop->op_type == OP_PADSV ||
3968 curop->op_type == OP_PADAV ||
3969 curop->op_type == OP_PADHV ||
3970 curop->op_type == OP_PADANY)
3972 if (PAD_COMPNAME_GEN(curop->op_targ)
3973 == (STRLEN)PL_generation)
3975 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
3978 else if (curop->op_type == OP_RV2CV)
3980 else if (curop->op_type == OP_RV2SV ||
3981 curop->op_type == OP_RV2AV ||
3982 curop->op_type == OP_RV2HV ||
3983 curop->op_type == OP_RV2GV) {
3984 if (lastop->op_type != OP_GV) /* funny deref? */
3987 else if (curop->op_type == OP_PUSHRE) {
3988 if (((PMOP*)curop)->op_pmreplroot) {
3990 GV *gv = (GV*)PAD_SVl(INT2PTR(PADOFFSET,
3991 ((PMOP*)curop)->op_pmreplroot));
3993 GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
3996 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
3998 GvASSIGN_GENERATION_set(gv, PL_generation);
3999 GvASSIGN_GENERATION_set(gv, PL_generation);
4008 o->op_private |= OPpASSIGN_COMMON;
4011 if ( ((left->op_private & OPpLVAL_INTRO) || ckWARN(WARN_MISC))
4012 && (left->op_type == OP_LIST
4013 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
4015 OP* lop = ((LISTOP*)left)->op_first;
4017 if (lop->op_type == OP_PADSV ||
4018 lop->op_type == OP_PADAV ||
4019 lop->op_type == OP_PADHV ||
4020 lop->op_type == OP_PADANY)
4022 if (lop->op_private & OPpPAD_STATE) {
4023 if (left->op_private & OPpLVAL_INTRO) {
4024 o->op_private |= OPpASSIGN_STATE;
4025 /* hijacking PADSTALE for uninitialized state variables */
4026 SvPADSTALE_on(PAD_SVl(lop->op_targ));
4028 else { /* we already checked for WARN_MISC before */
4029 Perl_warner(aTHX_ packWARN(WARN_MISC), "State variable %s will be reinitialized",
4030 PAD_COMPNAME_PV(lop->op_targ));
4034 lop = lop->op_sibling;
4037 else if (((left->op_private & (OPpLVAL_INTRO | OPpPAD_STATE))
4038 == (OPpLVAL_INTRO | OPpPAD_STATE))
4039 && ( left->op_type == OP_PADSV
4040 || left->op_type == OP_PADAV
4041 || left->op_type == OP_PADHV
4042 || left->op_type == OP_PADANY))
4044 o->op_private |= OPpASSIGN_STATE;
4045 /* hijacking PADSTALE for uninitialized state variables */
4046 SvPADSTALE_on(PAD_SVl(left->op_targ));
4049 if (right && right->op_type == OP_SPLIT) {
4050 OP* tmpop = ((LISTOP*)right)->op_first;
4051 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4052 PMOP * const pm = (PMOP*)tmpop;
4053 if (left->op_type == OP_RV2AV &&
4054 !(left->op_private & OPpLVAL_INTRO) &&
4055 !(o->op_private & OPpASSIGN_COMMON) )
4057 tmpop = ((UNOP*)left)->op_first;
4058 if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
4060 pm->op_pmreplroot = INT2PTR(OP*, cPADOPx(tmpop)->op_padix);
4061 cPADOPx(tmpop)->op_padix = 0; /* steal it */
4063 pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
4064 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
4066 pm->op_pmflags |= PMf_ONCE;
4067 tmpop = cUNOPo->op_first; /* to list (nulled) */
4068 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4069 tmpop->op_sibling = NULL; /* don't free split */
4070 right->op_next = tmpop->op_next; /* fix starting loc */
4072 op_getmad(o,right,'R'); /* blow off assign */
4074 op_free(o); /* blow off assign */
4076 right->op_flags &= ~OPf_WANT;
4077 /* "I don't know and I don't care." */
4082 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4083 ((LISTOP*)right)->op_last->op_type == OP_CONST)
4085 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4087 sv_setiv(sv, PL_modcount+1);
4095 right = newOP(OP_UNDEF, 0);
4096 if (right->op_type == OP_READLINE) {
4097 right->op_flags |= OPf_STACKED;
4098 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
4101 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
4102 o = newBINOP(OP_SASSIGN, flags,
4103 scalar(right), mod(scalar(left), OP_SASSIGN) );
4109 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4110 o->op_private |= OPpCONST_ARYBASE;
4117 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4120 const U32 seq = intro_my();
4123 NewOp(1101, cop, 1, COP);
4124 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4125 cop->op_type = OP_DBSTATE;
4126 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4129 cop->op_type = OP_NEXTSTATE;
4130 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4132 cop->op_flags = (U8)flags;
4133 CopHINTS_set(cop, PL_hints);
4135 cop->op_private |= NATIVE_HINTS;
4137 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4138 cop->op_next = (OP*)cop;
4141 CopLABEL_set(cop, label);
4142 PL_hints |= HINT_BLOCK_SCOPE;
4145 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4146 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4148 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4149 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4150 if (cop->cop_hints_hash) {
4152 cop->cop_hints_hash->refcounted_he_refcnt++;
4153 HINTS_REFCNT_UNLOCK;
4156 if (PL_copline == NOLINE)
4157 CopLINE_set(cop, CopLINE(PL_curcop));
4159 CopLINE_set(cop, PL_copline);
4160 PL_copline = NOLINE;
4163 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4165 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4167 CopSTASH_set(cop, PL_curstash);
4169 if (PERLDB_LINE && PL_curstash != PL_debstash) {
4170 AV *av = CopFILEAVx(PL_curcop);
4172 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4173 if (svp && *svp != &PL_sv_undef ) {
4174 (void)SvIOK_on(*svp);
4175 SvIV_set(*svp, PTR2IV(cop));
4180 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4185 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4188 return new_logop(type, flags, &first, &other);
4192 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4197 OP *first = *firstp;
4198 OP * const other = *otherp;
4200 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4201 return newBINOP(type, flags, scalar(first), scalar(other));
4203 scalarboolean(first);
4204 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
4205 if (first->op_type == OP_NOT
4206 && (first->op_flags & OPf_SPECIAL)
4207 && (first->op_flags & OPf_KIDS)) {
4208 if (type == OP_AND || type == OP_OR) {
4214 first = *firstp = cUNOPo->op_first;
4216 first->op_next = o->op_next;
4217 cUNOPo->op_first = NULL;
4219 op_getmad(o,first,'O');
4225 if (first->op_type == OP_CONST) {
4226 if (first->op_private & OPpCONST_STRICT)
4227 no_bareword_allowed(first);
4228 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
4229 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4230 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
4231 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
4232 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
4234 if (other->op_type == OP_CONST)
4235 other->op_private |= OPpCONST_SHORTCIRCUIT;
4237 OP *newop = newUNOP(OP_NULL, 0, other);
4238 op_getmad(first, newop, '1');
4239 newop->op_targ = type; /* set "was" field */
4246 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4247 const OP *o2 = other;
4248 if ( ! (o2->op_type == OP_LIST
4249 && (( o2 = cUNOPx(o2)->op_first))
4250 && o2->op_type == OP_PUSHMARK
4251 && (( o2 = o2->op_sibling)) )
4254 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4255 || o2->op_type == OP_PADHV)
4256 && o2->op_private & OPpLVAL_INTRO
4257 && ckWARN(WARN_DEPRECATED))
4259 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4260 "Deprecated use of my() in false conditional");
4264 if (first->op_type == OP_CONST)
4265 first->op_private |= OPpCONST_SHORTCIRCUIT;
4267 first = newUNOP(OP_NULL, 0, first);
4268 op_getmad(other, first, '2');
4269 first->op_targ = type; /* set "was" field */
4276 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4277 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4279 const OP * const k1 = ((UNOP*)first)->op_first;
4280 const OP * const k2 = k1->op_sibling;
4282 switch (first->op_type)
4285 if (k2 && k2->op_type == OP_READLINE
4286 && (k2->op_flags & OPf_STACKED)
4287 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4289 warnop = k2->op_type;
4294 if (k1->op_type == OP_READDIR
4295 || k1->op_type == OP_GLOB
4296 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4297 || k1->op_type == OP_EACH)
4299 warnop = ((k1->op_type == OP_NULL)
4300 ? (OPCODE)k1->op_targ : k1->op_type);
4305 const line_t oldline = CopLINE(PL_curcop);
4306 CopLINE_set(PL_curcop, PL_copline);
4307 Perl_warner(aTHX_ packWARN(WARN_MISC),
4308 "Value of %s%s can be \"0\"; test with defined()",
4310 ((warnop == OP_READLINE || warnop == OP_GLOB)
4311 ? " construct" : "() operator"));
4312 CopLINE_set(PL_curcop, oldline);
4319 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4320 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4322 NewOp(1101, logop, 1, LOGOP);
4324 logop->op_type = (OPCODE)type;
4325 logop->op_ppaddr = PL_ppaddr[type];
4326 logop->op_first = first;
4327 logop->op_flags = (U8)(flags | OPf_KIDS);
4328 logop->op_other = LINKLIST(other);
4329 logop->op_private = (U8)(1 | (flags >> 8));
4331 /* establish postfix order */
4332 logop->op_next = LINKLIST(first);
4333 first->op_next = (OP*)logop;
4334 first->op_sibling = other;
4336 CHECKOP(type,logop);
4338 o = newUNOP(OP_NULL, 0, (OP*)logop);
4345 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4353 return newLOGOP(OP_AND, 0, first, trueop);
4355 return newLOGOP(OP_OR, 0, first, falseop);
4357 scalarboolean(first);
4358 if (first->op_type == OP_CONST) {
4359 /* Left or right arm of the conditional? */
4360 const bool left = SvTRUE(((SVOP*)first)->op_sv);
4361 OP *live = left ? trueop : falseop;
4362 OP *const dead = left ? falseop : trueop;
4363 if (first->op_private & OPpCONST_BARE &&
4364 first->op_private & OPpCONST_STRICT) {
4365 no_bareword_allowed(first);
4368 /* This is all dead code when PERL_MAD is not defined. */
4369 live = newUNOP(OP_NULL, 0, live);
4370 op_getmad(first, live, 'C');
4371 op_getmad(dead, live, left ? 'e' : 't');
4378 NewOp(1101, logop, 1, LOGOP);
4379 logop->op_type = OP_COND_EXPR;
4380 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4381 logop->op_first = first;
4382 logop->op_flags = (U8)(flags | OPf_KIDS);
4383 logop->op_private = (U8)(1 | (flags >> 8));
4384 logop->op_other = LINKLIST(trueop);
4385 logop->op_next = LINKLIST(falseop);
4387 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4390 /* establish postfix order */
4391 start = LINKLIST(first);
4392 first->op_next = (OP*)logop;
4394 first->op_sibling = trueop;
4395 trueop->op_sibling = falseop;
4396 o = newUNOP(OP_NULL, 0, (OP*)logop);
4398 trueop->op_next = falseop->op_next = o;
4405 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4414 NewOp(1101, range, 1, LOGOP);
4416 range->op_type = OP_RANGE;
4417 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4418 range->op_first = left;
4419 range->op_flags = OPf_KIDS;
4420 leftstart = LINKLIST(left);
4421 range->op_other = LINKLIST(right);
4422 range->op_private = (U8)(1 | (flags >> 8));
4424 left->op_sibling = right;
4426 range->op_next = (OP*)range;
4427 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4428 flop = newUNOP(OP_FLOP, 0, flip);
4429 o = newUNOP(OP_NULL, 0, flop);
4431 range->op_next = leftstart;
4433 left->op_next = flip;
4434 right->op_next = flop;
4436 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4437 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4438 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4439 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4441 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4442 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4445 if (!flip->op_private || !flop->op_private)
4446 linklist(o); /* blow off optimizer unless constant */
4452 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4457 const bool once = block && block->op_flags & OPf_SPECIAL &&
4458 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4460 PERL_UNUSED_ARG(debuggable);
4463 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4464 return block; /* do {} while 0 does once */
4465 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4466 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4467 expr = newUNOP(OP_DEFINED, 0,
4468 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4469 } else if (expr->op_flags & OPf_KIDS) {
4470 const OP * const k1 = ((UNOP*)expr)->op_first;
4471 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4472 switch (expr->op_type) {
4474 if (k2 && k2->op_type == OP_READLINE
4475 && (k2->op_flags & OPf_STACKED)
4476 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4477 expr = newUNOP(OP_DEFINED, 0, expr);
4481 if (k1 && (k1->op_type == OP_READDIR
4482 || k1->op_type == OP_GLOB
4483 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4484 || k1->op_type == OP_EACH))
4485 expr = newUNOP(OP_DEFINED, 0, expr);
4491 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4492 * op, in listop. This is wrong. [perl #27024] */
4494 block = newOP(OP_NULL, 0);
4495 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4496 o = new_logop(OP_AND, 0, &expr, &listop);
4499 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4501 if (once && o != listop)
4502 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4505 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4507 o->op_flags |= flags;
4509 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4514 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4515 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4524 PERL_UNUSED_ARG(debuggable);
4527 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4528 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4529 expr = newUNOP(OP_DEFINED, 0,
4530 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4531 } else if (expr->op_flags & OPf_KIDS) {
4532 const OP * const k1 = ((UNOP*)expr)->op_first;
4533 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4534 switch (expr->op_type) {
4536 if (k2 && k2->op_type == OP_READLINE
4537 && (k2->op_flags & OPf_STACKED)
4538 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4539 expr = newUNOP(OP_DEFINED, 0, expr);
4543 if (k1 && (k1->op_type == OP_READDIR
4544 || k1->op_type == OP_GLOB
4545 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4546 || k1->op_type == OP_EACH))
4547 expr = newUNOP(OP_DEFINED, 0, expr);
4554 block = newOP(OP_NULL, 0);
4555 else if (cont || has_my) {
4556 block = scope(block);
4560 next = LINKLIST(cont);
4563 OP * const unstack = newOP(OP_UNSTACK, 0);
4566 cont = append_elem(OP_LINESEQ, cont, unstack);
4570 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4572 redo = LINKLIST(listop);
4575 PL_copline = (line_t)whileline;
4577 o = new_logop(OP_AND, 0, &expr, &listop);
4578 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4579 op_free(expr); /* oops, it's a while (0) */
4581 return NULL; /* listop already freed by new_logop */
4584 ((LISTOP*)listop)->op_last->op_next =
4585 (o == listop ? redo : LINKLIST(o));
4591 NewOp(1101,loop,1,LOOP);
4592 loop->op_type = OP_ENTERLOOP;
4593 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4594 loop->op_private = 0;
4595 loop->op_next = (OP*)loop;
4598 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
4600 loop->op_redoop = redo;
4601 loop->op_lastop = o;
4602 o->op_private |= loopflags;
4605 loop->op_nextop = next;
4607 loop->op_nextop = o;
4609 o->op_flags |= flags;
4610 o->op_private |= (flags >> 8);
4615 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
4620 PADOFFSET padoff = 0;
4626 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
4627 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
4628 sv->op_type = OP_RV2GV;
4629 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
4631 /* The op_type check is needed to prevent a possible segfault
4632 * if the loop variable is undeclared and 'strict vars' is in
4633 * effect. This is illegal but is nonetheless parsed, so we
4634 * may reach this point with an OP_CONST where we're expecting
4637 if (cUNOPx(sv)->op_first->op_type == OP_GV
4638 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
4639 iterpflags |= OPpITER_DEF;
4641 else if (sv->op_type == OP_PADSV) { /* private variable */
4642 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
4643 padoff = sv->op_targ;
4653 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
4655 SV *const namesv = PAD_COMPNAME_SV(padoff);
4657 const char *const name = SvPV_const(namesv, len);
4659 if (len == 2 && name[0] == '$' && name[1] == '_')
4660 iterpflags |= OPpITER_DEF;
4664 const PADOFFSET offset = pad_findmy("$_");
4665 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
4666 sv = newGVOP(OP_GV, 0, PL_defgv);
4671 iterpflags |= OPpITER_DEF;
4673 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
4674 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4675 iterflags |= OPf_STACKED;
4677 else if (expr->op_type == OP_NULL &&
4678 (expr->op_flags & OPf_KIDS) &&
4679 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4681 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4682 * set the STACKED flag to indicate that these values are to be
4683 * treated as min/max values by 'pp_iterinit'.
4685 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4686 LOGOP* const range = (LOGOP*) flip->op_first;
4687 OP* const left = range->op_first;
4688 OP* const right = left->op_sibling;
4691 range->op_flags &= ~OPf_KIDS;
4692 range->op_first = NULL;
4694 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4695 listop->op_first->op_next = range->op_next;
4696 left->op_next = range->op_other;
4697 right->op_next = (OP*)listop;
4698 listop->op_next = listop->op_first;
4701 op_getmad(expr,(OP*)listop,'O');
4705 expr = (OP*)(listop);
4707 iterflags |= OPf_STACKED;
4710 expr = mod(force_list(expr), OP_GREPSTART);
4713 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4714 append_elem(OP_LIST, expr, scalar(sv))));
4715 assert(!loop->op_next);
4716 /* for my $x () sets OPpLVAL_INTRO;
4717 * for our $x () sets OPpOUR_INTRO */
4718 loop->op_private = (U8)iterpflags;
4719 #ifdef PL_OP_SLAB_ALLOC
4722 NewOp(1234,tmp,1,LOOP);
4723 Copy(loop,tmp,1,LISTOP);
4724 S_op_destroy(aTHX_ (OP*)loop);
4728 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
4730 loop->op_targ = padoff;
4731 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4733 op_getmad(madsv, (OP*)loop, 'v');
4734 PL_copline = forline;
4735 return newSTATEOP(0, label, wop);
4739 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4744 if (type != OP_GOTO || label->op_type == OP_CONST) {
4745 /* "last()" means "last" */
4746 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4747 o = newOP(type, OPf_SPECIAL);
4749 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
4750 ? SvPVx_nolen_const(((SVOP*)label)->op_sv)
4754 op_getmad(label,o,'L');
4760 /* Check whether it's going to be a goto &function */
4761 if (label->op_type == OP_ENTERSUB
4762 && !(label->op_flags & OPf_STACKED))
4763 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4764 o = newUNOP(type, OPf_STACKED, label);
4766 PL_hints |= HINT_BLOCK_SCOPE;
4770 /* if the condition is a literal array or hash
4771 (or @{ ... } etc), make a reference to it.
4774 S_ref_array_or_hash(pTHX_ OP *cond)
4777 && (cond->op_type == OP_RV2AV
4778 || cond->op_type == OP_PADAV
4779 || cond->op_type == OP_RV2HV
4780 || cond->op_type == OP_PADHV))
4782 return newUNOP(OP_REFGEN,
4783 0, mod(cond, OP_REFGEN));
4789 /* These construct the optree fragments representing given()
4792 entergiven and enterwhen are LOGOPs; the op_other pointer
4793 points up to the associated leave op. We need this so we
4794 can put it in the context and make break/continue work.
4795 (Also, of course, pp_enterwhen will jump straight to
4796 op_other if the match fails.)
4801 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4802 I32 enter_opcode, I32 leave_opcode,
4803 PADOFFSET entertarg)
4809 NewOp(1101, enterop, 1, LOGOP);
4810 enterop->op_type = enter_opcode;
4811 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4812 enterop->op_flags = (U8) OPf_KIDS;
4813 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4814 enterop->op_private = 0;
4816 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4819 enterop->op_first = scalar(cond);
4820 cond->op_sibling = block;
4822 o->op_next = LINKLIST(cond);
4823 cond->op_next = (OP *) enterop;
4826 /* This is a default {} block */
4827 enterop->op_first = block;
4828 enterop->op_flags |= OPf_SPECIAL;
4830 o->op_next = (OP *) enterop;
4833 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4834 entergiven and enterwhen both
4837 enterop->op_next = LINKLIST(block);
4838 block->op_next = enterop->op_other = o;
4843 /* Does this look like a boolean operation? For these purposes
4844 a boolean operation is:
4845 - a subroutine call [*]
4846 - a logical connective
4847 - a comparison operator
4848 - a filetest operator, with the exception of -s -M -A -C
4849 - defined(), exists() or eof()
4850 - /$re/ or $foo =~ /$re/
4852 [*] possibly surprising
4856 S_looks_like_bool(pTHX_ const OP *o)
4859 switch(o->op_type) {
4861 return looks_like_bool(cLOGOPo->op_first);
4865 looks_like_bool(cLOGOPo->op_first)
4866 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4870 case OP_NOT: case OP_XOR:
4871 /* Note that OP_DOR is not here */
4873 case OP_EQ: case OP_NE: case OP_LT:
4874 case OP_GT: case OP_LE: case OP_GE:
4876 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4877 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4879 case OP_SEQ: case OP_SNE: case OP_SLT:
4880 case OP_SGT: case OP_SLE: case OP_SGE:
4884 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4885 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4886 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4887 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4888 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4889 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4890 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4891 case OP_FTTEXT: case OP_FTBINARY:
4893 case OP_DEFINED: case OP_EXISTS:
4894 case OP_MATCH: case OP_EOF:
4899 /* Detect comparisons that have been optimized away */
4900 if (cSVOPo->op_sv == &PL_sv_yes
4901 || cSVOPo->op_sv == &PL_sv_no)
4912 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4916 return newGIVWHENOP(
4917 ref_array_or_hash(cond),
4919 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4923 /* If cond is null, this is a default {} block */
4925 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4927 const bool cond_llb = (!cond || looks_like_bool(cond));
4933 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4935 scalar(ref_array_or_hash(cond)));
4938 return newGIVWHENOP(
4940 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4941 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
4945 =for apidoc cv_undef
4947 Clear out all the active components of a CV. This can happen either
4948 by an explicit C<undef &foo>, or by the reference count going to zero.
4949 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4950 children can still follow the full lexical scope chain.
4956 Perl_cv_undef(pTHX_ CV *cv)
4960 if (CvFILE(cv) && !CvISXSUB(cv)) {
4961 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4962 Safefree(CvFILE(cv));
4967 if (!CvISXSUB(cv) && CvROOT(cv)) {
4968 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
4969 Perl_croak(aTHX_ "Can't undef active subroutine");
4972 PAD_SAVE_SETNULLPAD();
4974 op_free(CvROOT(cv));
4979 SvPOK_off((SV*)cv); /* forget prototype */
4984 /* remove CvOUTSIDE unless this is an undef rather than a free */
4985 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
4986 if (!CvWEAKOUTSIDE(cv))
4987 SvREFCNT_dec(CvOUTSIDE(cv));
4988 CvOUTSIDE(cv) = NULL;
4991 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
4994 if (CvISXSUB(cv) && CvXSUB(cv)) {
4997 /* delete all flags except WEAKOUTSIDE */
4998 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
5002 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
5005 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
5006 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
5007 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
5008 || (p && (len != SvCUR(cv) /* Not the same length. */
5009 || memNE(p, SvPVX_const(cv), len))))
5010 && ckWARN_d(WARN_PROTOTYPE)) {
5011 SV* const msg = sv_newmortal();
5015 gv_efullname3(name = sv_newmortal(), gv, NULL);
5016 sv_setpvs(msg, "Prototype mismatch:");
5018 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
5020 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
5022 sv_catpvs(msg, ": none");
5023 sv_catpvs(msg, " vs ");
5025 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
5027 sv_catpvs(msg, "none");
5028 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
5032 static void const_sv_xsub(pTHX_ CV* cv);
5036 =head1 Optree Manipulation Functions
5038 =for apidoc cv_const_sv
5040 If C<cv> is a constant sub eligible for inlining. returns the constant
5041 value returned by the sub. Otherwise, returns NULL.
5043 Constant subs can be created with C<newCONSTSUB> or as described in
5044 L<perlsub/"Constant Functions">.
5049 Perl_cv_const_sv(pTHX_ CV *cv)
5051 PERL_UNUSED_CONTEXT;
5054 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
5056 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
5059 /* op_const_sv: examine an optree to determine whether it's in-lineable.
5060 * Can be called in 3 ways:
5063 * look for a single OP_CONST with attached value: return the value
5065 * cv && CvCLONE(cv) && !CvCONST(cv)
5067 * examine the clone prototype, and if contains only a single
5068 * OP_CONST referencing a pad const, or a single PADSV referencing
5069 * an outer lexical, return a non-zero value to indicate the CV is
5070 * a candidate for "constizing" at clone time
5074 * We have just cloned an anon prototype that was marked as a const
5075 * candidiate. Try to grab the current value, and in the case of
5076 * PADSV, ignore it if it has multiple references. Return the value.
5080 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
5088 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
5089 o = cLISTOPo->op_first->op_sibling;
5091 for (; o; o = o->op_next) {
5092 const OPCODE type = o->op_type;
5094 if (sv && o->op_next == o)
5096 if (o->op_next != o) {
5097 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
5099 if (type == OP_DBSTATE)
5102 if (type == OP_LEAVESUB || type == OP_RETURN)
5106 if (type == OP_CONST && cSVOPo->op_sv)
5108 else if (cv && type == OP_CONST) {
5109 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5113 else if (cv && type == OP_PADSV) {
5114 if (CvCONST(cv)) { /* newly cloned anon */
5115 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5116 /* the candidate should have 1 ref from this pad and 1 ref
5117 * from the parent */
5118 if (!sv || SvREFCNT(sv) != 2)
5125 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
5126 sv = &PL_sv_undef; /* an arbitrary non-null value */
5141 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5144 /* This would be the return value, but the return cannot be reached. */
5145 OP* pegop = newOP(OP_NULL, 0);
5148 PERL_UNUSED_ARG(floor);
5158 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
5160 NORETURN_FUNCTION_END;
5165 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
5167 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
5171 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5178 register CV *cv = NULL;
5180 /* If the subroutine has no body, no attributes, and no builtin attributes
5181 then it's just a sub declaration, and we may be able to get away with
5182 storing with a placeholder scalar in the symbol table, rather than a
5183 full GV and CV. If anything is present then it will take a full CV to
5185 const I32 gv_fetch_flags
5186 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5188 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
5189 const char * const name = o ? SvPVx_nolen_const(cSVOPo->op_sv) : NULL;
5192 assert(proto->op_type == OP_CONST);
5193 ps = SvPVx_const(((SVOP*)proto)->op_sv, ps_len);
5198 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
5199 SV * const sv = sv_newmortal();
5200 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
5201 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
5202 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
5203 aname = SvPVX_const(sv);
5208 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
5209 : gv_fetchpv(aname ? aname
5210 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5211 gv_fetch_flags, SVt_PVCV);
5213 if (!PL_madskills) {
5222 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
5223 maximum a prototype before. */
5224 if (SvTYPE(gv) > SVt_NULL) {
5225 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
5226 && ckWARN_d(WARN_PROTOTYPE))
5228 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
5230 cv_ckproto_len((CV*)gv, NULL, ps, ps_len);
5233 sv_setpvn((SV*)gv, ps, ps_len);
5235 sv_setiv((SV*)gv, -1);
5236 SvREFCNT_dec(PL_compcv);
5237 cv = PL_compcv = NULL;
5238 PL_sub_generation++;
5242 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
5244 #ifdef GV_UNIQUE_CHECK
5245 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
5246 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
5250 if (!block || !ps || *ps || attrs
5251 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5253 || block->op_type == OP_NULL
5258 const_sv = op_const_sv(block, NULL);
5261 const bool exists = CvROOT(cv) || CvXSUB(cv);
5263 #ifdef GV_UNIQUE_CHECK
5264 if (exists && GvUNIQUE(gv)) {
5265 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
5269 /* if the subroutine doesn't exist and wasn't pre-declared
5270 * with a prototype, assume it will be AUTOLOADed,
5271 * skipping the prototype check
5273 if (exists || SvPOK(cv))
5274 cv_ckproto_len(cv, gv, ps, ps_len);
5275 /* already defined (or promised)? */
5276 if (exists || GvASSUMECV(gv)) {
5279 || block->op_type == OP_NULL
5282 if (CvFLAGS(PL_compcv)) {
5283 /* might have had built-in attrs applied */
5284 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5286 /* just a "sub foo;" when &foo is already defined */
5287 SAVEFREESV(PL_compcv);
5292 && block->op_type != OP_NULL
5295 if (ckWARN(WARN_REDEFINE)
5297 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
5299 const line_t oldline = CopLINE(PL_curcop);
5300 if (PL_copline != NOLINE)
5301 CopLINE_set(PL_curcop, PL_copline);
5302 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5303 CvCONST(cv) ? "Constant subroutine %s redefined"
5304 : "Subroutine %s redefined", name);
5305 CopLINE_set(PL_curcop, oldline);
5308 if (!PL_minus_c) /* keep old one around for madskills */
5311 /* (PL_madskills unset in used file.) */
5319 SvREFCNT_inc_simple_void_NN(const_sv);
5321 assert(!CvROOT(cv) && !CvCONST(cv));
5322 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
5323 CvXSUBANY(cv).any_ptr = const_sv;
5324 CvXSUB(cv) = const_sv_xsub;
5330 cv = newCONSTSUB(NULL, name, const_sv);
5332 PL_sub_generation++;
5336 SvREFCNT_dec(PL_compcv);
5344 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
5345 * before we clobber PL_compcv.
5349 || block->op_type == OP_NULL
5353 /* Might have had built-in attributes applied -- propagate them. */
5354 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5355 if (CvGV(cv) && GvSTASH(CvGV(cv)))
5356 stash = GvSTASH(CvGV(cv));
5357 else if (CvSTASH(cv))
5358 stash = CvSTASH(cv);
5360 stash = PL_curstash;
5363 /* possibly about to re-define existing subr -- ignore old cv */
5364 rcv = (SV*)PL_compcv;
5365 if (name && GvSTASH(gv))
5366 stash = GvSTASH(gv);
5368 stash = PL_curstash;
5370 apply_attrs(stash, rcv, attrs, FALSE);
5372 if (cv) { /* must reuse cv if autoloaded */
5379 || block->op_type == OP_NULL) && !PL_madskills
5382 /* got here with just attrs -- work done, so bug out */
5383 SAVEFREESV(PL_compcv);
5386 /* transfer PL_compcv to cv */
5388 CvFLAGS(cv) = CvFLAGS(PL_compcv);
5389 if (!CvWEAKOUTSIDE(cv))
5390 SvREFCNT_dec(CvOUTSIDE(cv));
5391 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
5392 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
5393 CvOUTSIDE(PL_compcv) = 0;
5394 CvPADLIST(cv) = CvPADLIST(PL_compcv);
5395 CvPADLIST(PL_compcv) = 0;
5396 /* inner references to PL_compcv must be fixed up ... */
5397 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
5398 /* ... before we throw it away */
5399 SvREFCNT_dec(PL_compcv);
5401 if (PERLDB_INTER)/* Advice debugger on the new sub. */
5402 ++PL_sub_generation;
5409 if (strEQ(name, "import")) {
5410 PL_formfeed = (SV*)cv;
5411 Perl_warner(aTHX_ packWARN(WARN_VOID), "%lx\n", (long)cv);
5415 PL_sub_generation++;
5419 CvFILE_set_from_cop(cv, PL_curcop);
5420 CvSTASH(cv) = PL_curstash;
5423 sv_setpvn((SV*)cv, ps, ps_len);
5425 if (PL_error_count) {
5429 const char *s = strrchr(name, ':');
5431 if (strEQ(s, "BEGIN")) {
5432 const char not_safe[] =
5433 "BEGIN not safe after errors--compilation aborted";
5434 if (PL_in_eval & EVAL_KEEPERR)
5435 Perl_croak(aTHX_ not_safe);
5437 /* force display of errors found but not reported */
5438 sv_catpv(ERRSV, not_safe);
5439 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
5449 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5450 mod(scalarseq(block), OP_LEAVESUBLV));
5451 block->op_attached = 1;
5454 /* This makes sub {}; work as expected. */
5455 if (block->op_type == OP_STUB) {
5456 OP* const newblock = newSTATEOP(0, NULL, 0);
5458 op_getmad(block,newblock,'B');
5465 block->op_attached = 1;
5466 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5468 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5469 OpREFCNT_set(CvROOT(cv), 1);
5470 CvSTART(cv) = LINKLIST(CvROOT(cv));
5471 CvROOT(cv)->op_next = 0;
5472 CALL_PEEP(CvSTART(cv));
5474 /* now that optimizer has done its work, adjust pad values */
5476 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
5479 assert(!CvCONST(cv));
5480 if (ps && !*ps && op_const_sv(block, cv))
5484 if (name || aname) {
5485 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5486 SV * const sv = newSV(0);
5487 SV * const tmpstr = sv_newmortal();
5488 GV * const db_postponed = gv_fetchpvs("DB::postponed",
5489 GV_ADDMULTI, SVt_PVHV);
5492 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5494 (long)PL_subline, (long)CopLINE(PL_curcop));
5495 gv_efullname3(tmpstr, gv, NULL);
5496 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
5497 hv = GvHVn(db_postponed);
5498 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
5499 CV * const pcv = GvCV(db_postponed);
5505 call_sv((SV*)pcv, G_DISCARD);
5510 if (name && !PL_error_count)
5511 process_special_blocks(name, gv, cv);
5515 PL_copline = NOLINE;
5521 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
5524 const char *const colon = strrchr(fullname,':');
5525 const char *const name = colon ? colon + 1 : fullname;
5528 if (strEQ(name, "BEGIN")) {
5529 const I32 oldscope = PL_scopestack_ix;
5531 SAVECOPFILE(&PL_compiling);
5532 SAVECOPLINE(&PL_compiling);
5534 DEBUG_x( dump_sub(gv) );
5535 Perl_av_create_and_push(aTHX_ &PL_beginav, (SV*)cv);
5536 GvCV(gv) = 0; /* cv has been hijacked */
5537 call_list(oldscope, PL_beginav);
5539 PL_curcop = &PL_compiling;
5540 CopHINTS_set(&PL_compiling, PL_hints);
5547 if strEQ(name, "END") {
5548 DEBUG_x( dump_sub(gv) );
5549 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, (SV*)cv);
5552 } else if (*name == 'U') {
5553 if (strEQ(name, "UNITCHECK")) {
5554 /* It's never too late to run a unitcheck block */
5555 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, (SV*)cv);
5559 } else if (*name == 'C') {
5560 if (strEQ(name, "CHECK")) {
5561 if (PL_main_start && ckWARN(WARN_VOID))
5562 Perl_warner(aTHX_ packWARN(WARN_VOID),
5563 "Too late to run CHECK block");
5564 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, (SV*)cv);
5568 } else if (*name == 'I') {
5569 if (strEQ(name, "INIT")) {
5570 if (PL_main_start && ckWARN(WARN_VOID))
5571 Perl_warner(aTHX_ packWARN(WARN_VOID),
5572 "Too late to run INIT block");
5573 Perl_av_create_and_push(aTHX_ &PL_initav, (SV*)cv);
5579 DEBUG_x( dump_sub(gv) );
5580 GvCV(gv) = 0; /* cv has been hijacked */
5585 =for apidoc newCONSTSUB
5587 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
5588 eligible for inlining at compile-time.
5594 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
5599 const char *const temp_p = CopFILE(PL_curcop);
5600 const STRLEN len = temp_p ? strlen(temp_p) : 0;
5602 SV *const temp_sv = CopFILESV(PL_curcop);
5604 const char *const temp_p = temp_sv ? SvPV_const(temp_sv, len) : NULL;
5606 char *const file = savepvn(temp_p, temp_p ? len : 0);
5610 SAVECOPLINE(PL_curcop);
5611 CopLINE_set(PL_curcop, PL_copline);
5614 PL_hints &= ~HINT_BLOCK_SCOPE;
5617 SAVESPTR(PL_curstash);
5618 SAVECOPSTASH(PL_curcop);
5619 PL_curstash = stash;
5620 CopSTASH_set(PL_curcop,stash);
5623 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
5624 and so doesn't get free()d. (It's expected to be from the C pre-
5625 processor __FILE__ directive). But we need a dynamically allocated one,
5626 and we need it to get freed. */
5627 cv = newXS_flags(name, const_sv_xsub, file, "", XS_DYNAMIC_FILENAME);
5628 CvXSUBANY(cv).any_ptr = sv;
5634 CopSTASH_free(PL_curcop);
5642 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
5643 const char *const filename, const char *const proto,
5646 CV *cv = newXS(name, subaddr, filename);
5648 if (flags & XS_DYNAMIC_FILENAME) {
5649 /* We need to "make arrangements" (ie cheat) to ensure that the
5650 filename lasts as long as the PVCV we just created, but also doesn't
5652 STRLEN filename_len = strlen(filename);
5653 STRLEN proto_and_file_len = filename_len;
5654 char *proto_and_file;
5658 proto_len = strlen(proto);
5659 proto_and_file_len += proto_len;
5661 Newx(proto_and_file, proto_and_file_len + 1, char);
5662 Copy(proto, proto_and_file, proto_len, char);
5663 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
5666 proto_and_file = savepvn(filename, filename_len);
5669 /* This gets free()d. :-) */
5670 sv_usepvn_flags((SV*)cv, proto_and_file, proto_and_file_len,
5671 SV_HAS_TRAILING_NUL);
5673 /* This gives us the correct prototype, rather than one with the
5674 file name appended. */
5675 SvCUR_set(cv, proto_len);
5679 CvFILE(cv) = proto_and_file + proto_len;
5681 sv_setpv((SV *)cv, proto);
5687 =for apidoc U||newXS
5689 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
5690 static storage, as it is used directly as CvFILE(), without a copy being made.
5696 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
5699 GV * const gv = gv_fetchpv(name ? name :
5700 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5701 GV_ADDMULTI, SVt_PVCV);
5705 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
5707 if ((cv = (name ? GvCV(gv) : NULL))) {
5709 /* just a cached method */
5713 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
5714 /* already defined (or promised) */
5715 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
5716 if (ckWARN(WARN_REDEFINE)) {
5717 GV * const gvcv = CvGV(cv);
5719 HV * const stash = GvSTASH(gvcv);
5721 const char *redefined_name = HvNAME_get(stash);
5722 if ( strEQ(redefined_name,"autouse") ) {
5723 const line_t oldline = CopLINE(PL_curcop);
5724 if (PL_copline != NOLINE)
5725 CopLINE_set(PL_curcop, PL_copline);
5726 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5727 CvCONST(cv) ? "Constant subroutine %s redefined"
5728 : "Subroutine %s redefined"
5730 CopLINE_set(PL_curcop, oldline);
5740 if (cv) /* must reuse cv if autoloaded */
5743 cv = (CV*)newSV_type(SVt_PVCV);
5747 PL_sub_generation++;
5751 (void)gv_fetchfile(filename);
5752 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
5753 an external constant string */
5755 CvXSUB(cv) = subaddr;
5758 process_special_blocks(name, gv, cv);
5770 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
5775 OP* pegop = newOP(OP_NULL, 0);
5779 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
5780 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
5782 #ifdef GV_UNIQUE_CHECK
5784 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
5788 if ((cv = GvFORM(gv))) {
5789 if (ckWARN(WARN_REDEFINE)) {
5790 const line_t oldline = CopLINE(PL_curcop);
5791 if (PL_copline != NOLINE)
5792 CopLINE_set(PL_curcop, PL_copline);
5793 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5794 o ? "Format %"SVf" redefined"
5795 : "Format STDOUT redefined", SVfARG(cSVOPo->op_sv));
5796 CopLINE_set(PL_curcop, oldline);
5803 CvFILE_set_from_cop(cv, PL_curcop);
5806 pad_tidy(padtidy_FORMAT);
5807 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5808 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5809 OpREFCNT_set(CvROOT(cv), 1);
5810 CvSTART(cv) = LINKLIST(CvROOT(cv));
5811 CvROOT(cv)->op_next = 0;
5812 CALL_PEEP(CvSTART(cv));
5814 op_getmad(o,pegop,'n');
5815 op_getmad_weak(block, pegop, 'b');
5819 PL_copline = NOLINE;
5827 Perl_newANONLIST(pTHX_ OP *o)
5829 return convert(OP_ANONLIST, OPf_SPECIAL, o);
5833 Perl_newANONHASH(pTHX_ OP *o)
5835 return convert(OP_ANONHASH, OPf_SPECIAL, o);
5839 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5841 return newANONATTRSUB(floor, proto, NULL, block);
5845 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5847 return newUNOP(OP_REFGEN, 0,
5848 newSVOP(OP_ANONCODE, 0,
5849 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5853 Perl_oopsAV(pTHX_ OP *o)
5856 switch (o->op_type) {
5858 o->op_type = OP_PADAV;
5859 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5860 return ref(o, OP_RV2AV);
5863 o->op_type = OP_RV2AV;
5864 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5869 if (ckWARN_d(WARN_INTERNAL))
5870 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5877 Perl_oopsHV(pTHX_ OP *o)
5880 switch (o->op_type) {
5883 o->op_type = OP_PADHV;
5884 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5885 return ref(o, OP_RV2HV);
5889 o->op_type = OP_RV2HV;
5890 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
5895 if (ckWARN_d(WARN_INTERNAL))
5896 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
5903 Perl_newAVREF(pTHX_ OP *o)
5906 if (o->op_type == OP_PADANY) {
5907 o->op_type = OP_PADAV;
5908 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5911 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
5912 && ckWARN(WARN_DEPRECATED)) {
5913 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5914 "Using an array as a reference is deprecated");
5916 return newUNOP(OP_RV2AV, 0, scalar(o));
5920 Perl_newGVREF(pTHX_ I32 type, OP *o)
5922 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
5923 return newUNOP(OP_NULL, 0, o);
5924 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
5928 Perl_newHVREF(pTHX_ OP *o)
5931 if (o->op_type == OP_PADANY) {
5932 o->op_type = OP_PADHV;
5933 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5936 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
5937 && ckWARN(WARN_DEPRECATED)) {
5938 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5939 "Using a hash as a reference is deprecated");
5941 return newUNOP(OP_RV2HV, 0, scalar(o));
5945 Perl_newCVREF(pTHX_ I32 flags, OP *o)
5947 return newUNOP(OP_RV2CV, flags, scalar(o));
5951 Perl_newSVREF(pTHX_ OP *o)
5954 if (o->op_type == OP_PADANY) {
5955 o->op_type = OP_PADSV;
5956 o->op_ppaddr = PL_ppaddr[OP_PADSV];
5959 return newUNOP(OP_RV2SV, 0, scalar(o));
5962 /* Check routines. See the comments at the top of this file for details
5963 * on when these are called */
5966 Perl_ck_anoncode(pTHX_ OP *o)
5968 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
5970 cSVOPo->op_sv = NULL;
5975 Perl_ck_bitop(pTHX_ OP *o)
5978 #define OP_IS_NUMCOMPARE(op) \
5979 ((op) == OP_LT || (op) == OP_I_LT || \
5980 (op) == OP_GT || (op) == OP_I_GT || \
5981 (op) == OP_LE || (op) == OP_I_LE || \
5982 (op) == OP_GE || (op) == OP_I_GE || \
5983 (op) == OP_EQ || (op) == OP_I_EQ || \
5984 (op) == OP_NE || (op) == OP_I_NE || \
5985 (op) == OP_NCMP || (op) == OP_I_NCMP)
5986 o->op_private = (U8)(PL_hints & HINT_INTEGER);
5987 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
5988 && (o->op_type == OP_BIT_OR
5989 || o->op_type == OP_BIT_AND
5990 || o->op_type == OP_BIT_XOR))
5992 const OP * const left = cBINOPo->op_first;
5993 const OP * const right = left->op_sibling;
5994 if ((OP_IS_NUMCOMPARE(left->op_type) &&
5995 (left->op_flags & OPf_PARENS) == 0) ||
5996 (OP_IS_NUMCOMPARE(right->op_type) &&
5997 (right->op_flags & OPf_PARENS) == 0))
5998 if (ckWARN(WARN_PRECEDENCE))
5999 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
6000 "Possible precedence problem on bitwise %c operator",
6001 o->op_type == OP_BIT_OR ? '|'
6002 : o->op_type == OP_BIT_AND ? '&' : '^'
6009 Perl_ck_concat(pTHX_ OP *o)
6011 const OP * const kid = cUNOPo->op_first;
6012 PERL_UNUSED_CONTEXT;
6013 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
6014 !(kUNOP->op_first->op_flags & OPf_MOD))
6015 o->op_flags |= OPf_STACKED;
6020 Perl_ck_spair(pTHX_ OP *o)
6023 if (o->op_flags & OPf_KIDS) {
6026 const OPCODE type = o->op_type;
6027 o = modkids(ck_fun(o), type);
6028 kid = cUNOPo->op_first;
6029 newop = kUNOP->op_first->op_sibling;
6031 const OPCODE type = newop->op_type;
6032 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
6033 type == OP_PADAV || type == OP_PADHV ||
6034 type == OP_RV2AV || type == OP_RV2HV)
6038 op_getmad(kUNOP->op_first,newop,'K');
6040 op_free(kUNOP->op_first);
6042 kUNOP->op_first = newop;
6044 o->op_ppaddr = PL_ppaddr[++o->op_type];
6049 Perl_ck_delete(pTHX_ OP *o)
6053 if (o->op_flags & OPf_KIDS) {
6054 OP * const kid = cUNOPo->op_first;
6055 switch (kid->op_type) {
6057 o->op_flags |= OPf_SPECIAL;
6060 o->op_private |= OPpSLICE;
6063 o->op_flags |= OPf_SPECIAL;
6068 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
6077 Perl_ck_die(pTHX_ OP *o)
6080 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6086 Perl_ck_eof(pTHX_ OP *o)
6090 if (o->op_flags & OPf_KIDS) {
6091 if (cLISTOPo->op_first->op_type == OP_STUB) {
6093 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
6095 op_getmad(o,newop,'O');
6107 Perl_ck_eval(pTHX_ OP *o)
6110 PL_hints |= HINT_BLOCK_SCOPE;
6111 if (o->op_flags & OPf_KIDS) {
6112 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6115 o->op_flags &= ~OPf_KIDS;
6118 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
6124 cUNOPo->op_first = 0;
6129 NewOp(1101, enter, 1, LOGOP);
6130 enter->op_type = OP_ENTERTRY;
6131 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
6132 enter->op_private = 0;
6134 /* establish postfix order */
6135 enter->op_next = (OP*)enter;
6137 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
6138 o->op_type = OP_LEAVETRY;
6139 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
6140 enter->op_other = o;
6141 op_getmad(oldo,o,'O');
6155 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
6156 op_getmad(oldo,o,'O');
6158 o->op_targ = (PADOFFSET)PL_hints;
6159 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
6160 /* Store a copy of %^H that pp_entereval can pick up.
6161 OPf_SPECIAL flags the opcode as being for this purpose,
6162 so that it in turn will return a copy at every
6164 OP *hhop = newSVOP(OP_CONST, OPf_SPECIAL,
6165 (SV*)Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)));
6166 cUNOPo->op_first->op_sibling = hhop;
6167 o->op_private |= OPpEVAL_HAS_HH;
6173 Perl_ck_exit(pTHX_ OP *o)
6176 HV * const table = GvHV(PL_hintgv);
6178 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
6179 if (svp && *svp && SvTRUE(*svp))
6180 o->op_private |= OPpEXIT_VMSISH;
6182 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6188 Perl_ck_exec(pTHX_ OP *o)
6190 if (o->op_flags & OPf_STACKED) {
6193 kid = cUNOPo->op_first->op_sibling;
6194 if (kid->op_type == OP_RV2GV)
6203 Perl_ck_exists(pTHX_ OP *o)
6207 if (o->op_flags & OPf_KIDS) {
6208 OP * const kid = cUNOPo->op_first;
6209 if (kid->op_type == OP_ENTERSUB) {
6210 (void) ref(kid, o->op_type);
6211 if (kid->op_type != OP_RV2CV && !PL_error_count)
6212 Perl_croak(aTHX_ "%s argument is not a subroutine name",
6214 o->op_private |= OPpEXISTS_SUB;
6216 else if (kid->op_type == OP_AELEM)
6217 o->op_flags |= OPf_SPECIAL;
6218 else if (kid->op_type != OP_HELEM)
6219 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
6227 Perl_ck_rvconst(pTHX_ register OP *o)
6230 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6232 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6233 if (o->op_type == OP_RV2CV)
6234 o->op_private &= ~1;
6236 if (kid->op_type == OP_CONST) {
6239 SV * const kidsv = kid->op_sv;
6241 /* Is it a constant from cv_const_sv()? */
6242 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
6243 SV * const rsv = SvRV(kidsv);
6244 const svtype type = SvTYPE(rsv);
6245 const char *badtype = NULL;
6247 switch (o->op_type) {
6249 if (type > SVt_PVMG)
6250 badtype = "a SCALAR";
6253 if (type != SVt_PVAV)
6254 badtype = "an ARRAY";
6257 if (type != SVt_PVHV)
6261 if (type != SVt_PVCV)
6266 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
6269 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
6270 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
6271 /* If this is an access to a stash, disable "strict refs", because
6272 * stashes aren't auto-vivified at compile-time (unless we store
6273 * symbols in them), and we don't want to produce a run-time
6274 * stricture error when auto-vivifying the stash. */
6275 const char *s = SvPV_nolen(kidsv);
6276 const STRLEN l = SvCUR(kidsv);
6277 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
6278 o->op_private &= ~HINT_STRICT_REFS;
6280 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
6281 const char *badthing;
6282 switch (o->op_type) {
6284 badthing = "a SCALAR";
6287 badthing = "an ARRAY";
6290 badthing = "a HASH";
6298 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
6299 SVfARG(kidsv), badthing);
6302 * This is a little tricky. We only want to add the symbol if we
6303 * didn't add it in the lexer. Otherwise we get duplicate strict
6304 * warnings. But if we didn't add it in the lexer, we must at
6305 * least pretend like we wanted to add it even if it existed before,
6306 * or we get possible typo warnings. OPpCONST_ENTERED says
6307 * whether the lexer already added THIS instance of this symbol.
6309 iscv = (o->op_type == OP_RV2CV) * 2;
6311 gv = gv_fetchsv(kidsv,
6312 iscv | !(kid->op_private & OPpCONST_ENTERED),
6315 : o->op_type == OP_RV2SV
6317 : o->op_type == OP_RV2AV
6319 : o->op_type == OP_RV2HV
6322 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
6324 kid->op_type = OP_GV;
6325 SvREFCNT_dec(kid->op_sv);
6327 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
6328 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
6329 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
6331 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
6333 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
6335 kid->op_private = 0;
6336 kid->op_ppaddr = PL_ppaddr[OP_GV];
6343 Perl_ck_ftst(pTHX_ OP *o)
6346 const I32 type = o->op_type;
6348 if (o->op_flags & OPf_REF) {
6351 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
6352 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6353 const OPCODE kidtype = kid->op_type;
6355 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6356 OP * const newop = newGVOP(type, OPf_REF,
6357 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
6359 op_getmad(o,newop,'O');
6365 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o))
6366 o->op_private |= OPpFT_ACCESS;
6367 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
6368 && kidtype != OP_STAT && kidtype != OP_LSTAT)
6369 o->op_private |= OPpFT_STACKED;
6377 if (type == OP_FTTTY)
6378 o = newGVOP(type, OPf_REF, PL_stdingv);
6380 o = newUNOP(type, 0, newDEFSVOP());
6381 op_getmad(oldo,o,'O');
6387 Perl_ck_fun(pTHX_ OP *o)
6390 const int type = o->op_type;
6391 register I32 oa = PL_opargs[type] >> OASHIFT;
6393 if (o->op_flags & OPf_STACKED) {
6394 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
6397 return no_fh_allowed(o);
6400 if (o->op_flags & OPf_KIDS) {
6401 OP **tokid = &cLISTOPo->op_first;
6402 register OP *kid = cLISTOPo->op_first;
6406 if (kid->op_type == OP_PUSHMARK ||
6407 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
6409 tokid = &kid->op_sibling;
6410 kid = kid->op_sibling;
6412 if (!kid && PL_opargs[type] & OA_DEFGV)
6413 *tokid = kid = newDEFSVOP();
6417 sibl = kid->op_sibling;
6419 if (!sibl && kid->op_type == OP_STUB) {
6426 /* list seen where single (scalar) arg expected? */
6427 if (numargs == 1 && !(oa >> 4)
6428 && kid->op_type == OP_LIST && type != OP_SCALAR)
6430 return too_many_arguments(o,PL_op_desc[type]);
6443 if ((type == OP_PUSH || type == OP_UNSHIFT)
6444 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
6445 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6446 "Useless use of %s with no values",
6449 if (kid->op_type == OP_CONST &&
6450 (kid->op_private & OPpCONST_BARE))
6452 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
6453 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
6454 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6455 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6456 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
6457 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6459 op_getmad(kid,newop,'K');
6464 kid->op_sibling = sibl;
6467 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
6468 bad_type(numargs, "array", PL_op_desc[type], kid);
6472 if (kid->op_type == OP_CONST &&
6473 (kid->op_private & OPpCONST_BARE))
6475 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
6476 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
6477 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6478 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6479 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
6480 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6482 op_getmad(kid,newop,'K');
6487 kid->op_sibling = sibl;
6490 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6491 bad_type(numargs, "hash", PL_op_desc[type], kid);
6496 OP * const newop = newUNOP(OP_NULL, 0, kid);
6497 kid->op_sibling = 0;
6499 newop->op_next = newop;
6501 kid->op_sibling = sibl;
6506 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6507 if (kid->op_type == OP_CONST &&
6508 (kid->op_private & OPpCONST_BARE))
6510 OP * const newop = newGVOP(OP_GV, 0,
6511 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
6512 if (!(o->op_private & 1) && /* if not unop */
6513 kid == cLISTOPo->op_last)
6514 cLISTOPo->op_last = newop;
6516 op_getmad(kid,newop,'K');
6522 else if (kid->op_type == OP_READLINE) {
6523 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6524 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
6527 I32 flags = OPf_SPECIAL;
6531 /* is this op a FH constructor? */
6532 if (is_handle_constructor(o,numargs)) {
6533 const char *name = NULL;
6537 /* Set a flag to tell rv2gv to vivify
6538 * need to "prove" flag does not mean something
6539 * else already - NI-S 1999/05/07
6542 if (kid->op_type == OP_PADSV) {
6544 = PAD_COMPNAME_SV(kid->op_targ);
6545 name = SvPV_const(namesv, len);
6547 else if (kid->op_type == OP_RV2SV
6548 && kUNOP->op_first->op_type == OP_GV)
6550 GV * const gv = cGVOPx_gv(kUNOP->op_first);
6552 len = GvNAMELEN(gv);
6554 else if (kid->op_type == OP_AELEM
6555 || kid->op_type == OP_HELEM)
6558 OP *op = ((BINOP*)kid)->op_first;
6562 const char * const a =
6563 kid->op_type == OP_AELEM ?
6565 if (((op->op_type == OP_RV2AV) ||
6566 (op->op_type == OP_RV2HV)) &&
6567 (firstop = ((UNOP*)op)->op_first) &&
6568 (firstop->op_type == OP_GV)) {
6569 /* packagevar $a[] or $h{} */
6570 GV * const gv = cGVOPx_gv(firstop);
6578 else if (op->op_type == OP_PADAV
6579 || op->op_type == OP_PADHV) {
6580 /* lexicalvar $a[] or $h{} */
6581 const char * const padname =
6582 PAD_COMPNAME_PV(op->op_targ);
6591 name = SvPV_const(tmpstr, len);
6596 name = "__ANONIO__";
6603 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
6604 namesv = PAD_SVl(targ);
6605 SvUPGRADE(namesv, SVt_PV);
6607 sv_setpvn(namesv, "$", 1);
6608 sv_catpvn(namesv, name, len);
6611 kid->op_sibling = 0;
6612 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
6613 kid->op_targ = targ;
6614 kid->op_private |= priv;
6616 kid->op_sibling = sibl;
6622 mod(scalar(kid), type);
6626 tokid = &kid->op_sibling;
6627 kid = kid->op_sibling;
6630 if (kid && kid->op_type != OP_STUB)
6631 return too_many_arguments(o,OP_DESC(o));
6632 o->op_private |= numargs;
6634 /* FIXME - should the numargs move as for the PERL_MAD case? */
6635 o->op_private |= numargs;
6637 return too_many_arguments(o,OP_DESC(o));
6641 else if (PL_opargs[type] & OA_DEFGV) {
6643 OP *newop = newUNOP(type, 0, newDEFSVOP());
6644 op_getmad(o,newop,'O');
6647 /* Ordering of these two is important to keep f_map.t passing. */
6649 return newUNOP(type, 0, newDEFSVOP());
6654 while (oa & OA_OPTIONAL)
6656 if (oa && oa != OA_LIST)
6657 return too_few_arguments(o,OP_DESC(o));
6663 Perl_ck_glob(pTHX_ OP *o)
6669 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
6670 append_elem(OP_GLOB, o, newDEFSVOP());
6672 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
6673 && GvCVu(gv) && GvIMPORTED_CV(gv)))
6675 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6678 #if !defined(PERL_EXTERNAL_GLOB)
6679 /* XXX this can be tightened up and made more failsafe. */
6680 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6683 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
6684 newSVpvs("File::Glob"), NULL, NULL, NULL);
6685 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6686 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
6687 GvCV(gv) = GvCV(glob_gv);
6688 SvREFCNT_inc_void((SV*)GvCV(gv));
6689 GvIMPORTED_CV_on(gv);
6692 #endif /* PERL_EXTERNAL_GLOB */
6694 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6695 append_elem(OP_GLOB, o,
6696 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
6697 o->op_type = OP_LIST;
6698 o->op_ppaddr = PL_ppaddr[OP_LIST];
6699 cLISTOPo->op_first->op_type = OP_PUSHMARK;
6700 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
6701 cLISTOPo->op_first->op_targ = 0;
6702 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
6703 append_elem(OP_LIST, o,
6704 scalar(newUNOP(OP_RV2CV, 0,
6705 newGVOP(OP_GV, 0, gv)))));
6706 o = newUNOP(OP_NULL, 0, ck_subr(o));
6707 o->op_targ = OP_GLOB; /* hint at what it used to be */
6710 gv = newGVgen("main");
6712 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
6718 Perl_ck_grep(pTHX_ OP *o)
6723 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
6726 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
6727 /* don't allocate gwop here, as we may leak it if PL_error_count > 0 */
6729 if (o->op_flags & OPf_STACKED) {
6732 kid = cLISTOPo->op_first->op_sibling;
6733 if (!cUNOPx(kid)->op_next)
6734 Perl_croak(aTHX_ "panic: ck_grep");
6735 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
6738 NewOp(1101, gwop, 1, LOGOP);
6739 kid->op_next = (OP*)gwop;
6740 o->op_flags &= ~OPf_STACKED;
6742 kid = cLISTOPo->op_first->op_sibling;
6743 if (type == OP_MAPWHILE)
6750 kid = cLISTOPo->op_first->op_sibling;
6751 if (kid->op_type != OP_NULL)
6752 Perl_croak(aTHX_ "panic: ck_grep");
6753 kid = kUNOP->op_first;
6756 NewOp(1101, gwop, 1, LOGOP);
6757 gwop->op_type = type;
6758 gwop->op_ppaddr = PL_ppaddr[type];
6759 gwop->op_first = listkids(o);
6760 gwop->op_flags |= OPf_KIDS;
6761 gwop->op_other = LINKLIST(kid);
6762 kid->op_next = (OP*)gwop;
6763 offset = pad_findmy("$_");
6764 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
6765 o->op_private = gwop->op_private = 0;
6766 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
6769 o->op_private = gwop->op_private = OPpGREP_LEX;
6770 gwop->op_targ = o->op_targ = offset;
6773 kid = cLISTOPo->op_first->op_sibling;
6774 if (!kid || !kid->op_sibling)
6775 return too_few_arguments(o,OP_DESC(o));
6776 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
6777 mod(kid, OP_GREPSTART);
6783 Perl_ck_index(pTHX_ OP *o)
6785 if (o->op_flags & OPf_KIDS) {
6786 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6788 kid = kid->op_sibling; /* get past "big" */
6789 if (kid && kid->op_type == OP_CONST)
6790 fbm_compile(((SVOP*)kid)->op_sv, 0);
6796 Perl_ck_lengthconst(pTHX_ OP *o)
6798 /* XXX length optimization goes here */
6803 Perl_ck_lfun(pTHX_ OP *o)
6805 const OPCODE type = o->op_type;
6806 return modkids(ck_fun(o), type);
6810 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
6812 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
6813 switch (cUNOPo->op_first->op_type) {
6815 /* This is needed for
6816 if (defined %stash::)
6817 to work. Do not break Tk.
6819 break; /* Globals via GV can be undef */
6821 case OP_AASSIGN: /* Is this a good idea? */
6822 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6823 "defined(@array) is deprecated");
6824 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6825 "\t(Maybe you should just omit the defined()?)\n");
6828 /* This is needed for
6829 if (defined %stash::)
6830 to work. Do not break Tk.
6832 break; /* Globals via GV can be undef */
6834 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6835 "defined(%%hash) is deprecated");
6836 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6837 "\t(Maybe you should just omit the defined()?)\n");
6848 Perl_ck_readline(pTHX_ OP *o)
6850 if (!(o->op_flags & OPf_KIDS)) {
6852 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
6854 op_getmad(o,newop,'O');
6864 Perl_ck_rfun(pTHX_ OP *o)
6866 const OPCODE type = o->op_type;
6867 return refkids(ck_fun(o), type);
6871 Perl_ck_listiob(pTHX_ OP *o)
6875 kid = cLISTOPo->op_first;
6878 kid = cLISTOPo->op_first;
6880 if (kid->op_type == OP_PUSHMARK)
6881 kid = kid->op_sibling;
6882 if (kid && o->op_flags & OPf_STACKED)
6883 kid = kid->op_sibling;
6884 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6885 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6886 o->op_flags |= OPf_STACKED; /* make it a filehandle */
6887 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
6888 cLISTOPo->op_first->op_sibling = kid;
6889 cLISTOPo->op_last = kid;
6890 kid = kid->op_sibling;
6895 append_elem(o->op_type, o, newDEFSVOP());
6901 Perl_ck_smartmatch(pTHX_ OP *o)
6904 if (0 == (o->op_flags & OPf_SPECIAL)) {
6905 OP *first = cBINOPo->op_first;
6906 OP *second = first->op_sibling;
6908 /* Implicitly take a reference to an array or hash */
6909 first->op_sibling = NULL;
6910 first = cBINOPo->op_first = ref_array_or_hash(first);
6911 second = first->op_sibling = ref_array_or_hash(second);
6913 /* Implicitly take a reference to a regular expression */
6914 if (first->op_type == OP_MATCH) {
6915 first->op_type = OP_QR;
6916 first->op_ppaddr = PL_ppaddr[OP_QR];
6918 if (second->op_type == OP_MATCH) {
6919 second->op_type = OP_QR;
6920 second->op_ppaddr = PL_ppaddr[OP_QR];
6929 Perl_ck_sassign(pTHX_ OP *o)
6931 OP * const kid = cLISTOPo->op_first;
6932 /* has a disposable target? */
6933 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
6934 && !(kid->op_flags & OPf_STACKED)
6935 /* Cannot steal the second time! */
6936 && !(kid->op_private & OPpTARGET_MY))
6938 OP * const kkid = kid->op_sibling;
6940 /* Can just relocate the target. */
6941 if (kkid && kkid->op_type == OP_PADSV
6942 && !(kkid->op_private & OPpLVAL_INTRO))
6944 kid->op_targ = kkid->op_targ;
6946 /* Now we do not need PADSV and SASSIGN. */
6947 kid->op_sibling = o->op_sibling; /* NULL */
6948 cLISTOPo->op_first = NULL;
6950 op_getmad(o,kid,'O');
6951 op_getmad(kkid,kid,'M');
6956 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
6960 if (kid->op_sibling) {
6961 OP *kkid = kid->op_sibling;
6962 if (kkid->op_type == OP_PADSV
6963 && (kkid->op_private & OPpLVAL_INTRO)
6964 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
6965 o->op_private |= OPpASSIGN_STATE;
6966 /* hijacking PADSTALE for uninitialized state variables */
6967 SvPADSTALE_on(PAD_SVl(kkid->op_targ));
6974 Perl_ck_match(pTHX_ OP *o)
6977 if (o->op_type != OP_QR && PL_compcv) {
6978 const PADOFFSET offset = pad_findmy("$_");
6979 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
6980 o->op_targ = offset;
6981 o->op_private |= OPpTARGET_MY;
6984 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
6985 o->op_private |= OPpRUNTIME;
6990 Perl_ck_method(pTHX_ OP *o)
6992 OP * const kid = cUNOPo->op_first;
6993 if (kid->op_type == OP_CONST) {
6994 SV* sv = kSVOP->op_sv;
6995 const char * const method = SvPVX_const(sv);
6996 if (!(strchr(method, ':') || strchr(method, '\''))) {
6998 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
6999 sv = newSVpvn_share(method, SvCUR(sv), 0);
7002 kSVOP->op_sv = NULL;
7004 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
7006 op_getmad(o,cmop,'O');
7017 Perl_ck_null(pTHX_ OP *o)
7019 PERL_UNUSED_CONTEXT;
7024 Perl_ck_open(pTHX_ OP *o)
7027 HV * const table = GvHV(PL_hintgv);
7029 SV **svp = hv_fetchs(table, "open_IN", FALSE);
7031 const I32 mode = mode_from_discipline(*svp);
7032 if (mode & O_BINARY)
7033 o->op_private |= OPpOPEN_IN_RAW;
7034 else if (mode & O_TEXT)
7035 o->op_private |= OPpOPEN_IN_CRLF;
7038 svp = hv_fetchs(table, "open_OUT", FALSE);
7040 const I32 mode = mode_from_discipline(*svp);
7041 if (mode & O_BINARY)
7042 o->op_private |= OPpOPEN_OUT_RAW;
7043 else if (mode & O_TEXT)
7044 o->op_private |= OPpOPEN_OUT_CRLF;
7047 if (o->op_type == OP_BACKTICK) {
7048 if (!(o->op_flags & OPf_KIDS)) {
7049 OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
7051 op_getmad(o,newop,'O');
7060 /* In case of three-arg dup open remove strictness
7061 * from the last arg if it is a bareword. */
7062 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
7063 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
7067 if ((last->op_type == OP_CONST) && /* The bareword. */
7068 (last->op_private & OPpCONST_BARE) &&
7069 (last->op_private & OPpCONST_STRICT) &&
7070 (oa = first->op_sibling) && /* The fh. */
7071 (oa = oa->op_sibling) && /* The mode. */
7072 (oa->op_type == OP_CONST) &&
7073 SvPOK(((SVOP*)oa)->op_sv) &&
7074 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
7075 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
7076 (last == oa->op_sibling)) /* The bareword. */
7077 last->op_private &= ~OPpCONST_STRICT;
7083 Perl_ck_repeat(pTHX_ OP *o)
7085 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
7086 o->op_private |= OPpREPEAT_DOLIST;
7087 cBINOPo->op_first = force_list(cBINOPo->op_first);
7095 Perl_ck_require(pTHX_ OP *o)
7100 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
7101 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7103 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7104 SV * const sv = kid->op_sv;
7105 U32 was_readonly = SvREADONLY(sv);
7110 sv_force_normal_flags(sv, 0);
7111 assert(!SvREADONLY(sv));
7118 for (s = SvPVX(sv); *s; s++) {
7119 if (*s == ':' && s[1] == ':') {
7120 const STRLEN len = strlen(s+2)+1;
7122 Move(s+2, s+1, len, char);
7123 SvCUR_set(sv, SvCUR(sv) - 1);
7126 sv_catpvs(sv, ".pm");
7127 SvFLAGS(sv) |= was_readonly;
7131 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
7132 /* handle override, if any */
7133 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
7134 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7135 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
7136 gv = gvp ? *gvp : NULL;
7140 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7141 OP * const kid = cUNOPo->op_first;
7144 cUNOPo->op_first = 0;
7148 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
7149 append_elem(OP_LIST, kid,
7150 scalar(newUNOP(OP_RV2CV, 0,
7153 op_getmad(o,newop,'O');
7161 Perl_ck_return(pTHX_ OP *o)
7164 if (CvLVALUE(PL_compcv)) {
7166 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
7167 mod(kid, OP_LEAVESUBLV);
7173 Perl_ck_select(pTHX_ OP *o)
7177 if (o->op_flags & OPf_KIDS) {
7178 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7179 if (kid && kid->op_sibling) {
7180 o->op_type = OP_SSELECT;
7181 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
7183 return fold_constants(o);
7187 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7188 if (kid && kid->op_type == OP_RV2GV)
7189 kid->op_private &= ~HINT_STRICT_REFS;
7194 Perl_ck_shift(pTHX_ OP *o)
7197 const I32 type = o->op_type;
7199 if (!(o->op_flags & OPf_KIDS)) {
7201 /* FIXME - this can be refactored to reduce code in #ifdefs */
7203 OP * const oldo = o;
7207 argop = newUNOP(OP_RV2AV, 0,
7208 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
7210 o = newUNOP(type, 0, scalar(argop));
7211 op_getmad(oldo,o,'O');
7214 return newUNOP(type, 0, scalar(argop));
7217 return scalar(modkids(ck_fun(o), type));
7221 Perl_ck_sort(pTHX_ OP *o)
7226 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
7227 HV * const hinthv = GvHV(PL_hintgv);
7229 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
7231 const I32 sorthints = (I32)SvIV(*svp);
7232 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
7233 o->op_private |= OPpSORT_QSORT;
7234 if ((sorthints & HINT_SORT_STABLE) != 0)
7235 o->op_private |= OPpSORT_STABLE;
7240 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
7242 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7243 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
7245 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
7247 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
7249 if (kid->op_type == OP_SCOPE) {
7253 else if (kid->op_type == OP_LEAVE) {
7254 if (o->op_type == OP_SORT) {
7255 op_null(kid); /* wipe out leave */
7258 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
7259 if (k->op_next == kid)
7261 /* don't descend into loops */
7262 else if (k->op_type == OP_ENTERLOOP
7263 || k->op_type == OP_ENTERITER)
7265 k = cLOOPx(k)->op_lastop;
7270 kid->op_next = 0; /* just disconnect the leave */
7271 k = kLISTOP->op_first;
7276 if (o->op_type == OP_SORT) {
7277 /* provide scalar context for comparison function/block */
7283 o->op_flags |= OPf_SPECIAL;
7285 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
7288 firstkid = firstkid->op_sibling;
7291 /* provide list context for arguments */
7292 if (o->op_type == OP_SORT)
7299 S_simplify_sort(pTHX_ OP *o)
7302 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7307 if (!(o->op_flags & OPf_STACKED))
7309 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
7310 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
7311 kid = kUNOP->op_first; /* get past null */
7312 if (kid->op_type != OP_SCOPE)
7314 kid = kLISTOP->op_last; /* get past scope */
7315 switch(kid->op_type) {
7323 k = kid; /* remember this node*/
7324 if (kBINOP->op_first->op_type != OP_RV2SV)
7326 kid = kBINOP->op_first; /* get past cmp */
7327 if (kUNOP->op_first->op_type != OP_GV)
7329 kid = kUNOP->op_first; /* get past rv2sv */
7331 if (GvSTASH(gv) != PL_curstash)
7333 gvname = GvNAME(gv);
7334 if (*gvname == 'a' && gvname[1] == '\0')
7336 else if (*gvname == 'b' && gvname[1] == '\0')
7341 kid = k; /* back to cmp */
7342 if (kBINOP->op_last->op_type != OP_RV2SV)
7344 kid = kBINOP->op_last; /* down to 2nd arg */
7345 if (kUNOP->op_first->op_type != OP_GV)
7347 kid = kUNOP->op_first; /* get past rv2sv */
7349 if (GvSTASH(gv) != PL_curstash)
7351 gvname = GvNAME(gv);
7353 ? !(*gvname == 'a' && gvname[1] == '\0')
7354 : !(*gvname == 'b' && gvname[1] == '\0'))
7356 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
7358 o->op_private |= OPpSORT_DESCEND;
7359 if (k->op_type == OP_NCMP)
7360 o->op_private |= OPpSORT_NUMERIC;
7361 if (k->op_type == OP_I_NCMP)
7362 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
7363 kid = cLISTOPo->op_first->op_sibling;
7364 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
7366 op_getmad(kid,o,'S'); /* then delete it */
7368 op_free(kid); /* then delete it */
7373 Perl_ck_split(pTHX_ OP *o)
7378 if (o->op_flags & OPf_STACKED)
7379 return no_fh_allowed(o);
7381 kid = cLISTOPo->op_first;
7382 if (kid->op_type != OP_NULL)
7383 Perl_croak(aTHX_ "panic: ck_split");
7384 kid = kid->op_sibling;
7385 op_free(cLISTOPo->op_first);
7386 cLISTOPo->op_first = kid;
7388 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
7389 cLISTOPo->op_last = kid; /* There was only one element previously */
7392 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
7393 OP * const sibl = kid->op_sibling;
7394 kid->op_sibling = 0;
7395 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
7396 if (cLISTOPo->op_first == cLISTOPo->op_last)
7397 cLISTOPo->op_last = kid;
7398 cLISTOPo->op_first = kid;
7399 kid->op_sibling = sibl;
7402 kid->op_type = OP_PUSHRE;
7403 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
7405 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
7406 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
7407 "Use of /g modifier is meaningless in split");
7410 if (!kid->op_sibling)
7411 append_elem(OP_SPLIT, o, newDEFSVOP());
7413 kid = kid->op_sibling;
7416 if (!kid->op_sibling)
7417 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
7418 assert(kid->op_sibling);
7420 kid = kid->op_sibling;
7423 if (kid->op_sibling)
7424 return too_many_arguments(o,OP_DESC(o));
7430 Perl_ck_join(pTHX_ OP *o)
7432 const OP * const kid = cLISTOPo->op_first->op_sibling;
7433 if (kid && kid->op_type == OP_MATCH) {
7434 if (ckWARN(WARN_SYNTAX)) {
7435 const REGEXP *re = PM_GETRE(kPMOP);
7436 const char *pmstr = re ? re->precomp : "STRING";
7437 const STRLEN len = re ? re->prelen : 6;
7438 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7439 "/%.*s/ should probably be written as \"%.*s\"",
7440 (int)len, pmstr, (int)len, pmstr);
7447 Perl_ck_subr(pTHX_ OP *o)
7450 OP *prev = ((cUNOPo->op_first->op_sibling)
7451 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
7452 OP *o2 = prev->op_sibling;
7454 const char *proto = NULL;
7455 const char *proto_end = NULL;
7460 I32 contextclass = 0;
7461 const char *e = NULL;
7464 o->op_private |= OPpENTERSUB_HASTARG;
7465 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
7466 if (cvop->op_type == OP_RV2CV) {
7468 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
7469 op_null(cvop); /* disable rv2cv */
7470 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
7471 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
7472 GV *gv = cGVOPx_gv(tmpop);
7475 tmpop->op_private |= OPpEARLY_CV;
7479 namegv = CvANON(cv) ? gv : CvGV(cv);
7480 proto = SvPV((SV*)cv, len);
7481 proto_end = proto + len;
7483 if (CvASSERTION(cv)) {
7484 U32 asserthints = 0;
7485 HV *const hinthv = GvHV(PL_hintgv);
7487 SV **svp = hv_fetchs(hinthv, "assertions", FALSE);
7489 asserthints = SvUV(*svp);
7491 if (asserthints & HINT_ASSERTING) {
7492 if (PERLDB_ASSERTION && PL_curstash != PL_debstash)
7493 o->op_private |= OPpENTERSUB_DB;
7497 if (!(asserthints & HINT_ASSERTIONSSEEN) && ckWARN(WARN_ASSERTIONS)) {
7498 Perl_warner(aTHX_ packWARN(WARN_ASSERTIONS),
7499 "Impossible to activate assertion call");
7506 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
7507 if (o2->op_type == OP_CONST)
7508 o2->op_private &= ~OPpCONST_STRICT;
7509 else if (o2->op_type == OP_LIST) {
7510 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
7511 if (sib && sib->op_type == OP_CONST)
7512 sib->op_private &= ~OPpCONST_STRICT;
7515 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7516 if (PERLDB_SUB && PL_curstash != PL_debstash)
7517 o->op_private |= OPpENTERSUB_DB;
7518 while (o2 != cvop) {
7520 if (PL_madskills && o2->op_type == OP_NULL)
7521 o3 = ((UNOP*)o2)->op_first;
7525 if (proto >= proto_end)
7526 return too_many_arguments(o, gv_ename(namegv));
7534 /* _ must be at the end */
7535 if (proto[1] && proto[1] != ';')
7550 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
7552 arg == 1 ? "block or sub {}" : "sub {}",
7553 gv_ename(namegv), o3);
7556 /* '*' allows any scalar type, including bareword */
7559 if (o3->op_type == OP_RV2GV)
7560 goto wrapref; /* autoconvert GLOB -> GLOBref */
7561 else if (o3->op_type == OP_CONST)
7562 o3->op_private &= ~OPpCONST_STRICT;
7563 else if (o3->op_type == OP_ENTERSUB) {
7564 /* accidental subroutine, revert to bareword */
7565 OP *gvop = ((UNOP*)o3)->op_first;
7566 if (gvop && gvop->op_type == OP_NULL) {
7567 gvop = ((UNOP*)gvop)->op_first;
7569 for (; gvop->op_sibling; gvop = gvop->op_sibling)
7572 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
7573 (gvop = ((UNOP*)gvop)->op_first) &&
7574 gvop->op_type == OP_GV)
7576 GV * const gv = cGVOPx_gv(gvop);
7577 OP * const sibling = o2->op_sibling;
7578 SV * const n = newSVpvs("");
7580 OP * const oldo2 = o2;
7584 gv_fullname4(n, gv, "", FALSE);
7585 o2 = newSVOP(OP_CONST, 0, n);
7586 op_getmad(oldo2,o2,'O');
7587 prev->op_sibling = o2;
7588 o2->op_sibling = sibling;
7604 if (contextclass++ == 0) {
7605 e = strchr(proto, ']');
7606 if (!e || e == proto)
7615 const char *p = proto;
7616 const char *const end = proto;
7618 while (*--p != '[');
7619 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
7621 gv_ename(namegv), o3);
7626 if (o3->op_type == OP_RV2GV)
7629 bad_type(arg, "symbol", gv_ename(namegv), o3);
7632 if (o3->op_type == OP_ENTERSUB)
7635 bad_type(arg, "subroutine entry", gv_ename(namegv),
7639 if (o3->op_type == OP_RV2SV ||
7640 o3->op_type == OP_PADSV ||
7641 o3->op_type == OP_HELEM ||
7642 o3->op_type == OP_AELEM)
7645 bad_type(arg, "scalar", gv_ename(namegv), o3);
7648 if (o3->op_type == OP_RV2AV ||
7649 o3->op_type == OP_PADAV)
7652 bad_type(arg, "array", gv_ename(namegv), o3);
7655 if (o3->op_type == OP_RV2HV ||
7656 o3->op_type == OP_PADHV)
7659 bad_type(arg, "hash", gv_ename(namegv), o3);
7664 OP* const sib = kid->op_sibling;
7665 kid->op_sibling = 0;
7666 o2 = newUNOP(OP_REFGEN, 0, kid);
7667 o2->op_sibling = sib;
7668 prev->op_sibling = o2;
7670 if (contextclass && e) {
7685 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
7686 gv_ename(namegv), SVfARG(cv));
7691 mod(o2, OP_ENTERSUB);
7693 o2 = o2->op_sibling;
7695 if (o2 == cvop && proto && *proto == '_') {
7696 /* generate an access to $_ */
7698 o2->op_sibling = prev->op_sibling;
7699 prev->op_sibling = o2; /* instead of cvop */
7701 if (proto && !optional && proto_end > proto &&
7702 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
7703 return too_few_arguments(o, gv_ename(namegv));
7706 OP * const oldo = o;
7710 o=newSVOP(OP_CONST, 0, newSViv(0));
7711 op_getmad(oldo,o,'O');
7717 Perl_ck_svconst(pTHX_ OP *o)
7719 PERL_UNUSED_CONTEXT;
7720 SvREADONLY_on(cSVOPo->op_sv);
7725 Perl_ck_chdir(pTHX_ OP *o)
7727 if (o->op_flags & OPf_KIDS) {
7728 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7730 if (kid && kid->op_type == OP_CONST &&
7731 (kid->op_private & OPpCONST_BARE))
7733 o->op_flags |= OPf_SPECIAL;
7734 kid->op_private &= ~OPpCONST_STRICT;
7741 Perl_ck_trunc(pTHX_ OP *o)
7743 if (o->op_flags & OPf_KIDS) {
7744 SVOP *kid = (SVOP*)cUNOPo->op_first;
7746 if (kid->op_type == OP_NULL)
7747 kid = (SVOP*)kid->op_sibling;
7748 if (kid && kid->op_type == OP_CONST &&
7749 (kid->op_private & OPpCONST_BARE))
7751 o->op_flags |= OPf_SPECIAL;
7752 kid->op_private &= ~OPpCONST_STRICT;
7759 Perl_ck_unpack(pTHX_ OP *o)
7761 OP *kid = cLISTOPo->op_first;
7762 if (kid->op_sibling) {
7763 kid = kid->op_sibling;
7764 if (!kid->op_sibling)
7765 kid->op_sibling = newDEFSVOP();
7771 Perl_ck_substr(pTHX_ OP *o)
7774 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
7775 OP *kid = cLISTOPo->op_first;
7777 if (kid->op_type == OP_NULL)
7778 kid = kid->op_sibling;
7780 kid->op_flags |= OPf_MOD;
7786 /* A peephole optimizer. We visit the ops in the order they're to execute.
7787 * See the comments at the top of this file for more details about when
7788 * peep() is called */
7791 Perl_peep(pTHX_ register OP *o)
7794 register OP* oldop = NULL;
7796 if (!o || o->op_opt)
7800 SAVEVPTR(PL_curcop);
7801 for (; o; o = o->op_next) {
7805 switch (o->op_type) {
7809 PL_curcop = ((COP*)o); /* for warnings */
7814 if (cSVOPo->op_private & OPpCONST_STRICT)
7815 no_bareword_allowed(o);
7817 case OP_METHOD_NAMED:
7818 /* Relocate sv to the pad for thread safety.
7819 * Despite being a "constant", the SV is written to,
7820 * for reference counts, sv_upgrade() etc. */
7822 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
7823 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
7824 /* If op_sv is already a PADTMP then it is being used by
7825 * some pad, so make a copy. */
7826 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
7827 SvREADONLY_on(PAD_SVl(ix));
7828 SvREFCNT_dec(cSVOPo->op_sv);
7830 else if (o->op_type == OP_CONST
7831 && cSVOPo->op_sv == &PL_sv_undef) {
7832 /* PL_sv_undef is hack - it's unsafe to store it in the
7833 AV that is the pad, because av_fetch treats values of
7834 PL_sv_undef as a "free" AV entry and will merrily
7835 replace them with a new SV, causing pad_alloc to think
7836 that this pad slot is free. (When, clearly, it is not)
7838 SvOK_off(PAD_SVl(ix));
7839 SvPADTMP_on(PAD_SVl(ix));
7840 SvREADONLY_on(PAD_SVl(ix));
7843 SvREFCNT_dec(PAD_SVl(ix));
7844 SvPADTMP_on(cSVOPo->op_sv);
7845 PAD_SETSV(ix, cSVOPo->op_sv);
7846 /* XXX I don't know how this isn't readonly already. */
7847 SvREADONLY_on(PAD_SVl(ix));
7849 cSVOPo->op_sv = NULL;
7857 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
7858 if (o->op_next->op_private & OPpTARGET_MY) {
7859 if (o->op_flags & OPf_STACKED) /* chained concats */
7860 goto ignore_optimization;
7862 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
7863 o->op_targ = o->op_next->op_targ;
7864 o->op_next->op_targ = 0;
7865 o->op_private |= OPpTARGET_MY;
7868 op_null(o->op_next);
7870 ignore_optimization:
7874 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
7876 break; /* Scalar stub must produce undef. List stub is noop */
7880 if (o->op_targ == OP_NEXTSTATE
7881 || o->op_targ == OP_DBSTATE
7882 || o->op_targ == OP_SETSTATE)
7884 PL_curcop = ((COP*)o);
7886 /* XXX: We avoid setting op_seq here to prevent later calls
7887 to peep() from mistakenly concluding that optimisation
7888 has already occurred. This doesn't fix the real problem,
7889 though (See 20010220.007). AMS 20010719 */
7890 /* op_seq functionality is now replaced by op_opt */
7891 if (oldop && o->op_next) {
7892 oldop->op_next = o->op_next;
7900 if (oldop && o->op_next) {
7901 oldop->op_next = o->op_next;
7909 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
7910 OP* const pop = (o->op_type == OP_PADAV) ?
7911 o->op_next : o->op_next->op_next;
7913 if (pop && pop->op_type == OP_CONST &&
7914 ((PL_op = pop->op_next)) &&
7915 pop->op_next->op_type == OP_AELEM &&
7916 !(pop->op_next->op_private &
7917 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
7918 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
7923 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
7924 no_bareword_allowed(pop);
7925 if (o->op_type == OP_GV)
7926 op_null(o->op_next);
7927 op_null(pop->op_next);
7929 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
7930 o->op_next = pop->op_next->op_next;
7931 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
7932 o->op_private = (U8)i;
7933 if (o->op_type == OP_GV) {
7938 o->op_flags |= OPf_SPECIAL;
7939 o->op_type = OP_AELEMFAST;
7945 if (o->op_next->op_type == OP_RV2SV) {
7946 if (!(o->op_next->op_private & OPpDEREF)) {
7947 op_null(o->op_next);
7948 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
7950 o->op_next = o->op_next->op_next;
7951 o->op_type = OP_GVSV;
7952 o->op_ppaddr = PL_ppaddr[OP_GVSV];
7955 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
7956 GV * const gv = cGVOPo_gv;
7957 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
7958 /* XXX could check prototype here instead of just carping */
7959 SV * const sv = sv_newmortal();
7960 gv_efullname3(sv, gv, NULL);
7961 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
7962 "%"SVf"() called too early to check prototype",
7966 else if (o->op_next->op_type == OP_READLINE
7967 && o->op_next->op_next->op_type == OP_CONCAT
7968 && (o->op_next->op_next->op_flags & OPf_STACKED))
7970 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
7971 o->op_type = OP_RCATLINE;
7972 o->op_flags |= OPf_STACKED;
7973 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
7974 op_null(o->op_next->op_next);
7975 op_null(o->op_next);
7992 while (cLOGOP->op_other->op_type == OP_NULL)
7993 cLOGOP->op_other = cLOGOP->op_other->op_next;
7994 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
8000 while (cLOOP->op_redoop->op_type == OP_NULL)
8001 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
8002 peep(cLOOP->op_redoop);
8003 while (cLOOP->op_nextop->op_type == OP_NULL)
8004 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
8005 peep(cLOOP->op_nextop);
8006 while (cLOOP->op_lastop->op_type == OP_NULL)
8007 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
8008 peep(cLOOP->op_lastop);
8015 while (cPMOP->op_pmreplstart &&
8016 cPMOP->op_pmreplstart->op_type == OP_NULL)
8017 cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
8018 peep(cPMOP->op_pmreplstart);
8023 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
8024 && ckWARN(WARN_SYNTAX))
8026 if (o->op_next->op_sibling) {
8027 const OPCODE type = o->op_next->op_sibling->op_type;
8028 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
8029 const line_t oldline = CopLINE(PL_curcop);
8030 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
8031 Perl_warner(aTHX_ packWARN(WARN_EXEC),
8032 "Statement unlikely to be reached");
8033 Perl_warner(aTHX_ packWARN(WARN_EXEC),
8034 "\t(Maybe you meant system() when you said exec()?)\n");
8035 CopLINE_set(PL_curcop, oldline);
8046 const char *key = NULL;
8051 if (((BINOP*)o)->op_last->op_type != OP_CONST)
8054 /* Make the CONST have a shared SV */
8055 svp = cSVOPx_svp(((BINOP*)o)->op_last);
8056 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
8057 key = SvPV_const(sv, keylen);
8058 lexname = newSVpvn_share(key,
8059 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
8065 if ((o->op_private & (OPpLVAL_INTRO)))
8068 rop = (UNOP*)((BINOP*)o)->op_first;
8069 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
8071 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
8072 if (!SvPAD_TYPED(lexname))
8074 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8075 if (!fields || !GvHV(*fields))
8077 key = SvPV_const(*svp, keylen);
8078 if (!hv_fetch(GvHV(*fields), key,
8079 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8081 Perl_croak(aTHX_ "No such class field \"%s\" "
8082 "in variable %s of type %s",
8083 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
8096 SVOP *first_key_op, *key_op;
8098 if ((o->op_private & (OPpLVAL_INTRO))
8099 /* I bet there's always a pushmark... */
8100 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
8101 /* hmmm, no optimization if list contains only one key. */
8103 rop = (UNOP*)((LISTOP*)o)->op_last;
8104 if (rop->op_type != OP_RV2HV)
8106 if (rop->op_first->op_type == OP_PADSV)
8107 /* @$hash{qw(keys here)} */
8108 rop = (UNOP*)rop->op_first;
8110 /* @{$hash}{qw(keys here)} */
8111 if (rop->op_first->op_type == OP_SCOPE
8112 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
8114 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
8120 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
8121 if (!SvPAD_TYPED(lexname))
8123 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8124 if (!fields || !GvHV(*fields))
8126 /* Again guessing that the pushmark can be jumped over.... */
8127 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
8128 ->op_first->op_sibling;
8129 for (key_op = first_key_op; key_op;
8130 key_op = (SVOP*)key_op->op_sibling) {
8131 if (key_op->op_type != OP_CONST)
8133 svp = cSVOPx_svp(key_op);
8134 key = SvPV_const(*svp, keylen);
8135 if (!hv_fetch(GvHV(*fields), key,
8136 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8138 Perl_croak(aTHX_ "No such class field \"%s\" "
8139 "in variable %s of type %s",
8140 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
8147 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
8151 /* check that RHS of sort is a single plain array */
8152 OP *oright = cUNOPo->op_first;
8153 if (!oright || oright->op_type != OP_PUSHMARK)
8156 /* reverse sort ... can be optimised. */
8157 if (!cUNOPo->op_sibling) {
8158 /* Nothing follows us on the list. */
8159 OP * const reverse = o->op_next;
8161 if (reverse->op_type == OP_REVERSE &&
8162 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
8163 OP * const pushmark = cUNOPx(reverse)->op_first;
8164 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
8165 && (cUNOPx(pushmark)->op_sibling == o)) {
8166 /* reverse -> pushmark -> sort */
8167 o->op_private |= OPpSORT_REVERSE;
8169 pushmark->op_next = oright->op_next;
8175 /* make @a = sort @a act in-place */
8179 oright = cUNOPx(oright)->op_sibling;
8182 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
8183 oright = cUNOPx(oright)->op_sibling;
8187 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
8188 || oright->op_next != o
8189 || (oright->op_private & OPpLVAL_INTRO)
8193 /* o2 follows the chain of op_nexts through the LHS of the
8194 * assign (if any) to the aassign op itself */
8196 if (!o2 || o2->op_type != OP_NULL)
8199 if (!o2 || o2->op_type != OP_PUSHMARK)
8202 if (o2 && o2->op_type == OP_GV)
8205 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8206 || (o2->op_private & OPpLVAL_INTRO)
8211 if (!o2 || o2->op_type != OP_NULL)
8214 if (!o2 || o2->op_type != OP_AASSIGN
8215 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8218 /* check that the sort is the first arg on RHS of assign */
8220 o2 = cUNOPx(o2)->op_first;
8221 if (!o2 || o2->op_type != OP_NULL)
8223 o2 = cUNOPx(o2)->op_first;
8224 if (!o2 || o2->op_type != OP_PUSHMARK)
8226 if (o2->op_sibling != o)
8229 /* check the array is the same on both sides */
8230 if (oleft->op_type == OP_RV2AV) {
8231 if (oright->op_type != OP_RV2AV
8232 || !cUNOPx(oright)->op_first
8233 || cUNOPx(oright)->op_first->op_type != OP_GV
8234 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8235 cGVOPx_gv(cUNOPx(oright)->op_first)
8239 else if (oright->op_type != OP_PADAV
8240 || oright->op_targ != oleft->op_targ
8244 /* transfer MODishness etc from LHS arg to RHS arg */
8245 oright->op_flags = oleft->op_flags;
8246 o->op_private |= OPpSORT_INPLACE;
8248 /* excise push->gv->rv2av->null->aassign */
8249 o2 = o->op_next->op_next;
8250 op_null(o2); /* PUSHMARK */
8252 if (o2->op_type == OP_GV) {
8253 op_null(o2); /* GV */
8256 op_null(o2); /* RV2AV or PADAV */
8257 o2 = o2->op_next->op_next;
8258 op_null(o2); /* AASSIGN */
8260 o->op_next = o2->op_next;
8266 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
8268 LISTOP *enter, *exlist;
8271 enter = (LISTOP *) o->op_next;
8274 if (enter->op_type == OP_NULL) {
8275 enter = (LISTOP *) enter->op_next;
8279 /* for $a (...) will have OP_GV then OP_RV2GV here.
8280 for (...) just has an OP_GV. */
8281 if (enter->op_type == OP_GV) {
8282 gvop = (OP *) enter;
8283 enter = (LISTOP *) enter->op_next;
8286 if (enter->op_type == OP_RV2GV) {
8287 enter = (LISTOP *) enter->op_next;
8293 if (enter->op_type != OP_ENTERITER)
8296 iter = enter->op_next;
8297 if (!iter || iter->op_type != OP_ITER)
8300 expushmark = enter->op_first;
8301 if (!expushmark || expushmark->op_type != OP_NULL
8302 || expushmark->op_targ != OP_PUSHMARK)
8305 exlist = (LISTOP *) expushmark->op_sibling;
8306 if (!exlist || exlist->op_type != OP_NULL
8307 || exlist->op_targ != OP_LIST)
8310 if (exlist->op_last != o) {
8311 /* Mmm. Was expecting to point back to this op. */
8314 theirmark = exlist->op_first;
8315 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
8318 if (theirmark->op_sibling != o) {
8319 /* There's something between the mark and the reverse, eg
8320 for (1, reverse (...))
8325 ourmark = ((LISTOP *)o)->op_first;
8326 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
8329 ourlast = ((LISTOP *)o)->op_last;
8330 if (!ourlast || ourlast->op_next != o)
8333 rv2av = ourmark->op_sibling;
8334 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
8335 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
8336 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
8337 /* We're just reversing a single array. */
8338 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
8339 enter->op_flags |= OPf_STACKED;
8342 /* We don't have control over who points to theirmark, so sacrifice
8344 theirmark->op_next = ourmark->op_next;
8345 theirmark->op_flags = ourmark->op_flags;
8346 ourlast->op_next = gvop ? gvop : (OP *) enter;
8349 enter->op_private |= OPpITER_REVERSED;
8350 iter->op_private |= OPpITER_REVERSED;
8357 UNOP *refgen, *rv2cv;
8360 /* I do not understand this, but if o->op_opt isn't set to 1,
8361 various tests in ext/B/t/bytecode.t fail with no readily
8367 if ((o->op_flags && OPf_WANT) != OPf_WANT_VOID)
8370 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
8373 rv2gv = ((BINOP *)o)->op_last;
8374 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
8377 refgen = (UNOP *)((BINOP *)o)->op_first;
8379 if (!refgen || refgen->op_type != OP_REFGEN)
8382 exlist = (LISTOP *)refgen->op_first;
8383 if (!exlist || exlist->op_type != OP_NULL
8384 || exlist->op_targ != OP_LIST)
8387 if (exlist->op_first->op_type != OP_PUSHMARK)
8390 rv2cv = (UNOP*)exlist->op_last;
8392 if (rv2cv->op_type != OP_RV2CV)
8395 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
8396 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
8397 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
8399 o->op_private |= OPpASSIGN_CV_TO_GV;
8400 rv2gv->op_private |= OPpDONT_INIT_GV;
8401 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
8417 Perl_custom_op_name(pTHX_ const OP* o)
8420 const IV index = PTR2IV(o->op_ppaddr);
8424 if (!PL_custom_op_names) /* This probably shouldn't happen */
8425 return (char *)PL_op_name[OP_CUSTOM];
8427 keysv = sv_2mortal(newSViv(index));
8429 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
8431 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
8433 return SvPV_nolen(HeVAL(he));
8437 Perl_custom_op_desc(pTHX_ const OP* o)
8440 const IV index = PTR2IV(o->op_ppaddr);
8444 if (!PL_custom_op_descs)
8445 return (char *)PL_op_desc[OP_CUSTOM];
8447 keysv = sv_2mortal(newSViv(index));
8449 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
8451 return (char *)PL_op_desc[OP_CUSTOM];
8453 return SvPV_nolen(HeVAL(he));
8458 /* Efficient sub that returns a constant scalar value. */
8460 const_sv_xsub(pTHX_ CV* cv)
8467 Perl_croak(aTHX_ "usage: %s::%s()",
8468 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
8472 ST(0) = (SV*)XSANY.any_ptr;
8478 * c-indentation-style: bsd
8480 * indent-tabs-mode: t
8483 * ex: set ts=8 sts=4 sw=4 noet: