4 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
5 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
13 * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
14 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
15 * youngest of the Old Took's daughters); and Mr. Drogo was his second
16 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
17 * either way, as the saying is, if you follow me.' --the Gaffer
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22 /* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
25 * A Perl program is compiled into a tree of OPs. Each op contains
26 * structural pointers (eg to its siblings and the next op in the
27 * execution sequence), a pointer to the function that would execute the
28 * op, plus any data specific to that op. For example, an OP_CONST op
29 * points to the pp_const() function and to an SV containing the constant
30 * value. When pp_const() is executed, its job is to push that SV onto the
33 * OPs are mainly created by the newFOO() functions, which are mainly
34 * called from the parser (in perly.y) as the code is parsed. For example
35 * the Perl code $a + $b * $c would cause the equivalent of the following
36 * to be called (oversimplifying a bit):
38 * newBINOP(OP_ADD, flags,
40 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
43 * Note that during the build of miniperl, a temporary copy of this file
44 * is made, called opmini.c.
48 Perl's compiler is essentially a 3-pass compiler with interleaved phases:
52 An execution-order pass
54 The bottom-up pass is represented by all the "newOP" routines and
55 the ck_ routines. The bottom-upness is actually driven by yacc.
56 So at the point that a ck_ routine fires, we have no idea what the
57 context is, either upward in the syntax tree, or either forward or
58 backward in the execution order. (The bottom-up parser builds that
59 part of the execution order it knows about, but if you follow the "next"
60 links around, you'll find it's actually a closed loop through the
63 Whenever the bottom-up parser gets to a node that supplies context to
64 its components, it invokes that portion of the top-down pass that applies
65 to that part of the subtree (and marks the top node as processed, so
66 if a node further up supplies context, it doesn't have to take the
67 plunge again). As a particular subcase of this, as the new node is
68 built, it takes all the closed execution loops of its subcomponents
69 and links them into a new closed loop for the higher level node. But
70 it's still not the real execution order.
72 The actual execution order is not known till we get a grammar reduction
73 to a top-level unit like a subroutine or file that will be called by
74 "name" rather than via a "next" pointer. At that point, we can call
75 into peep() to do that code's portion of the 3rd pass. It has to be
76 recursive, but it's recursive on basic blocks, not on tree nodes.
79 /* To implement user lexical pragmas, there needs to be a way at run time to
80 get the compile time state of %^H for that block. Storing %^H in every
81 block (or even COP) would be very expensive, so a different approach is
82 taken. The (running) state of %^H is serialised into a tree of HE-like
83 structs. Stores into %^H are chained onto the current leaf as a struct
84 refcounted_he * with the key and the value. Deletes from %^H are saved
85 with a value of PL_sv_placeholder. The state of %^H at any point can be
86 turned back into a regular HV by walking back up the tree from that point's
87 leaf, ignoring any key you've already seen (placeholder or not), storing
88 the rest into the HV structure, then removing the placeholders. Hence
89 memory is only used to store the %^H deltas from the enclosing COP, rather
90 than the entire %^H on each COP.
92 To cause actions on %^H to write out the serialisation records, it has
93 magic type 'H'. This magic (itself) does nothing, but its presence causes
94 the values to gain magic type 'h', which has entries for set and clear.
95 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
96 record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
97 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
98 it will be correctly restored when any inner compiling scope is exited.
104 #include "keywords.h"
107 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
108 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
109 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
111 #if defined(PL_OP_SLAB_ALLOC)
113 #ifdef PERL_DEBUG_READONLY_OPS
114 # define PERL_SLAB_SIZE 4096
115 # include <sys/mman.h>
118 #ifndef PERL_SLAB_SIZE
119 #define PERL_SLAB_SIZE 2048
123 Perl_Slab_Alloc(pTHX_ size_t sz)
127 * To make incrementing use count easy PL_OpSlab is an I32 *
128 * To make inserting the link to slab PL_OpPtr is I32 **
129 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
130 * Add an overhead for pointer to slab and round up as a number of pointers
132 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
133 if ((PL_OpSpace -= sz) < 0) {
134 #ifdef PERL_DEBUG_READONLY_OPS
135 /* We need to allocate chunk by chunk so that we can control the VM
137 PL_OpPtr = (I32**) mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
138 MAP_ANON|MAP_PRIVATE, -1, 0);
140 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
141 (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
143 if(PL_OpPtr == MAP_FAILED) {
144 perror("mmap failed");
149 PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*));
154 /* We reserve the 0'th I32 sized chunk as a use count */
155 PL_OpSlab = (I32 *) PL_OpPtr;
156 /* Reduce size by the use count word, and by the size we need.
157 * Latter is to mimic the '-=' in the if() above
159 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
160 /* Allocation pointer starts at the top.
161 Theory: because we build leaves before trunk allocating at end
162 means that at run time access is cache friendly upward
164 PL_OpPtr += PERL_SLAB_SIZE;
166 #ifdef PERL_DEBUG_READONLY_OPS
167 /* We remember this slab. */
168 /* This implementation isn't efficient, but it is simple. */
169 PL_slabs = (I32**) realloc(PL_slabs, sizeof(I32**) * (PL_slab_count + 1));
170 PL_slabs[PL_slab_count++] = PL_OpSlab;
171 DEBUG_m(PerlIO_printf(Perl_debug_log, "Allocate %p\n", PL_OpSlab));
174 assert( PL_OpSpace >= 0 );
175 /* Move the allocation pointer down */
177 assert( PL_OpPtr > (I32 **) PL_OpSlab );
178 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
179 (*PL_OpSlab)++; /* Increment use count of slab */
180 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
181 assert( *PL_OpSlab > 0 );
182 return (void *)(PL_OpPtr + 1);
185 #ifdef PERL_DEBUG_READONLY_OPS
187 Perl_pending_Slabs_to_ro(pTHX) {
188 /* Turn all the allocated op slabs read only. */
189 U32 count = PL_slab_count;
190 I32 **const slabs = PL_slabs;
192 /* Reset the array of pending OP slabs, as we're about to turn this lot
193 read only. Also, do it ahead of the loop in case the warn triggers,
194 and a warn handler has an eval */
199 /* Force a new slab for any further allocation. */
203 void *const start = slabs[count];
204 const size_t size = PERL_SLAB_SIZE* sizeof(I32*);
205 if(mprotect(start, size, PROT_READ)) {
206 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d",
207 start, (unsigned long) size, errno);
215 S_Slab_to_rw(pTHX_ void *op)
217 I32 * const * const ptr = (I32 **) op;
218 I32 * const slab = ptr[-1];
220 PERL_ARGS_ASSERT_SLAB_TO_RW;
222 assert( ptr-1 > (I32 **) slab );
223 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
225 if(mprotect(slab, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE)) {
226 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d",
227 slab, (unsigned long) PERL_SLAB_SIZE*sizeof(I32*), errno);
232 Perl_op_refcnt_inc(pTHX_ OP *o)
243 Perl_op_refcnt_dec(pTHX_ OP *o)
245 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
250 # define Slab_to_rw(op)
254 Perl_Slab_Free(pTHX_ void *op)
256 I32 * const * const ptr = (I32 **) op;
257 I32 * const slab = ptr[-1];
258 PERL_ARGS_ASSERT_SLAB_FREE;
259 assert( ptr-1 > (I32 **) slab );
260 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
263 if (--(*slab) == 0) {
265 # define PerlMemShared PerlMem
268 #ifdef PERL_DEBUG_READONLY_OPS
269 U32 count = PL_slab_count;
270 /* Need to remove this slab from our list of slabs */
273 if (PL_slabs[count] == slab) {
275 /* Found it. Move the entry at the end to overwrite it. */
276 DEBUG_m(PerlIO_printf(Perl_debug_log,
277 "Deallocate %p by moving %p from %lu to %lu\n",
279 PL_slabs[PL_slab_count - 1],
280 PL_slab_count, count));
281 PL_slabs[count] = PL_slabs[--PL_slab_count];
282 /* Could realloc smaller at this point, but probably not
284 if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
285 perror("munmap failed");
293 PerlMemShared_free(slab);
295 if (slab == PL_OpSlab) {
302 * In the following definition, the ", (OP*)0" is just to make the compiler
303 * think the expression is of the right type: croak actually does a Siglongjmp.
305 #define CHECKOP(type,o) \
306 ((PL_op_mask && PL_op_mask[type]) \
307 ? ( op_free((OP*)o), \
308 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
310 : PL_check[type](aTHX_ (OP*)o))
312 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
314 #define CHANGE_TYPE(o,type) \
316 o->op_type = (OPCODE)type; \
317 o->op_ppaddr = PL_ppaddr[type]; \
321 S_gv_ename(pTHX_ GV *gv)
323 SV* const tmpsv = sv_newmortal();
325 PERL_ARGS_ASSERT_GV_ENAME;
327 gv_efullname3(tmpsv, gv, NULL);
328 return SvPV_nolen_const(tmpsv);
332 S_no_fh_allowed(pTHX_ OP *o)
334 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
336 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
342 S_too_few_arguments(pTHX_ OP *o, const char *name)
344 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS;
346 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
351 S_too_many_arguments(pTHX_ OP *o, const char *name)
353 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS;
355 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
360 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
362 PERL_ARGS_ASSERT_BAD_TYPE;
364 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
365 (int)n, name, t, OP_DESC(kid)));
369 S_no_bareword_allowed(pTHX_ OP *o)
371 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
374 return; /* various ok barewords are hidden in extra OP_NULL */
375 qerror(Perl_mess(aTHX_
376 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
378 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
381 /* "register" allocation */
384 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
388 const bool is_our = (PL_parser->in_my == KEY_our);
390 PERL_ARGS_ASSERT_ALLOCMY;
392 if (flags & ~SVf_UTF8)
393 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
396 /* Until we're using the length for real, cross check that we're being
398 assert(strlen(name) == len);
400 /* complain about "my $<special_var>" etc etc */
404 ((flags & SVf_UTF8) && UTF8_IS_START(name[1])) ||
405 (name[1] == '_' && (*name == '$' || len > 2))))
407 /* name[2] is true if strlen(name) > 2 */
408 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
409 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
410 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
411 PL_parser->in_my == KEY_state ? "state" : "my"));
413 yyerror(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
414 PL_parser->in_my == KEY_state ? "state" : "my"));
418 /* allocate a spare slot and store the name in that slot */
420 off = pad_add_name_pvn(name, len,
421 (is_our ? padadd_OUR :
422 PL_parser->in_my == KEY_state ? padadd_STATE : 0)
423 | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ),
424 PL_parser->in_my_stash,
426 /* $_ is always in main::, even with our */
427 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
431 /* anon sub prototypes contains state vars should always be cloned,
432 * otherwise the state var would be shared between anon subs */
434 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
435 CvCLONE_on(PL_compcv);
440 /* free the body of an op without examining its contents.
441 * Always use this rather than FreeOp directly */
444 S_op_destroy(pTHX_ OP *o)
446 if (o->op_latefree) {
454 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
456 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
462 Perl_op_free(pTHX_ OP *o)
469 if (o->op_latefreed) {
476 if (o->op_private & OPpREFCOUNTED) {
487 refcnt = OpREFCNT_dec(o);
490 /* Need to find and remove any pattern match ops from the list
491 we maintain for reset(). */
492 find_and_forget_pmops(o);
502 /* Call the op_free hook if it has been set. Do it now so that it's called
503 * at the right time for refcounted ops, but still before all of the kids
507 if (o->op_flags & OPf_KIDS) {
508 register OP *kid, *nextkid;
509 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
510 nextkid = kid->op_sibling; /* Get before next freeing kid */
515 #ifdef PERL_DEBUG_READONLY_OPS
519 /* COP* is not cleared by op_clear() so that we may track line
520 * numbers etc even after null() */
521 if (type == OP_NEXTSTATE || type == OP_DBSTATE
522 || (type == OP_NULL /* the COP might have been null'ed */
523 && ((OPCODE)o->op_targ == OP_NEXTSTATE
524 || (OPCODE)o->op_targ == OP_DBSTATE))) {
529 type = (OPCODE)o->op_targ;
532 if (o->op_latefree) {
538 #ifdef DEBUG_LEAKING_SCALARS
545 Perl_op_clear(pTHX_ OP *o)
550 PERL_ARGS_ASSERT_OP_CLEAR;
553 mad_free(o->op_madprop);
558 switch (o->op_type) {
559 case OP_NULL: /* Was holding old type, if any. */
560 if (PL_madskills && o->op_targ != OP_NULL) {
561 o->op_type = (Optype)o->op_targ;
566 case OP_ENTEREVAL: /* Was holding hints. */
570 if (!(o->op_flags & OPf_REF)
571 || (PL_check[o->op_type] != Perl_ck_ftst))
578 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
583 /* It's possible during global destruction that the GV is freed
584 before the optree. Whilst the SvREFCNT_inc is happy to bump from
585 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
586 will trigger an assertion failure, because the entry to sv_clear
587 checks that the scalar is not already freed. A check of for
588 !SvIS_FREED(gv) turns out to be invalid, because during global
589 destruction the reference count can be forced down to zero
590 (with SVf_BREAK set). In which case raising to 1 and then
591 dropping to 0 triggers cleanup before it should happen. I
592 *think* that this might actually be a general, systematic,
593 weakness of the whole idea of SVf_BREAK, in that code *is*
594 allowed to raise and lower references during global destruction,
595 so any *valid* code that happens to do this during global
596 destruction might well trigger premature cleanup. */
597 bool still_valid = gv && SvREFCNT(gv);
600 SvREFCNT_inc_simple_void(gv);
602 if (cPADOPo->op_padix > 0) {
603 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
604 * may still exist on the pad */
605 pad_swipe(cPADOPo->op_padix, TRUE);
606 cPADOPo->op_padix = 0;
609 SvREFCNT_dec(cSVOPo->op_sv);
610 cSVOPo->op_sv = NULL;
613 int try_downgrade = SvREFCNT(gv) == 2;
616 gv_try_downgrade(gv);
620 case OP_METHOD_NAMED:
623 SvREFCNT_dec(cSVOPo->op_sv);
624 cSVOPo->op_sv = NULL;
627 Even if op_clear does a pad_free for the target of the op,
628 pad_free doesn't actually remove the sv that exists in the pad;
629 instead it lives on. This results in that it could be reused as
630 a target later on when the pad was reallocated.
633 pad_swipe(o->op_targ,1);
642 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
647 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
649 if (cPADOPo->op_padix > 0) {
650 pad_swipe(cPADOPo->op_padix, TRUE);
651 cPADOPo->op_padix = 0;
654 SvREFCNT_dec(cSVOPo->op_sv);
655 cSVOPo->op_sv = NULL;
659 PerlMemShared_free(cPVOPo->op_pv);
660 cPVOPo->op_pv = NULL;
664 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
668 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
669 /* No GvIN_PAD_off here, because other references may still
670 * exist on the pad */
671 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
674 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
680 forget_pmop(cPMOPo, 1);
681 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
682 /* we use the same protection as the "SAFE" version of the PM_ macros
683 * here since sv_clean_all might release some PMOPs
684 * after PL_regex_padav has been cleared
685 * and the clearing of PL_regex_padav needs to
686 * happen before sv_clean_all
689 if(PL_regex_pad) { /* We could be in destruction */
690 const IV offset = (cPMOPo)->op_pmoffset;
691 ReREFCNT_dec(PM_GETRE(cPMOPo));
692 PL_regex_pad[offset] = &PL_sv_undef;
693 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
697 ReREFCNT_dec(PM_GETRE(cPMOPo));
698 PM_SETRE(cPMOPo, NULL);
704 if (o->op_targ > 0) {
705 pad_free(o->op_targ);
711 S_cop_free(pTHX_ COP* cop)
713 PERL_ARGS_ASSERT_COP_FREE;
717 if (! specialWARN(cop->cop_warnings))
718 PerlMemShared_free(cop->cop_warnings);
719 cophh_free(CopHINTHASH_get(cop));
723 S_forget_pmop(pTHX_ PMOP *const o
729 HV * const pmstash = PmopSTASH(o);
731 PERL_ARGS_ASSERT_FORGET_PMOP;
733 if (pmstash && !SvIS_FREED(pmstash)) {
734 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
736 PMOP **const array = (PMOP**) mg->mg_ptr;
737 U32 count = mg->mg_len / sizeof(PMOP**);
742 /* Found it. Move the entry at the end to overwrite it. */
743 array[i] = array[--count];
744 mg->mg_len = count * sizeof(PMOP**);
745 /* Could realloc smaller at this point always, but probably
746 not worth it. Probably worth free()ing if we're the
749 Safefree(mg->mg_ptr);
766 S_find_and_forget_pmops(pTHX_ OP *o)
768 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
770 if (o->op_flags & OPf_KIDS) {
771 OP *kid = cUNOPo->op_first;
773 switch (kid->op_type) {
778 forget_pmop((PMOP*)kid, 0);
780 find_and_forget_pmops(kid);
781 kid = kid->op_sibling;
787 Perl_op_null(pTHX_ OP *o)
791 PERL_ARGS_ASSERT_OP_NULL;
793 if (o->op_type == OP_NULL)
797 o->op_targ = o->op_type;
798 o->op_type = OP_NULL;
799 o->op_ppaddr = PL_ppaddr[OP_NULL];
803 Perl_op_refcnt_lock(pTHX)
811 Perl_op_refcnt_unlock(pTHX)
818 /* Contextualizers */
821 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
823 Applies a syntactic context to an op tree representing an expression.
824 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
825 or C<G_VOID> to specify the context to apply. The modified op tree
832 Perl_op_contextualize(pTHX_ OP *o, I32 context)
834 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
836 case G_SCALAR: return scalar(o);
837 case G_ARRAY: return list(o);
838 case G_VOID: return scalarvoid(o);
840 Perl_croak(aTHX_ "panic: op_contextualize bad context %ld",
847 =head1 Optree Manipulation Functions
849 =for apidoc Am|OP*|op_linklist|OP *o
850 This function is the implementation of the L</LINKLIST> macro. It should
851 not be called directly.
857 Perl_op_linklist(pTHX_ OP *o)
861 PERL_ARGS_ASSERT_OP_LINKLIST;
866 /* establish postfix order */
867 first = cUNOPo->op_first;
870 o->op_next = LINKLIST(first);
873 if (kid->op_sibling) {
874 kid->op_next = LINKLIST(kid->op_sibling);
875 kid = kid->op_sibling;
889 S_scalarkids(pTHX_ OP *o)
891 if (o && o->op_flags & OPf_KIDS) {
893 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
900 S_scalarboolean(pTHX_ OP *o)
904 PERL_ARGS_ASSERT_SCALARBOOLEAN;
906 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
907 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
908 if (ckWARN(WARN_SYNTAX)) {
909 const line_t oldline = CopLINE(PL_curcop);
911 if (PL_parser && PL_parser->copline != NOLINE)
912 CopLINE_set(PL_curcop, PL_parser->copline);
913 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
914 CopLINE_set(PL_curcop, oldline);
921 Perl_scalar(pTHX_ OP *o)
926 /* assumes no premature commitment */
927 if (!o || (PL_parser && PL_parser->error_count)
928 || (o->op_flags & OPf_WANT)
929 || o->op_type == OP_RETURN)
934 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
936 switch (o->op_type) {
938 scalar(cBINOPo->op_first);
943 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
953 if (o->op_flags & OPf_KIDS) {
954 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
960 kid = cLISTOPo->op_first;
962 kid = kid->op_sibling;
965 OP *sib = kid->op_sibling;
966 if (sib && kid->op_type != OP_LEAVEWHEN)
972 PL_curcop = &PL_compiling;
977 kid = cLISTOPo->op_first;
980 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
987 Perl_scalarvoid(pTHX_ OP *o)
991 const char* useless = NULL;
992 U32 useless_is_utf8 = 0;
996 PERL_ARGS_ASSERT_SCALARVOID;
998 /* trailing mad null ops don't count as "there" for void processing */
1000 o->op_type != OP_NULL &&
1002 o->op_sibling->op_type == OP_NULL)
1005 for (sib = o->op_sibling;
1006 sib && sib->op_type == OP_NULL;
1007 sib = sib->op_sibling) ;
1013 if (o->op_type == OP_NEXTSTATE
1014 || o->op_type == OP_DBSTATE
1015 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1016 || o->op_targ == OP_DBSTATE)))
1017 PL_curcop = (COP*)o; /* for warning below */
1019 /* assumes no premature commitment */
1020 want = o->op_flags & OPf_WANT;
1021 if ((want && want != OPf_WANT_SCALAR)
1022 || (PL_parser && PL_parser->error_count)
1023 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1028 if ((o->op_private & OPpTARGET_MY)
1029 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1031 return scalar(o); /* As if inside SASSIGN */
1034 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1036 switch (o->op_type) {
1038 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1042 if (o->op_flags & OPf_STACKED)
1046 if (o->op_private == 4)
1071 case OP_AELEMFAST_LEX:
1090 case OP_GETSOCKNAME:
1091 case OP_GETPEERNAME:
1096 case OP_GETPRIORITY:
1121 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1122 /* Otherwise it's "Useless use of grep iterator" */
1123 useless = OP_DESC(o);
1127 kid = cLISTOPo->op_first;
1128 if (kid && kid->op_type == OP_PUSHRE
1130 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1132 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1134 useless = OP_DESC(o);
1138 kid = cUNOPo->op_first;
1139 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1140 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1143 useless = "negative pattern binding (!~)";
1147 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1148 useless = "non-destructive substitution (s///r)";
1152 useless = "non-destructive transliteration (tr///r)";
1159 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1160 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1161 useless = "a variable";
1166 if (cSVOPo->op_private & OPpCONST_STRICT)
1167 no_bareword_allowed(o);
1169 if (ckWARN(WARN_VOID)) {
1170 /* don't warn on optimised away booleans, eg
1171 * use constant Foo, 5; Foo || print; */
1172 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1174 /* the constants 0 and 1 are permitted as they are
1175 conventionally used as dummies in constructs like
1176 1 while some_condition_with_side_effects; */
1177 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1179 else if (SvPOK(sv)) {
1180 /* perl4's way of mixing documentation and code
1181 (before the invention of POD) was based on a
1182 trick to mix nroff and perl code. The trick was
1183 built upon these three nroff macros being used in
1184 void context. The pink camel has the details in
1185 the script wrapman near page 319. */
1186 const char * const maybe_macro = SvPVX_const(sv);
1187 if (strnEQ(maybe_macro, "di", 2) ||
1188 strnEQ(maybe_macro, "ds", 2) ||
1189 strnEQ(maybe_macro, "ig", 2))
1192 SV * const dsv = newSVpvs("");
1193 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1195 pv_pretty(dsv, maybe_macro, SvCUR(sv), 32, NULL, NULL,
1196 PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_NOCLEAR | PERL_PV_ESCAPE_UNI_DETECT )));
1198 useless = SvPV_nolen(msv);
1199 useless_is_utf8 = SvUTF8(msv);
1202 else if (SvOK(sv)) {
1203 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1204 "a constant (%"SVf")", sv));
1205 useless = SvPV_nolen(msv);
1208 useless = "a constant (undef)";
1211 op_null(o); /* don't execute or even remember it */
1215 o->op_type = OP_PREINC; /* pre-increment is faster */
1216 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1220 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1221 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1225 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1226 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1230 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1231 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1236 UNOP *refgen, *rv2cv;
1239 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
1242 rv2gv = ((BINOP *)o)->op_last;
1243 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
1246 refgen = (UNOP *)((BINOP *)o)->op_first;
1248 if (!refgen || refgen->op_type != OP_REFGEN)
1251 exlist = (LISTOP *)refgen->op_first;
1252 if (!exlist || exlist->op_type != OP_NULL
1253 || exlist->op_targ != OP_LIST)
1256 if (exlist->op_first->op_type != OP_PUSHMARK)
1259 rv2cv = (UNOP*)exlist->op_last;
1261 if (rv2cv->op_type != OP_RV2CV)
1264 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
1265 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
1266 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
1268 o->op_private |= OPpASSIGN_CV_TO_GV;
1269 rv2gv->op_private |= OPpDONT_INIT_GV;
1270 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
1282 kid = cLOGOPo->op_first;
1283 if (kid->op_type == OP_NOT
1284 && (kid->op_flags & OPf_KIDS)
1286 if (o->op_type == OP_AND) {
1288 o->op_ppaddr = PL_ppaddr[OP_OR];
1290 o->op_type = OP_AND;
1291 o->op_ppaddr = PL_ppaddr[OP_AND];
1300 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1305 if (o->op_flags & OPf_STACKED)
1312 if (!(o->op_flags & OPf_KIDS))
1323 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1333 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %"SVf" in void context",
1334 newSVpvn_flags(useless, strlen(useless),
1335 SVs_TEMP | ( useless_is_utf8 ? SVf_UTF8 : 0 )));
1340 S_listkids(pTHX_ OP *o)
1342 if (o && o->op_flags & OPf_KIDS) {
1344 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1351 Perl_list(pTHX_ OP *o)
1356 /* assumes no premature commitment */
1357 if (!o || (o->op_flags & OPf_WANT)
1358 || (PL_parser && PL_parser->error_count)
1359 || o->op_type == OP_RETURN)
1364 if ((o->op_private & OPpTARGET_MY)
1365 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1367 return o; /* As if inside SASSIGN */
1370 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1372 switch (o->op_type) {
1375 list(cBINOPo->op_first);
1380 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1388 if (!(o->op_flags & OPf_KIDS))
1390 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1391 list(cBINOPo->op_first);
1392 return gen_constant_list(o);
1399 kid = cLISTOPo->op_first;
1401 kid = kid->op_sibling;
1404 OP *sib = kid->op_sibling;
1405 if (sib && kid->op_type != OP_LEAVEWHEN)
1411 PL_curcop = &PL_compiling;
1415 kid = cLISTOPo->op_first;
1422 S_scalarseq(pTHX_ OP *o)
1426 const OPCODE type = o->op_type;
1428 if (type == OP_LINESEQ || type == OP_SCOPE ||
1429 type == OP_LEAVE || type == OP_LEAVETRY)
1432 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1433 if (kid->op_sibling) {
1437 PL_curcop = &PL_compiling;
1439 o->op_flags &= ~OPf_PARENS;
1440 if (PL_hints & HINT_BLOCK_SCOPE)
1441 o->op_flags |= OPf_PARENS;
1444 o = newOP(OP_STUB, 0);
1449 S_modkids(pTHX_ OP *o, I32 type)
1451 if (o && o->op_flags & OPf_KIDS) {
1453 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1454 op_lvalue(kid, type);
1460 =for apidoc finalize_optree
1462 This function finalizes the optree. Should be called directly after
1463 the complete optree is built. It does some additional
1464 checking which can't be done in the normal ck_xxx functions and makes
1465 the tree thread-safe.
1470 Perl_finalize_optree(pTHX_ OP* o)
1472 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
1475 SAVEVPTR(PL_curcop);
1483 S_finalize_op(pTHX_ OP* o)
1485 PERL_ARGS_ASSERT_FINALIZE_OP;
1487 #if defined(PERL_MAD) && defined(USE_ITHREADS)
1489 /* Make sure mad ops are also thread-safe */
1490 MADPROP *mp = o->op_madprop;
1492 if (mp->mad_type == MAD_OP && mp->mad_vlen) {
1493 OP *prop_op = (OP *) mp->mad_val;
1494 /* We only need "Relocate sv to the pad for thread safety.", but this
1495 easiest way to make sure it traverses everything */
1496 if (prop_op->op_type == OP_CONST)
1497 cSVOPx(prop_op)->op_private &= ~OPpCONST_STRICT;
1498 finalize_op(prop_op);
1505 switch (o->op_type) {
1508 PL_curcop = ((COP*)o); /* for warnings */
1512 && (o->op_sibling->op_type == OP_NEXTSTATE || o->op_sibling->op_type == OP_DBSTATE)
1513 && ckWARN(WARN_SYNTAX))
1515 if (o->op_sibling->op_sibling) {
1516 const OPCODE type = o->op_sibling->op_sibling->op_type;
1517 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
1518 const line_t oldline = CopLINE(PL_curcop);
1519 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_sibling));
1520 Perl_warner(aTHX_ packWARN(WARN_EXEC),
1521 "Statement unlikely to be reached");
1522 Perl_warner(aTHX_ packWARN(WARN_EXEC),
1523 "\t(Maybe you meant system() when you said exec()?)\n");
1524 CopLINE_set(PL_curcop, oldline);
1531 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
1532 GV * const gv = cGVOPo_gv;
1533 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
1534 /* XXX could check prototype here instead of just carping */
1535 SV * const sv = sv_newmortal();
1536 gv_efullname3(sv, gv, NULL);
1537 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
1538 "%"SVf"() called too early to check prototype",
1545 if (cSVOPo->op_private & OPpCONST_STRICT)
1546 no_bareword_allowed(o);
1550 case OP_METHOD_NAMED:
1551 /* Relocate sv to the pad for thread safety.
1552 * Despite being a "constant", the SV is written to,
1553 * for reference counts, sv_upgrade() etc. */
1554 if (cSVOPo->op_sv) {
1555 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
1556 if (o->op_type != OP_METHOD_NAMED &&
1557 (SvPADTMP(cSVOPo->op_sv) || SvPADMY(cSVOPo->op_sv)))
1559 /* If op_sv is already a PADTMP/MY then it is being used by
1560 * some pad, so make a copy. */
1561 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
1562 SvREADONLY_on(PAD_SVl(ix));
1563 SvREFCNT_dec(cSVOPo->op_sv);
1565 else if (o->op_type != OP_METHOD_NAMED
1566 && cSVOPo->op_sv == &PL_sv_undef) {
1567 /* PL_sv_undef is hack - it's unsafe to store it in the
1568 AV that is the pad, because av_fetch treats values of
1569 PL_sv_undef as a "free" AV entry and will merrily
1570 replace them with a new SV, causing pad_alloc to think
1571 that this pad slot is free. (When, clearly, it is not)
1573 SvOK_off(PAD_SVl(ix));
1574 SvPADTMP_on(PAD_SVl(ix));
1575 SvREADONLY_on(PAD_SVl(ix));
1578 SvREFCNT_dec(PAD_SVl(ix));
1579 SvPADTMP_on(cSVOPo->op_sv);
1580 PAD_SETSV(ix, cSVOPo->op_sv);
1581 /* XXX I don't know how this isn't readonly already. */
1582 SvREADONLY_on(PAD_SVl(ix));
1584 cSVOPo->op_sv = NULL;
1595 const char *key = NULL;
1598 if (((BINOP*)o)->op_last->op_type != OP_CONST)
1601 /* Make the CONST have a shared SV */
1602 svp = cSVOPx_svp(((BINOP*)o)->op_last);
1603 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv))
1604 && SvTYPE(sv) < SVt_PVMG && !SvROK(sv)) {
1605 key = SvPV_const(sv, keylen);
1606 lexname = newSVpvn_share(key,
1607 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
1613 if ((o->op_private & (OPpLVAL_INTRO)))
1616 rop = (UNOP*)((BINOP*)o)->op_first;
1617 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
1619 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
1620 if (!SvPAD_TYPED(lexname))
1622 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
1623 if (!fields || !GvHV(*fields))
1625 key = SvPV_const(*svp, keylen);
1626 if (!hv_fetch(GvHV(*fields), key,
1627 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE)) {
1628 Perl_croak(aTHX_ "No such class field \"%s\" "
1629 "in variable %s of type %s",
1630 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
1642 SVOP *first_key_op, *key_op;
1644 if ((o->op_private & (OPpLVAL_INTRO))
1645 /* I bet there's always a pushmark... */
1646 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
1647 /* hmmm, no optimization if list contains only one key. */
1649 rop = (UNOP*)((LISTOP*)o)->op_last;
1650 if (rop->op_type != OP_RV2HV)
1652 if (rop->op_first->op_type == OP_PADSV)
1653 /* @$hash{qw(keys here)} */
1654 rop = (UNOP*)rop->op_first;
1656 /* @{$hash}{qw(keys here)} */
1657 if (rop->op_first->op_type == OP_SCOPE
1658 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
1660 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
1666 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
1667 if (!SvPAD_TYPED(lexname))
1669 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
1670 if (!fields || !GvHV(*fields))
1672 /* Again guessing that the pushmark can be jumped over.... */
1673 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
1674 ->op_first->op_sibling;
1675 for (key_op = first_key_op; key_op;
1676 key_op = (SVOP*)key_op->op_sibling) {
1677 if (key_op->op_type != OP_CONST)
1679 svp = cSVOPx_svp(key_op);
1680 key = SvPV_const(*svp, keylen);
1681 if (!hv_fetch(GvHV(*fields), key,
1682 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE)) {
1683 Perl_croak(aTHX_ "No such class field \"%s\" "
1684 "in variable %s of type %s",
1685 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
1691 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
1692 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
1699 if (o->op_flags & OPf_KIDS) {
1701 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
1707 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
1709 Propagate lvalue ("modifiable") context to an op and its children.
1710 I<type> represents the context type, roughly based on the type of op that
1711 would do the modifying, although C<local()> is represented by OP_NULL,
1712 because it has no op type of its own (it is signalled by a flag on
1715 This function detects things that can't be modified, such as C<$x+1>, and
1716 generates errors for them. For example, C<$x+1 = 2> would cause it to be
1717 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
1719 It also flags things that need to behave specially in an lvalue context,
1720 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
1726 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
1730 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1733 if (!o || (PL_parser && PL_parser->error_count))
1736 if ((o->op_private & OPpTARGET_MY)
1737 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1742 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
1744 if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
1746 switch (o->op_type) {
1752 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1756 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
1757 !(o->op_flags & OPf_STACKED)) {
1758 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1759 /* Both ENTERSUB and RV2CV use this bit, but for different pur-
1760 poses, so we need it clear. */
1761 o->op_private &= ~1;
1762 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1763 assert(cUNOPo->op_first->op_type == OP_NULL);
1764 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1767 else { /* lvalue subroutine call */
1768 o->op_private |= OPpLVAL_INTRO
1769 |(OPpENTERSUB_INARGS * (type == OP_LEAVESUBLV));
1770 PL_modcount = RETURN_UNLIMITED_NUMBER;
1771 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1772 /* Potential lvalue context: */
1773 o->op_private |= OPpENTERSUB_INARGS;
1776 else { /* Compile-time error message: */
1777 OP *kid = cUNOPo->op_first;
1781 if (kid->op_type != OP_PUSHMARK) {
1782 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1784 "panic: unexpected lvalue entersub "
1785 "args: type/targ %ld:%"UVuf,
1786 (long)kid->op_type, (UV)kid->op_targ);
1787 kid = kLISTOP->op_first;
1789 while (kid->op_sibling)
1790 kid = kid->op_sibling;
1791 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1792 break; /* Postpone until runtime */
1796 kid = kUNOP->op_first;
1797 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1798 kid = kUNOP->op_first;
1799 if (kid->op_type == OP_NULL)
1801 "Unexpected constant lvalue entersub "
1802 "entry via type/targ %ld:%"UVuf,
1803 (long)kid->op_type, (UV)kid->op_targ);
1804 if (kid->op_type != OP_GV) {
1808 cv = GvCV(kGVOP_gv);
1818 if (flags & OP_LVALUE_NO_CROAK) return NULL;
1819 /* grep, foreach, subcalls, refgen */
1820 if (type == OP_GREPSTART || type == OP_ENTERSUB
1821 || type == OP_REFGEN || type == OP_LEAVESUBLV)
1823 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1824 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1826 : (o->op_type == OP_ENTERSUB
1827 ? "non-lvalue subroutine call"
1829 type ? PL_op_desc[type] : "local"));
1843 case OP_RIGHT_SHIFT:
1852 if (!(o->op_flags & OPf_STACKED))
1859 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1860 op_lvalue(kid, type);
1865 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1866 PL_modcount = RETURN_UNLIMITED_NUMBER;
1867 return o; /* Treat \(@foo) like ordinary list. */
1871 if (scalar_mod_type(o, type))
1873 ref(cUNOPo->op_first, o->op_type);
1877 if (type == OP_LEAVESUBLV)
1878 o->op_private |= OPpMAYBE_LVSUB;
1884 PL_modcount = RETURN_UNLIMITED_NUMBER;
1887 PL_hints |= HINT_BLOCK_SCOPE;
1888 if (type == OP_LEAVESUBLV)
1889 o->op_private |= OPpMAYBE_LVSUB;
1893 ref(cUNOPo->op_first, o->op_type);
1897 PL_hints |= HINT_BLOCK_SCOPE;
1906 case OP_AELEMFAST_LEX:
1913 PL_modcount = RETURN_UNLIMITED_NUMBER;
1914 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1915 return o; /* Treat \(@foo) like ordinary list. */
1916 if (scalar_mod_type(o, type))
1918 if (type == OP_LEAVESUBLV)
1919 o->op_private |= OPpMAYBE_LVSUB;
1923 if (!type) /* local() */
1924 Perl_croak(aTHX_ "Can't localize lexical variable %"SVf,
1925 PAD_COMPNAME_SV(o->op_targ));
1934 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
1938 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1944 if (type == OP_LEAVESUBLV)
1945 o->op_private |= OPpMAYBE_LVSUB;
1946 pad_free(o->op_targ);
1947 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1948 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1949 if (o->op_flags & OPf_KIDS)
1950 op_lvalue(cBINOPo->op_first->op_sibling, type);
1955 ref(cBINOPo->op_first, o->op_type);
1956 if (type == OP_ENTERSUB &&
1957 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1958 o->op_private |= OPpLVAL_DEFER;
1959 if (type == OP_LEAVESUBLV)
1960 o->op_private |= OPpMAYBE_LVSUB;
1970 if (o->op_flags & OPf_KIDS)
1971 op_lvalue(cLISTOPo->op_last, type);
1976 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1978 else if (!(o->op_flags & OPf_KIDS))
1980 if (o->op_targ != OP_LIST) {
1981 op_lvalue(cBINOPo->op_first, type);
1987 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1988 /* elements might be in void context because the list is
1989 in scalar context or because they are attribute sub calls */
1990 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
1991 op_lvalue(kid, type);
1995 if (type != OP_LEAVESUBLV)
1997 break; /* op_lvalue()ing was handled by ck_return() */
2000 /* [20011101.069] File test operators interpret OPf_REF to mean that
2001 their argument is a filehandle; thus \stat(".") should not set
2003 if (type == OP_REFGEN &&
2004 PL_check[o->op_type] == Perl_ck_ftst)
2007 if (type != OP_LEAVESUBLV)
2008 o->op_flags |= OPf_MOD;
2010 if (type == OP_AASSIGN || type == OP_SASSIGN)
2011 o->op_flags |= OPf_SPECIAL|OPf_REF;
2012 else if (!type) { /* local() */
2015 o->op_private |= OPpLVAL_INTRO;
2016 o->op_flags &= ~OPf_SPECIAL;
2017 PL_hints |= HINT_BLOCK_SCOPE;
2022 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
2023 "Useless localization of %s", OP_DESC(o));
2026 else if (type != OP_GREPSTART && type != OP_ENTERSUB
2027 && type != OP_LEAVESUBLV)
2028 o->op_flags |= OPf_REF;
2033 S_scalar_mod_type(const OP *o, I32 type)
2035 assert(o || type != OP_SASSIGN);
2039 if (o->op_type == OP_RV2GV)
2063 case OP_RIGHT_SHIFT:
2084 S_is_handle_constructor(const OP *o, I32 numargs)
2086 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
2088 switch (o->op_type) {
2096 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
2109 S_refkids(pTHX_ OP *o, I32 type)
2111 if (o && o->op_flags & OPf_KIDS) {
2113 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2120 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
2125 PERL_ARGS_ASSERT_DOREF;
2127 if (!o || (PL_parser && PL_parser->error_count))
2130 switch (o->op_type) {
2132 if ((type == OP_EXISTS || type == OP_DEFINED) &&
2133 !(o->op_flags & OPf_STACKED)) {
2134 o->op_type = OP_RV2CV; /* entersub => rv2cv */
2135 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
2136 assert(cUNOPo->op_first->op_type == OP_NULL);
2137 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
2138 o->op_flags |= OPf_SPECIAL;
2139 o->op_private &= ~1;
2141 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
2142 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2143 : type == OP_RV2HV ? OPpDEREF_HV
2145 o->op_flags |= OPf_MOD;
2151 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
2152 doref(kid, type, set_op_ref);
2155 if (type == OP_DEFINED)
2156 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2157 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2160 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2161 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2162 : type == OP_RV2HV ? OPpDEREF_HV
2164 o->op_flags |= OPf_MOD;
2171 o->op_flags |= OPf_REF;
2174 if (type == OP_DEFINED)
2175 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2176 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2182 o->op_flags |= OPf_REF;
2187 if (!(o->op_flags & OPf_KIDS))
2189 doref(cBINOPo->op_first, type, set_op_ref);
2193 doref(cBINOPo->op_first, o->op_type, set_op_ref);
2194 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2195 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2196 : type == OP_RV2HV ? OPpDEREF_HV
2198 o->op_flags |= OPf_MOD;
2208 if (!(o->op_flags & OPf_KIDS))
2210 doref(cLISTOPo->op_last, type, set_op_ref);
2220 S_dup_attrlist(pTHX_ OP *o)
2225 PERL_ARGS_ASSERT_DUP_ATTRLIST;
2227 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
2228 * where the first kid is OP_PUSHMARK and the remaining ones
2229 * are OP_CONST. We need to push the OP_CONST values.
2231 if (o->op_type == OP_CONST)
2232 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
2234 else if (o->op_type == OP_NULL)
2238 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
2240 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
2241 if (o->op_type == OP_CONST)
2242 rop = op_append_elem(OP_LIST, rop,
2243 newSVOP(OP_CONST, o->op_flags,
2244 SvREFCNT_inc_NN(cSVOPo->op_sv)));
2251 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
2256 PERL_ARGS_ASSERT_APPLY_ATTRS;
2258 /* fake up C<use attributes $pkg,$rv,@attrs> */
2259 ENTER; /* need to protect against side-effects of 'use' */
2260 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2262 #define ATTRSMODULE "attributes"
2263 #define ATTRSMODULE_PM "attributes.pm"
2266 /* Don't force the C<use> if we don't need it. */
2267 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
2268 if (svp && *svp != &PL_sv_undef)
2269 NOOP; /* already in %INC */
2271 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
2272 newSVpvs(ATTRSMODULE), NULL);
2275 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2276 newSVpvs(ATTRSMODULE),
2278 op_prepend_elem(OP_LIST,
2279 newSVOP(OP_CONST, 0, stashsv),
2280 op_prepend_elem(OP_LIST,
2281 newSVOP(OP_CONST, 0,
2283 dup_attrlist(attrs))));
2289 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
2292 OP *pack, *imop, *arg;
2295 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
2300 assert(target->op_type == OP_PADSV ||
2301 target->op_type == OP_PADHV ||
2302 target->op_type == OP_PADAV);
2304 /* Ensure that attributes.pm is loaded. */
2305 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
2307 /* Need package name for method call. */
2308 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
2310 /* Build up the real arg-list. */
2311 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2313 arg = newOP(OP_PADSV, 0);
2314 arg->op_targ = target->op_targ;
2315 arg = op_prepend_elem(OP_LIST,
2316 newSVOP(OP_CONST, 0, stashsv),
2317 op_prepend_elem(OP_LIST,
2318 newUNOP(OP_REFGEN, 0,
2319 op_lvalue(arg, OP_REFGEN)),
2320 dup_attrlist(attrs)));
2322 /* Fake up a method call to import */
2323 meth = newSVpvs_share("import");
2324 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2325 op_append_elem(OP_LIST,
2326 op_prepend_elem(OP_LIST, pack, list(arg)),
2327 newSVOP(OP_METHOD_NAMED, 0, meth)));
2329 /* Combine the ops. */
2330 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
2334 =notfor apidoc apply_attrs_string
2336 Attempts to apply a list of attributes specified by the C<attrstr> and
2337 C<len> arguments to the subroutine identified by the C<cv> argument which
2338 is expected to be associated with the package identified by the C<stashpv>
2339 argument (see L<attributes>). It gets this wrong, though, in that it
2340 does not correctly identify the boundaries of the individual attribute
2341 specifications within C<attrstr>. This is not really intended for the
2342 public API, but has to be listed here for systems such as AIX which
2343 need an explicit export list for symbols. (It's called from XS code
2344 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2345 to respect attribute syntax properly would be welcome.
2351 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2352 const char *attrstr, STRLEN len)
2356 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2359 len = strlen(attrstr);
2363 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2365 const char * const sstr = attrstr;
2366 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2367 attrs = op_append_elem(OP_LIST, attrs,
2368 newSVOP(OP_CONST, 0,
2369 newSVpvn(sstr, attrstr-sstr)));
2373 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2374 newSVpvs(ATTRSMODULE),
2375 NULL, op_prepend_elem(OP_LIST,
2376 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2377 op_prepend_elem(OP_LIST,
2378 newSVOP(OP_CONST, 0,
2379 newRV(MUTABLE_SV(cv))),
2384 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2388 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
2390 PERL_ARGS_ASSERT_MY_KID;
2392 if (!o || (PL_parser && PL_parser->error_count))
2396 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2397 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2401 if (type == OP_LIST) {
2403 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2404 my_kid(kid, attrs, imopsp);
2405 } else if (type == OP_UNDEF
2411 } else if (type == OP_RV2SV || /* "our" declaration */
2413 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2414 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2415 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2417 PL_parser->in_my == KEY_our
2419 : PL_parser->in_my == KEY_state ? "state" : "my"));
2421 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
2422 PL_parser->in_my = FALSE;
2423 PL_parser->in_my_stash = NULL;
2424 apply_attrs(GvSTASH(gv),
2425 (type == OP_RV2SV ? GvSV(gv) :
2426 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2427 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
2430 o->op_private |= OPpOUR_INTRO;
2433 else if (type != OP_PADSV &&
2436 type != OP_PUSHMARK)
2438 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2440 PL_parser->in_my == KEY_our
2442 : PL_parser->in_my == KEY_state ? "state" : "my"));
2445 else if (attrs && type != OP_PUSHMARK) {
2448 PL_parser->in_my = FALSE;
2449 PL_parser->in_my_stash = NULL;
2451 /* check for C<my Dog $spot> when deciding package */
2452 stash = PAD_COMPNAME_TYPE(o->op_targ);
2454 stash = PL_curstash;
2455 apply_attrs_my(stash, o, attrs, imopsp);
2457 o->op_flags |= OPf_MOD;
2458 o->op_private |= OPpLVAL_INTRO;
2460 o->op_private |= OPpPAD_STATE;
2465 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2469 int maybe_scalar = 0;
2471 PERL_ARGS_ASSERT_MY_ATTRS;
2473 /* [perl #17376]: this appears to be premature, and results in code such as
2474 C< our(%x); > executing in list mode rather than void mode */
2476 if (o->op_flags & OPf_PARENS)
2486 o = my_kid(o, attrs, &rops);
2488 if (maybe_scalar && o->op_type == OP_PADSV) {
2489 o = scalar(op_append_list(OP_LIST, rops, o));
2490 o->op_private |= OPpLVAL_INTRO;
2493 /* The listop in rops might have a pushmark at the beginning,
2494 which will mess up list assignment. */
2495 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
2496 if (rops->op_type == OP_LIST &&
2497 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
2499 OP * const pushmark = lrops->op_first;
2500 lrops->op_first = pushmark->op_sibling;
2503 o = op_append_list(OP_LIST, o, rops);
2506 PL_parser->in_my = FALSE;
2507 PL_parser->in_my_stash = NULL;
2512 Perl_sawparens(pTHX_ OP *o)
2514 PERL_UNUSED_CONTEXT;
2516 o->op_flags |= OPf_PARENS;
2521 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2525 const OPCODE ltype = left->op_type;
2526 const OPCODE rtype = right->op_type;
2528 PERL_ARGS_ASSERT_BIND_MATCH;
2530 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2531 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2533 const char * const desc
2535 rtype == OP_SUBST || rtype == OP_TRANS
2536 || rtype == OP_TRANSR
2538 ? (int)rtype : OP_MATCH];
2539 const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV;
2542 (ltype == OP_RV2AV || ltype == OP_RV2HV)
2543 ? cUNOPx(left)->op_first->op_type == OP_GV
2544 && (gv = cGVOPx_gv(cUNOPx(left)->op_first))
2545 ? varname(gv, isary ? '@' : '%', 0, NULL, 0, 1)
2548 (GV *)PL_compcv, isary ? '@' : '%', left->op_targ, NULL, 0, 1
2551 Perl_warner(aTHX_ packWARN(WARN_MISC),
2552 "Applying %s to %"SVf" will act on scalar(%"SVf")",
2555 const char * const sample = (isary
2556 ? "@array" : "%hash");
2557 Perl_warner(aTHX_ packWARN(WARN_MISC),
2558 "Applying %s to %s will act on scalar(%s)",
2559 desc, sample, sample);
2563 if (rtype == OP_CONST &&
2564 cSVOPx(right)->op_private & OPpCONST_BARE &&
2565 cSVOPx(right)->op_private & OPpCONST_STRICT)
2567 no_bareword_allowed(right);
2570 /* !~ doesn't make sense with /r, so error on it for now */
2571 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
2573 yyerror("Using !~ with s///r doesn't make sense");
2574 if (rtype == OP_TRANSR && type == OP_NOT)
2575 yyerror("Using !~ with tr///r doesn't make sense");
2577 ismatchop = (rtype == OP_MATCH ||
2578 rtype == OP_SUBST ||
2579 rtype == OP_TRANS || rtype == OP_TRANSR)
2580 && !(right->op_flags & OPf_SPECIAL);
2581 if (ismatchop && right->op_private & OPpTARGET_MY) {
2583 right->op_private &= ~OPpTARGET_MY;
2585 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2588 right->op_flags |= OPf_STACKED;
2589 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
2590 ! (rtype == OP_TRANS &&
2591 right->op_private & OPpTRANS_IDENTICAL) &&
2592 ! (rtype == OP_SUBST &&
2593 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
2594 newleft = op_lvalue(left, rtype);
2597 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
2598 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2600 o = op_prepend_elem(rtype, scalar(newleft), right);
2602 return newUNOP(OP_NOT, 0, scalar(o));
2606 return bind_match(type, left,
2607 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2611 Perl_invert(pTHX_ OP *o)
2615 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2619 =for apidoc Amx|OP *|op_scope|OP *o
2621 Wraps up an op tree with some additional ops so that at runtime a dynamic
2622 scope will be created. The original ops run in the new dynamic scope,
2623 and then, provided that they exit normally, the scope will be unwound.
2624 The additional ops used to create and unwind the dynamic scope will
2625 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
2626 instead if the ops are simple enough to not need the full dynamic scope
2633 Perl_op_scope(pTHX_ OP *o)
2637 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2638 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2639 o->op_type = OP_LEAVE;
2640 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2642 else if (o->op_type == OP_LINESEQ) {
2644 o->op_type = OP_SCOPE;
2645 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2646 kid = ((LISTOP*)o)->op_first;
2647 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2650 /* The following deals with things like 'do {1 for 1}' */
2651 kid = kid->op_sibling;
2653 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2658 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2664 Perl_block_start(pTHX_ int full)
2667 const int retval = PL_savestack_ix;
2669 pad_block_start(full);
2671 PL_hints &= ~HINT_BLOCK_SCOPE;
2672 SAVECOMPILEWARNINGS();
2673 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2675 CALL_BLOCK_HOOKS(bhk_start, full);
2681 Perl_block_end(pTHX_ I32 floor, OP *seq)
2684 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2685 OP* retval = scalarseq(seq);
2687 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
2690 CopHINTS_set(&PL_compiling, PL_hints);
2692 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2695 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
2701 =head1 Compile-time scope hooks
2703 =for apidoc Aox||blockhook_register
2705 Register a set of hooks to be called when the Perl lexical scope changes
2706 at compile time. See L<perlguts/"Compile-time scope hooks">.
2712 Perl_blockhook_register(pTHX_ BHK *hk)
2714 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
2716 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
2723 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
2724 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2725 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2728 OP * const o = newOP(OP_PADSV, 0);
2729 o->op_targ = offset;
2735 Perl_newPROG(pTHX_ OP *o)
2739 PERL_ARGS_ASSERT_NEWPROG;
2745 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2746 ((PL_in_eval & EVAL_KEEPERR)
2747 ? OPf_SPECIAL : 0), o);
2749 cx = &cxstack[cxstack_ix];
2750 assert(CxTYPE(cx) == CXt_EVAL);
2752 if ((cx->blk_gimme & G_WANT) == G_VOID)
2753 scalarvoid(PL_eval_root);
2754 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
2757 scalar(PL_eval_root);
2759 /* don't use LINKLIST, since PL_eval_root might indirect through
2760 * a rather expensive function call and LINKLIST evaluates its
2761 * argument more than once */
2762 PL_eval_start = op_linklist(PL_eval_root);
2763 PL_eval_root->op_private |= OPpREFCOUNTED;
2764 OpREFCNT_set(PL_eval_root, 1);
2765 PL_eval_root->op_next = 0;
2766 CALL_PEEP(PL_eval_start);
2767 finalize_optree(PL_eval_root);
2771 if (o->op_type == OP_STUB) {
2772 PL_comppad_name = 0;
2774 S_op_destroy(aTHX_ o);
2777 PL_main_root = op_scope(sawparens(scalarvoid(o)));
2778 PL_curcop = &PL_compiling;
2779 PL_main_start = LINKLIST(PL_main_root);
2780 PL_main_root->op_private |= OPpREFCOUNTED;
2781 OpREFCNT_set(PL_main_root, 1);
2782 PL_main_root->op_next = 0;
2783 CALL_PEEP(PL_main_start);
2784 finalize_optree(PL_main_root);
2787 /* Register with debugger */
2789 CV * const cv = get_cvs("DB::postponed", 0);
2793 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2795 call_sv(MUTABLE_SV(cv), G_DISCARD);
2802 Perl_localize(pTHX_ OP *o, I32 lex)
2806 PERL_ARGS_ASSERT_LOCALIZE;
2808 if (o->op_flags & OPf_PARENS)
2809 /* [perl #17376]: this appears to be premature, and results in code such as
2810 C< our(%x); > executing in list mode rather than void mode */
2817 if ( PL_parser->bufptr > PL_parser->oldbufptr
2818 && PL_parser->bufptr[-1] == ','
2819 && ckWARN(WARN_PARENTHESIS))
2821 char *s = PL_parser->bufptr;
2824 /* some heuristics to detect a potential error */
2825 while (*s && (strchr(", \t\n", *s)))
2829 if (*s && strchr("@$%*", *s) && *++s
2830 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2833 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2835 while (*s && (strchr(", \t\n", *s)))
2841 if (sigil && (*s == ';' || *s == '=')) {
2842 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2843 "Parentheses missing around \"%s\" list",
2845 ? (PL_parser->in_my == KEY_our
2847 : PL_parser->in_my == KEY_state
2857 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
2858 PL_parser->in_my = FALSE;
2859 PL_parser->in_my_stash = NULL;
2864 Perl_jmaybe(pTHX_ OP *o)
2866 PERL_ARGS_ASSERT_JMAYBE;
2868 if (o->op_type == OP_LIST) {
2870 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2871 o = convert(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
2876 PERL_STATIC_INLINE OP *
2877 S_op_std_init(pTHX_ OP *o)
2879 I32 type = o->op_type;
2881 PERL_ARGS_ASSERT_OP_STD_INIT;
2883 if (PL_opargs[type] & OA_RETSCALAR)
2885 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2886 o->op_targ = pad_alloc(type, SVs_PADTMP);
2891 PERL_STATIC_INLINE OP *
2892 S_op_integerize(pTHX_ OP *o)
2894 I32 type = o->op_type;
2896 PERL_ARGS_ASSERT_OP_INTEGERIZE;
2898 /* integerize op, unless it happens to be C<-foo>.
2899 * XXX should pp_i_negate() do magic string negation instead? */
2900 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2901 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2902 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2905 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2908 if (type == OP_NEGATE)
2909 /* XXX might want a ck_negate() for this */
2910 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2916 S_fold_constants(pTHX_ register OP *o)
2919 register OP * VOL curop;
2921 VOL I32 type = o->op_type;
2926 SV * const oldwarnhook = PL_warnhook;
2927 SV * const olddiehook = PL_diehook;
2931 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
2933 if (!(PL_opargs[type] & OA_FOLDCONST))
2947 /* XXX what about the numeric ops? */
2948 if (IN_LOCALE_COMPILETIME)
2953 if (PL_parser && PL_parser->error_count)
2954 goto nope; /* Don't try to run w/ errors */
2956 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2957 const OPCODE type = curop->op_type;
2958 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2960 type != OP_SCALAR &&
2962 type != OP_PUSHMARK)
2968 curop = LINKLIST(o);
2969 old_next = o->op_next;
2973 oldscope = PL_scopestack_ix;
2974 create_eval_scope(G_FAKINGEVAL);
2976 /* Verify that we don't need to save it: */
2977 assert(PL_curcop == &PL_compiling);
2978 StructCopy(&PL_compiling, ¬_compiling, COP);
2979 PL_curcop = ¬_compiling;
2980 /* The above ensures that we run with all the correct hints of the
2981 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
2982 assert(IN_PERL_RUNTIME);
2983 PL_warnhook = PERL_WARNHOOK_FATAL;
2990 sv = *(PL_stack_sp--);
2991 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
2993 /* Can't simply swipe the SV from the pad, because that relies on
2994 the op being freed "real soon now". Under MAD, this doesn't
2995 happen (see the #ifdef below). */
2998 pad_swipe(o->op_targ, FALSE);
3001 else if (SvTEMP(sv)) { /* grab mortal temp? */
3002 SvREFCNT_inc_simple_void(sv);
3007 /* Something tried to die. Abandon constant folding. */
3008 /* Pretend the error never happened. */
3010 o->op_next = old_next;
3014 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
3015 PL_warnhook = oldwarnhook;
3016 PL_diehook = olddiehook;
3017 /* XXX note that this croak may fail as we've already blown away
3018 * the stack - eg any nested evals */
3019 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
3022 PL_warnhook = oldwarnhook;
3023 PL_diehook = olddiehook;
3024 PL_curcop = &PL_compiling;
3026 if (PL_scopestack_ix > oldscope)
3027 delete_eval_scope();
3036 if (type == OP_RV2GV)
3037 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
3039 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
3040 op_getmad(o,newop,'f');
3048 S_gen_constant_list(pTHX_ register OP *o)
3052 const I32 oldtmps_floor = PL_tmps_floor;
3055 if (PL_parser && PL_parser->error_count)
3056 return o; /* Don't attempt to run with errors */
3058 PL_op = curop = LINKLIST(o);
3061 Perl_pp_pushmark(aTHX);
3064 assert (!(curop->op_flags & OPf_SPECIAL));
3065 assert(curop->op_type == OP_RANGE);
3066 Perl_pp_anonlist(aTHX);
3067 PL_tmps_floor = oldtmps_floor;
3069 o->op_type = OP_RV2AV;
3070 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
3071 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
3072 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
3073 o->op_opt = 0; /* needs to be revisited in rpeep() */
3074 curop = ((UNOP*)o)->op_first;
3075 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
3077 op_getmad(curop,o,'O');
3086 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
3089 if (type < 0) type = -type, flags |= OPf_SPECIAL;
3090 if (!o || o->op_type != OP_LIST)
3091 o = newLISTOP(OP_LIST, 0, o, NULL);
3093 o->op_flags &= ~OPf_WANT;
3095 if (!(PL_opargs[type] & OA_MARK))
3096 op_null(cLISTOPo->op_first);
3098 OP * const kid2 = cLISTOPo->op_first->op_sibling;
3099 if (kid2 && kid2->op_type == OP_COREARGS) {
3100 op_null(cLISTOPo->op_first);
3101 kid2->op_private |= OPpCOREARGS_PUSHMARK;
3105 o->op_type = (OPCODE)type;
3106 o->op_ppaddr = PL_ppaddr[type];
3107 o->op_flags |= flags;
3109 o = CHECKOP(type, o);
3110 if (o->op_type != (unsigned)type)
3113 return fold_constants(op_integerize(op_std_init(o)));
3117 =head1 Optree Manipulation Functions
3120 /* List constructors */
3123 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
3125 Append an item to the list of ops contained directly within a list-type
3126 op, returning the lengthened list. I<first> is the list-type op,
3127 and I<last> is the op to append to the list. I<optype> specifies the
3128 intended opcode for the list. If I<first> is not already a list of the
3129 right type, it will be upgraded into one. If either I<first> or I<last>
3130 is null, the other is returned unchanged.
3136 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
3144 if (first->op_type != (unsigned)type
3145 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
3147 return newLISTOP(type, 0, first, last);
3150 if (first->op_flags & OPf_KIDS)
3151 ((LISTOP*)first)->op_last->op_sibling = last;
3153 first->op_flags |= OPf_KIDS;
3154 ((LISTOP*)first)->op_first = last;
3156 ((LISTOP*)first)->op_last = last;
3161 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
3163 Concatenate the lists of ops contained directly within two list-type ops,
3164 returning the combined list. I<first> and I<last> are the list-type ops
3165 to concatenate. I<optype> specifies the intended opcode for the list.
3166 If either I<first> or I<last> is not already a list of the right type,
3167 it will be upgraded into one. If either I<first> or I<last> is null,
3168 the other is returned unchanged.
3174 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
3182 if (first->op_type != (unsigned)type)
3183 return op_prepend_elem(type, first, last);
3185 if (last->op_type != (unsigned)type)
3186 return op_append_elem(type, first, last);
3188 ((LISTOP*)first)->op_last->op_sibling = ((LISTOP*)last)->op_first;
3189 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
3190 first->op_flags |= (last->op_flags & OPf_KIDS);
3193 if (((LISTOP*)last)->op_first && first->op_madprop) {
3194 MADPROP *mp = ((LISTOP*)last)->op_first->op_madprop;
3196 while (mp->mad_next)
3198 mp->mad_next = first->op_madprop;
3201 ((LISTOP*)last)->op_first->op_madprop = first->op_madprop;
3204 first->op_madprop = last->op_madprop;
3205 last->op_madprop = 0;
3208 S_op_destroy(aTHX_ last);
3214 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
3216 Prepend an item to the list of ops contained directly within a list-type
3217 op, returning the lengthened list. I<first> is the op to prepend to the
3218 list, and I<last> is the list-type op. I<optype> specifies the intended
3219 opcode for the list. If I<last> is not already a list of the right type,
3220 it will be upgraded into one. If either I<first> or I<last> is null,
3221 the other is returned unchanged.
3227 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
3235 if (last->op_type == (unsigned)type) {
3236 if (type == OP_LIST) { /* already a PUSHMARK there */
3237 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
3238 ((LISTOP*)last)->op_first->op_sibling = first;
3239 if (!(first->op_flags & OPf_PARENS))
3240 last->op_flags &= ~OPf_PARENS;
3243 if (!(last->op_flags & OPf_KIDS)) {
3244 ((LISTOP*)last)->op_last = first;
3245 last->op_flags |= OPf_KIDS;
3247 first->op_sibling = ((LISTOP*)last)->op_first;
3248 ((LISTOP*)last)->op_first = first;
3250 last->op_flags |= OPf_KIDS;
3254 return newLISTOP(type, 0, first, last);
3262 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
3265 Newxz(tk, 1, TOKEN);
3266 tk->tk_type = (OPCODE)optype;
3267 tk->tk_type = 12345;
3269 tk->tk_mad = madprop;
3274 Perl_token_free(pTHX_ TOKEN* tk)
3276 PERL_ARGS_ASSERT_TOKEN_FREE;
3278 if (tk->tk_type != 12345)
3280 mad_free(tk->tk_mad);
3285 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
3290 PERL_ARGS_ASSERT_TOKEN_GETMAD;
3292 if (tk->tk_type != 12345) {
3293 Perl_warner(aTHX_ packWARN(WARN_MISC),
3294 "Invalid TOKEN object ignored");
3301 /* faked up qw list? */
3303 tm->mad_type == MAD_SV &&
3304 SvPVX((SV *)tm->mad_val)[0] == 'q')
3311 /* pretend constant fold didn't happen? */
3312 if (mp->mad_key == 'f' &&
3313 (o->op_type == OP_CONST ||
3314 o->op_type == OP_GV) )
3316 token_getmad(tk,(OP*)mp->mad_val,slot);
3330 if (mp->mad_key == 'X')
3331 mp->mad_key = slot; /* just change the first one */
3341 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
3350 /* pretend constant fold didn't happen? */
3351 if (mp->mad_key == 'f' &&
3352 (o->op_type == OP_CONST ||
3353 o->op_type == OP_GV) )
3355 op_getmad(from,(OP*)mp->mad_val,slot);
3362 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
3365 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
3371 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
3380 /* pretend constant fold didn't happen? */
3381 if (mp->mad_key == 'f' &&
3382 (o->op_type == OP_CONST ||
3383 o->op_type == OP_GV) )
3385 op_getmad(from,(OP*)mp->mad_val,slot);
3392 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
3395 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
3399 PerlIO_printf(PerlIO_stderr(),
3400 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
3406 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
3424 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
3428 addmad(tm, &(o->op_madprop), slot);
3432 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
3453 Perl_newMADsv(pTHX_ char key, SV* sv)
3455 PERL_ARGS_ASSERT_NEWMADSV;
3457 return newMADPROP(key, MAD_SV, sv, 0);
3461 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
3463 MADPROP *const mp = (MADPROP *) PerlMemShared_malloc(sizeof(MADPROP));
3466 mp->mad_vlen = vlen;
3467 mp->mad_type = type;
3469 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
3474 Perl_mad_free(pTHX_ MADPROP* mp)
3476 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
3480 mad_free(mp->mad_next);
3481 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
3482 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
3483 switch (mp->mad_type) {
3487 Safefree((char*)mp->mad_val);
3490 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
3491 op_free((OP*)mp->mad_val);
3494 sv_free(MUTABLE_SV(mp->mad_val));
3497 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3500 PerlMemShared_free(mp);
3506 =head1 Optree construction
3508 =for apidoc Am|OP *|newNULLLIST
3510 Constructs, checks, and returns a new C<stub> op, which represents an
3511 empty list expression.
3517 Perl_newNULLLIST(pTHX)
3519 return newOP(OP_STUB, 0);
3523 S_force_list(pTHX_ OP *o)
3525 if (!o || o->op_type != OP_LIST)
3526 o = newLISTOP(OP_LIST, 0, o, NULL);
3532 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
3534 Constructs, checks, and returns an op of any list type. I<type> is
3535 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3536 C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
3537 supply up to two ops to be direct children of the list op; they are
3538 consumed by this function and become part of the constructed op tree.
3544 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3549 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3551 NewOp(1101, listop, 1, LISTOP);
3553 listop->op_type = (OPCODE)type;
3554 listop->op_ppaddr = PL_ppaddr[type];
3557 listop->op_flags = (U8)flags;
3561 else if (!first && last)
3564 first->op_sibling = last;
3565 listop->op_first = first;
3566 listop->op_last = last;
3567 if (type == OP_LIST) {
3568 OP* const pushop = newOP(OP_PUSHMARK, 0);
3569 pushop->op_sibling = first;
3570 listop->op_first = pushop;
3571 listop->op_flags |= OPf_KIDS;
3573 listop->op_last = pushop;
3576 return CHECKOP(type, listop);
3580 =for apidoc Am|OP *|newOP|I32 type|I32 flags
3582 Constructs, checks, and returns an op of any base type (any type that
3583 has no extra fields). I<type> is the opcode. I<flags> gives the
3584 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
3591 Perl_newOP(pTHX_ I32 type, I32 flags)
3596 if (type == -OP_ENTEREVAL) {
3597 type = OP_ENTEREVAL;
3598 flags |= OPpEVAL_BYTES<<8;
3601 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3602 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3603 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3604 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3606 NewOp(1101, o, 1, OP);
3607 o->op_type = (OPCODE)type;
3608 o->op_ppaddr = PL_ppaddr[type];
3609 o->op_flags = (U8)flags;
3611 o->op_latefreed = 0;
3615 o->op_private = (U8)(0 | (flags >> 8));
3616 if (PL_opargs[type] & OA_RETSCALAR)
3618 if (PL_opargs[type] & OA_TARGET)
3619 o->op_targ = pad_alloc(type, SVs_PADTMP);
3620 return CHECKOP(type, o);
3624 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
3626 Constructs, checks, and returns an op of any unary type. I<type> is
3627 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3628 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
3629 bits, the eight bits of C<op_private>, except that the bit with value 1
3630 is automatically set. I<first> supplies an optional op to be the direct
3631 child of the unary op; it is consumed by this function and become part
3632 of the constructed op tree.
3638 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3643 if (type == -OP_ENTEREVAL) {
3644 type = OP_ENTEREVAL;
3645 flags |= OPpEVAL_BYTES<<8;
3648 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3649 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3650 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3651 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3652 || type == OP_SASSIGN
3653 || type == OP_ENTERTRY
3654 || type == OP_NULL );
3657 first = newOP(OP_STUB, 0);
3658 if (PL_opargs[type] & OA_MARK)
3659 first = force_list(first);
3661 NewOp(1101, unop, 1, UNOP);
3662 unop->op_type = (OPCODE)type;
3663 unop->op_ppaddr = PL_ppaddr[type];
3664 unop->op_first = first;
3665 unop->op_flags = (U8)(flags | OPf_KIDS);
3666 unop->op_private = (U8)(1 | (flags >> 8));
3667 unop = (UNOP*) CHECKOP(type, unop);
3671 return fold_constants(op_integerize(op_std_init((OP *) unop)));
3675 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
3677 Constructs, checks, and returns an op of any binary type. I<type>
3678 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
3679 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
3680 the eight bits of C<op_private>, except that the bit with value 1 or
3681 2 is automatically set as required. I<first> and I<last> supply up to
3682 two ops to be the direct children of the binary op; they are consumed
3683 by this function and become part of the constructed op tree.
3689 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3694 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3695 || type == OP_SASSIGN || type == OP_NULL );
3697 NewOp(1101, binop, 1, BINOP);
3700 first = newOP(OP_NULL, 0);
3702 binop->op_type = (OPCODE)type;
3703 binop->op_ppaddr = PL_ppaddr[type];
3704 binop->op_first = first;
3705 binop->op_flags = (U8)(flags | OPf_KIDS);
3708 binop->op_private = (U8)(1 | (flags >> 8));
3711 binop->op_private = (U8)(2 | (flags >> 8));
3712 first->op_sibling = last;
3715 binop = (BINOP*)CHECKOP(type, binop);
3716 if (binop->op_next || binop->op_type != (OPCODE)type)
3719 binop->op_last = binop->op_first->op_sibling;
3721 return fold_constants(op_integerize(op_std_init((OP *)binop)));
3724 static int uvcompare(const void *a, const void *b)
3725 __attribute__nonnull__(1)
3726 __attribute__nonnull__(2)
3727 __attribute__pure__;
3728 static int uvcompare(const void *a, const void *b)
3730 if (*((const UV *)a) < (*(const UV *)b))
3732 if (*((const UV *)a) > (*(const UV *)b))
3734 if (*((const UV *)a+1) < (*(const UV *)b+1))
3736 if (*((const UV *)a+1) > (*(const UV *)b+1))
3742 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3745 SV * const tstr = ((SVOP*)expr)->op_sv;
3748 (repl->op_type == OP_NULL)
3749 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3751 ((SVOP*)repl)->op_sv;
3754 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3755 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3759 register short *tbl;
3761 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3762 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3763 I32 del = o->op_private & OPpTRANS_DELETE;
3766 PERL_ARGS_ASSERT_PMTRANS;
3768 PL_hints |= HINT_BLOCK_SCOPE;
3771 o->op_private |= OPpTRANS_FROM_UTF;
3774 o->op_private |= OPpTRANS_TO_UTF;
3776 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3777 SV* const listsv = newSVpvs("# comment\n");
3779 const U8* tend = t + tlen;
3780 const U8* rend = r + rlen;
3794 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3795 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3798 const U32 flags = UTF8_ALLOW_DEFAULT;
3802 t = tsave = bytes_to_utf8(t, &len);
3805 if (!to_utf && rlen) {
3807 r = rsave = bytes_to_utf8(r, &len);
3811 /* There are several snags with this code on EBCDIC:
3812 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3813 2. scan_const() in toke.c has encoded chars in native encoding which makes
3814 ranges at least in EBCDIC 0..255 range the bottom odd.
3818 U8 tmpbuf[UTF8_MAXBYTES+1];
3821 Newx(cp, 2*tlen, UV);
3823 transv = newSVpvs("");
3825 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3827 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3829 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3833 cp[2*i+1] = cp[2*i];
3837 qsort(cp, i, 2*sizeof(UV), uvcompare);
3838 for (j = 0; j < i; j++) {
3840 diff = val - nextmin;
3842 t = uvuni_to_utf8(tmpbuf,nextmin);
3843 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3845 U8 range_mark = UTF_TO_NATIVE(0xff);
3846 t = uvuni_to_utf8(tmpbuf, val - 1);
3847 sv_catpvn(transv, (char *)&range_mark, 1);
3848 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3855 t = uvuni_to_utf8(tmpbuf,nextmin);
3856 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3858 U8 range_mark = UTF_TO_NATIVE(0xff);
3859 sv_catpvn(transv, (char *)&range_mark, 1);
3861 t = uvuni_to_utf8(tmpbuf, 0x7fffffff);
3862 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3863 t = (const U8*)SvPVX_const(transv);
3864 tlen = SvCUR(transv);
3868 else if (!rlen && !del) {
3869 r = t; rlen = tlen; rend = tend;
3872 if ((!rlen && !del) || t == r ||
3873 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3875 o->op_private |= OPpTRANS_IDENTICAL;
3879 while (t < tend || tfirst <= tlast) {
3880 /* see if we need more "t" chars */
3881 if (tfirst > tlast) {
3882 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3884 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3886 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3893 /* now see if we need more "r" chars */
3894 if (rfirst > rlast) {
3896 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3898 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3900 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3909 rfirst = rlast = 0xffffffff;
3913 /* now see which range will peter our first, if either. */
3914 tdiff = tlast - tfirst;
3915 rdiff = rlast - rfirst;
3922 if (rfirst == 0xffffffff) {
3923 diff = tdiff; /* oops, pretend rdiff is infinite */
3925 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3926 (long)tfirst, (long)tlast);
3928 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3932 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3933 (long)tfirst, (long)(tfirst + diff),
3936 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3937 (long)tfirst, (long)rfirst);
3939 if (rfirst + diff > max)
3940 max = rfirst + diff;
3942 grows = (tfirst < rfirst &&
3943 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3955 else if (max > 0xff)
3960 PerlMemShared_free(cPVOPo->op_pv);
3961 cPVOPo->op_pv = NULL;
3963 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
3965 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3966 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3967 PAD_SETSV(cPADOPo->op_padix, swash);
3969 SvREADONLY_on(swash);
3971 cSVOPo->op_sv = swash;
3973 SvREFCNT_dec(listsv);
3974 SvREFCNT_dec(transv);
3976 if (!del && havefinal && rlen)
3977 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
3978 newSVuv((UV)final), 0);
3981 o->op_private |= OPpTRANS_GROWS;
3987 op_getmad(expr,o,'e');
3988 op_getmad(repl,o,'r');
3996 tbl = (short*)cPVOPo->op_pv;
3998 Zero(tbl, 256, short);
3999 for (i = 0; i < (I32)tlen; i++)
4001 for (i = 0, j = 0; i < 256; i++) {
4003 if (j >= (I32)rlen) {
4012 if (i < 128 && r[j] >= 128)
4022 o->op_private |= OPpTRANS_IDENTICAL;
4024 else if (j >= (I32)rlen)
4029 PerlMemShared_realloc(tbl,
4030 (0x101+rlen-j) * sizeof(short));
4031 cPVOPo->op_pv = (char*)tbl;
4033 tbl[0x100] = (short)(rlen - j);
4034 for (i=0; i < (I32)rlen - j; i++)
4035 tbl[0x101+i] = r[j+i];
4039 if (!rlen && !del) {
4042 o->op_private |= OPpTRANS_IDENTICAL;
4044 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
4045 o->op_private |= OPpTRANS_IDENTICAL;
4047 for (i = 0; i < 256; i++)
4049 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
4050 if (j >= (I32)rlen) {
4052 if (tbl[t[i]] == -1)
4058 if (tbl[t[i]] == -1) {
4059 if (t[i] < 128 && r[j] >= 128)
4066 if(del && rlen == tlen) {
4067 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
4068 } else if(rlen > tlen) {
4069 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
4073 o->op_private |= OPpTRANS_GROWS;
4075 op_getmad(expr,o,'e');
4076 op_getmad(repl,o,'r');
4086 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
4088 Constructs, checks, and returns an op of any pattern matching type.
4089 I<type> is the opcode. I<flags> gives the eight bits of C<op_flags>
4090 and, shifted up eight bits, the eight bits of C<op_private>.
4096 Perl_newPMOP(pTHX_ I32 type, I32 flags)
4101 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
4103 NewOp(1101, pmop, 1, PMOP);
4104 pmop->op_type = (OPCODE)type;
4105 pmop->op_ppaddr = PL_ppaddr[type];
4106 pmop->op_flags = (U8)flags;
4107 pmop->op_private = (U8)(0 | (flags >> 8));
4109 if (PL_hints & HINT_RE_TAINT)
4110 pmop->op_pmflags |= PMf_RETAINT;
4111 if (IN_LOCALE_COMPILETIME) {
4112 set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET);
4114 else if ((! (PL_hints & HINT_BYTES))
4115 /* Both UNI_8_BIT and locale :not_characters imply Unicode */
4116 && (PL_hints & (HINT_UNI_8_BIT|HINT_LOCALE_NOT_CHARS)))
4118 set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
4120 if (PL_hints & HINT_RE_FLAGS) {
4121 SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4122 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
4124 if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
4125 reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4126 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0
4128 if (reflags && SvOK(reflags)) {
4129 set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
4135 assert(SvPOK(PL_regex_pad[0]));
4136 if (SvCUR(PL_regex_pad[0])) {
4137 /* Pop off the "packed" IV from the end. */
4138 SV *const repointer_list = PL_regex_pad[0];
4139 const char *p = SvEND(repointer_list) - sizeof(IV);
4140 const IV offset = *((IV*)p);
4142 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
4144 SvEND_set(repointer_list, p);
4146 pmop->op_pmoffset = offset;
4147 /* This slot should be free, so assert this: */
4148 assert(PL_regex_pad[offset] == &PL_sv_undef);
4150 SV * const repointer = &PL_sv_undef;
4151 av_push(PL_regex_padav, repointer);
4152 pmop->op_pmoffset = av_len(PL_regex_padav);
4153 PL_regex_pad = AvARRAY(PL_regex_padav);
4157 return CHECKOP(type, pmop);
4160 /* Given some sort of match op o, and an expression expr containing a
4161 * pattern, either compile expr into a regex and attach it to o (if it's
4162 * constant), or convert expr into a runtime regcomp op sequence (if it's
4165 * isreg indicates that the pattern is part of a regex construct, eg
4166 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
4167 * split "pattern", which aren't. In the former case, expr will be a list
4168 * if the pattern contains more than one term (eg /a$b/) or if it contains
4169 * a replacement, ie s/// or tr///.
4173 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
4178 I32 repl_has_vars = 0;
4182 PERL_ARGS_ASSERT_PMRUNTIME;
4185 o->op_type == OP_SUBST
4186 || o->op_type == OP_TRANS || o->op_type == OP_TRANSR
4188 /* last element in list is the replacement; pop it */
4190 repl = cLISTOPx(expr)->op_last;
4191 kid = cLISTOPx(expr)->op_first;
4192 while (kid->op_sibling != repl)
4193 kid = kid->op_sibling;
4194 kid->op_sibling = NULL;
4195 cLISTOPx(expr)->op_last = kid;
4198 if (isreg && expr->op_type == OP_LIST &&
4199 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
4201 /* convert single element list to element */
4202 OP* const oe = expr;
4203 expr = cLISTOPx(oe)->op_first->op_sibling;
4204 cLISTOPx(oe)->op_first->op_sibling = NULL;
4205 cLISTOPx(oe)->op_last = NULL;
4209 if (o->op_type == OP_TRANS || o->op_type == OP_TRANSR) {
4210 return pmtrans(o, expr, repl);
4213 reglist = isreg && expr->op_type == OP_LIST;
4217 PL_hints |= HINT_BLOCK_SCOPE;
4220 if (expr->op_type == OP_CONST) {
4221 SV *pat = ((SVOP*)expr)->op_sv;
4222 U32 pm_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
4224 if (o->op_flags & OPf_SPECIAL)
4225 pm_flags |= RXf_SPLIT;
4228 assert (SvUTF8(pat));
4229 } else if (SvUTF8(pat)) {
4230 /* Not doing UTF-8, despite what the SV says. Is this only if we're
4231 trapped in use 'bytes'? */
4232 /* Make a copy of the octet sequence, but without the flag on, as
4233 the compiler now honours the SvUTF8 flag on pat. */
4235 const char *const p = SvPV(pat, len);
4236 pat = newSVpvn_flags(p, len, SVs_TEMP);
4239 PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
4242 op_getmad(expr,(OP*)pm,'e');
4248 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
4249 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
4251 : OP_REGCMAYBE),0,expr);
4253 NewOp(1101, rcop, 1, LOGOP);
4254 rcop->op_type = OP_REGCOMP;
4255 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
4256 rcop->op_first = scalar(expr);
4257 rcop->op_flags |= OPf_KIDS
4258 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
4259 | (reglist ? OPf_STACKED : 0);
4260 rcop->op_private = 1;
4263 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
4265 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
4266 if (PL_hints & HINT_RE_EVAL) PL_cv_has_eval = 1;
4268 /* establish postfix order */
4269 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
4271 rcop->op_next = expr;
4272 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
4275 rcop->op_next = LINKLIST(expr);
4276 expr->op_next = (OP*)rcop;
4279 op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
4284 if (pm->op_pmflags & PMf_EVAL) {
4286 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
4287 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
4289 else if (repl->op_type == OP_CONST)
4293 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
4294 if (curop->op_type == OP_SCOPE
4295 || curop->op_type == OP_LEAVE
4296 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
4297 if (curop->op_type == OP_GV) {
4298 GV * const gv = cGVOPx_gv(curop);
4300 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
4303 else if (curop->op_type == OP_RV2CV)
4305 else if (curop->op_type == OP_RV2SV ||
4306 curop->op_type == OP_RV2AV ||
4307 curop->op_type == OP_RV2HV ||
4308 curop->op_type == OP_RV2GV) {
4309 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
4312 else if (curop->op_type == OP_PADSV ||
4313 curop->op_type == OP_PADAV ||
4314 curop->op_type == OP_PADHV ||
4315 curop->op_type == OP_PADANY)
4319 else if (curop->op_type == OP_PUSHRE)
4320 NOOP; /* Okay here, dangerous in newASSIGNOP */
4330 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
4332 pm->op_pmflags |= PMf_CONST; /* const for long enough */
4333 op_prepend_elem(o->op_type, scalar(repl), o);
4336 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
4337 pm->op_pmflags |= PMf_MAYBE_CONST;
4339 NewOp(1101, rcop, 1, LOGOP);
4340 rcop->op_type = OP_SUBSTCONT;
4341 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
4342 rcop->op_first = scalar(repl);
4343 rcop->op_flags |= OPf_KIDS;
4344 rcop->op_private = 1;
4347 /* establish postfix order */
4348 rcop->op_next = LINKLIST(repl);
4349 repl->op_next = (OP*)rcop;
4351 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
4352 assert(!(pm->op_pmflags & PMf_ONCE));
4353 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
4362 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
4364 Constructs, checks, and returns an op of any type that involves an
4365 embedded SV. I<type> is the opcode. I<flags> gives the eight bits
4366 of C<op_flags>. I<sv> gives the SV to embed in the op; this function
4367 takes ownership of one reference to it.
4373 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
4378 PERL_ARGS_ASSERT_NEWSVOP;
4380 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4381 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4382 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4384 NewOp(1101, svop, 1, SVOP);
4385 svop->op_type = (OPCODE)type;
4386 svop->op_ppaddr = PL_ppaddr[type];
4388 svop->op_next = (OP*)svop;
4389 svop->op_flags = (U8)flags;
4390 if (PL_opargs[type] & OA_RETSCALAR)
4392 if (PL_opargs[type] & OA_TARGET)
4393 svop->op_targ = pad_alloc(type, SVs_PADTMP);
4394 return CHECKOP(type, svop);
4400 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
4402 Constructs, checks, and returns an op of any type that involves a
4403 reference to a pad element. I<type> is the opcode. I<flags> gives the
4404 eight bits of C<op_flags>. A pad slot is automatically allocated, and
4405 is populated with I<sv>; this function takes ownership of one reference
4408 This function only exists if Perl has been compiled to use ithreads.
4414 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
4419 PERL_ARGS_ASSERT_NEWPADOP;
4421 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4422 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4423 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4425 NewOp(1101, padop, 1, PADOP);
4426 padop->op_type = (OPCODE)type;
4427 padop->op_ppaddr = PL_ppaddr[type];
4428 padop->op_padix = pad_alloc(type, SVs_PADTMP);
4429 SvREFCNT_dec(PAD_SVl(padop->op_padix));
4430 PAD_SETSV(padop->op_padix, sv);
4433 padop->op_next = (OP*)padop;
4434 padop->op_flags = (U8)flags;
4435 if (PL_opargs[type] & OA_RETSCALAR)
4437 if (PL_opargs[type] & OA_TARGET)
4438 padop->op_targ = pad_alloc(type, SVs_PADTMP);
4439 return CHECKOP(type, padop);
4442 #endif /* !USE_ITHREADS */
4445 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
4447 Constructs, checks, and returns an op of any type that involves an
4448 embedded reference to a GV. I<type> is the opcode. I<flags> gives the
4449 eight bits of C<op_flags>. I<gv> identifies the GV that the op should
4450 reference; calling this function does not transfer ownership of any
4457 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
4461 PERL_ARGS_ASSERT_NEWGVOP;
4465 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4467 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4472 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
4474 Constructs, checks, and returns an op of any type that involves an
4475 embedded C-level pointer (PV). I<type> is the opcode. I<flags> gives
4476 the eight bits of C<op_flags>. I<pv> supplies the C-level pointer, which
4477 must have been allocated using L</PerlMemShared_malloc>; the memory will
4478 be freed when the op is destroyed.
4484 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
4489 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4491 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4493 NewOp(1101, pvop, 1, PVOP);
4494 pvop->op_type = (OPCODE)type;
4495 pvop->op_ppaddr = PL_ppaddr[type];
4497 pvop->op_next = (OP*)pvop;
4498 pvop->op_flags = (U8)flags;
4499 if (PL_opargs[type] & OA_RETSCALAR)
4501 if (PL_opargs[type] & OA_TARGET)
4502 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
4503 return CHECKOP(type, pvop);
4511 Perl_package(pTHX_ OP *o)
4514 SV *const sv = cSVOPo->op_sv;
4519 PERL_ARGS_ASSERT_PACKAGE;
4521 SAVEGENERICSV(PL_curstash);
4522 save_item(PL_curstname);
4524 PL_curstash = (HV *)SvREFCNT_inc(gv_stashsv(sv, GV_ADD));
4526 sv_setsv(PL_curstname, sv);
4528 PL_hints |= HINT_BLOCK_SCOPE;
4529 PL_parser->copline = NOLINE;
4530 PL_parser->expect = XSTATE;
4535 if (!PL_madskills) {
4540 pegop = newOP(OP_NULL,0);
4541 op_getmad(o,pegop,'P');
4547 Perl_package_version( pTHX_ OP *v )
4550 U32 savehints = PL_hints;
4551 PERL_ARGS_ASSERT_PACKAGE_VERSION;
4552 PL_hints &= ~HINT_STRICT_VARS;
4553 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
4554 PL_hints = savehints;
4563 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
4570 OP *pegop = newOP(OP_NULL,0);
4572 SV *use_version = NULL;
4574 PERL_ARGS_ASSERT_UTILIZE;
4576 if (idop->op_type != OP_CONST)
4577 Perl_croak(aTHX_ "Module name must be constant");
4580 op_getmad(idop,pegop,'U');
4585 SV * const vesv = ((SVOP*)version)->op_sv;
4588 op_getmad(version,pegop,'V');
4589 if (!arg && !SvNIOKp(vesv)) {
4596 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
4597 Perl_croak(aTHX_ "Version number must be a constant number");
4599 /* Make copy of idop so we don't free it twice */
4600 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4602 /* Fake up a method call to VERSION */
4603 meth = newSVpvs_share("VERSION");
4604 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4605 op_append_elem(OP_LIST,
4606 op_prepend_elem(OP_LIST, pack, list(version)),
4607 newSVOP(OP_METHOD_NAMED, 0, meth)));
4611 /* Fake up an import/unimport */
4612 if (arg && arg->op_type == OP_STUB) {
4614 op_getmad(arg,pegop,'S');
4615 imop = arg; /* no import on explicit () */
4617 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
4618 imop = NULL; /* use 5.0; */
4620 use_version = ((SVOP*)idop)->op_sv;
4622 idop->op_private |= OPpCONST_NOVER;
4628 op_getmad(arg,pegop,'A');
4630 /* Make copy of idop so we don't free it twice */
4631 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4633 /* Fake up a method call to import/unimport */
4635 ? newSVpvs_share("import") : newSVpvs_share("unimport");
4636 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4637 op_append_elem(OP_LIST,
4638 op_prepend_elem(OP_LIST, pack, list(arg)),
4639 newSVOP(OP_METHOD_NAMED, 0, meth)));
4642 /* Fake up the BEGIN {}, which does its thing immediately. */
4644 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
4647 op_append_elem(OP_LINESEQ,
4648 op_append_elem(OP_LINESEQ,
4649 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
4650 newSTATEOP(0, NULL, veop)),
4651 newSTATEOP(0, NULL, imop) ));
4654 HV * const hinthv = GvHV(PL_hintgv);
4655 const bool hhoff = !hinthv || !(PL_hints & HINT_LOCALIZE_HH);
4658 * feature bundle that corresponds to the required version. */
4659 use_version = sv_2mortal(new_version(use_version));
4660 S_enable_feature_bundle(aTHX_ use_version);
4662 /* If a version >= 5.11.0 is requested, strictures are on by default! */
4663 if (vcmp(use_version,
4664 sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
4665 if (hhoff || !hv_exists(hinthv, "strict/refs", 11))
4666 PL_hints |= HINT_STRICT_REFS;
4667 if (hhoff || !hv_exists(hinthv, "strict/subs", 11))
4668 PL_hints |= HINT_STRICT_SUBS;
4669 if (hhoff || !hv_exists(hinthv, "strict/vars", 11))
4670 PL_hints |= HINT_STRICT_VARS;
4672 /* otherwise they are off */
4674 if (hhoff || !hv_exists(hinthv, "strict/refs", 11))
4675 PL_hints &= ~HINT_STRICT_REFS;
4676 if (hhoff || !hv_exists(hinthv, "strict/subs", 11))
4677 PL_hints &= ~HINT_STRICT_SUBS;
4678 if (hhoff || !hv_exists(hinthv, "strict/vars", 11))
4679 PL_hints &= ~HINT_STRICT_VARS;
4683 /* The "did you use incorrect case?" warning used to be here.
4684 * The problem is that on case-insensitive filesystems one
4685 * might get false positives for "use" (and "require"):
4686 * "use Strict" or "require CARP" will work. This causes
4687 * portability problems for the script: in case-strict
4688 * filesystems the script will stop working.
4690 * The "incorrect case" warning checked whether "use Foo"
4691 * imported "Foo" to your namespace, but that is wrong, too:
4692 * there is no requirement nor promise in the language that
4693 * a Foo.pm should or would contain anything in package "Foo".
4695 * There is very little Configure-wise that can be done, either:
4696 * the case-sensitivity of the build filesystem of Perl does not
4697 * help in guessing the case-sensitivity of the runtime environment.
4700 PL_hints |= HINT_BLOCK_SCOPE;
4701 PL_parser->copline = NOLINE;
4702 PL_parser->expect = XSTATE;
4703 PL_cop_seqmax++; /* Purely for B::*'s benefit */
4704 if (PL_cop_seqmax == PERL_PADSEQ_INTRO) /* not a legal value */
4708 if (!PL_madskills) {
4709 /* FIXME - don't allocate pegop if !PL_madskills */
4718 =head1 Embedding Functions
4720 =for apidoc load_module
4722 Loads the module whose name is pointed to by the string part of name.
4723 Note that the actual module name, not its filename, should be given.
4724 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
4725 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
4726 (or 0 for no flags). ver, if specified and not NULL, provides version semantics
4727 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
4728 arguments can be used to specify arguments to the module's import()
4729 method, similar to C<use Foo::Bar VERSION LIST>. They must be
4730 terminated with a final NULL pointer. Note that this list can only
4731 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
4732 Otherwise at least a single NULL pointer to designate the default
4733 import list is required.
4735 The reference count for each specified C<SV*> parameter is decremented.
4740 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
4744 PERL_ARGS_ASSERT_LOAD_MODULE;
4746 va_start(args, ver);
4747 vload_module(flags, name, ver, &args);
4751 #ifdef PERL_IMPLICIT_CONTEXT
4753 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
4757 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
4758 va_start(args, ver);
4759 vload_module(flags, name, ver, &args);
4765 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
4769 OP * const modname = newSVOP(OP_CONST, 0, name);
4771 PERL_ARGS_ASSERT_VLOAD_MODULE;
4773 modname->op_private |= OPpCONST_BARE;
4775 veop = newSVOP(OP_CONST, 0, ver);
4779 if (flags & PERL_LOADMOD_NOIMPORT) {
4780 imop = sawparens(newNULLLIST());
4782 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
4783 imop = va_arg(*args, OP*);
4788 sv = va_arg(*args, SV*);
4790 imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
4791 sv = va_arg(*args, SV*);
4795 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
4796 * that it has a PL_parser to play with while doing that, and also
4797 * that it doesn't mess with any existing parser, by creating a tmp
4798 * new parser with lex_start(). This won't actually be used for much,
4799 * since pp_require() will create another parser for the real work. */
4802 SAVEVPTR(PL_curcop);
4803 lex_start(NULL, NULL, LEX_START_SAME_FILTER);
4804 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
4805 veop, modname, imop);
4810 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
4816 PERL_ARGS_ASSERT_DOFILE;
4818 if (!force_builtin) {
4819 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
4820 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
4821 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
4822 gv = gvp ? *gvp : NULL;
4826 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
4827 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
4828 op_append_elem(OP_LIST, term,
4829 scalar(newUNOP(OP_RV2CV, 0,
4830 newGVOP(OP_GV, 0, gv))))));
4833 doop = newUNOP(OP_DOFILE, 0, scalar(term));
4839 =head1 Optree construction
4841 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
4843 Constructs, checks, and returns an C<lslice> (list slice) op. I<flags>
4844 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
4845 be set automatically, and, shifted up eight bits, the eight bits of
4846 C<op_private>, except that the bit with value 1 or 2 is automatically
4847 set as required. I<listval> and I<subscript> supply the parameters of
4848 the slice; they are consumed by this function and become part of the
4849 constructed op tree.
4855 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
4857 return newBINOP(OP_LSLICE, flags,
4858 list(force_list(subscript)),
4859 list(force_list(listval)) );
4863 S_is_list_assignment(pTHX_ register const OP *o)
4871 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
4872 o = cUNOPo->op_first;
4874 flags = o->op_flags;
4876 if (type == OP_COND_EXPR) {
4877 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
4878 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
4883 yyerror("Assignment to both a list and a scalar");
4887 if (type == OP_LIST &&
4888 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
4889 o->op_private & OPpLVAL_INTRO)
4892 if (type == OP_LIST || flags & OPf_PARENS ||
4893 type == OP_RV2AV || type == OP_RV2HV ||
4894 type == OP_ASLICE || type == OP_HSLICE)
4897 if (type == OP_PADAV || type == OP_PADHV)
4900 if (type == OP_RV2SV)
4907 Helper function for newASSIGNOP to detection commonality between the
4908 lhs and the rhs. Marks all variables with PL_generation. If it
4909 returns TRUE the assignment must be able to handle common variables.
4911 PERL_STATIC_INLINE bool
4912 S_aassign_common_vars(pTHX_ OP* o)
4915 for (curop = cUNOPo->op_first; curop; curop=curop->op_sibling) {
4916 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4917 if (curop->op_type == OP_GV) {
4918 GV *gv = cGVOPx_gv(curop);
4920 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4922 GvASSIGN_GENERATION_set(gv, PL_generation);
4924 else if (curop->op_type == OP_PADSV ||
4925 curop->op_type == OP_PADAV ||
4926 curop->op_type == OP_PADHV ||
4927 curop->op_type == OP_PADANY)
4929 if (PAD_COMPNAME_GEN(curop->op_targ)
4930 == (STRLEN)PL_generation)
4932 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4935 else if (curop->op_type == OP_RV2CV)
4937 else if (curop->op_type == OP_RV2SV ||
4938 curop->op_type == OP_RV2AV ||
4939 curop->op_type == OP_RV2HV ||
4940 curop->op_type == OP_RV2GV) {
4941 if (cUNOPx(curop)->op_first->op_type != OP_GV) /* funny deref? */
4944 else if (curop->op_type == OP_PUSHRE) {
4946 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4947 GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
4949 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4951 GvASSIGN_GENERATION_set(gv, PL_generation);
4955 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4958 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4960 GvASSIGN_GENERATION_set(gv, PL_generation);
4968 if (curop->op_flags & OPf_KIDS) {
4969 if (aassign_common_vars(curop))
4977 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
4979 Constructs, checks, and returns an assignment op. I<left> and I<right>
4980 supply the parameters of the assignment; they are consumed by this
4981 function and become part of the constructed op tree.
4983 If I<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
4984 a suitable conditional optree is constructed. If I<optype> is the opcode
4985 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
4986 performs the binary operation and assigns the result to the left argument.
4987 Either way, if I<optype> is non-zero then I<flags> has no effect.
4989 If I<optype> is zero, then a plain scalar or list assignment is
4990 constructed. Which type of assignment it is is automatically determined.
4991 I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
4992 will be set automatically, and, shifted up eight bits, the eight bits
4993 of C<op_private>, except that the bit with value 1 or 2 is automatically
5000 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
5006 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
5007 return newLOGOP(optype, 0,
5008 op_lvalue(scalar(left), optype),
5009 newUNOP(OP_SASSIGN, 0, scalar(right)));
5012 return newBINOP(optype, OPf_STACKED,
5013 op_lvalue(scalar(left), optype), scalar(right));
5017 if (is_list_assignment(left)) {
5018 static const char no_list_state[] = "Initialization of state variables"
5019 " in list context currently forbidden";
5021 bool maybe_common_vars = TRUE;
5024 left = op_lvalue(left, OP_AASSIGN);
5025 curop = list(force_list(left));
5026 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
5027 o->op_private = (U8)(0 | (flags >> 8));
5029 if ((left->op_type == OP_LIST
5030 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
5032 OP* lop = ((LISTOP*)left)->op_first;
5033 maybe_common_vars = FALSE;
5035 if (lop->op_type == OP_PADSV ||
5036 lop->op_type == OP_PADAV ||
5037 lop->op_type == OP_PADHV ||
5038 lop->op_type == OP_PADANY) {
5039 if (!(lop->op_private & OPpLVAL_INTRO))
5040 maybe_common_vars = TRUE;
5042 if (lop->op_private & OPpPAD_STATE) {
5043 if (left->op_private & OPpLVAL_INTRO) {
5044 /* Each variable in state($a, $b, $c) = ... */
5047 /* Each state variable in
5048 (state $a, my $b, our $c, $d, undef) = ... */
5050 yyerror(no_list_state);
5052 /* Each my variable in
5053 (state $a, my $b, our $c, $d, undef) = ... */
5055 } else if (lop->op_type == OP_UNDEF ||
5056 lop->op_type == OP_PUSHMARK) {
5057 /* undef may be interesting in
5058 (state $a, undef, state $c) */
5060 /* Other ops in the list. */
5061 maybe_common_vars = TRUE;
5063 lop = lop->op_sibling;
5066 else if ((left->op_private & OPpLVAL_INTRO)
5067 && ( left->op_type == OP_PADSV
5068 || left->op_type == OP_PADAV
5069 || left->op_type == OP_PADHV
5070 || left->op_type == OP_PADANY))
5072 if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
5073 if (left->op_private & OPpPAD_STATE) {
5074 /* All single variable list context state assignments, hence
5084 yyerror(no_list_state);
5088 /* PL_generation sorcery:
5089 * an assignment like ($a,$b) = ($c,$d) is easier than
5090 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
5091 * To detect whether there are common vars, the global var
5092 * PL_generation is incremented for each assign op we compile.
5093 * Then, while compiling the assign op, we run through all the
5094 * variables on both sides of the assignment, setting a spare slot
5095 * in each of them to PL_generation. If any of them already have
5096 * that value, we know we've got commonality. We could use a
5097 * single bit marker, but then we'd have to make 2 passes, first
5098 * to clear the flag, then to test and set it. To find somewhere
5099 * to store these values, evil chicanery is done with SvUVX().
5102 if (maybe_common_vars) {
5104 if (aassign_common_vars(o))
5105 o->op_private |= OPpASSIGN_COMMON;
5109 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
5110 OP* tmpop = ((LISTOP*)right)->op_first;
5111 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
5112 PMOP * const pm = (PMOP*)tmpop;
5113 if (left->op_type == OP_RV2AV &&
5114 !(left->op_private & OPpLVAL_INTRO) &&
5115 !(o->op_private & OPpASSIGN_COMMON) )
5117 tmpop = ((UNOP*)left)->op_first;
5118 if (tmpop->op_type == OP_GV
5120 && !pm->op_pmreplrootu.op_pmtargetoff
5122 && !pm->op_pmreplrootu.op_pmtargetgv
5126 pm->op_pmreplrootu.op_pmtargetoff
5127 = cPADOPx(tmpop)->op_padix;
5128 cPADOPx(tmpop)->op_padix = 0; /* steal it */
5130 pm->op_pmreplrootu.op_pmtargetgv
5131 = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
5132 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
5134 pm->op_pmflags |= PMf_ONCE;
5135 tmpop = cUNOPo->op_first; /* to list (nulled) */
5136 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
5137 tmpop->op_sibling = NULL; /* don't free split */
5138 right->op_next = tmpop->op_next; /* fix starting loc */
5139 op_free(o); /* blow off assign */
5140 right->op_flags &= ~OPf_WANT;
5141 /* "I don't know and I don't care." */
5146 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
5147 ((LISTOP*)right)->op_last->op_type == OP_CONST)
5149 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
5150 if (SvIOK(sv) && SvIVX(sv) == 0)
5151 sv_setiv(sv, PL_modcount+1);
5159 right = newOP(OP_UNDEF, 0);
5160 if (right->op_type == OP_READLINE) {
5161 right->op_flags |= OPf_STACKED;
5162 return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN),
5166 o = newBINOP(OP_SASSIGN, flags,
5167 scalar(right), op_lvalue(scalar(left), OP_SASSIGN) );
5173 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
5175 Constructs a state op (COP). The state op is normally a C<nextstate> op,
5176 but will be a C<dbstate> op if debugging is enabled for currently-compiled
5177 code. The state op is populated from L</PL_curcop> (or L</PL_compiling>).
5178 If I<label> is non-null, it supplies the name of a label to attach to
5179 the state op; this function takes ownership of the memory pointed at by
5180 I<label>, and will free it. I<flags> gives the eight bits of C<op_flags>
5183 If I<o> is null, the state op is returned. Otherwise the state op is
5184 combined with I<o> into a C<lineseq> list op, which is returned. I<o>
5185 is consumed by this function and becomes part of the returned op tree.
5191 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
5194 const U32 seq = intro_my();
5197 NewOp(1101, cop, 1, COP);
5198 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
5199 cop->op_type = OP_DBSTATE;
5200 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
5203 cop->op_type = OP_NEXTSTATE;
5204 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
5206 cop->op_flags = (U8)flags;
5207 CopHINTS_set(cop, PL_hints);
5209 cop->op_private |= NATIVE_HINTS;
5211 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
5212 cop->op_next = (OP*)cop;
5215 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
5216 CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop)));
5218 Perl_cop_store_label(aTHX_ cop, label, strlen(label), 0);
5220 PL_hints |= HINT_BLOCK_SCOPE;
5221 /* It seems that we need to defer freeing this pointer, as other parts
5222 of the grammar end up wanting to copy it after this op has been
5227 if (PL_parser && PL_parser->copline == NOLINE)
5228 CopLINE_set(cop, CopLINE(PL_curcop));
5230 CopLINE_set(cop, PL_parser->copline);
5232 PL_parser->copline = NOLINE;
5235 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
5237 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
5239 CopSTASH_set(cop, PL_curstash);
5241 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash) {
5242 /* this line can have a breakpoint - store the cop in IV */
5243 AV *av = CopFILEAVx(PL_curcop);
5245 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
5246 if (svp && *svp != &PL_sv_undef ) {
5247 (void)SvIOK_on(*svp);
5248 SvIV_set(*svp, PTR2IV(cop));
5253 if (flags & OPf_SPECIAL)
5255 return op_prepend_elem(OP_LINESEQ, (OP*)cop, o);
5259 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
5261 Constructs, checks, and returns a logical (flow control) op. I<type>
5262 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
5263 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
5264 the eight bits of C<op_private>, except that the bit with value 1 is
5265 automatically set. I<first> supplies the expression controlling the
5266 flow, and I<other> supplies the side (alternate) chain of ops; they are
5267 consumed by this function and become part of the constructed op tree.
5273 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
5277 PERL_ARGS_ASSERT_NEWLOGOP;
5279 return new_logop(type, flags, &first, &other);
5283 S_search_const(pTHX_ OP *o)
5285 PERL_ARGS_ASSERT_SEARCH_CONST;
5287 switch (o->op_type) {
5291 if (o->op_flags & OPf_KIDS)
5292 return search_const(cUNOPo->op_first);
5299 if (!(o->op_flags & OPf_KIDS))
5301 kid = cLISTOPo->op_first;
5303 switch (kid->op_type) {
5307 kid = kid->op_sibling;
5310 if (kid != cLISTOPo->op_last)
5316 kid = cLISTOPo->op_last;
5318 return search_const(kid);
5326 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
5334 int prepend_not = 0;
5336 PERL_ARGS_ASSERT_NEW_LOGOP;
5341 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
5342 return newBINOP(type, flags, scalar(first), scalar(other));
5344 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
5346 scalarboolean(first);
5347 /* optimize AND and OR ops that have NOTs as children */
5348 if (first->op_type == OP_NOT
5349 && (first->op_flags & OPf_KIDS)
5350 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
5351 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
5353 if (type == OP_AND || type == OP_OR) {
5359 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
5361 prepend_not = 1; /* prepend a NOT op later */
5365 /* search for a constant op that could let us fold the test */
5366 if ((cstop = search_const(first))) {
5367 if (cstop->op_private & OPpCONST_STRICT)
5368 no_bareword_allowed(cstop);
5369 else if ((cstop->op_private & OPpCONST_BARE))
5370 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
5371 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
5372 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
5373 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
5375 if (other->op_type == OP_CONST)
5376 other->op_private |= OPpCONST_SHORTCIRCUIT;
5378 OP *newop = newUNOP(OP_NULL, 0, other);
5379 op_getmad(first, newop, '1');
5380 newop->op_targ = type; /* set "was" field */
5384 if (other->op_type == OP_LEAVE)
5385 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
5386 else if (other->op_type == OP_MATCH
5387 || other->op_type == OP_SUBST
5388 || other->op_type == OP_TRANSR
5389 || other->op_type == OP_TRANS)
5390 /* Mark the op as being unbindable with =~ */
5391 other->op_flags |= OPf_SPECIAL;
5395 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
5396 const OP *o2 = other;
5397 if ( ! (o2->op_type == OP_LIST
5398 && (( o2 = cUNOPx(o2)->op_first))
5399 && o2->op_type == OP_PUSHMARK
5400 && (( o2 = o2->op_sibling)) )
5403 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
5404 || o2->op_type == OP_PADHV)
5405 && o2->op_private & OPpLVAL_INTRO
5406 && !(o2->op_private & OPpPAD_STATE))
5408 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
5409 "Deprecated use of my() in false conditional");
5413 if (first->op_type == OP_CONST)
5414 first->op_private |= OPpCONST_SHORTCIRCUIT;
5416 first = newUNOP(OP_NULL, 0, first);
5417 op_getmad(other, first, '2');
5418 first->op_targ = type; /* set "was" field */
5425 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
5426 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
5428 const OP * const k1 = ((UNOP*)first)->op_first;
5429 const OP * const k2 = k1->op_sibling;
5431 switch (first->op_type)
5434 if (k2 && k2->op_type == OP_READLINE
5435 && (k2->op_flags & OPf_STACKED)
5436 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5438 warnop = k2->op_type;
5443 if (k1->op_type == OP_READDIR
5444 || k1->op_type == OP_GLOB
5445 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5446 || k1->op_type == OP_EACH
5447 || k1->op_type == OP_AEACH)
5449 warnop = ((k1->op_type == OP_NULL)
5450 ? (OPCODE)k1->op_targ : k1->op_type);
5455 const line_t oldline = CopLINE(PL_curcop);
5456 CopLINE_set(PL_curcop, PL_parser->copline);
5457 Perl_warner(aTHX_ packWARN(WARN_MISC),
5458 "Value of %s%s can be \"0\"; test with defined()",
5460 ((warnop == OP_READLINE || warnop == OP_GLOB)
5461 ? " construct" : "() operator"));
5462 CopLINE_set(PL_curcop, oldline);
5469 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
5470 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
5472 NewOp(1101, logop, 1, LOGOP);
5474 logop->op_type = (OPCODE)type;
5475 logop->op_ppaddr = PL_ppaddr[type];
5476 logop->op_first = first;
5477 logop->op_flags = (U8)(flags | OPf_KIDS);
5478 logop->op_other = LINKLIST(other);
5479 logop->op_private = (U8)(1 | (flags >> 8));
5481 /* establish postfix order */
5482 logop->op_next = LINKLIST(first);
5483 first->op_next = (OP*)logop;
5484 first->op_sibling = other;
5486 CHECKOP(type,logop);
5488 o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
5495 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
5497 Constructs, checks, and returns a conditional-expression (C<cond_expr>)
5498 op. I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
5499 will be set automatically, and, shifted up eight bits, the eight bits of
5500 C<op_private>, except that the bit with value 1 is automatically set.
5501 I<first> supplies the expression selecting between the two branches,
5502 and I<trueop> and I<falseop> supply the branches; they are consumed by
5503 this function and become part of the constructed op tree.
5509 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
5517 PERL_ARGS_ASSERT_NEWCONDOP;
5520 return newLOGOP(OP_AND, 0, first, trueop);
5522 return newLOGOP(OP_OR, 0, first, falseop);
5524 scalarboolean(first);
5525 if ((cstop = search_const(first))) {
5526 /* Left or right arm of the conditional? */
5527 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
5528 OP *live = left ? trueop : falseop;
5529 OP *const dead = left ? falseop : trueop;
5530 if (cstop->op_private & OPpCONST_BARE &&
5531 cstop->op_private & OPpCONST_STRICT) {
5532 no_bareword_allowed(cstop);
5535 /* This is all dead code when PERL_MAD is not defined. */
5536 live = newUNOP(OP_NULL, 0, live);
5537 op_getmad(first, live, 'C');
5538 op_getmad(dead, live, left ? 'e' : 't');
5543 if (live->op_type == OP_LEAVE)
5544 live = newUNOP(OP_NULL, OPf_SPECIAL, live);
5545 else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST
5546 || live->op_type == OP_TRANS || live->op_type == OP_TRANSR)
5547 /* Mark the op as being unbindable with =~ */
5548 live->op_flags |= OPf_SPECIAL;
5551 NewOp(1101, logop, 1, LOGOP);
5552 logop->op_type = OP_COND_EXPR;
5553 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
5554 logop->op_first = first;
5555 logop->op_flags = (U8)(flags | OPf_KIDS);
5556 logop->op_private = (U8)(1 | (flags >> 8));
5557 logop->op_other = LINKLIST(trueop);
5558 logop->op_next = LINKLIST(falseop);
5560 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
5563 /* establish postfix order */
5564 start = LINKLIST(first);
5565 first->op_next = (OP*)logop;
5567 first->op_sibling = trueop;
5568 trueop->op_sibling = falseop;
5569 o = newUNOP(OP_NULL, 0, (OP*)logop);
5571 trueop->op_next = falseop->op_next = o;
5578 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
5580 Constructs and returns a C<range> op, with subordinate C<flip> and
5581 C<flop> ops. I<flags> gives the eight bits of C<op_flags> for the
5582 C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
5583 for both the C<flip> and C<range> ops, except that the bit with value
5584 1 is automatically set. I<left> and I<right> supply the expressions
5585 controlling the endpoints of the range; they are consumed by this function
5586 and become part of the constructed op tree.
5592 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
5601 PERL_ARGS_ASSERT_NEWRANGE;
5603 NewOp(1101, range, 1, LOGOP);
5605 range->op_type = OP_RANGE;
5606 range->op_ppaddr = PL_ppaddr[OP_RANGE];
5607 range->op_first = left;
5608 range->op_flags = OPf_KIDS;
5609 leftstart = LINKLIST(left);
5610 range->op_other = LINKLIST(right);
5611 range->op_private = (U8)(1 | (flags >> 8));
5613 left->op_sibling = right;
5615 range->op_next = (OP*)range;
5616 flip = newUNOP(OP_FLIP, flags, (OP*)range);
5617 flop = newUNOP(OP_FLOP, 0, flip);
5618 o = newUNOP(OP_NULL, 0, flop);
5620 range->op_next = leftstart;
5622 left->op_next = flip;
5623 right->op_next = flop;
5625 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5626 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
5627 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5628 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
5630 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5631 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5633 /* check barewords before they might be optimized aways */
5634 if (flip->op_private && cSVOPx(left)->op_private & OPpCONST_STRICT)
5635 no_bareword_allowed(left);
5636 if (flop->op_private && cSVOPx(right)->op_private & OPpCONST_STRICT)
5637 no_bareword_allowed(right);
5640 if (!flip->op_private || !flop->op_private)
5641 LINKLIST(o); /* blow off optimizer unless constant */
5647 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
5649 Constructs, checks, and returns an op tree expressing a loop. This is
5650 only a loop in the control flow through the op tree; it does not have
5651 the heavyweight loop structure that allows exiting the loop by C<last>
5652 and suchlike. I<flags> gives the eight bits of C<op_flags> for the
5653 top-level op, except that some bits will be set automatically as required.
5654 I<expr> supplies the expression controlling loop iteration, and I<block>
5655 supplies the body of the loop; they are consumed by this function and
5656 become part of the constructed op tree. I<debuggable> is currently
5657 unused and should always be 1.
5663 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
5668 const bool once = block && block->op_flags & OPf_SPECIAL &&
5669 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
5671 PERL_UNUSED_ARG(debuggable);
5674 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
5675 return block; /* do {} while 0 does once */
5676 if (expr->op_type == OP_READLINE
5677 || expr->op_type == OP_READDIR
5678 || expr->op_type == OP_GLOB
5679 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5680 expr = newUNOP(OP_DEFINED, 0,
5681 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5682 } else if (expr->op_flags & OPf_KIDS) {
5683 const OP * const k1 = ((UNOP*)expr)->op_first;
5684 const OP * const k2 = k1 ? k1->op_sibling : NULL;
5685 switch (expr->op_type) {
5687 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5688 && (k2->op_flags & OPf_STACKED)
5689 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5690 expr = newUNOP(OP_DEFINED, 0, expr);
5694 if (k1 && (k1->op_type == OP_READDIR
5695 || k1->op_type == OP_GLOB
5696 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5697 || k1->op_type == OP_EACH
5698 || k1->op_type == OP_AEACH))
5699 expr = newUNOP(OP_DEFINED, 0, expr);
5705 /* if block is null, the next op_append_elem() would put UNSTACK, a scalar
5706 * op, in listop. This is wrong. [perl #27024] */
5708 block = newOP(OP_NULL, 0);
5709 listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
5710 o = new_logop(OP_AND, 0, &expr, &listop);
5713 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
5715 if (once && o != listop)
5716 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
5719 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
5721 o->op_flags |= flags;
5723 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
5728 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my
5730 Constructs, checks, and returns an op tree expressing a C<while> loop.
5731 This is a heavyweight loop, with structure that allows exiting the loop
5732 by C<last> and suchlike.
5734 I<loop> is an optional preconstructed C<enterloop> op to use in the
5735 loop; if it is null then a suitable op will be constructed automatically.
5736 I<expr> supplies the loop's controlling expression. I<block> supplies the
5737 main body of the loop, and I<cont> optionally supplies a C<continue> block
5738 that operates as a second half of the body. All of these optree inputs
5739 are consumed by this function and become part of the constructed op tree.
5741 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5742 op and, shifted up eight bits, the eight bits of C<op_private> for
5743 the C<leaveloop> op, except that (in both cases) some bits will be set
5744 automatically. I<debuggable> is currently unused and should always be 1.
5745 I<has_my> can be supplied as true to force the
5746 loop body to be enclosed in its own scope.
5752 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
5753 OP *expr, OP *block, OP *cont, I32 has_my)
5762 PERL_UNUSED_ARG(debuggable);
5765 if (expr->op_type == OP_READLINE
5766 || expr->op_type == OP_READDIR
5767 || expr->op_type == OP_GLOB
5768 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5769 expr = newUNOP(OP_DEFINED, 0,
5770 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5771 } else if (expr->op_flags & OPf_KIDS) {
5772 const OP * const k1 = ((UNOP*)expr)->op_first;
5773 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
5774 switch (expr->op_type) {
5776 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5777 && (k2->op_flags & OPf_STACKED)
5778 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5779 expr = newUNOP(OP_DEFINED, 0, expr);
5783 if (k1 && (k1->op_type == OP_READDIR
5784 || k1->op_type == OP_GLOB
5785 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5786 || k1->op_type == OP_EACH
5787 || k1->op_type == OP_AEACH))
5788 expr = newUNOP(OP_DEFINED, 0, expr);
5795 block = newOP(OP_NULL, 0);
5796 else if (cont || has_my) {
5797 block = op_scope(block);
5801 next = LINKLIST(cont);
5804 OP * const unstack = newOP(OP_UNSTACK, 0);
5807 cont = op_append_elem(OP_LINESEQ, cont, unstack);
5811 listop = op_append_list(OP_LINESEQ, block, cont);
5813 redo = LINKLIST(listop);
5817 o = new_logop(OP_AND, 0, &expr, &listop);
5818 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
5819 op_free(expr); /* oops, it's a while (0) */
5821 return NULL; /* listop already freed by new_logop */
5824 ((LISTOP*)listop)->op_last->op_next =
5825 (o == listop ? redo : LINKLIST(o));
5831 NewOp(1101,loop,1,LOOP);
5832 loop->op_type = OP_ENTERLOOP;
5833 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
5834 loop->op_private = 0;
5835 loop->op_next = (OP*)loop;
5838 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
5840 loop->op_redoop = redo;
5841 loop->op_lastop = o;
5842 o->op_private |= loopflags;
5845 loop->op_nextop = next;
5847 loop->op_nextop = o;
5849 o->op_flags |= flags;
5850 o->op_private |= (flags >> 8);
5855 =for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont
5857 Constructs, checks, and returns an op tree expressing a C<foreach>
5858 loop (iteration through a list of values). This is a heavyweight loop,
5859 with structure that allows exiting the loop by C<last> and suchlike.
5861 I<sv> optionally supplies the variable that will be aliased to each
5862 item in turn; if null, it defaults to C<$_> (either lexical or global).
5863 I<expr> supplies the list of values to iterate over. I<block> supplies
5864 the main body of the loop, and I<cont> optionally supplies a C<continue>
5865 block that operates as a second half of the body. All of these optree
5866 inputs are consumed by this function and become part of the constructed
5869 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5870 op and, shifted up eight bits, the eight bits of C<op_private> for
5871 the C<leaveloop> op, except that (in both cases) some bits will be set
5878 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
5883 PADOFFSET padoff = 0;
5888 PERL_ARGS_ASSERT_NEWFOROP;
5891 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
5892 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
5893 sv->op_type = OP_RV2GV;
5894 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
5896 /* The op_type check is needed to prevent a possible segfault
5897 * if the loop variable is undeclared and 'strict vars' is in
5898 * effect. This is illegal but is nonetheless parsed, so we
5899 * may reach this point with an OP_CONST where we're expecting
5902 if (cUNOPx(sv)->op_first->op_type == OP_GV
5903 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
5904 iterpflags |= OPpITER_DEF;
5906 else if (sv->op_type == OP_PADSV) { /* private variable */
5907 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
5908 padoff = sv->op_targ;
5918 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
5920 SV *const namesv = PAD_COMPNAME_SV(padoff);
5922 const char *const name = SvPV_const(namesv, len);
5924 if (len == 2 && name[0] == '$' && name[1] == '_')
5925 iterpflags |= OPpITER_DEF;
5929 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
5930 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
5931 sv = newGVOP(OP_GV, 0, PL_defgv);
5936 iterpflags |= OPpITER_DEF;
5938 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
5939 expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
5940 iterflags |= OPf_STACKED;
5942 else if (expr->op_type == OP_NULL &&
5943 (expr->op_flags & OPf_KIDS) &&
5944 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
5946 /* Basically turn for($x..$y) into the same as for($x,$y), but we
5947 * set the STACKED flag to indicate that these values are to be
5948 * treated as min/max values by 'pp_iterinit'.
5950 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
5951 LOGOP* const range = (LOGOP*) flip->op_first;
5952 OP* const left = range->op_first;
5953 OP* const right = left->op_sibling;
5956 range->op_flags &= ~OPf_KIDS;
5957 range->op_first = NULL;
5959 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
5960 listop->op_first->op_next = range->op_next;
5961 left->op_next = range->op_other;
5962 right->op_next = (OP*)listop;
5963 listop->op_next = listop->op_first;
5966 op_getmad(expr,(OP*)listop,'O');
5970 expr = (OP*)(listop);
5972 iterflags |= OPf_STACKED;
5975 expr = op_lvalue(force_list(expr), OP_GREPSTART);
5978 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
5979 op_append_elem(OP_LIST, expr, scalar(sv))));
5980 assert(!loop->op_next);
5981 /* for my $x () sets OPpLVAL_INTRO;
5982 * for our $x () sets OPpOUR_INTRO */
5983 loop->op_private = (U8)iterpflags;
5984 #ifdef PL_OP_SLAB_ALLOC
5987 NewOp(1234,tmp,1,LOOP);
5988 Copy(loop,tmp,1,LISTOP);
5989 S_op_destroy(aTHX_ (OP*)loop);
5993 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
5995 loop->op_targ = padoff;
5996 wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0);
5998 op_getmad(madsv, (OP*)loop, 'v');
6003 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
6005 Constructs, checks, and returns a loop-exiting op (such as C<goto>
6006 or C<last>). I<type> is the opcode. I<label> supplies the parameter
6007 determining the target of the op; it is consumed by this function and
6008 become part of the constructed op tree.
6014 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
6019 PERL_ARGS_ASSERT_NEWLOOPEX;
6021 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
6023 if (type != OP_GOTO || label->op_type == OP_CONST) {
6024 /* "last()" means "last" */
6025 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
6026 o = newOP(type, OPf_SPECIAL);
6028 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
6029 ? SvPV_nolen_const(((SVOP*)label)->op_sv)
6033 op_getmad(label,o,'L');
6039 /* Check whether it's going to be a goto &function */
6040 if (label->op_type == OP_ENTERSUB
6041 && !(label->op_flags & OPf_STACKED))
6042 label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN));
6043 o = newUNOP(type, OPf_STACKED, label);
6045 PL_hints |= HINT_BLOCK_SCOPE;
6049 /* if the condition is a literal array or hash
6050 (or @{ ... } etc), make a reference to it.
6053 S_ref_array_or_hash(pTHX_ OP *cond)
6056 && (cond->op_type == OP_RV2AV
6057 || cond->op_type == OP_PADAV
6058 || cond->op_type == OP_RV2HV
6059 || cond->op_type == OP_PADHV))
6061 return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN));
6064 && (cond->op_type == OP_ASLICE
6065 || cond->op_type == OP_HSLICE)) {
6067 /* anonlist now needs a list from this op, was previously used in
6069 cond->op_flags |= ~(OPf_WANT_SCALAR | OPf_REF);
6070 cond->op_flags |= OPf_WANT_LIST;
6072 return newANONLIST(op_lvalue(cond, OP_ANONLIST));
6079 /* These construct the optree fragments representing given()
6082 entergiven and enterwhen are LOGOPs; the op_other pointer
6083 points up to the associated leave op. We need this so we
6084 can put it in the context and make break/continue work.
6085 (Also, of course, pp_enterwhen will jump straight to
6086 op_other if the match fails.)
6090 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
6091 I32 enter_opcode, I32 leave_opcode,
6092 PADOFFSET entertarg)
6098 PERL_ARGS_ASSERT_NEWGIVWHENOP;
6100 NewOp(1101, enterop, 1, LOGOP);
6101 enterop->op_type = (Optype)enter_opcode;
6102 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
6103 enterop->op_flags = (U8) OPf_KIDS;
6104 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
6105 enterop->op_private = 0;
6107 o = newUNOP(leave_opcode, 0, (OP *) enterop);
6110 enterop->op_first = scalar(cond);
6111 cond->op_sibling = block;
6113 o->op_next = LINKLIST(cond);
6114 cond->op_next = (OP *) enterop;
6117 /* This is a default {} block */
6118 enterop->op_first = block;
6119 enterop->op_flags |= OPf_SPECIAL;
6120 o ->op_flags |= OPf_SPECIAL;
6122 o->op_next = (OP *) enterop;
6125 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
6126 entergiven and enterwhen both
6129 enterop->op_next = LINKLIST(block);
6130 block->op_next = enterop->op_other = o;
6135 /* Does this look like a boolean operation? For these purposes
6136 a boolean operation is:
6137 - a subroutine call [*]
6138 - a logical connective
6139 - a comparison operator
6140 - a filetest operator, with the exception of -s -M -A -C
6141 - defined(), exists() or eof()
6142 - /$re/ or $foo =~ /$re/
6144 [*] possibly surprising
6147 S_looks_like_bool(pTHX_ const OP *o)
6151 PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
6153 switch(o->op_type) {
6156 return looks_like_bool(cLOGOPo->op_first);
6160 looks_like_bool(cLOGOPo->op_first)
6161 && looks_like_bool(cLOGOPo->op_first->op_sibling));
6166 o->op_flags & OPf_KIDS
6167 && looks_like_bool(cUNOPo->op_first));
6171 case OP_NOT: case OP_XOR:
6173 case OP_EQ: case OP_NE: case OP_LT:
6174 case OP_GT: case OP_LE: case OP_GE:
6176 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
6177 case OP_I_GT: case OP_I_LE: case OP_I_GE:
6179 case OP_SEQ: case OP_SNE: case OP_SLT:
6180 case OP_SGT: case OP_SLE: case OP_SGE:
6184 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
6185 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
6186 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
6187 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
6188 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
6189 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
6190 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
6191 case OP_FTTEXT: case OP_FTBINARY:
6193 case OP_DEFINED: case OP_EXISTS:
6194 case OP_MATCH: case OP_EOF:
6201 /* Detect comparisons that have been optimized away */
6202 if (cSVOPo->op_sv == &PL_sv_yes
6203 || cSVOPo->op_sv == &PL_sv_no)
6216 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
6218 Constructs, checks, and returns an op tree expressing a C<given> block.
6219 I<cond> supplies the expression that will be locally assigned to a lexical
6220 variable, and I<block> supplies the body of the C<given> construct; they
6221 are consumed by this function and become part of the constructed op tree.
6222 I<defsv_off> is the pad offset of the scalar lexical variable that will
6229 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
6232 PERL_ARGS_ASSERT_NEWGIVENOP;
6233 return newGIVWHENOP(
6234 ref_array_or_hash(cond),
6236 OP_ENTERGIVEN, OP_LEAVEGIVEN,
6241 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
6243 Constructs, checks, and returns an op tree expressing a C<when> block.
6244 I<cond> supplies the test expression, and I<block> supplies the block
6245 that will be executed if the test evaluates to true; they are consumed
6246 by this function and become part of the constructed op tree. I<cond>
6247 will be interpreted DWIMically, often as a comparison against C<$_>,
6248 and may be null to generate a C<default> block.
6254 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
6256 const bool cond_llb = (!cond || looks_like_bool(cond));
6259 PERL_ARGS_ASSERT_NEWWHENOP;
6264 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
6266 scalar(ref_array_or_hash(cond)));
6269 return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0);
6273 Perl_cv_ckproto_len_flags(pTHX_ const CV *cv, const GV *gv, const char *p,
6274 const STRLEN len, const U32 flags)
6276 const char * const cvp = CvPROTO(cv);
6277 const STRLEN clen = CvPROTOLEN(cv);
6279 PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS;
6281 if (((!p != !cvp) /* One has prototype, one has not. */
6283 (flags & SVf_UTF8) == SvUTF8(cv)
6284 ? len != clen || memNE(cvp, p, len)
6286 ? bytes_cmp_utf8((const U8 *)cvp, clen,
6288 : bytes_cmp_utf8((const U8 *)p, len,
6289 (const U8 *)cvp, clen)
6293 && ckWARN_d(WARN_PROTOTYPE)) {
6294 SV* const msg = sv_newmortal();
6298 gv_efullname3(name = sv_newmortal(), gv, NULL);
6299 sv_setpvs(msg, "Prototype mismatch:");
6301 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
6303 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")",
6304 SVfARG(newSVpvn_flags(cvp,clen, SvUTF8(cv)|SVs_TEMP))
6307 sv_catpvs(msg, ": none");
6308 sv_catpvs(msg, " vs ");
6310 Perl_sv_catpvf(aTHX_ msg, "(%"SVf")", SVfARG(newSVpvn_flags(p, len, flags | SVs_TEMP)));
6312 sv_catpvs(msg, "none");
6313 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
6317 static void const_sv_xsub(pTHX_ CV* cv);
6321 =head1 Optree Manipulation Functions
6323 =for apidoc cv_const_sv
6325 If C<cv> is a constant sub eligible for inlining. returns the constant
6326 value returned by the sub. Otherwise, returns NULL.
6328 Constant subs can be created with C<newCONSTSUB> or as described in
6329 L<perlsub/"Constant Functions">.
6334 Perl_cv_const_sv(pTHX_ const CV *const cv)
6336 PERL_UNUSED_CONTEXT;
6339 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
6341 return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
6344 /* op_const_sv: examine an optree to determine whether it's in-lineable.
6345 * Can be called in 3 ways:
6348 * look for a single OP_CONST with attached value: return the value
6350 * cv && CvCLONE(cv) && !CvCONST(cv)
6352 * examine the clone prototype, and if contains only a single
6353 * OP_CONST referencing a pad const, or a single PADSV referencing
6354 * an outer lexical, return a non-zero value to indicate the CV is
6355 * a candidate for "constizing" at clone time
6359 * We have just cloned an anon prototype that was marked as a const
6360 * candidate. Try to grab the current value, and in the case of
6361 * PADSV, ignore it if it has multiple references. Return the value.
6365 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
6376 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
6377 o = cLISTOPo->op_first->op_sibling;
6379 for (; o; o = o->op_next) {
6380 const OPCODE type = o->op_type;
6382 if (sv && o->op_next == o)
6384 if (o->op_next != o) {
6385 if (type == OP_NEXTSTATE
6386 || (type == OP_NULL && !(o->op_flags & OPf_KIDS))
6387 || type == OP_PUSHMARK)
6389 if (type == OP_DBSTATE)
6392 if (type == OP_LEAVESUB || type == OP_RETURN)
6396 if (type == OP_CONST && cSVOPo->op_sv)
6398 else if (cv && type == OP_CONST) {
6399 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6403 else if (cv && type == OP_PADSV) {
6404 if (CvCONST(cv)) { /* newly cloned anon */
6405 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6406 /* the candidate should have 1 ref from this pad and 1 ref
6407 * from the parent */
6408 if (!sv || SvREFCNT(sv) != 2)
6415 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
6416 sv = &PL_sv_undef; /* an arbitrary non-null value */
6431 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6434 /* This would be the return value, but the return cannot be reached. */
6435 OP* pegop = newOP(OP_NULL, 0);
6438 PERL_UNUSED_ARG(floor);
6448 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
6450 NORETURN_FUNCTION_END;
6455 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6457 return newATTRSUB_flags(floor, o, proto, attrs, block, 0);
6461 Perl_newATTRSUB_flags(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs,
6462 OP *block, U32 flags)
6467 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
6469 register CV *cv = NULL;
6471 /* If the subroutine has no body, no attributes, and no builtin attributes
6472 then it's just a sub declaration, and we may be able to get away with
6473 storing with a placeholder scalar in the symbol table, rather than a
6474 full GV and CV. If anything is present then it will take a full CV to
6476 const I32 gv_fetch_flags
6477 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6479 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
6481 const bool o_is_gv = flags & 1;
6482 const char * const name =
6483 o ? SvPV_const(o_is_gv ? (SV *)o : cSVOPo->op_sv, namlen) : NULL;
6485 bool name_is_utf8 = o && !o_is_gv && SvUTF8(cSVOPo->op_sv);
6488 assert(proto->op_type == OP_CONST);
6489 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
6490 ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv);
6500 gv = gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV);
6502 } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
6503 SV * const sv = sv_newmortal();
6504 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
6505 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
6506 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
6507 gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
6509 } else if (PL_curstash) {
6510 gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
6513 gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
6517 if (!PL_madskills) {
6526 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
6527 maximum a prototype before. */
6528 if (SvTYPE(gv) > SVt_NULL) {
6529 if (!SvPOK((const SV *)gv)
6530 && !(SvIOK((const SV *)gv) && SvIVX((const SV *)gv) == -1))
6532 Perl_ck_warner_d(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
6534 cv_ckproto_len_flags((const CV *)gv, NULL, ps, ps_len, ps_utf8);
6537 sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
6538 if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(gv));
6541 sv_setiv(MUTABLE_SV(gv), -1);
6543 SvREFCNT_dec(PL_compcv);
6544 cv = PL_compcv = NULL;
6548 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
6550 if (!block || !ps || *ps || attrs
6551 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6553 || block->op_type == OP_NULL
6558 const_sv = op_const_sv(block, NULL);
6561 const bool exists = CvROOT(cv) || CvXSUB(cv);
6563 /* if the subroutine doesn't exist and wasn't pre-declared
6564 * with a prototype, assume it will be AUTOLOADed,
6565 * skipping the prototype check
6567 if (exists || SvPOK(cv))
6568 cv_ckproto_len_flags(cv, gv, ps, ps_len, ps_utf8);
6569 /* already defined (or promised)? */
6570 if (exists || GvASSUMECV(gv)) {
6573 || block->op_type == OP_NULL
6576 if (CvFLAGS(PL_compcv)) {
6577 /* might have had built-in attrs applied */
6578 const bool pureperl = !CvISXSUB(cv) && CvROOT(cv);
6579 if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && pureperl
6580 && ckWARN(WARN_MISC))
6581 Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
6583 (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS
6584 & ~(CVf_LVALUE * pureperl));
6586 if (attrs) goto attrs;
6587 /* just a "sub foo;" when &foo is already defined */
6588 SAVEFREESV(PL_compcv);
6593 && block->op_type != OP_NULL
6596 const line_t oldline = CopLINE(PL_curcop);
6597 if (PL_parser && PL_parser->copline != NOLINE)
6598 CopLINE_set(PL_curcop, PL_parser->copline);
6599 report_redefined_cv(cSVOPo->op_sv, cv, &const_sv);
6600 CopLINE_set(PL_curcop, oldline);
6602 if (!PL_minus_c) /* keep old one around for madskills */
6605 /* (PL_madskills unset in used file.) */
6614 SvREFCNT_inc_simple_void_NN(const_sv);
6616 assert(!CvROOT(cv) && !CvCONST(cv));
6617 sv_setpvs(MUTABLE_SV(cv), ""); /* prototype is "" */
6618 CvXSUBANY(cv).any_ptr = const_sv;
6619 CvXSUB(cv) = const_sv_xsub;
6625 cv = newCONSTSUB_flags(
6626 NULL, name, namlen, name_is_utf8 ? SVf_UTF8 : 0,
6631 (CvGV(cv) && GvSTASH(CvGV(cv)))
6636 if (HvENAME_HEK(stash))
6637 mro_method_changed_in(stash); /* sub Foo::Bar () { 123 } */
6641 SvREFCNT_dec(PL_compcv);
6645 if (cv) { /* must reuse cv if autoloaded */
6646 /* transfer PL_compcv to cv */
6649 && block->op_type != OP_NULL
6652 cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
6653 AV *const temp_av = CvPADLIST(cv);
6654 CV *const temp_cv = CvOUTSIDE(cv);
6656 assert(!CvWEAKOUTSIDE(cv));
6657 assert(!CvCVGV_RC(cv));
6658 assert(CvGV(cv) == gv);
6661 CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs;
6662 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
6663 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
6664 CvPADLIST(cv) = CvPADLIST(PL_compcv);
6665 CvOUTSIDE(PL_compcv) = temp_cv;
6666 CvPADLIST(PL_compcv) = temp_av;
6668 if (CvFILE(cv) && CvDYNFILE(cv)) {
6669 Safefree(CvFILE(cv));
6671 CvFILE_set_from_cop(cv, PL_curcop);
6672 CvSTASH_set(cv, PL_curstash);
6674 /* inner references to PL_compcv must be fixed up ... */
6675 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
6676 if (PERLDB_INTER)/* Advice debugger on the new sub. */
6677 ++PL_sub_generation;
6680 /* Might have had built-in attributes applied -- propagate them. */
6681 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
6683 /* ... before we throw it away */
6684 SvREFCNT_dec(PL_compcv);
6692 if (strEQ(name, "import")) {
6693 PL_formfeed = MUTABLE_SV(cv);
6694 /* diag_listed_as: SKIPME */
6695 Perl_warner(aTHX_ packWARN(WARN_VOID), "0x%"UVxf"\n", PTR2UV(cv));
6699 if (HvENAME_HEK(GvSTASH(gv)))
6700 /* sub Foo::bar { (shift)+1 } */
6701 mro_method_changed_in(GvSTASH(gv));
6706 CvFILE_set_from_cop(cv, PL_curcop);
6707 CvSTASH_set(cv, PL_curstash);
6711 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
6712 if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(cv));
6715 if (PL_parser && PL_parser->error_count) {
6719 const char *s = strrchr(name, ':');
6721 if (strEQ(s, "BEGIN")) {
6722 const char not_safe[] =
6723 "BEGIN not safe after errors--compilation aborted";
6724 if (PL_in_eval & EVAL_KEEPERR)
6725 Perl_croak(aTHX_ not_safe);
6727 /* force display of errors found but not reported */
6728 sv_catpv(ERRSV, not_safe);
6729 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
6738 /* If we assign an optree to a PVCV, then we've defined a subroutine that
6739 the debugger could be able to set a breakpoint in, so signal to
6740 pp_entereval that it should not throw away any saved lines at scope
6743 PL_breakable_sub_gen++;
6744 /* This makes sub {}; work as expected. */
6745 if (block->op_type == OP_STUB) {
6746 OP* const newblock = newSTATEOP(0, NULL, 0);
6748 op_getmad(block,newblock,'B');
6754 else block->op_attached = 1;
6755 CvROOT(cv) = CvLVALUE(cv)
6756 ? newUNOP(OP_LEAVESUBLV, 0,
6757 op_lvalue(scalarseq(block), OP_LEAVESUBLV))
6758 : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
6759 CvROOT(cv)->op_private |= OPpREFCOUNTED;
6760 OpREFCNT_set(CvROOT(cv), 1);
6761 CvSTART(cv) = LINKLIST(CvROOT(cv));
6762 CvROOT(cv)->op_next = 0;
6763 CALL_PEEP(CvSTART(cv));
6764 finalize_optree(CvROOT(cv));
6766 /* now that optimizer has done its work, adjust pad values */
6768 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
6771 assert(!CvCONST(cv));
6772 if (ps && !*ps && op_const_sv(block, cv))
6778 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
6779 HV *stash = name && GvSTASH(CvGV(cv)) ? GvSTASH(CvGV(cv)) : PL_curstash;
6780 apply_attrs(stash, MUTABLE_SV(cv), attrs, FALSE);
6783 if (block && has_name) {
6784 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
6785 SV * const tmpstr = sv_newmortal();
6786 GV * const db_postponed = gv_fetchpvs("DB::postponed",
6787 GV_ADDMULTI, SVt_PVHV);
6789 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
6792 (long)CopLINE(PL_curcop));
6793 gv_efullname3(tmpstr, gv, NULL);
6794 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
6795 SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0);
6796 hv = GvHVn(db_postponed);
6797 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) {
6798 CV * const pcv = GvCV(db_postponed);
6804 call_sv(MUTABLE_SV(pcv), G_DISCARD);
6809 if (name && ! (PL_parser && PL_parser->error_count))
6810 process_special_blocks(name, gv, cv);
6815 PL_parser->copline = NOLINE;
6821 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
6824 const char *const colon = strrchr(fullname,':');
6825 const char *const name = colon ? colon + 1 : fullname;
6827 PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
6830 if (strEQ(name, "BEGIN")) {
6831 const I32 oldscope = PL_scopestack_ix;
6833 SAVECOPFILE(&PL_compiling);
6834 SAVECOPLINE(&PL_compiling);
6835 SAVEVPTR(PL_curcop);
6837 DEBUG_x( dump_sub(gv) );
6838 Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
6839 GvCV_set(gv,0); /* cv has been hijacked */
6840 call_list(oldscope, PL_beginav);
6842 CopHINTS_set(&PL_compiling, PL_hints);
6849 if strEQ(name, "END") {
6850 DEBUG_x( dump_sub(gv) );
6851 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
6854 } else if (*name == 'U') {
6855 if (strEQ(name, "UNITCHECK")) {
6856 /* It's never too late to run a unitcheck block */
6857 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
6861 } else if (*name == 'C') {
6862 if (strEQ(name, "CHECK")) {
6864 /* diag_listed_as: Too late to run %s block */
6865 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6866 "Too late to run CHECK block");
6867 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
6871 } else if (*name == 'I') {
6872 if (strEQ(name, "INIT")) {
6874 /* diag_listed_as: Too late to run %s block */
6875 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6876 "Too late to run INIT block");
6877 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
6883 DEBUG_x( dump_sub(gv) );
6884 GvCV_set(gv,0); /* cv has been hijacked */
6889 =for apidoc newCONSTSUB
6891 See L</newCONSTSUB_flags>.
6897 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
6899 return newCONSTSUB_flags(stash, name, name ? strlen(name) : 0, 0, sv);
6903 =for apidoc newCONSTSUB_flags
6905 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
6906 eligible for inlining at compile-time.
6908 Currently, the only useful value for C<flags> is SVf_UTF8.
6910 Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
6911 which won't be called if used as a destructor, but will suppress the overhead
6912 of a call to C<AUTOLOAD>. (This form, however, isn't eligible for inlining at
6919 Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len,
6925 const char *const file = CopFILE(PL_curcop);
6927 SV *const temp_sv = CopFILESV(PL_curcop);
6928 const char *const file = temp_sv ? SvPV_nolen_const(temp_sv) : NULL;
6933 if (IN_PERL_RUNTIME) {
6934 /* at runtime, it's not safe to manipulate PL_curcop: it may be
6935 * an op shared between threads. Use a non-shared COP for our
6937 SAVEVPTR(PL_curcop);
6938 SAVECOMPILEWARNINGS();
6939 PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
6940 PL_curcop = &PL_compiling;
6942 SAVECOPLINE(PL_curcop);
6943 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
6946 PL_hints &= ~HINT_BLOCK_SCOPE;
6949 SAVEGENERICSV(PL_curstash);
6950 SAVECOPSTASH(PL_curcop);
6951 PL_curstash = (HV *)SvREFCNT_inc_simple_NN(stash);
6952 CopSTASH_set(PL_curcop,stash);
6955 /* file becomes the CvFILE. For an XS, it's usually static storage,
6956 and so doesn't get free()d. (It's expected to be from the C pre-
6957 processor __FILE__ directive). But we need a dynamically allocated one,
6958 and we need it to get freed. */
6959 cv = newXS_len_flags(name, len, const_sv_xsub, file ? file : "", "",
6960 &sv, XS_DYNAMIC_FILENAME | flags);
6961 CvXSUBANY(cv).any_ptr = sv;
6966 CopSTASH_free(PL_curcop);
6974 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
6975 const char *const filename, const char *const proto,
6978 PERL_ARGS_ASSERT_NEWXS_FLAGS;
6979 return newXS_len_flags(
6980 name, name ? strlen(name) : 0, subaddr, filename, proto, NULL, flags
6985 Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len,
6986 XSUBADDR_t subaddr, const char *const filename,
6987 const char *const proto, SV **const_svp,
6992 PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS;
6995 GV * const gv = name
6997 name,len,GV_ADDMULTI|flags,SVt_PVCV
7000 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
7001 GV_ADDMULTI | flags, SVt_PVCV);
7004 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
7006 if ((cv = (name ? GvCV(gv) : NULL))) {
7008 /* just a cached method */
7012 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
7013 /* already defined (or promised) */
7014 /* Redundant check that allows us to avoid creating an SV
7015 most of the time: */
7016 if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) {
7017 const line_t oldline = CopLINE(PL_curcop);
7018 if (PL_parser && PL_parser->copline != NOLINE)
7019 CopLINE_set(PL_curcop, PL_parser->copline);
7020 report_redefined_cv(newSVpvn_flags(
7021 name,len,(flags&SVf_UTF8)|SVs_TEMP
7024 CopLINE_set(PL_curcop, oldline);
7031 if (cv) /* must reuse cv if autoloaded */
7034 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
7038 if (HvENAME_HEK(GvSTASH(gv)))
7039 mro_method_changed_in(GvSTASH(gv)); /* newXS */
7045 (void)gv_fetchfile(filename);
7046 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
7047 an external constant string */
7048 assert(!CvDYNFILE(cv)); /* cv_undef should have turned it off */
7050 CvXSUB(cv) = subaddr;
7053 process_special_blocks(name, gv, cv);
7056 if (flags & XS_DYNAMIC_FILENAME) {
7057 CvFILE(cv) = savepv(filename);
7060 sv_setpv(MUTABLE_SV(cv), proto);
7065 =for apidoc U||newXS
7067 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
7068 static storage, as it is used directly as CvFILE(), without a copy being made.
7074 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
7076 PERL_ARGS_ASSERT_NEWXS;
7077 return newXS_flags(name, subaddr, filename, NULL, 0);
7085 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
7090 OP* pegop = newOP(OP_NULL, 0);
7094 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
7095 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
7098 if ((cv = GvFORM(gv))) {
7099 if (ckWARN(WARN_REDEFINE)) {
7100 const line_t oldline = CopLINE(PL_curcop);
7101 if (PL_parser && PL_parser->copline != NOLINE)
7102 CopLINE_set(PL_curcop, PL_parser->copline);
7104 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
7105 "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
7107 /* diag_listed_as: Format %s redefined */
7108 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
7109 "Format STDOUT redefined");
7111 CopLINE_set(PL_curcop, oldline);
7118 CvFILE_set_from_cop(cv, PL_curcop);
7121 pad_tidy(padtidy_FORMAT);
7122 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
7123 CvROOT(cv)->op_private |= OPpREFCOUNTED;
7124 OpREFCNT_set(CvROOT(cv), 1);
7125 CvSTART(cv) = LINKLIST(CvROOT(cv));
7126 CvROOT(cv)->op_next = 0;
7127 CALL_PEEP(CvSTART(cv));
7128 finalize_optree(CvROOT(cv));
7130 op_getmad(o,pegop,'n');
7131 op_getmad_weak(block, pegop, 'b');
7136 PL_parser->copline = NOLINE;
7144 Perl_newANONLIST(pTHX_ OP *o)
7146 return convert(OP_ANONLIST, OPf_SPECIAL, o);
7150 Perl_newANONHASH(pTHX_ OP *o)
7152 return convert(OP_ANONHASH, OPf_SPECIAL, o);
7156 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
7158 return newANONATTRSUB(floor, proto, NULL, block);
7162 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
7164 return newUNOP(OP_REFGEN, 0,
7165 newSVOP(OP_ANONCODE, 0,
7166 MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block))));
7170 Perl_oopsAV(pTHX_ OP *o)
7174 PERL_ARGS_ASSERT_OOPSAV;
7176 switch (o->op_type) {
7178 o->op_type = OP_PADAV;
7179 o->op_ppaddr = PL_ppaddr[OP_PADAV];
7180 return ref(o, OP_RV2AV);
7183 o->op_type = OP_RV2AV;
7184 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
7189 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
7196 Perl_oopsHV(pTHX_ OP *o)
7200 PERL_ARGS_ASSERT_OOPSHV;
7202 switch (o->op_type) {
7205 o->op_type = OP_PADHV;
7206 o->op_ppaddr = PL_ppaddr[OP_PADHV];
7207 return ref(o, OP_RV2HV);
7211 o->op_type = OP_RV2HV;
7212 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
7217 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
7224 Perl_newAVREF(pTHX_ OP *o)
7228 PERL_ARGS_ASSERT_NEWAVREF;
7230 if (o->op_type == OP_PADANY) {
7231 o->op_type = OP_PADAV;
7232 o->op_ppaddr = PL_ppaddr[OP_PADAV];
7235 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
7236 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7237 "Using an array as a reference is deprecated");
7239 return newUNOP(OP_RV2AV, 0, scalar(o));
7243 Perl_newGVREF(pTHX_ I32 type, OP *o)
7245 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
7246 return newUNOP(OP_NULL, 0, o);
7247 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
7251 Perl_newHVREF(pTHX_ OP *o)
7255 PERL_ARGS_ASSERT_NEWHVREF;
7257 if (o->op_type == OP_PADANY) {
7258 o->op_type = OP_PADHV;
7259 o->op_ppaddr = PL_ppaddr[OP_PADHV];
7262 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
7263 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7264 "Using a hash as a reference is deprecated");
7266 return newUNOP(OP_RV2HV, 0, scalar(o));
7270 Perl_newCVREF(pTHX_ I32 flags, OP *o)
7272 return newUNOP(OP_RV2CV, flags, scalar(o));
7276 Perl_newSVREF(pTHX_ OP *o)
7280 PERL_ARGS_ASSERT_NEWSVREF;
7282 if (o->op_type == OP_PADANY) {
7283 o->op_type = OP_PADSV;
7284 o->op_ppaddr = PL_ppaddr[OP_PADSV];
7287 return newUNOP(OP_RV2SV, 0, scalar(o));
7290 /* Check routines. See the comments at the top of this file for details
7291 * on when these are called */
7294 Perl_ck_anoncode(pTHX_ OP *o)
7296 PERL_ARGS_ASSERT_CK_ANONCODE;
7298 cSVOPo->op_targ = pad_add_anon((CV*)cSVOPo->op_sv, o->op_type);
7300 cSVOPo->op_sv = NULL;
7305 Perl_ck_bitop(pTHX_ OP *o)
7309 PERL_ARGS_ASSERT_CK_BITOP;
7311 o->op_private = (U8)(PL_hints & HINT_INTEGER);
7312 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
7313 && (o->op_type == OP_BIT_OR
7314 || o->op_type == OP_BIT_AND
7315 || o->op_type == OP_BIT_XOR))
7317 const OP * const left = cBINOPo->op_first;
7318 const OP * const right = left->op_sibling;
7319 if ((OP_IS_NUMCOMPARE(left->op_type) &&
7320 (left->op_flags & OPf_PARENS) == 0) ||
7321 (OP_IS_NUMCOMPARE(right->op_type) &&
7322 (right->op_flags & OPf_PARENS) == 0))
7323 Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
7324 "Possible precedence problem on bitwise %c operator",
7325 o->op_type == OP_BIT_OR ? '|'
7326 : o->op_type == OP_BIT_AND ? '&' : '^'
7332 PERL_STATIC_INLINE bool
7333 is_dollar_bracket(pTHX_ const OP * const o)
7336 return o->op_type == OP_RV2SV && o->op_flags & OPf_KIDS
7337 && (kid = cUNOPx(o)->op_first)
7338 && kid->op_type == OP_GV
7339 && strEQ(GvNAME(cGVOPx_gv(kid)), "[");
7343 Perl_ck_cmp(pTHX_ OP *o)
7345 PERL_ARGS_ASSERT_CK_CMP;
7346 if (ckWARN(WARN_SYNTAX)) {
7347 const OP *kid = cUNOPo->op_first;
7350 is_dollar_bracket(aTHX_ kid)
7351 && kid->op_sibling && kid->op_sibling->op_type == OP_CONST
7353 || ( kid->op_type == OP_CONST
7354 && (kid = kid->op_sibling) && is_dollar_bracket(aTHX_ kid))
7356 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
7357 "$[ used in %s (did you mean $] ?)", OP_DESC(o));
7363 Perl_ck_concat(pTHX_ OP *o)
7365 const OP * const kid = cUNOPo->op_first;
7367 PERL_ARGS_ASSERT_CK_CONCAT;
7368 PERL_UNUSED_CONTEXT;
7370 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
7371 !(kUNOP->op_first->op_flags & OPf_MOD))
7372 o->op_flags |= OPf_STACKED;
7377 Perl_ck_spair(pTHX_ OP *o)
7381 PERL_ARGS_ASSERT_CK_SPAIR;
7383 if (o->op_flags & OPf_KIDS) {
7386 const OPCODE type = o->op_type;
7387 o = modkids(ck_fun(o), type);
7388 kid = cUNOPo->op_first;
7389 newop = kUNOP->op_first->op_sibling;
7391 const OPCODE type = newop->op_type;
7392 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
7393 type == OP_PADAV || type == OP_PADHV ||
7394 type == OP_RV2AV || type == OP_RV2HV)
7398 op_getmad(kUNOP->op_first,newop,'K');
7400 op_free(kUNOP->op_first);
7402 kUNOP->op_first = newop;
7404 o->op_ppaddr = PL_ppaddr[++o->op_type];
7409 Perl_ck_delete(pTHX_ OP *o)
7411 PERL_ARGS_ASSERT_CK_DELETE;
7415 if (o->op_flags & OPf_KIDS) {
7416 OP * const kid = cUNOPo->op_first;
7417 switch (kid->op_type) {
7419 o->op_flags |= OPf_SPECIAL;
7422 o->op_private |= OPpSLICE;
7425 o->op_flags |= OPf_SPECIAL;
7430 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
7433 if (kid->op_private & OPpLVAL_INTRO)
7434 o->op_private |= OPpLVAL_INTRO;
7441 Perl_ck_die(pTHX_ OP *o)
7443 PERL_ARGS_ASSERT_CK_DIE;
7446 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7452 Perl_ck_eof(pTHX_ OP *o)
7456 PERL_ARGS_ASSERT_CK_EOF;
7458 if (o->op_flags & OPf_KIDS) {
7460 if (cLISTOPo->op_first->op_type == OP_STUB) {
7462 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
7464 op_getmad(o,newop,'O');
7471 kid = cLISTOPo->op_first;
7472 if (kid->op_type == OP_RV2GV)
7473 kid->op_private |= OPpALLOW_FAKE;
7479 Perl_ck_eval(pTHX_ OP *o)
7483 PERL_ARGS_ASSERT_CK_EVAL;
7485 PL_hints |= HINT_BLOCK_SCOPE;
7486 if (o->op_flags & OPf_KIDS) {
7487 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7490 o->op_flags &= ~OPf_KIDS;
7493 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
7499 cUNOPo->op_first = 0;
7504 NewOp(1101, enter, 1, LOGOP);
7505 enter->op_type = OP_ENTERTRY;
7506 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
7507 enter->op_private = 0;
7509 /* establish postfix order */
7510 enter->op_next = (OP*)enter;
7512 o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
7513 o->op_type = OP_LEAVETRY;
7514 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
7515 enter->op_other = o;
7516 op_getmad(oldo,o,'O');
7525 const U8 priv = o->op_private;
7531 o = newUNOP(OP_ENTEREVAL, priv <<8, newDEFSVOP());
7532 op_getmad(oldo,o,'O');
7534 o->op_targ = (PADOFFSET)PL_hints;
7535 if (o->op_private & OPpEVAL_BYTES) o->op_targ &= ~HINT_UTF8;
7536 if ((PL_hints & HINT_LOCALIZE_HH) != 0
7537 && !(o->op_private & OPpEVAL_COPHH) && GvHV(PL_hintgv)) {
7538 /* Store a copy of %^H that pp_entereval can pick up. */
7539 OP *hhop = newSVOP(OP_HINTSEVAL, 0,
7540 MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv))));
7541 cUNOPo->op_first->op_sibling = hhop;
7542 o->op_private |= OPpEVAL_HAS_HH;
7544 if (!(o->op_private & OPpEVAL_BYTES)
7545 && FEATURE_UNIEVAL_IS_ENABLED)
7546 o->op_private |= OPpEVAL_UNICODE;
7552 Perl_ck_exit(pTHX_ OP *o)
7554 PERL_ARGS_ASSERT_CK_EXIT;
7557 HV * const table = GvHV(PL_hintgv);
7559 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
7560 if (svp && *svp && SvTRUE(*svp))
7561 o->op_private |= OPpEXIT_VMSISH;
7563 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7569 Perl_ck_exec(pTHX_ OP *o)
7571 PERL_ARGS_ASSERT_CK_EXEC;
7573 if (o->op_flags & OPf_STACKED) {
7576 kid = cUNOPo->op_first->op_sibling;
7577 if (kid->op_type == OP_RV2GV)
7586 Perl_ck_exists(pTHX_ OP *o)
7590 PERL_ARGS_ASSERT_CK_EXISTS;
7593 if (o->op_flags & OPf_KIDS) {
7594 OP * const kid = cUNOPo->op_first;
7595 if (kid->op_type == OP_ENTERSUB) {
7596 (void) ref(kid, o->op_type);
7597 if (kid->op_type != OP_RV2CV
7598 && !(PL_parser && PL_parser->error_count))
7599 Perl_croak(aTHX_ "%s argument is not a subroutine name",
7601 o->op_private |= OPpEXISTS_SUB;
7603 else if (kid->op_type == OP_AELEM)
7604 o->op_flags |= OPf_SPECIAL;
7605 else if (kid->op_type != OP_HELEM)
7606 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or a subroutine",
7614 Perl_ck_rvconst(pTHX_ register OP *o)
7617 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7619 PERL_ARGS_ASSERT_CK_RVCONST;
7621 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7622 if (o->op_type == OP_RV2CV)
7623 o->op_private &= ~1;
7625 if (kid->op_type == OP_CONST) {
7628 SV * const kidsv = kid->op_sv;
7630 /* Is it a constant from cv_const_sv()? */
7631 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
7632 SV * const rsv = SvRV(kidsv);
7633 const svtype type = SvTYPE(rsv);
7634 const char *badtype = NULL;
7636 switch (o->op_type) {
7638 if (type > SVt_PVMG)
7639 badtype = "a SCALAR";
7642 if (type != SVt_PVAV)
7643 badtype = "an ARRAY";
7646 if (type != SVt_PVHV)
7650 if (type != SVt_PVCV)
7655 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
7658 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
7659 const char *badthing;
7660 switch (o->op_type) {
7662 badthing = "a SCALAR";
7665 badthing = "an ARRAY";
7668 badthing = "a HASH";
7676 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
7677 SVfARG(kidsv), badthing);
7680 * This is a little tricky. We only want to add the symbol if we
7681 * didn't add it in the lexer. Otherwise we get duplicate strict
7682 * warnings. But if we didn't add it in the lexer, we must at
7683 * least pretend like we wanted to add it even if it existed before,
7684 * or we get possible typo warnings. OPpCONST_ENTERED says
7685 * whether the lexer already added THIS instance of this symbol.
7687 iscv = (o->op_type == OP_RV2CV) * 2;
7689 gv = gv_fetchsv(kidsv,
7690 iscv | !(kid->op_private & OPpCONST_ENTERED),
7693 : o->op_type == OP_RV2SV
7695 : o->op_type == OP_RV2AV
7697 : o->op_type == OP_RV2HV
7700 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
7702 kid->op_type = OP_GV;
7703 SvREFCNT_dec(kid->op_sv);
7705 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
7706 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
7707 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
7709 PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
7711 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
7713 kid->op_private = 0;
7714 kid->op_ppaddr = PL_ppaddr[OP_GV];
7715 /* FAKE globs in the symbol table cause weird bugs (#77810) */
7723 Perl_ck_ftst(pTHX_ OP *o)
7726 const I32 type = o->op_type;
7728 PERL_ARGS_ASSERT_CK_FTST;
7730 if (o->op_flags & OPf_REF) {
7733 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
7734 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7735 const OPCODE kidtype = kid->op_type;
7737 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7738 OP * const newop = newGVOP(type, OPf_REF,
7739 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
7741 op_getmad(o,newop,'O');
7747 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
7748 o->op_private |= OPpFT_ACCESS;
7749 if (PL_check[kidtype] == Perl_ck_ftst
7750 && kidtype != OP_STAT && kidtype != OP_LSTAT) {
7751 o->op_private |= OPpFT_STACKED;
7752 kid->op_private |= OPpFT_STACKING;
7753 if (kidtype == OP_FTTTY && (
7754 !(kid->op_private & OPpFT_STACKED)
7755 || kid->op_private & OPpFT_AFTER_t
7757 o->op_private |= OPpFT_AFTER_t;
7766 if (type == OP_FTTTY)
7767 o = newGVOP(type, OPf_REF, PL_stdingv);
7769 o = newUNOP(type, 0, newDEFSVOP());
7770 op_getmad(oldo,o,'O');
7776 Perl_ck_fun(pTHX_ OP *o)
7779 const int type = o->op_type;
7780 register I32 oa = PL_opargs[type] >> OASHIFT;
7782 PERL_ARGS_ASSERT_CK_FUN;
7784 if (o->op_flags & OPf_STACKED) {
7785 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
7788 return no_fh_allowed(o);
7791 if (o->op_flags & OPf_KIDS) {
7792 OP **tokid = &cLISTOPo->op_first;
7793 register OP *kid = cLISTOPo->op_first;
7796 bool seen_optional = FALSE;
7798 if (kid->op_type == OP_PUSHMARK ||
7799 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
7801 tokid = &kid->op_sibling;
7802 kid = kid->op_sibling;
7804 if (kid && kid->op_type == OP_COREARGS) {
7805 bool optional = FALSE;
7808 if (oa & OA_OPTIONAL) optional = TRUE;
7811 if (optional) o->op_private |= numargs;
7816 if (oa & OA_OPTIONAL || (oa & 7) == OA_LIST) {
7817 if (!kid && !seen_optional && PL_opargs[type] & OA_DEFGV)
7818 *tokid = kid = newDEFSVOP();
7819 seen_optional = TRUE;
7824 sibl = kid->op_sibling;
7826 if (!sibl && kid->op_type == OP_STUB) {
7833 /* list seen where single (scalar) arg expected? */
7834 if (numargs == 1 && !(oa >> 4)
7835 && kid->op_type == OP_LIST && type != OP_SCALAR)
7837 return too_many_arguments(o,PL_op_desc[type]);
7850 if ((type == OP_PUSH || type == OP_UNSHIFT)
7851 && !kid->op_sibling)
7852 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
7853 "Useless use of %s with no values",
7856 if (kid->op_type == OP_CONST &&
7857 (kid->op_private & OPpCONST_BARE))
7859 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
7860 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
7861 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7862 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
7863 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7865 op_getmad(kid,newop,'K');
7870 kid->op_sibling = sibl;
7873 else if (kid->op_type == OP_CONST
7874 && ( !SvROK(cSVOPx_sv(kid))
7875 || SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV )
7877 bad_type(numargs, "array", PL_op_desc[type], kid);
7878 /* Defer checks to run-time if we have a scalar arg */
7879 if (kid->op_type == OP_RV2AV || kid->op_type == OP_PADAV)
7880 op_lvalue(kid, type);
7884 if (kid->op_type == OP_CONST &&
7885 (kid->op_private & OPpCONST_BARE))
7887 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
7888 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
7889 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7890 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
7891 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7893 op_getmad(kid,newop,'K');
7898 kid->op_sibling = sibl;
7901 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
7902 bad_type(numargs, "hash", PL_op_desc[type], kid);
7903 op_lvalue(kid, type);
7907 OP * const newop = newUNOP(OP_NULL, 0, kid);
7908 kid->op_sibling = 0;
7910 newop->op_next = newop;
7912 kid->op_sibling = sibl;
7917 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
7918 if (kid->op_type == OP_CONST &&
7919 (kid->op_private & OPpCONST_BARE))
7921 OP * const newop = newGVOP(OP_GV, 0,
7922 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
7923 if (!(o->op_private & 1) && /* if not unop */
7924 kid == cLISTOPo->op_last)
7925 cLISTOPo->op_last = newop;
7927 op_getmad(kid,newop,'K');
7933 else if (kid->op_type == OP_READLINE) {
7934 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
7935 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
7938 I32 flags = OPf_SPECIAL;
7942 /* is this op a FH constructor? */
7943 if (is_handle_constructor(o,numargs)) {
7944 const char *name = NULL;
7947 bool want_dollar = TRUE;
7950 /* Set a flag to tell rv2gv to vivify
7951 * need to "prove" flag does not mean something
7952 * else already - NI-S 1999/05/07
7955 if (kid->op_type == OP_PADSV) {
7957 = PAD_COMPNAME_SV(kid->op_targ);
7958 name = SvPV_const(namesv, len);
7959 name_utf8 = SvUTF8(namesv);
7961 else if (kid->op_type == OP_RV2SV
7962 && kUNOP->op_first->op_type == OP_GV)
7964 GV * const gv = cGVOPx_gv(kUNOP->op_first);
7966 len = GvNAMELEN(gv);
7967 name_utf8 = GvNAMEUTF8(gv) ? SVf_UTF8 : 0;
7969 else if (kid->op_type == OP_AELEM
7970 || kid->op_type == OP_HELEM)
7973 OP *op = ((BINOP*)kid)->op_first;
7977 const char * const a =
7978 kid->op_type == OP_AELEM ?
7980 if (((op->op_type == OP_RV2AV) ||
7981 (op->op_type == OP_RV2HV)) &&
7982 (firstop = ((UNOP*)op)->op_first) &&
7983 (firstop->op_type == OP_GV)) {
7984 /* packagevar $a[] or $h{} */
7985 GV * const gv = cGVOPx_gv(firstop);
7993 else if (op->op_type == OP_PADAV
7994 || op->op_type == OP_PADHV) {
7995 /* lexicalvar $a[] or $h{} */
7996 const char * const padname =
7997 PAD_COMPNAME_PV(op->op_targ);
8006 name = SvPV_const(tmpstr, len);
8007 name_utf8 = SvUTF8(tmpstr);
8012 name = "__ANONIO__";
8014 want_dollar = FALSE;
8016 op_lvalue(kid, type);
8020 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
8021 namesv = PAD_SVl(targ);
8022 SvUPGRADE(namesv, SVt_PV);
8023 if (want_dollar && *name != '$')
8024 sv_setpvs(namesv, "$");
8025 sv_catpvn(namesv, name, len);
8026 if ( name_utf8 ) SvUTF8_on(namesv);
8029 kid->op_sibling = 0;
8030 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
8031 kid->op_targ = targ;
8032 kid->op_private |= priv;
8034 kid->op_sibling = sibl;
8040 op_lvalue(scalar(kid), type);
8044 tokid = &kid->op_sibling;
8045 kid = kid->op_sibling;
8048 if (kid && kid->op_type != OP_STUB)
8049 return too_many_arguments(o,OP_DESC(o));
8050 o->op_private |= numargs;
8052 /* FIXME - should the numargs move as for the PERL_MAD case? */
8053 o->op_private |= numargs;
8055 return too_many_arguments(o,OP_DESC(o));
8059 else if (PL_opargs[type] & OA_DEFGV) {
8061 OP *newop = newUNOP(type, 0, newDEFSVOP());
8062 op_getmad(o,newop,'O');
8065 /* Ordering of these two is important to keep f_map.t passing. */
8067 return newUNOP(type, 0, newDEFSVOP());
8072 while (oa & OA_OPTIONAL)
8074 if (oa && oa != OA_LIST)
8075 return too_few_arguments(o,OP_DESC(o));
8081 Perl_ck_glob(pTHX_ OP *o)
8085 const bool core = o->op_flags & OPf_SPECIAL;
8087 PERL_ARGS_ASSERT_CK_GLOB;
8090 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
8091 op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */
8093 if (core) gv = NULL;
8094 else if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
8095 && GvCVu(gv) && GvIMPORTED_CV(gv)))
8097 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
8100 #if !defined(PERL_EXTERNAL_GLOB)
8101 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
8103 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
8104 newSVpvs("File::Glob"), NULL, NULL, NULL);
8107 #endif /* !PERL_EXTERNAL_GLOB */
8109 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
8112 * \ null - const(wildcard)
8117 * \ mark - glob - rv2cv
8118 * | \ gv(CORE::GLOBAL::glob)
8120 * \ null - const(wildcard) - const(ix)
8122 o->op_flags |= OPf_SPECIAL;
8123 o->op_targ = pad_alloc(OP_GLOB, SVs_PADTMP);
8124 op_append_elem(OP_GLOB, o,
8125 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
8126 o = newLISTOP(OP_LIST, 0, o, NULL);
8127 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
8128 op_append_elem(OP_LIST, o,
8129 scalar(newUNOP(OP_RV2CV, 0,
8130 newGVOP(OP_GV, 0, gv)))));
8131 o = newUNOP(OP_NULL, 0, ck_subr(o));
8132 o->op_targ = OP_GLOB; /* hint at what it used to be: eg in newWHILEOP */
8135 else o->op_flags &= ~OPf_SPECIAL;
8136 gv = newGVgen("main");
8138 #ifndef PERL_EXTERNAL_GLOB
8139 sv_setiv(GvSVn(gv),PL_glob_index++);
8141 op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
8147 Perl_ck_grep(pTHX_ OP *o)
8152 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
8155 PERL_ARGS_ASSERT_CK_GREP;
8157 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
8158 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
8160 if (o->op_flags & OPf_STACKED) {
8163 kid = cUNOPx(cLISTOPo->op_first->op_sibling)->op_first;
8164 if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
8165 return no_fh_allowed(o);
8166 for (k = kid; k; k = k->op_next) {
8169 NewOp(1101, gwop, 1, LOGOP);
8170 kid->op_next = (OP*)gwop;
8171 o->op_flags &= ~OPf_STACKED;
8173 kid = cLISTOPo->op_first->op_sibling;
8174 if (type == OP_MAPWHILE)
8179 if (PL_parser && PL_parser->error_count)
8181 kid = cLISTOPo->op_first->op_sibling;
8182 if (kid->op_type != OP_NULL)
8183 Perl_croak(aTHX_ "panic: ck_grep, type=%u", (unsigned) kid->op_type);
8184 kid = kUNOP->op_first;
8187 NewOp(1101, gwop, 1, LOGOP);
8188 gwop->op_type = type;
8189 gwop->op_ppaddr = PL_ppaddr[type];
8190 gwop->op_first = listkids(o);
8191 gwop->op_flags |= OPf_KIDS;
8192 gwop->op_other = LINKLIST(kid);
8193 kid->op_next = (OP*)gwop;
8194 offset = pad_findmy_pvs("$_", 0);
8195 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
8196 o->op_private = gwop->op_private = 0;
8197 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
8200 o->op_private = gwop->op_private = OPpGREP_LEX;
8201 gwop->op_targ = o->op_targ = offset;
8204 kid = cLISTOPo->op_first->op_sibling;
8205 if (!kid || !kid->op_sibling)
8206 return too_few_arguments(o,OP_DESC(o));
8207 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
8208 op_lvalue(kid, OP_GREPSTART);
8214 Perl_ck_index(pTHX_ OP *o)
8216 PERL_ARGS_ASSERT_CK_INDEX;
8218 if (o->op_flags & OPf_KIDS) {
8219 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8221 kid = kid->op_sibling; /* get past "big" */
8222 if (kid && kid->op_type == OP_CONST) {
8223 const bool save_taint = PL_tainted;
8224 fbm_compile(((SVOP*)kid)->op_sv, 0);
8225 PL_tainted = save_taint;
8232 Perl_ck_lfun(pTHX_ OP *o)
8234 const OPCODE type = o->op_type;
8236 PERL_ARGS_ASSERT_CK_LFUN;
8238 return modkids(ck_fun(o), type);
8242 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
8244 PERL_ARGS_ASSERT_CK_DEFINED;
8246 if ((o->op_flags & OPf_KIDS)) {
8247 switch (cUNOPo->op_first->op_type) {
8250 case OP_AASSIGN: /* Is this a good idea? */
8251 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8252 "defined(@array) is deprecated");
8253 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8254 "\t(Maybe you should just omit the defined()?)\n");
8258 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8259 "defined(%%hash) is deprecated");
8260 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8261 "\t(Maybe you should just omit the defined()?)\n");
8272 Perl_ck_readline(pTHX_ OP *o)
8274 PERL_ARGS_ASSERT_CK_READLINE;
8276 if (o->op_flags & OPf_KIDS) {
8277 OP *kid = cLISTOPo->op_first;
8278 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
8282 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
8284 op_getmad(o,newop,'O');
8294 Perl_ck_rfun(pTHX_ OP *o)
8296 const OPCODE type = o->op_type;
8298 PERL_ARGS_ASSERT_CK_RFUN;
8300 return refkids(ck_fun(o), type);
8304 Perl_ck_listiob(pTHX_ OP *o)
8308 PERL_ARGS_ASSERT_CK_LISTIOB;
8310 kid = cLISTOPo->op_first;
8313 kid = cLISTOPo->op_first;
8315 if (kid->op_type == OP_PUSHMARK)
8316 kid = kid->op_sibling;
8317 if (kid && o->op_flags & OPf_STACKED)
8318 kid = kid->op_sibling;
8319 else if (kid && !kid->op_sibling) { /* print HANDLE; */
8320 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
8321 o->op_flags |= OPf_STACKED; /* make it a filehandle */
8322 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
8323 cLISTOPo->op_first->op_sibling = kid;
8324 cLISTOPo->op_last = kid;
8325 kid = kid->op_sibling;
8330 op_append_elem(o->op_type, o, newDEFSVOP());
8332 if (o->op_type == OP_PRTF) return modkids(listkids(o), OP_PRTF);
8337 Perl_ck_smartmatch(pTHX_ OP *o)
8340 PERL_ARGS_ASSERT_CK_SMARTMATCH;
8341 if (0 == (o->op_flags & OPf_SPECIAL)) {
8342 OP *first = cBINOPo->op_first;
8343 OP *second = first->op_sibling;
8345 /* Implicitly take a reference to an array or hash */
8346 first->op_sibling = NULL;
8347 first = cBINOPo->op_first = ref_array_or_hash(first);
8348 second = first->op_sibling = ref_array_or_hash(second);
8350 /* Implicitly take a reference to a regular expression */
8351 if (first->op_type == OP_MATCH) {
8352 first->op_type = OP_QR;
8353 first->op_ppaddr = PL_ppaddr[OP_QR];
8355 if (second->op_type == OP_MATCH) {
8356 second->op_type = OP_QR;
8357 second->op_ppaddr = PL_ppaddr[OP_QR];
8366 Perl_ck_sassign(pTHX_ OP *o)
8369 OP * const kid = cLISTOPo->op_first;
8371 PERL_ARGS_ASSERT_CK_SASSIGN;
8373 /* has a disposable target? */
8374 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
8375 && !(kid->op_flags & OPf_STACKED)
8376 /* Cannot steal the second time! */
8377 && !(kid->op_private & OPpTARGET_MY)
8378 /* Keep the full thing for madskills */
8382 OP * const kkid = kid->op_sibling;
8384 /* Can just relocate the target. */
8385 if (kkid && kkid->op_type == OP_PADSV
8386 && !(kkid->op_private & OPpLVAL_INTRO))
8388 kid->op_targ = kkid->op_targ;
8390 /* Now we do not need PADSV and SASSIGN. */
8391 kid->op_sibling = o->op_sibling; /* NULL */
8392 cLISTOPo->op_first = NULL;
8395 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
8399 if (kid->op_sibling) {
8400 OP *kkid = kid->op_sibling;
8401 /* For state variable assignment, kkid is a list op whose op_last
8403 if ((kkid->op_type == OP_PADSV ||
8404 (kkid->op_type == OP_LIST &&
8405 (kkid = cLISTOPx(kkid)->op_last)->op_type == OP_PADSV
8408 && (kkid->op_private & OPpLVAL_INTRO)
8409 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
8410 const PADOFFSET target = kkid->op_targ;
8411 OP *const other = newOP(OP_PADSV,
8413 | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
8414 OP *const first = newOP(OP_NULL, 0);
8415 OP *const nullop = newCONDOP(0, first, o, other);
8416 OP *const condop = first->op_next;
8417 /* hijacking PADSTALE for uninitialized state variables */
8418 SvPADSTALE_on(PAD_SVl(target));
8420 condop->op_type = OP_ONCE;
8421 condop->op_ppaddr = PL_ppaddr[OP_ONCE];
8422 condop->op_targ = target;
8423 other->op_targ = target;
8425 /* Because we change the type of the op here, we will skip the
8426 assignment binop->op_last = binop->op_first->op_sibling; at the
8427 end of Perl_newBINOP(). So need to do it here. */
8428 cBINOPo->op_last = cBINOPo->op_first->op_sibling;
8437 Perl_ck_match(pTHX_ OP *o)
8441 PERL_ARGS_ASSERT_CK_MATCH;
8443 if (o->op_type != OP_QR && PL_compcv) {
8444 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
8445 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
8446 o->op_targ = offset;
8447 o->op_private |= OPpTARGET_MY;
8450 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
8451 o->op_private |= OPpRUNTIME;
8456 Perl_ck_method(pTHX_ OP *o)
8458 OP * const kid = cUNOPo->op_first;
8460 PERL_ARGS_ASSERT_CK_METHOD;
8462 if (kid->op_type == OP_CONST) {
8463 SV* sv = kSVOP->op_sv;
8464 const char * const method = SvPVX_const(sv);
8465 if (!(strchr(method, ':') || strchr(method, '\''))) {
8467 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
8468 sv = newSVpvn_share(method, SvUTF8(sv) ? -(I32)SvCUR(sv) : (I32)SvCUR(sv), 0);
8471 kSVOP->op_sv = NULL;
8473 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
8475 op_getmad(o,cmop,'O');
8486 Perl_ck_null(pTHX_ OP *o)
8488 PERL_ARGS_ASSERT_CK_NULL;
8489 PERL_UNUSED_CONTEXT;
8494 Perl_ck_open(pTHX_ OP *o)
8497 HV * const table = GvHV(PL_hintgv);
8499 PERL_ARGS_ASSERT_CK_OPEN;
8502 SV **svp = hv_fetchs(table, "open_IN", FALSE);
8505 const char *d = SvPV_const(*svp, len);
8506 const I32 mode = mode_from_discipline(d, len);
8507 if (mode & O_BINARY)
8508 o->op_private |= OPpOPEN_IN_RAW;
8509 else if (mode & O_TEXT)
8510 o->op_private |= OPpOPEN_IN_CRLF;
8513 svp = hv_fetchs(table, "open_OUT", FALSE);
8516 const char *d = SvPV_const(*svp, len);
8517 const I32 mode = mode_from_discipline(d, len);
8518 if (mode & O_BINARY)
8519 o->op_private |= OPpOPEN_OUT_RAW;
8520 else if (mode & O_TEXT)
8521 o->op_private |= OPpOPEN_OUT_CRLF;
8524 if (o->op_type == OP_BACKTICK) {
8525 if (!(o->op_flags & OPf_KIDS)) {
8526 OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
8528 op_getmad(o,newop,'O');
8537 /* In case of three-arg dup open remove strictness
8538 * from the last arg if it is a bareword. */
8539 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
8540 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
8544 if ((last->op_type == OP_CONST) && /* The bareword. */
8545 (last->op_private & OPpCONST_BARE) &&
8546 (last->op_private & OPpCONST_STRICT) &&
8547 (oa = first->op_sibling) && /* The fh. */
8548 (oa = oa->op_sibling) && /* The mode. */
8549 (oa->op_type == OP_CONST) &&
8550 SvPOK(((SVOP*)oa)->op_sv) &&
8551 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
8552 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
8553 (last == oa->op_sibling)) /* The bareword. */
8554 last->op_private &= ~OPpCONST_STRICT;
8560 Perl_ck_repeat(pTHX_ OP *o)
8562 PERL_ARGS_ASSERT_CK_REPEAT;
8564 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
8565 o->op_private |= OPpREPEAT_DOLIST;
8566 cBINOPo->op_first = force_list(cBINOPo->op_first);
8574 Perl_ck_require(pTHX_ OP *o)
8579 PERL_ARGS_ASSERT_CK_REQUIRE;
8581 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
8582 SVOP * const kid = (SVOP*)cUNOPo->op_first;
8584 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
8585 SV * const sv = kid->op_sv;
8586 U32 was_readonly = SvREADONLY(sv);
8593 sv_force_normal_flags(sv, 0);
8594 assert(!SvREADONLY(sv));
8604 for (; s < end; s++) {
8605 if (*s == ':' && s[1] == ':') {
8607 Move(s+2, s+1, end - s - 1, char);
8612 sv_catpvs(sv, ".pm");
8613 SvFLAGS(sv) |= was_readonly;
8617 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
8618 /* handle override, if any */
8619 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
8620 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
8621 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
8622 gv = gvp ? *gvp : NULL;
8626 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
8628 if (o->op_flags & OPf_KIDS) {
8629 kid = cUNOPo->op_first;
8630 cUNOPo->op_first = NULL;
8638 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
8639 op_append_elem(OP_LIST, kid,
8640 scalar(newUNOP(OP_RV2CV, 0,
8643 op_getmad(o,newop,'O');
8647 return scalar(ck_fun(o));
8651 Perl_ck_return(pTHX_ OP *o)
8656 PERL_ARGS_ASSERT_CK_RETURN;
8658 kid = cLISTOPo->op_first->op_sibling;
8659 if (CvLVALUE(PL_compcv)) {
8660 for (; kid; kid = kid->op_sibling)
8661 op_lvalue(kid, OP_LEAVESUBLV);
8668 Perl_ck_select(pTHX_ OP *o)
8673 PERL_ARGS_ASSERT_CK_SELECT;
8675 if (o->op_flags & OPf_KIDS) {
8676 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8677 if (kid && kid->op_sibling) {
8678 o->op_type = OP_SSELECT;
8679 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
8681 return fold_constants(op_integerize(op_std_init(o)));
8685 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8686 if (kid && kid->op_type == OP_RV2GV)
8687 kid->op_private &= ~HINT_STRICT_REFS;
8692 Perl_ck_shift(pTHX_ OP *o)
8695 const I32 type = o->op_type;
8697 PERL_ARGS_ASSERT_CK_SHIFT;
8699 if (!(o->op_flags & OPf_KIDS)) {
8702 if (!CvUNIQUE(PL_compcv)) {
8703 o->op_flags |= OPf_SPECIAL;
8707 argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
8710 OP * const oldo = o;
8711 o = newUNOP(type, 0, scalar(argop));
8712 op_getmad(oldo,o,'O');
8717 return newUNOP(type, 0, scalar(argop));
8720 return scalar(ck_fun(o));
8724 Perl_ck_sort(pTHX_ OP *o)
8729 PERL_ARGS_ASSERT_CK_SORT;
8731 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
8732 HV * const hinthv = GvHV(PL_hintgv);
8734 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
8736 const I32 sorthints = (I32)SvIV(*svp);
8737 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
8738 o->op_private |= OPpSORT_QSORT;
8739 if ((sorthints & HINT_SORT_STABLE) != 0)
8740 o->op_private |= OPpSORT_STABLE;
8745 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
8747 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8748 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
8750 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
8752 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
8754 if (kid->op_type == OP_SCOPE) {
8758 else if (kid->op_type == OP_LEAVE) {
8759 if (o->op_type == OP_SORT) {
8760 op_null(kid); /* wipe out leave */
8763 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
8764 if (k->op_next == kid)
8766 /* don't descend into loops */
8767 else if (k->op_type == OP_ENTERLOOP
8768 || k->op_type == OP_ENTERITER)
8770 k = cLOOPx(k)->op_lastop;
8775 kid->op_next = 0; /* just disconnect the leave */
8776 k = kLISTOP->op_first;
8781 if (o->op_type == OP_SORT) {
8782 /* provide scalar context for comparison function/block */
8788 o->op_flags |= OPf_SPECIAL;
8791 firstkid = firstkid->op_sibling;
8794 /* provide list context for arguments */
8795 if (o->op_type == OP_SORT)
8802 S_simplify_sort(pTHX_ OP *o)
8805 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8811 PERL_ARGS_ASSERT_SIMPLIFY_SORT;
8813 if (!(o->op_flags & OPf_STACKED))
8815 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
8816 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
8817 kid = kUNOP->op_first; /* get past null */
8818 if (kid->op_type != OP_SCOPE)
8820 kid = kLISTOP->op_last; /* get past scope */
8821 switch(kid->op_type) {
8829 k = kid; /* remember this node*/
8830 if (kBINOP->op_first->op_type != OP_RV2SV)
8832 kid = kBINOP->op_first; /* get past cmp */
8833 if (kUNOP->op_first->op_type != OP_GV)
8835 kid = kUNOP->op_first; /* get past rv2sv */
8837 if (GvSTASH(gv) != PL_curstash)
8839 gvname = GvNAME(gv);
8840 if (*gvname == 'a' && gvname[1] == '\0')
8842 else if (*gvname == 'b' && gvname[1] == '\0')
8847 kid = k; /* back to cmp */
8848 if (kBINOP->op_last->op_type != OP_RV2SV)
8850 kid = kBINOP->op_last; /* down to 2nd arg */
8851 if (kUNOP->op_first->op_type != OP_GV)
8853 kid = kUNOP->op_first; /* get past rv2sv */
8855 if (GvSTASH(gv) != PL_curstash)
8857 gvname = GvNAME(gv);
8859 ? !(*gvname == 'a' && gvname[1] == '\0')
8860 : !(*gvname == 'b' && gvname[1] == '\0'))
8862 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
8864 o->op_private |= OPpSORT_DESCEND;
8865 if (k->op_type == OP_NCMP)
8866 o->op_private |= OPpSORT_NUMERIC;
8867 if (k->op_type == OP_I_NCMP)
8868 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
8869 kid = cLISTOPo->op_first->op_sibling;
8870 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
8872 op_getmad(kid,o,'S'); /* then delete it */
8874 op_free(kid); /* then delete it */
8879 Perl_ck_split(pTHX_ OP *o)
8884 PERL_ARGS_ASSERT_CK_SPLIT;
8886 if (o->op_flags & OPf_STACKED)
8887 return no_fh_allowed(o);
8889 kid = cLISTOPo->op_first;
8890 if (kid->op_type != OP_NULL)
8891 Perl_croak(aTHX_ "panic: ck_split, type=%u", (unsigned) kid->op_type);
8892 kid = kid->op_sibling;
8893 op_free(cLISTOPo->op_first);
8895 cLISTOPo->op_first = kid;
8897 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
8898 cLISTOPo->op_last = kid; /* There was only one element previously */
8901 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
8902 OP * const sibl = kid->op_sibling;
8903 kid->op_sibling = 0;
8904 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
8905 if (cLISTOPo->op_first == cLISTOPo->op_last)
8906 cLISTOPo->op_last = kid;
8907 cLISTOPo->op_first = kid;
8908 kid->op_sibling = sibl;
8911 kid->op_type = OP_PUSHRE;
8912 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
8914 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
8915 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
8916 "Use of /g modifier is meaningless in split");
8919 if (!kid->op_sibling)
8920 op_append_elem(OP_SPLIT, o, newDEFSVOP());
8922 kid = kid->op_sibling;
8925 if (!kid->op_sibling)
8926 op_append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
8927 assert(kid->op_sibling);
8929 kid = kid->op_sibling;
8932 if (kid->op_sibling)
8933 return too_many_arguments(o,OP_DESC(o));
8939 Perl_ck_join(pTHX_ OP *o)
8941 const OP * const kid = cLISTOPo->op_first->op_sibling;
8943 PERL_ARGS_ASSERT_CK_JOIN;
8945 if (kid && kid->op_type == OP_MATCH) {
8946 if (ckWARN(WARN_SYNTAX)) {
8947 const REGEXP *re = PM_GETRE(kPMOP);
8948 const char *pmstr = re ? RX_PRECOMP_const(re) : "STRING";
8949 const STRLEN len = re ? RX_PRELEN(re) : 6;
8950 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
8951 "/%.*s/ should probably be written as \"%.*s\"",
8952 (int)len, pmstr, (int)len, pmstr);
8959 =for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
8961 Examines an op, which is expected to identify a subroutine at runtime,
8962 and attempts to determine at compile time which subroutine it identifies.
8963 This is normally used during Perl compilation to determine whether
8964 a prototype can be applied to a function call. I<cvop> is the op
8965 being considered, normally an C<rv2cv> op. A pointer to the identified
8966 subroutine is returned, if it could be determined statically, and a null
8967 pointer is returned if it was not possible to determine statically.
8969 Currently, the subroutine can be identified statically if the RV that the
8970 C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
8971 A C<gv> op is suitable if the GV's CV slot is populated. A C<const> op is
8972 suitable if the constant value must be an RV pointing to a CV. Details of
8973 this process may change in future versions of Perl. If the C<rv2cv> op
8974 has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
8975 the subroutine statically: this flag is used to suppress compile-time
8976 magic on a subroutine call, forcing it to use default runtime behaviour.
8978 If I<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
8979 of a GV reference is modified. If a GV was examined and its CV slot was
8980 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
8981 If the op is not optimised away, and the CV slot is later populated with
8982 a subroutine having a prototype, that flag eventually triggers the warning
8983 "called too early to check prototype".
8985 If I<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
8986 of returning a pointer to the subroutine it returns a pointer to the
8987 GV giving the most appropriate name for the subroutine in this context.
8988 Normally this is just the C<CvGV> of the subroutine, but for an anonymous
8989 (C<CvANON>) subroutine that is referenced through a GV it will be the
8990 referencing GV. The resulting C<GV*> is cast to C<CV*> to be returned.
8991 A null pointer is returned as usual if there is no statically-determinable
8998 Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
9003 PERL_ARGS_ASSERT_RV2CV_OP_CV;
9004 if (flags & ~(RV2CVOPCV_MARK_EARLY|RV2CVOPCV_RETURN_NAME_GV))
9005 Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags);
9006 if (cvop->op_type != OP_RV2CV)
9008 if (cvop->op_private & OPpENTERSUB_AMPER)
9010 if (!(cvop->op_flags & OPf_KIDS))
9012 rvop = cUNOPx(cvop)->op_first;
9013 switch (rvop->op_type) {
9015 gv = cGVOPx_gv(rvop);
9018 if (flags & RV2CVOPCV_MARK_EARLY)
9019 rvop->op_private |= OPpEARLY_CV;
9024 SV *rv = cSVOPx_sv(rvop);
9034 if (SvTYPE((SV*)cv) != SVt_PVCV)
9036 if (flags & RV2CVOPCV_RETURN_NAME_GV) {
9037 if (!CvANON(cv) || !gv)
9046 =for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
9048 Performs the default fixup of the arguments part of an C<entersub>
9049 op tree. This consists of applying list context to each of the
9050 argument ops. This is the standard treatment used on a call marked
9051 with C<&>, or a method call, or a call through a subroutine reference,
9052 or any other call where the callee can't be identified at compile time,
9053 or a call where the callee has no prototype.
9059 Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
9062 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
9063 aop = cUNOPx(entersubop)->op_first;
9064 if (!aop->op_sibling)
9065 aop = cUNOPx(aop)->op_first;
9066 for (aop = aop->op_sibling; aop->op_sibling; aop = aop->op_sibling) {
9067 if (!(PL_madskills && aop->op_type == OP_STUB)) {
9069 op_lvalue(aop, OP_ENTERSUB);
9076 =for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
9078 Performs the fixup of the arguments part of an C<entersub> op tree
9079 based on a subroutine prototype. This makes various modifications to
9080 the argument ops, from applying context up to inserting C<refgen> ops,
9081 and checking the number and syntactic types of arguments, as directed by
9082 the prototype. This is the standard treatment used on a subroutine call,
9083 not marked with C<&>, where the callee can be identified at compile time
9084 and has a prototype.
9086 I<protosv> supplies the subroutine prototype to be applied to the call.
9087 It may be a normal defined scalar, of which the string value will be used.
9088 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
9089 that has been cast to C<SV*>) which has a prototype. The prototype
9090 supplied, in whichever form, does not need to match the actual callee
9091 referenced by the op tree.
9093 If the argument ops disagree with the prototype, for example by having
9094 an unacceptable number of arguments, a valid op tree is returned anyway.
9095 The error is reflected in the parser state, normally resulting in a single
9096 exception at the top level of parsing which covers all the compilation
9097 errors that occurred. In the error message, the callee is referred to
9098 by the name defined by the I<namegv> parameter.
9104 Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
9107 const char *proto, *proto_end;
9108 OP *aop, *prev, *cvop;
9111 I32 contextclass = 0;
9112 const char *e = NULL;
9113 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO;
9114 if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv))
9115 Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto,"
9116 "flags=%lx", (unsigned long) SvFLAGS(protosv));
9117 if (SvTYPE(protosv) == SVt_PVCV)
9118 proto = CvPROTO(protosv), proto_len = CvPROTOLEN(protosv);
9119 else proto = SvPV(protosv, proto_len);
9120 proto_end = proto + proto_len;
9121 aop = cUNOPx(entersubop)->op_first;
9122 if (!aop->op_sibling)
9123 aop = cUNOPx(aop)->op_first;
9125 aop = aop->op_sibling;
9126 for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
9127 while (aop != cvop) {
9129 if (PL_madskills && aop->op_type == OP_STUB) {
9130 aop = aop->op_sibling;
9133 if (PL_madskills && aop->op_type == OP_NULL)
9134 o3 = ((UNOP*)aop)->op_first;
9138 if (proto >= proto_end)
9139 return too_many_arguments(entersubop, gv_ename(namegv));
9147 /* _ must be at the end */
9148 if (proto[1] && !strchr(";@%", proto[1]))
9163 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
9165 arg == 1 ? "block or sub {}" : "sub {}",
9166 gv_ename(namegv), o3);
9169 /* '*' allows any scalar type, including bareword */
9172 if (o3->op_type == OP_RV2GV)
9173 goto wrapref; /* autoconvert GLOB -> GLOBref */
9174 else if (o3->op_type == OP_CONST)
9175 o3->op_private &= ~OPpCONST_STRICT;
9176 else if (o3->op_type == OP_ENTERSUB) {
9177 /* accidental subroutine, revert to bareword */
9178 OP *gvop = ((UNOP*)o3)->op_first;
9179 if (gvop && gvop->op_type == OP_NULL) {
9180 gvop = ((UNOP*)gvop)->op_first;
9182 for (; gvop->op_sibling; gvop = gvop->op_sibling)
9185 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
9186 (gvop = ((UNOP*)gvop)->op_first) &&
9187 gvop->op_type == OP_GV)
9189 GV * const gv = cGVOPx_gv(gvop);
9190 OP * const sibling = aop->op_sibling;
9191 SV * const n = newSVpvs("");
9193 OP * const oldaop = aop;
9197 gv_fullname4(n, gv, "", FALSE);
9198 aop = newSVOP(OP_CONST, 0, n);
9199 op_getmad(oldaop,aop,'O');
9200 prev->op_sibling = aop;
9201 aop->op_sibling = sibling;
9211 if (o3->op_type == OP_RV2AV ||
9212 o3->op_type == OP_PADAV ||
9213 o3->op_type == OP_RV2HV ||
9214 o3->op_type == OP_PADHV
9229 if (contextclass++ == 0) {
9230 e = strchr(proto, ']');
9231 if (!e || e == proto)
9240 const char *p = proto;
9241 const char *const end = proto;
9244 /* \[$] accepts any scalar lvalue */
9246 && Perl_op_lvalue_flags(aTHX_
9248 OP_READ, /* not entersub */
9251 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
9253 gv_ename(namegv), o3);
9258 if (o3->op_type == OP_RV2GV)
9261 bad_type(arg, "symbol", gv_ename(namegv), o3);
9264 if (o3->op_type == OP_ENTERSUB)
9267 bad_type(arg, "subroutine entry", gv_ename(namegv),
9271 if (o3->op_type == OP_RV2SV ||
9272 o3->op_type == OP_PADSV ||
9273 o3->op_type == OP_HELEM ||
9274 o3->op_type == OP_AELEM)
9276 if (!contextclass) {
9277 /* \$ accepts any scalar lvalue */
9278 if (Perl_op_lvalue_flags(aTHX_
9280 OP_READ, /* not entersub */
9283 bad_type(arg, "scalar", gv_ename(namegv), o3);
9287 if (o3->op_type == OP_RV2AV ||
9288 o3->op_type == OP_PADAV)
9291 bad_type(arg, "array", gv_ename(namegv), o3);
9294 if (o3->op_type == OP_RV2HV ||
9295 o3->op_type == OP_PADHV)
9298 bad_type(arg, "hash", gv_ename(namegv), o3);
9302 OP* const kid = aop;
9303 OP* const sib = kid->op_sibling;
9304 kid->op_sibling = 0;
9305 aop = newUNOP(OP_REFGEN, 0, kid);
9306 aop->op_sibling = sib;
9307 prev->op_sibling = aop;
9309 if (contextclass && e) {
9324 SV* const tmpsv = sv_newmortal();
9325 gv_efullname3(tmpsv, namegv, NULL);
9326 Perl_croak(aTHX_ "Malformed prototype for %"SVf": %"SVf,
9327 SVfARG(tmpsv), SVfARG(protosv));
9331 op_lvalue(aop, OP_ENTERSUB);
9333 aop = aop->op_sibling;
9335 if (aop == cvop && *proto == '_') {
9336 /* generate an access to $_ */
9338 aop->op_sibling = prev->op_sibling;
9339 prev->op_sibling = aop; /* instead of cvop */
9341 if (!optional && proto_end > proto &&
9342 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
9343 return too_few_arguments(entersubop, gv_ename(namegv));
9348 =for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
9350 Performs the fixup of the arguments part of an C<entersub> op tree either
9351 based on a subroutine prototype or using default list-context processing.
9352 This is the standard treatment used on a subroutine call, not marked
9353 with C<&>, where the callee can be identified at compile time.
9355 I<protosv> supplies the subroutine prototype to be applied to the call,
9356 or indicates that there is no prototype. It may be a normal scalar,
9357 in which case if it is defined then the string value will be used
9358 as a prototype, and if it is undefined then there is no prototype.
9359 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
9360 that has been cast to C<SV*>), of which the prototype will be used if it
9361 has one. The prototype (or lack thereof) supplied, in whichever form,
9362 does not need to match the actual callee referenced by the op tree.
9364 If the argument ops disagree with the prototype, for example by having
9365 an unacceptable number of arguments, a valid op tree is returned anyway.
9366 The error is reflected in the parser state, normally resulting in a single
9367 exception at the top level of parsing which covers all the compilation
9368 errors that occurred. In the error message, the callee is referred to
9369 by the name defined by the I<namegv> parameter.
9375 Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
9376 GV *namegv, SV *protosv)
9378 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST;
9379 if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv))
9380 return ck_entersub_args_proto(entersubop, namegv, protosv);
9382 return ck_entersub_args_list(entersubop);
9386 Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
9388 int opnum = SvTYPE(protosv) == SVt_PVCV ? 0 : (int)SvUV(protosv);
9389 OP *aop = cUNOPx(entersubop)->op_first;
9391 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE;
9395 if (!aop->op_sibling)
9396 aop = cUNOPx(aop)->op_first;
9397 aop = aop->op_sibling;
9398 for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
9399 if (PL_madskills) while (aop != cvop && aop->op_type == OP_STUB) {
9400 aop = aop->op_sibling;
9403 (void)too_many_arguments(entersubop, GvNAME(namegv));
9405 op_free(entersubop);
9406 switch(GvNAME(namegv)[2]) {
9407 case 'F': return newSVOP(OP_CONST, 0,
9408 newSVpv(CopFILE(PL_curcop),0));
9409 case 'L': return newSVOP(
9412 "%"IVdf, (IV)CopLINE(PL_curcop)
9415 case 'P': return newSVOP(OP_CONST, 0,
9417 ? newSVhek(HvNAME_HEK(PL_curstash))
9428 bool seenarg = FALSE;
9430 if (!aop->op_sibling)
9431 aop = cUNOPx(aop)->op_first;
9434 aop = aop->op_sibling;
9435 prev->op_sibling = NULL;
9438 prev=cvop, cvop = cvop->op_sibling)
9440 if (PL_madskills && cvop->op_sibling
9441 && cvop->op_type != OP_STUB) seenarg = TRUE
9444 prev->op_sibling = NULL;
9445 flags = OPf_SPECIAL * !(cvop->op_private & OPpENTERSUB_NOPAREN);
9447 if (aop == cvop) aop = NULL;
9448 op_free(entersubop);
9450 if (opnum == OP_ENTEREVAL
9451 && GvNAMELEN(namegv)==9 && strnEQ(GvNAME(namegv), "evalbytes", 9))
9452 flags |= OPpEVAL_BYTES <<8;
9454 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
9456 case OA_BASEOP_OR_UNOP:
9458 return aop ? newUNOP(opnum,flags,aop) : newOP(opnum,flags);
9462 if (!PL_madskills || seenarg)
9464 (void)too_many_arguments(aop, GvNAME(namegv));
9467 return opnum == OP_RUNCV
9468 ? newPVOP(OP_RUNCV,0,NULL)
9471 return convert(opnum,0,aop);
9479 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
9481 Retrieves the function that will be used to fix up a call to I<cv>.
9482 Specifically, the function is applied to an C<entersub> op tree for a
9483 subroutine call, not marked with C<&>, where the callee can be identified
9484 at compile time as I<cv>.
9486 The C-level function pointer is returned in I<*ckfun_p>, and an SV
9487 argument for it is returned in I<*ckobj_p>. The function is intended
9488 to be called in this manner:
9490 entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
9492 In this call, I<entersubop> is a pointer to the C<entersub> op,
9493 which may be replaced by the check function, and I<namegv> is a GV
9494 supplying the name that should be used by the check function to refer
9495 to the callee of the C<entersub> op if it needs to emit any diagnostics.
9496 It is permitted to apply the check function in non-standard situations,
9497 such as to a call to a different subroutine or to a method call.
9499 By default, the function is
9500 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
9501 and the SV parameter is I<cv> itself. This implements standard
9502 prototype processing. It can be changed, for a particular subroutine,
9503 by L</cv_set_call_checker>.
9509 Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
9512 PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER;
9513 callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL;
9515 *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr);
9516 *ckobj_p = callmg->mg_obj;
9518 *ckfun_p = Perl_ck_entersub_args_proto_or_list;
9524 =for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
9526 Sets the function that will be used to fix up a call to I<cv>.
9527 Specifically, the function is applied to an C<entersub> op tree for a
9528 subroutine call, not marked with C<&>, where the callee can be identified
9529 at compile time as I<cv>.
9531 The C-level function pointer is supplied in I<ckfun>, and an SV argument
9532 for it is supplied in I<ckobj>. The function is intended to be called
9535 entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
9537 In this call, I<entersubop> is a pointer to the C<entersub> op,
9538 which may be replaced by the check function, and I<namegv> is a GV
9539 supplying the name that should be used by the check function to refer
9540 to the callee of the C<entersub> op if it needs to emit any diagnostics.
9541 It is permitted to apply the check function in non-standard situations,
9542 such as to a call to a different subroutine or to a method call.
9544 The current setting for a particular CV can be retrieved by
9545 L</cv_get_call_checker>.
9551 Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
9553 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER;
9554 if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) {
9555 if (SvMAGICAL((SV*)cv))
9556 mg_free_type((SV*)cv, PERL_MAGIC_checkcall);
9559 sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0);
9560 callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall);
9561 if (callmg->mg_flags & MGf_REFCOUNTED) {
9562 SvREFCNT_dec(callmg->mg_obj);
9563 callmg->mg_flags &= ~MGf_REFCOUNTED;
9565 callmg->mg_ptr = FPTR2DPTR(char *, ckfun);
9566 callmg->mg_obj = ckobj;
9567 if (ckobj != (SV*)cv) {
9568 SvREFCNT_inc_simple_void_NN(ckobj);
9569 callmg->mg_flags |= MGf_REFCOUNTED;
9575 Perl_ck_subr(pTHX_ OP *o)
9581 PERL_ARGS_ASSERT_CK_SUBR;
9583 aop = cUNOPx(o)->op_first;
9584 if (!aop->op_sibling)
9585 aop = cUNOPx(aop)->op_first;
9586 aop = aop->op_sibling;
9587 for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
9588 cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY);
9589 namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_RETURN_NAME_GV) : NULL;
9591 o->op_private &= ~1;
9592 o->op_private |= OPpENTERSUB_HASTARG;
9593 o->op_private |= (PL_hints & HINT_STRICT_REFS);
9594 if (PERLDB_SUB && PL_curstash != PL_debstash)
9595 o->op_private |= OPpENTERSUB_DB;
9596 if (cvop->op_type == OP_RV2CV) {
9597 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
9599 } else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
9600 if (aop->op_type == OP_CONST)
9601 aop->op_private &= ~OPpCONST_STRICT;
9602 else if (aop->op_type == OP_LIST) {
9603 OP * const sib = ((UNOP*)aop)->op_first->op_sibling;
9604 if (sib && sib->op_type == OP_CONST)
9605 sib->op_private &= ~OPpCONST_STRICT;
9610 return ck_entersub_args_list(o);
9612 Perl_call_checker ckfun;
9614 cv_get_call_checker(cv, &ckfun, &ckobj);
9615 return ckfun(aTHX_ o, namegv, ckobj);
9620 Perl_ck_svconst(pTHX_ OP *o)
9622 PERL_ARGS_ASSERT_CK_SVCONST;
9623 PERL_UNUSED_CONTEXT;
9624 SvREADONLY_on(cSVOPo->op_sv);
9629 Perl_ck_chdir(pTHX_ OP *o)
9631 PERL_ARGS_ASSERT_CK_CHDIR;
9632 if (o->op_flags & OPf_KIDS) {
9633 SVOP * const kid = (SVOP*)cUNOPo->op_first;
9635 if (kid && kid->op_type == OP_CONST &&
9636 (kid->op_private & OPpCONST_BARE))
9638 o->op_flags |= OPf_SPECIAL;
9639 kid->op_private &= ~OPpCONST_STRICT;
9646 Perl_ck_trunc(pTHX_ OP *o)
9648 PERL_ARGS_ASSERT_CK_TRUNC;
9650 if (o->op_flags & OPf_KIDS) {
9651 SVOP *kid = (SVOP*)cUNOPo->op_first;
9653 if (kid->op_type == OP_NULL)
9654 kid = (SVOP*)kid->op_sibling;
9655 if (kid && kid->op_type == OP_CONST &&
9656 (kid->op_private & OPpCONST_BARE))
9658 o->op_flags |= OPf_SPECIAL;
9659 kid->op_private &= ~OPpCONST_STRICT;
9666 Perl_ck_substr(pTHX_ OP *o)
9668 PERL_ARGS_ASSERT_CK_SUBSTR;
9671 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
9672 OP *kid = cLISTOPo->op_first;
9674 if (kid->op_type == OP_NULL)
9675 kid = kid->op_sibling;
9677 kid->op_flags |= OPf_MOD;
9684 Perl_ck_tell(pTHX_ OP *o)
9686 PERL_ARGS_ASSERT_CK_TELL;
9688 if (o->op_flags & OPf_KIDS) {
9689 OP *kid = cLISTOPo->op_first;
9690 if (kid->op_type == OP_NULL && kid->op_sibling) kid = kid->op_sibling;
9691 if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE;
9697 Perl_ck_each(pTHX_ OP *o)
9700 OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL;
9701 const unsigned orig_type = o->op_type;
9702 const unsigned array_type = orig_type == OP_EACH ? OP_AEACH
9703 : orig_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
9704 const unsigned ref_type = orig_type == OP_EACH ? OP_REACH
9705 : orig_type == OP_KEYS ? OP_RKEYS : OP_RVALUES;
9707 PERL_ARGS_ASSERT_CK_EACH;
9710 switch (kid->op_type) {
9716 CHANGE_TYPE(o, array_type);
9719 if (kid->op_private == OPpCONST_BARE
9720 || !SvROK(cSVOPx_sv(kid))
9721 || ( SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV
9722 && SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVHV )
9724 /* we let ck_fun handle it */
9727 CHANGE_TYPE(o, ref_type);
9731 /* if treating as a reference, defer additional checks to runtime */
9732 return o->op_type == ref_type ? o : ck_fun(o);
9736 Perl_ck_length(pTHX_ OP *o)
9738 PERL_ARGS_ASSERT_CK_LENGTH;
9742 if (ckWARN(WARN_SYNTAX)) {
9743 const OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
9747 const bool hash = kid->op_type == OP_PADHV
9748 || kid->op_type == OP_RV2HV;
9749 switch (kid->op_type) {
9753 (GV *)PL_compcv, hash ? '%' : '@', kid->op_targ,
9759 if (cUNOPx(kid)->op_first->op_type != OP_GV) break;
9761 GV *gv = cGVOPx_gv(cUNOPx(kid)->op_first);
9763 name = varname(gv, hash?'%':'@', 0, NULL, 0, 1);
9770 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
9771 "length() used on %"SVf" (did you mean \"scalar(%s%"SVf
9773 name, hash ? "keys " : "", name
9776 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
9777 "length() used on %%hash (did you mean \"scalar(keys %%hash)\"?)");
9779 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
9780 "length() used on @array (did you mean \"scalar(@array)\"?)");
9787 /* caller is supposed to assign the return to the
9788 container of the rep_op var */
9790 S_opt_scalarhv(pTHX_ OP *rep_op) {
9794 PERL_ARGS_ASSERT_OPT_SCALARHV;
9796 NewOp(1101, unop, 1, UNOP);
9797 unop->op_type = (OPCODE)OP_BOOLKEYS;
9798 unop->op_ppaddr = PL_ppaddr[OP_BOOLKEYS];
9799 unop->op_flags = (U8)(OPf_WANT_SCALAR | OPf_KIDS );
9800 unop->op_private = (U8)(1 | ((OPf_WANT_SCALAR | OPf_KIDS) >> 8));
9801 unop->op_first = rep_op;
9802 unop->op_next = rep_op->op_next;
9803 rep_op->op_next = (OP*)unop;
9804 rep_op->op_flags|=(OPf_REF | OPf_MOD);
9805 unop->op_sibling = rep_op->op_sibling;
9806 rep_op->op_sibling = NULL;
9807 /* unop->op_targ = pad_alloc(OP_BOOLKEYS, SVs_PADTMP); */
9808 if (rep_op->op_type == OP_PADHV) {
9809 rep_op->op_flags &= ~OPf_WANT_SCALAR;
9810 rep_op->op_flags |= OPf_WANT_LIST;
9815 /* Check for in place reverse and sort assignments like "@a = reverse @a"
9816 and modify the optree to make them work inplace */
9819 S_inplace_aassign(pTHX_ OP *o) {
9821 OP *modop, *modop_pushmark;
9823 OP *oleft, *oleft_pushmark;
9825 PERL_ARGS_ASSERT_INPLACE_AASSIGN;
9827 assert((o->op_flags & OPf_WANT) == OPf_WANT_VOID);
9829 assert(cUNOPo->op_first->op_type == OP_NULL);
9830 modop_pushmark = cUNOPx(cUNOPo->op_first)->op_first;
9831 assert(modop_pushmark->op_type == OP_PUSHMARK);
9832 modop = modop_pushmark->op_sibling;
9834 if (modop->op_type != OP_SORT && modop->op_type != OP_REVERSE)
9837 /* no other operation except sort/reverse */
9838 if (modop->op_sibling)
9841 assert(cUNOPx(modop)->op_first->op_type == OP_PUSHMARK);
9842 if (!(oright = cUNOPx(modop)->op_first->op_sibling)) return;
9844 if (modop->op_flags & OPf_STACKED) {
9845 /* skip sort subroutine/block */
9846 assert(oright->op_type == OP_NULL);
9847 oright = oright->op_sibling;
9850 assert(cUNOPo->op_first->op_sibling->op_type == OP_NULL);
9851 oleft_pushmark = cUNOPx(cUNOPo->op_first->op_sibling)->op_first;
9852 assert(oleft_pushmark->op_type == OP_PUSHMARK);
9853 oleft = oleft_pushmark->op_sibling;
9855 /* Check the lhs is an array */
9857 (oleft->op_type != OP_RV2AV && oleft->op_type != OP_PADAV)
9858 || oleft->op_sibling
9859 || (oleft->op_private & OPpLVAL_INTRO)
9863 /* Only one thing on the rhs */
9864 if (oright->op_sibling)
9867 /* check the array is the same on both sides */
9868 if (oleft->op_type == OP_RV2AV) {
9869 if (oright->op_type != OP_RV2AV
9870 || !cUNOPx(oright)->op_first
9871 || cUNOPx(oright)->op_first->op_type != OP_GV
9872 || cUNOPx(oleft )->op_first->op_type != OP_GV
9873 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
9874 cGVOPx_gv(cUNOPx(oright)->op_first)
9878 else if (oright->op_type != OP_PADAV
9879 || oright->op_targ != oleft->op_targ
9883 /* This actually is an inplace assignment */
9885 modop->op_private |= OPpSORT_INPLACE;
9887 /* transfer MODishness etc from LHS arg to RHS arg */
9888 oright->op_flags = oleft->op_flags;
9890 /* remove the aassign op and the lhs */
9892 op_null(oleft_pushmark);
9893 if (oleft->op_type == OP_RV2AV && cUNOPx(oleft)->op_first)
9894 op_null(cUNOPx(oleft)->op_first);
9898 #define MAX_DEFERRED 4
9901 if (defer_ix == (MAX_DEFERRED-1)) { \
9902 CALL_RPEEP(defer_queue[defer_base]); \
9903 defer_base = (defer_base + 1) % MAX_DEFERRED; \
9906 defer_queue[(defer_base + ++defer_ix) % MAX_DEFERRED] = o;
9908 /* A peephole optimizer. We visit the ops in the order they're to execute.
9909 * See the comments at the top of this file for more details about when
9910 * peep() is called */
9913 Perl_rpeep(pTHX_ register OP *o)
9916 register OP* oldop = NULL;
9917 OP* defer_queue[MAX_DEFERRED]; /* small queue of deferred branches */
9921 if (!o || o->op_opt)
9925 SAVEVPTR(PL_curcop);
9926 for (;; o = o->op_next) {
9930 while (defer_ix >= 0)
9931 CALL_RPEEP(defer_queue[(defer_base + defer_ix--) % MAX_DEFERRED]);
9935 /* By default, this op has now been optimised. A couple of cases below
9936 clear this again. */
9939 switch (o->op_type) {
9941 PL_curcop = ((COP*)o); /* for warnings */
9944 PL_curcop = ((COP*)o); /* for warnings */
9946 /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
9947 to carry two labels. For now, take the easier option, and skip
9948 this optimisation if the first NEXTSTATE has a label. */
9949 if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) {
9950 OP *nextop = o->op_next;
9951 while (nextop && nextop->op_type == OP_NULL)
9952 nextop = nextop->op_next;
9954 if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
9955 COP *firstcop = (COP *)o;
9956 COP *secondcop = (COP *)nextop;
9957 /* We want the COP pointed to by o (and anything else) to
9958 become the next COP down the line. */
9961 firstcop->op_next = secondcop->op_next;
9963 /* Now steal all its pointers, and duplicate the other
9965 firstcop->cop_line = secondcop->cop_line;
9967 firstcop->cop_stashpv = secondcop->cop_stashpv;
9968 firstcop->cop_file = secondcop->cop_file;
9970 firstcop->cop_stash = secondcop->cop_stash;
9971 firstcop->cop_filegv = secondcop->cop_filegv;
9973 firstcop->cop_hints = secondcop->cop_hints;
9974 firstcop->cop_seq = secondcop->cop_seq;
9975 firstcop->cop_warnings = secondcop->cop_warnings;
9976 firstcop->cop_hints_hash = secondcop->cop_hints_hash;
9979 secondcop->cop_stashpv = NULL;
9980 secondcop->cop_file = NULL;
9982 secondcop->cop_stash = NULL;
9983 secondcop->cop_filegv = NULL;
9985 secondcop->cop_warnings = NULL;
9986 secondcop->cop_hints_hash = NULL;
9988 /* If we use op_null(), and hence leave an ex-COP, some
9989 warnings are misreported. For example, the compile-time
9990 error in 'use strict; no strict refs;' */
9991 secondcop->op_type = OP_NULL;
9992 secondcop->op_ppaddr = PL_ppaddr[OP_NULL];
9998 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
9999 if (o->op_next->op_private & OPpTARGET_MY) {
10000 if (o->op_flags & OPf_STACKED) /* chained concats */
10001 break; /* ignore_optimization */
10003 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
10004 o->op_targ = o->op_next->op_targ;
10005 o->op_next->op_targ = 0;
10006 o->op_private |= OPpTARGET_MY;
10009 op_null(o->op_next);
10013 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
10014 break; /* Scalar stub must produce undef. List stub is noop */
10018 if (o->op_targ == OP_NEXTSTATE
10019 || o->op_targ == OP_DBSTATE)
10021 PL_curcop = ((COP*)o);
10023 /* XXX: We avoid setting op_seq here to prevent later calls
10024 to rpeep() from mistakenly concluding that optimisation
10025 has already occurred. This doesn't fix the real problem,
10026 though (See 20010220.007). AMS 20010719 */
10027 /* op_seq functionality is now replaced by op_opt */
10034 if (oldop && o->op_next) {
10035 oldop->op_next = o->op_next;
10043 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
10044 OP* const pop = (o->op_type == OP_PADAV) ?
10045 o->op_next : o->op_next->op_next;
10047 if (pop && pop->op_type == OP_CONST &&
10048 ((PL_op = pop->op_next)) &&
10049 pop->op_next->op_type == OP_AELEM &&
10050 !(pop->op_next->op_private &
10051 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
10052 (i = SvIV(((SVOP*)pop)->op_sv)) <= 255 && i >= 0)
10055 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
10056 no_bareword_allowed(pop);
10057 if (o->op_type == OP_GV)
10058 op_null(o->op_next);
10059 op_null(pop->op_next);
10061 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
10062 o->op_next = pop->op_next->op_next;
10063 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
10064 o->op_private = (U8)i;
10065 if (o->op_type == OP_GV) {
10068 o->op_type = OP_AELEMFAST;
10071 o->op_type = OP_AELEMFAST_LEX;
10076 if (o->op_next->op_type == OP_RV2SV) {
10077 if (!(o->op_next->op_private & OPpDEREF)) {
10078 op_null(o->op_next);
10079 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
10081 o->op_next = o->op_next->op_next;
10082 o->op_type = OP_GVSV;
10083 o->op_ppaddr = PL_ppaddr[OP_GVSV];
10086 else if (o->op_next->op_type == OP_READLINE
10087 && o->op_next->op_next->op_type == OP_CONCAT
10088 && (o->op_next->op_next->op_flags & OPf_STACKED))
10090 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
10091 o->op_type = OP_RCATLINE;
10092 o->op_flags |= OPf_STACKED;
10093 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
10094 op_null(o->op_next->op_next);
10095 op_null(o->op_next);
10105 fop = cUNOP->op_first;
10113 fop = cLOGOP->op_first;
10114 sop = fop->op_sibling;
10115 while (cLOGOP->op_other->op_type == OP_NULL)
10116 cLOGOP->op_other = cLOGOP->op_other->op_next;
10117 while (o->op_next && ( o->op_type == o->op_next->op_type
10118 || o->op_next->op_type == OP_NULL))
10119 o->op_next = o->op_next->op_next;
10120 DEFER(cLOGOP->op_other);
10124 if ((fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
10126 (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV)
10131 if (!((nop->op_flags & OPf_WANT) == OPf_WANT_VOID)) {
10132 while (nop && nop->op_next) {
10133 switch (nop->op_next->op_type) {
10138 lop = nop = nop->op_next;
10141 nop = nop->op_next;
10149 if ((lop->op_flags & OPf_WANT) == OPf_WANT_VOID) {
10150 if (fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
10151 cLOGOP->op_first = opt_scalarhv(fop);
10152 if (sop && (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV))
10153 cLOGOP->op_first->op_sibling = opt_scalarhv(sop);
10169 while (cLOGOP->op_other->op_type == OP_NULL)
10170 cLOGOP->op_other = cLOGOP->op_other->op_next;
10171 DEFER(cLOGOP->op_other);
10176 while (cLOOP->op_redoop->op_type == OP_NULL)
10177 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
10178 while (cLOOP->op_nextop->op_type == OP_NULL)
10179 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
10180 while (cLOOP->op_lastop->op_type == OP_NULL)
10181 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
10182 /* a while(1) loop doesn't have an op_next that escapes the
10183 * loop, so we have to explicitly follow the op_lastop to
10184 * process the rest of the code */
10185 DEFER(cLOOP->op_lastop);
10189 assert(!(cPMOP->op_pmflags & PMf_ONCE));
10190 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
10191 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
10192 cPMOP->op_pmstashstartu.op_pmreplstart
10193 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
10194 DEFER(cPMOP->op_pmstashstartu.op_pmreplstart);
10198 /* check that RHS of sort is a single plain array */
10199 OP *oright = cUNOPo->op_first;
10200 if (!oright || oright->op_type != OP_PUSHMARK)
10203 if (o->op_private & OPpSORT_INPLACE)
10206 /* reverse sort ... can be optimised. */
10207 if (!cUNOPo->op_sibling) {
10208 /* Nothing follows us on the list. */
10209 OP * const reverse = o->op_next;
10211 if (reverse->op_type == OP_REVERSE &&
10212 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
10213 OP * const pushmark = cUNOPx(reverse)->op_first;
10214 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
10215 && (cUNOPx(pushmark)->op_sibling == o)) {
10216 /* reverse -> pushmark -> sort */
10217 o->op_private |= OPpSORT_REVERSE;
10219 pushmark->op_next = oright->op_next;
10229 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
10231 LISTOP *enter, *exlist;
10233 if (o->op_private & OPpSORT_INPLACE)
10236 enter = (LISTOP *) o->op_next;
10239 if (enter->op_type == OP_NULL) {
10240 enter = (LISTOP *) enter->op_next;
10244 /* for $a (...) will have OP_GV then OP_RV2GV here.
10245 for (...) just has an OP_GV. */
10246 if (enter->op_type == OP_GV) {
10247 gvop = (OP *) enter;
10248 enter = (LISTOP *) enter->op_next;
10251 if (enter->op_type == OP_RV2GV) {
10252 enter = (LISTOP *) enter->op_next;
10258 if (enter->op_type != OP_ENTERITER)
10261 iter = enter->op_next;
10262 if (!iter || iter->op_type != OP_ITER)
10265 expushmark = enter->op_first;
10266 if (!expushmark || expushmark->op_type != OP_NULL
10267 || expushmark->op_targ != OP_PUSHMARK)
10270 exlist = (LISTOP *) expushmark->op_sibling;
10271 if (!exlist || exlist->op_type != OP_NULL
10272 || exlist->op_targ != OP_LIST)
10275 if (exlist->op_last != o) {
10276 /* Mmm. Was expecting to point back to this op. */
10279 theirmark = exlist->op_first;
10280 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
10283 if (theirmark->op_sibling != o) {
10284 /* There's something between the mark and the reverse, eg
10285 for (1, reverse (...))
10290 ourmark = ((LISTOP *)o)->op_first;
10291 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
10294 ourlast = ((LISTOP *)o)->op_last;
10295 if (!ourlast || ourlast->op_next != o)
10298 rv2av = ourmark->op_sibling;
10299 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
10300 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
10301 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
10302 /* We're just reversing a single array. */
10303 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
10304 enter->op_flags |= OPf_STACKED;
10307 /* We don't have control over who points to theirmark, so sacrifice
10309 theirmark->op_next = ourmark->op_next;
10310 theirmark->op_flags = ourmark->op_flags;
10311 ourlast->op_next = gvop ? gvop : (OP *) enter;
10314 enter->op_private |= OPpITER_REVERSED;
10315 iter->op_private |= OPpITER_REVERSED;
10322 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
10323 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
10328 if (!(o->op_private & OPpOFFBYONE) && !CvCLONE(PL_compcv)) {
10330 if (CvUNIQUE(PL_compcv)) sv = &PL_sv_undef;
10332 sv = newRV((SV *)PL_compcv);
10336 o->op_type = OP_CONST;
10337 o->op_ppaddr = PL_ppaddr[OP_CONST];
10338 o->op_flags |= OPf_SPECIAL;
10339 cSVOPo->op_sv = sv;
10344 if (OP_GIMME(o,0) == G_VOID) {
10345 OP *right = cBINOP->op_first;
10347 OP *left = right->op_sibling;
10348 if (left->op_type == OP_SUBSTR
10349 && (left->op_private & 7) < 4) {
10351 cBINOP->op_first = left;
10352 right->op_sibling =
10353 cBINOPx(left)->op_first->op_sibling;
10354 cBINOPx(left)->op_first->op_sibling = right;
10355 left->op_private |= OPpSUBSTR_REPL_FIRST;
10357 (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
10364 Perl_cpeep_t cpeep =
10365 XopENTRY(Perl_custom_op_xop(aTHX_ o), xop_peep);
10367 cpeep(aTHX_ o, oldop);
10378 Perl_peep(pTHX_ register OP *o)
10384 =head1 Custom Operators
10386 =for apidoc Ao||custom_op_xop
10387 Return the XOP structure for a given custom op. This function should be
10388 considered internal to OP_NAME and the other access macros: use them instead.
10394 Perl_custom_op_xop(pTHX_ const OP *o)
10400 static const XOP xop_null = { 0, 0, 0, 0, 0 };
10402 PERL_ARGS_ASSERT_CUSTOM_OP_XOP;
10403 assert(o->op_type == OP_CUSTOM);
10405 /* This is wrong. It assumes a function pointer can be cast to IV,
10406 * which isn't guaranteed, but this is what the old custom OP code
10407 * did. In principle it should be safer to Copy the bytes of the
10408 * pointer into a PV: since the new interface is hidden behind
10409 * functions, this can be changed later if necessary. */
10410 /* Change custom_op_xop if this ever happens */
10411 keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
10414 he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0);
10416 /* assume noone will have just registered a desc */
10417 if (!he && PL_custom_op_names &&
10418 (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0))
10423 /* XXX does all this need to be shared mem? */
10424 Newxz(xop, 1, XOP);
10425 pv = SvPV(HeVAL(he), l);
10426 XopENTRY_set(xop, xop_name, savepvn(pv, l));
10427 if (PL_custom_op_descs &&
10428 (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0))
10430 pv = SvPV(HeVAL(he), l);
10431 XopENTRY_set(xop, xop_desc, savepvn(pv, l));
10433 Perl_custom_op_register(aTHX_ o->op_ppaddr, xop);
10437 if (!he) return &xop_null;
10439 xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
10444 =for apidoc Ao||custom_op_register
10445 Register a custom op. See L<perlguts/"Custom Operators">.
10451 Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
10455 PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER;
10457 /* see the comment in custom_op_xop */
10458 keysv = sv_2mortal(newSViv(PTR2IV(ppaddr)));
10460 if (!PL_custom_ops)
10461 PL_custom_ops = newHV();
10463 if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0))
10464 Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name);
10468 =head1 Functions in file op.c
10470 =for apidoc core_prototype
10471 This function assigns the prototype of the named core function to C<sv>, or
10472 to a new mortal SV if C<sv> is NULL. It returns the modified C<sv>, or
10473 NULL if the core function has no prototype. C<code> is a code as returned
10474 by C<keyword()>. It must be negative and unequal to -KEY_CORE.
10480 Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code,
10483 int i = 0, n = 0, seen_question = 0, defgv = 0;
10485 #define MAX_ARGS_OP ((sizeof(I32) - 1) * 2)
10486 char str[ MAX_ARGS_OP * 2 + 2 ]; /* One ';', one '\0' */
10487 bool nullret = FALSE;
10489 PERL_ARGS_ASSERT_CORE_PROTOTYPE;
10491 assert (code < 0 && code != -KEY_CORE);
10493 if (!sv) sv = sv_newmortal();
10495 #define retsetpvs(x,y) sv_setpvs(sv, x); if(opnum) *opnum=(y); return sv
10498 case KEY_and : case KEY_chop: case KEY_chomp:
10499 case KEY_cmp : case KEY_exec: case KEY_eq :
10500 case KEY_ge : case KEY_gt : case KEY_le :
10501 case KEY_lt : case KEY_ne : case KEY_or :
10502 case KEY_select: case KEY_system: case KEY_x : case KEY_xor:
10503 if (!opnum) return NULL; nullret = TRUE; goto findopnum;
10504 case KEY_keys: retsetpvs("+", OP_KEYS);
10505 case KEY_values: retsetpvs("+", OP_VALUES);
10506 case KEY_each: retsetpvs("+", OP_EACH);
10507 case KEY_push: retsetpvs("+@", OP_PUSH);
10508 case KEY_unshift: retsetpvs("+@", OP_UNSHIFT);
10509 case KEY_pop: retsetpvs(";+", OP_POP);
10510 case KEY_shift: retsetpvs(";+", OP_SHIFT);
10512 retsetpvs("+;$$@", OP_SPLICE);
10513 case KEY___FILE__: case KEY___LINE__: case KEY___PACKAGE__:
10515 case KEY_evalbytes:
10516 name = "entereval"; break;
10524 while (i < MAXO) { /* The slow way. */
10525 if (strEQ(name, PL_op_name[i])
10526 || strEQ(name, PL_op_desc[i]))
10528 if (nullret) { assert(opnum); *opnum = i; return NULL; }
10533 assert(0); return NULL; /* Should not happen... */
10535 defgv = PL_opargs[i] & OA_DEFGV;
10536 oa = PL_opargs[i] >> OASHIFT;
10538 if (oa & OA_OPTIONAL && !seen_question && (
10539 !defgv || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF
10544 if ((oa & (OA_OPTIONAL - 1)) >= OA_AVREF
10545 && (oa & (OA_OPTIONAL - 1)) <= OA_SCALARREF
10546 /* But globs are already references (kinda) */
10547 && (oa & (OA_OPTIONAL - 1)) != OA_FILEREF
10551 if ((oa & (OA_OPTIONAL - 1)) == OA_SCALARREF
10552 && !scalar_mod_type(NULL, i)) {
10557 if (i == OP_LOCK) str[n++] = '&';
10561 else str[n++] = ("?$@@%&*$")[oa & (OA_OPTIONAL - 1)];
10562 if (oa & OA_OPTIONAL && defgv && str[n-1] == '$') {
10563 str[n-1] = '_'; defgv = 0;
10567 if (code == -KEY_not || code == -KEY_getprotobynumber) str[n++] = ';';
10569 sv_setpvn(sv, str, n - 1);
10570 if (opnum) *opnum = i;
10575 Perl_coresub_op(pTHX_ SV * const coreargssv, const int code,
10578 OP * const argop = newSVOP(OP_COREARGS,0,coreargssv);
10581 PERL_ARGS_ASSERT_CORESUB_OP;
10585 return op_append_elem(OP_LINESEQ,
10588 newSVOP(OP_CONST, 0, newSViv(-code % 3)),
10592 case OP_SELECT: /* which represents OP_SSELECT as well */
10597 newAVREF(newGVOP(OP_GV, 0, PL_defgv)),
10598 newSVOP(OP_CONST, 0, newSVuv(1))
10600 coresub_op(newSVuv((UV)OP_SSELECT), 0,
10602 coresub_op(coreargssv, 0, OP_SELECT)
10606 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
10608 return op_append_elem(
10611 opnum == OP_WANTARRAY || opnum == OP_RUNCV
10612 ? OPpOFFBYONE << 8 : 0)
10614 case OA_BASEOP_OR_UNOP:
10615 if (opnum == OP_ENTEREVAL) {
10616 o = newUNOP(OP_ENTEREVAL,OPpEVAL_COPHH<<8,argop);
10617 if (code == -KEY_evalbytes) o->op_private |= OPpEVAL_BYTES;
10619 else o = newUNOP(opnum,0,argop);
10620 if (opnum == OP_CALLER) o->op_private |= OPpOFFBYONE;
10623 if (is_handle_constructor(o, 1))
10624 argop->op_private |= OPpCOREARGS_DEREF1;
10628 o = convert(opnum,0,argop);
10629 if (is_handle_constructor(o, 2))
10630 argop->op_private |= OPpCOREARGS_DEREF2;
10631 if (scalar_mod_type(NULL, opnum))
10632 argop->op_private |= OPpCOREARGS_SCALARMOD;
10633 if (opnum == OP_SUBSTR) {
10634 o->op_private |= OPpMAYBE_LVSUB;
10643 Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv,
10644 SV * const *new_const_svp)
10646 const char *hvname;
10647 bool is_const = !!CvCONST(old_cv);
10648 SV *old_const_sv = is_const ? cv_const_sv(old_cv) : NULL;
10650 PERL_ARGS_ASSERT_REPORT_REDEFINED_CV;
10652 if (is_const && new_const_svp && old_const_sv == *new_const_svp)
10654 /* They are 2 constant subroutines generated from
10655 the same constant. This probably means that
10656 they are really the "same" proxy subroutine
10657 instantiated in 2 places. Most likely this is
10658 when a constant is exported twice. Don't warn.
10661 (ckWARN(WARN_REDEFINE)
10663 CvGV(old_cv) && GvSTASH(CvGV(old_cv))
10664 && HvNAMELEN(GvSTASH(CvGV(old_cv))) == 7
10665 && (hvname = HvNAME(GvSTASH(CvGV(old_cv))),
10666 strEQ(hvname, "autouse"))
10670 && ckWARN_d(WARN_REDEFINE)
10671 && (!new_const_svp || sv_cmp(old_const_sv, *new_const_svp))
10674 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
10676 ? "Constant subroutine %"SVf" redefined"
10677 : "Subroutine %"SVf" redefined",
10683 /* Efficient sub that returns a constant scalar value. */
10685 const_sv_xsub(pTHX_ CV* cv)
10689 SV *const sv = MUTABLE_SV(XSANY.any_ptr);
10693 /* diag_listed_as: SKIPME */
10694 Perl_croak(aTHX_ "usage: %s::%s()",
10695 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
10708 * c-indentation-style: bsd
10709 * c-basic-offset: 4
10710 * indent-tabs-mode: t
10713 * ex: set ts=8 sts=4 sw=4 noet: