3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
13 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
14 * youngest of the Old Took's daughters); and Mr. Drogo was his second
15 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
16 * either way, as the saying is, if you follow me." --the Gaffer
19 /* This file contains the functions that create, manipulate and optimize
20 * the OP structures that hold a compiled perl program.
22 * A Perl program is compiled into a tree of OPs. Each op contains
23 * structural pointers (eg to its siblings and the next op in the
24 * execution sequence), a pointer to the function that would execute the
25 * op, plus any data specific to that op. For example, an OP_CONST op
26 * points to the pp_const() function and to an SV containing the constant
27 * value. When pp_const() is executed, its job is to push that SV onto the
30 * OPs are mainly created by the newFOO() functions, which are mainly
31 * called from the parser (in perly.y) as the code is parsed. For example
32 * the Perl code $a + $b * $c would cause the equivalent of the following
33 * to be called (oversimplifying a bit):
35 * newBINOP(OP_ADD, flags,
37 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
40 * Note that during the build of miniperl, a temporary copy of this file
41 * is made, called opmini.c.
45 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
49 An execution-order pass
51 The bottom-up pass is represented by all the "newOP" routines and
52 the ck_ routines. The bottom-upness is actually driven by yacc.
53 So at the point that a ck_ routine fires, we have no idea what the
54 context is, either upward in the syntax tree, or either forward or
55 backward in the execution order. (The bottom-up parser builds that
56 part of the execution order it knows about, but if you follow the "next"
57 links around, you'll find it's actually a closed loop through the
60 Whenever the bottom-up parser gets to a node that supplies context to
61 its components, it invokes that portion of the top-down pass that applies
62 to that part of the subtree (and marks the top node as processed, so
63 if a node further up supplies context, it doesn't have to take the
64 plunge again). As a particular subcase of this, as the new node is
65 built, it takes all the closed execution loops of its subcomponents
66 and links them into a new closed loop for the higher level node. But
67 it's still not the real execution order.
69 The actual execution order is not known till we get a grammar reduction
70 to a top-level unit like a subroutine or file that will be called by
71 "name" rather than via a "next" pointer. At that point, we can call
72 into peep() to do that code's portion of the 3rd pass. It has to be
73 recursive, but it's recursive on basic blocks, not on tree nodes.
76 /* To implement user lexical pragmas, there needs to be a way at run time to
77 get the compile time state of %^H for that block. Storing %^H in every
78 block (or even COP) would be very expensive, so a different approach is
79 taken. The (running) state of %^H is serialised into a tree of HE-like
80 structs. Stores into %^H are chained onto the current leaf as a struct
81 refcounted_he * with the key and the value. Deletes from %^H are saved
82 with a value of PL_sv_placeholder. The state of %^H at any point can be
83 turned back into a regular HV by walking back up the tree from that point's
84 leaf, ignoring any key you've already seen (placeholder or not), storing
85 the rest into the HV structure, then removing the placeholders. Hence
86 memory is only used to store the %^H deltas from the enclosing COP, rather
87 than the entire %^H on each COP.
89 To cause actions on %^H to write out the serialisation records, it has
90 magic type 'H'. This magic (itself) does nothing, but its presence causes
91 the values to gain magic type 'h', which has entries for set and clear.
92 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
93 record, with deletes written by C<Perl_magic_clearhint>. C<SAVE_HINTS>
94 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
95 it will be correctly restored when any inner compiling scope is exited.
101 #include "keywords.h"
103 #define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
105 #if defined(PL_OP_SLAB_ALLOC)
107 #ifdef PERL_DEBUG_READONLY_OPS
108 # define PERL_SLAB_SIZE 4096
109 # include <sys/mman.h>
112 #ifndef PERL_SLAB_SIZE
113 #define PERL_SLAB_SIZE 2048
117 Perl_Slab_Alloc(pTHX_ size_t sz)
120 * To make incrementing use count easy PL_OpSlab is an I32 *
121 * To make inserting the link to slab PL_OpPtr is I32 **
122 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
123 * Add an overhead for pointer to slab and round up as a number of pointers
125 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
126 if ((PL_OpSpace -= sz) < 0) {
127 #ifdef PERL_DEBUG_READONLY_OPS
128 /* We need to allocate chunk by chunk so that we can control the VM
130 PL_OpPtr = mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
131 MAP_ANON|MAP_PRIVATE, -1, 0);
133 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
134 (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
136 if(PL_OpPtr == MAP_FAILED) {
137 perror("mmap failed");
142 PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*));
147 /* We reserve the 0'th I32 sized chunk as a use count */
148 PL_OpSlab = (I32 *) PL_OpPtr;
149 /* Reduce size by the use count word, and by the size we need.
150 * Latter is to mimic the '-=' in the if() above
152 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
153 /* Allocation pointer starts at the top.
154 Theory: because we build leaves before trunk allocating at end
155 means that at run time access is cache friendly upward
157 PL_OpPtr += PERL_SLAB_SIZE;
159 #ifdef PERL_DEBUG_READONLY_OPS
160 /* We remember this slab. */
161 /* This implementation isn't efficient, but it is simple. */
162 PL_slabs = realloc(PL_slabs, sizeof(I32**) * (PL_slab_count + 1));
163 PL_slabs[PL_slab_count++] = PL_OpSlab;
164 DEBUG_m(PerlIO_printf(Perl_debug_log, "Allocate %p\n", PL_OpSlab));
167 assert( PL_OpSpace >= 0 );
168 /* Move the allocation pointer down */
170 assert( PL_OpPtr > (I32 **) PL_OpSlab );
171 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
172 (*PL_OpSlab)++; /* Increment use count of slab */
173 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
174 assert( *PL_OpSlab > 0 );
175 return (void *)(PL_OpPtr + 1);
178 #ifdef PERL_DEBUG_READONLY_OPS
180 Perl_pending_Slabs_to_ro(pTHX) {
181 /* Turn all the allocated op slabs read only. */
182 U32 count = PL_slab_count;
183 I32 **const slabs = PL_slabs;
185 /* Reset the array of pending OP slabs, as we're about to turn this lot
186 read only. Also, do it ahead of the loop in case the warn triggers,
187 and a warn handler has an eval */
192 /* Force a new slab for any further allocation. */
196 void *const start = slabs[count];
197 const size_t size = PERL_SLAB_SIZE* sizeof(I32*);
198 if(mprotect(start, size, PROT_READ)) {
199 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d",
200 start, (unsigned long) size, errno);
208 S_Slab_to_rw(pTHX_ void *op)
210 I32 * const * const ptr = (I32 **) op;
211 I32 * const slab = ptr[-1];
212 assert( ptr-1 > (I32 **) slab );
213 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
215 if(mprotect(slab, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE)) {
216 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d",
217 slab, (unsigned long) PERL_SLAB_SIZE*sizeof(I32*), errno);
222 Perl_op_refcnt_inc(pTHX_ OP *o)
233 Perl_op_refcnt_dec(pTHX_ OP *o)
239 # define Slab_to_rw(op)
243 Perl_Slab_Free(pTHX_ void *op)
245 I32 * const * const ptr = (I32 **) op;
246 I32 * const slab = ptr[-1];
247 assert( ptr-1 > (I32 **) slab );
248 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
251 if (--(*slab) == 0) {
253 # define PerlMemShared PerlMem
256 #ifdef PERL_DEBUG_READONLY_OPS
257 U32 count = PL_slab_count;
258 /* Need to remove this slab from our list of slabs */
261 if (PL_slabs[count] == slab) {
262 /* Found it. Move the entry at the end to overwrite it. */
263 DEBUG_m(PerlIO_printf(Perl_debug_log,
264 "Deallocate %p by moving %p from %lu to %lu\n",
266 PL_slabs[PL_slab_count - 1],
267 PL_slab_count, count));
268 PL_slabs[count] = PL_slabs[--PL_slab_count];
269 /* Could realloc smaller at this point, but probably not
271 if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
272 perror("munmap failed");
280 PerlMemShared_free(slab);
282 if (slab == PL_OpSlab) {
289 * In the following definition, the ", (OP*)0" is just to make the compiler
290 * think the expression is of the right type: croak actually does a Siglongjmp.
292 #define CHECKOP(type,o) \
293 ((PL_op_mask && PL_op_mask[type]) \
294 ? ( op_free((OP*)o), \
295 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
297 : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
299 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
302 S_gv_ename(pTHX_ GV *gv)
304 SV* const tmpsv = sv_newmortal();
305 gv_efullname3(tmpsv, gv, NULL);
306 return SvPV_nolen_const(tmpsv);
310 S_no_fh_allowed(pTHX_ OP *o)
312 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
318 S_too_few_arguments(pTHX_ OP *o, const char *name)
320 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
325 S_too_many_arguments(pTHX_ OP *o, const char *name)
327 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
332 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
334 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
335 (int)n, name, t, OP_DESC(kid)));
339 S_no_bareword_allowed(pTHX_ const OP *o)
342 return; /* various ok barewords are hidden in extra OP_NULL */
343 qerror(Perl_mess(aTHX_
344 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
348 /* "register" allocation */
351 Perl_allocmy(pTHX_ const char *const name)
355 const bool is_our = (PL_parser->in_my == KEY_our);
357 /* complain about "my $<special_var>" etc etc */
361 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
362 (name[1] == '_' && (*name == '$' || name[2]))))
364 /* name[2] is true if strlen(name) > 2 */
365 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
366 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%s in \"my\"",
367 name[0], toCTRL(name[1]), name + 2));
369 yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
373 /* check for duplicate declaration */
374 pad_check_dup(name, is_our, (PL_curstash ? PL_curstash : PL_defstash));
376 if (PL_parser->in_my_stash && *name != '$') {
377 yyerror(Perl_form(aTHX_
378 "Can't declare class for non-scalar %s in \"%s\"",
381 : PL_parser->in_my == KEY_state ? "state" : "my"));
384 /* allocate a spare slot and store the name in that slot */
386 off = pad_add_name(name,
387 PL_parser->in_my_stash,
389 /* $_ is always in main::, even with our */
390 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
394 PL_parser->in_my == KEY_state
399 /* free the body of an op without examining its contents.
400 * Always use this rather than FreeOp directly */
403 S_op_destroy(pTHX_ OP *o)
405 if (o->op_latefree) {
413 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
415 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
421 Perl_op_free(pTHX_ OP *o)
426 if (!o || o->op_static)
428 if (o->op_latefreed) {
435 if (o->op_private & OPpREFCOUNTED) {
446 refcnt = OpREFCNT_dec(o);
449 /* Need to find and remove any pattern match ops from the list
450 we maintain for reset(). */
451 find_and_forget_pmops(o);
461 if (o->op_flags & OPf_KIDS) {
462 register OP *kid, *nextkid;
463 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
464 nextkid = kid->op_sibling; /* Get before next freeing kid */
469 type = (OPCODE)o->op_targ;
471 #ifdef PERL_DEBUG_READONLY_OPS
475 /* COP* is not cleared by op_clear() so that we may track line
476 * numbers etc even after null() */
477 if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE) {
482 if (o->op_latefree) {
488 #ifdef DEBUG_LEAKING_SCALARS
495 Perl_op_clear(pTHX_ OP *o)
500 /* if (o->op_madprop && o->op_madprop->mad_next)
502 /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
503 "modification of a read only value" for a reason I can't fathom why.
504 It's the "" stringification of $_, where $_ was set to '' in a foreach
505 loop, but it defies simplification into a small test case.
506 However, commenting them out has caused ext/List/Util/t/weak.t to fail
509 mad_free(o->op_madprop);
515 switch (o->op_type) {
516 case OP_NULL: /* Was holding old type, if any. */
517 if (PL_madskills && o->op_targ != OP_NULL) {
518 o->op_type = o->op_targ;
522 case OP_ENTEREVAL: /* Was holding hints. */
526 if (!(o->op_flags & OPf_REF)
527 || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
533 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
534 /* not an OP_PADAV replacement */
536 if (cPADOPo->op_padix > 0) {
537 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
538 * may still exist on the pad */
539 pad_swipe(cPADOPo->op_padix, TRUE);
540 cPADOPo->op_padix = 0;
543 SvREFCNT_dec(cSVOPo->op_sv);
544 cSVOPo->op_sv = NULL;
548 case OP_METHOD_NAMED:
550 SvREFCNT_dec(cSVOPo->op_sv);
551 cSVOPo->op_sv = NULL;
554 Even if op_clear does a pad_free for the target of the op,
555 pad_free doesn't actually remove the sv that exists in the pad;
556 instead it lives on. This results in that it could be reused as
557 a target later on when the pad was reallocated.
560 pad_swipe(o->op_targ,1);
569 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
573 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
575 if (cPADOPo->op_padix > 0) {
576 pad_swipe(cPADOPo->op_padix, TRUE);
577 cPADOPo->op_padix = 0;
580 SvREFCNT_dec(cSVOPo->op_sv);
581 cSVOPo->op_sv = NULL;
585 PerlMemShared_free(cPVOPo->op_pv);
586 cPVOPo->op_pv = NULL;
590 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
594 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
595 /* No GvIN_PAD_off here, because other references may still
596 * exist on the pad */
597 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
600 SvREFCNT_dec((SV*)cPMOPo->op_pmreplrootu.op_pmtargetgv);
606 forget_pmop(cPMOPo, 1);
607 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
608 /* we use the "SAFE" version of the PM_ macros here
609 * since sv_clean_all might release some PMOPs
610 * after PL_regex_padav has been cleared
611 * and the clearing of PL_regex_padav needs to
612 * happen before sv_clean_all
614 ReREFCNT_dec(PM_GETRE_SAFE(cPMOPo));
615 PM_SETRE_SAFE(cPMOPo, NULL);
617 if(PL_regex_pad) { /* We could be in destruction */
618 av_push((AV*) PL_regex_pad[0],(SV*) PL_regex_pad[(cPMOPo)->op_pmoffset]);
619 SvREADONLY_off(PL_regex_pad[(cPMOPo)->op_pmoffset]);
620 SvREPADTMP_on(PL_regex_pad[(cPMOPo)->op_pmoffset]);
621 PM_SETRE(cPMOPo, (cPMOPo)->op_pmoffset);
628 if (o->op_targ > 0) {
629 pad_free(o->op_targ);
635 S_cop_free(pTHX_ COP* cop)
640 if (! specialWARN(cop->cop_warnings))
641 PerlMemShared_free(cop->cop_warnings);
642 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
646 S_forget_pmop(pTHX_ PMOP *const o
652 HV * const pmstash = PmopSTASH(o);
653 if (pmstash && !SvIS_FREED(pmstash)) {
654 MAGIC * const mg = mg_find((SV*)pmstash, PERL_MAGIC_symtab);
656 PMOP **const array = (PMOP**) mg->mg_ptr;
657 U32 count = mg->mg_len / sizeof(PMOP**);
662 /* Found it. Move the entry at the end to overwrite it. */
663 array[i] = array[--count];
664 mg->mg_len = count * sizeof(PMOP**);
665 /* Could realloc smaller at this point always, but probably
666 not worth it. Probably worth free()ing if we're the
669 Safefree(mg->mg_ptr);
686 S_find_and_forget_pmops(pTHX_ OP *o)
688 if (o->op_flags & OPf_KIDS) {
689 OP *kid = cUNOPo->op_first;
691 switch (kid->op_type) {
696 forget_pmop((PMOP*)kid, 0);
698 find_and_forget_pmops(kid);
699 kid = kid->op_sibling;
705 Perl_op_null(pTHX_ OP *o)
708 if (o->op_type == OP_NULL)
712 o->op_targ = o->op_type;
713 o->op_type = OP_NULL;
714 o->op_ppaddr = PL_ppaddr[OP_NULL];
718 Perl_op_refcnt_lock(pTHX)
726 Perl_op_refcnt_unlock(pTHX)
733 /* Contextualizers */
735 #define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
738 Perl_linklist(pTHX_ OP *o)
745 /* establish postfix order */
746 first = cUNOPo->op_first;
749 o->op_next = LINKLIST(first);
752 if (kid->op_sibling) {
753 kid->op_next = LINKLIST(kid->op_sibling);
754 kid = kid->op_sibling;
768 Perl_scalarkids(pTHX_ OP *o)
770 if (o && o->op_flags & OPf_KIDS) {
772 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
779 S_scalarboolean(pTHX_ OP *o)
782 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
783 if (ckWARN(WARN_SYNTAX)) {
784 const line_t oldline = CopLINE(PL_curcop);
786 if (PL_parser && PL_parser->copline != NOLINE)
787 CopLINE_set(PL_curcop, PL_parser->copline);
788 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
789 CopLINE_set(PL_curcop, oldline);
796 Perl_scalar(pTHX_ OP *o)
801 /* assumes no premature commitment */
802 if (!o || (PL_parser && PL_parser->error_count)
803 || (o->op_flags & OPf_WANT)
804 || o->op_type == OP_RETURN)
809 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
811 switch (o->op_type) {
813 scalar(cBINOPo->op_first);
818 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
822 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
823 if (!kPMOP->op_pmreplrootu.op_pmreplroot)
824 deprecate_old("implicit split to @_");
832 if (o->op_flags & OPf_KIDS) {
833 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
839 kid = cLISTOPo->op_first;
841 while ((kid = kid->op_sibling)) {
847 PL_curcop = &PL_compiling;
852 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
858 PL_curcop = &PL_compiling;
861 if (ckWARN(WARN_VOID))
862 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
868 Perl_scalarvoid(pTHX_ OP *o)
872 const char* useless = NULL;
876 /* trailing mad null ops don't count as "there" for void processing */
878 o->op_type != OP_NULL &&
880 o->op_sibling->op_type == OP_NULL)
883 for (sib = o->op_sibling;
884 sib && sib->op_type == OP_NULL;
885 sib = sib->op_sibling) ;
891 if (o->op_type == OP_NEXTSTATE
892 || o->op_type == OP_SETSTATE
893 || o->op_type == OP_DBSTATE
894 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
895 || o->op_targ == OP_SETSTATE
896 || o->op_targ == OP_DBSTATE)))
897 PL_curcop = (COP*)o; /* for warning below */
899 /* assumes no premature commitment */
900 want = o->op_flags & OPf_WANT;
901 if ((want && want != OPf_WANT_SCALAR)
902 || (PL_parser && PL_parser->error_count)
903 || o->op_type == OP_RETURN)
908 if ((o->op_private & OPpTARGET_MY)
909 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
911 return scalar(o); /* As if inside SASSIGN */
914 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
916 switch (o->op_type) {
918 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
922 if (o->op_flags & OPf_STACKED)
926 if (o->op_private == 4)
998 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
999 useless = OP_DESC(o);
1003 kid = cUNOPo->op_first;
1004 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1005 kid->op_type != OP_TRANS) {
1008 useless = "negative pattern binding (!~)";
1015 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1016 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1017 useless = "a variable";
1022 if (cSVOPo->op_private & OPpCONST_STRICT)
1023 no_bareword_allowed(o);
1025 if (ckWARN(WARN_VOID)) {
1026 useless = "a constant";
1027 if (o->op_private & OPpCONST_ARYBASE)
1029 /* don't warn on optimised away booleans, eg
1030 * use constant Foo, 5; Foo || print; */
1031 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1033 /* the constants 0 and 1 are permitted as they are
1034 conventionally used as dummies in constructs like
1035 1 while some_condition_with_side_effects; */
1036 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1038 else if (SvPOK(sv)) {
1039 /* perl4's way of mixing documentation and code
1040 (before the invention of POD) was based on a
1041 trick to mix nroff and perl code. The trick was
1042 built upon these three nroff macros being used in
1043 void context. The pink camel has the details in
1044 the script wrapman near page 319. */
1045 const char * const maybe_macro = SvPVX_const(sv);
1046 if (strnEQ(maybe_macro, "di", 2) ||
1047 strnEQ(maybe_macro, "ds", 2) ||
1048 strnEQ(maybe_macro, "ig", 2))
1053 op_null(o); /* don't execute or even remember it */
1057 o->op_type = OP_PREINC; /* pre-increment is faster */
1058 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1062 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1063 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1067 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1068 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1072 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1073 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1082 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1087 if (o->op_flags & OPf_STACKED)
1094 if (!(o->op_flags & OPf_KIDS))
1105 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1112 /* all requires must return a boolean value */
1113 o->op_flags &= ~OPf_WANT;
1118 if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
1119 if (!kPMOP->op_pmreplrootu.op_pmreplroot)
1120 deprecate_old("implicit split to @_");
1124 if (useless && ckWARN(WARN_VOID))
1125 Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1130 Perl_listkids(pTHX_ OP *o)
1132 if (o && o->op_flags & OPf_KIDS) {
1134 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1141 Perl_list(pTHX_ OP *o)
1146 /* assumes no premature commitment */
1147 if (!o || (o->op_flags & OPf_WANT)
1148 || (PL_parser && PL_parser->error_count)
1149 || o->op_type == OP_RETURN)
1154 if ((o->op_private & OPpTARGET_MY)
1155 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1157 return o; /* As if inside SASSIGN */
1160 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1162 switch (o->op_type) {
1165 list(cBINOPo->op_first);
1170 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1178 if (!(o->op_flags & OPf_KIDS))
1180 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1181 list(cBINOPo->op_first);
1182 return gen_constant_list(o);
1189 kid = cLISTOPo->op_first;
1191 while ((kid = kid->op_sibling)) {
1192 if (kid->op_sibling)
1197 PL_curcop = &PL_compiling;
1201 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1202 if (kid->op_sibling)
1207 PL_curcop = &PL_compiling;
1210 /* all requires must return a boolean value */
1211 o->op_flags &= ~OPf_WANT;
1218 Perl_scalarseq(pTHX_ OP *o)
1222 const OPCODE type = o->op_type;
1224 if (type == OP_LINESEQ || type == OP_SCOPE ||
1225 type == OP_LEAVE || type == OP_LEAVETRY)
1228 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1229 if (kid->op_sibling) {
1233 PL_curcop = &PL_compiling;
1235 o->op_flags &= ~OPf_PARENS;
1236 if (PL_hints & HINT_BLOCK_SCOPE)
1237 o->op_flags |= OPf_PARENS;
1240 o = newOP(OP_STUB, 0);
1245 S_modkids(pTHX_ OP *o, I32 type)
1247 if (o && o->op_flags & OPf_KIDS) {
1249 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1255 /* Propagate lvalue ("modifiable") context to an op and its children.
1256 * 'type' represents the context type, roughly based on the type of op that
1257 * would do the modifying, although local() is represented by OP_NULL.
1258 * It's responsible for detecting things that can't be modified, flag
1259 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1260 * might have to vivify a reference in $x), and so on.
1262 * For example, "$a+1 = 2" would cause mod() to be called with o being
1263 * OP_ADD and type being OP_SASSIGN, and would output an error.
1267 Perl_mod(pTHX_ OP *o, I32 type)
1271 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1274 if (!o || (PL_parser && PL_parser->error_count))
1277 if ((o->op_private & OPpTARGET_MY)
1278 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1283 switch (o->op_type) {
1289 if (!(o->op_private & OPpCONST_ARYBASE))
1292 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1293 CopARYBASE_set(&PL_compiling,
1294 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1298 SAVECOPARYBASE(&PL_compiling);
1299 CopARYBASE_set(&PL_compiling, 0);
1301 else if (type == OP_REFGEN)
1304 Perl_croak(aTHX_ "That use of $[ is unsupported");
1307 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1311 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1312 !(o->op_flags & OPf_STACKED)) {
1313 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1314 /* The default is to set op_private to the number of children,
1315 which for a UNOP such as RV2CV is always 1. And w're using
1316 the bit for a flag in RV2CV, so we need it clear. */
1317 o->op_private &= ~1;
1318 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1319 assert(cUNOPo->op_first->op_type == OP_NULL);
1320 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1323 else if (o->op_private & OPpENTERSUB_NOMOD)
1325 else { /* lvalue subroutine call */
1326 o->op_private |= OPpLVAL_INTRO;
1327 PL_modcount = RETURN_UNLIMITED_NUMBER;
1328 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1329 /* Backward compatibility mode: */
1330 o->op_private |= OPpENTERSUB_INARGS;
1333 else { /* Compile-time error message: */
1334 OP *kid = cUNOPo->op_first;
1338 if (kid->op_type != OP_PUSHMARK) {
1339 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1341 "panic: unexpected lvalue entersub "
1342 "args: type/targ %ld:%"UVuf,
1343 (long)kid->op_type, (UV)kid->op_targ);
1344 kid = kLISTOP->op_first;
1346 while (kid->op_sibling)
1347 kid = kid->op_sibling;
1348 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1350 if (kid->op_type == OP_METHOD_NAMED
1351 || kid->op_type == OP_METHOD)
1355 NewOp(1101, newop, 1, UNOP);
1356 newop->op_type = OP_RV2CV;
1357 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1358 newop->op_first = NULL;
1359 newop->op_next = (OP*)newop;
1360 kid->op_sibling = (OP*)newop;
1361 newop->op_private |= OPpLVAL_INTRO;
1362 newop->op_private &= ~1;
1366 if (kid->op_type != OP_RV2CV)
1368 "panic: unexpected lvalue entersub "
1369 "entry via type/targ %ld:%"UVuf,
1370 (long)kid->op_type, (UV)kid->op_targ);
1371 kid->op_private |= OPpLVAL_INTRO;
1372 break; /* Postpone until runtime */
1376 kid = kUNOP->op_first;
1377 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1378 kid = kUNOP->op_first;
1379 if (kid->op_type == OP_NULL)
1381 "Unexpected constant lvalue entersub "
1382 "entry via type/targ %ld:%"UVuf,
1383 (long)kid->op_type, (UV)kid->op_targ);
1384 if (kid->op_type != OP_GV) {
1385 /* Restore RV2CV to check lvalueness */
1387 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1388 okid->op_next = kid->op_next;
1389 kid->op_next = okid;
1392 okid->op_next = NULL;
1393 okid->op_type = OP_RV2CV;
1395 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1396 okid->op_private |= OPpLVAL_INTRO;
1397 okid->op_private &= ~1;
1401 cv = GvCV(kGVOP_gv);
1411 /* grep, foreach, subcalls, refgen */
1412 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1414 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1415 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1417 : (o->op_type == OP_ENTERSUB
1418 ? "non-lvalue subroutine call"
1420 type ? PL_op_desc[type] : "local"));
1434 case OP_RIGHT_SHIFT:
1443 if (!(o->op_flags & OPf_STACKED))
1450 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1456 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1457 PL_modcount = RETURN_UNLIMITED_NUMBER;
1458 return o; /* Treat \(@foo) like ordinary list. */
1462 if (scalar_mod_type(o, type))
1464 ref(cUNOPo->op_first, o->op_type);
1468 if (type == OP_LEAVESUBLV)
1469 o->op_private |= OPpMAYBE_LVSUB;
1475 PL_modcount = RETURN_UNLIMITED_NUMBER;
1478 ref(cUNOPo->op_first, o->op_type);
1483 PL_hints |= HINT_BLOCK_SCOPE;
1498 PL_modcount = RETURN_UNLIMITED_NUMBER;
1499 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1500 return o; /* Treat \(@foo) like ordinary list. */
1501 if (scalar_mod_type(o, type))
1503 if (type == OP_LEAVESUBLV)
1504 o->op_private |= OPpMAYBE_LVSUB;
1508 if (!type) /* local() */
1509 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1510 PAD_COMPNAME_PV(o->op_targ));
1518 if (type != OP_SASSIGN)
1522 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1527 if (type == OP_LEAVESUBLV)
1528 o->op_private |= OPpMAYBE_LVSUB;
1530 pad_free(o->op_targ);
1531 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1532 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1533 if (o->op_flags & OPf_KIDS)
1534 mod(cBINOPo->op_first->op_sibling, type);
1539 ref(cBINOPo->op_first, o->op_type);
1540 if (type == OP_ENTERSUB &&
1541 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1542 o->op_private |= OPpLVAL_DEFER;
1543 if (type == OP_LEAVESUBLV)
1544 o->op_private |= OPpMAYBE_LVSUB;
1554 if (o->op_flags & OPf_KIDS)
1555 mod(cLISTOPo->op_last, type);
1560 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1562 else if (!(o->op_flags & OPf_KIDS))
1564 if (o->op_targ != OP_LIST) {
1565 mod(cBINOPo->op_first, type);
1571 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1576 if (type != OP_LEAVESUBLV)
1578 break; /* mod()ing was handled by ck_return() */
1581 /* [20011101.069] File test operators interpret OPf_REF to mean that
1582 their argument is a filehandle; thus \stat(".") should not set
1584 if (type == OP_REFGEN &&
1585 PL_check[o->op_type] == MEMBER_TO_FPTR(Perl_ck_ftst))
1588 if (type != OP_LEAVESUBLV)
1589 o->op_flags |= OPf_MOD;
1591 if (type == OP_AASSIGN || type == OP_SASSIGN)
1592 o->op_flags |= OPf_SPECIAL|OPf_REF;
1593 else if (!type) { /* local() */
1596 o->op_private |= OPpLVAL_INTRO;
1597 o->op_flags &= ~OPf_SPECIAL;
1598 PL_hints |= HINT_BLOCK_SCOPE;
1603 if (ckWARN(WARN_SYNTAX)) {
1604 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
1605 "Useless localization of %s", OP_DESC(o));
1609 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1610 && type != OP_LEAVESUBLV)
1611 o->op_flags |= OPf_REF;
1616 S_scalar_mod_type(const OP *o, I32 type)
1620 if (o->op_type == OP_RV2GV)
1644 case OP_RIGHT_SHIFT:
1664 S_is_handle_constructor(const OP *o, I32 numargs)
1666 switch (o->op_type) {
1674 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1687 Perl_refkids(pTHX_ OP *o, I32 type)
1689 if (o && o->op_flags & OPf_KIDS) {
1691 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1698 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1703 if (!o || (PL_parser && PL_parser->error_count))
1706 switch (o->op_type) {
1708 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1709 !(o->op_flags & OPf_STACKED)) {
1710 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1711 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1712 assert(cUNOPo->op_first->op_type == OP_NULL);
1713 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1714 o->op_flags |= OPf_SPECIAL;
1715 o->op_private &= ~1;
1720 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1721 doref(kid, type, set_op_ref);
1724 if (type == OP_DEFINED)
1725 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1726 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1729 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1730 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1731 : type == OP_RV2HV ? OPpDEREF_HV
1733 o->op_flags |= OPf_MOD;
1740 o->op_flags |= OPf_REF;
1743 if (type == OP_DEFINED)
1744 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1745 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1751 o->op_flags |= OPf_REF;
1756 if (!(o->op_flags & OPf_KIDS))
1758 doref(cBINOPo->op_first, type, set_op_ref);
1762 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1763 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1764 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1765 : type == OP_RV2HV ? OPpDEREF_HV
1767 o->op_flags |= OPf_MOD;
1777 if (!(o->op_flags & OPf_KIDS))
1779 doref(cLISTOPo->op_last, type, set_op_ref);
1789 S_dup_attrlist(pTHX_ OP *o)
1794 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1795 * where the first kid is OP_PUSHMARK and the remaining ones
1796 * are OP_CONST. We need to push the OP_CONST values.
1798 if (o->op_type == OP_CONST)
1799 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1801 else if (o->op_type == OP_NULL)
1805 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1807 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1808 if (o->op_type == OP_CONST)
1809 rop = append_elem(OP_LIST, rop,
1810 newSVOP(OP_CONST, o->op_flags,
1811 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1818 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1823 /* fake up C<use attributes $pkg,$rv,@attrs> */
1824 ENTER; /* need to protect against side-effects of 'use' */
1825 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1827 #define ATTRSMODULE "attributes"
1828 #define ATTRSMODULE_PM "attributes.pm"
1831 /* Don't force the C<use> if we don't need it. */
1832 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1833 if (svp && *svp != &PL_sv_undef)
1834 NOOP; /* already in %INC */
1836 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
1837 newSVpvs(ATTRSMODULE), NULL);
1840 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1841 newSVpvs(ATTRSMODULE),
1843 prepend_elem(OP_LIST,
1844 newSVOP(OP_CONST, 0, stashsv),
1845 prepend_elem(OP_LIST,
1846 newSVOP(OP_CONST, 0,
1848 dup_attrlist(attrs))));
1854 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
1857 OP *pack, *imop, *arg;
1863 assert(target->op_type == OP_PADSV ||
1864 target->op_type == OP_PADHV ||
1865 target->op_type == OP_PADAV);
1867 /* Ensure that attributes.pm is loaded. */
1868 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
1870 /* Need package name for method call. */
1871 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
1873 /* Build up the real arg-list. */
1874 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1876 arg = newOP(OP_PADSV, 0);
1877 arg->op_targ = target->op_targ;
1878 arg = prepend_elem(OP_LIST,
1879 newSVOP(OP_CONST, 0, stashsv),
1880 prepend_elem(OP_LIST,
1881 newUNOP(OP_REFGEN, 0,
1882 mod(arg, OP_REFGEN)),
1883 dup_attrlist(attrs)));
1885 /* Fake up a method call to import */
1886 meth = newSVpvs_share("import");
1887 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
1888 append_elem(OP_LIST,
1889 prepend_elem(OP_LIST, pack, list(arg)),
1890 newSVOP(OP_METHOD_NAMED, 0, meth)));
1891 imop->op_private |= OPpENTERSUB_NOMOD;
1893 /* Combine the ops. */
1894 *imopsp = append_elem(OP_LIST, *imopsp, imop);
1898 =notfor apidoc apply_attrs_string
1900 Attempts to apply a list of attributes specified by the C<attrstr> and
1901 C<len> arguments to the subroutine identified by the C<cv> argument which
1902 is expected to be associated with the package identified by the C<stashpv>
1903 argument (see L<attributes>). It gets this wrong, though, in that it
1904 does not correctly identify the boundaries of the individual attribute
1905 specifications within C<attrstr>. This is not really intended for the
1906 public API, but has to be listed here for systems such as AIX which
1907 need an explicit export list for symbols. (It's called from XS code
1908 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
1909 to respect attribute syntax properly would be welcome.
1915 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
1916 const char *attrstr, STRLEN len)
1921 len = strlen(attrstr);
1925 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
1927 const char * const sstr = attrstr;
1928 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
1929 attrs = append_elem(OP_LIST, attrs,
1930 newSVOP(OP_CONST, 0,
1931 newSVpvn(sstr, attrstr-sstr)));
1935 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
1936 newSVpvs(ATTRSMODULE),
1937 NULL, prepend_elem(OP_LIST,
1938 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
1939 prepend_elem(OP_LIST,
1940 newSVOP(OP_CONST, 0,
1946 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
1951 if (!o || (PL_parser && PL_parser->error_count))
1955 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
1956 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
1960 if (type == OP_LIST) {
1962 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1963 my_kid(kid, attrs, imopsp);
1964 } else if (type == OP_UNDEF
1970 } else if (type == OP_RV2SV || /* "our" declaration */
1972 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1973 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
1974 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1976 PL_parser->in_my == KEY_our
1978 : PL_parser->in_my == KEY_state ? "state" : "my"));
1980 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
1981 PL_parser->in_my = FALSE;
1982 PL_parser->in_my_stash = NULL;
1983 apply_attrs(GvSTASH(gv),
1984 (type == OP_RV2SV ? GvSV(gv) :
1985 type == OP_RV2AV ? (SV*)GvAV(gv) :
1986 type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)gv),
1989 o->op_private |= OPpOUR_INTRO;
1992 else if (type != OP_PADSV &&
1995 type != OP_PUSHMARK)
1997 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
1999 PL_parser->in_my == KEY_our
2001 : PL_parser->in_my == KEY_state ? "state" : "my"));
2004 else if (attrs && type != OP_PUSHMARK) {
2007 PL_parser->in_my = FALSE;
2008 PL_parser->in_my_stash = NULL;
2010 /* check for C<my Dog $spot> when deciding package */
2011 stash = PAD_COMPNAME_TYPE(o->op_targ);
2013 stash = PL_curstash;
2014 apply_attrs_my(stash, o, attrs, imopsp);
2016 o->op_flags |= OPf_MOD;
2017 o->op_private |= OPpLVAL_INTRO;
2018 if (PL_parser->in_my == KEY_state)
2019 o->op_private |= OPpPAD_STATE;
2024 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2028 int maybe_scalar = 0;
2030 /* [perl #17376]: this appears to be premature, and results in code such as
2031 C< our(%x); > executing in list mode rather than void mode */
2033 if (o->op_flags & OPf_PARENS)
2043 o = my_kid(o, attrs, &rops);
2045 if (maybe_scalar && o->op_type == OP_PADSV) {
2046 o = scalar(append_list(OP_LIST, (LISTOP*)rops, (LISTOP*)o));
2047 o->op_private |= OPpLVAL_INTRO;
2050 o = append_list(OP_LIST, (LISTOP*)o, (LISTOP*)rops);
2052 PL_parser->in_my = FALSE;
2053 PL_parser->in_my_stash = NULL;
2058 Perl_my(pTHX_ OP *o)
2060 return my_attrs(o, NULL);
2064 Perl_sawparens(pTHX_ OP *o)
2066 PERL_UNUSED_CONTEXT;
2068 o->op_flags |= OPf_PARENS;
2073 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2077 const OPCODE ltype = left->op_type;
2078 const OPCODE rtype = right->op_type;
2080 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2081 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2083 const char * const desc
2084 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
2085 ? (int)rtype : OP_MATCH];
2086 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2087 ? "@array" : "%hash");
2088 Perl_warner(aTHX_ packWARN(WARN_MISC),
2089 "Applying %s to %s will act on scalar(%s)",
2090 desc, sample, sample);
2093 if (rtype == OP_CONST &&
2094 cSVOPx(right)->op_private & OPpCONST_BARE &&
2095 cSVOPx(right)->op_private & OPpCONST_STRICT)
2097 no_bareword_allowed(right);
2100 ismatchop = rtype == OP_MATCH ||
2101 rtype == OP_SUBST ||
2103 if (ismatchop && right->op_private & OPpTARGET_MY) {
2105 right->op_private &= ~OPpTARGET_MY;
2107 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2110 right->op_flags |= OPf_STACKED;
2111 if (rtype != OP_MATCH &&
2112 ! (rtype == OP_TRANS &&
2113 right->op_private & OPpTRANS_IDENTICAL))
2114 newleft = mod(left, rtype);
2117 if (right->op_type == OP_TRANS)
2118 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2120 o = prepend_elem(rtype, scalar(newleft), right);
2122 return newUNOP(OP_NOT, 0, scalar(o));
2126 return bind_match(type, left,
2127 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2131 Perl_invert(pTHX_ OP *o)
2135 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2139 Perl_scope(pTHX_ OP *o)
2143 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2144 o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2145 o->op_type = OP_LEAVE;
2146 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2148 else if (o->op_type == OP_LINESEQ) {
2150 o->op_type = OP_SCOPE;
2151 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2152 kid = ((LISTOP*)o)->op_first;
2153 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2156 /* The following deals with things like 'do {1 for 1}' */
2157 kid = kid->op_sibling;
2159 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2164 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2170 Perl_block_start(pTHX_ int full)
2173 const int retval = PL_savestack_ix;
2174 pad_block_start(full);
2176 PL_hints &= ~HINT_BLOCK_SCOPE;
2177 SAVECOMPILEWARNINGS();
2178 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2183 Perl_block_end(pTHX_ I32 floor, OP *seq)
2186 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2187 OP* const retval = scalarseq(seq);
2189 CopHINTS_set(&PL_compiling, PL_hints);
2191 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2200 const PADOFFSET offset = pad_findmy("$_");
2201 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2202 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2205 OP * const o = newOP(OP_PADSV, 0);
2206 o->op_targ = offset;
2212 Perl_newPROG(pTHX_ OP *o)
2218 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2219 ((PL_in_eval & EVAL_KEEPERR)
2220 ? OPf_SPECIAL : 0), o);
2221 PL_eval_start = linklist(PL_eval_root);
2222 PL_eval_root->op_private |= OPpREFCOUNTED;
2223 OpREFCNT_set(PL_eval_root, 1);
2224 PL_eval_root->op_next = 0;
2225 CALL_PEEP(PL_eval_start);
2228 if (o->op_type == OP_STUB) {
2229 PL_comppad_name = 0;
2231 S_op_destroy(aTHX_ o);
2234 PL_main_root = scope(sawparens(scalarvoid(o)));
2235 PL_curcop = &PL_compiling;
2236 PL_main_start = LINKLIST(PL_main_root);
2237 PL_main_root->op_private |= OPpREFCOUNTED;
2238 OpREFCNT_set(PL_main_root, 1);
2239 PL_main_root->op_next = 0;
2240 CALL_PEEP(PL_main_start);
2243 /* Register with debugger */
2246 = Perl_get_cvn_flags(aTHX_ STR_WITH_LEN("DB::postponed"), 0);
2250 XPUSHs((SV*)CopFILEGV(&PL_compiling));
2252 call_sv((SV*)cv, G_DISCARD);
2259 Perl_localize(pTHX_ OP *o, I32 lex)
2262 if (o->op_flags & OPf_PARENS)
2263 /* [perl #17376]: this appears to be premature, and results in code such as
2264 C< our(%x); > executing in list mode rather than void mode */
2271 if ( PL_parser->bufptr > PL_parser->oldbufptr
2272 && PL_parser->bufptr[-1] == ','
2273 && ckWARN(WARN_PARENTHESIS))
2275 char *s = PL_parser->bufptr;
2278 /* some heuristics to detect a potential error */
2279 while (*s && (strchr(", \t\n", *s)))
2283 if (*s && strchr("@$%*", *s) && *++s
2284 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2287 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2289 while (*s && (strchr(", \t\n", *s)))
2295 if (sigil && (*s == ';' || *s == '=')) {
2296 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2297 "Parentheses missing around \"%s\" list",
2299 ? (PL_parser->in_my == KEY_our
2301 : PL_parser->in_my == KEY_state
2311 o = mod(o, OP_NULL); /* a bit kludgey */
2312 PL_parser->in_my = FALSE;
2313 PL_parser->in_my_stash = NULL;
2318 Perl_jmaybe(pTHX_ OP *o)
2320 if (o->op_type == OP_LIST) {
2322 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2323 o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
2329 Perl_fold_constants(pTHX_ register OP *o)
2334 VOL I32 type = o->op_type;
2339 SV * const oldwarnhook = PL_warnhook;
2340 SV * const olddiehook = PL_diehook;
2343 if (PL_opargs[type] & OA_RETSCALAR)
2345 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2346 o->op_targ = pad_alloc(type, SVs_PADTMP);
2348 /* integerize op, unless it happens to be C<-foo>.
2349 * XXX should pp_i_negate() do magic string negation instead? */
2350 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2351 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2352 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2354 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2357 if (!(PL_opargs[type] & OA_FOLDCONST))
2362 /* XXX might want a ck_negate() for this */
2363 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2374 /* XXX what about the numeric ops? */
2375 if (PL_hints & HINT_LOCALE)
2379 if (PL_parser && PL_parser->error_count)
2380 goto nope; /* Don't try to run w/ errors */
2382 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2383 const OPCODE type = curop->op_type;
2384 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2386 type != OP_SCALAR &&
2388 type != OP_PUSHMARK)
2394 curop = LINKLIST(o);
2395 old_next = o->op_next;
2399 oldscope = PL_scopestack_ix;
2400 create_eval_scope(G_FAKINGEVAL);
2402 PL_warnhook = PERL_WARNHOOK_FATAL;
2409 sv = *(PL_stack_sp--);
2410 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2411 pad_swipe(o->op_targ, FALSE);
2412 else if (SvTEMP(sv)) { /* grab mortal temp? */
2413 SvREFCNT_inc_simple_void(sv);
2418 /* Something tried to die. Abandon constant folding. */
2419 /* Pretend the error never happened. */
2420 sv_setpvn(ERRSV,"",0);
2421 o->op_next = old_next;
2425 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2426 PL_warnhook = oldwarnhook;
2427 PL_diehook = olddiehook;
2428 /* XXX note that this croak may fail as we've already blown away
2429 * the stack - eg any nested evals */
2430 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2433 PL_warnhook = oldwarnhook;
2434 PL_diehook = olddiehook;
2436 if (PL_scopestack_ix > oldscope)
2437 delete_eval_scope();
2446 if (type == OP_RV2GV)
2447 newop = newGVOP(OP_GV, 0, (GV*)sv);
2449 newop = newSVOP(OP_CONST, 0, (SV*)sv);
2450 op_getmad(o,newop,'f');
2458 Perl_gen_constant_list(pTHX_ register OP *o)
2462 const I32 oldtmps_floor = PL_tmps_floor;
2465 if (PL_parser && PL_parser->error_count)
2466 return o; /* Don't attempt to run with errors */
2468 PL_op = curop = LINKLIST(o);
2474 assert (!(curop->op_flags & OPf_SPECIAL));
2475 assert(curop->op_type == OP_RANGE);
2477 PL_tmps_floor = oldtmps_floor;
2479 o->op_type = OP_RV2AV;
2480 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2481 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2482 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2483 o->op_opt = 0; /* needs to be revisited in peep() */
2484 curop = ((UNOP*)o)->op_first;
2485 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2487 op_getmad(curop,o,'O');
2496 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2499 if (!o || o->op_type != OP_LIST)
2500 o = newLISTOP(OP_LIST, 0, o, NULL);
2502 o->op_flags &= ~OPf_WANT;
2504 if (!(PL_opargs[type] & OA_MARK))
2505 op_null(cLISTOPo->op_first);
2507 o->op_type = (OPCODE)type;
2508 o->op_ppaddr = PL_ppaddr[type];
2509 o->op_flags |= flags;
2511 o = CHECKOP(type, o);
2512 if (o->op_type != (unsigned)type)
2515 return fold_constants(o);
2518 /* List constructors */
2521 Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
2529 if (first->op_type != (unsigned)type
2530 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2532 return newLISTOP(type, 0, first, last);
2535 if (first->op_flags & OPf_KIDS)
2536 ((LISTOP*)first)->op_last->op_sibling = last;
2538 first->op_flags |= OPf_KIDS;
2539 ((LISTOP*)first)->op_first = last;
2541 ((LISTOP*)first)->op_last = last;
2546 Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
2554 if (first->op_type != (unsigned)type)
2555 return prepend_elem(type, (OP*)first, (OP*)last);
2557 if (last->op_type != (unsigned)type)
2558 return append_elem(type, (OP*)first, (OP*)last);
2560 first->op_last->op_sibling = last->op_first;
2561 first->op_last = last->op_last;
2562 first->op_flags |= (last->op_flags & OPf_KIDS);
2565 if (last->op_first && first->op_madprop) {
2566 MADPROP *mp = last->op_first->op_madprop;
2568 while (mp->mad_next)
2570 mp->mad_next = first->op_madprop;
2573 last->op_first->op_madprop = first->op_madprop;
2576 first->op_madprop = last->op_madprop;
2577 last->op_madprop = 0;
2580 S_op_destroy(aTHX_ (OP*)last);
2586 Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2594 if (last->op_type == (unsigned)type) {
2595 if (type == OP_LIST) { /* already a PUSHMARK there */
2596 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2597 ((LISTOP*)last)->op_first->op_sibling = first;
2598 if (!(first->op_flags & OPf_PARENS))
2599 last->op_flags &= ~OPf_PARENS;
2602 if (!(last->op_flags & OPf_KIDS)) {
2603 ((LISTOP*)last)->op_last = first;
2604 last->op_flags |= OPf_KIDS;
2606 first->op_sibling = ((LISTOP*)last)->op_first;
2607 ((LISTOP*)last)->op_first = first;
2609 last->op_flags |= OPf_KIDS;
2613 return newLISTOP(type, 0, first, last);
2621 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2624 Newxz(tk, 1, TOKEN);
2625 tk->tk_type = (OPCODE)optype;
2626 tk->tk_type = 12345;
2628 tk->tk_mad = madprop;
2633 Perl_token_free(pTHX_ TOKEN* tk)
2635 if (tk->tk_type != 12345)
2637 mad_free(tk->tk_mad);
2642 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2646 if (tk->tk_type != 12345) {
2647 Perl_warner(aTHX_ packWARN(WARN_MISC),
2648 "Invalid TOKEN object ignored");
2655 /* faked up qw list? */
2657 tm->mad_type == MAD_SV &&
2658 SvPVX((SV*)tm->mad_val)[0] == 'q')
2665 /* pretend constant fold didn't happen? */
2666 if (mp->mad_key == 'f' &&
2667 (o->op_type == OP_CONST ||
2668 o->op_type == OP_GV) )
2670 token_getmad(tk,(OP*)mp->mad_val,slot);
2684 if (mp->mad_key == 'X')
2685 mp->mad_key = slot; /* just change the first one */
2695 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2704 /* pretend constant fold didn't happen? */
2705 if (mp->mad_key == 'f' &&
2706 (o->op_type == OP_CONST ||
2707 o->op_type == OP_GV) )
2709 op_getmad(from,(OP*)mp->mad_val,slot);
2716 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2719 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2725 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
2734 /* pretend constant fold didn't happen? */
2735 if (mp->mad_key == 'f' &&
2736 (o->op_type == OP_CONST ||
2737 o->op_type == OP_GV) )
2739 op_getmad(from,(OP*)mp->mad_val,slot);
2746 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
2749 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
2753 PerlIO_printf(PerlIO_stderr(),
2754 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
2760 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
2778 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
2782 addmad(tm, &(o->op_madprop), slot);
2786 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
2807 Perl_newMADsv(pTHX_ char key, SV* sv)
2809 return newMADPROP(key, MAD_SV, sv, 0);
2813 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
2816 Newxz(mp, 1, MADPROP);
2819 mp->mad_vlen = vlen;
2820 mp->mad_type = type;
2822 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
2827 Perl_mad_free(pTHX_ MADPROP* mp)
2829 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
2833 mad_free(mp->mad_next);
2834 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
2835 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
2836 switch (mp->mad_type) {
2840 Safefree((char*)mp->mad_val);
2843 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
2844 op_free((OP*)mp->mad_val);
2847 sv_free((SV*)mp->mad_val);
2850 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
2859 Perl_newNULLLIST(pTHX)
2861 return newOP(OP_STUB, 0);
2865 Perl_force_list(pTHX_ OP *o)
2867 if (!o || o->op_type != OP_LIST)
2868 o = newLISTOP(OP_LIST, 0, o, NULL);
2874 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2879 NewOp(1101, listop, 1, LISTOP);
2881 listop->op_type = (OPCODE)type;
2882 listop->op_ppaddr = PL_ppaddr[type];
2885 listop->op_flags = (U8)flags;
2889 else if (!first && last)
2892 first->op_sibling = last;
2893 listop->op_first = first;
2894 listop->op_last = last;
2895 if (type == OP_LIST) {
2896 OP* const pushop = newOP(OP_PUSHMARK, 0);
2897 pushop->op_sibling = first;
2898 listop->op_first = pushop;
2899 listop->op_flags |= OPf_KIDS;
2901 listop->op_last = pushop;
2904 return CHECKOP(type, listop);
2908 Perl_newOP(pTHX_ I32 type, I32 flags)
2912 NewOp(1101, o, 1, OP);
2913 o->op_type = (OPCODE)type;
2914 o->op_ppaddr = PL_ppaddr[type];
2915 o->op_flags = (U8)flags;
2917 o->op_latefreed = 0;
2921 o->op_private = (U8)(0 | (flags >> 8));
2922 if (PL_opargs[type] & OA_RETSCALAR)
2924 if (PL_opargs[type] & OA_TARGET)
2925 o->op_targ = pad_alloc(type, SVs_PADTMP);
2926 return CHECKOP(type, o);
2930 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
2936 first = newOP(OP_STUB, 0);
2937 if (PL_opargs[type] & OA_MARK)
2938 first = force_list(first);
2940 NewOp(1101, unop, 1, UNOP);
2941 unop->op_type = (OPCODE)type;
2942 unop->op_ppaddr = PL_ppaddr[type];
2943 unop->op_first = first;
2944 unop->op_flags = (U8)(flags | OPf_KIDS);
2945 unop->op_private = (U8)(1 | (flags >> 8));
2946 unop = (UNOP*) CHECKOP(type, unop);
2950 return fold_constants((OP *) unop);
2954 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
2958 NewOp(1101, binop, 1, BINOP);
2961 first = newOP(OP_NULL, 0);
2963 binop->op_type = (OPCODE)type;
2964 binop->op_ppaddr = PL_ppaddr[type];
2965 binop->op_first = first;
2966 binop->op_flags = (U8)(flags | OPf_KIDS);
2969 binop->op_private = (U8)(1 | (flags >> 8));
2972 binop->op_private = (U8)(2 | (flags >> 8));
2973 first->op_sibling = last;
2976 binop = (BINOP*)CHECKOP(type, binop);
2977 if (binop->op_next || binop->op_type != (OPCODE)type)
2980 binop->op_last = binop->op_first->op_sibling;
2982 return fold_constants((OP *)binop);
2985 static int uvcompare(const void *a, const void *b)
2986 __attribute__nonnull__(1)
2987 __attribute__nonnull__(2)
2988 __attribute__pure__;
2989 static int uvcompare(const void *a, const void *b)
2991 if (*((const UV *)a) < (*(const UV *)b))
2993 if (*((const UV *)a) > (*(const UV *)b))
2995 if (*((const UV *)a+1) < (*(const UV *)b+1))
2997 if (*((const UV *)a+1) > (*(const UV *)b+1))
3003 Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3006 SV * const tstr = ((SVOP*)expr)->op_sv;
3009 (repl->op_type == OP_NULL)
3010 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3012 ((SVOP*)repl)->op_sv;
3015 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3016 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3020 register short *tbl;
3022 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3023 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3024 I32 del = o->op_private & OPpTRANS_DELETE;
3026 PL_hints |= HINT_BLOCK_SCOPE;
3029 o->op_private |= OPpTRANS_FROM_UTF;
3032 o->op_private |= OPpTRANS_TO_UTF;
3034 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3035 SV* const listsv = newSVpvs("# comment\n");
3037 const U8* tend = t + tlen;
3038 const U8* rend = r + rlen;
3052 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3053 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3056 const U32 flags = UTF8_ALLOW_DEFAULT;
3060 t = tsave = bytes_to_utf8(t, &len);
3063 if (!to_utf && rlen) {
3065 r = rsave = bytes_to_utf8(r, &len);
3069 /* There are several snags with this code on EBCDIC:
3070 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3071 2. scan_const() in toke.c has encoded chars in native encoding which makes
3072 ranges at least in EBCDIC 0..255 range the bottom odd.
3076 U8 tmpbuf[UTF8_MAXBYTES+1];
3079 Newx(cp, 2*tlen, UV);
3081 transv = newSVpvs("");
3083 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3085 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3087 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3091 cp[2*i+1] = cp[2*i];
3095 qsort(cp, i, 2*sizeof(UV), uvcompare);
3096 for (j = 0; j < i; j++) {
3098 diff = val - nextmin;
3100 t = uvuni_to_utf8(tmpbuf,nextmin);
3101 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3103 U8 range_mark = UTF_TO_NATIVE(0xff);
3104 t = uvuni_to_utf8(tmpbuf, val - 1);
3105 sv_catpvn(transv, (char *)&range_mark, 1);
3106 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3113 t = uvuni_to_utf8(tmpbuf,nextmin);
3114 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3116 U8 range_mark = UTF_TO_NATIVE(0xff);
3117 sv_catpvn(transv, (char *)&range_mark, 1);
3119 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
3120 UNICODE_ALLOW_SUPER);
3121 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3122 t = (const U8*)SvPVX_const(transv);
3123 tlen = SvCUR(transv);
3127 else if (!rlen && !del) {
3128 r = t; rlen = tlen; rend = tend;
3131 if ((!rlen && !del) || t == r ||
3132 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3134 o->op_private |= OPpTRANS_IDENTICAL;
3138 while (t < tend || tfirst <= tlast) {
3139 /* see if we need more "t" chars */
3140 if (tfirst > tlast) {
3141 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3143 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3145 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3152 /* now see if we need more "r" chars */
3153 if (rfirst > rlast) {
3155 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3157 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3159 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3168 rfirst = rlast = 0xffffffff;
3172 /* now see which range will peter our first, if either. */
3173 tdiff = tlast - tfirst;
3174 rdiff = rlast - rfirst;
3181 if (rfirst == 0xffffffff) {
3182 diff = tdiff; /* oops, pretend rdiff is infinite */
3184 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3185 (long)tfirst, (long)tlast);
3187 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3191 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3192 (long)tfirst, (long)(tfirst + diff),
3195 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3196 (long)tfirst, (long)rfirst);
3198 if (rfirst + diff > max)
3199 max = rfirst + diff;
3201 grows = (tfirst < rfirst &&
3202 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3214 else if (max > 0xff)
3219 PerlMemShared_free(cPVOPo->op_pv);
3220 cPVOPo->op_pv = NULL;
3222 swash = (SV*)swash_init("utf8", "", listsv, bits, none);
3224 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3225 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3226 PAD_SETSV(cPADOPo->op_padix, swash);
3229 cSVOPo->op_sv = swash;
3231 SvREFCNT_dec(listsv);
3232 SvREFCNT_dec(transv);
3234 if (!del && havefinal && rlen)
3235 (void)hv_store((HV*)SvRV(swash), "FINAL", 5,
3236 newSVuv((UV)final), 0);
3239 o->op_private |= OPpTRANS_GROWS;
3245 op_getmad(expr,o,'e');
3246 op_getmad(repl,o,'r');
3254 tbl = (short*)cPVOPo->op_pv;
3256 Zero(tbl, 256, short);
3257 for (i = 0; i < (I32)tlen; i++)
3259 for (i = 0, j = 0; i < 256; i++) {
3261 if (j >= (I32)rlen) {
3270 if (i < 128 && r[j] >= 128)
3280 o->op_private |= OPpTRANS_IDENTICAL;
3282 else if (j >= (I32)rlen)
3287 PerlMemShared_realloc(tbl,
3288 (0x101+rlen-j) * sizeof(short));
3289 cPVOPo->op_pv = (char*)tbl;
3291 tbl[0x100] = (short)(rlen - j);
3292 for (i=0; i < (I32)rlen - j; i++)
3293 tbl[0x101+i] = r[j+i];
3297 if (!rlen && !del) {
3300 o->op_private |= OPpTRANS_IDENTICAL;
3302 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3303 o->op_private |= OPpTRANS_IDENTICAL;
3305 for (i = 0; i < 256; i++)
3307 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3308 if (j >= (I32)rlen) {
3310 if (tbl[t[i]] == -1)
3316 if (tbl[t[i]] == -1) {
3317 if (t[i] < 128 && r[j] >= 128)
3324 o->op_private |= OPpTRANS_GROWS;
3326 op_getmad(expr,o,'e');
3327 op_getmad(repl,o,'r');
3337 Perl_newPMOP(pTHX_ I32 type, I32 flags)
3342 NewOp(1101, pmop, 1, PMOP);
3343 pmop->op_type = (OPCODE)type;
3344 pmop->op_ppaddr = PL_ppaddr[type];
3345 pmop->op_flags = (U8)flags;
3346 pmop->op_private = (U8)(0 | (flags >> 8));
3348 if (PL_hints & HINT_RE_TAINT)
3349 pmop->op_pmflags |= PMf_RETAINT;
3350 if (PL_hints & HINT_LOCALE)
3351 pmop->op_pmflags |= PMf_LOCALE;
3355 if (av_len((AV*) PL_regex_pad[0]) > -1) {
3356 SV * const repointer = av_pop((AV*)PL_regex_pad[0]);
3357 pmop->op_pmoffset = SvIV(repointer);
3358 SvREPADTMP_off(repointer);
3359 sv_setiv(repointer,0);
3361 SV * const repointer = newSViv(0);
3362 av_push(PL_regex_padav, SvREFCNT_inc_simple_NN(repointer));
3363 pmop->op_pmoffset = av_len(PL_regex_padav);
3364 PL_regex_pad = AvARRAY(PL_regex_padav);
3368 return CHECKOP(type, pmop);
3371 /* Given some sort of match op o, and an expression expr containing a
3372 * pattern, either compile expr into a regex and attach it to o (if it's
3373 * constant), or convert expr into a runtime regcomp op sequence (if it's
3376 * isreg indicates that the pattern is part of a regex construct, eg
3377 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3378 * split "pattern", which aren't. In the former case, expr will be a list
3379 * if the pattern contains more than one term (eg /a$b/) or if it contains
3380 * a replacement, ie s/// or tr///.
3384 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3389 I32 repl_has_vars = 0;
3393 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3394 /* last element in list is the replacement; pop it */
3396 repl = cLISTOPx(expr)->op_last;
3397 kid = cLISTOPx(expr)->op_first;
3398 while (kid->op_sibling != repl)
3399 kid = kid->op_sibling;
3400 kid->op_sibling = NULL;
3401 cLISTOPx(expr)->op_last = kid;
3404 if (isreg && expr->op_type == OP_LIST &&
3405 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3407 /* convert single element list to element */
3408 OP* const oe = expr;
3409 expr = cLISTOPx(oe)->op_first->op_sibling;
3410 cLISTOPx(oe)->op_first->op_sibling = NULL;
3411 cLISTOPx(oe)->op_last = NULL;
3415 if (o->op_type == OP_TRANS) {
3416 return pmtrans(o, expr, repl);
3419 reglist = isreg && expr->op_type == OP_LIST;
3423 PL_hints |= HINT_BLOCK_SCOPE;
3426 if (expr->op_type == OP_CONST) {
3428 SV * const pat = ((SVOP*)expr)->op_sv;
3429 const char *p = SvPV_const(pat, plen);
3430 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
3431 if ((o->op_flags & OPf_SPECIAL) && (plen == 1 && *p == ' ')) {
3432 U32 was_readonly = SvREADONLY(pat);
3436 sv_force_normal_flags(pat, 0);
3437 assert(!SvREADONLY(pat));
3440 SvREADONLY_off(pat);
3444 sv_setpvn(pat, "\\s+", 3);
3446 SvFLAGS(pat) |= was_readonly;
3448 p = SvPV_const(pat, plen);
3449 pm_flags |= RXf_SKIPWHITE;
3452 pm_flags |= RXf_UTF8;
3453 PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
3456 op_getmad(expr,(OP*)pm,'e');
3462 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3463 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3465 : OP_REGCMAYBE),0,expr);
3467 NewOp(1101, rcop, 1, LOGOP);
3468 rcop->op_type = OP_REGCOMP;
3469 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3470 rcop->op_first = scalar(expr);
3471 rcop->op_flags |= OPf_KIDS
3472 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3473 | (reglist ? OPf_STACKED : 0);
3474 rcop->op_private = 1;
3477 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3479 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3482 /* establish postfix order */
3483 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3485 rcop->op_next = expr;
3486 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3489 rcop->op_next = LINKLIST(expr);
3490 expr->op_next = (OP*)rcop;
3493 prepend_elem(o->op_type, scalar((OP*)rcop), o);
3498 if (pm->op_pmflags & PMf_EVAL) {
3500 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
3501 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
3503 else if (repl->op_type == OP_CONST)
3507 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3508 if (curop->op_type == OP_SCOPE
3509 || curop->op_type == OP_LEAVE
3510 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3511 if (curop->op_type == OP_GV) {
3512 GV * const gv = cGVOPx_gv(curop);
3514 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3517 else if (curop->op_type == OP_RV2CV)
3519 else if (curop->op_type == OP_RV2SV ||
3520 curop->op_type == OP_RV2AV ||
3521 curop->op_type == OP_RV2HV ||
3522 curop->op_type == OP_RV2GV) {
3523 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3526 else if (curop->op_type == OP_PADSV ||
3527 curop->op_type == OP_PADAV ||
3528 curop->op_type == OP_PADHV ||
3529 curop->op_type == OP_PADANY)
3533 else if (curop->op_type == OP_PUSHRE)
3534 NOOP; /* Okay here, dangerous in newASSIGNOP */
3544 || PM_GETRE(pm)->extflags & RXf_EVAL_SEEN)))
3546 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3547 prepend_elem(o->op_type, scalar(repl), o);
3550 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3551 pm->op_pmflags |= PMf_MAYBE_CONST;
3553 NewOp(1101, rcop, 1, LOGOP);
3554 rcop->op_type = OP_SUBSTCONT;
3555 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3556 rcop->op_first = scalar(repl);
3557 rcop->op_flags |= OPf_KIDS;
3558 rcop->op_private = 1;
3561 /* establish postfix order */
3562 rcop->op_next = LINKLIST(repl);
3563 repl->op_next = (OP*)rcop;
3565 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
3566 assert(!(pm->op_pmflags & PMf_ONCE));
3567 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
3576 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3580 NewOp(1101, svop, 1, SVOP);
3581 svop->op_type = (OPCODE)type;
3582 svop->op_ppaddr = PL_ppaddr[type];
3584 svop->op_next = (OP*)svop;
3585 svop->op_flags = (U8)flags;
3586 if (PL_opargs[type] & OA_RETSCALAR)
3588 if (PL_opargs[type] & OA_TARGET)
3589 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3590 return CHECKOP(type, svop);
3595 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
3599 NewOp(1101, padop, 1, PADOP);
3600 padop->op_type = (OPCODE)type;
3601 padop->op_ppaddr = PL_ppaddr[type];
3602 padop->op_padix = pad_alloc(type, SVs_PADTMP);
3603 SvREFCNT_dec(PAD_SVl(padop->op_padix));
3604 PAD_SETSV(padop->op_padix, sv);
3607 padop->op_next = (OP*)padop;
3608 padop->op_flags = (U8)flags;
3609 if (PL_opargs[type] & OA_RETSCALAR)
3611 if (PL_opargs[type] & OA_TARGET)
3612 padop->op_targ = pad_alloc(type, SVs_PADTMP);
3613 return CHECKOP(type, padop);
3618 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
3624 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3626 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
3631 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
3635 NewOp(1101, pvop, 1, PVOP);
3636 pvop->op_type = (OPCODE)type;
3637 pvop->op_ppaddr = PL_ppaddr[type];
3639 pvop->op_next = (OP*)pvop;
3640 pvop->op_flags = (U8)flags;
3641 if (PL_opargs[type] & OA_RETSCALAR)
3643 if (PL_opargs[type] & OA_TARGET)
3644 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
3645 return CHECKOP(type, pvop);
3653 Perl_package(pTHX_ OP *o)
3656 SV *const sv = cSVOPo->op_sv;
3661 save_hptr(&PL_curstash);
3662 save_item(PL_curstname);
3664 PL_curstash = gv_stashsv(sv, GV_ADD);
3666 sv_setsv(PL_curstname, sv);
3668 PL_hints |= HINT_BLOCK_SCOPE;
3669 PL_parser->copline = NOLINE;
3670 PL_parser->expect = XSTATE;
3675 if (!PL_madskills) {
3680 pegop = newOP(OP_NULL,0);
3681 op_getmad(o,pegop,'P');
3691 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
3698 OP *pegop = newOP(OP_NULL,0);
3701 if (idop->op_type != OP_CONST)
3702 Perl_croak(aTHX_ "Module name must be constant");
3705 op_getmad(idop,pegop,'U');
3710 SV * const vesv = ((SVOP*)version)->op_sv;
3713 op_getmad(version,pegop,'V');
3714 if (!arg && !SvNIOKp(vesv)) {
3721 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
3722 Perl_croak(aTHX_ "Version number must be constant number");
3724 /* Make copy of idop so we don't free it twice */
3725 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3727 /* Fake up a method call to VERSION */
3728 meth = newSVpvs_share("VERSION");
3729 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3730 append_elem(OP_LIST,
3731 prepend_elem(OP_LIST, pack, list(version)),
3732 newSVOP(OP_METHOD_NAMED, 0, meth)));
3736 /* Fake up an import/unimport */
3737 if (arg && arg->op_type == OP_STUB) {
3739 op_getmad(arg,pegop,'S');
3740 imop = arg; /* no import on explicit () */
3742 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
3743 imop = NULL; /* use 5.0; */
3745 idop->op_private |= OPpCONST_NOVER;
3751 op_getmad(arg,pegop,'A');
3753 /* Make copy of idop so we don't free it twice */
3754 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
3756 /* Fake up a method call to import/unimport */
3758 ? newSVpvs_share("import") : newSVpvs_share("unimport");
3759 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
3760 append_elem(OP_LIST,
3761 prepend_elem(OP_LIST, pack, list(arg)),
3762 newSVOP(OP_METHOD_NAMED, 0, meth)));
3765 /* Fake up the BEGIN {}, which does its thing immediately. */
3767 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
3770 append_elem(OP_LINESEQ,
3771 append_elem(OP_LINESEQ,
3772 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
3773 newSTATEOP(0, NULL, veop)),
3774 newSTATEOP(0, NULL, imop) ));
3776 /* The "did you use incorrect case?" warning used to be here.
3777 * The problem is that on case-insensitive filesystems one
3778 * might get false positives for "use" (and "require"):
3779 * "use Strict" or "require CARP" will work. This causes
3780 * portability problems for the script: in case-strict
3781 * filesystems the script will stop working.
3783 * The "incorrect case" warning checked whether "use Foo"
3784 * imported "Foo" to your namespace, but that is wrong, too:
3785 * there is no requirement nor promise in the language that
3786 * a Foo.pm should or would contain anything in package "Foo".
3788 * There is very little Configure-wise that can be done, either:
3789 * the case-sensitivity of the build filesystem of Perl does not
3790 * help in guessing the case-sensitivity of the runtime environment.
3793 PL_hints |= HINT_BLOCK_SCOPE;
3794 PL_parser->copline = NOLINE;
3795 PL_parser->expect = XSTATE;
3796 PL_cop_seqmax++; /* Purely for B::*'s benefit */
3799 if (!PL_madskills) {
3800 /* FIXME - don't allocate pegop if !PL_madskills */
3809 =head1 Embedding Functions
3811 =for apidoc load_module
3813 Loads the module whose name is pointed to by the string part of name.
3814 Note that the actual module name, not its filename, should be given.
3815 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
3816 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
3817 (or 0 for no flags). ver, if specified, provides version semantics
3818 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
3819 arguments can be used to specify arguments to the module's import()
3820 method, similar to C<use Foo::Bar VERSION LIST>.
3825 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
3828 va_start(args, ver);
3829 vload_module(flags, name, ver, &args);
3833 #ifdef PERL_IMPLICIT_CONTEXT
3835 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
3839 va_start(args, ver);
3840 vload_module(flags, name, ver, &args);
3846 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
3851 OP * const modname = newSVOP(OP_CONST, 0, name);
3852 modname->op_private |= OPpCONST_BARE;
3854 veop = newSVOP(OP_CONST, 0, ver);
3858 if (flags & PERL_LOADMOD_NOIMPORT) {
3859 imop = sawparens(newNULLLIST());
3861 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
3862 imop = va_arg(*args, OP*);
3867 sv = va_arg(*args, SV*);
3869 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
3870 sv = va_arg(*args, SV*);
3874 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
3875 * that it has a PL_parser to play with while doing that, and also
3876 * that it doesn't mess with any existing parser, by creating a tmp
3877 * new parser with lex_start(). This won't actually be used for much,
3878 * since pp_require() will create another parser for the real work. */
3881 SAVEVPTR(PL_curcop);
3882 lex_start(NULL, NULL, FALSE);
3883 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
3884 veop, modname, imop);
3889 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
3895 if (!force_builtin) {
3896 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
3897 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
3898 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
3899 gv = gvp ? *gvp : NULL;
3903 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
3904 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
3905 append_elem(OP_LIST, term,
3906 scalar(newUNOP(OP_RV2CV, 0,
3907 newGVOP(OP_GV, 0, gv))))));
3910 doop = newUNOP(OP_DOFILE, 0, scalar(term));
3916 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
3918 return newBINOP(OP_LSLICE, flags,
3919 list(force_list(subscript)),
3920 list(force_list(listval)) );
3924 S_is_list_assignment(pTHX_ register const OP *o)
3932 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
3933 o = cUNOPo->op_first;
3935 flags = o->op_flags;
3937 if (type == OP_COND_EXPR) {
3938 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
3939 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
3944 yyerror("Assignment to both a list and a scalar");
3948 if (type == OP_LIST &&
3949 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
3950 o->op_private & OPpLVAL_INTRO)
3953 if (type == OP_LIST || flags & OPf_PARENS ||
3954 type == OP_RV2AV || type == OP_RV2HV ||
3955 type == OP_ASLICE || type == OP_HSLICE)
3958 if (type == OP_PADAV || type == OP_PADHV)
3961 if (type == OP_RV2SV)
3968 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
3974 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
3975 return newLOGOP(optype, 0,
3976 mod(scalar(left), optype),
3977 newUNOP(OP_SASSIGN, 0, scalar(right)));
3980 return newBINOP(optype, OPf_STACKED,
3981 mod(scalar(left), optype), scalar(right));
3985 if (is_list_assignment(left)) {
3989 /* Grandfathering $[ assignment here. Bletch.*/
3990 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
3991 PL_eval_start = (left->op_type == OP_CONST) ? right : 0;
3992 left = mod(left, OP_AASSIGN);
3995 else if (left->op_type == OP_CONST) {
3997 /* Result of assignment is always 1 (or we'd be dead already) */
3998 return newSVOP(OP_CONST, 0, newSViv(1));
4000 curop = list(force_list(left));
4001 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
4002 o->op_private = (U8)(0 | (flags >> 8));
4004 /* PL_generation sorcery:
4005 * an assignment like ($a,$b) = ($c,$d) is easier than
4006 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
4007 * To detect whether there are common vars, the global var
4008 * PL_generation is incremented for each assign op we compile.
4009 * Then, while compiling the assign op, we run through all the
4010 * variables on both sides of the assignment, setting a spare slot
4011 * in each of them to PL_generation. If any of them already have
4012 * that value, we know we've got commonality. We could use a
4013 * single bit marker, but then we'd have to make 2 passes, first
4014 * to clear the flag, then to test and set it. To find somewhere
4015 * to store these values, evil chicanery is done with SvUVX().
4021 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4022 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4023 if (curop->op_type == OP_GV) {
4024 GV *gv = cGVOPx_gv(curop);
4026 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4028 GvASSIGN_GENERATION_set(gv, PL_generation);
4030 else if (curop->op_type == OP_PADSV ||
4031 curop->op_type == OP_PADAV ||
4032 curop->op_type == OP_PADHV ||
4033 curop->op_type == OP_PADANY)
4035 if (PAD_COMPNAME_GEN(curop->op_targ)
4036 == (STRLEN)PL_generation)
4038 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4041 else if (curop->op_type == OP_RV2CV)
4043 else if (curop->op_type == OP_RV2SV ||
4044 curop->op_type == OP_RV2AV ||
4045 curop->op_type == OP_RV2HV ||
4046 curop->op_type == OP_RV2GV) {
4047 if (lastop->op_type != OP_GV) /* funny deref? */
4050 else if (curop->op_type == OP_PUSHRE) {
4052 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4053 GV *const gv = (GV*)PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff);
4055 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4057 GvASSIGN_GENERATION_set(gv, PL_generation);
4061 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4064 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4066 GvASSIGN_GENERATION_set(gv, PL_generation);
4076 o->op_private |= OPpASSIGN_COMMON;
4079 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
4080 OP* tmpop = ((LISTOP*)right)->op_first;
4081 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4082 PMOP * const pm = (PMOP*)tmpop;
4083 if (left->op_type == OP_RV2AV &&
4084 !(left->op_private & OPpLVAL_INTRO) &&
4085 !(o->op_private & OPpASSIGN_COMMON) )
4087 tmpop = ((UNOP*)left)->op_first;
4088 if (tmpop->op_type == OP_GV
4090 && !pm->op_pmreplrootu.op_pmtargetoff
4092 && !pm->op_pmreplrootu.op_pmtargetgv
4096 pm->op_pmreplrootu.op_pmtargetoff
4097 = cPADOPx(tmpop)->op_padix;
4098 cPADOPx(tmpop)->op_padix = 0; /* steal it */
4100 pm->op_pmreplrootu.op_pmtargetgv
4101 = (GV*)cSVOPx(tmpop)->op_sv;
4102 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
4104 pm->op_pmflags |= PMf_ONCE;
4105 tmpop = cUNOPo->op_first; /* to list (nulled) */
4106 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4107 tmpop->op_sibling = NULL; /* don't free split */
4108 right->op_next = tmpop->op_next; /* fix starting loc */
4109 op_free(o); /* blow off assign */
4110 right->op_flags &= ~OPf_WANT;
4111 /* "I don't know and I don't care." */
4116 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4117 ((LISTOP*)right)->op_last->op_type == OP_CONST)
4119 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4121 sv_setiv(sv, PL_modcount+1);
4129 right = newOP(OP_UNDEF, 0);
4130 if (right->op_type == OP_READLINE) {
4131 right->op_flags |= OPf_STACKED;
4132 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
4135 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
4136 o = newBINOP(OP_SASSIGN, flags,
4137 scalar(right), mod(scalar(left), OP_SASSIGN) );
4143 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4144 o->op_private |= OPpCONST_ARYBASE;
4151 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4154 const U32 seq = intro_my();
4157 NewOp(1101, cop, 1, COP);
4158 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4159 cop->op_type = OP_DBSTATE;
4160 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4163 cop->op_type = OP_NEXTSTATE;
4164 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4166 cop->op_flags = (U8)flags;
4167 CopHINTS_set(cop, PL_hints);
4169 cop->op_private |= NATIVE_HINTS;
4171 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4172 cop->op_next = (OP*)cop;
4175 CopLABEL_set(cop, label);
4176 PL_hints |= HINT_BLOCK_SCOPE;
4179 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4180 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4182 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4183 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4184 if (cop->cop_hints_hash) {
4186 cop->cop_hints_hash->refcounted_he_refcnt++;
4187 HINTS_REFCNT_UNLOCK;
4190 if (PL_parser && PL_parser->copline == NOLINE)
4191 CopLINE_set(cop, CopLINE(PL_curcop));
4193 CopLINE_set(cop, PL_parser->copline);
4195 PL_parser->copline = NOLINE;
4198 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4200 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4202 CopSTASH_set(cop, PL_curstash);
4204 if (PERLDB_LINE && PL_curstash != PL_debstash) {
4205 AV *av = CopFILEAVx(PL_curcop);
4207 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4208 if (svp && *svp != &PL_sv_undef ) {
4209 (void)SvIOK_on(*svp);
4210 SvIV_set(*svp, PTR2IV(cop));
4215 return prepend_elem(OP_LINESEQ, (OP*)cop, o);
4220 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4223 return new_logop(type, flags, &first, &other);
4227 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4232 OP *first = *firstp;
4233 OP * const other = *otherp;
4235 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4236 return newBINOP(type, flags, scalar(first), scalar(other));
4238 scalarboolean(first);
4239 /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
4240 if (first->op_type == OP_NOT
4241 && (first->op_flags & OPf_SPECIAL)
4242 && (first->op_flags & OPf_KIDS)
4244 if (type == OP_AND || type == OP_OR) {
4250 first = *firstp = cUNOPo->op_first;
4252 first->op_next = o->op_next;
4253 cUNOPo->op_first = NULL;
4257 if (first->op_type == OP_CONST) {
4258 if (first->op_private & OPpCONST_STRICT)
4259 no_bareword_allowed(first);
4260 else if ((first->op_private & OPpCONST_BARE) && ckWARN(WARN_BAREWORD))
4261 Perl_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4262 if ((type == OP_AND && SvTRUE(((SVOP*)first)->op_sv)) ||
4263 (type == OP_OR && !SvTRUE(((SVOP*)first)->op_sv)) ||
4264 (type == OP_DOR && !SvOK(((SVOP*)first)->op_sv))) {
4266 if (other->op_type == OP_CONST)
4267 other->op_private |= OPpCONST_SHORTCIRCUIT;
4269 OP *newop = newUNOP(OP_NULL, 0, other);
4270 op_getmad(first, newop, '1');
4271 newop->op_targ = type; /* set "was" field */
4278 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4279 const OP *o2 = other;
4280 if ( ! (o2->op_type == OP_LIST
4281 && (( o2 = cUNOPx(o2)->op_first))
4282 && o2->op_type == OP_PUSHMARK
4283 && (( o2 = o2->op_sibling)) )
4286 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4287 || o2->op_type == OP_PADHV)
4288 && o2->op_private & OPpLVAL_INTRO
4289 && ckWARN(WARN_DEPRECATED))
4291 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
4292 "Deprecated use of my() in false conditional");
4296 if (first->op_type == OP_CONST)
4297 first->op_private |= OPpCONST_SHORTCIRCUIT;
4299 first = newUNOP(OP_NULL, 0, first);
4300 op_getmad(other, first, '2');
4301 first->op_targ = type; /* set "was" field */
4308 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
4309 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
4311 const OP * const k1 = ((UNOP*)first)->op_first;
4312 const OP * const k2 = k1->op_sibling;
4314 switch (first->op_type)
4317 if (k2 && k2->op_type == OP_READLINE
4318 && (k2->op_flags & OPf_STACKED)
4319 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4321 warnop = k2->op_type;
4326 if (k1->op_type == OP_READDIR
4327 || k1->op_type == OP_GLOB
4328 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4329 || k1->op_type == OP_EACH)
4331 warnop = ((k1->op_type == OP_NULL)
4332 ? (OPCODE)k1->op_targ : k1->op_type);
4337 const line_t oldline = CopLINE(PL_curcop);
4338 CopLINE_set(PL_curcop, PL_parser->copline);
4339 Perl_warner(aTHX_ packWARN(WARN_MISC),
4340 "Value of %s%s can be \"0\"; test with defined()",
4342 ((warnop == OP_READLINE || warnop == OP_GLOB)
4343 ? " construct" : "() operator"));
4344 CopLINE_set(PL_curcop, oldline);
4351 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
4352 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
4354 NewOp(1101, logop, 1, LOGOP);
4356 logop->op_type = (OPCODE)type;
4357 logop->op_ppaddr = PL_ppaddr[type];
4358 logop->op_first = first;
4359 logop->op_flags = (U8)(flags | OPf_KIDS);
4360 logop->op_other = LINKLIST(other);
4361 logop->op_private = (U8)(1 | (flags >> 8));
4363 /* establish postfix order */
4364 logop->op_next = LINKLIST(first);
4365 first->op_next = (OP*)logop;
4366 first->op_sibling = other;
4368 CHECKOP(type,logop);
4370 o = newUNOP(OP_NULL, 0, (OP*)logop);
4377 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
4385 return newLOGOP(OP_AND, 0, first, trueop);
4387 return newLOGOP(OP_OR, 0, first, falseop);
4389 scalarboolean(first);
4390 if (first->op_type == OP_CONST) {
4391 /* Left or right arm of the conditional? */
4392 const bool left = SvTRUE(((SVOP*)first)->op_sv);
4393 OP *live = left ? trueop : falseop;
4394 OP *const dead = left ? falseop : trueop;
4395 if (first->op_private & OPpCONST_BARE &&
4396 first->op_private & OPpCONST_STRICT) {
4397 no_bareword_allowed(first);
4400 /* This is all dead code when PERL_MAD is not defined. */
4401 live = newUNOP(OP_NULL, 0, live);
4402 op_getmad(first, live, 'C');
4403 op_getmad(dead, live, left ? 'e' : 't');
4410 NewOp(1101, logop, 1, LOGOP);
4411 logop->op_type = OP_COND_EXPR;
4412 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
4413 logop->op_first = first;
4414 logop->op_flags = (U8)(flags | OPf_KIDS);
4415 logop->op_private = (U8)(1 | (flags >> 8));
4416 logop->op_other = LINKLIST(trueop);
4417 logop->op_next = LINKLIST(falseop);
4419 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
4422 /* establish postfix order */
4423 start = LINKLIST(first);
4424 first->op_next = (OP*)logop;
4426 first->op_sibling = trueop;
4427 trueop->op_sibling = falseop;
4428 o = newUNOP(OP_NULL, 0, (OP*)logop);
4430 trueop->op_next = falseop->op_next = o;
4437 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
4446 NewOp(1101, range, 1, LOGOP);
4448 range->op_type = OP_RANGE;
4449 range->op_ppaddr = PL_ppaddr[OP_RANGE];
4450 range->op_first = left;
4451 range->op_flags = OPf_KIDS;
4452 leftstart = LINKLIST(left);
4453 range->op_other = LINKLIST(right);
4454 range->op_private = (U8)(1 | (flags >> 8));
4456 left->op_sibling = right;
4458 range->op_next = (OP*)range;
4459 flip = newUNOP(OP_FLIP, flags, (OP*)range);
4460 flop = newUNOP(OP_FLOP, 0, flip);
4461 o = newUNOP(OP_NULL, 0, flop);
4463 range->op_next = leftstart;
4465 left->op_next = flip;
4466 right->op_next = flop;
4468 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4469 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
4470 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
4471 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
4473 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4474 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
4477 if (!flip->op_private || !flop->op_private)
4478 linklist(o); /* blow off optimizer unless constant */
4484 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
4489 const bool once = block && block->op_flags & OPf_SPECIAL &&
4490 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
4492 PERL_UNUSED_ARG(debuggable);
4495 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
4496 return block; /* do {} while 0 does once */
4497 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4498 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4499 expr = newUNOP(OP_DEFINED, 0,
4500 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4501 } else if (expr->op_flags & OPf_KIDS) {
4502 const OP * const k1 = ((UNOP*)expr)->op_first;
4503 const OP * const k2 = k1 ? k1->op_sibling : NULL;
4504 switch (expr->op_type) {
4506 if (k2 && k2->op_type == OP_READLINE
4507 && (k2->op_flags & OPf_STACKED)
4508 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4509 expr = newUNOP(OP_DEFINED, 0, expr);
4513 if (k1 && (k1->op_type == OP_READDIR
4514 || k1->op_type == OP_GLOB
4515 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4516 || k1->op_type == OP_EACH))
4517 expr = newUNOP(OP_DEFINED, 0, expr);
4523 /* if block is null, the next append_elem() would put UNSTACK, a scalar
4524 * op, in listop. This is wrong. [perl #27024] */
4526 block = newOP(OP_NULL, 0);
4527 listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
4528 o = new_logop(OP_AND, 0, &expr, &listop);
4531 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
4533 if (once && o != listop)
4534 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
4537 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
4539 o->op_flags |= flags;
4541 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
4546 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
4547 whileline, OP *expr, OP *block, OP *cont, I32 has_my)
4556 PERL_UNUSED_ARG(debuggable);
4559 if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
4560 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
4561 expr = newUNOP(OP_DEFINED, 0,
4562 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
4563 } else if (expr->op_flags & OPf_KIDS) {
4564 const OP * const k1 = ((UNOP*)expr)->op_first;
4565 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
4566 switch (expr->op_type) {
4568 if (k2 && k2->op_type == OP_READLINE
4569 && (k2->op_flags & OPf_STACKED)
4570 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
4571 expr = newUNOP(OP_DEFINED, 0, expr);
4575 if (k1 && (k1->op_type == OP_READDIR
4576 || k1->op_type == OP_GLOB
4577 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
4578 || k1->op_type == OP_EACH))
4579 expr = newUNOP(OP_DEFINED, 0, expr);
4586 block = newOP(OP_NULL, 0);
4587 else if (cont || has_my) {
4588 block = scope(block);
4592 next = LINKLIST(cont);
4595 OP * const unstack = newOP(OP_UNSTACK, 0);
4598 cont = append_elem(OP_LINESEQ, cont, unstack);
4602 listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
4604 redo = LINKLIST(listop);
4607 PL_parser->copline = (line_t)whileline;
4609 o = new_logop(OP_AND, 0, &expr, &listop);
4610 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
4611 op_free(expr); /* oops, it's a while (0) */
4613 return NULL; /* listop already freed by new_logop */
4616 ((LISTOP*)listop)->op_last->op_next =
4617 (o == listop ? redo : LINKLIST(o));
4623 NewOp(1101,loop,1,LOOP);
4624 loop->op_type = OP_ENTERLOOP;
4625 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
4626 loop->op_private = 0;
4627 loop->op_next = (OP*)loop;
4630 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
4632 loop->op_redoop = redo;
4633 loop->op_lastop = o;
4634 o->op_private |= loopflags;
4637 loop->op_nextop = next;
4639 loop->op_nextop = o;
4641 o->op_flags |= flags;
4642 o->op_private |= (flags >> 8);
4647 Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
4652 PADOFFSET padoff = 0;
4658 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
4659 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
4660 sv->op_type = OP_RV2GV;
4661 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
4663 /* The op_type check is needed to prevent a possible segfault
4664 * if the loop variable is undeclared and 'strict vars' is in
4665 * effect. This is illegal but is nonetheless parsed, so we
4666 * may reach this point with an OP_CONST where we're expecting
4669 if (cUNOPx(sv)->op_first->op_type == OP_GV
4670 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
4671 iterpflags |= OPpITER_DEF;
4673 else if (sv->op_type == OP_PADSV) { /* private variable */
4674 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
4675 padoff = sv->op_targ;
4685 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
4687 SV *const namesv = PAD_COMPNAME_SV(padoff);
4689 const char *const name = SvPV_const(namesv, len);
4691 if (len == 2 && name[0] == '$' && name[1] == '_')
4692 iterpflags |= OPpITER_DEF;
4696 const PADOFFSET offset = pad_findmy("$_");
4697 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
4698 sv = newGVOP(OP_GV, 0, PL_defgv);
4703 iterpflags |= OPpITER_DEF;
4705 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
4706 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
4707 iterflags |= OPf_STACKED;
4709 else if (expr->op_type == OP_NULL &&
4710 (expr->op_flags & OPf_KIDS) &&
4711 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
4713 /* Basically turn for($x..$y) into the same as for($x,$y), but we
4714 * set the STACKED flag to indicate that these values are to be
4715 * treated as min/max values by 'pp_iterinit'.
4717 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
4718 LOGOP* const range = (LOGOP*) flip->op_first;
4719 OP* const left = range->op_first;
4720 OP* const right = left->op_sibling;
4723 range->op_flags &= ~OPf_KIDS;
4724 range->op_first = NULL;
4726 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
4727 listop->op_first->op_next = range->op_next;
4728 left->op_next = range->op_other;
4729 right->op_next = (OP*)listop;
4730 listop->op_next = listop->op_first;
4733 op_getmad(expr,(OP*)listop,'O');
4737 expr = (OP*)(listop);
4739 iterflags |= OPf_STACKED;
4742 expr = mod(force_list(expr), OP_GREPSTART);
4745 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
4746 append_elem(OP_LIST, expr, scalar(sv))));
4747 assert(!loop->op_next);
4748 /* for my $x () sets OPpLVAL_INTRO;
4749 * for our $x () sets OPpOUR_INTRO */
4750 loop->op_private = (U8)iterpflags;
4751 #ifdef PL_OP_SLAB_ALLOC
4754 NewOp(1234,tmp,1,LOOP);
4755 Copy(loop,tmp,1,LISTOP);
4756 S_op_destroy(aTHX_ (OP*)loop);
4760 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
4762 loop->op_targ = padoff;
4763 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
4765 op_getmad(madsv, (OP*)loop, 'v');
4766 PL_parser->copline = forline;
4767 return newSTATEOP(0, label, wop);
4771 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
4776 if (type != OP_GOTO || label->op_type == OP_CONST) {
4777 /* "last()" means "last" */
4778 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
4779 o = newOP(type, OPf_SPECIAL);
4781 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
4782 ? SvPV_nolen_const(((SVOP*)label)->op_sv)
4786 op_getmad(label,o,'L');
4792 /* Check whether it's going to be a goto &function */
4793 if (label->op_type == OP_ENTERSUB
4794 && !(label->op_flags & OPf_STACKED))
4795 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
4796 o = newUNOP(type, OPf_STACKED, label);
4798 PL_hints |= HINT_BLOCK_SCOPE;
4802 /* if the condition is a literal array or hash
4803 (or @{ ... } etc), make a reference to it.
4806 S_ref_array_or_hash(pTHX_ OP *cond)
4809 && (cond->op_type == OP_RV2AV
4810 || cond->op_type == OP_PADAV
4811 || cond->op_type == OP_RV2HV
4812 || cond->op_type == OP_PADHV))
4814 return newUNOP(OP_REFGEN,
4815 0, mod(cond, OP_REFGEN));
4821 /* These construct the optree fragments representing given()
4824 entergiven and enterwhen are LOGOPs; the op_other pointer
4825 points up to the associated leave op. We need this so we
4826 can put it in the context and make break/continue work.
4827 (Also, of course, pp_enterwhen will jump straight to
4828 op_other if the match fails.)
4832 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
4833 I32 enter_opcode, I32 leave_opcode,
4834 PADOFFSET entertarg)
4840 NewOp(1101, enterop, 1, LOGOP);
4841 enterop->op_type = enter_opcode;
4842 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
4843 enterop->op_flags = (U8) OPf_KIDS;
4844 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
4845 enterop->op_private = 0;
4847 o = newUNOP(leave_opcode, 0, (OP *) enterop);
4850 enterop->op_first = scalar(cond);
4851 cond->op_sibling = block;
4853 o->op_next = LINKLIST(cond);
4854 cond->op_next = (OP *) enterop;
4857 /* This is a default {} block */
4858 enterop->op_first = block;
4859 enterop->op_flags |= OPf_SPECIAL;
4861 o->op_next = (OP *) enterop;
4864 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
4865 entergiven and enterwhen both
4868 enterop->op_next = LINKLIST(block);
4869 block->op_next = enterop->op_other = o;
4874 /* Does this look like a boolean operation? For these purposes
4875 a boolean operation is:
4876 - a subroutine call [*]
4877 - a logical connective
4878 - a comparison operator
4879 - a filetest operator, with the exception of -s -M -A -C
4880 - defined(), exists() or eof()
4881 - /$re/ or $foo =~ /$re/
4883 [*] possibly surprising
4886 S_looks_like_bool(pTHX_ const OP *o)
4889 switch(o->op_type) {
4891 return looks_like_bool(cLOGOPo->op_first);
4895 looks_like_bool(cLOGOPo->op_first)
4896 && looks_like_bool(cLOGOPo->op_first->op_sibling));
4900 case OP_NOT: case OP_XOR:
4901 /* Note that OP_DOR is not here */
4903 case OP_EQ: case OP_NE: case OP_LT:
4904 case OP_GT: case OP_LE: case OP_GE:
4906 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
4907 case OP_I_GT: case OP_I_LE: case OP_I_GE:
4909 case OP_SEQ: case OP_SNE: case OP_SLT:
4910 case OP_SGT: case OP_SLE: case OP_SGE:
4914 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
4915 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
4916 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
4917 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
4918 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
4919 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
4920 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
4921 case OP_FTTEXT: case OP_FTBINARY:
4923 case OP_DEFINED: case OP_EXISTS:
4924 case OP_MATCH: case OP_EOF:
4929 /* Detect comparisons that have been optimized away */
4930 if (cSVOPo->op_sv == &PL_sv_yes
4931 || cSVOPo->op_sv == &PL_sv_no)
4942 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
4946 return newGIVWHENOP(
4947 ref_array_or_hash(cond),
4949 OP_ENTERGIVEN, OP_LEAVEGIVEN,
4953 /* If cond is null, this is a default {} block */
4955 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
4957 const bool cond_llb = (!cond || looks_like_bool(cond));
4963 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
4965 scalar(ref_array_or_hash(cond)));
4968 return newGIVWHENOP(
4970 append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
4971 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
4975 =for apidoc cv_undef
4977 Clear out all the active components of a CV. This can happen either
4978 by an explicit C<undef &foo>, or by the reference count going to zero.
4979 In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
4980 children can still follow the full lexical scope chain.
4986 Perl_cv_undef(pTHX_ CV *cv)
4990 if (CvFILE(cv) && !CvISXSUB(cv)) {
4991 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
4992 Safefree(CvFILE(cv));
4997 if (!CvISXSUB(cv) && CvROOT(cv)) {
4998 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
4999 Perl_croak(aTHX_ "Can't undef active subroutine");
5002 PAD_SAVE_SETNULLPAD();
5004 op_free(CvROOT(cv));
5009 SvPOK_off((SV*)cv); /* forget prototype */
5014 /* remove CvOUTSIDE unless this is an undef rather than a free */
5015 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
5016 if (!CvWEAKOUTSIDE(cv))
5017 SvREFCNT_dec(CvOUTSIDE(cv));
5018 CvOUTSIDE(cv) = NULL;
5021 SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
5024 if (CvISXSUB(cv) && CvXSUB(cv)) {
5027 /* delete all flags except WEAKOUTSIDE */
5028 CvFLAGS(cv) &= CVf_WEAKOUTSIDE;
5032 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
5035 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
5036 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
5037 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
5038 || (p && (len != SvCUR(cv) /* Not the same length. */
5039 || memNE(p, SvPVX_const(cv), len))))
5040 && ckWARN_d(WARN_PROTOTYPE)) {
5041 SV* const msg = sv_newmortal();
5045 gv_efullname3(name = sv_newmortal(), gv, NULL);
5046 sv_setpvs(msg, "Prototype mismatch:");
5048 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
5050 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
5052 sv_catpvs(msg, ": none");
5053 sv_catpvs(msg, " vs ");
5055 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
5057 sv_catpvs(msg, "none");
5058 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
5062 static void const_sv_xsub(pTHX_ CV* cv);
5066 =head1 Optree Manipulation Functions
5068 =for apidoc cv_const_sv
5070 If C<cv> is a constant sub eligible for inlining. returns the constant
5071 value returned by the sub. Otherwise, returns NULL.
5073 Constant subs can be created with C<newCONSTSUB> or as described in
5074 L<perlsub/"Constant Functions">.
5079 Perl_cv_const_sv(pTHX_ CV *cv)
5081 PERL_UNUSED_CONTEXT;
5084 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
5086 return CvCONST(cv) ? (SV*)CvXSUBANY(cv).any_ptr : NULL;
5089 /* op_const_sv: examine an optree to determine whether it's in-lineable.
5090 * Can be called in 3 ways:
5093 * look for a single OP_CONST with attached value: return the value
5095 * cv && CvCLONE(cv) && !CvCONST(cv)
5097 * examine the clone prototype, and if contains only a single
5098 * OP_CONST referencing a pad const, or a single PADSV referencing
5099 * an outer lexical, return a non-zero value to indicate the CV is
5100 * a candidate for "constizing" at clone time
5104 * We have just cloned an anon prototype that was marked as a const
5105 * candidiate. Try to grab the current value, and in the case of
5106 * PADSV, ignore it if it has multiple references. Return the value.
5110 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
5118 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
5119 o = cLISTOPo->op_first->op_sibling;
5121 for (; o; o = o->op_next) {
5122 const OPCODE type = o->op_type;
5124 if (sv && o->op_next == o)
5126 if (o->op_next != o) {
5127 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
5129 if (type == OP_DBSTATE)
5132 if (type == OP_LEAVESUB || type == OP_RETURN)
5136 if (type == OP_CONST && cSVOPo->op_sv)
5138 else if (cv && type == OP_CONST) {
5139 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5143 else if (cv && type == OP_PADSV) {
5144 if (CvCONST(cv)) { /* newly cloned anon */
5145 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
5146 /* the candidate should have 1 ref from this pad and 1 ref
5147 * from the parent */
5148 if (!sv || SvREFCNT(sv) != 2)
5155 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
5156 sv = &PL_sv_undef; /* an arbitrary non-null value */
5171 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5174 /* This would be the return value, but the return cannot be reached. */
5175 OP* pegop = newOP(OP_NULL, 0);
5178 PERL_UNUSED_ARG(floor);
5188 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
5190 NORETURN_FUNCTION_END;
5195 Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
5197 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
5201 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
5208 register CV *cv = NULL;
5210 /* If the subroutine has no body, no attributes, and no builtin attributes
5211 then it's just a sub declaration, and we may be able to get away with
5212 storing with a placeholder scalar in the symbol table, rather than a
5213 full GV and CV. If anything is present then it will take a full CV to
5215 const I32 gv_fetch_flags
5216 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5218 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
5219 const char * const name = o ? SvPV_nolen_const(cSVOPo->op_sv) : NULL;
5222 assert(proto->op_type == OP_CONST);
5223 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
5228 if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
5229 SV * const sv = sv_newmortal();
5230 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
5231 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
5232 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
5233 aname = SvPVX_const(sv);
5238 gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV)
5239 : gv_fetchpv(aname ? aname
5240 : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5241 gv_fetch_flags, SVt_PVCV);
5243 if (!PL_madskills) {
5252 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
5253 maximum a prototype before. */
5254 if (SvTYPE(gv) > SVt_NULL) {
5255 if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
5256 && ckWARN_d(WARN_PROTOTYPE))
5258 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
5260 cv_ckproto_len((CV*)gv, NULL, ps, ps_len);
5263 sv_setpvn((SV*)gv, ps, ps_len);
5265 sv_setiv((SV*)gv, -1);
5267 SvREFCNT_dec(PL_compcv);
5268 cv = PL_compcv = NULL;
5272 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
5274 #ifdef GV_UNIQUE_CHECK
5275 if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
5276 Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
5280 if (!block || !ps || *ps || attrs
5281 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
5283 || block->op_type == OP_NULL
5288 const_sv = op_const_sv(block, NULL);
5291 const bool exists = CvROOT(cv) || CvXSUB(cv);
5293 #ifdef GV_UNIQUE_CHECK
5294 if (exists && GvUNIQUE(gv)) {
5295 Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
5299 /* if the subroutine doesn't exist and wasn't pre-declared
5300 * with a prototype, assume it will be AUTOLOADed,
5301 * skipping the prototype check
5303 if (exists || SvPOK(cv))
5304 cv_ckproto_len(cv, gv, ps, ps_len);
5305 /* already defined (or promised)? */
5306 if (exists || GvASSUMECV(gv)) {
5309 || block->op_type == OP_NULL
5312 if (CvFLAGS(PL_compcv)) {
5313 /* might have had built-in attrs applied */
5314 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5316 /* just a "sub foo;" when &foo is already defined */
5317 SAVEFREESV(PL_compcv);
5322 && block->op_type != OP_NULL
5325 if (ckWARN(WARN_REDEFINE)
5327 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
5329 const line_t oldline = CopLINE(PL_curcop);
5330 if (PL_parser && PL_parser->copline != NOLINE)
5331 CopLINE_set(PL_curcop, PL_parser->copline);
5332 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5333 CvCONST(cv) ? "Constant subroutine %s redefined"
5334 : "Subroutine %s redefined", name);
5335 CopLINE_set(PL_curcop, oldline);
5338 if (!PL_minus_c) /* keep old one around for madskills */
5341 /* (PL_madskills unset in used file.) */
5349 SvREFCNT_inc_simple_void_NN(const_sv);
5351 assert(!CvROOT(cv) && !CvCONST(cv));
5352 sv_setpvn((SV*)cv, "", 0); /* prototype is "" */
5353 CvXSUBANY(cv).any_ptr = const_sv;
5354 CvXSUB(cv) = const_sv_xsub;
5360 cv = newCONSTSUB(NULL, name, const_sv);
5362 mro_method_changed_in( /* sub Foo::Bar () { 123 } */
5363 (CvGV(cv) && GvSTASH(CvGV(cv)))
5372 SvREFCNT_dec(PL_compcv);
5380 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
5381 * before we clobber PL_compcv.
5385 || block->op_type == OP_NULL
5389 /* Might have had built-in attributes applied -- propagate them. */
5390 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
5391 if (CvGV(cv) && GvSTASH(CvGV(cv)))
5392 stash = GvSTASH(CvGV(cv));
5393 else if (CvSTASH(cv))
5394 stash = CvSTASH(cv);
5396 stash = PL_curstash;
5399 /* possibly about to re-define existing subr -- ignore old cv */
5400 rcv = (SV*)PL_compcv;
5401 if (name && GvSTASH(gv))
5402 stash = GvSTASH(gv);
5404 stash = PL_curstash;
5406 apply_attrs(stash, rcv, attrs, FALSE);
5408 if (cv) { /* must reuse cv if autoloaded */
5415 || block->op_type == OP_NULL) && !PL_madskills
5418 /* got here with just attrs -- work done, so bug out */
5419 SAVEFREESV(PL_compcv);
5422 /* transfer PL_compcv to cv */
5424 CvFLAGS(cv) = CvFLAGS(PL_compcv);
5425 if (!CvWEAKOUTSIDE(cv))
5426 SvREFCNT_dec(CvOUTSIDE(cv));
5427 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
5428 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
5429 CvOUTSIDE(PL_compcv) = 0;
5430 CvPADLIST(cv) = CvPADLIST(PL_compcv);
5431 CvPADLIST(PL_compcv) = 0;
5432 /* inner references to PL_compcv must be fixed up ... */
5433 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
5434 /* ... before we throw it away */
5435 SvREFCNT_dec(PL_compcv);
5437 if (PERLDB_INTER)/* Advice debugger on the new sub. */
5438 ++PL_sub_generation;
5445 if (strEQ(name, "import")) {
5446 PL_formfeed = (SV*)cv;
5447 Perl_warner(aTHX_ packWARN(WARN_VOID), "%lx\n", (long)cv);
5451 mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar { (shift)+1 } */
5455 CvFILE_set_from_cop(cv, PL_curcop);
5456 CvSTASH(cv) = PL_curstash;
5459 sv_setpvn((SV*)cv, ps, ps_len);
5461 if (PL_parser && PL_parser->error_count) {
5465 const char *s = strrchr(name, ':');
5467 if (strEQ(s, "BEGIN")) {
5468 const char not_safe[] =
5469 "BEGIN not safe after errors--compilation aborted";
5470 if (PL_in_eval & EVAL_KEEPERR)
5471 Perl_croak(aTHX_ not_safe);
5473 /* force display of errors found but not reported */
5474 sv_catpv(ERRSV, not_safe);
5475 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
5485 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
5486 mod(scalarseq(block), OP_LEAVESUBLV));
5487 block->op_attached = 1;
5490 /* This makes sub {}; work as expected. */
5491 if (block->op_type == OP_STUB) {
5492 OP* const newblock = newSTATEOP(0, NULL, 0);
5494 op_getmad(block,newblock,'B');
5501 block->op_attached = 1;
5502 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
5504 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5505 OpREFCNT_set(CvROOT(cv), 1);
5506 CvSTART(cv) = LINKLIST(CvROOT(cv));
5507 CvROOT(cv)->op_next = 0;
5508 CALL_PEEP(CvSTART(cv));
5510 /* now that optimizer has done its work, adjust pad values */
5512 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
5515 assert(!CvCONST(cv));
5516 if (ps && !*ps && op_const_sv(block, cv))
5520 if (name || aname) {
5521 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
5522 SV * const sv = newSV(0);
5523 SV * const tmpstr = sv_newmortal();
5524 GV * const db_postponed = gv_fetchpvs("DB::postponed",
5525 GV_ADDMULTI, SVt_PVHV);
5528 Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
5530 (long)PL_subline, (long)CopLINE(PL_curcop));
5531 gv_efullname3(tmpstr, gv, NULL);
5532 hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), SvCUR(tmpstr), sv, 0);
5533 hv = GvHVn(db_postponed);
5534 if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
5535 CV * const pcv = GvCV(db_postponed);
5541 call_sv((SV*)pcv, G_DISCARD);
5546 if (name && ! (PL_parser && PL_parser->error_count))
5547 process_special_blocks(name, gv, cv);
5552 PL_parser->copline = NOLINE;
5558 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
5561 const char *const colon = strrchr(fullname,':');
5562 const char *const name = colon ? colon + 1 : fullname;
5565 if (strEQ(name, "BEGIN")) {
5566 const I32 oldscope = PL_scopestack_ix;
5568 SAVECOPFILE(&PL_compiling);
5569 SAVECOPLINE(&PL_compiling);
5571 DEBUG_x( dump_sub(gv) );
5572 Perl_av_create_and_push(aTHX_ &PL_beginav, (SV*)cv);
5573 GvCV(gv) = 0; /* cv has been hijacked */
5574 call_list(oldscope, PL_beginav);
5576 PL_curcop = &PL_compiling;
5577 CopHINTS_set(&PL_compiling, PL_hints);
5584 if strEQ(name, "END") {
5585 DEBUG_x( dump_sub(gv) );
5586 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, (SV*)cv);
5589 } else if (*name == 'U') {
5590 if (strEQ(name, "UNITCHECK")) {
5591 /* It's never too late to run a unitcheck block */
5592 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, (SV*)cv);
5596 } else if (*name == 'C') {
5597 if (strEQ(name, "CHECK")) {
5598 if (PL_main_start && ckWARN(WARN_VOID))
5599 Perl_warner(aTHX_ packWARN(WARN_VOID),
5600 "Too late to run CHECK block");
5601 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, (SV*)cv);
5605 } else if (*name == 'I') {
5606 if (strEQ(name, "INIT")) {
5607 if (PL_main_start && ckWARN(WARN_VOID))
5608 Perl_warner(aTHX_ packWARN(WARN_VOID),
5609 "Too late to run INIT block");
5610 Perl_av_create_and_push(aTHX_ &PL_initav, (SV*)cv);
5616 DEBUG_x( dump_sub(gv) );
5617 GvCV(gv) = 0; /* cv has been hijacked */
5622 =for apidoc newCONSTSUB
5624 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
5625 eligible for inlining at compile-time.
5631 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
5636 const char *const temp_p = CopFILE(PL_curcop);
5637 const STRLEN len = temp_p ? strlen(temp_p) : 0;
5639 SV *const temp_sv = CopFILESV(PL_curcop);
5641 const char *const temp_p = temp_sv ? SvPV_const(temp_sv, len) : NULL;
5643 char *const file = savepvn(temp_p, temp_p ? len : 0);
5647 SAVECOPLINE(PL_curcop);
5648 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
5651 PL_hints &= ~HINT_BLOCK_SCOPE;
5654 SAVESPTR(PL_curstash);
5655 SAVECOPSTASH(PL_curcop);
5656 PL_curstash = stash;
5657 CopSTASH_set(PL_curcop,stash);
5660 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
5661 and so doesn't get free()d. (It's expected to be from the C pre-
5662 processor __FILE__ directive). But we need a dynamically allocated one,
5663 and we need it to get freed. */
5664 cv = newXS_flags(name, const_sv_xsub, file, "", XS_DYNAMIC_FILENAME);
5665 CvXSUBANY(cv).any_ptr = sv;
5671 CopSTASH_free(PL_curcop);
5679 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
5680 const char *const filename, const char *const proto,
5683 CV *cv = newXS(name, subaddr, filename);
5685 if (flags & XS_DYNAMIC_FILENAME) {
5686 /* We need to "make arrangements" (ie cheat) to ensure that the
5687 filename lasts as long as the PVCV we just created, but also doesn't
5689 STRLEN filename_len = strlen(filename);
5690 STRLEN proto_and_file_len = filename_len;
5691 char *proto_and_file;
5695 proto_len = strlen(proto);
5696 proto_and_file_len += proto_len;
5698 Newx(proto_and_file, proto_and_file_len + 1, char);
5699 Copy(proto, proto_and_file, proto_len, char);
5700 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
5703 proto_and_file = savepvn(filename, filename_len);
5706 /* This gets free()d. :-) */
5707 sv_usepvn_flags((SV*)cv, proto_and_file, proto_and_file_len,
5708 SV_HAS_TRAILING_NUL);
5710 /* This gives us the correct prototype, rather than one with the
5711 file name appended. */
5712 SvCUR_set(cv, proto_len);
5716 CvFILE(cv) = proto_and_file + proto_len;
5718 sv_setpv((SV *)cv, proto);
5724 =for apidoc U||newXS
5726 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
5727 static storage, as it is used directly as CvFILE(), without a copy being made.
5733 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
5736 GV * const gv = gv_fetchpv(name ? name :
5737 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
5738 GV_ADDMULTI, SVt_PVCV);
5742 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
5744 if ((cv = (name ? GvCV(gv) : NULL))) {
5746 /* just a cached method */
5750 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
5751 /* already defined (or promised) */
5752 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
5753 if (ckWARN(WARN_REDEFINE)) {
5754 GV * const gvcv = CvGV(cv);
5756 HV * const stash = GvSTASH(gvcv);
5758 const char *redefined_name = HvNAME_get(stash);
5759 if ( strEQ(redefined_name,"autouse") ) {
5760 const line_t oldline = CopLINE(PL_curcop);
5761 if (PL_parser && PL_parser->copline != NOLINE)
5762 CopLINE_set(PL_curcop, PL_parser->copline);
5763 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5764 CvCONST(cv) ? "Constant subroutine %s redefined"
5765 : "Subroutine %s redefined"
5767 CopLINE_set(PL_curcop, oldline);
5777 if (cv) /* must reuse cv if autoloaded */
5780 cv = (CV*)newSV_type(SVt_PVCV);
5784 mro_method_changed_in(GvSTASH(gv)); /* newXS */
5788 (void)gv_fetchfile(filename);
5789 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
5790 an external constant string */
5792 CvXSUB(cv) = subaddr;
5795 process_special_blocks(name, gv, cv);
5807 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
5812 OP* pegop = newOP(OP_NULL, 0);
5816 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
5817 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
5819 #ifdef GV_UNIQUE_CHECK
5821 Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
5825 if ((cv = GvFORM(gv))) {
5826 if (ckWARN(WARN_REDEFINE)) {
5827 const line_t oldline = CopLINE(PL_curcop);
5828 if (PL_parser && PL_parser->copline != NOLINE)
5829 CopLINE_set(PL_curcop, PL_parser->copline);
5830 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
5831 o ? "Format %"SVf" redefined"
5832 : "Format STDOUT redefined", SVfARG(cSVOPo->op_sv));
5833 CopLINE_set(PL_curcop, oldline);
5840 CvFILE_set_from_cop(cv, PL_curcop);
5843 pad_tidy(padtidy_FORMAT);
5844 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
5845 CvROOT(cv)->op_private |= OPpREFCOUNTED;
5846 OpREFCNT_set(CvROOT(cv), 1);
5847 CvSTART(cv) = LINKLIST(CvROOT(cv));
5848 CvROOT(cv)->op_next = 0;
5849 CALL_PEEP(CvSTART(cv));
5851 op_getmad(o,pegop,'n');
5852 op_getmad_weak(block, pegop, 'b');
5857 PL_parser->copline = NOLINE;
5865 Perl_newANONLIST(pTHX_ OP *o)
5867 return convert(OP_ANONLIST, OPf_SPECIAL, o);
5871 Perl_newANONHASH(pTHX_ OP *o)
5873 return convert(OP_ANONHASH, OPf_SPECIAL, o);
5877 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
5879 return newANONATTRSUB(floor, proto, NULL, block);
5883 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
5885 return newUNOP(OP_REFGEN, 0,
5886 newSVOP(OP_ANONCODE, 0,
5887 (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
5891 Perl_oopsAV(pTHX_ OP *o)
5894 switch (o->op_type) {
5896 o->op_type = OP_PADAV;
5897 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5898 return ref(o, OP_RV2AV);
5901 o->op_type = OP_RV2AV;
5902 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
5907 if (ckWARN_d(WARN_INTERNAL))
5908 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
5915 Perl_oopsHV(pTHX_ OP *o)
5918 switch (o->op_type) {
5921 o->op_type = OP_PADHV;
5922 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5923 return ref(o, OP_RV2HV);
5927 o->op_type = OP_RV2HV;
5928 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
5933 if (ckWARN_d(WARN_INTERNAL))
5934 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
5941 Perl_newAVREF(pTHX_ OP *o)
5944 if (o->op_type == OP_PADANY) {
5945 o->op_type = OP_PADAV;
5946 o->op_ppaddr = PL_ppaddr[OP_PADAV];
5949 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)
5950 && ckWARN(WARN_DEPRECATED)) {
5951 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5952 "Using an array as a reference is deprecated");
5954 return newUNOP(OP_RV2AV, 0, scalar(o));
5958 Perl_newGVREF(pTHX_ I32 type, OP *o)
5960 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
5961 return newUNOP(OP_NULL, 0, o);
5962 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
5966 Perl_newHVREF(pTHX_ OP *o)
5969 if (o->op_type == OP_PADANY) {
5970 o->op_type = OP_PADHV;
5971 o->op_ppaddr = PL_ppaddr[OP_PADHV];
5974 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)
5975 && ckWARN(WARN_DEPRECATED)) {
5976 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
5977 "Using a hash as a reference is deprecated");
5979 return newUNOP(OP_RV2HV, 0, scalar(o));
5983 Perl_newCVREF(pTHX_ I32 flags, OP *o)
5985 return newUNOP(OP_RV2CV, flags, scalar(o));
5989 Perl_newSVREF(pTHX_ OP *o)
5992 if (o->op_type == OP_PADANY) {
5993 o->op_type = OP_PADSV;
5994 o->op_ppaddr = PL_ppaddr[OP_PADSV];
5997 return newUNOP(OP_RV2SV, 0, scalar(o));
6000 /* Check routines. See the comments at the top of this file for details
6001 * on when these are called */
6004 Perl_ck_anoncode(pTHX_ OP *o)
6006 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
6008 cSVOPo->op_sv = NULL;
6013 Perl_ck_bitop(pTHX_ OP *o)
6016 #define OP_IS_NUMCOMPARE(op) \
6017 ((op) == OP_LT || (op) == OP_I_LT || \
6018 (op) == OP_GT || (op) == OP_I_GT || \
6019 (op) == OP_LE || (op) == OP_I_LE || \
6020 (op) == OP_GE || (op) == OP_I_GE || \
6021 (op) == OP_EQ || (op) == OP_I_EQ || \
6022 (op) == OP_NE || (op) == OP_I_NE || \
6023 (op) == OP_NCMP || (op) == OP_I_NCMP)
6024 o->op_private = (U8)(PL_hints & HINT_INTEGER);
6025 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
6026 && (o->op_type == OP_BIT_OR
6027 || o->op_type == OP_BIT_AND
6028 || o->op_type == OP_BIT_XOR))
6030 const OP * const left = cBINOPo->op_first;
6031 const OP * const right = left->op_sibling;
6032 if ((OP_IS_NUMCOMPARE(left->op_type) &&
6033 (left->op_flags & OPf_PARENS) == 0) ||
6034 (OP_IS_NUMCOMPARE(right->op_type) &&
6035 (right->op_flags & OPf_PARENS) == 0))
6036 if (ckWARN(WARN_PRECEDENCE))
6037 Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
6038 "Possible precedence problem on bitwise %c operator",
6039 o->op_type == OP_BIT_OR ? '|'
6040 : o->op_type == OP_BIT_AND ? '&' : '^'
6047 Perl_ck_concat(pTHX_ OP *o)
6049 const OP * const kid = cUNOPo->op_first;
6050 PERL_UNUSED_CONTEXT;
6051 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
6052 !(kUNOP->op_first->op_flags & OPf_MOD))
6053 o->op_flags |= OPf_STACKED;
6058 Perl_ck_spair(pTHX_ OP *o)
6061 if (o->op_flags & OPf_KIDS) {
6064 const OPCODE type = o->op_type;
6065 o = modkids(ck_fun(o), type);
6066 kid = cUNOPo->op_first;
6067 newop = kUNOP->op_first->op_sibling;
6069 const OPCODE type = newop->op_type;
6070 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
6071 type == OP_PADAV || type == OP_PADHV ||
6072 type == OP_RV2AV || type == OP_RV2HV)
6076 op_getmad(kUNOP->op_first,newop,'K');
6078 op_free(kUNOP->op_first);
6080 kUNOP->op_first = newop;
6082 o->op_ppaddr = PL_ppaddr[++o->op_type];
6087 Perl_ck_delete(pTHX_ OP *o)
6091 if (o->op_flags & OPf_KIDS) {
6092 OP * const kid = cUNOPo->op_first;
6093 switch (kid->op_type) {
6095 o->op_flags |= OPf_SPECIAL;
6098 o->op_private |= OPpSLICE;
6101 o->op_flags |= OPf_SPECIAL;
6106 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
6115 Perl_ck_die(pTHX_ OP *o)
6118 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6124 Perl_ck_eof(pTHX_ OP *o)
6128 if (o->op_flags & OPf_KIDS) {
6129 if (cLISTOPo->op_first->op_type == OP_STUB) {
6131 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
6133 op_getmad(o,newop,'O');
6145 Perl_ck_eval(pTHX_ OP *o)
6148 PL_hints |= HINT_BLOCK_SCOPE;
6149 if (o->op_flags & OPf_KIDS) {
6150 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6153 o->op_flags &= ~OPf_KIDS;
6156 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
6162 cUNOPo->op_first = 0;
6167 NewOp(1101, enter, 1, LOGOP);
6168 enter->op_type = OP_ENTERTRY;
6169 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
6170 enter->op_private = 0;
6172 /* establish postfix order */
6173 enter->op_next = (OP*)enter;
6175 o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
6176 o->op_type = OP_LEAVETRY;
6177 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
6178 enter->op_other = o;
6179 op_getmad(oldo,o,'O');
6193 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
6194 op_getmad(oldo,o,'O');
6196 o->op_targ = (PADOFFSET)PL_hints;
6197 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
6198 /* Store a copy of %^H that pp_entereval can pick up.
6199 OPf_SPECIAL flags the opcode as being for this purpose,
6200 so that it in turn will return a copy at every
6202 OP *hhop = newSVOP(OP_CONST, OPf_SPECIAL,
6203 (SV*)Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)));
6204 cUNOPo->op_first->op_sibling = hhop;
6205 o->op_private |= OPpEVAL_HAS_HH;
6211 Perl_ck_exit(pTHX_ OP *o)
6214 HV * const table = GvHV(PL_hintgv);
6216 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
6217 if (svp && *svp && SvTRUE(*svp))
6218 o->op_private |= OPpEXIT_VMSISH;
6220 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
6226 Perl_ck_exec(pTHX_ OP *o)
6228 if (o->op_flags & OPf_STACKED) {
6231 kid = cUNOPo->op_first->op_sibling;
6232 if (kid->op_type == OP_RV2GV)
6241 Perl_ck_exists(pTHX_ OP *o)
6245 if (o->op_flags & OPf_KIDS) {
6246 OP * const kid = cUNOPo->op_first;
6247 if (kid->op_type == OP_ENTERSUB) {
6248 (void) ref(kid, o->op_type);
6249 if (kid->op_type != OP_RV2CV
6250 && !(PL_parser && PL_parser->error_count))
6251 Perl_croak(aTHX_ "%s argument is not a subroutine name",
6253 o->op_private |= OPpEXISTS_SUB;
6255 else if (kid->op_type == OP_AELEM)
6256 o->op_flags |= OPf_SPECIAL;
6257 else if (kid->op_type != OP_HELEM)
6258 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
6266 Perl_ck_rvconst(pTHX_ register OP *o)
6269 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6271 o->op_private |= (PL_hints & HINT_STRICT_REFS);
6272 if (o->op_type == OP_RV2CV)
6273 o->op_private &= ~1;
6275 if (kid->op_type == OP_CONST) {
6278 SV * const kidsv = kid->op_sv;
6280 /* Is it a constant from cv_const_sv()? */
6281 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
6282 SV * const rsv = SvRV(kidsv);
6283 const svtype type = SvTYPE(rsv);
6284 const char *badtype = NULL;
6286 switch (o->op_type) {
6288 if (type > SVt_PVMG)
6289 badtype = "a SCALAR";
6292 if (type != SVt_PVAV)
6293 badtype = "an ARRAY";
6296 if (type != SVt_PVHV)
6300 if (type != SVt_PVCV)
6305 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
6308 else if ((o->op_type == OP_RV2HV || o->op_type == OP_RV2SV) &&
6309 (PL_hints & HINT_STRICT_REFS) && SvPOK(kidsv)) {
6310 /* If this is an access to a stash, disable "strict refs", because
6311 * stashes aren't auto-vivified at compile-time (unless we store
6312 * symbols in them), and we don't want to produce a run-time
6313 * stricture error when auto-vivifying the stash. */
6314 const char *s = SvPV_nolen(kidsv);
6315 const STRLEN l = SvCUR(kidsv);
6316 if (l > 1 && s[l-1] == ':' && s[l-2] == ':')
6317 o->op_private &= ~HINT_STRICT_REFS;
6319 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
6320 const char *badthing;
6321 switch (o->op_type) {
6323 badthing = "a SCALAR";
6326 badthing = "an ARRAY";
6329 badthing = "a HASH";
6337 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
6338 SVfARG(kidsv), badthing);
6341 * This is a little tricky. We only want to add the symbol if we
6342 * didn't add it in the lexer. Otherwise we get duplicate strict
6343 * warnings. But if we didn't add it in the lexer, we must at
6344 * least pretend like we wanted to add it even if it existed before,
6345 * or we get possible typo warnings. OPpCONST_ENTERED says
6346 * whether the lexer already added THIS instance of this symbol.
6348 iscv = (o->op_type == OP_RV2CV) * 2;
6350 gv = gv_fetchsv(kidsv,
6351 iscv | !(kid->op_private & OPpCONST_ENTERED),
6354 : o->op_type == OP_RV2SV
6356 : o->op_type == OP_RV2AV
6358 : o->op_type == OP_RV2HV
6361 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
6363 kid->op_type = OP_GV;
6364 SvREFCNT_dec(kid->op_sv);
6366 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
6367 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
6368 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
6370 PAD_SETSV(kPADOP->op_padix, (SV*) SvREFCNT_inc_simple_NN(gv));
6372 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
6374 kid->op_private = 0;
6375 kid->op_ppaddr = PL_ppaddr[OP_GV];
6382 Perl_ck_ftst(pTHX_ OP *o)
6385 const I32 type = o->op_type;
6387 if (o->op_flags & OPf_REF) {
6390 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
6391 SVOP * const kid = (SVOP*)cUNOPo->op_first;
6392 const OPCODE kidtype = kid->op_type;
6394 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
6395 OP * const newop = newGVOP(type, OPf_REF,
6396 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
6398 op_getmad(o,newop,'O');
6404 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o))
6405 o->op_private |= OPpFT_ACCESS;
6406 if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst)
6407 && kidtype != OP_STAT && kidtype != OP_LSTAT)
6408 o->op_private |= OPpFT_STACKED;
6416 if (type == OP_FTTTY)
6417 o = newGVOP(type, OPf_REF, PL_stdingv);
6419 o = newUNOP(type, 0, newDEFSVOP());
6420 op_getmad(oldo,o,'O');
6426 Perl_ck_fun(pTHX_ OP *o)
6429 const int type = o->op_type;
6430 register I32 oa = PL_opargs[type] >> OASHIFT;
6432 if (o->op_flags & OPf_STACKED) {
6433 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
6436 return no_fh_allowed(o);
6439 if (o->op_flags & OPf_KIDS) {
6440 OP **tokid = &cLISTOPo->op_first;
6441 register OP *kid = cLISTOPo->op_first;
6445 if (kid->op_type == OP_PUSHMARK ||
6446 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
6448 tokid = &kid->op_sibling;
6449 kid = kid->op_sibling;
6451 if (!kid && PL_opargs[type] & OA_DEFGV)
6452 *tokid = kid = newDEFSVOP();
6456 sibl = kid->op_sibling;
6458 if (!sibl && kid->op_type == OP_STUB) {
6465 /* list seen where single (scalar) arg expected? */
6466 if (numargs == 1 && !(oa >> 4)
6467 && kid->op_type == OP_LIST && type != OP_SCALAR)
6469 return too_many_arguments(o,PL_op_desc[type]);
6482 if ((type == OP_PUSH || type == OP_UNSHIFT)
6483 && !kid->op_sibling && ckWARN(WARN_SYNTAX))
6484 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
6485 "Useless use of %s with no values",
6488 if (kid->op_type == OP_CONST &&
6489 (kid->op_private & OPpCONST_BARE))
6491 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
6492 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
6493 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6494 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6495 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
6496 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6498 op_getmad(kid,newop,'K');
6503 kid->op_sibling = sibl;
6506 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
6507 bad_type(numargs, "array", PL_op_desc[type], kid);
6511 if (kid->op_type == OP_CONST &&
6512 (kid->op_private & OPpCONST_BARE))
6514 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
6515 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
6516 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
6517 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6518 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
6519 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
6521 op_getmad(kid,newop,'K');
6526 kid->op_sibling = sibl;
6529 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
6530 bad_type(numargs, "hash", PL_op_desc[type], kid);
6535 OP * const newop = newUNOP(OP_NULL, 0, kid);
6536 kid->op_sibling = 0;
6538 newop->op_next = newop;
6540 kid->op_sibling = sibl;
6545 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
6546 if (kid->op_type == OP_CONST &&
6547 (kid->op_private & OPpCONST_BARE))
6549 OP * const newop = newGVOP(OP_GV, 0,
6550 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
6551 if (!(o->op_private & 1) && /* if not unop */
6552 kid == cLISTOPo->op_last)
6553 cLISTOPo->op_last = newop;
6555 op_getmad(kid,newop,'K');
6561 else if (kid->op_type == OP_READLINE) {
6562 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
6563 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
6566 I32 flags = OPf_SPECIAL;
6570 /* is this op a FH constructor? */
6571 if (is_handle_constructor(o,numargs)) {
6572 const char *name = NULL;
6576 /* Set a flag to tell rv2gv to vivify
6577 * need to "prove" flag does not mean something
6578 * else already - NI-S 1999/05/07
6581 if (kid->op_type == OP_PADSV) {
6583 = PAD_COMPNAME_SV(kid->op_targ);
6584 name = SvPV_const(namesv, len);
6586 else if (kid->op_type == OP_RV2SV
6587 && kUNOP->op_first->op_type == OP_GV)
6589 GV * const gv = cGVOPx_gv(kUNOP->op_first);
6591 len = GvNAMELEN(gv);
6593 else if (kid->op_type == OP_AELEM
6594 || kid->op_type == OP_HELEM)
6597 OP *op = ((BINOP*)kid)->op_first;
6601 const char * const a =
6602 kid->op_type == OP_AELEM ?
6604 if (((op->op_type == OP_RV2AV) ||
6605 (op->op_type == OP_RV2HV)) &&
6606 (firstop = ((UNOP*)op)->op_first) &&
6607 (firstop->op_type == OP_GV)) {
6608 /* packagevar $a[] or $h{} */
6609 GV * const gv = cGVOPx_gv(firstop);
6617 else if (op->op_type == OP_PADAV
6618 || op->op_type == OP_PADHV) {
6619 /* lexicalvar $a[] or $h{} */
6620 const char * const padname =
6621 PAD_COMPNAME_PV(op->op_targ);
6630 name = SvPV_const(tmpstr, len);
6635 name = "__ANONIO__";
6642 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
6643 namesv = PAD_SVl(targ);
6644 SvUPGRADE(namesv, SVt_PV);
6646 sv_setpvn(namesv, "$", 1);
6647 sv_catpvn(namesv, name, len);
6650 kid->op_sibling = 0;
6651 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
6652 kid->op_targ = targ;
6653 kid->op_private |= priv;
6655 kid->op_sibling = sibl;
6661 mod(scalar(kid), type);
6665 tokid = &kid->op_sibling;
6666 kid = kid->op_sibling;
6669 if (kid && kid->op_type != OP_STUB)
6670 return too_many_arguments(o,OP_DESC(o));
6671 o->op_private |= numargs;
6673 /* FIXME - should the numargs move as for the PERL_MAD case? */
6674 o->op_private |= numargs;
6676 return too_many_arguments(o,OP_DESC(o));
6680 else if (PL_opargs[type] & OA_DEFGV) {
6682 OP *newop = newUNOP(type, 0, newDEFSVOP());
6683 op_getmad(o,newop,'O');
6686 /* Ordering of these two is important to keep f_map.t passing. */
6688 return newUNOP(type, 0, newDEFSVOP());
6693 while (oa & OA_OPTIONAL)
6695 if (oa && oa != OA_LIST)
6696 return too_few_arguments(o,OP_DESC(o));
6702 Perl_ck_glob(pTHX_ OP *o)
6708 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
6709 append_elem(OP_GLOB, o, newDEFSVOP());
6711 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
6712 && GvCVu(gv) && GvIMPORTED_CV(gv)))
6714 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6717 #if !defined(PERL_EXTERNAL_GLOB)
6718 /* XXX this can be tightened up and made more failsafe. */
6719 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
6722 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
6723 newSVpvs("File::Glob"), NULL, NULL, NULL);
6724 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
6725 glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV);
6726 GvCV(gv) = GvCV(glob_gv);
6727 SvREFCNT_inc_void((SV*)GvCV(gv));
6728 GvIMPORTED_CV_on(gv);
6731 #endif /* PERL_EXTERNAL_GLOB */
6733 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
6734 append_elem(OP_GLOB, o,
6735 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
6736 o->op_type = OP_LIST;
6737 o->op_ppaddr = PL_ppaddr[OP_LIST];
6738 cLISTOPo->op_first->op_type = OP_PUSHMARK;
6739 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
6740 cLISTOPo->op_first->op_targ = 0;
6741 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
6742 append_elem(OP_LIST, o,
6743 scalar(newUNOP(OP_RV2CV, 0,
6744 newGVOP(OP_GV, 0, gv)))));
6745 o = newUNOP(OP_NULL, 0, ck_subr(o));
6746 o->op_targ = OP_GLOB; /* hint at what it used to be */
6749 gv = newGVgen("main");
6751 append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
6757 Perl_ck_grep(pTHX_ OP *o)
6762 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
6765 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
6766 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
6768 if (o->op_flags & OPf_STACKED) {
6771 kid = cLISTOPo->op_first->op_sibling;
6772 if (!cUNOPx(kid)->op_next)
6773 Perl_croak(aTHX_ "panic: ck_grep");
6774 for (k = cUNOPx(kid)->op_first; k; k = k->op_next) {
6777 NewOp(1101, gwop, 1, LOGOP);
6778 kid->op_next = (OP*)gwop;
6779 o->op_flags &= ~OPf_STACKED;
6781 kid = cLISTOPo->op_first->op_sibling;
6782 if (type == OP_MAPWHILE)
6787 if (PL_parser && PL_parser->error_count)
6789 kid = cLISTOPo->op_first->op_sibling;
6790 if (kid->op_type != OP_NULL)
6791 Perl_croak(aTHX_ "panic: ck_grep");
6792 kid = kUNOP->op_first;
6795 NewOp(1101, gwop, 1, LOGOP);
6796 gwop->op_type = type;
6797 gwop->op_ppaddr = PL_ppaddr[type];
6798 gwop->op_first = listkids(o);
6799 gwop->op_flags |= OPf_KIDS;
6800 gwop->op_other = LINKLIST(kid);
6801 kid->op_next = (OP*)gwop;
6802 offset = pad_findmy("$_");
6803 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
6804 o->op_private = gwop->op_private = 0;
6805 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
6808 o->op_private = gwop->op_private = OPpGREP_LEX;
6809 gwop->op_targ = o->op_targ = offset;
6812 kid = cLISTOPo->op_first->op_sibling;
6813 if (!kid || !kid->op_sibling)
6814 return too_few_arguments(o,OP_DESC(o));
6815 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
6816 mod(kid, OP_GREPSTART);
6822 Perl_ck_index(pTHX_ OP *o)
6824 if (o->op_flags & OPf_KIDS) {
6825 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
6827 kid = kid->op_sibling; /* get past "big" */
6828 if (kid && kid->op_type == OP_CONST)
6829 fbm_compile(((SVOP*)kid)->op_sv, 0);
6835 Perl_ck_lengthconst(pTHX_ OP *o)
6837 /* XXX length optimization goes here */
6842 Perl_ck_lfun(pTHX_ OP *o)
6844 const OPCODE type = o->op_type;
6845 return modkids(ck_fun(o), type);
6849 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
6851 if ((o->op_flags & OPf_KIDS) && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)) {
6852 switch (cUNOPo->op_first->op_type) {
6854 /* This is needed for
6855 if (defined %stash::)
6856 to work. Do not break Tk.
6858 break; /* Globals via GV can be undef */
6860 case OP_AASSIGN: /* Is this a good idea? */
6861 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6862 "defined(@array) is deprecated");
6863 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6864 "\t(Maybe you should just omit the defined()?)\n");
6867 /* This is needed for
6868 if (defined %stash::)
6869 to work. Do not break Tk.
6871 break; /* Globals via GV can be undef */
6873 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6874 "defined(%%hash) is deprecated");
6875 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
6876 "\t(Maybe you should just omit the defined()?)\n");
6887 Perl_ck_readline(pTHX_ OP *o)
6889 if (!(o->op_flags & OPf_KIDS)) {
6891 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
6893 op_getmad(o,newop,'O');
6903 Perl_ck_rfun(pTHX_ OP *o)
6905 const OPCODE type = o->op_type;
6906 return refkids(ck_fun(o), type);
6910 Perl_ck_listiob(pTHX_ OP *o)
6914 kid = cLISTOPo->op_first;
6917 kid = cLISTOPo->op_first;
6919 if (kid->op_type == OP_PUSHMARK)
6920 kid = kid->op_sibling;
6921 if (kid && o->op_flags & OPf_STACKED)
6922 kid = kid->op_sibling;
6923 else if (kid && !kid->op_sibling) { /* print HANDLE; */
6924 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
6925 o->op_flags |= OPf_STACKED; /* make it a filehandle */
6926 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
6927 cLISTOPo->op_first->op_sibling = kid;
6928 cLISTOPo->op_last = kid;
6929 kid = kid->op_sibling;
6934 append_elem(o->op_type, o, newDEFSVOP());
6940 Perl_ck_smartmatch(pTHX_ OP *o)
6943 if (0 == (o->op_flags & OPf_SPECIAL)) {
6944 OP *first = cBINOPo->op_first;
6945 OP *second = first->op_sibling;
6947 /* Implicitly take a reference to an array or hash */
6948 first->op_sibling = NULL;
6949 first = cBINOPo->op_first = ref_array_or_hash(first);
6950 second = first->op_sibling = ref_array_or_hash(second);
6952 /* Implicitly take a reference to a regular expression */
6953 if (first->op_type == OP_MATCH) {
6954 first->op_type = OP_QR;
6955 first->op_ppaddr = PL_ppaddr[OP_QR];
6957 if (second->op_type == OP_MATCH) {
6958 second->op_type = OP_QR;
6959 second->op_ppaddr = PL_ppaddr[OP_QR];
6968 Perl_ck_sassign(pTHX_ OP *o)
6970 OP * const kid = cLISTOPo->op_first;
6971 /* has a disposable target? */
6972 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
6973 && !(kid->op_flags & OPf_STACKED)
6974 /* Cannot steal the second time! */
6975 && !(kid->op_private & OPpTARGET_MY)
6976 /* Keep the full thing for madskills */
6980 OP * const kkid = kid->op_sibling;
6982 /* Can just relocate the target. */
6983 if (kkid && kkid->op_type == OP_PADSV
6984 && !(kkid->op_private & OPpLVAL_INTRO))
6986 kid->op_targ = kkid->op_targ;
6988 /* Now we do not need PADSV and SASSIGN. */
6989 kid->op_sibling = o->op_sibling; /* NULL */
6990 cLISTOPo->op_first = NULL;
6993 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
7001 Perl_ck_match(pTHX_ OP *o)
7004 if (o->op_type != OP_QR && PL_compcv) {
7005 const PADOFFSET offset = pad_findmy("$_");
7006 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
7007 o->op_targ = offset;
7008 o->op_private |= OPpTARGET_MY;
7011 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
7012 o->op_private |= OPpRUNTIME;
7017 Perl_ck_method(pTHX_ OP *o)
7019 OP * const kid = cUNOPo->op_first;
7020 if (kid->op_type == OP_CONST) {
7021 SV* sv = kSVOP->op_sv;
7022 const char * const method = SvPVX_const(sv);
7023 if (!(strchr(method, ':') || strchr(method, '\''))) {
7025 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
7026 sv = newSVpvn_share(method, SvCUR(sv), 0);
7029 kSVOP->op_sv = NULL;
7031 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
7033 op_getmad(o,cmop,'O');
7044 Perl_ck_null(pTHX_ OP *o)
7046 PERL_UNUSED_CONTEXT;
7051 Perl_ck_open(pTHX_ OP *o)
7054 HV * const table = GvHV(PL_hintgv);
7056 SV **svp = hv_fetchs(table, "open_IN", FALSE);
7058 const I32 mode = mode_from_discipline(*svp);
7059 if (mode & O_BINARY)
7060 o->op_private |= OPpOPEN_IN_RAW;
7061 else if (mode & O_TEXT)
7062 o->op_private |= OPpOPEN_IN_CRLF;
7065 svp = hv_fetchs(table, "open_OUT", FALSE);
7067 const I32 mode = mode_from_discipline(*svp);
7068 if (mode & O_BINARY)
7069 o->op_private |= OPpOPEN_OUT_RAW;
7070 else if (mode & O_TEXT)
7071 o->op_private |= OPpOPEN_OUT_CRLF;
7074 if (o->op_type == OP_BACKTICK) {
7075 if (!(o->op_flags & OPf_KIDS)) {
7076 OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
7078 op_getmad(o,newop,'O');
7087 /* In case of three-arg dup open remove strictness
7088 * from the last arg if it is a bareword. */
7089 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
7090 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
7094 if ((last->op_type == OP_CONST) && /* The bareword. */
7095 (last->op_private & OPpCONST_BARE) &&
7096 (last->op_private & OPpCONST_STRICT) &&
7097 (oa = first->op_sibling) && /* The fh. */
7098 (oa = oa->op_sibling) && /* The mode. */
7099 (oa->op_type == OP_CONST) &&
7100 SvPOK(((SVOP*)oa)->op_sv) &&
7101 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
7102 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
7103 (last == oa->op_sibling)) /* The bareword. */
7104 last->op_private &= ~OPpCONST_STRICT;
7110 Perl_ck_repeat(pTHX_ OP *o)
7112 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
7113 o->op_private |= OPpREPEAT_DOLIST;
7114 cBINOPo->op_first = force_list(cBINOPo->op_first);
7122 Perl_ck_require(pTHX_ OP *o)
7127 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
7128 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7130 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7131 SV * const sv = kid->op_sv;
7132 U32 was_readonly = SvREADONLY(sv);
7137 sv_force_normal_flags(sv, 0);
7138 assert(!SvREADONLY(sv));
7145 for (s = SvPVX(sv); *s; s++) {
7146 if (*s == ':' && s[1] == ':') {
7147 const STRLEN len = strlen(s+2)+1;
7149 Move(s+2, s+1, len, char);
7150 SvCUR_set(sv, SvCUR(sv) - 1);
7153 sv_catpvs(sv, ".pm");
7154 SvFLAGS(sv) |= was_readonly;
7158 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
7159 /* handle override, if any */
7160 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
7161 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7162 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
7163 gv = gvp ? *gvp : NULL;
7167 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7168 OP * const kid = cUNOPo->op_first;
7171 cUNOPo->op_first = 0;
7175 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
7176 append_elem(OP_LIST, kid,
7177 scalar(newUNOP(OP_RV2CV, 0,
7180 op_getmad(o,newop,'O');
7188 Perl_ck_return(pTHX_ OP *o)
7191 if (CvLVALUE(PL_compcv)) {
7193 for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
7194 mod(kid, OP_LEAVESUBLV);
7200 Perl_ck_select(pTHX_ OP *o)
7204 if (o->op_flags & OPf_KIDS) {
7205 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7206 if (kid && kid->op_sibling) {
7207 o->op_type = OP_SSELECT;
7208 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
7210 return fold_constants(o);
7214 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7215 if (kid && kid->op_type == OP_RV2GV)
7216 kid->op_private &= ~HINT_STRICT_REFS;
7221 Perl_ck_shift(pTHX_ OP *o)
7224 const I32 type = o->op_type;
7226 if (!(o->op_flags & OPf_KIDS)) {
7228 /* FIXME - this can be refactored to reduce code in #ifdefs */
7230 OP * const oldo = o;
7234 argop = newUNOP(OP_RV2AV, 0,
7235 scalar(newGVOP(OP_GV, 0, CvUNIQUE(PL_compcv) ? PL_argvgv : PL_defgv)));
7237 o = newUNOP(type, 0, scalar(argop));
7238 op_getmad(oldo,o,'O');
7241 return newUNOP(type, 0, scalar(argop));
7244 return scalar(modkids(ck_fun(o), type));
7248 Perl_ck_sort(pTHX_ OP *o)
7253 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
7254 HV * const hinthv = GvHV(PL_hintgv);
7256 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
7258 const I32 sorthints = (I32)SvIV(*svp);
7259 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
7260 o->op_private |= OPpSORT_QSORT;
7261 if ((sorthints & HINT_SORT_STABLE) != 0)
7262 o->op_private |= OPpSORT_STABLE;
7267 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
7269 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7270 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
7272 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
7274 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
7276 if (kid->op_type == OP_SCOPE) {
7280 else if (kid->op_type == OP_LEAVE) {
7281 if (o->op_type == OP_SORT) {
7282 op_null(kid); /* wipe out leave */
7285 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
7286 if (k->op_next == kid)
7288 /* don't descend into loops */
7289 else if (k->op_type == OP_ENTERLOOP
7290 || k->op_type == OP_ENTERITER)
7292 k = cLOOPx(k)->op_lastop;
7297 kid->op_next = 0; /* just disconnect the leave */
7298 k = kLISTOP->op_first;
7303 if (o->op_type == OP_SORT) {
7304 /* provide scalar context for comparison function/block */
7310 o->op_flags |= OPf_SPECIAL;
7312 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
7315 firstkid = firstkid->op_sibling;
7318 /* provide list context for arguments */
7319 if (o->op_type == OP_SORT)
7326 S_simplify_sort(pTHX_ OP *o)
7329 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7334 if (!(o->op_flags & OPf_STACKED))
7336 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
7337 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
7338 kid = kUNOP->op_first; /* get past null */
7339 if (kid->op_type != OP_SCOPE)
7341 kid = kLISTOP->op_last; /* get past scope */
7342 switch(kid->op_type) {
7350 k = kid; /* remember this node*/
7351 if (kBINOP->op_first->op_type != OP_RV2SV)
7353 kid = kBINOP->op_first; /* get past cmp */
7354 if (kUNOP->op_first->op_type != OP_GV)
7356 kid = kUNOP->op_first; /* get past rv2sv */
7358 if (GvSTASH(gv) != PL_curstash)
7360 gvname = GvNAME(gv);
7361 if (*gvname == 'a' && gvname[1] == '\0')
7363 else if (*gvname == 'b' && gvname[1] == '\0')
7368 kid = k; /* back to cmp */
7369 if (kBINOP->op_last->op_type != OP_RV2SV)
7371 kid = kBINOP->op_last; /* down to 2nd arg */
7372 if (kUNOP->op_first->op_type != OP_GV)
7374 kid = kUNOP->op_first; /* get past rv2sv */
7376 if (GvSTASH(gv) != PL_curstash)
7378 gvname = GvNAME(gv);
7380 ? !(*gvname == 'a' && gvname[1] == '\0')
7381 : !(*gvname == 'b' && gvname[1] == '\0'))
7383 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
7385 o->op_private |= OPpSORT_DESCEND;
7386 if (k->op_type == OP_NCMP)
7387 o->op_private |= OPpSORT_NUMERIC;
7388 if (k->op_type == OP_I_NCMP)
7389 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
7390 kid = cLISTOPo->op_first->op_sibling;
7391 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
7393 op_getmad(kid,o,'S'); /* then delete it */
7395 op_free(kid); /* then delete it */
7400 Perl_ck_split(pTHX_ OP *o)
7405 if (o->op_flags & OPf_STACKED)
7406 return no_fh_allowed(o);
7408 kid = cLISTOPo->op_first;
7409 if (kid->op_type != OP_NULL)
7410 Perl_croak(aTHX_ "panic: ck_split");
7411 kid = kid->op_sibling;
7412 op_free(cLISTOPo->op_first);
7413 cLISTOPo->op_first = kid;
7415 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
7416 cLISTOPo->op_last = kid; /* There was only one element previously */
7419 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
7420 OP * const sibl = kid->op_sibling;
7421 kid->op_sibling = 0;
7422 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
7423 if (cLISTOPo->op_first == cLISTOPo->op_last)
7424 cLISTOPo->op_last = kid;
7425 cLISTOPo->op_first = kid;
7426 kid->op_sibling = sibl;
7429 kid->op_type = OP_PUSHRE;
7430 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
7432 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL && ckWARN(WARN_REGEXP)) {
7433 Perl_warner(aTHX_ packWARN(WARN_REGEXP),
7434 "Use of /g modifier is meaningless in split");
7437 if (!kid->op_sibling)
7438 append_elem(OP_SPLIT, o, newDEFSVOP());
7440 kid = kid->op_sibling;
7443 if (!kid->op_sibling)
7444 append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
7445 assert(kid->op_sibling);
7447 kid = kid->op_sibling;
7450 if (kid->op_sibling)
7451 return too_many_arguments(o,OP_DESC(o));
7457 Perl_ck_join(pTHX_ OP *o)
7459 const OP * const kid = cLISTOPo->op_first->op_sibling;
7460 if (kid && kid->op_type == OP_MATCH) {
7461 if (ckWARN(WARN_SYNTAX)) {
7462 const REGEXP *re = PM_GETRE(kPMOP);
7463 const char *pmstr = re ? re->precomp : "STRING";
7464 const STRLEN len = re ? re->prelen : 6;
7465 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7466 "/%.*s/ should probably be written as \"%.*s\"",
7467 (int)len, pmstr, (int)len, pmstr);
7474 Perl_ck_subr(pTHX_ OP *o)
7477 OP *prev = ((cUNOPo->op_first->op_sibling)
7478 ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
7479 OP *o2 = prev->op_sibling;
7481 const char *proto = NULL;
7482 const char *proto_end = NULL;
7487 I32 contextclass = 0;
7488 const char *e = NULL;
7491 o->op_private |= OPpENTERSUB_HASTARG;
7492 for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
7493 if (cvop->op_type == OP_RV2CV) {
7495 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
7496 op_null(cvop); /* disable rv2cv */
7497 tmpop = (SVOP*)((UNOP*)cvop)->op_first;
7498 if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
7499 GV *gv = cGVOPx_gv(tmpop);
7502 tmpop->op_private |= OPpEARLY_CV;
7506 namegv = CvANON(cv) ? gv : CvGV(cv);
7507 proto = SvPV((SV*)cv, len);
7508 proto_end = proto + len;
7513 else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
7514 if (o2->op_type == OP_CONST)
7515 o2->op_private &= ~OPpCONST_STRICT;
7516 else if (o2->op_type == OP_LIST) {
7517 OP * const sib = ((UNOP*)o2)->op_first->op_sibling;
7518 if (sib && sib->op_type == OP_CONST)
7519 sib->op_private &= ~OPpCONST_STRICT;
7522 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7523 if (PERLDB_SUB && PL_curstash != PL_debstash)
7524 o->op_private |= OPpENTERSUB_DB;
7525 while (o2 != cvop) {
7527 if (PL_madskills && o2->op_type == OP_STUB) {
7528 o2 = o2->op_sibling;
7531 if (PL_madskills && o2->op_type == OP_NULL)
7532 o3 = ((UNOP*)o2)->op_first;
7536 if (proto >= proto_end)
7537 return too_many_arguments(o, gv_ename(namegv));
7545 /* _ must be at the end */
7546 if (proto[1] && proto[1] != ';')
7561 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
7563 arg == 1 ? "block or sub {}" : "sub {}",
7564 gv_ename(namegv), o3);
7567 /* '*' allows any scalar type, including bareword */
7570 if (o3->op_type == OP_RV2GV)
7571 goto wrapref; /* autoconvert GLOB -> GLOBref */
7572 else if (o3->op_type == OP_CONST)
7573 o3->op_private &= ~OPpCONST_STRICT;
7574 else if (o3->op_type == OP_ENTERSUB) {
7575 /* accidental subroutine, revert to bareword */
7576 OP *gvop = ((UNOP*)o3)->op_first;
7577 if (gvop && gvop->op_type == OP_NULL) {
7578 gvop = ((UNOP*)gvop)->op_first;
7580 for (; gvop->op_sibling; gvop = gvop->op_sibling)
7583 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
7584 (gvop = ((UNOP*)gvop)->op_first) &&
7585 gvop->op_type == OP_GV)
7587 GV * const gv = cGVOPx_gv(gvop);
7588 OP * const sibling = o2->op_sibling;
7589 SV * const n = newSVpvs("");
7591 OP * const oldo2 = o2;
7595 gv_fullname4(n, gv, "", FALSE);
7596 o2 = newSVOP(OP_CONST, 0, n);
7597 op_getmad(oldo2,o2,'O');
7598 prev->op_sibling = o2;
7599 o2->op_sibling = sibling;
7615 if (contextclass++ == 0) {
7616 e = strchr(proto, ']');
7617 if (!e || e == proto)
7626 const char *p = proto;
7627 const char *const end = proto;
7629 while (*--p != '[');
7630 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
7632 gv_ename(namegv), o3);
7637 if (o3->op_type == OP_RV2GV)
7640 bad_type(arg, "symbol", gv_ename(namegv), o3);
7643 if (o3->op_type == OP_ENTERSUB)
7646 bad_type(arg, "subroutine entry", gv_ename(namegv),
7650 if (o3->op_type == OP_RV2SV ||
7651 o3->op_type == OP_PADSV ||
7652 o3->op_type == OP_HELEM ||
7653 o3->op_type == OP_AELEM)
7656 bad_type(arg, "scalar", gv_ename(namegv), o3);
7659 if (o3->op_type == OP_RV2AV ||
7660 o3->op_type == OP_PADAV)
7663 bad_type(arg, "array", gv_ename(namegv), o3);
7666 if (o3->op_type == OP_RV2HV ||
7667 o3->op_type == OP_PADHV)
7670 bad_type(arg, "hash", gv_ename(namegv), o3);
7675 OP* const sib = kid->op_sibling;
7676 kid->op_sibling = 0;
7677 o2 = newUNOP(OP_REFGEN, 0, kid);
7678 o2->op_sibling = sib;
7679 prev->op_sibling = o2;
7681 if (contextclass && e) {
7696 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
7697 gv_ename(namegv), SVfARG(cv));
7702 mod(o2, OP_ENTERSUB);
7704 o2 = o2->op_sibling;
7706 if (o2 == cvop && proto && *proto == '_') {
7707 /* generate an access to $_ */
7709 o2->op_sibling = prev->op_sibling;
7710 prev->op_sibling = o2; /* instead of cvop */
7712 if (proto && !optional && proto_end > proto &&
7713 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
7714 return too_few_arguments(o, gv_ename(namegv));
7717 OP * const oldo = o;
7721 o=newSVOP(OP_CONST, 0, newSViv(0));
7722 op_getmad(oldo,o,'O');
7728 Perl_ck_svconst(pTHX_ OP *o)
7730 PERL_UNUSED_CONTEXT;
7731 SvREADONLY_on(cSVOPo->op_sv);
7736 Perl_ck_chdir(pTHX_ OP *o)
7738 if (o->op_flags & OPf_KIDS) {
7739 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7741 if (kid && kid->op_type == OP_CONST &&
7742 (kid->op_private & OPpCONST_BARE))
7744 o->op_flags |= OPf_SPECIAL;
7745 kid->op_private &= ~OPpCONST_STRICT;
7752 Perl_ck_trunc(pTHX_ OP *o)
7754 if (o->op_flags & OPf_KIDS) {
7755 SVOP *kid = (SVOP*)cUNOPo->op_first;
7757 if (kid->op_type == OP_NULL)
7758 kid = (SVOP*)kid->op_sibling;
7759 if (kid && kid->op_type == OP_CONST &&
7760 (kid->op_private & OPpCONST_BARE))
7762 o->op_flags |= OPf_SPECIAL;
7763 kid->op_private &= ~OPpCONST_STRICT;
7770 Perl_ck_unpack(pTHX_ OP *o)
7772 OP *kid = cLISTOPo->op_first;
7773 if (kid->op_sibling) {
7774 kid = kid->op_sibling;
7775 if (!kid->op_sibling)
7776 kid->op_sibling = newDEFSVOP();
7782 Perl_ck_substr(pTHX_ OP *o)
7785 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
7786 OP *kid = cLISTOPo->op_first;
7788 if (kid->op_type == OP_NULL)
7789 kid = kid->op_sibling;
7791 kid->op_flags |= OPf_MOD;
7797 /* A peephole optimizer. We visit the ops in the order they're to execute.
7798 * See the comments at the top of this file for more details about when
7799 * peep() is called */
7802 Perl_peep(pTHX_ register OP *o)
7805 register OP* oldop = NULL;
7807 if (!o || o->op_opt)
7811 SAVEVPTR(PL_curcop);
7812 for (; o; o = o->op_next) {
7815 /* By default, this op has now been optimised. A couple of cases below
7816 clear this again. */
7819 switch (o->op_type) {
7823 PL_curcop = ((COP*)o); /* for warnings */
7827 if (cSVOPo->op_private & OPpCONST_STRICT)
7828 no_bareword_allowed(o);
7830 case OP_METHOD_NAMED:
7831 /* Relocate sv to the pad for thread safety.
7832 * Despite being a "constant", the SV is written to,
7833 * for reference counts, sv_upgrade() etc. */
7835 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
7836 if (o->op_type == OP_CONST && SvPADTMP(cSVOPo->op_sv)) {
7837 /* If op_sv is already a PADTMP then it is being used by
7838 * some pad, so make a copy. */
7839 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
7840 SvREADONLY_on(PAD_SVl(ix));
7841 SvREFCNT_dec(cSVOPo->op_sv);
7843 else if (o->op_type == OP_CONST
7844 && cSVOPo->op_sv == &PL_sv_undef) {
7845 /* PL_sv_undef is hack - it's unsafe to store it in the
7846 AV that is the pad, because av_fetch treats values of
7847 PL_sv_undef as a "free" AV entry and will merrily
7848 replace them with a new SV, causing pad_alloc to think
7849 that this pad slot is free. (When, clearly, it is not)
7851 SvOK_off(PAD_SVl(ix));
7852 SvPADTMP_on(PAD_SVl(ix));
7853 SvREADONLY_on(PAD_SVl(ix));
7856 SvREFCNT_dec(PAD_SVl(ix));
7857 SvPADTMP_on(cSVOPo->op_sv);
7858 PAD_SETSV(ix, cSVOPo->op_sv);
7859 /* XXX I don't know how this isn't readonly already. */
7860 SvREADONLY_on(PAD_SVl(ix));
7862 cSVOPo->op_sv = NULL;
7869 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
7870 if (o->op_next->op_private & OPpTARGET_MY) {
7871 if (o->op_flags & OPf_STACKED) /* chained concats */
7872 break; /* ignore_optimization */
7874 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
7875 o->op_targ = o->op_next->op_targ;
7876 o->op_next->op_targ = 0;
7877 o->op_private |= OPpTARGET_MY;
7880 op_null(o->op_next);
7884 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
7885 break; /* Scalar stub must produce undef. List stub is noop */
7889 if (o->op_targ == OP_NEXTSTATE
7890 || o->op_targ == OP_DBSTATE
7891 || o->op_targ == OP_SETSTATE)
7893 PL_curcop = ((COP*)o);
7895 /* XXX: We avoid setting op_seq here to prevent later calls
7896 to peep() from mistakenly concluding that optimisation
7897 has already occurred. This doesn't fix the real problem,
7898 though (See 20010220.007). AMS 20010719 */
7899 /* op_seq functionality is now replaced by op_opt */
7906 if (oldop && o->op_next) {
7907 oldop->op_next = o->op_next;
7915 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
7916 OP* const pop = (o->op_type == OP_PADAV) ?
7917 o->op_next : o->op_next->op_next;
7919 if (pop && pop->op_type == OP_CONST &&
7920 ((PL_op = pop->op_next)) &&
7921 pop->op_next->op_type == OP_AELEM &&
7922 !(pop->op_next->op_private &
7923 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
7924 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
7929 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
7930 no_bareword_allowed(pop);
7931 if (o->op_type == OP_GV)
7932 op_null(o->op_next);
7933 op_null(pop->op_next);
7935 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
7936 o->op_next = pop->op_next->op_next;
7937 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
7938 o->op_private = (U8)i;
7939 if (o->op_type == OP_GV) {
7944 o->op_flags |= OPf_SPECIAL;
7945 o->op_type = OP_AELEMFAST;
7950 if (o->op_next->op_type == OP_RV2SV) {
7951 if (!(o->op_next->op_private & OPpDEREF)) {
7952 op_null(o->op_next);
7953 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
7955 o->op_next = o->op_next->op_next;
7956 o->op_type = OP_GVSV;
7957 o->op_ppaddr = PL_ppaddr[OP_GVSV];
7960 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
7961 GV * const gv = cGVOPo_gv;
7962 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
7963 /* XXX could check prototype here instead of just carping */
7964 SV * const sv = sv_newmortal();
7965 gv_efullname3(sv, gv, NULL);
7966 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
7967 "%"SVf"() called too early to check prototype",
7971 else if (o->op_next->op_type == OP_READLINE
7972 && o->op_next->op_next->op_type == OP_CONCAT
7973 && (o->op_next->op_next->op_flags & OPf_STACKED))
7975 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
7976 o->op_type = OP_RCATLINE;
7977 o->op_flags |= OPf_STACKED;
7978 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
7979 op_null(o->op_next->op_next);
7980 op_null(o->op_next);
7995 while (cLOGOP->op_other->op_type == OP_NULL)
7996 cLOGOP->op_other = cLOGOP->op_other->op_next;
7997 peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
8002 while (cLOOP->op_redoop->op_type == OP_NULL)
8003 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
8004 peep(cLOOP->op_redoop);
8005 while (cLOOP->op_nextop->op_type == OP_NULL)
8006 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
8007 peep(cLOOP->op_nextop);
8008 while (cLOOP->op_lastop->op_type == OP_NULL)
8009 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
8010 peep(cLOOP->op_lastop);
8014 assert(!(cPMOP->op_pmflags & PMf_ONCE));
8015 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
8016 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
8017 cPMOP->op_pmstashstartu.op_pmreplstart
8018 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
8019 peep(cPMOP->op_pmstashstartu.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;
8049 if (((BINOP*)o)->op_last->op_type != OP_CONST)
8052 /* Make the CONST have a shared SV */
8053 svp = cSVOPx_svp(((BINOP*)o)->op_last);
8054 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
8055 key = SvPV_const(sv, keylen);
8056 lexname = newSVpvn_share(key,
8057 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
8063 if ((o->op_private & (OPpLVAL_INTRO)))
8066 rop = (UNOP*)((BINOP*)o)->op_first;
8067 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
8069 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
8070 if (!SvPAD_TYPED(lexname))
8072 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8073 if (!fields || !GvHV(*fields))
8075 key = SvPV_const(*svp, keylen);
8076 if (!hv_fetch(GvHV(*fields), key,
8077 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8079 Perl_croak(aTHX_ "No such class field \"%s\" "
8080 "in variable %s of type %s",
8081 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
8094 SVOP *first_key_op, *key_op;
8096 if ((o->op_private & (OPpLVAL_INTRO))
8097 /* I bet there's always a pushmark... */
8098 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
8099 /* hmmm, no optimization if list contains only one key. */
8101 rop = (UNOP*)((LISTOP*)o)->op_last;
8102 if (rop->op_type != OP_RV2HV)
8104 if (rop->op_first->op_type == OP_PADSV)
8105 /* @$hash{qw(keys here)} */
8106 rop = (UNOP*)rop->op_first;
8108 /* @{$hash}{qw(keys here)} */
8109 if (rop->op_first->op_type == OP_SCOPE
8110 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
8112 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
8118 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
8119 if (!SvPAD_TYPED(lexname))
8121 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
8122 if (!fields || !GvHV(*fields))
8124 /* Again guessing that the pushmark can be jumped over.... */
8125 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
8126 ->op_first->op_sibling;
8127 for (key_op = first_key_op; key_op;
8128 key_op = (SVOP*)key_op->op_sibling) {
8129 if (key_op->op_type != OP_CONST)
8131 svp = cSVOPx_svp(key_op);
8132 key = SvPV_const(*svp, keylen);
8133 if (!hv_fetch(GvHV(*fields), key,
8134 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
8136 Perl_croak(aTHX_ "No such class field \"%s\" "
8137 "in variable %s of type %s",
8138 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
8145 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
8149 /* check that RHS of sort is a single plain array */
8150 OP *oright = cUNOPo->op_first;
8151 if (!oright || oright->op_type != OP_PUSHMARK)
8154 /* reverse sort ... can be optimised. */
8155 if (!cUNOPo->op_sibling) {
8156 /* Nothing follows us on the list. */
8157 OP * const reverse = o->op_next;
8159 if (reverse->op_type == OP_REVERSE &&
8160 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
8161 OP * const pushmark = cUNOPx(reverse)->op_first;
8162 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
8163 && (cUNOPx(pushmark)->op_sibling == o)) {
8164 /* reverse -> pushmark -> sort */
8165 o->op_private |= OPpSORT_REVERSE;
8167 pushmark->op_next = oright->op_next;
8173 /* make @a = sort @a act in-place */
8175 oright = cUNOPx(oright)->op_sibling;
8178 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
8179 oright = cUNOPx(oright)->op_sibling;
8183 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
8184 || oright->op_next != o
8185 || (oright->op_private & OPpLVAL_INTRO)
8189 /* o2 follows the chain of op_nexts through the LHS of the
8190 * assign (if any) to the aassign op itself */
8192 if (!o2 || o2->op_type != OP_NULL)
8195 if (!o2 || o2->op_type != OP_PUSHMARK)
8198 if (o2 && o2->op_type == OP_GV)
8201 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
8202 || (o2->op_private & OPpLVAL_INTRO)
8207 if (!o2 || o2->op_type != OP_NULL)
8210 if (!o2 || o2->op_type != OP_AASSIGN
8211 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
8214 /* check that the sort is the first arg on RHS of assign */
8216 o2 = cUNOPx(o2)->op_first;
8217 if (!o2 || o2->op_type != OP_NULL)
8219 o2 = cUNOPx(o2)->op_first;
8220 if (!o2 || o2->op_type != OP_PUSHMARK)
8222 if (o2->op_sibling != o)
8225 /* check the array is the same on both sides */
8226 if (oleft->op_type == OP_RV2AV) {
8227 if (oright->op_type != OP_RV2AV
8228 || !cUNOPx(oright)->op_first
8229 || cUNOPx(oright)->op_first->op_type != OP_GV
8230 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
8231 cGVOPx_gv(cUNOPx(oright)->op_first)
8235 else if (oright->op_type != OP_PADAV
8236 || oright->op_targ != oleft->op_targ
8240 /* transfer MODishness etc from LHS arg to RHS arg */
8241 oright->op_flags = oleft->op_flags;
8242 o->op_private |= OPpSORT_INPLACE;
8244 /* excise push->gv->rv2av->null->aassign */
8245 o2 = o->op_next->op_next;
8246 op_null(o2); /* PUSHMARK */
8248 if (o2->op_type == OP_GV) {
8249 op_null(o2); /* GV */
8252 op_null(o2); /* RV2AV or PADAV */
8253 o2 = o2->op_next->op_next;
8254 op_null(o2); /* AASSIGN */
8256 o->op_next = o2->op_next;
8262 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
8264 LISTOP *enter, *exlist;
8266 enter = (LISTOP *) o->op_next;
8269 if (enter->op_type == OP_NULL) {
8270 enter = (LISTOP *) enter->op_next;
8274 /* for $a (...) will have OP_GV then OP_RV2GV here.
8275 for (...) just has an OP_GV. */
8276 if (enter->op_type == OP_GV) {
8277 gvop = (OP *) enter;
8278 enter = (LISTOP *) enter->op_next;
8281 if (enter->op_type == OP_RV2GV) {
8282 enter = (LISTOP *) enter->op_next;
8288 if (enter->op_type != OP_ENTERITER)
8291 iter = enter->op_next;
8292 if (!iter || iter->op_type != OP_ITER)
8295 expushmark = enter->op_first;
8296 if (!expushmark || expushmark->op_type != OP_NULL
8297 || expushmark->op_targ != OP_PUSHMARK)
8300 exlist = (LISTOP *) expushmark->op_sibling;
8301 if (!exlist || exlist->op_type != OP_NULL
8302 || exlist->op_targ != OP_LIST)
8305 if (exlist->op_last != o) {
8306 /* Mmm. Was expecting to point back to this op. */
8309 theirmark = exlist->op_first;
8310 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
8313 if (theirmark->op_sibling != o) {
8314 /* There's something between the mark and the reverse, eg
8315 for (1, reverse (...))
8320 ourmark = ((LISTOP *)o)->op_first;
8321 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
8324 ourlast = ((LISTOP *)o)->op_last;
8325 if (!ourlast || ourlast->op_next != o)
8328 rv2av = ourmark->op_sibling;
8329 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
8330 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
8331 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
8332 /* We're just reversing a single array. */
8333 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
8334 enter->op_flags |= OPf_STACKED;
8337 /* We don't have control over who points to theirmark, so sacrifice
8339 theirmark->op_next = ourmark->op_next;
8340 theirmark->op_flags = ourmark->op_flags;
8341 ourlast->op_next = gvop ? gvop : (OP *) enter;
8344 enter->op_private |= OPpITER_REVERSED;
8345 iter->op_private |= OPpITER_REVERSED;
8352 UNOP *refgen, *rv2cv;
8355 if ((o->op_flags && OPf_WANT) != OPf_WANT_VOID)
8358 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
8361 rv2gv = ((BINOP *)o)->op_last;
8362 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
8365 refgen = (UNOP *)((BINOP *)o)->op_first;
8367 if (!refgen || refgen->op_type != OP_REFGEN)
8370 exlist = (LISTOP *)refgen->op_first;
8371 if (!exlist || exlist->op_type != OP_NULL
8372 || exlist->op_targ != OP_LIST)
8375 if (exlist->op_first->op_type != OP_PUSHMARK)
8378 rv2cv = (UNOP*)exlist->op_last;
8380 if (rv2cv->op_type != OP_RV2CV)
8383 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
8384 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
8385 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
8387 o->op_private |= OPpASSIGN_CV_TO_GV;
8388 rv2gv->op_private |= OPpDONT_INIT_GV;
8389 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
8397 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
8398 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
8408 Perl_custom_op_name(pTHX_ const OP* o)
8411 const IV index = PTR2IV(o->op_ppaddr);
8415 if (!PL_custom_op_names) /* This probably shouldn't happen */
8416 return (char *)PL_op_name[OP_CUSTOM];
8418 keysv = sv_2mortal(newSViv(index));
8420 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
8422 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
8424 return SvPV_nolen(HeVAL(he));
8428 Perl_custom_op_desc(pTHX_ const OP* o)
8431 const IV index = PTR2IV(o->op_ppaddr);
8435 if (!PL_custom_op_descs)
8436 return (char *)PL_op_desc[OP_CUSTOM];
8438 keysv = sv_2mortal(newSViv(index));
8440 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
8442 return (char *)PL_op_desc[OP_CUSTOM];
8444 return SvPV_nolen(HeVAL(he));
8449 /* Efficient sub that returns a constant scalar value. */
8451 const_sv_xsub(pTHX_ CV* cv)
8458 Perl_croak(aTHX_ "usage: %s::%s()",
8459 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
8463 ST(0) = (SV*)XSANY.any_ptr;
8469 * c-indentation-style: bsd
8471 * indent-tabs-mode: t
8474 * ex: set ts=8 sts=4 sw=4 noet: