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"
106 #define CALL_PEEP(o) PL_peepp(aTHX_ o)
107 #define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
108 #define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
110 #if defined(PL_OP_SLAB_ALLOC)
112 #ifdef PERL_DEBUG_READONLY_OPS
113 # define PERL_SLAB_SIZE 4096
114 # include <sys/mman.h>
117 #ifndef PERL_SLAB_SIZE
118 #define PERL_SLAB_SIZE 2048
122 Perl_Slab_Alloc(pTHX_ size_t sz)
126 * To make incrementing use count easy PL_OpSlab is an I32 *
127 * To make inserting the link to slab PL_OpPtr is I32 **
128 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
129 * Add an overhead for pointer to slab and round up as a number of pointers
131 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
132 if ((PL_OpSpace -= sz) < 0) {
133 #ifdef PERL_DEBUG_READONLY_OPS
134 /* We need to allocate chunk by chunk so that we can control the VM
136 PL_OpPtr = (I32**) mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
137 MAP_ANON|MAP_PRIVATE, -1, 0);
139 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
140 (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
142 if(PL_OpPtr == MAP_FAILED) {
143 perror("mmap failed");
148 PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*));
153 /* We reserve the 0'th I32 sized chunk as a use count */
154 PL_OpSlab = (I32 *) PL_OpPtr;
155 /* Reduce size by the use count word, and by the size we need.
156 * Latter is to mimic the '-=' in the if() above
158 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
159 /* Allocation pointer starts at the top.
160 Theory: because we build leaves before trunk allocating at end
161 means that at run time access is cache friendly upward
163 PL_OpPtr += PERL_SLAB_SIZE;
165 #ifdef PERL_DEBUG_READONLY_OPS
166 /* We remember this slab. */
167 /* This implementation isn't efficient, but it is simple. */
168 PL_slabs = (I32**) realloc(PL_slabs, sizeof(I32**) * (PL_slab_count + 1));
169 PL_slabs[PL_slab_count++] = PL_OpSlab;
170 DEBUG_m(PerlIO_printf(Perl_debug_log, "Allocate %p\n", PL_OpSlab));
173 assert( PL_OpSpace >= 0 );
174 /* Move the allocation pointer down */
176 assert( PL_OpPtr > (I32 **) PL_OpSlab );
177 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
178 (*PL_OpSlab)++; /* Increment use count of slab */
179 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
180 assert( *PL_OpSlab > 0 );
181 return (void *)(PL_OpPtr + 1);
184 #ifdef PERL_DEBUG_READONLY_OPS
186 Perl_pending_Slabs_to_ro(pTHX) {
187 /* Turn all the allocated op slabs read only. */
188 U32 count = PL_slab_count;
189 I32 **const slabs = PL_slabs;
191 /* Reset the array of pending OP slabs, as we're about to turn this lot
192 read only. Also, do it ahead of the loop in case the warn triggers,
193 and a warn handler has an eval */
198 /* Force a new slab for any further allocation. */
202 void *const start = slabs[count];
203 const size_t size = PERL_SLAB_SIZE* sizeof(I32*);
204 if(mprotect(start, size, PROT_READ)) {
205 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d",
206 start, (unsigned long) size, errno);
214 S_Slab_to_rw(pTHX_ void *op)
216 I32 * const * const ptr = (I32 **) op;
217 I32 * const slab = ptr[-1];
219 PERL_ARGS_ASSERT_SLAB_TO_RW;
221 assert( ptr-1 > (I32 **) slab );
222 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
224 if(mprotect(slab, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE)) {
225 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d",
226 slab, (unsigned long) PERL_SLAB_SIZE*sizeof(I32*), errno);
231 Perl_op_refcnt_inc(pTHX_ OP *o)
242 Perl_op_refcnt_dec(pTHX_ OP *o)
244 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
249 # define Slab_to_rw(op)
253 Perl_Slab_Free(pTHX_ void *op)
255 I32 * const * const ptr = (I32 **) op;
256 I32 * const slab = ptr[-1];
257 PERL_ARGS_ASSERT_SLAB_FREE;
258 assert( ptr-1 > (I32 **) slab );
259 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
262 if (--(*slab) == 0) {
264 # define PerlMemShared PerlMem
267 #ifdef PERL_DEBUG_READONLY_OPS
268 U32 count = PL_slab_count;
269 /* Need to remove this slab from our list of slabs */
272 if (PL_slabs[count] == slab) {
274 /* Found it. Move the entry at the end to overwrite it. */
275 DEBUG_m(PerlIO_printf(Perl_debug_log,
276 "Deallocate %p by moving %p from %lu to %lu\n",
278 PL_slabs[PL_slab_count - 1],
279 PL_slab_count, count));
280 PL_slabs[count] = PL_slabs[--PL_slab_count];
281 /* Could realloc smaller at this point, but probably not
283 if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
284 perror("munmap failed");
292 PerlMemShared_free(slab);
294 if (slab == PL_OpSlab) {
301 * In the following definition, the ", (OP*)0" is just to make the compiler
302 * think the expression is of the right type: croak actually does a Siglongjmp.
304 #define CHECKOP(type,o) \
305 ((PL_op_mask && PL_op_mask[type]) \
306 ? ( op_free((OP*)o), \
307 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
309 : PL_check[type](aTHX_ (OP*)o))
311 #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
313 #define CHANGE_TYPE(o,type) \
315 o->op_type = (OPCODE)type; \
316 o->op_ppaddr = PL_ppaddr[type]; \
320 S_gv_ename(pTHX_ GV *gv)
322 SV* const tmpsv = sv_newmortal();
324 PERL_ARGS_ASSERT_GV_ENAME;
326 gv_efullname3(tmpsv, gv, NULL);
327 return SvPV_nolen_const(tmpsv);
331 S_no_fh_allowed(pTHX_ OP *o)
333 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
335 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
341 S_too_few_arguments(pTHX_ OP *o, const char *name)
343 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS;
345 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
350 S_too_many_arguments(pTHX_ OP *o, const char *name)
352 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS;
354 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
359 S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
361 PERL_ARGS_ASSERT_BAD_TYPE;
363 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
364 (int)n, name, t, OP_DESC(kid)));
368 S_no_bareword_allowed(pTHX_ OP *o)
370 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
373 return; /* various ok barewords are hidden in extra OP_NULL */
374 qerror(Perl_mess(aTHX_
375 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
377 o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */
380 /* "register" allocation */
383 Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
387 const bool is_our = (PL_parser->in_my == KEY_our);
389 PERL_ARGS_ASSERT_ALLOCMY;
391 if (flags & ~SVf_UTF8)
392 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
395 /* Until we're using the length for real, cross check that we're being
397 assert(strlen(name) == len);
399 /* complain about "my $<special_var>" etc etc */
403 ((flags & SVf_UTF8) && UTF8_IS_START(name[1])) ||
404 (name[1] == '_' && (*name == '$' || len > 2))))
406 /* name[2] is true if strlen(name) > 2 */
407 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
408 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
409 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
410 PL_parser->in_my == KEY_state ? "state" : "my"));
412 yyerror(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
413 PL_parser->in_my == KEY_state ? "state" : "my"));
417 /* allocate a spare slot and store the name in that slot */
419 off = pad_add_name_pvn(name, len,
420 (is_our ? padadd_OUR :
421 PL_parser->in_my == KEY_state ? padadd_STATE : 0)
422 | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 ),
423 PL_parser->in_my_stash,
425 /* $_ is always in main::, even with our */
426 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
430 /* anon sub prototypes contains state vars should always be cloned,
431 * otherwise the state var would be shared between anon subs */
433 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
434 CvCLONE_on(PL_compcv);
439 /* free the body of an op without examining its contents.
440 * Always use this rather than FreeOp directly */
443 S_op_destroy(pTHX_ OP *o)
445 if (o->op_latefree) {
453 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
455 # define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
461 Perl_op_free(pTHX_ OP *o)
468 if (o->op_latefreed) {
475 if (o->op_private & OPpREFCOUNTED) {
486 refcnt = OpREFCNT_dec(o);
489 /* Need to find and remove any pattern match ops from the list
490 we maintain for reset(). */
491 find_and_forget_pmops(o);
501 /* Call the op_free hook if it has been set. Do it now so that it's called
502 * at the right time for refcounted ops, but still before all of the kids
506 if (o->op_flags & OPf_KIDS) {
507 register OP *kid, *nextkid;
508 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
509 nextkid = kid->op_sibling; /* Get before next freeing kid */
514 #ifdef PERL_DEBUG_READONLY_OPS
518 /* COP* is not cleared by op_clear() so that we may track line
519 * numbers etc even after null() */
520 if (type == OP_NEXTSTATE || type == OP_DBSTATE
521 || (type == OP_NULL /* the COP might have been null'ed */
522 && ((OPCODE)o->op_targ == OP_NEXTSTATE
523 || (OPCODE)o->op_targ == OP_DBSTATE))) {
528 type = (OPCODE)o->op_targ;
531 if (o->op_latefree) {
537 #ifdef DEBUG_LEAKING_SCALARS
544 Perl_op_clear(pTHX_ OP *o)
549 PERL_ARGS_ASSERT_OP_CLEAR;
552 mad_free(o->op_madprop);
557 switch (o->op_type) {
558 case OP_NULL: /* Was holding old type, if any. */
559 if (PL_madskills && o->op_targ != OP_NULL) {
560 o->op_type = (Optype)o->op_targ;
565 case OP_ENTEREVAL: /* Was holding hints. */
569 if (!(o->op_flags & OPf_REF)
570 || (PL_check[o->op_type] != Perl_ck_ftst))
577 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
582 /* It's possible during global destruction that the GV is freed
583 before the optree. Whilst the SvREFCNT_inc is happy to bump from
584 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
585 will trigger an assertion failure, because the entry to sv_clear
586 checks that the scalar is not already freed. A check of for
587 !SvIS_FREED(gv) turns out to be invalid, because during global
588 destruction the reference count can be forced down to zero
589 (with SVf_BREAK set). In which case raising to 1 and then
590 dropping to 0 triggers cleanup before it should happen. I
591 *think* that this might actually be a general, systematic,
592 weakness of the whole idea of SVf_BREAK, in that code *is*
593 allowed to raise and lower references during global destruction,
594 so any *valid* code that happens to do this during global
595 destruction might well trigger premature cleanup. */
596 bool still_valid = gv && SvREFCNT(gv);
599 SvREFCNT_inc_simple_void(gv);
601 if (cPADOPo->op_padix > 0) {
602 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
603 * may still exist on the pad */
604 pad_swipe(cPADOPo->op_padix, TRUE);
605 cPADOPo->op_padix = 0;
608 SvREFCNT_dec(cSVOPo->op_sv);
609 cSVOPo->op_sv = NULL;
612 int try_downgrade = SvREFCNT(gv) == 2;
615 gv_try_downgrade(gv);
619 case OP_METHOD_NAMED:
622 SvREFCNT_dec(cSVOPo->op_sv);
623 cSVOPo->op_sv = NULL;
626 Even if op_clear does a pad_free for the target of the op,
627 pad_free doesn't actually remove the sv that exists in the pad;
628 instead it lives on. This results in that it could be reused as
629 a target later on when the pad was reallocated.
632 pad_swipe(o->op_targ,1);
641 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
646 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
648 if (cPADOPo->op_padix > 0) {
649 pad_swipe(cPADOPo->op_padix, TRUE);
650 cPADOPo->op_padix = 0;
653 SvREFCNT_dec(cSVOPo->op_sv);
654 cSVOPo->op_sv = NULL;
658 PerlMemShared_free(cPVOPo->op_pv);
659 cPVOPo->op_pv = NULL;
663 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
667 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
668 /* No GvIN_PAD_off here, because other references may still
669 * exist on the pad */
670 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
673 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
679 forget_pmop(cPMOPo, 1);
680 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
681 /* we use the same protection as the "SAFE" version of the PM_ macros
682 * here since sv_clean_all might release some PMOPs
683 * after PL_regex_padav has been cleared
684 * and the clearing of PL_regex_padav needs to
685 * happen before sv_clean_all
688 if(PL_regex_pad) { /* We could be in destruction */
689 const IV offset = (cPMOPo)->op_pmoffset;
690 ReREFCNT_dec(PM_GETRE(cPMOPo));
691 PL_regex_pad[offset] = &PL_sv_undef;
692 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
696 ReREFCNT_dec(PM_GETRE(cPMOPo));
697 PM_SETRE(cPMOPo, NULL);
703 if (o->op_targ > 0) {
704 pad_free(o->op_targ);
710 S_cop_free(pTHX_ COP* cop)
712 PERL_ARGS_ASSERT_COP_FREE;
716 if (! specialWARN(cop->cop_warnings))
717 PerlMemShared_free(cop->cop_warnings);
718 cophh_free(CopHINTHASH_get(cop));
722 S_forget_pmop(pTHX_ PMOP *const o
728 HV * const pmstash = PmopSTASH(o);
730 PERL_ARGS_ASSERT_FORGET_PMOP;
732 if (pmstash && !SvIS_FREED(pmstash)) {
733 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
735 PMOP **const array = (PMOP**) mg->mg_ptr;
736 U32 count = mg->mg_len / sizeof(PMOP**);
741 /* Found it. Move the entry at the end to overwrite it. */
742 array[i] = array[--count];
743 mg->mg_len = count * sizeof(PMOP**);
744 /* Could realloc smaller at this point always, but probably
745 not worth it. Probably worth free()ing if we're the
748 Safefree(mg->mg_ptr);
765 S_find_and_forget_pmops(pTHX_ OP *o)
767 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
769 if (o->op_flags & OPf_KIDS) {
770 OP *kid = cUNOPo->op_first;
772 switch (kid->op_type) {
777 forget_pmop((PMOP*)kid, 0);
779 find_and_forget_pmops(kid);
780 kid = kid->op_sibling;
786 Perl_op_null(pTHX_ OP *o)
790 PERL_ARGS_ASSERT_OP_NULL;
792 if (o->op_type == OP_NULL)
796 o->op_targ = o->op_type;
797 o->op_type = OP_NULL;
798 o->op_ppaddr = PL_ppaddr[OP_NULL];
802 Perl_op_refcnt_lock(pTHX)
810 Perl_op_refcnt_unlock(pTHX)
817 /* Contextualizers */
820 =for apidoc Am|OP *|op_contextualize|OP *o|I32 context
822 Applies a syntactic context to an op tree representing an expression.
823 I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
824 or C<G_VOID> to specify the context to apply. The modified op tree
831 Perl_op_contextualize(pTHX_ OP *o, I32 context)
833 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
835 case G_SCALAR: return scalar(o);
836 case G_ARRAY: return list(o);
837 case G_VOID: return scalarvoid(o);
839 Perl_croak(aTHX_ "panic: op_contextualize bad context");
845 =head1 Optree Manipulation Functions
847 =for apidoc Am|OP*|op_linklist|OP *o
848 This function is the implementation of the L</LINKLIST> macro. It should
849 not be called directly.
855 Perl_op_linklist(pTHX_ OP *o)
859 PERL_ARGS_ASSERT_OP_LINKLIST;
864 /* establish postfix order */
865 first = cUNOPo->op_first;
868 o->op_next = LINKLIST(first);
871 if (kid->op_sibling) {
872 kid->op_next = LINKLIST(kid->op_sibling);
873 kid = kid->op_sibling;
887 S_scalarkids(pTHX_ OP *o)
889 if (o && o->op_flags & OPf_KIDS) {
891 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
898 S_scalarboolean(pTHX_ OP *o)
902 PERL_ARGS_ASSERT_SCALARBOOLEAN;
904 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
905 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
906 if (ckWARN(WARN_SYNTAX)) {
907 const line_t oldline = CopLINE(PL_curcop);
909 if (PL_parser && PL_parser->copline != NOLINE)
910 CopLINE_set(PL_curcop, PL_parser->copline);
911 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
912 CopLINE_set(PL_curcop, oldline);
919 Perl_scalar(pTHX_ OP *o)
924 /* assumes no premature commitment */
925 if (!o || (PL_parser && PL_parser->error_count)
926 || (o->op_flags & OPf_WANT)
927 || o->op_type == OP_RETURN)
932 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
934 switch (o->op_type) {
936 scalar(cBINOPo->op_first);
941 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
951 if (o->op_flags & OPf_KIDS) {
952 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
958 kid = cLISTOPo->op_first;
960 kid = kid->op_sibling;
963 OP *sib = kid->op_sibling;
964 if (sib && kid->op_type != OP_LEAVEWHEN)
970 PL_curcop = &PL_compiling;
975 kid = cLISTOPo->op_first;
978 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
985 Perl_scalarvoid(pTHX_ OP *o)
989 const char* useless = NULL;
993 PERL_ARGS_ASSERT_SCALARVOID;
995 /* trailing mad null ops don't count as "there" for void processing */
997 o->op_type != OP_NULL &&
999 o->op_sibling->op_type == OP_NULL)
1002 for (sib = o->op_sibling;
1003 sib && sib->op_type == OP_NULL;
1004 sib = sib->op_sibling) ;
1010 if (o->op_type == OP_NEXTSTATE
1011 || o->op_type == OP_DBSTATE
1012 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1013 || o->op_targ == OP_DBSTATE)))
1014 PL_curcop = (COP*)o; /* for warning below */
1016 /* assumes no premature commitment */
1017 want = o->op_flags & OPf_WANT;
1018 if ((want && want != OPf_WANT_SCALAR)
1019 || (PL_parser && PL_parser->error_count)
1020 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1025 if ((o->op_private & OPpTARGET_MY)
1026 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1028 return scalar(o); /* As if inside SASSIGN */
1031 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1033 switch (o->op_type) {
1035 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1039 if (o->op_flags & OPf_STACKED)
1043 if (o->op_private == 4)
1068 case OP_AELEMFAST_LEX:
1087 case OP_GETSOCKNAME:
1088 case OP_GETPEERNAME:
1093 case OP_GETPRIORITY:
1117 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1118 /* Otherwise it's "Useless use of grep iterator" */
1119 useless = OP_DESC(o);
1123 kid = cLISTOPo->op_first;
1124 if (kid && kid->op_type == OP_PUSHRE
1126 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1128 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1130 useless = OP_DESC(o);
1134 kid = cUNOPo->op_first;
1135 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1136 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
1139 useless = "negative pattern binding (!~)";
1143 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1144 useless = "non-destructive substitution (s///r)";
1148 useless = "non-destructive transliteration (tr///r)";
1155 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1156 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1157 useless = "a variable";
1162 if (cSVOPo->op_private & OPpCONST_STRICT)
1163 no_bareword_allowed(o);
1165 if (ckWARN(WARN_VOID)) {
1167 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1168 "a constant (%"SVf")", sv));
1169 useless = SvPV_nolen(msv);
1172 useless = "a constant (undef)";
1173 if (o->op_private & OPpCONST_ARYBASE)
1175 /* don't warn on optimised away booleans, eg
1176 * use constant Foo, 5; Foo || print; */
1177 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1179 /* the constants 0 and 1 are permitted as they are
1180 conventionally used as dummies in constructs like
1181 1 while some_condition_with_side_effects; */
1182 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1184 else if (SvPOK(sv)) {
1185 /* perl4's way of mixing documentation and code
1186 (before the invention of POD) was based on a
1187 trick to mix nroff and perl code. The trick was
1188 built upon these three nroff macros being used in
1189 void context. The pink camel has the details in
1190 the script wrapman near page 319. */
1191 const char * const maybe_macro = SvPVX_const(sv);
1192 if (strnEQ(maybe_macro, "di", 2) ||
1193 strnEQ(maybe_macro, "ds", 2) ||
1194 strnEQ(maybe_macro, "ig", 2))
1199 op_null(o); /* don't execute or even remember it */
1203 o->op_type = OP_PREINC; /* pre-increment is faster */
1204 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1208 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1209 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1213 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1214 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1218 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1219 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1224 UNOP *refgen, *rv2cv;
1227 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
1230 rv2gv = ((BINOP *)o)->op_last;
1231 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
1234 refgen = (UNOP *)((BINOP *)o)->op_first;
1236 if (!refgen || refgen->op_type != OP_REFGEN)
1239 exlist = (LISTOP *)refgen->op_first;
1240 if (!exlist || exlist->op_type != OP_NULL
1241 || exlist->op_targ != OP_LIST)
1244 if (exlist->op_first->op_type != OP_PUSHMARK)
1247 rv2cv = (UNOP*)exlist->op_last;
1249 if (rv2cv->op_type != OP_RV2CV)
1252 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
1253 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
1254 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
1256 o->op_private |= OPpASSIGN_CV_TO_GV;
1257 rv2gv->op_private |= OPpDONT_INIT_GV;
1258 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
1270 kid = cLOGOPo->op_first;
1271 if (kid->op_type == OP_NOT
1272 && (kid->op_flags & OPf_KIDS)
1274 if (o->op_type == OP_AND) {
1276 o->op_ppaddr = PL_ppaddr[OP_OR];
1278 o->op_type = OP_AND;
1279 o->op_ppaddr = PL_ppaddr[OP_AND];
1288 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1293 if (o->op_flags & OPf_STACKED)
1300 if (!(o->op_flags & OPf_KIDS))
1311 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1321 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1326 S_listkids(pTHX_ OP *o)
1328 if (o && o->op_flags & OPf_KIDS) {
1330 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1337 Perl_list(pTHX_ OP *o)
1342 /* assumes no premature commitment */
1343 if (!o || (o->op_flags & OPf_WANT)
1344 || (PL_parser && PL_parser->error_count)
1345 || o->op_type == OP_RETURN)
1350 if ((o->op_private & OPpTARGET_MY)
1351 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1353 return o; /* As if inside SASSIGN */
1356 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1358 switch (o->op_type) {
1361 list(cBINOPo->op_first);
1366 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1374 if (!(o->op_flags & OPf_KIDS))
1376 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1377 list(cBINOPo->op_first);
1378 return gen_constant_list(o);
1385 kid = cLISTOPo->op_first;
1387 kid = kid->op_sibling;
1390 OP *sib = kid->op_sibling;
1391 if (sib && kid->op_type != OP_LEAVEWHEN)
1397 PL_curcop = &PL_compiling;
1401 kid = cLISTOPo->op_first;
1408 S_scalarseq(pTHX_ OP *o)
1412 const OPCODE type = o->op_type;
1414 if (type == OP_LINESEQ || type == OP_SCOPE ||
1415 type == OP_LEAVE || type == OP_LEAVETRY)
1418 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1419 if (kid->op_sibling) {
1423 PL_curcop = &PL_compiling;
1425 o->op_flags &= ~OPf_PARENS;
1426 if (PL_hints & HINT_BLOCK_SCOPE)
1427 o->op_flags |= OPf_PARENS;
1430 o = newOP(OP_STUB, 0);
1435 S_modkids(pTHX_ OP *o, I32 type)
1437 if (o && o->op_flags & OPf_KIDS) {
1439 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1440 op_lvalue(kid, type);
1446 =for apidoc finalize_optree
1448 This function finalizes the optree. Should be called directly after
1449 the complete optree is built. It does some additional
1450 checking which can't be done in the normal ck_xxx functions and makes
1451 the tree thread-safe.
1456 Perl_finalize_optree(pTHX_ OP* o)
1458 PERL_ARGS_ASSERT_FINALIZE_OPTREE;
1461 SAVEVPTR(PL_curcop);
1469 S_finalize_op(pTHX_ OP* o)
1471 PERL_ARGS_ASSERT_FINALIZE_OP;
1473 #if defined(PERL_MAD) && defined(USE_ITHREADS)
1475 /* Make sure mad ops are also thread-safe */
1476 MADPROP *mp = o->op_madprop;
1478 if (mp->mad_type == MAD_OP && mp->mad_vlen) {
1479 OP *prop_op = (OP *) mp->mad_val;
1480 /* We only need "Relocate sv to the pad for thread safety.", but this
1481 easiest way to make sure it traverses everything */
1482 if (prop_op->op_type == OP_CONST)
1483 cSVOPx(prop_op)->op_private &= ~OPpCONST_STRICT;
1484 finalize_op(prop_op);
1491 switch (o->op_type) {
1494 PL_curcop = ((COP*)o); /* for warnings */
1498 && (o->op_sibling->op_type == OP_NEXTSTATE || o->op_sibling->op_type == OP_DBSTATE)
1499 && ckWARN(WARN_SYNTAX))
1501 if (o->op_sibling->op_sibling) {
1502 const OPCODE type = o->op_sibling->op_sibling->op_type;
1503 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
1504 const line_t oldline = CopLINE(PL_curcop);
1505 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_sibling));
1506 Perl_warner(aTHX_ packWARN(WARN_EXEC),
1507 "Statement unlikely to be reached");
1508 Perl_warner(aTHX_ packWARN(WARN_EXEC),
1509 "\t(Maybe you meant system() when you said exec()?)\n");
1510 CopLINE_set(PL_curcop, oldline);
1517 if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
1518 GV * const gv = cGVOPo_gv;
1519 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
1520 /* XXX could check prototype here instead of just carping */
1521 SV * const sv = sv_newmortal();
1522 gv_efullname3(sv, gv, NULL);
1523 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
1524 "%"SVf"() called too early to check prototype",
1531 if (cSVOPo->op_private & OPpCONST_STRICT)
1532 no_bareword_allowed(o);
1536 case OP_METHOD_NAMED:
1537 /* Relocate sv to the pad for thread safety.
1538 * Despite being a "constant", the SV is written to,
1539 * for reference counts, sv_upgrade() etc. */
1540 if (cSVOPo->op_sv) {
1541 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
1542 if (o->op_type != OP_METHOD_NAMED &&
1543 (SvPADTMP(cSVOPo->op_sv) || SvPADMY(cSVOPo->op_sv)))
1545 /* If op_sv is already a PADTMP/MY then it is being used by
1546 * some pad, so make a copy. */
1547 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
1548 SvREADONLY_on(PAD_SVl(ix));
1549 SvREFCNT_dec(cSVOPo->op_sv);
1551 else if (o->op_type != OP_METHOD_NAMED
1552 && cSVOPo->op_sv == &PL_sv_undef) {
1553 /* PL_sv_undef is hack - it's unsafe to store it in the
1554 AV that is the pad, because av_fetch treats values of
1555 PL_sv_undef as a "free" AV entry and will merrily
1556 replace them with a new SV, causing pad_alloc to think
1557 that this pad slot is free. (When, clearly, it is not)
1559 SvOK_off(PAD_SVl(ix));
1560 SvPADTMP_on(PAD_SVl(ix));
1561 SvREADONLY_on(PAD_SVl(ix));
1564 SvREFCNT_dec(PAD_SVl(ix));
1565 SvPADTMP_on(cSVOPo->op_sv);
1566 PAD_SETSV(ix, cSVOPo->op_sv);
1567 /* XXX I don't know how this isn't readonly already. */
1568 SvREADONLY_on(PAD_SVl(ix));
1570 cSVOPo->op_sv = NULL;
1581 const char *key = NULL;
1584 if (((BINOP*)o)->op_last->op_type != OP_CONST)
1587 /* Make the CONST have a shared SV */
1588 svp = cSVOPx_svp(((BINOP*)o)->op_last);
1589 if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv))
1590 && SvTYPE(sv) < SVt_PVMG && !SvROK(sv)) {
1591 key = SvPV_const(sv, keylen);
1592 lexname = newSVpvn_share(key,
1593 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
1599 if ((o->op_private & (OPpLVAL_INTRO)))
1602 rop = (UNOP*)((BINOP*)o)->op_first;
1603 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
1605 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
1606 if (!SvPAD_TYPED(lexname))
1608 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
1609 if (!fields || !GvHV(*fields))
1611 key = SvPV_const(*svp, keylen);
1612 if (!hv_fetch(GvHV(*fields), key,
1613 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE)) {
1614 Perl_croak(aTHX_ "No such class field \"%s\" "
1615 "in variable %s of type %s",
1616 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
1628 SVOP *first_key_op, *key_op;
1630 if ((o->op_private & (OPpLVAL_INTRO))
1631 /* I bet there's always a pushmark... */
1632 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
1633 /* hmmm, no optimization if list contains only one key. */
1635 rop = (UNOP*)((LISTOP*)o)->op_last;
1636 if (rop->op_type != OP_RV2HV)
1638 if (rop->op_first->op_type == OP_PADSV)
1639 /* @$hash{qw(keys here)} */
1640 rop = (UNOP*)rop->op_first;
1642 /* @{$hash}{qw(keys here)} */
1643 if (rop->op_first->op_type == OP_SCOPE
1644 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
1646 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
1652 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
1653 if (!SvPAD_TYPED(lexname))
1655 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
1656 if (!fields || !GvHV(*fields))
1658 /* Again guessing that the pushmark can be jumped over.... */
1659 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
1660 ->op_first->op_sibling;
1661 for (key_op = first_key_op; key_op;
1662 key_op = (SVOP*)key_op->op_sibling) {
1663 if (key_op->op_type != OP_CONST)
1665 svp = cSVOPx_svp(key_op);
1666 key = SvPV_const(*svp, keylen);
1667 if (!hv_fetch(GvHV(*fields), key,
1668 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE)) {
1669 Perl_croak(aTHX_ "No such class field \"%s\" "
1670 "in variable %s of type %s",
1671 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
1677 if (cPMOPo->op_pmreplrootu.op_pmreplroot)
1678 finalize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
1685 if (o->op_flags & OPf_KIDS) {
1687 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
1693 =for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
1695 Propagate lvalue ("modifiable") context to an op and its children.
1696 I<type> represents the context type, roughly based on the type of op that
1697 would do the modifying, although C<local()> is represented by OP_NULL,
1698 because it has no op type of its own (it is signalled by a flag on
1701 This function detects things that can't be modified, such as C<$x+1>, and
1702 generates errors for them. For example, C<$x+1 = 2> would cause it to be
1703 called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
1705 It also flags things that need to behave specially in an lvalue context,
1706 such as C<$$x = 5> which might have to vivify a reference in C<$x>.
1712 Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
1716 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1719 if (!o || (PL_parser && PL_parser->error_count))
1722 if ((o->op_private & OPpTARGET_MY)
1723 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1728 assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
1730 switch (o->op_type) {
1736 if (!(o->op_private & OPpCONST_ARYBASE))
1739 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1740 CopARYBASE_set(&PL_compiling,
1741 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1745 SAVECOPARYBASE(&PL_compiling);
1746 CopARYBASE_set(&PL_compiling, 0);
1748 else if (type == OP_REFGEN)
1751 Perl_croak(aTHX_ "That use of $[ is unsupported");
1754 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1758 if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
1759 !(o->op_flags & OPf_STACKED)) {
1760 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1761 /* Both ENTERSUB and RV2CV use this bit, but for different pur-
1762 poses, so we need it clear. */
1763 o->op_private &= ~1;
1764 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1765 assert(cUNOPo->op_first->op_type == OP_NULL);
1766 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1769 else { /* lvalue subroutine call */
1770 o->op_private |= OPpLVAL_INTRO
1771 |(OPpENTERSUB_INARGS * (type == OP_LEAVESUBLV));
1772 PL_modcount = RETURN_UNLIMITED_NUMBER;
1773 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1774 /* Backward compatibility mode: */
1775 o->op_private |= OPpENTERSUB_INARGS;
1778 else { /* Compile-time error message: */
1779 OP *kid = cUNOPo->op_first;
1783 if (kid->op_type != OP_PUSHMARK) {
1784 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1786 "panic: unexpected lvalue entersub "
1787 "args: type/targ %ld:%"UVuf,
1788 (long)kid->op_type, (UV)kid->op_targ);
1789 kid = kLISTOP->op_first;
1791 while (kid->op_sibling)
1792 kid = kid->op_sibling;
1793 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1795 if (kid->op_type == OP_METHOD_NAMED
1796 || kid->op_type == OP_METHOD)
1800 NewOp(1101, newop, 1, UNOP);
1801 newop->op_type = OP_RV2CV;
1802 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1803 newop->op_first = NULL;
1804 newop->op_next = (OP*)newop;
1805 kid->op_sibling = (OP*)newop;
1806 newop->op_private |= OPpLVAL_INTRO;
1807 newop->op_private &= ~1;
1811 if (kid->op_type != OP_RV2CV)
1813 "panic: unexpected lvalue entersub "
1814 "entry via type/targ %ld:%"UVuf,
1815 (long)kid->op_type, (UV)kid->op_targ);
1816 kid->op_private |= OPpLVAL_INTRO;
1817 break; /* Postpone until runtime */
1821 kid = kUNOP->op_first;
1822 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1823 kid = kUNOP->op_first;
1824 if (kid->op_type == OP_NULL)
1826 "Unexpected constant lvalue entersub "
1827 "entry via type/targ %ld:%"UVuf,
1828 (long)kid->op_type, (UV)kid->op_targ);
1829 if (kid->op_type != OP_GV) {
1830 /* Restore RV2CV to check lvalueness */
1832 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1833 okid->op_next = kid->op_next;
1834 kid->op_next = okid;
1837 okid->op_next = NULL;
1838 okid->op_type = OP_RV2CV;
1840 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1841 okid->op_private |= OPpLVAL_INTRO;
1842 okid->op_private &= ~1;
1846 cv = GvCV(kGVOP_gv);
1856 if (flags & OP_LVALUE_NO_CROAK) return NULL;
1857 /* grep, foreach, subcalls, refgen */
1858 if (type == OP_GREPSTART || type == OP_ENTERSUB
1859 || type == OP_REFGEN || type == OP_LEAVESUBLV)
1861 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1862 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1864 : (o->op_type == OP_ENTERSUB
1865 ? "non-lvalue subroutine call"
1867 type ? PL_op_desc[type] : "local"));
1881 case OP_RIGHT_SHIFT:
1890 if (!(o->op_flags & OPf_STACKED))
1897 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1898 op_lvalue(kid, type);
1903 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1904 PL_modcount = RETURN_UNLIMITED_NUMBER;
1905 return o; /* Treat \(@foo) like ordinary list. */
1909 if (scalar_mod_type(o, type))
1911 ref(cUNOPo->op_first, o->op_type);
1915 if (type == OP_LEAVESUBLV)
1916 o->op_private |= OPpMAYBE_LVSUB;
1922 PL_modcount = RETURN_UNLIMITED_NUMBER;
1925 PL_hints |= HINT_BLOCK_SCOPE;
1926 if (type == OP_LEAVESUBLV)
1927 o->op_private |= OPpMAYBE_LVSUB;
1931 ref(cUNOPo->op_first, o->op_type);
1935 PL_hints |= HINT_BLOCK_SCOPE;
1944 case OP_AELEMFAST_LEX:
1951 PL_modcount = RETURN_UNLIMITED_NUMBER;
1952 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1953 return o; /* Treat \(@foo) like ordinary list. */
1954 if (scalar_mod_type(o, type))
1956 if (type == OP_LEAVESUBLV)
1957 o->op_private |= OPpMAYBE_LVSUB;
1961 if (!type) /* local() */
1962 Perl_croak(aTHX_ "Can't localize lexical variable %"SVf,
1963 PAD_COMPNAME_SV(o->op_targ));
1972 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
1976 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1982 if (type == OP_LEAVESUBLV)
1983 o->op_private |= OPpMAYBE_LVSUB;
1984 pad_free(o->op_targ);
1985 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1986 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1987 if (o->op_flags & OPf_KIDS)
1988 op_lvalue(cBINOPo->op_first->op_sibling, type);
1993 ref(cBINOPo->op_first, o->op_type);
1994 if (type == OP_ENTERSUB &&
1995 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1996 o->op_private |= OPpLVAL_DEFER;
1997 if (type == OP_LEAVESUBLV)
1998 o->op_private |= OPpMAYBE_LVSUB;
2008 if (o->op_flags & OPf_KIDS)
2009 op_lvalue(cLISTOPo->op_last, type);
2014 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
2016 else if (!(o->op_flags & OPf_KIDS))
2018 if (o->op_targ != OP_LIST) {
2019 op_lvalue(cBINOPo->op_first, type);
2025 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2026 /* elements might be in void context because the list is
2027 in scalar context or because they are attribute sub calls */
2028 if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
2029 op_lvalue(kid, type);
2033 if (type != OP_LEAVESUBLV)
2035 break; /* op_lvalue()ing was handled by ck_return() */
2038 /* [20011101.069] File test operators interpret OPf_REF to mean that
2039 their argument is a filehandle; thus \stat(".") should not set
2041 if (type == OP_REFGEN &&
2042 PL_check[o->op_type] == Perl_ck_ftst)
2045 if (type != OP_LEAVESUBLV)
2046 o->op_flags |= OPf_MOD;
2048 if (type == OP_AASSIGN || type == OP_SASSIGN)
2049 o->op_flags |= OPf_SPECIAL|OPf_REF;
2050 else if (!type) { /* local() */
2053 o->op_private |= OPpLVAL_INTRO;
2054 o->op_flags &= ~OPf_SPECIAL;
2055 PL_hints |= HINT_BLOCK_SCOPE;
2060 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
2061 "Useless localization of %s", OP_DESC(o));
2064 else if (type != OP_GREPSTART && type != OP_ENTERSUB
2065 && type != OP_LEAVESUBLV)
2066 o->op_flags |= OPf_REF;
2071 S_scalar_mod_type(const OP *o, I32 type)
2073 assert(o || type != OP_SASSIGN);
2077 if (o->op_type == OP_RV2GV)
2101 case OP_RIGHT_SHIFT:
2122 S_is_handle_constructor(const OP *o, I32 numargs)
2124 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
2126 switch (o->op_type) {
2134 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
2147 S_refkids(pTHX_ OP *o, I32 type)
2149 if (o && o->op_flags & OPf_KIDS) {
2151 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2158 Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
2163 PERL_ARGS_ASSERT_DOREF;
2165 if (!o || (PL_parser && PL_parser->error_count))
2168 switch (o->op_type) {
2170 if ((type == OP_EXISTS || type == OP_DEFINED) &&
2171 !(o->op_flags & OPf_STACKED)) {
2172 o->op_type = OP_RV2CV; /* entersub => rv2cv */
2173 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
2174 assert(cUNOPo->op_first->op_type == OP_NULL);
2175 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
2176 o->op_flags |= OPf_SPECIAL;
2177 o->op_private &= ~1;
2179 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
2180 o->op_private |= OPpENTERSUB_DEREF;
2181 o->op_flags |= OPf_MOD;
2187 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
2188 doref(kid, type, set_op_ref);
2191 if (type == OP_DEFINED)
2192 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2193 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2196 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2197 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2198 : type == OP_RV2HV ? OPpDEREF_HV
2200 o->op_flags |= OPf_MOD;
2207 o->op_flags |= OPf_REF;
2210 if (type == OP_DEFINED)
2211 o->op_flags |= OPf_SPECIAL; /* don't create GV */
2212 doref(cUNOPo->op_first, o->op_type, set_op_ref);
2218 o->op_flags |= OPf_REF;
2223 if (!(o->op_flags & OPf_KIDS))
2225 doref(cBINOPo->op_first, type, set_op_ref);
2229 doref(cBINOPo->op_first, o->op_type, set_op_ref);
2230 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
2231 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
2232 : type == OP_RV2HV ? OPpDEREF_HV
2234 o->op_flags |= OPf_MOD;
2244 if (!(o->op_flags & OPf_KIDS))
2246 doref(cLISTOPo->op_last, type, set_op_ref);
2256 S_dup_attrlist(pTHX_ OP *o)
2261 PERL_ARGS_ASSERT_DUP_ATTRLIST;
2263 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
2264 * where the first kid is OP_PUSHMARK and the remaining ones
2265 * are OP_CONST. We need to push the OP_CONST values.
2267 if (o->op_type == OP_CONST)
2268 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
2270 else if (o->op_type == OP_NULL)
2274 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
2276 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
2277 if (o->op_type == OP_CONST)
2278 rop = op_append_elem(OP_LIST, rop,
2279 newSVOP(OP_CONST, o->op_flags,
2280 SvREFCNT_inc_NN(cSVOPo->op_sv)));
2287 S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
2292 PERL_ARGS_ASSERT_APPLY_ATTRS;
2294 /* fake up C<use attributes $pkg,$rv,@attrs> */
2295 ENTER; /* need to protect against side-effects of 'use' */
2296 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2298 #define ATTRSMODULE "attributes"
2299 #define ATTRSMODULE_PM "attributes.pm"
2302 /* Don't force the C<use> if we don't need it. */
2303 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
2304 if (svp && *svp != &PL_sv_undef)
2305 NOOP; /* already in %INC */
2307 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
2308 newSVpvs(ATTRSMODULE), NULL);
2311 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2312 newSVpvs(ATTRSMODULE),
2314 op_prepend_elem(OP_LIST,
2315 newSVOP(OP_CONST, 0, stashsv),
2316 op_prepend_elem(OP_LIST,
2317 newSVOP(OP_CONST, 0,
2319 dup_attrlist(attrs))));
2325 S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
2328 OP *pack, *imop, *arg;
2331 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
2336 assert(target->op_type == OP_PADSV ||
2337 target->op_type == OP_PADHV ||
2338 target->op_type == OP_PADAV);
2340 /* Ensure that attributes.pm is loaded. */
2341 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
2343 /* Need package name for method call. */
2344 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
2346 /* Build up the real arg-list. */
2347 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2349 arg = newOP(OP_PADSV, 0);
2350 arg->op_targ = target->op_targ;
2351 arg = op_prepend_elem(OP_LIST,
2352 newSVOP(OP_CONST, 0, stashsv),
2353 op_prepend_elem(OP_LIST,
2354 newUNOP(OP_REFGEN, 0,
2355 op_lvalue(arg, OP_REFGEN)),
2356 dup_attrlist(attrs)));
2358 /* Fake up a method call to import */
2359 meth = newSVpvs_share("import");
2360 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2361 op_append_elem(OP_LIST,
2362 op_prepend_elem(OP_LIST, pack, list(arg)),
2363 newSVOP(OP_METHOD_NAMED, 0, meth)));
2365 /* Combine the ops. */
2366 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
2370 =notfor apidoc apply_attrs_string
2372 Attempts to apply a list of attributes specified by the C<attrstr> and
2373 C<len> arguments to the subroutine identified by the C<cv> argument which
2374 is expected to be associated with the package identified by the C<stashpv>
2375 argument (see L<attributes>). It gets this wrong, though, in that it
2376 does not correctly identify the boundaries of the individual attribute
2377 specifications within C<attrstr>. This is not really intended for the
2378 public API, but has to be listed here for systems such as AIX which
2379 need an explicit export list for symbols. (It's called from XS code
2380 in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2381 to respect attribute syntax properly would be welcome.
2387 Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2388 const char *attrstr, STRLEN len)
2392 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2395 len = strlen(attrstr);
2399 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2401 const char * const sstr = attrstr;
2402 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2403 attrs = op_append_elem(OP_LIST, attrs,
2404 newSVOP(OP_CONST, 0,
2405 newSVpvn(sstr, attrstr-sstr)));
2409 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2410 newSVpvs(ATTRSMODULE),
2411 NULL, op_prepend_elem(OP_LIST,
2412 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2413 op_prepend_elem(OP_LIST,
2414 newSVOP(OP_CONST, 0,
2415 newRV(MUTABLE_SV(cv))),
2420 S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2424 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
2426 PERL_ARGS_ASSERT_MY_KID;
2428 if (!o || (PL_parser && PL_parser->error_count))
2432 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2433 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2437 if (type == OP_LIST) {
2439 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2440 my_kid(kid, attrs, imopsp);
2441 } else if (type == OP_UNDEF
2447 } else if (type == OP_RV2SV || /* "our" declaration */
2449 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2450 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2451 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2453 PL_parser->in_my == KEY_our
2455 : PL_parser->in_my == KEY_state ? "state" : "my"));
2457 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
2458 PL_parser->in_my = FALSE;
2459 PL_parser->in_my_stash = NULL;
2460 apply_attrs(GvSTASH(gv),
2461 (type == OP_RV2SV ? GvSV(gv) :
2462 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2463 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
2466 o->op_private |= OPpOUR_INTRO;
2469 else if (type != OP_PADSV &&
2472 type != OP_PUSHMARK)
2474 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2476 PL_parser->in_my == KEY_our
2478 : PL_parser->in_my == KEY_state ? "state" : "my"));
2481 else if (attrs && type != OP_PUSHMARK) {
2484 PL_parser->in_my = FALSE;
2485 PL_parser->in_my_stash = NULL;
2487 /* check for C<my Dog $spot> when deciding package */
2488 stash = PAD_COMPNAME_TYPE(o->op_targ);
2490 stash = PL_curstash;
2491 apply_attrs_my(stash, o, attrs, imopsp);
2493 o->op_flags |= OPf_MOD;
2494 o->op_private |= OPpLVAL_INTRO;
2496 o->op_private |= OPpPAD_STATE;
2501 Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2505 int maybe_scalar = 0;
2507 PERL_ARGS_ASSERT_MY_ATTRS;
2509 /* [perl #17376]: this appears to be premature, and results in code such as
2510 C< our(%x); > executing in list mode rather than void mode */
2512 if (o->op_flags & OPf_PARENS)
2522 o = my_kid(o, attrs, &rops);
2524 if (maybe_scalar && o->op_type == OP_PADSV) {
2525 o = scalar(op_append_list(OP_LIST, rops, o));
2526 o->op_private |= OPpLVAL_INTRO;
2529 /* The listop in rops might have a pushmark at the beginning,
2530 which will mess up list assignment. */
2531 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
2532 if (rops->op_type == OP_LIST &&
2533 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
2535 OP * const pushmark = lrops->op_first;
2536 lrops->op_first = pushmark->op_sibling;
2539 o = op_append_list(OP_LIST, o, rops);
2542 PL_parser->in_my = FALSE;
2543 PL_parser->in_my_stash = NULL;
2548 Perl_sawparens(pTHX_ OP *o)
2550 PERL_UNUSED_CONTEXT;
2552 o->op_flags |= OPf_PARENS;
2557 Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2561 const OPCODE ltype = left->op_type;
2562 const OPCODE rtype = right->op_type;
2564 PERL_ARGS_ASSERT_BIND_MATCH;
2566 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2567 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2569 const char * const desc
2571 rtype == OP_SUBST || rtype == OP_TRANS
2572 || rtype == OP_TRANSR
2574 ? (int)rtype : OP_MATCH];
2575 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2576 ? "@array" : "%hash");
2577 Perl_warner(aTHX_ packWARN(WARN_MISC),
2578 "Applying %s to %s will act on scalar(%s)",
2579 desc, sample, sample);
2582 if (rtype == OP_CONST &&
2583 cSVOPx(right)->op_private & OPpCONST_BARE &&
2584 cSVOPx(right)->op_private & OPpCONST_STRICT)
2586 no_bareword_allowed(right);
2589 /* !~ doesn't make sense with /r, so error on it for now */
2590 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
2592 yyerror("Using !~ with s///r doesn't make sense");
2593 if (rtype == OP_TRANSR && type == OP_NOT)
2594 yyerror("Using !~ with tr///r doesn't make sense");
2596 ismatchop = (rtype == OP_MATCH ||
2597 rtype == OP_SUBST ||
2598 rtype == OP_TRANS || rtype == OP_TRANSR)
2599 && !(right->op_flags & OPf_SPECIAL);
2600 if (ismatchop && right->op_private & OPpTARGET_MY) {
2602 right->op_private &= ~OPpTARGET_MY;
2604 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2607 right->op_flags |= OPf_STACKED;
2608 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
2609 ! (rtype == OP_TRANS &&
2610 right->op_private & OPpTRANS_IDENTICAL) &&
2611 ! (rtype == OP_SUBST &&
2612 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
2613 newleft = op_lvalue(left, rtype);
2616 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
2617 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2619 o = op_prepend_elem(rtype, scalar(newleft), right);
2621 return newUNOP(OP_NOT, 0, scalar(o));
2625 return bind_match(type, left,
2626 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2630 Perl_invert(pTHX_ OP *o)
2634 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2638 =for apidoc Amx|OP *|op_scope|OP *o
2640 Wraps up an op tree with some additional ops so that at runtime a dynamic
2641 scope will be created. The original ops run in the new dynamic scope,
2642 and then, provided that they exit normally, the scope will be unwound.
2643 The additional ops used to create and unwind the dynamic scope will
2644 normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
2645 instead if the ops are simple enough to not need the full dynamic scope
2652 Perl_op_scope(pTHX_ OP *o)
2656 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2657 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2658 o->op_type = OP_LEAVE;
2659 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2661 else if (o->op_type == OP_LINESEQ) {
2663 o->op_type = OP_SCOPE;
2664 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2665 kid = ((LISTOP*)o)->op_first;
2666 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2669 /* The following deals with things like 'do {1 for 1}' */
2670 kid = kid->op_sibling;
2672 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2677 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2683 Perl_block_start(pTHX_ int full)
2686 const int retval = PL_savestack_ix;
2688 pad_block_start(full);
2690 PL_hints &= ~HINT_BLOCK_SCOPE;
2691 SAVECOMPILEWARNINGS();
2692 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2694 CALL_BLOCK_HOOKS(bhk_start, full);
2700 Perl_block_end(pTHX_ I32 floor, OP *seq)
2703 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2704 OP* retval = scalarseq(seq);
2706 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
2709 CopHINTS_set(&PL_compiling, PL_hints);
2711 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2714 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
2720 =head1 Compile-time scope hooks
2722 =for apidoc Aox||blockhook_register
2724 Register a set of hooks to be called when the Perl lexical scope changes
2725 at compile time. See L<perlguts/"Compile-time scope hooks">.
2731 Perl_blockhook_register(pTHX_ BHK *hk)
2733 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
2735 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
2742 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
2743 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2744 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2747 OP * const o = newOP(OP_PADSV, 0);
2748 o->op_targ = offset;
2754 Perl_newPROG(pTHX_ OP *o)
2758 PERL_ARGS_ASSERT_NEWPROG;
2764 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2765 ((PL_in_eval & EVAL_KEEPERR)
2766 ? OPf_SPECIAL : 0), o);
2768 cx = &cxstack[cxstack_ix];
2769 assert(CxTYPE(cx) == CXt_EVAL);
2771 if ((cx->blk_gimme & G_WANT) == G_VOID)
2772 scalarvoid(PL_eval_root);
2773 else if ((cx->blk_gimme & G_WANT) == G_ARRAY)
2776 scalar(PL_eval_root);
2778 /* don't use LINKLIST, since PL_eval_root might indirect through
2779 * a rather expensive function call and LINKLIST evaluates its
2780 * argument more than once */
2781 PL_eval_start = op_linklist(PL_eval_root);
2782 PL_eval_root->op_private |= OPpREFCOUNTED;
2783 OpREFCNT_set(PL_eval_root, 1);
2784 PL_eval_root->op_next = 0;
2785 CALL_PEEP(PL_eval_start);
2786 finalize_optree(PL_eval_root);
2790 if (o->op_type == OP_STUB) {
2791 PL_comppad_name = 0;
2793 S_op_destroy(aTHX_ o);
2796 PL_main_root = op_scope(sawparens(scalarvoid(o)));
2797 PL_curcop = &PL_compiling;
2798 PL_main_start = LINKLIST(PL_main_root);
2799 PL_main_root->op_private |= OPpREFCOUNTED;
2800 OpREFCNT_set(PL_main_root, 1);
2801 PL_main_root->op_next = 0;
2802 CALL_PEEP(PL_main_start);
2803 finalize_optree(PL_main_root);
2806 /* Register with debugger */
2808 CV * const cv = get_cvs("DB::postponed", 0);
2812 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2814 call_sv(MUTABLE_SV(cv), G_DISCARD);
2821 Perl_localize(pTHX_ OP *o, I32 lex)
2825 PERL_ARGS_ASSERT_LOCALIZE;
2827 if (o->op_flags & OPf_PARENS)
2828 /* [perl #17376]: this appears to be premature, and results in code such as
2829 C< our(%x); > executing in list mode rather than void mode */
2836 if ( PL_parser->bufptr > PL_parser->oldbufptr
2837 && PL_parser->bufptr[-1] == ','
2838 && ckWARN(WARN_PARENTHESIS))
2840 char *s = PL_parser->bufptr;
2843 /* some heuristics to detect a potential error */
2844 while (*s && (strchr(", \t\n", *s)))
2848 if (*s && strchr("@$%*", *s) && *++s
2849 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2852 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2854 while (*s && (strchr(", \t\n", *s)))
2860 if (sigil && (*s == ';' || *s == '=')) {
2861 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2862 "Parentheses missing around \"%s\" list",
2864 ? (PL_parser->in_my == KEY_our
2866 : PL_parser->in_my == KEY_state
2876 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
2877 PL_parser->in_my = FALSE;
2878 PL_parser->in_my_stash = NULL;
2883 Perl_jmaybe(pTHX_ OP *o)
2885 PERL_ARGS_ASSERT_JMAYBE;
2887 if (o->op_type == OP_LIST) {
2889 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2890 o = convert(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
2896 S_fold_constants(pTHX_ register OP *o)
2899 register OP * VOL curop;
2901 VOL I32 type = o->op_type;
2906 SV * const oldwarnhook = PL_warnhook;
2907 SV * const olddiehook = PL_diehook;
2911 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
2913 if (PL_opargs[type] & OA_RETSCALAR)
2915 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2916 o->op_targ = pad_alloc(type, SVs_PADTMP);
2918 /* integerize op, unless it happens to be C<-foo>.
2919 * XXX should pp_i_negate() do magic string negation instead? */
2920 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2921 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2922 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2924 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2927 if (!(PL_opargs[type] & OA_FOLDCONST))
2932 /* XXX might want a ck_negate() for this */
2933 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2945 /* XXX what about the numeric ops? */
2946 if (PL_hints & HINT_LOCALE)
2951 if (PL_parser && PL_parser->error_count)
2952 goto nope; /* Don't try to run w/ errors */
2954 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2955 const OPCODE type = curop->op_type;
2956 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2958 type != OP_SCALAR &&
2960 type != OP_PUSHMARK)
2966 curop = LINKLIST(o);
2967 old_next = o->op_next;
2971 oldscope = PL_scopestack_ix;
2972 create_eval_scope(G_FAKINGEVAL);
2974 /* Verify that we don't need to save it: */
2975 assert(PL_curcop == &PL_compiling);
2976 StructCopy(&PL_compiling, ¬_compiling, COP);
2977 PL_curcop = ¬_compiling;
2978 /* The above ensures that we run with all the correct hints of the
2979 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
2980 assert(IN_PERL_RUNTIME);
2981 PL_warnhook = PERL_WARNHOOK_FATAL;
2988 sv = *(PL_stack_sp--);
2989 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
2991 /* Can't simply swipe the SV from the pad, because that relies on
2992 the op being freed "real soon now". Under MAD, this doesn't
2993 happen (see the #ifdef below). */
2996 pad_swipe(o->op_targ, FALSE);
2999 else if (SvTEMP(sv)) { /* grab mortal temp? */
3000 SvREFCNT_inc_simple_void(sv);
3005 /* Something tried to die. Abandon constant folding. */
3006 /* Pretend the error never happened. */
3008 o->op_next = old_next;
3012 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
3013 PL_warnhook = oldwarnhook;
3014 PL_diehook = olddiehook;
3015 /* XXX note that this croak may fail as we've already blown away
3016 * the stack - eg any nested evals */
3017 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
3020 PL_warnhook = oldwarnhook;
3021 PL_diehook = olddiehook;
3022 PL_curcop = &PL_compiling;
3024 if (PL_scopestack_ix > oldscope)
3025 delete_eval_scope();
3034 if (type == OP_RV2GV)
3035 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
3037 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
3038 op_getmad(o,newop,'f');
3046 S_gen_constant_list(pTHX_ register OP *o)
3050 const I32 oldtmps_floor = PL_tmps_floor;
3053 if (PL_parser && PL_parser->error_count)
3054 return o; /* Don't attempt to run with errors */
3056 PL_op = curop = LINKLIST(o);
3059 Perl_pp_pushmark(aTHX);
3062 assert (!(curop->op_flags & OPf_SPECIAL));
3063 assert(curop->op_type == OP_RANGE);
3064 Perl_pp_anonlist(aTHX);
3065 PL_tmps_floor = oldtmps_floor;
3067 o->op_type = OP_RV2AV;
3068 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
3069 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
3070 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
3071 o->op_opt = 0; /* needs to be revisited in rpeep() */
3072 curop = ((UNOP*)o)->op_first;
3073 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
3075 op_getmad(curop,o,'O');
3084 Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
3087 if (!o || o->op_type != OP_LIST)
3088 o = newLISTOP(OP_LIST, 0, o, NULL);
3090 o->op_flags &= ~OPf_WANT;
3092 if (!(PL_opargs[type] & OA_MARK))
3093 op_null(cLISTOPo->op_first);
3095 o->op_type = (OPCODE)type;
3096 o->op_ppaddr = PL_ppaddr[type];
3097 o->op_flags |= flags;
3099 o = CHECKOP(type, o);
3100 if (o->op_type != (unsigned)type)
3103 return fold_constants(o);
3107 =head1 Optree Manipulation Functions
3110 /* List constructors */
3113 =for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
3115 Append an item to the list of ops contained directly within a list-type
3116 op, returning the lengthened list. I<first> is the list-type op,
3117 and I<last> is the op to append to the list. I<optype> specifies the
3118 intended opcode for the list. If I<first> is not already a list of the
3119 right type, it will be upgraded into one. If either I<first> or I<last>
3120 is null, the other is returned unchanged.
3126 Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
3134 if (first->op_type != (unsigned)type
3135 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
3137 return newLISTOP(type, 0, first, last);
3140 if (first->op_flags & OPf_KIDS)
3141 ((LISTOP*)first)->op_last->op_sibling = last;
3143 first->op_flags |= OPf_KIDS;
3144 ((LISTOP*)first)->op_first = last;
3146 ((LISTOP*)first)->op_last = last;
3151 =for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
3153 Concatenate the lists of ops contained directly within two list-type ops,
3154 returning the combined list. I<first> and I<last> are the list-type ops
3155 to concatenate. I<optype> specifies the intended opcode for the list.
3156 If either I<first> or I<last> is not already a list of the right type,
3157 it will be upgraded into one. If either I<first> or I<last> is null,
3158 the other is returned unchanged.
3164 Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
3172 if (first->op_type != (unsigned)type)
3173 return op_prepend_elem(type, first, last);
3175 if (last->op_type != (unsigned)type)
3176 return op_append_elem(type, first, last);
3178 ((LISTOP*)first)->op_last->op_sibling = ((LISTOP*)last)->op_first;
3179 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
3180 first->op_flags |= (last->op_flags & OPf_KIDS);
3183 if (((LISTOP*)last)->op_first && first->op_madprop) {
3184 MADPROP *mp = ((LISTOP*)last)->op_first->op_madprop;
3186 while (mp->mad_next)
3188 mp->mad_next = first->op_madprop;
3191 ((LISTOP*)last)->op_first->op_madprop = first->op_madprop;
3194 first->op_madprop = last->op_madprop;
3195 last->op_madprop = 0;
3198 S_op_destroy(aTHX_ last);
3204 =for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
3206 Prepend an item to the list of ops contained directly within a list-type
3207 op, returning the lengthened list. I<first> is the op to prepend to the
3208 list, and I<last> is the list-type op. I<optype> specifies the intended
3209 opcode for the list. If I<last> is not already a list of the right type,
3210 it will be upgraded into one. If either I<first> or I<last> is null,
3211 the other is returned unchanged.
3217 Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
3225 if (last->op_type == (unsigned)type) {
3226 if (type == OP_LIST) { /* already a PUSHMARK there */
3227 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
3228 ((LISTOP*)last)->op_first->op_sibling = first;
3229 if (!(first->op_flags & OPf_PARENS))
3230 last->op_flags &= ~OPf_PARENS;
3233 if (!(last->op_flags & OPf_KIDS)) {
3234 ((LISTOP*)last)->op_last = first;
3235 last->op_flags |= OPf_KIDS;
3237 first->op_sibling = ((LISTOP*)last)->op_first;
3238 ((LISTOP*)last)->op_first = first;
3240 last->op_flags |= OPf_KIDS;
3244 return newLISTOP(type, 0, first, last);
3252 Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
3255 Newxz(tk, 1, TOKEN);
3256 tk->tk_type = (OPCODE)optype;
3257 tk->tk_type = 12345;
3259 tk->tk_mad = madprop;
3264 Perl_token_free(pTHX_ TOKEN* tk)
3266 PERL_ARGS_ASSERT_TOKEN_FREE;
3268 if (tk->tk_type != 12345)
3270 mad_free(tk->tk_mad);
3275 Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
3280 PERL_ARGS_ASSERT_TOKEN_GETMAD;
3282 if (tk->tk_type != 12345) {
3283 Perl_warner(aTHX_ packWARN(WARN_MISC),
3284 "Invalid TOKEN object ignored");
3291 /* faked up qw list? */
3293 tm->mad_type == MAD_SV &&
3294 SvPVX((SV *)tm->mad_val)[0] == 'q')
3301 /* pretend constant fold didn't happen? */
3302 if (mp->mad_key == 'f' &&
3303 (o->op_type == OP_CONST ||
3304 o->op_type == OP_GV) )
3306 token_getmad(tk,(OP*)mp->mad_val,slot);
3320 if (mp->mad_key == 'X')
3321 mp->mad_key = slot; /* just change the first one */
3331 Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
3340 /* pretend constant fold didn't happen? */
3341 if (mp->mad_key == 'f' &&
3342 (o->op_type == OP_CONST ||
3343 o->op_type == OP_GV) )
3345 op_getmad(from,(OP*)mp->mad_val,slot);
3352 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
3355 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
3361 Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
3370 /* pretend constant fold didn't happen? */
3371 if (mp->mad_key == 'f' &&
3372 (o->op_type == OP_CONST ||
3373 o->op_type == OP_GV) )
3375 op_getmad(from,(OP*)mp->mad_val,slot);
3382 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
3385 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
3389 PerlIO_printf(PerlIO_stderr(),
3390 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
3396 Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
3414 Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
3418 addmad(tm, &(o->op_madprop), slot);
3422 Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
3443 Perl_newMADsv(pTHX_ char key, SV* sv)
3445 PERL_ARGS_ASSERT_NEWMADSV;
3447 return newMADPROP(key, MAD_SV, sv, 0);
3451 Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
3453 MADPROP *const mp = (MADPROP *) PerlMemShared_malloc(sizeof(MADPROP));
3456 mp->mad_vlen = vlen;
3457 mp->mad_type = type;
3459 /* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
3464 Perl_mad_free(pTHX_ MADPROP* mp)
3466 /* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
3470 mad_free(mp->mad_next);
3471 /* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
3472 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
3473 switch (mp->mad_type) {
3477 Safefree((char*)mp->mad_val);
3480 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
3481 op_free((OP*)mp->mad_val);
3484 sv_free(MUTABLE_SV(mp->mad_val));
3487 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3490 PerlMemShared_free(mp);
3496 =head1 Optree construction
3498 =for apidoc Am|OP *|newNULLLIST
3500 Constructs, checks, and returns a new C<stub> op, which represents an
3501 empty list expression.
3507 Perl_newNULLLIST(pTHX)
3509 return newOP(OP_STUB, 0);
3513 S_force_list(pTHX_ OP *o)
3515 if (!o || o->op_type != OP_LIST)
3516 o = newLISTOP(OP_LIST, 0, o, NULL);
3522 =for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
3524 Constructs, checks, and returns an op of any list type. I<type> is
3525 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3526 C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
3527 supply up to two ops to be direct children of the list op; they are
3528 consumed by this function and become part of the constructed op tree.
3534 Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3539 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3541 NewOp(1101, listop, 1, LISTOP);
3543 listop->op_type = (OPCODE)type;
3544 listop->op_ppaddr = PL_ppaddr[type];
3547 listop->op_flags = (U8)flags;
3551 else if (!first && last)
3554 first->op_sibling = last;
3555 listop->op_first = first;
3556 listop->op_last = last;
3557 if (type == OP_LIST) {
3558 OP* const pushop = newOP(OP_PUSHMARK, 0);
3559 pushop->op_sibling = first;
3560 listop->op_first = pushop;
3561 listop->op_flags |= OPf_KIDS;
3563 listop->op_last = pushop;
3566 return CHECKOP(type, listop);
3570 =for apidoc Am|OP *|newOP|I32 type|I32 flags
3572 Constructs, checks, and returns an op of any base type (any type that
3573 has no extra fields). I<type> is the opcode. I<flags> gives the
3574 eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
3581 Perl_newOP(pTHX_ I32 type, I32 flags)
3586 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3587 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3588 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3589 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3591 NewOp(1101, o, 1, OP);
3592 o->op_type = (OPCODE)type;
3593 o->op_ppaddr = PL_ppaddr[type];
3594 o->op_flags = (U8)flags;
3596 o->op_latefreed = 0;
3600 o->op_private = (U8)(0 | (flags >> 8));
3601 if (PL_opargs[type] & OA_RETSCALAR)
3603 if (PL_opargs[type] & OA_TARGET)
3604 o->op_targ = pad_alloc(type, SVs_PADTMP);
3605 return CHECKOP(type, o);
3609 =for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
3611 Constructs, checks, and returns an op of any unary type. I<type> is
3612 the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3613 C<OPf_KIDS> will be set automatically if required, and, shifted up eight
3614 bits, the eight bits of C<op_private>, except that the bit with value 1
3615 is automatically set. I<first> supplies an optional op to be the direct
3616 child of the unary op; it is consumed by this function and become part
3617 of the constructed op tree.
3623 Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3628 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3629 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3630 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3631 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3632 || type == OP_SASSIGN
3633 || type == OP_ENTERTRY
3634 || type == OP_NULL );
3637 first = newOP(OP_STUB, 0);
3638 if (PL_opargs[type] & OA_MARK)
3639 first = force_list(first);
3641 NewOp(1101, unop, 1, UNOP);
3642 unop->op_type = (OPCODE)type;
3643 unop->op_ppaddr = PL_ppaddr[type];
3644 unop->op_first = first;
3645 unop->op_flags = (U8)(flags | OPf_KIDS);
3646 unop->op_private = (U8)(1 | (flags >> 8));
3647 unop = (UNOP*) CHECKOP(type, unop);
3651 return fold_constants((OP *) unop);
3655 =for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
3657 Constructs, checks, and returns an op of any binary type. I<type>
3658 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
3659 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
3660 the eight bits of C<op_private>, except that the bit with value 1 or
3661 2 is automatically set as required. I<first> and I<last> supply up to
3662 two ops to be the direct children of the binary op; they are consumed
3663 by this function and become part of the constructed op tree.
3669 Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3674 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3675 || type == OP_SASSIGN || type == OP_NULL );
3677 NewOp(1101, binop, 1, BINOP);
3680 first = newOP(OP_NULL, 0);
3682 binop->op_type = (OPCODE)type;
3683 binop->op_ppaddr = PL_ppaddr[type];
3684 binop->op_first = first;
3685 binop->op_flags = (U8)(flags | OPf_KIDS);
3688 binop->op_private = (U8)(1 | (flags >> 8));
3691 binop->op_private = (U8)(2 | (flags >> 8));
3692 first->op_sibling = last;
3695 binop = (BINOP*)CHECKOP(type, binop);
3696 if (binop->op_next || binop->op_type != (OPCODE)type)
3699 binop->op_last = binop->op_first->op_sibling;
3701 return fold_constants((OP *)binop);
3704 static int uvcompare(const void *a, const void *b)
3705 __attribute__nonnull__(1)
3706 __attribute__nonnull__(2)
3707 __attribute__pure__;
3708 static int uvcompare(const void *a, const void *b)
3710 if (*((const UV *)a) < (*(const UV *)b))
3712 if (*((const UV *)a) > (*(const UV *)b))
3714 if (*((const UV *)a+1) < (*(const UV *)b+1))
3716 if (*((const UV *)a+1) > (*(const UV *)b+1))
3722 S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3725 SV * const tstr = ((SVOP*)expr)->op_sv;
3728 (repl->op_type == OP_NULL)
3729 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3731 ((SVOP*)repl)->op_sv;
3734 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3735 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3739 register short *tbl;
3741 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3742 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3743 I32 del = o->op_private & OPpTRANS_DELETE;
3746 PERL_ARGS_ASSERT_PMTRANS;
3748 PL_hints |= HINT_BLOCK_SCOPE;
3751 o->op_private |= OPpTRANS_FROM_UTF;
3754 o->op_private |= OPpTRANS_TO_UTF;
3756 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3757 SV* const listsv = newSVpvs("# comment\n");
3759 const U8* tend = t + tlen;
3760 const U8* rend = r + rlen;
3774 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3775 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3778 const U32 flags = UTF8_ALLOW_DEFAULT;
3782 t = tsave = bytes_to_utf8(t, &len);
3785 if (!to_utf && rlen) {
3787 r = rsave = bytes_to_utf8(r, &len);
3791 /* There are several snags with this code on EBCDIC:
3792 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3793 2. scan_const() in toke.c has encoded chars in native encoding which makes
3794 ranges at least in EBCDIC 0..255 range the bottom odd.
3798 U8 tmpbuf[UTF8_MAXBYTES+1];
3801 Newx(cp, 2*tlen, UV);
3803 transv = newSVpvs("");
3805 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3807 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3809 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3813 cp[2*i+1] = cp[2*i];
3817 qsort(cp, i, 2*sizeof(UV), uvcompare);
3818 for (j = 0; j < i; j++) {
3820 diff = val - nextmin;
3822 t = uvuni_to_utf8(tmpbuf,nextmin);
3823 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3825 U8 range_mark = UTF_TO_NATIVE(0xff);
3826 t = uvuni_to_utf8(tmpbuf, val - 1);
3827 sv_catpvn(transv, (char *)&range_mark, 1);
3828 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3835 t = uvuni_to_utf8(tmpbuf,nextmin);
3836 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3838 U8 range_mark = UTF_TO_NATIVE(0xff);
3839 sv_catpvn(transv, (char *)&range_mark, 1);
3841 t = uvuni_to_utf8(tmpbuf, 0x7fffffff);
3842 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3843 t = (const U8*)SvPVX_const(transv);
3844 tlen = SvCUR(transv);
3848 else if (!rlen && !del) {
3849 r = t; rlen = tlen; rend = tend;
3852 if ((!rlen && !del) || t == r ||
3853 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3855 o->op_private |= OPpTRANS_IDENTICAL;
3859 while (t < tend || tfirst <= tlast) {
3860 /* see if we need more "t" chars */
3861 if (tfirst > tlast) {
3862 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3864 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3866 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3873 /* now see if we need more "r" chars */
3874 if (rfirst > rlast) {
3876 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3878 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3880 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3889 rfirst = rlast = 0xffffffff;
3893 /* now see which range will peter our first, if either. */
3894 tdiff = tlast - tfirst;
3895 rdiff = rlast - rfirst;
3902 if (rfirst == 0xffffffff) {
3903 diff = tdiff; /* oops, pretend rdiff is infinite */
3905 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3906 (long)tfirst, (long)tlast);
3908 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3912 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3913 (long)tfirst, (long)(tfirst + diff),
3916 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3917 (long)tfirst, (long)rfirst);
3919 if (rfirst + diff > max)
3920 max = rfirst + diff;
3922 grows = (tfirst < rfirst &&
3923 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3935 else if (max > 0xff)
3940 PerlMemShared_free(cPVOPo->op_pv);
3941 cPVOPo->op_pv = NULL;
3943 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
3945 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3946 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3947 PAD_SETSV(cPADOPo->op_padix, swash);
3949 SvREADONLY_on(swash);
3951 cSVOPo->op_sv = swash;
3953 SvREFCNT_dec(listsv);
3954 SvREFCNT_dec(transv);
3956 if (!del && havefinal && rlen)
3957 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
3958 newSVuv((UV)final), 0);
3961 o->op_private |= OPpTRANS_GROWS;
3967 op_getmad(expr,o,'e');
3968 op_getmad(repl,o,'r');
3976 tbl = (short*)cPVOPo->op_pv;
3978 Zero(tbl, 256, short);
3979 for (i = 0; i < (I32)tlen; i++)
3981 for (i = 0, j = 0; i < 256; i++) {
3983 if (j >= (I32)rlen) {
3992 if (i < 128 && r[j] >= 128)
4002 o->op_private |= OPpTRANS_IDENTICAL;
4004 else if (j >= (I32)rlen)
4009 PerlMemShared_realloc(tbl,
4010 (0x101+rlen-j) * sizeof(short));
4011 cPVOPo->op_pv = (char*)tbl;
4013 tbl[0x100] = (short)(rlen - j);
4014 for (i=0; i < (I32)rlen - j; i++)
4015 tbl[0x101+i] = r[j+i];
4019 if (!rlen && !del) {
4022 o->op_private |= OPpTRANS_IDENTICAL;
4024 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
4025 o->op_private |= OPpTRANS_IDENTICAL;
4027 for (i = 0; i < 256; i++)
4029 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
4030 if (j >= (I32)rlen) {
4032 if (tbl[t[i]] == -1)
4038 if (tbl[t[i]] == -1) {
4039 if (t[i] < 128 && r[j] >= 128)
4046 if(del && rlen == tlen) {
4047 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
4048 } else if(rlen > tlen) {
4049 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
4053 o->op_private |= OPpTRANS_GROWS;
4055 op_getmad(expr,o,'e');
4056 op_getmad(repl,o,'r');
4066 =for apidoc Am|OP *|newPMOP|I32 type|I32 flags
4068 Constructs, checks, and returns an op of any pattern matching type.
4069 I<type> is the opcode. I<flags> gives the eight bits of C<op_flags>
4070 and, shifted up eight bits, the eight bits of C<op_private>.
4076 Perl_newPMOP(pTHX_ I32 type, I32 flags)
4081 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
4083 NewOp(1101, pmop, 1, PMOP);
4084 pmop->op_type = (OPCODE)type;
4085 pmop->op_ppaddr = PL_ppaddr[type];
4086 pmop->op_flags = (U8)flags;
4087 pmop->op_private = (U8)(0 | (flags >> 8));
4089 if (PL_hints & HINT_RE_TAINT)
4090 pmop->op_pmflags |= PMf_RETAINT;
4091 if (PL_hints & HINT_LOCALE) {
4092 set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET);
4094 else if ((! (PL_hints & HINT_BYTES)) && (PL_hints & HINT_UNI_8_BIT)) {
4095 set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET);
4097 if (PL_hints & HINT_RE_FLAGS) {
4098 SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4099 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags"), 0, 0
4101 if (reflags && SvOK(reflags)) pmop->op_pmflags |= SvIV(reflags);
4102 reflags = Perl_refcounted_he_fetch_pvn(aTHX_
4103 PL_compiling.cop_hints_hash, STR_WITH_LEN("reflags_charset"), 0, 0
4105 if (reflags && SvOK(reflags)) {
4106 set_regex_charset(&(pmop->op_pmflags), (regex_charset)SvIV(reflags));
4112 assert(SvPOK(PL_regex_pad[0]));
4113 if (SvCUR(PL_regex_pad[0])) {
4114 /* Pop off the "packed" IV from the end. */
4115 SV *const repointer_list = PL_regex_pad[0];
4116 const char *p = SvEND(repointer_list) - sizeof(IV);
4117 const IV offset = *((IV*)p);
4119 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
4121 SvEND_set(repointer_list, p);
4123 pmop->op_pmoffset = offset;
4124 /* This slot should be free, so assert this: */
4125 assert(PL_regex_pad[offset] == &PL_sv_undef);
4127 SV * const repointer = &PL_sv_undef;
4128 av_push(PL_regex_padav, repointer);
4129 pmop->op_pmoffset = av_len(PL_regex_padav);
4130 PL_regex_pad = AvARRAY(PL_regex_padav);
4134 return CHECKOP(type, pmop);
4137 /* Given some sort of match op o, and an expression expr containing a
4138 * pattern, either compile expr into a regex and attach it to o (if it's
4139 * constant), or convert expr into a runtime regcomp op sequence (if it's
4142 * isreg indicates that the pattern is part of a regex construct, eg
4143 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
4144 * split "pattern", which aren't. In the former case, expr will be a list
4145 * if the pattern contains more than one term (eg /a$b/) or if it contains
4146 * a replacement, ie s/// or tr///.
4150 Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
4155 I32 repl_has_vars = 0;
4159 PERL_ARGS_ASSERT_PMRUNTIME;
4162 o->op_type == OP_SUBST
4163 || o->op_type == OP_TRANS || o->op_type == OP_TRANSR
4165 /* last element in list is the replacement; pop it */
4167 repl = cLISTOPx(expr)->op_last;
4168 kid = cLISTOPx(expr)->op_first;
4169 while (kid->op_sibling != repl)
4170 kid = kid->op_sibling;
4171 kid->op_sibling = NULL;
4172 cLISTOPx(expr)->op_last = kid;
4175 if (isreg && expr->op_type == OP_LIST &&
4176 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
4178 /* convert single element list to element */
4179 OP* const oe = expr;
4180 expr = cLISTOPx(oe)->op_first->op_sibling;
4181 cLISTOPx(oe)->op_first->op_sibling = NULL;
4182 cLISTOPx(oe)->op_last = NULL;
4186 if (o->op_type == OP_TRANS || o->op_type == OP_TRANSR) {
4187 return pmtrans(o, expr, repl);
4190 reglist = isreg && expr->op_type == OP_LIST;
4194 PL_hints |= HINT_BLOCK_SCOPE;
4197 if (expr->op_type == OP_CONST) {
4198 SV *pat = ((SVOP*)expr)->op_sv;
4199 U32 pm_flags = pm->op_pmflags & RXf_PMf_COMPILETIME;
4201 if (o->op_flags & OPf_SPECIAL)
4202 pm_flags |= RXf_SPLIT;
4205 assert (SvUTF8(pat));
4206 } else if (SvUTF8(pat)) {
4207 /* Not doing UTF-8, despite what the SV says. Is this only if we're
4208 trapped in use 'bytes'? */
4209 /* Make a copy of the octet sequence, but without the flag on, as
4210 the compiler now honours the SvUTF8 flag on pat. */
4212 const char *const p = SvPV(pat, len);
4213 pat = newSVpvn_flags(p, len, SVs_TEMP);
4216 PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
4219 op_getmad(expr,(OP*)pm,'e');
4225 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
4226 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
4228 : OP_REGCMAYBE),0,expr);
4230 NewOp(1101, rcop, 1, LOGOP);
4231 rcop->op_type = OP_REGCOMP;
4232 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
4233 rcop->op_first = scalar(expr);
4234 rcop->op_flags |= OPf_KIDS
4235 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
4236 | (reglist ? OPf_STACKED : 0);
4237 rcop->op_private = 1;
4240 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
4242 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
4243 if (PL_hints & HINT_RE_EVAL) PL_cv_has_eval = 1;
4245 /* establish postfix order */
4246 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
4248 rcop->op_next = expr;
4249 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
4252 rcop->op_next = LINKLIST(expr);
4253 expr->op_next = (OP*)rcop;
4256 op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
4261 if (pm->op_pmflags & PMf_EVAL) {
4263 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
4264 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
4266 else if (repl->op_type == OP_CONST)
4270 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
4271 if (curop->op_type == OP_SCOPE
4272 || curop->op_type == OP_LEAVE
4273 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
4274 if (curop->op_type == OP_GV) {
4275 GV * const gv = cGVOPx_gv(curop);
4277 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
4280 else if (curop->op_type == OP_RV2CV)
4282 else if (curop->op_type == OP_RV2SV ||
4283 curop->op_type == OP_RV2AV ||
4284 curop->op_type == OP_RV2HV ||
4285 curop->op_type == OP_RV2GV) {
4286 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
4289 else if (curop->op_type == OP_PADSV ||
4290 curop->op_type == OP_PADAV ||
4291 curop->op_type == OP_PADHV ||
4292 curop->op_type == OP_PADANY)
4296 else if (curop->op_type == OP_PUSHRE)
4297 NOOP; /* Okay here, dangerous in newASSIGNOP */
4307 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
4309 pm->op_pmflags |= PMf_CONST; /* const for long enough */
4310 op_prepend_elem(o->op_type, scalar(repl), o);
4313 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
4314 pm->op_pmflags |= PMf_MAYBE_CONST;
4316 NewOp(1101, rcop, 1, LOGOP);
4317 rcop->op_type = OP_SUBSTCONT;
4318 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
4319 rcop->op_first = scalar(repl);
4320 rcop->op_flags |= OPf_KIDS;
4321 rcop->op_private = 1;
4324 /* establish postfix order */
4325 rcop->op_next = LINKLIST(repl);
4326 repl->op_next = (OP*)rcop;
4328 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
4329 assert(!(pm->op_pmflags & PMf_ONCE));
4330 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
4339 =for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
4341 Constructs, checks, and returns an op of any type that involves an
4342 embedded SV. I<type> is the opcode. I<flags> gives the eight bits
4343 of C<op_flags>. I<sv> gives the SV to embed in the op; this function
4344 takes ownership of one reference to it.
4350 Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
4355 PERL_ARGS_ASSERT_NEWSVOP;
4357 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4358 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4359 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4361 NewOp(1101, svop, 1, SVOP);
4362 svop->op_type = (OPCODE)type;
4363 svop->op_ppaddr = PL_ppaddr[type];
4365 svop->op_next = (OP*)svop;
4366 svop->op_flags = (U8)flags;
4367 if (PL_opargs[type] & OA_RETSCALAR)
4369 if (PL_opargs[type] & OA_TARGET)
4370 svop->op_targ = pad_alloc(type, SVs_PADTMP);
4371 return CHECKOP(type, svop);
4377 =for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
4379 Constructs, checks, and returns an op of any type that involves a
4380 reference to a pad element. I<type> is the opcode. I<flags> gives the
4381 eight bits of C<op_flags>. A pad slot is automatically allocated, and
4382 is populated with I<sv>; this function takes ownership of one reference
4385 This function only exists if Perl has been compiled to use ithreads.
4391 Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
4396 PERL_ARGS_ASSERT_NEWPADOP;
4398 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4399 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4400 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4402 NewOp(1101, padop, 1, PADOP);
4403 padop->op_type = (OPCODE)type;
4404 padop->op_ppaddr = PL_ppaddr[type];
4405 padop->op_padix = pad_alloc(type, SVs_PADTMP);
4406 SvREFCNT_dec(PAD_SVl(padop->op_padix));
4407 PAD_SETSV(padop->op_padix, sv);
4410 padop->op_next = (OP*)padop;
4411 padop->op_flags = (U8)flags;
4412 if (PL_opargs[type] & OA_RETSCALAR)
4414 if (PL_opargs[type] & OA_TARGET)
4415 padop->op_targ = pad_alloc(type, SVs_PADTMP);
4416 return CHECKOP(type, padop);
4419 #endif /* !USE_ITHREADS */
4422 =for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
4424 Constructs, checks, and returns an op of any type that involves an
4425 embedded reference to a GV. I<type> is the opcode. I<flags> gives the
4426 eight bits of C<op_flags>. I<gv> identifies the GV that the op should
4427 reference; calling this function does not transfer ownership of any
4434 Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
4438 PERL_ARGS_ASSERT_NEWGVOP;
4442 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4444 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4449 =for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
4451 Constructs, checks, and returns an op of any type that involves an
4452 embedded C-level pointer (PV). I<type> is the opcode. I<flags> gives
4453 the eight bits of C<op_flags>. I<pv> supplies the C-level pointer, which
4454 must have been allocated using L</PerlMemShared_malloc>; the memory will
4455 be freed when the op is destroyed.
4461 Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
4466 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4467 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4469 NewOp(1101, pvop, 1, PVOP);
4470 pvop->op_type = (OPCODE)type;
4471 pvop->op_ppaddr = PL_ppaddr[type];
4473 pvop->op_next = (OP*)pvop;
4474 pvop->op_flags = (U8)flags;
4475 if (PL_opargs[type] & OA_RETSCALAR)
4477 if (PL_opargs[type] & OA_TARGET)
4478 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
4479 return CHECKOP(type, pvop);
4487 Perl_package(pTHX_ OP *o)
4490 SV *const sv = cSVOPo->op_sv;
4495 PERL_ARGS_ASSERT_PACKAGE;
4497 save_hptr(&PL_curstash);
4498 save_item(PL_curstname);
4500 PL_curstash = gv_stashsv(sv, GV_ADD);
4502 sv_setsv(PL_curstname, sv);
4504 PL_hints |= HINT_BLOCK_SCOPE;
4505 PL_parser->copline = NOLINE;
4506 PL_parser->expect = XSTATE;
4511 if (!PL_madskills) {
4516 pegop = newOP(OP_NULL,0);
4517 op_getmad(o,pegop,'P');
4523 Perl_package_version( pTHX_ OP *v )
4526 U32 savehints = PL_hints;
4527 PERL_ARGS_ASSERT_PACKAGE_VERSION;
4528 PL_hints &= ~HINT_STRICT_VARS;
4529 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
4530 PL_hints = savehints;
4539 Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
4546 OP *pegop = newOP(OP_NULL,0);
4548 SV *use_version = NULL;
4550 PERL_ARGS_ASSERT_UTILIZE;
4552 if (idop->op_type != OP_CONST)
4553 Perl_croak(aTHX_ "Module name must be constant");
4556 op_getmad(idop,pegop,'U');
4561 SV * const vesv = ((SVOP*)version)->op_sv;
4564 op_getmad(version,pegop,'V');
4565 if (!arg && !SvNIOKp(vesv)) {
4572 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
4573 Perl_croak(aTHX_ "Version number must be a constant number");
4575 /* Make copy of idop so we don't free it twice */
4576 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4578 /* Fake up a method call to VERSION */
4579 meth = newSVpvs_share("VERSION");
4580 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4581 op_append_elem(OP_LIST,
4582 op_prepend_elem(OP_LIST, pack, list(version)),
4583 newSVOP(OP_METHOD_NAMED, 0, meth)));
4587 /* Fake up an import/unimport */
4588 if (arg && arg->op_type == OP_STUB) {
4590 op_getmad(arg,pegop,'S');
4591 imop = arg; /* no import on explicit () */
4593 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
4594 imop = NULL; /* use 5.0; */
4596 use_version = ((SVOP*)idop)->op_sv;
4598 idop->op_private |= OPpCONST_NOVER;
4604 op_getmad(arg,pegop,'A');
4606 /* Make copy of idop so we don't free it twice */
4607 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4609 /* Fake up a method call to import/unimport */
4611 ? newSVpvs_share("import") : newSVpvs_share("unimport");
4612 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4613 op_append_elem(OP_LIST,
4614 op_prepend_elem(OP_LIST, pack, list(arg)),
4615 newSVOP(OP_METHOD_NAMED, 0, meth)));
4618 /* Fake up the BEGIN {}, which does its thing immediately. */
4620 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
4623 op_append_elem(OP_LINESEQ,
4624 op_append_elem(OP_LINESEQ,
4625 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
4626 newSTATEOP(0, NULL, veop)),
4627 newSTATEOP(0, NULL, imop) ));
4630 /* If we request a version >= 5.9.5, load feature.pm with the
4631 * feature bundle that corresponds to the required version. */
4632 use_version = sv_2mortal(new_version(use_version));
4634 if (vcmp(use_version,
4635 sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
4636 SV *const importsv = vnormal(use_version);
4637 *SvPVX_mutable(importsv) = ':';
4638 ENTER_with_name("load_feature");
4639 Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
4640 LEAVE_with_name("load_feature");
4642 /* If a version >= 5.11.0 is requested, strictures are on by default! */
4643 if (vcmp(use_version,
4644 sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) {
4645 PL_hints |= (HINT_STRICT_REFS | HINT_STRICT_SUBS | HINT_STRICT_VARS);
4649 /* The "did you use incorrect case?" warning used to be here.
4650 * The problem is that on case-insensitive filesystems one
4651 * might get false positives for "use" (and "require"):
4652 * "use Strict" or "require CARP" will work. This causes
4653 * portability problems for the script: in case-strict
4654 * filesystems the script will stop working.
4656 * The "incorrect case" warning checked whether "use Foo"
4657 * imported "Foo" to your namespace, but that is wrong, too:
4658 * there is no requirement nor promise in the language that
4659 * a Foo.pm should or would contain anything in package "Foo".
4661 * There is very little Configure-wise that can be done, either:
4662 * the case-sensitivity of the build filesystem of Perl does not
4663 * help in guessing the case-sensitivity of the runtime environment.
4666 PL_hints |= HINT_BLOCK_SCOPE;
4667 PL_parser->copline = NOLINE;
4668 PL_parser->expect = XSTATE;
4669 PL_cop_seqmax++; /* Purely for B::*'s benefit */
4670 if (PL_cop_seqmax == PERL_PADSEQ_INTRO) /* not a legal value */
4674 if (!PL_madskills) {
4675 /* FIXME - don't allocate pegop if !PL_madskills */
4684 =head1 Embedding Functions
4686 =for apidoc load_module
4688 Loads the module whose name is pointed to by the string part of name.
4689 Note that the actual module name, not its filename, should be given.
4690 Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
4691 PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
4692 (or 0 for no flags). ver, if specified, provides version semantics
4693 similar to C<use Foo::Bar VERSION>. The optional trailing SV*
4694 arguments can be used to specify arguments to the module's import()
4695 method, similar to C<use Foo::Bar VERSION LIST>. They must be
4696 terminated with a final NULL pointer. Note that this list can only
4697 be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
4698 Otherwise at least a single NULL pointer to designate the default
4699 import list is required.
4704 Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
4708 PERL_ARGS_ASSERT_LOAD_MODULE;
4710 va_start(args, ver);
4711 vload_module(flags, name, ver, &args);
4715 #ifdef PERL_IMPLICIT_CONTEXT
4717 Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
4721 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
4722 va_start(args, ver);
4723 vload_module(flags, name, ver, &args);
4729 Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
4733 OP * const modname = newSVOP(OP_CONST, 0, name);
4735 PERL_ARGS_ASSERT_VLOAD_MODULE;
4737 modname->op_private |= OPpCONST_BARE;
4739 veop = newSVOP(OP_CONST, 0, ver);
4743 if (flags & PERL_LOADMOD_NOIMPORT) {
4744 imop = sawparens(newNULLLIST());
4746 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
4747 imop = va_arg(*args, OP*);
4752 sv = va_arg(*args, SV*);
4754 imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
4755 sv = va_arg(*args, SV*);
4759 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
4760 * that it has a PL_parser to play with while doing that, and also
4761 * that it doesn't mess with any existing parser, by creating a tmp
4762 * new parser with lex_start(). This won't actually be used for much,
4763 * since pp_require() will create another parser for the real work. */
4766 SAVEVPTR(PL_curcop);
4767 lex_start(NULL, NULL, LEX_START_SAME_FILTER);
4768 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
4769 veop, modname, imop);
4774 Perl_dofile(pTHX_ OP *term, I32 force_builtin)
4780 PERL_ARGS_ASSERT_DOFILE;
4782 if (!force_builtin) {
4783 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
4784 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
4785 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
4786 gv = gvp ? *gvp : NULL;
4790 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
4791 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
4792 op_append_elem(OP_LIST, term,
4793 scalar(newUNOP(OP_RV2CV, 0,
4794 newGVOP(OP_GV, 0, gv))))));
4797 doop = newUNOP(OP_DOFILE, 0, scalar(term));
4803 =head1 Optree construction
4805 =for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
4807 Constructs, checks, and returns an C<lslice> (list slice) op. I<flags>
4808 gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
4809 be set automatically, and, shifted up eight bits, the eight bits of
4810 C<op_private>, except that the bit with value 1 or 2 is automatically
4811 set as required. I<listval> and I<subscript> supply the parameters of
4812 the slice; they are consumed by this function and become part of the
4813 constructed op tree.
4819 Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
4821 return newBINOP(OP_LSLICE, flags,
4822 list(force_list(subscript)),
4823 list(force_list(listval)) );
4827 S_is_list_assignment(pTHX_ register const OP *o)
4835 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
4836 o = cUNOPo->op_first;
4838 flags = o->op_flags;
4840 if (type == OP_COND_EXPR) {
4841 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
4842 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
4847 yyerror("Assignment to both a list and a scalar");
4851 if (type == OP_LIST &&
4852 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
4853 o->op_private & OPpLVAL_INTRO)
4856 if (type == OP_LIST || flags & OPf_PARENS ||
4857 type == OP_RV2AV || type == OP_RV2HV ||
4858 type == OP_ASLICE || type == OP_HSLICE)
4861 if (type == OP_PADAV || type == OP_PADHV)
4864 if (type == OP_RV2SV)
4871 Helper function for newASSIGNOP to detection commonality between the
4872 lhs and the rhs. Marks all variables with PL_generation. If it
4873 returns TRUE the assignment must be able to handle common variables.
4875 PERL_STATIC_INLINE bool
4876 S_aassign_common_vars(pTHX_ OP* o)
4879 for (curop = cUNOPo->op_first; curop; curop=curop->op_sibling) {
4880 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4881 if (curop->op_type == OP_GV) {
4882 GV *gv = cGVOPx_gv(curop);
4884 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4886 GvASSIGN_GENERATION_set(gv, PL_generation);
4888 else if (curop->op_type == OP_PADSV ||
4889 curop->op_type == OP_PADAV ||
4890 curop->op_type == OP_PADHV ||
4891 curop->op_type == OP_PADANY)
4893 if (PAD_COMPNAME_GEN(curop->op_targ)
4894 == (STRLEN)PL_generation)
4896 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4899 else if (curop->op_type == OP_RV2CV)
4901 else if (curop->op_type == OP_RV2SV ||
4902 curop->op_type == OP_RV2AV ||
4903 curop->op_type == OP_RV2HV ||
4904 curop->op_type == OP_RV2GV) {
4905 if (cUNOPx(curop)->op_first->op_type != OP_GV) /* funny deref? */
4908 else if (curop->op_type == OP_PUSHRE) {
4910 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4911 GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
4913 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4915 GvASSIGN_GENERATION_set(gv, PL_generation);
4919 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4922 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4924 GvASSIGN_GENERATION_set(gv, PL_generation);
4932 if (curop->op_flags & OPf_KIDS) {
4933 if (aassign_common_vars(curop))
4941 =for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
4943 Constructs, checks, and returns an assignment op. I<left> and I<right>
4944 supply the parameters of the assignment; they are consumed by this
4945 function and become part of the constructed op tree.
4947 If I<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
4948 a suitable conditional optree is constructed. If I<optype> is the opcode
4949 of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
4950 performs the binary operation and assigns the result to the left argument.
4951 Either way, if I<optype> is non-zero then I<flags> has no effect.
4953 If I<optype> is zero, then a plain scalar or list assignment is
4954 constructed. Which type of assignment it is is automatically determined.
4955 I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
4956 will be set automatically, and, shifted up eight bits, the eight bits
4957 of C<op_private>, except that the bit with value 1 or 2 is automatically
4964 Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
4970 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
4971 return newLOGOP(optype, 0,
4972 op_lvalue(scalar(left), optype),
4973 newUNOP(OP_SASSIGN, 0, scalar(right)));
4976 return newBINOP(optype, OPf_STACKED,
4977 op_lvalue(scalar(left), optype), scalar(right));
4981 if (is_list_assignment(left)) {
4982 static const char no_list_state[] = "Initialization of state variables"
4983 " in list context currently forbidden";
4985 bool maybe_common_vars = TRUE;
4988 /* Grandfathering $[ assignment here. Bletch.*/
4989 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
4990 PL_eval_start = (left->op_type == OP_CONST) ? right : NULL;
4991 left = op_lvalue(left, OP_AASSIGN);
4994 else if (left->op_type == OP_CONST) {
4995 deprecate("assignment to $[");
4997 /* Result of assignment is always 1 (or we'd be dead already) */
4998 return newSVOP(OP_CONST, 0, newSViv(1));
5000 curop = list(force_list(left));
5001 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
5002 o->op_private = (U8)(0 | (flags >> 8));
5004 if ((left->op_type == OP_LIST
5005 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
5007 OP* lop = ((LISTOP*)left)->op_first;
5008 maybe_common_vars = FALSE;
5010 if (lop->op_type == OP_PADSV ||
5011 lop->op_type == OP_PADAV ||
5012 lop->op_type == OP_PADHV ||
5013 lop->op_type == OP_PADANY) {
5014 if (!(lop->op_private & OPpLVAL_INTRO))
5015 maybe_common_vars = TRUE;
5017 if (lop->op_private & OPpPAD_STATE) {
5018 if (left->op_private & OPpLVAL_INTRO) {
5019 /* Each variable in state($a, $b, $c) = ... */
5022 /* Each state variable in
5023 (state $a, my $b, our $c, $d, undef) = ... */
5025 yyerror(no_list_state);
5027 /* Each my variable in
5028 (state $a, my $b, our $c, $d, undef) = ... */
5030 } else if (lop->op_type == OP_UNDEF ||
5031 lop->op_type == OP_PUSHMARK) {
5032 /* undef may be interesting in
5033 (state $a, undef, state $c) */
5035 /* Other ops in the list. */
5036 maybe_common_vars = TRUE;
5038 lop = lop->op_sibling;
5041 else if ((left->op_private & OPpLVAL_INTRO)
5042 && ( left->op_type == OP_PADSV
5043 || left->op_type == OP_PADAV
5044 || left->op_type == OP_PADHV
5045 || left->op_type == OP_PADANY))
5047 if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
5048 if (left->op_private & OPpPAD_STATE) {
5049 /* All single variable list context state assignments, hence
5059 yyerror(no_list_state);
5063 /* PL_generation sorcery:
5064 * an assignment like ($a,$b) = ($c,$d) is easier than
5065 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
5066 * To detect whether there are common vars, the global var
5067 * PL_generation is incremented for each assign op we compile.
5068 * Then, while compiling the assign op, we run through all the
5069 * variables on both sides of the assignment, setting a spare slot
5070 * in each of them to PL_generation. If any of them already have
5071 * that value, we know we've got commonality. We could use a
5072 * single bit marker, but then we'd have to make 2 passes, first
5073 * to clear the flag, then to test and set it. To find somewhere
5074 * to store these values, evil chicanery is done with SvUVX().
5077 if (maybe_common_vars) {
5079 if (aassign_common_vars(o))
5080 o->op_private |= OPpASSIGN_COMMON;
5084 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
5085 OP* tmpop = ((LISTOP*)right)->op_first;
5086 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
5087 PMOP * const pm = (PMOP*)tmpop;
5088 if (left->op_type == OP_RV2AV &&
5089 !(left->op_private & OPpLVAL_INTRO) &&
5090 !(o->op_private & OPpASSIGN_COMMON) )
5092 tmpop = ((UNOP*)left)->op_first;
5093 if (tmpop->op_type == OP_GV
5095 && !pm->op_pmreplrootu.op_pmtargetoff
5097 && !pm->op_pmreplrootu.op_pmtargetgv
5101 pm->op_pmreplrootu.op_pmtargetoff
5102 = cPADOPx(tmpop)->op_padix;
5103 cPADOPx(tmpop)->op_padix = 0; /* steal it */
5105 pm->op_pmreplrootu.op_pmtargetgv
5106 = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
5107 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
5109 pm->op_pmflags |= PMf_ONCE;
5110 tmpop = cUNOPo->op_first; /* to list (nulled) */
5111 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
5112 tmpop->op_sibling = NULL; /* don't free split */
5113 right->op_next = tmpop->op_next; /* fix starting loc */
5114 op_free(o); /* blow off assign */
5115 right->op_flags &= ~OPf_WANT;
5116 /* "I don't know and I don't care." */
5121 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
5122 ((LISTOP*)right)->op_last->op_type == OP_CONST)
5124 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
5125 if (SvIOK(sv) && SvIVX(sv) == 0)
5126 sv_setiv(sv, PL_modcount+1);
5134 right = newOP(OP_UNDEF, 0);
5135 if (right->op_type == OP_READLINE) {
5136 right->op_flags |= OPf_STACKED;
5137 return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN),
5141 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
5142 o = newBINOP(OP_SASSIGN, flags,
5143 scalar(right), op_lvalue(scalar(left), OP_SASSIGN) );
5147 if (!PL_madskills) { /* assignment to $[ is ignored when making a mad dump */
5148 deprecate("assignment to $[");
5150 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
5151 o->op_private |= OPpCONST_ARYBASE;
5159 =for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
5161 Constructs a state op (COP). The state op is normally a C<nextstate> op,
5162 but will be a C<dbstate> op if debugging is enabled for currently-compiled
5163 code. The state op is populated from L</PL_curcop> (or L</PL_compiling>).
5164 If I<label> is non-null, it supplies the name of a label to attach to
5165 the state op; this function takes ownership of the memory pointed at by
5166 I<label>, and will free it. I<flags> gives the eight bits of C<op_flags>
5169 If I<o> is null, the state op is returned. Otherwise the state op is
5170 combined with I<o> into a C<lineseq> list op, which is returned. I<o>
5171 is consumed by this function and becomes part of the returned op tree.
5177 Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
5180 const U32 seq = intro_my();
5183 NewOp(1101, cop, 1, COP);
5184 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
5185 cop->op_type = OP_DBSTATE;
5186 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
5189 cop->op_type = OP_NEXTSTATE;
5190 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
5192 cop->op_flags = (U8)flags;
5193 CopHINTS_set(cop, PL_hints);
5195 cop->op_private |= NATIVE_HINTS;
5197 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
5198 cop->op_next = (OP*)cop;
5201 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
5202 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
5204 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
5205 CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop)));
5207 Perl_cop_store_label(aTHX_ cop, label, strlen(label), 0);
5209 PL_hints |= HINT_BLOCK_SCOPE;
5210 /* It seems that we need to defer freeing this pointer, as other parts
5211 of the grammar end up wanting to copy it after this op has been
5216 if (PL_parser && PL_parser->copline == NOLINE)
5217 CopLINE_set(cop, CopLINE(PL_curcop));
5219 CopLINE_set(cop, PL_parser->copline);
5221 PL_parser->copline = NOLINE;
5224 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
5226 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
5228 CopSTASH_set(cop, PL_curstash);
5230 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash) {
5231 /* this line can have a breakpoint - store the cop in IV */
5232 AV *av = CopFILEAVx(PL_curcop);
5234 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
5235 if (svp && *svp != &PL_sv_undef ) {
5236 (void)SvIOK_on(*svp);
5237 SvIV_set(*svp, PTR2IV(cop));
5242 if (flags & OPf_SPECIAL)
5244 return op_prepend_elem(OP_LINESEQ, (OP*)cop, o);
5248 =for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
5250 Constructs, checks, and returns a logical (flow control) op. I<type>
5251 is the opcode. I<flags> gives the eight bits of C<op_flags>, except
5252 that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
5253 the eight bits of C<op_private>, except that the bit with value 1 is
5254 automatically set. I<first> supplies the expression controlling the
5255 flow, and I<other> supplies the side (alternate) chain of ops; they are
5256 consumed by this function and become part of the constructed op tree.
5262 Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
5266 PERL_ARGS_ASSERT_NEWLOGOP;
5268 return new_logop(type, flags, &first, &other);
5272 S_search_const(pTHX_ OP *o)
5274 PERL_ARGS_ASSERT_SEARCH_CONST;
5276 switch (o->op_type) {
5280 if (o->op_flags & OPf_KIDS)
5281 return search_const(cUNOPo->op_first);
5288 if (!(o->op_flags & OPf_KIDS))
5290 kid = cLISTOPo->op_first;
5292 switch (kid->op_type) {
5296 kid = kid->op_sibling;
5299 if (kid != cLISTOPo->op_last)
5305 kid = cLISTOPo->op_last;
5307 return search_const(kid);
5315 S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
5323 int prepend_not = 0;
5325 PERL_ARGS_ASSERT_NEW_LOGOP;
5330 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
5331 return newBINOP(type, flags, scalar(first), scalar(other));
5333 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
5335 scalarboolean(first);
5336 /* optimize AND and OR ops that have NOTs as children */
5337 if (first->op_type == OP_NOT
5338 && (first->op_flags & OPf_KIDS)
5339 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
5340 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
5342 if (type == OP_AND || type == OP_OR) {
5348 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
5350 prepend_not = 1; /* prepend a NOT op later */
5354 /* search for a constant op that could let us fold the test */
5355 if ((cstop = search_const(first))) {
5356 if (cstop->op_private & OPpCONST_STRICT)
5357 no_bareword_allowed(cstop);
5358 else if ((cstop->op_private & OPpCONST_BARE))
5359 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
5360 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
5361 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
5362 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
5364 if (other->op_type == OP_CONST)
5365 other->op_private |= OPpCONST_SHORTCIRCUIT;
5367 OP *newop = newUNOP(OP_NULL, 0, other);
5368 op_getmad(first, newop, '1');
5369 newop->op_targ = type; /* set "was" field */
5373 if (other->op_type == OP_LEAVE)
5374 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
5375 else if (other->op_type == OP_MATCH
5376 || other->op_type == OP_SUBST
5377 || other->op_type == OP_TRANSR
5378 || other->op_type == OP_TRANS)
5379 /* Mark the op as being unbindable with =~ */
5380 other->op_flags |= OPf_SPECIAL;
5384 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
5385 const OP *o2 = other;
5386 if ( ! (o2->op_type == OP_LIST
5387 && (( o2 = cUNOPx(o2)->op_first))
5388 && o2->op_type == OP_PUSHMARK
5389 && (( o2 = o2->op_sibling)) )
5392 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
5393 || o2->op_type == OP_PADHV)
5394 && o2->op_private & OPpLVAL_INTRO
5395 && !(o2->op_private & OPpPAD_STATE))
5397 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
5398 "Deprecated use of my() in false conditional");
5402 if (first->op_type == OP_CONST)
5403 first->op_private |= OPpCONST_SHORTCIRCUIT;
5405 first = newUNOP(OP_NULL, 0, first);
5406 op_getmad(other, first, '2');
5407 first->op_targ = type; /* set "was" field */
5414 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
5415 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
5417 const OP * const k1 = ((UNOP*)first)->op_first;
5418 const OP * const k2 = k1->op_sibling;
5420 switch (first->op_type)
5423 if (k2 && k2->op_type == OP_READLINE
5424 && (k2->op_flags & OPf_STACKED)
5425 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5427 warnop = k2->op_type;
5432 if (k1->op_type == OP_READDIR
5433 || k1->op_type == OP_GLOB
5434 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5435 || k1->op_type == OP_EACH
5436 || k1->op_type == OP_AEACH)
5438 warnop = ((k1->op_type == OP_NULL)
5439 ? (OPCODE)k1->op_targ : k1->op_type);
5444 const line_t oldline = CopLINE(PL_curcop);
5445 CopLINE_set(PL_curcop, PL_parser->copline);
5446 Perl_warner(aTHX_ packWARN(WARN_MISC),
5447 "Value of %s%s can be \"0\"; test with defined()",
5449 ((warnop == OP_READLINE || warnop == OP_GLOB)
5450 ? " construct" : "() operator"));
5451 CopLINE_set(PL_curcop, oldline);
5458 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
5459 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
5461 NewOp(1101, logop, 1, LOGOP);
5463 logop->op_type = (OPCODE)type;
5464 logop->op_ppaddr = PL_ppaddr[type];
5465 logop->op_first = first;
5466 logop->op_flags = (U8)(flags | OPf_KIDS);
5467 logop->op_other = LINKLIST(other);
5468 logop->op_private = (U8)(1 | (flags >> 8));
5470 /* establish postfix order */
5471 logop->op_next = LINKLIST(first);
5472 first->op_next = (OP*)logop;
5473 first->op_sibling = other;
5475 CHECKOP(type,logop);
5477 o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
5484 =for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
5486 Constructs, checks, and returns a conditional-expression (C<cond_expr>)
5487 op. I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
5488 will be set automatically, and, shifted up eight bits, the eight bits of
5489 C<op_private>, except that the bit with value 1 is automatically set.
5490 I<first> supplies the expression selecting between the two branches,
5491 and I<trueop> and I<falseop> supply the branches; they are consumed by
5492 this function and become part of the constructed op tree.
5498 Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
5506 PERL_ARGS_ASSERT_NEWCONDOP;
5509 return newLOGOP(OP_AND, 0, first, trueop);
5511 return newLOGOP(OP_OR, 0, first, falseop);
5513 scalarboolean(first);
5514 if ((cstop = search_const(first))) {
5515 /* Left or right arm of the conditional? */
5516 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
5517 OP *live = left ? trueop : falseop;
5518 OP *const dead = left ? falseop : trueop;
5519 if (cstop->op_private & OPpCONST_BARE &&
5520 cstop->op_private & OPpCONST_STRICT) {
5521 no_bareword_allowed(cstop);
5524 /* This is all dead code when PERL_MAD is not defined. */
5525 live = newUNOP(OP_NULL, 0, live);
5526 op_getmad(first, live, 'C');
5527 op_getmad(dead, live, left ? 'e' : 't');
5532 if (live->op_type == OP_LEAVE)
5533 live = newUNOP(OP_NULL, OPf_SPECIAL, live);
5534 else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST
5535 || live->op_type == OP_TRANS || live->op_type == OP_TRANSR)
5536 /* Mark the op as being unbindable with =~ */
5537 live->op_flags |= OPf_SPECIAL;
5540 NewOp(1101, logop, 1, LOGOP);
5541 logop->op_type = OP_COND_EXPR;
5542 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
5543 logop->op_first = first;
5544 logop->op_flags = (U8)(flags | OPf_KIDS);
5545 logop->op_private = (U8)(1 | (flags >> 8));
5546 logop->op_other = LINKLIST(trueop);
5547 logop->op_next = LINKLIST(falseop);
5549 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
5552 /* establish postfix order */
5553 start = LINKLIST(first);
5554 first->op_next = (OP*)logop;
5556 first->op_sibling = trueop;
5557 trueop->op_sibling = falseop;
5558 o = newUNOP(OP_NULL, 0, (OP*)logop);
5560 trueop->op_next = falseop->op_next = o;
5567 =for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
5569 Constructs and returns a C<range> op, with subordinate C<flip> and
5570 C<flop> ops. I<flags> gives the eight bits of C<op_flags> for the
5571 C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
5572 for both the C<flip> and C<range> ops, except that the bit with value
5573 1 is automatically set. I<left> and I<right> supply the expressions
5574 controlling the endpoints of the range; they are consumed by this function
5575 and become part of the constructed op tree.
5581 Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
5590 PERL_ARGS_ASSERT_NEWRANGE;
5592 NewOp(1101, range, 1, LOGOP);
5594 range->op_type = OP_RANGE;
5595 range->op_ppaddr = PL_ppaddr[OP_RANGE];
5596 range->op_first = left;
5597 range->op_flags = OPf_KIDS;
5598 leftstart = LINKLIST(left);
5599 range->op_other = LINKLIST(right);
5600 range->op_private = (U8)(1 | (flags >> 8));
5602 left->op_sibling = right;
5604 range->op_next = (OP*)range;
5605 flip = newUNOP(OP_FLIP, flags, (OP*)range);
5606 flop = newUNOP(OP_FLOP, 0, flip);
5607 o = newUNOP(OP_NULL, 0, flop);
5609 range->op_next = leftstart;
5611 left->op_next = flip;
5612 right->op_next = flop;
5614 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5615 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
5616 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5617 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
5619 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5620 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5622 /* check barewords before they might be optimized aways */
5623 if (flip->op_private && cSVOPx(left)->op_private & OPpCONST_STRICT)
5624 no_bareword_allowed(left);
5625 if (flop->op_private && cSVOPx(right)->op_private & OPpCONST_STRICT)
5626 no_bareword_allowed(right);
5629 if (!flip->op_private || !flop->op_private)
5630 LINKLIST(o); /* blow off optimizer unless constant */
5636 =for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
5638 Constructs, checks, and returns an op tree expressing a loop. This is
5639 only a loop in the control flow through the op tree; it does not have
5640 the heavyweight loop structure that allows exiting the loop by C<last>
5641 and suchlike. I<flags> gives the eight bits of C<op_flags> for the
5642 top-level op, except that some bits will be set automatically as required.
5643 I<expr> supplies the expression controlling loop iteration, and I<block>
5644 supplies the body of the loop; they are consumed by this function and
5645 become part of the constructed op tree. I<debuggable> is currently
5646 unused and should always be 1.
5652 Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
5657 const bool once = block && block->op_flags & OPf_SPECIAL &&
5658 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
5660 PERL_UNUSED_ARG(debuggable);
5663 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
5664 return block; /* do {} while 0 does once */
5665 if (expr->op_type == OP_READLINE
5666 || expr->op_type == OP_READDIR
5667 || expr->op_type == OP_GLOB
5668 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5669 expr = newUNOP(OP_DEFINED, 0,
5670 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5671 } else if (expr->op_flags & OPf_KIDS) {
5672 const OP * const k1 = ((UNOP*)expr)->op_first;
5673 const OP * const k2 = k1 ? k1->op_sibling : NULL;
5674 switch (expr->op_type) {
5676 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5677 && (k2->op_flags & OPf_STACKED)
5678 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5679 expr = newUNOP(OP_DEFINED, 0, expr);
5683 if (k1 && (k1->op_type == OP_READDIR
5684 || k1->op_type == OP_GLOB
5685 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5686 || k1->op_type == OP_EACH
5687 || k1->op_type == OP_AEACH))
5688 expr = newUNOP(OP_DEFINED, 0, expr);
5694 /* if block is null, the next op_append_elem() would put UNSTACK, a scalar
5695 * op, in listop. This is wrong. [perl #27024] */
5697 block = newOP(OP_NULL, 0);
5698 listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
5699 o = new_logop(OP_AND, 0, &expr, &listop);
5702 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
5704 if (once && o != listop)
5705 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
5708 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
5710 o->op_flags |= flags;
5712 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
5717 =for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my
5719 Constructs, checks, and returns an op tree expressing a C<while> loop.
5720 This is a heavyweight loop, with structure that allows exiting the loop
5721 by C<last> and suchlike.
5723 I<loop> is an optional preconstructed C<enterloop> op to use in the
5724 loop; if it is null then a suitable op will be constructed automatically.
5725 I<expr> supplies the loop's controlling expression. I<block> supplies the
5726 main body of the loop, and I<cont> optionally supplies a C<continue> block
5727 that operates as a second half of the body. All of these optree inputs
5728 are consumed by this function and become part of the constructed op tree.
5730 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5731 op and, shifted up eight bits, the eight bits of C<op_private> for
5732 the C<leaveloop> op, except that (in both cases) some bits will be set
5733 automatically. I<debuggable> is currently unused and should always be 1.
5734 I<has_my> can be supplied as true to force the
5735 loop body to be enclosed in its own scope.
5741 Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
5742 OP *expr, OP *block, OP *cont, I32 has_my)
5751 PERL_UNUSED_ARG(debuggable);
5754 if (expr->op_type == OP_READLINE
5755 || expr->op_type == OP_READDIR
5756 || expr->op_type == OP_GLOB
5757 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5758 expr = newUNOP(OP_DEFINED, 0,
5759 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5760 } else if (expr->op_flags & OPf_KIDS) {
5761 const OP * const k1 = ((UNOP*)expr)->op_first;
5762 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
5763 switch (expr->op_type) {
5765 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5766 && (k2->op_flags & OPf_STACKED)
5767 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5768 expr = newUNOP(OP_DEFINED, 0, expr);
5772 if (k1 && (k1->op_type == OP_READDIR
5773 || k1->op_type == OP_GLOB
5774 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5775 || k1->op_type == OP_EACH
5776 || k1->op_type == OP_AEACH))
5777 expr = newUNOP(OP_DEFINED, 0, expr);
5784 block = newOP(OP_NULL, 0);
5785 else if (cont || has_my) {
5786 block = op_scope(block);
5790 next = LINKLIST(cont);
5793 OP * const unstack = newOP(OP_UNSTACK, 0);
5796 cont = op_append_elem(OP_LINESEQ, cont, unstack);
5800 listop = op_append_list(OP_LINESEQ, block, cont);
5802 redo = LINKLIST(listop);
5806 o = new_logop(OP_AND, 0, &expr, &listop);
5807 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
5808 op_free(expr); /* oops, it's a while (0) */
5810 return NULL; /* listop already freed by new_logop */
5813 ((LISTOP*)listop)->op_last->op_next =
5814 (o == listop ? redo : LINKLIST(o));
5820 NewOp(1101,loop,1,LOOP);
5821 loop->op_type = OP_ENTERLOOP;
5822 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
5823 loop->op_private = 0;
5824 loop->op_next = (OP*)loop;
5827 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
5829 loop->op_redoop = redo;
5830 loop->op_lastop = o;
5831 o->op_private |= loopflags;
5834 loop->op_nextop = next;
5836 loop->op_nextop = o;
5838 o->op_flags |= flags;
5839 o->op_private |= (flags >> 8);
5844 =for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont
5846 Constructs, checks, and returns an op tree expressing a C<foreach>
5847 loop (iteration through a list of values). This is a heavyweight loop,
5848 with structure that allows exiting the loop by C<last> and suchlike.
5850 I<sv> optionally supplies the variable that will be aliased to each
5851 item in turn; if null, it defaults to C<$_> (either lexical or global).
5852 I<expr> supplies the list of values to iterate over. I<block> supplies
5853 the main body of the loop, and I<cont> optionally supplies a C<continue>
5854 block that operates as a second half of the body. All of these optree
5855 inputs are consumed by this function and become part of the constructed
5858 I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5859 op and, shifted up eight bits, the eight bits of C<op_private> for
5860 the C<leaveloop> op, except that (in both cases) some bits will be set
5867 Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
5872 PADOFFSET padoff = 0;
5877 PERL_ARGS_ASSERT_NEWFOROP;
5880 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
5881 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
5882 sv->op_type = OP_RV2GV;
5883 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
5885 /* The op_type check is needed to prevent a possible segfault
5886 * if the loop variable is undeclared and 'strict vars' is in
5887 * effect. This is illegal but is nonetheless parsed, so we
5888 * may reach this point with an OP_CONST where we're expecting
5891 if (cUNOPx(sv)->op_first->op_type == OP_GV
5892 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
5893 iterpflags |= OPpITER_DEF;
5895 else if (sv->op_type == OP_PADSV) { /* private variable */
5896 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
5897 padoff = sv->op_targ;
5907 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
5909 SV *const namesv = PAD_COMPNAME_SV(padoff);
5911 const char *const name = SvPV_const(namesv, len);
5913 if (len == 2 && name[0] == '$' && name[1] == '_')
5914 iterpflags |= OPpITER_DEF;
5918 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
5919 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
5920 sv = newGVOP(OP_GV, 0, PL_defgv);
5925 iterpflags |= OPpITER_DEF;
5927 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
5928 expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
5929 iterflags |= OPf_STACKED;
5931 else if (expr->op_type == OP_NULL &&
5932 (expr->op_flags & OPf_KIDS) &&
5933 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
5935 /* Basically turn for($x..$y) into the same as for($x,$y), but we
5936 * set the STACKED flag to indicate that these values are to be
5937 * treated as min/max values by 'pp_iterinit'.
5939 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
5940 LOGOP* const range = (LOGOP*) flip->op_first;
5941 OP* const left = range->op_first;
5942 OP* const right = left->op_sibling;
5945 range->op_flags &= ~OPf_KIDS;
5946 range->op_first = NULL;
5948 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
5949 listop->op_first->op_next = range->op_next;
5950 left->op_next = range->op_other;
5951 right->op_next = (OP*)listop;
5952 listop->op_next = listop->op_first;
5955 op_getmad(expr,(OP*)listop,'O');
5959 expr = (OP*)(listop);
5961 iterflags |= OPf_STACKED;
5964 expr = op_lvalue(force_list(expr), OP_GREPSTART);
5967 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
5968 op_append_elem(OP_LIST, expr, scalar(sv))));
5969 assert(!loop->op_next);
5970 /* for my $x () sets OPpLVAL_INTRO;
5971 * for our $x () sets OPpOUR_INTRO */
5972 loop->op_private = (U8)iterpflags;
5973 #ifdef PL_OP_SLAB_ALLOC
5976 NewOp(1234,tmp,1,LOOP);
5977 Copy(loop,tmp,1,LISTOP);
5978 S_op_destroy(aTHX_ (OP*)loop);
5982 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
5984 loop->op_targ = padoff;
5985 wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0);
5987 op_getmad(madsv, (OP*)loop, 'v');
5992 =for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
5994 Constructs, checks, and returns a loop-exiting op (such as C<goto>
5995 or C<last>). I<type> is the opcode. I<label> supplies the parameter
5996 determining the target of the op; it is consumed by this function and
5997 become part of the constructed op tree.
6003 Perl_newLOOPEX(pTHX_ I32 type, OP *label)
6008 PERL_ARGS_ASSERT_NEWLOOPEX;
6010 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
6012 if (type != OP_GOTO || label->op_type == OP_CONST) {
6013 /* "last()" means "last" */
6014 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
6015 o = newOP(type, OPf_SPECIAL);
6017 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
6018 ? SvPV_nolen_const(((SVOP*)label)->op_sv)
6022 op_getmad(label,o,'L');
6028 /* Check whether it's going to be a goto &function */
6029 if (label->op_type == OP_ENTERSUB
6030 && !(label->op_flags & OPf_STACKED))
6031 label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN));
6032 o = newUNOP(type, OPf_STACKED, label);
6034 PL_hints |= HINT_BLOCK_SCOPE;
6038 /* if the condition is a literal array or hash
6039 (or @{ ... } etc), make a reference to it.
6042 S_ref_array_or_hash(pTHX_ OP *cond)
6045 && (cond->op_type == OP_RV2AV
6046 || cond->op_type == OP_PADAV
6047 || cond->op_type == OP_RV2HV
6048 || cond->op_type == OP_PADHV))
6050 return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN));
6053 && (cond->op_type == OP_ASLICE
6054 || cond->op_type == OP_HSLICE)) {
6056 /* anonlist now needs a list from this op, was previously used in
6058 cond->op_flags |= ~(OPf_WANT_SCALAR | OPf_REF);
6059 cond->op_flags |= OPf_WANT_LIST;
6061 return newANONLIST(op_lvalue(cond, OP_ANONLIST));
6068 /* These construct the optree fragments representing given()
6071 entergiven and enterwhen are LOGOPs; the op_other pointer
6072 points up to the associated leave op. We need this so we
6073 can put it in the context and make break/continue work.
6074 (Also, of course, pp_enterwhen will jump straight to
6075 op_other if the match fails.)
6079 S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
6080 I32 enter_opcode, I32 leave_opcode,
6081 PADOFFSET entertarg)
6087 PERL_ARGS_ASSERT_NEWGIVWHENOP;
6089 NewOp(1101, enterop, 1, LOGOP);
6090 enterop->op_type = (Optype)enter_opcode;
6091 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
6092 enterop->op_flags = (U8) OPf_KIDS;
6093 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
6094 enterop->op_private = 0;
6096 o = newUNOP(leave_opcode, 0, (OP *) enterop);
6099 enterop->op_first = scalar(cond);
6100 cond->op_sibling = block;
6102 o->op_next = LINKLIST(cond);
6103 cond->op_next = (OP *) enterop;
6106 /* This is a default {} block */
6107 enterop->op_first = block;
6108 enterop->op_flags |= OPf_SPECIAL;
6110 o->op_next = (OP *) enterop;
6113 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
6114 entergiven and enterwhen both
6117 enterop->op_next = LINKLIST(block);
6118 block->op_next = enterop->op_other = o;
6123 /* Does this look like a boolean operation? For these purposes
6124 a boolean operation is:
6125 - a subroutine call [*]
6126 - a logical connective
6127 - a comparison operator
6128 - a filetest operator, with the exception of -s -M -A -C
6129 - defined(), exists() or eof()
6130 - /$re/ or $foo =~ /$re/
6132 [*] possibly surprising
6135 S_looks_like_bool(pTHX_ const OP *o)
6139 PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
6141 switch(o->op_type) {
6144 return looks_like_bool(cLOGOPo->op_first);
6148 looks_like_bool(cLOGOPo->op_first)
6149 && looks_like_bool(cLOGOPo->op_first->op_sibling));
6154 o->op_flags & OPf_KIDS
6155 && looks_like_bool(cUNOPo->op_first));
6159 case OP_NOT: case OP_XOR:
6161 case OP_EQ: case OP_NE: case OP_LT:
6162 case OP_GT: case OP_LE: case OP_GE:
6164 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
6165 case OP_I_GT: case OP_I_LE: case OP_I_GE:
6167 case OP_SEQ: case OP_SNE: case OP_SLT:
6168 case OP_SGT: case OP_SLE: case OP_SGE:
6172 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
6173 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
6174 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
6175 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
6176 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
6177 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
6178 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
6179 case OP_FTTEXT: case OP_FTBINARY:
6181 case OP_DEFINED: case OP_EXISTS:
6182 case OP_MATCH: case OP_EOF:
6189 /* Detect comparisons that have been optimized away */
6190 if (cSVOPo->op_sv == &PL_sv_yes
6191 || cSVOPo->op_sv == &PL_sv_no)
6204 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
6206 Constructs, checks, and returns an op tree expressing a C<given> block.
6207 I<cond> supplies the expression that will be locally assigned to a lexical
6208 variable, and I<block> supplies the body of the C<given> construct; they
6209 are consumed by this function and become part of the constructed op tree.
6210 I<defsv_off> is the pad offset of the scalar lexical variable that will
6217 Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
6220 PERL_ARGS_ASSERT_NEWGIVENOP;
6221 return newGIVWHENOP(
6222 ref_array_or_hash(cond),
6224 OP_ENTERGIVEN, OP_LEAVEGIVEN,
6229 =for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
6231 Constructs, checks, and returns an op tree expressing a C<when> block.
6232 I<cond> supplies the test expression, and I<block> supplies the block
6233 that will be executed if the test evaluates to true; they are consumed
6234 by this function and become part of the constructed op tree. I<cond>
6235 will be interpreted DWIMically, often as a comparison against C<$_>,
6236 and may be null to generate a C<default> block.
6242 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
6244 const bool cond_llb = (!cond || looks_like_bool(cond));
6247 PERL_ARGS_ASSERT_NEWWHENOP;
6252 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
6254 scalar(ref_array_or_hash(cond)));
6257 return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0);
6261 Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
6264 PERL_ARGS_ASSERT_CV_CKPROTO_LEN;
6266 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
6267 || (p && (len != SvCUR(cv) /* Not the same length. */
6268 || memNE(p, SvPVX_const(cv), len))))
6269 && ckWARN_d(WARN_PROTOTYPE)) {
6270 SV* const msg = sv_newmortal();
6274 gv_efullname3(name = sv_newmortal(), gv, NULL);
6275 sv_setpvs(msg, "Prototype mismatch:");
6277 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
6279 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
6281 sv_catpvs(msg, ": none");
6282 sv_catpvs(msg, " vs ");
6284 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
6286 sv_catpvs(msg, "none");
6287 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
6291 static void const_sv_xsub(pTHX_ CV* cv);
6295 =head1 Optree Manipulation Functions
6297 =for apidoc cv_const_sv
6299 If C<cv> is a constant sub eligible for inlining. returns the constant
6300 value returned by the sub. Otherwise, returns NULL.
6302 Constant subs can be created with C<newCONSTSUB> or as described in
6303 L<perlsub/"Constant Functions">.
6308 Perl_cv_const_sv(pTHX_ const CV *const cv)
6310 PERL_UNUSED_CONTEXT;
6313 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
6315 return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
6318 /* op_const_sv: examine an optree to determine whether it's in-lineable.
6319 * Can be called in 3 ways:
6322 * look for a single OP_CONST with attached value: return the value
6324 * cv && CvCLONE(cv) && !CvCONST(cv)
6326 * examine the clone prototype, and if contains only a single
6327 * OP_CONST referencing a pad const, or a single PADSV referencing
6328 * an outer lexical, return a non-zero value to indicate the CV is
6329 * a candidate for "constizing" at clone time
6333 * We have just cloned an anon prototype that was marked as a const
6334 * candidate. Try to grab the current value, and in the case of
6335 * PADSV, ignore it if it has multiple references. Return the value.
6339 Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
6350 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
6351 o = cLISTOPo->op_first->op_sibling;
6353 for (; o; o = o->op_next) {
6354 const OPCODE type = o->op_type;
6356 if (sv && o->op_next == o)
6358 if (o->op_next != o) {
6359 if (type == OP_NEXTSTATE
6360 || (type == OP_NULL && !(o->op_flags & OPf_KIDS))
6361 || type == OP_PUSHMARK)
6363 if (type == OP_DBSTATE)
6366 if (type == OP_LEAVESUB || type == OP_RETURN)
6370 if (type == OP_CONST && cSVOPo->op_sv)
6372 else if (cv && type == OP_CONST) {
6373 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6377 else if (cv && type == OP_PADSV) {
6378 if (CvCONST(cv)) { /* newly cloned anon */
6379 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6380 /* the candidate should have 1 ref from this pad and 1 ref
6381 * from the parent */
6382 if (!sv || SvREFCNT(sv) != 2)
6389 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
6390 sv = &PL_sv_undef; /* an arbitrary non-null value */
6405 Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6408 /* This would be the return value, but the return cannot be reached. */
6409 OP* pegop = newOP(OP_NULL, 0);
6412 PERL_UNUSED_ARG(floor);
6422 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
6424 NORETURN_FUNCTION_END;
6429 Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6434 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
6435 register CV *cv = NULL;
6437 /* If the subroutine has no body, no attributes, and no builtin attributes
6438 then it's just a sub declaration, and we may be able to get away with
6439 storing with a placeholder scalar in the symbol table, rather than a
6440 full GV and CV. If anything is present then it will take a full CV to
6442 const I32 gv_fetch_flags
6443 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6445 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
6446 const char * const name = o ? SvPV_nolen_const(cSVOPo->op_sv) : NULL;
6450 assert(proto->op_type == OP_CONST);
6451 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
6457 gv = gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV);
6459 } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
6460 SV * const sv = sv_newmortal();
6461 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
6462 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
6463 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
6464 gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
6466 } else if (PL_curstash) {
6467 gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
6470 gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
6474 if (!PL_madskills) {
6483 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
6484 maximum a prototype before. */
6485 if (SvTYPE(gv) > SVt_NULL) {
6486 if (!SvPOK((const SV *)gv)
6487 && !(SvIOK((const SV *)gv) && SvIVX((const SV *)gv) == -1))
6489 Perl_ck_warner_d(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
6491 cv_ckproto_len((const CV *)gv, NULL, ps, ps_len);
6494 sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
6496 sv_setiv(MUTABLE_SV(gv), -1);
6498 SvREFCNT_dec(PL_compcv);
6499 cv = PL_compcv = NULL;
6503 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
6505 if (!block || !ps || *ps || attrs
6506 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6508 || block->op_type == OP_NULL
6513 const_sv = op_const_sv(block, NULL);
6516 const bool exists = CvROOT(cv) || CvXSUB(cv);
6518 /* if the subroutine doesn't exist and wasn't pre-declared
6519 * with a prototype, assume it will be AUTOLOADed,
6520 * skipping the prototype check
6522 if (exists || SvPOK(cv))
6523 cv_ckproto_len(cv, gv, ps, ps_len);
6524 /* already defined (or promised)? */
6525 if (exists || GvASSUMECV(gv)) {
6528 || block->op_type == OP_NULL
6531 if (CvFLAGS(PL_compcv)) {
6532 /* might have had built-in attrs applied */
6533 const bool pureperl = !CvISXSUB(cv) && CvROOT(cv);
6534 if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && pureperl
6535 && ckWARN(WARN_MISC))
6536 Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
6538 (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS
6539 & ~(CVf_LVALUE * pureperl));
6541 if (attrs) goto attrs;
6542 /* just a "sub foo;" when &foo is already defined */
6543 SAVEFREESV(PL_compcv);
6548 && block->op_type != OP_NULL
6551 if (ckWARN(WARN_REDEFINE)
6553 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
6555 const line_t oldline = CopLINE(PL_curcop);
6556 if (PL_parser && PL_parser->copline != NOLINE)
6557 CopLINE_set(PL_curcop, PL_parser->copline);
6558 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6559 CvCONST(cv) ? "Constant subroutine %s redefined"
6560 : "Subroutine %s redefined", name);
6561 CopLINE_set(PL_curcop, oldline);
6564 if (!PL_minus_c) /* keep old one around for madskills */
6567 /* (PL_madskills unset in used file.) */
6575 SvREFCNT_inc_simple_void_NN(const_sv);
6577 assert(!CvROOT(cv) && !CvCONST(cv));
6578 sv_setpvs(MUTABLE_SV(cv), ""); /* prototype is "" */
6579 CvXSUBANY(cv).any_ptr = const_sv;
6580 CvXSUB(cv) = const_sv_xsub;
6586 cv = newCONSTSUB(NULL, name, const_sv);
6588 mro_method_changed_in( /* sub Foo::Bar () { 123 } */
6589 (CvGV(cv) && GvSTASH(CvGV(cv)))
6598 SvREFCNT_dec(PL_compcv);
6602 if (cv) { /* must reuse cv if autoloaded */
6603 /* transfer PL_compcv to cv */
6606 && block->op_type != OP_NULL
6609 cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
6610 AV *const temp_av = CvPADLIST(cv);
6611 CV *const temp_cv = CvOUTSIDE(cv);
6613 assert(!CvWEAKOUTSIDE(cv));
6614 assert(!CvCVGV_RC(cv));
6615 assert(CvGV(cv) == gv);
6618 CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs;
6619 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
6620 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
6621 CvPADLIST(cv) = CvPADLIST(PL_compcv);
6622 CvOUTSIDE(PL_compcv) = temp_cv;
6623 CvPADLIST(PL_compcv) = temp_av;
6625 if (CvFILE(cv) && CvDYNFILE(cv)) {
6626 Safefree(CvFILE(cv));
6628 CvFILE_set_from_cop(cv, PL_curcop);
6629 CvSTASH_set(cv, PL_curstash);
6631 /* inner references to PL_compcv must be fixed up ... */
6632 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
6633 if (PERLDB_INTER)/* Advice debugger on the new sub. */
6634 ++PL_sub_generation;
6637 /* Might have had built-in attributes applied -- propagate them. */
6638 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
6640 /* ... before we throw it away */
6641 SvREFCNT_dec(PL_compcv);
6649 if (strEQ(name, "import")) {
6650 PL_formfeed = MUTABLE_SV(cv);
6651 /* diag_listed_as: SKIPME */
6652 Perl_warner(aTHX_ packWARN(WARN_VOID), "0x%"UVxf"\n", PTR2UV(cv));
6656 mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar { (shift)+1 } */
6661 CvFILE_set_from_cop(cv, PL_curcop);
6662 CvSTASH_set(cv, PL_curstash);
6666 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
6667 HV *stash = name && GvSTASH(CvGV(cv)) ? GvSTASH(CvGV(cv)) : PL_curstash;
6668 apply_attrs(stash, MUTABLE_SV(cv), attrs, FALSE);
6672 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
6674 if (PL_parser && PL_parser->error_count) {
6678 const char *s = strrchr(name, ':');
6680 if (strEQ(s, "BEGIN")) {
6681 const char not_safe[] =
6682 "BEGIN not safe after errors--compilation aborted";
6683 if (PL_in_eval & EVAL_KEEPERR)
6684 Perl_croak(aTHX_ not_safe);
6686 /* force display of errors found but not reported */
6687 sv_catpv(ERRSV, not_safe);
6688 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
6697 /* If we assign an optree to a PVCV, then we've defined a subroutine that
6698 the debugger could be able to set a breakpoint in, so signal to
6699 pp_entereval that it should not throw away any saved lines at scope
6702 PL_breakable_sub_gen++;
6703 /* This makes sub {}; work as expected. */
6704 if (block->op_type == OP_STUB) {
6705 OP* const newblock = newSTATEOP(0, NULL, 0);
6707 op_getmad(block,newblock,'B');
6713 else block->op_attached = 1;
6714 CvROOT(cv) = CvLVALUE(cv)
6715 ? newUNOP(OP_LEAVESUBLV, 0,
6716 op_lvalue(scalarseq(block), OP_LEAVESUBLV))
6717 : newUNOP(OP_LEAVESUB, 0, scalarseq(block));
6718 CvROOT(cv)->op_private |= OPpREFCOUNTED;
6719 OpREFCNT_set(CvROOT(cv), 1);
6720 CvSTART(cv) = LINKLIST(CvROOT(cv));
6721 CvROOT(cv)->op_next = 0;
6722 CALL_PEEP(CvSTART(cv));
6723 finalize_optree(CvROOT(cv));
6725 /* now that optimizer has done its work, adjust pad values */
6727 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
6730 assert(!CvCONST(cv));
6731 if (ps && !*ps && op_const_sv(block, cv))
6736 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
6737 SV * const tmpstr = sv_newmortal();
6738 GV * const db_postponed = gv_fetchpvs("DB::postponed",
6739 GV_ADDMULTI, SVt_PVHV);
6741 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
6744 (long)CopLINE(PL_curcop));
6745 gv_efullname3(tmpstr, gv, NULL);
6746 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
6747 SvCUR(tmpstr), sv, 0);
6748 hv = GvHVn(db_postponed);
6749 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
6750 CV * const pcv = GvCV(db_postponed);
6756 call_sv(MUTABLE_SV(pcv), G_DISCARD);
6761 if (name && ! (PL_parser && PL_parser->error_count))
6762 process_special_blocks(name, gv, cv);
6767 PL_parser->copline = NOLINE;
6773 S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
6776 const char *const colon = strrchr(fullname,':');
6777 const char *const name = colon ? colon + 1 : fullname;
6779 PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
6782 if (strEQ(name, "BEGIN")) {
6783 const I32 oldscope = PL_scopestack_ix;
6785 SAVECOPFILE(&PL_compiling);
6786 SAVECOPLINE(&PL_compiling);
6788 DEBUG_x( dump_sub(gv) );
6789 Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
6790 GvCV_set(gv,0); /* cv has been hijacked */
6791 call_list(oldscope, PL_beginav);
6793 PL_curcop = &PL_compiling;
6794 CopHINTS_set(&PL_compiling, PL_hints);
6801 if strEQ(name, "END") {
6802 DEBUG_x( dump_sub(gv) );
6803 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
6806 } else if (*name == 'U') {
6807 if (strEQ(name, "UNITCHECK")) {
6808 /* It's never too late to run a unitcheck block */
6809 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
6813 } else if (*name == 'C') {
6814 if (strEQ(name, "CHECK")) {
6816 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6817 "Too late to run CHECK block");
6818 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
6822 } else if (*name == 'I') {
6823 if (strEQ(name, "INIT")) {
6825 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6826 "Too late to run INIT block");
6827 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
6833 DEBUG_x( dump_sub(gv) );
6834 GvCV_set(gv,0); /* cv has been hijacked */
6839 =for apidoc newCONSTSUB
6841 Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
6842 eligible for inlining at compile-time.
6844 Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
6845 which won't be called if used as a destructor, but will suppress the overhead
6846 of a call to C<AUTOLOAD>. (This form, however, isn't eligible for inlining at
6853 Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
6858 const char *const file = CopFILE(PL_curcop);
6860 SV *const temp_sv = CopFILESV(PL_curcop);
6861 const char *const file = temp_sv ? SvPV_nolen_const(temp_sv) : NULL;
6866 if (IN_PERL_RUNTIME) {
6867 /* at runtime, it's not safe to manipulate PL_curcop: it may be
6868 * an op shared between threads. Use a non-shared COP for our
6870 SAVEVPTR(PL_curcop);
6871 PL_curcop = &PL_compiling;
6873 SAVECOPLINE(PL_curcop);
6874 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
6877 PL_hints &= ~HINT_BLOCK_SCOPE;
6880 SAVESPTR(PL_curstash);
6881 SAVECOPSTASH(PL_curcop);
6882 PL_curstash = stash;
6883 CopSTASH_set(PL_curcop,stash);
6886 /* file becomes the CvFILE. For an XS, it's usually static storage,
6887 and so doesn't get free()d. (It's expected to be from the C pre-
6888 processor __FILE__ directive). But we need a dynamically allocated one,
6889 and we need it to get freed. */
6890 cv = newXS_flags(name, const_sv_xsub, file ? file : "", "",
6891 XS_DYNAMIC_FILENAME);
6892 CvXSUBANY(cv).any_ptr = sv;
6897 CopSTASH_free(PL_curcop);
6905 Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
6906 const char *const filename, const char *const proto,
6909 CV *cv = newXS(name, subaddr, filename);
6911 PERL_ARGS_ASSERT_NEWXS_FLAGS;
6913 if (flags & XS_DYNAMIC_FILENAME) {
6914 CvFILE(cv) = savepv(filename);
6917 sv_setpv(MUTABLE_SV(cv), proto);
6922 =for apidoc U||newXS
6924 Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
6925 static storage, as it is used directly as CvFILE(), without a copy being made.
6931 Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
6934 GV * const gv = gv_fetchpv(name ? name :
6935 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
6936 GV_ADDMULTI, SVt_PVCV);
6939 PERL_ARGS_ASSERT_NEWXS;
6942 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
6944 if ((cv = (name ? GvCV(gv) : NULL))) {
6946 /* just a cached method */
6950 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
6951 /* already defined (or promised) */
6952 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
6953 if (ckWARN(WARN_REDEFINE)) {
6954 GV * const gvcv = CvGV(cv);
6956 HV * const stash = GvSTASH(gvcv);
6958 const char *redefined_name = HvNAME_get(stash);
6959 if ( strEQ(redefined_name,"autouse") ) {
6960 const line_t oldline = CopLINE(PL_curcop);
6961 if (PL_parser && PL_parser->copline != NOLINE)
6962 CopLINE_set(PL_curcop, PL_parser->copline);
6963 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6964 CvCONST(cv) ? "Constant subroutine %s redefined"
6965 : "Subroutine %s redefined"
6967 CopLINE_set(PL_curcop, oldline);
6977 if (cv) /* must reuse cv if autoloaded */
6980 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
6984 mro_method_changed_in(GvSTASH(gv)); /* newXS */
6990 (void)gv_fetchfile(filename);
6991 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
6992 an external constant string */
6993 assert(!CvDYNFILE(cv)); /* cv_undef should have turned it off */
6995 CvXSUB(cv) = subaddr;
6998 process_special_blocks(name, gv, cv);
7008 Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
7013 OP* pegop = newOP(OP_NULL, 0);
7017 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
7018 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
7021 if ((cv = GvFORM(gv))) {
7022 if (ckWARN(WARN_REDEFINE)) {
7023 const line_t oldline = CopLINE(PL_curcop);
7024 if (PL_parser && PL_parser->copline != NOLINE)
7025 CopLINE_set(PL_curcop, PL_parser->copline);
7027 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
7028 "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
7030 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
7031 "Format STDOUT redefined");
7033 CopLINE_set(PL_curcop, oldline);
7040 CvFILE_set_from_cop(cv, PL_curcop);
7043 pad_tidy(padtidy_FORMAT);
7044 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
7045 CvROOT(cv)->op_private |= OPpREFCOUNTED;
7046 OpREFCNT_set(CvROOT(cv), 1);
7047 CvSTART(cv) = LINKLIST(CvROOT(cv));
7048 CvROOT(cv)->op_next = 0;
7049 CALL_PEEP(CvSTART(cv));
7050 finalize_optree(CvROOT(cv));
7052 op_getmad(o,pegop,'n');
7053 op_getmad_weak(block, pegop, 'b');
7058 PL_parser->copline = NOLINE;
7066 Perl_newANONLIST(pTHX_ OP *o)
7068 return convert(OP_ANONLIST, OPf_SPECIAL, o);
7072 Perl_newANONHASH(pTHX_ OP *o)
7074 return convert(OP_ANONHASH, OPf_SPECIAL, o);
7078 Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
7080 return newANONATTRSUB(floor, proto, NULL, block);
7084 Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
7086 return newUNOP(OP_REFGEN, 0,
7087 newSVOP(OP_ANONCODE, 0,
7088 MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block))));
7092 Perl_oopsAV(pTHX_ OP *o)
7096 PERL_ARGS_ASSERT_OOPSAV;
7098 switch (o->op_type) {
7100 o->op_type = OP_PADAV;
7101 o->op_ppaddr = PL_ppaddr[OP_PADAV];
7102 return ref(o, OP_RV2AV);
7105 o->op_type = OP_RV2AV;
7106 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
7111 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
7118 Perl_oopsHV(pTHX_ OP *o)
7122 PERL_ARGS_ASSERT_OOPSHV;
7124 switch (o->op_type) {
7127 o->op_type = OP_PADHV;
7128 o->op_ppaddr = PL_ppaddr[OP_PADHV];
7129 return ref(o, OP_RV2HV);
7133 o->op_type = OP_RV2HV;
7134 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
7139 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
7146 Perl_newAVREF(pTHX_ OP *o)
7150 PERL_ARGS_ASSERT_NEWAVREF;
7152 if (o->op_type == OP_PADANY) {
7153 o->op_type = OP_PADAV;
7154 o->op_ppaddr = PL_ppaddr[OP_PADAV];
7157 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
7158 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7159 "Using an array as a reference is deprecated");
7161 return newUNOP(OP_RV2AV, 0, scalar(o));
7165 Perl_newGVREF(pTHX_ I32 type, OP *o)
7167 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
7168 return newUNOP(OP_NULL, 0, o);
7169 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
7173 Perl_newHVREF(pTHX_ OP *o)
7177 PERL_ARGS_ASSERT_NEWHVREF;
7179 if (o->op_type == OP_PADANY) {
7180 o->op_type = OP_PADHV;
7181 o->op_ppaddr = PL_ppaddr[OP_PADHV];
7184 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
7185 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7186 "Using a hash as a reference is deprecated");
7188 return newUNOP(OP_RV2HV, 0, scalar(o));
7192 Perl_newCVREF(pTHX_ I32 flags, OP *o)
7194 return newUNOP(OP_RV2CV, flags, scalar(o));
7198 Perl_newSVREF(pTHX_ OP *o)
7202 PERL_ARGS_ASSERT_NEWSVREF;
7204 if (o->op_type == OP_PADANY) {
7205 o->op_type = OP_PADSV;
7206 o->op_ppaddr = PL_ppaddr[OP_PADSV];
7209 return newUNOP(OP_RV2SV, 0, scalar(o));
7212 /* Check routines. See the comments at the top of this file for details
7213 * on when these are called */
7216 Perl_ck_anoncode(pTHX_ OP *o)
7218 PERL_ARGS_ASSERT_CK_ANONCODE;
7220 cSVOPo->op_targ = pad_add_anon((CV*)cSVOPo->op_sv, o->op_type);
7222 cSVOPo->op_sv = NULL;
7227 Perl_ck_bitop(pTHX_ OP *o)
7231 PERL_ARGS_ASSERT_CK_BITOP;
7233 #define OP_IS_NUMCOMPARE(op) \
7234 ((op) == OP_LT || (op) == OP_I_LT || \
7235 (op) == OP_GT || (op) == OP_I_GT || \
7236 (op) == OP_LE || (op) == OP_I_LE || \
7237 (op) == OP_GE || (op) == OP_I_GE || \
7238 (op) == OP_EQ || (op) == OP_I_EQ || \
7239 (op) == OP_NE || (op) == OP_I_NE || \
7240 (op) == OP_NCMP || (op) == OP_I_NCMP)
7241 o->op_private = (U8)(PL_hints & HINT_INTEGER);
7242 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
7243 && (o->op_type == OP_BIT_OR
7244 || o->op_type == OP_BIT_AND
7245 || o->op_type == OP_BIT_XOR))
7247 const OP * const left = cBINOPo->op_first;
7248 const OP * const right = left->op_sibling;
7249 if ((OP_IS_NUMCOMPARE(left->op_type) &&
7250 (left->op_flags & OPf_PARENS) == 0) ||
7251 (OP_IS_NUMCOMPARE(right->op_type) &&
7252 (right->op_flags & OPf_PARENS) == 0))
7253 Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
7254 "Possible precedence problem on bitwise %c operator",
7255 o->op_type == OP_BIT_OR ? '|'
7256 : o->op_type == OP_BIT_AND ? '&' : '^'
7263 Perl_ck_concat(pTHX_ OP *o)
7265 const OP * const kid = cUNOPo->op_first;
7267 PERL_ARGS_ASSERT_CK_CONCAT;
7268 PERL_UNUSED_CONTEXT;
7270 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
7271 !(kUNOP->op_first->op_flags & OPf_MOD))
7272 o->op_flags |= OPf_STACKED;
7277 Perl_ck_spair(pTHX_ OP *o)
7281 PERL_ARGS_ASSERT_CK_SPAIR;
7283 if (o->op_flags & OPf_KIDS) {
7286 const OPCODE type = o->op_type;
7287 o = modkids(ck_fun(o), type);
7288 kid = cUNOPo->op_first;
7289 newop = kUNOP->op_first->op_sibling;
7291 const OPCODE type = newop->op_type;
7292 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
7293 type == OP_PADAV || type == OP_PADHV ||
7294 type == OP_RV2AV || type == OP_RV2HV)
7298 op_getmad(kUNOP->op_first,newop,'K');
7300 op_free(kUNOP->op_first);
7302 kUNOP->op_first = newop;
7304 o->op_ppaddr = PL_ppaddr[++o->op_type];
7309 Perl_ck_delete(pTHX_ OP *o)
7311 PERL_ARGS_ASSERT_CK_DELETE;
7315 if (o->op_flags & OPf_KIDS) {
7316 OP * const kid = cUNOPo->op_first;
7317 switch (kid->op_type) {
7319 o->op_flags |= OPf_SPECIAL;
7322 o->op_private |= OPpSLICE;
7325 o->op_flags |= OPf_SPECIAL;
7330 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
7333 if (kid->op_private & OPpLVAL_INTRO)
7334 o->op_private |= OPpLVAL_INTRO;
7341 Perl_ck_die(pTHX_ OP *o)
7343 PERL_ARGS_ASSERT_CK_DIE;
7346 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7352 Perl_ck_eof(pTHX_ OP *o)
7356 PERL_ARGS_ASSERT_CK_EOF;
7358 if (o->op_flags & OPf_KIDS) {
7359 if (cLISTOPo->op_first->op_type == OP_STUB) {
7361 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
7363 op_getmad(o,newop,'O');
7375 Perl_ck_eval(pTHX_ OP *o)
7379 PERL_ARGS_ASSERT_CK_EVAL;
7381 PL_hints |= HINT_BLOCK_SCOPE;
7382 if (o->op_flags & OPf_KIDS) {
7383 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7386 o->op_flags &= ~OPf_KIDS;
7389 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
7395 cUNOPo->op_first = 0;
7400 NewOp(1101, enter, 1, LOGOP);
7401 enter->op_type = OP_ENTERTRY;
7402 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
7403 enter->op_private = 0;
7405 /* establish postfix order */
7406 enter->op_next = (OP*)enter;
7408 o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
7409 o->op_type = OP_LEAVETRY;
7410 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
7411 enter->op_other = o;
7412 op_getmad(oldo,o,'O');
7426 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
7427 op_getmad(oldo,o,'O');
7429 o->op_targ = (PADOFFSET)PL_hints;
7430 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
7431 /* Store a copy of %^H that pp_entereval can pick up. */
7432 OP *hhop = newSVOP(OP_HINTSEVAL, 0,
7433 MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv))));
7434 cUNOPo->op_first->op_sibling = hhop;
7435 o->op_private |= OPpEVAL_HAS_HH;
7441 Perl_ck_exit(pTHX_ OP *o)
7443 PERL_ARGS_ASSERT_CK_EXIT;
7446 HV * const table = GvHV(PL_hintgv);
7448 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
7449 if (svp && *svp && SvTRUE(*svp))
7450 o->op_private |= OPpEXIT_VMSISH;
7452 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7458 Perl_ck_exec(pTHX_ OP *o)
7460 PERL_ARGS_ASSERT_CK_EXEC;
7462 if (o->op_flags & OPf_STACKED) {
7465 kid = cUNOPo->op_first->op_sibling;
7466 if (kid->op_type == OP_RV2GV)
7475 Perl_ck_exists(pTHX_ OP *o)
7479 PERL_ARGS_ASSERT_CK_EXISTS;
7482 if (o->op_flags & OPf_KIDS) {
7483 OP * const kid = cUNOPo->op_first;
7484 if (kid->op_type == OP_ENTERSUB) {
7485 (void) ref(kid, o->op_type);
7486 if (kid->op_type != OP_RV2CV
7487 && !(PL_parser && PL_parser->error_count))
7488 Perl_croak(aTHX_ "%s argument is not a subroutine name",
7490 o->op_private |= OPpEXISTS_SUB;
7492 else if (kid->op_type == OP_AELEM)
7493 o->op_flags |= OPf_SPECIAL;
7494 else if (kid->op_type != OP_HELEM)
7495 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or a subroutine",
7503 Perl_ck_rvconst(pTHX_ register OP *o)
7506 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7508 PERL_ARGS_ASSERT_CK_RVCONST;
7510 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7511 if (o->op_type == OP_RV2CV)
7512 o->op_private &= ~1;
7514 if (kid->op_type == OP_CONST) {
7517 SV * const kidsv = kid->op_sv;
7519 /* Is it a constant from cv_const_sv()? */
7520 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
7521 SV * const rsv = SvRV(kidsv);
7522 const svtype type = SvTYPE(rsv);
7523 const char *badtype = NULL;
7525 switch (o->op_type) {
7527 if (type > SVt_PVMG)
7528 badtype = "a SCALAR";
7531 if (type != SVt_PVAV)
7532 badtype = "an ARRAY";
7535 if (type != SVt_PVHV)
7539 if (type != SVt_PVCV)
7544 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
7547 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
7548 const char *badthing;
7549 switch (o->op_type) {
7551 badthing = "a SCALAR";
7554 badthing = "an ARRAY";
7557 badthing = "a HASH";
7565 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
7566 SVfARG(kidsv), badthing);
7569 * This is a little tricky. We only want to add the symbol if we
7570 * didn't add it in the lexer. Otherwise we get duplicate strict
7571 * warnings. But if we didn't add it in the lexer, we must at
7572 * least pretend like we wanted to add it even if it existed before,
7573 * or we get possible typo warnings. OPpCONST_ENTERED says
7574 * whether the lexer already added THIS instance of this symbol.
7576 iscv = (o->op_type == OP_RV2CV) * 2;
7578 gv = gv_fetchsv(kidsv,
7579 iscv | !(kid->op_private & OPpCONST_ENTERED),
7582 : o->op_type == OP_RV2SV
7584 : o->op_type == OP_RV2AV
7586 : o->op_type == OP_RV2HV
7589 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
7591 kid->op_type = OP_GV;
7592 SvREFCNT_dec(kid->op_sv);
7594 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
7595 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
7596 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
7598 PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
7600 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
7602 kid->op_private = 0;
7603 kid->op_ppaddr = PL_ppaddr[OP_GV];
7604 /* FAKE globs in the symbol table cause weird bugs (#77810) */
7612 Perl_ck_ftst(pTHX_ OP *o)
7615 const I32 type = o->op_type;
7617 PERL_ARGS_ASSERT_CK_FTST;
7619 if (o->op_flags & OPf_REF) {
7622 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
7623 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7624 const OPCODE kidtype = kid->op_type;
7626 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7627 OP * const newop = newGVOP(type, OPf_REF,
7628 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
7630 op_getmad(o,newop,'O');
7636 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
7637 o->op_private |= OPpFT_ACCESS;
7638 if (PL_check[kidtype] == Perl_ck_ftst
7639 && kidtype != OP_STAT && kidtype != OP_LSTAT) {
7640 o->op_private |= OPpFT_STACKED;
7641 kid->op_private |= OPpFT_STACKING;
7650 if (type == OP_FTTTY)
7651 o = newGVOP(type, OPf_REF, PL_stdingv);
7653 o = newUNOP(type, 0, newDEFSVOP());
7654 op_getmad(oldo,o,'O');
7660 Perl_ck_fun(pTHX_ OP *o)
7663 const int type = o->op_type;
7664 register I32 oa = PL_opargs[type] >> OASHIFT;
7666 PERL_ARGS_ASSERT_CK_FUN;
7668 if (o->op_flags & OPf_STACKED) {
7669 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
7672 return no_fh_allowed(o);
7675 if (o->op_flags & OPf_KIDS) {
7676 OP **tokid = &cLISTOPo->op_first;
7677 register OP *kid = cLISTOPo->op_first;
7680 bool seen_optional = FALSE;
7682 if (kid->op_type == OP_PUSHMARK ||
7683 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
7685 tokid = &kid->op_sibling;
7686 kid = kid->op_sibling;
7688 if (kid && kid->op_type == OP_COREARGS) {
7689 bool optional = FALSE;
7692 if (oa & OA_OPTIONAL) optional = TRUE;
7695 if (optional) o->op_private |= numargs;
7700 if (oa & OA_OPTIONAL || (oa & 7) == OA_LIST) {
7701 if (!kid && !seen_optional && PL_opargs[type] & OA_DEFGV)
7702 *tokid = kid = newDEFSVOP();
7703 seen_optional = TRUE;
7708 sibl = kid->op_sibling;
7710 if (!sibl && kid->op_type == OP_STUB) {
7717 /* list seen where single (scalar) arg expected? */
7718 if (numargs == 1 && !(oa >> 4)
7719 && kid->op_type == OP_LIST && type != OP_SCALAR)
7721 return too_many_arguments(o,PL_op_desc[type]);
7734 if ((type == OP_PUSH || type == OP_UNSHIFT)
7735 && !kid->op_sibling)
7736 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
7737 "Useless use of %s with no values",
7740 if (kid->op_type == OP_CONST &&
7741 (kid->op_private & OPpCONST_BARE))
7743 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
7744 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
7745 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7746 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
7747 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7749 op_getmad(kid,newop,'K');
7754 kid->op_sibling = sibl;
7757 else if (kid->op_type == OP_CONST
7758 && ( !SvROK(cSVOPx_sv(kid))
7759 || SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV )
7761 bad_type(numargs, "array", PL_op_desc[type], kid);
7762 /* Defer checks to run-time if we have a scalar arg */
7763 if (kid->op_type == OP_RV2AV || kid->op_type == OP_PADAV)
7764 op_lvalue(kid, type);
7768 if (kid->op_type == OP_CONST &&
7769 (kid->op_private & OPpCONST_BARE))
7771 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
7772 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
7773 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7774 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
7775 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7777 op_getmad(kid,newop,'K');
7782 kid->op_sibling = sibl;
7785 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
7786 bad_type(numargs, "hash", PL_op_desc[type], kid);
7787 op_lvalue(kid, type);
7791 OP * const newop = newUNOP(OP_NULL, 0, kid);
7792 kid->op_sibling = 0;
7794 newop->op_next = newop;
7796 kid->op_sibling = sibl;
7801 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
7802 if (kid->op_type == OP_CONST &&
7803 (kid->op_private & OPpCONST_BARE))
7805 OP * const newop = newGVOP(OP_GV, 0,
7806 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
7807 if (!(o->op_private & 1) && /* if not unop */
7808 kid == cLISTOPo->op_last)
7809 cLISTOPo->op_last = newop;
7811 op_getmad(kid,newop,'K');
7817 else if (kid->op_type == OP_READLINE) {
7818 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
7819 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
7822 I32 flags = OPf_SPECIAL;
7826 /* is this op a FH constructor? */
7827 if (is_handle_constructor(o,numargs)) {
7828 const char *name = NULL;
7832 /* Set a flag to tell rv2gv to vivify
7833 * need to "prove" flag does not mean something
7834 * else already - NI-S 1999/05/07
7837 if (kid->op_type == OP_PADSV) {
7839 = PAD_COMPNAME_SV(kid->op_targ);
7840 name = SvPV_const(namesv, len);
7842 else if (kid->op_type == OP_RV2SV
7843 && kUNOP->op_first->op_type == OP_GV)
7845 GV * const gv = cGVOPx_gv(kUNOP->op_first);
7847 len = GvNAMELEN(gv);
7849 else if (kid->op_type == OP_AELEM
7850 || kid->op_type == OP_HELEM)
7853 OP *op = ((BINOP*)kid)->op_first;
7857 const char * const a =
7858 kid->op_type == OP_AELEM ?
7860 if (((op->op_type == OP_RV2AV) ||
7861 (op->op_type == OP_RV2HV)) &&
7862 (firstop = ((UNOP*)op)->op_first) &&
7863 (firstop->op_type == OP_GV)) {
7864 /* packagevar $a[] or $h{} */
7865 GV * const gv = cGVOPx_gv(firstop);
7873 else if (op->op_type == OP_PADAV
7874 || op->op_type == OP_PADHV) {
7875 /* lexicalvar $a[] or $h{} */
7876 const char * const padname =
7877 PAD_COMPNAME_PV(op->op_targ);
7886 name = SvPV_const(tmpstr, len);
7891 name = "__ANONIO__";
7894 op_lvalue(kid, type);
7898 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
7899 namesv = PAD_SVl(targ);
7900 SvUPGRADE(namesv, SVt_PV);
7902 sv_setpvs(namesv, "$");
7903 sv_catpvn(namesv, name, len);
7906 kid->op_sibling = 0;
7907 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
7908 kid->op_targ = targ;
7909 kid->op_private |= priv;
7911 kid->op_sibling = sibl;
7917 op_lvalue(scalar(kid), type);
7921 tokid = &kid->op_sibling;
7922 kid = kid->op_sibling;
7925 if (kid && kid->op_type != OP_STUB)
7926 return too_many_arguments(o,OP_DESC(o));
7927 o->op_private |= numargs;
7929 /* FIXME - should the numargs move as for the PERL_MAD case? */
7930 o->op_private |= numargs;
7932 return too_many_arguments(o,OP_DESC(o));
7936 else if (PL_opargs[type] & OA_DEFGV) {
7938 OP *newop = newUNOP(type, 0, newDEFSVOP());
7939 op_getmad(o,newop,'O');
7942 /* Ordering of these two is important to keep f_map.t passing. */
7944 return newUNOP(type, 0, newDEFSVOP());
7949 while (oa & OA_OPTIONAL)
7951 if (oa && oa != OA_LIST)
7952 return too_few_arguments(o,OP_DESC(o));
7958 Perl_ck_glob(pTHX_ OP *o)
7963 PERL_ARGS_ASSERT_CK_GLOB;
7966 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
7967 op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */
7969 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
7970 && GvCVu(gv) && GvIMPORTED_CV(gv)))
7972 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7975 #if !defined(PERL_EXTERNAL_GLOB)
7976 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7979 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
7980 newSVpvs("File::Glob"), NULL, NULL, NULL);
7981 if((glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV))) {
7982 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7983 GvCV_set(gv, GvCV(glob_gv));
7984 SvREFCNT_inc_void(MUTABLE_SV(GvCV(gv)));
7985 GvIMPORTED_CV_on(gv);
7989 #endif /* PERL_EXTERNAL_GLOB */
7991 assert(!(o->op_flags & OPf_SPECIAL));
7992 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7995 * \ null - const(wildcard)
8000 * \ mark - glob - rv2cv
8001 * | \ gv(CORE::GLOBAL::glob)
8003 * \ null - const(wildcard) - const(ix)
8005 o->op_flags |= OPf_SPECIAL;
8006 o->op_targ = pad_alloc(OP_GLOB, SVs_PADTMP);
8007 op_append_elem(OP_GLOB, o,
8008 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
8009 o = newLISTOP(OP_LIST, 0, o, NULL);
8010 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
8011 op_append_elem(OP_LIST, o,
8012 scalar(newUNOP(OP_RV2CV, 0,
8013 newGVOP(OP_GV, 0, gv)))));
8014 o = newUNOP(OP_NULL, 0, ck_subr(o));
8015 o->op_targ = OP_GLOB; /* hint at what it used to be: eg in newWHILEOP */
8018 gv = newGVgen("main");
8020 op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
8026 Perl_ck_grep(pTHX_ OP *o)
8031 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
8034 PERL_ARGS_ASSERT_CK_GREP;
8036 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
8037 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
8039 if (o->op_flags & OPf_STACKED) {
8042 kid = cUNOPx(cLISTOPo->op_first->op_sibling)->op_first;
8043 if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
8044 return no_fh_allowed(o);
8045 for (k = kid; k; k = k->op_next) {
8048 NewOp(1101, gwop, 1, LOGOP);
8049 kid->op_next = (OP*)gwop;
8050 o->op_flags &= ~OPf_STACKED;
8052 kid = cLISTOPo->op_first->op_sibling;
8053 if (type == OP_MAPWHILE)
8058 if (PL_parser && PL_parser->error_count)
8060 kid = cLISTOPo->op_first->op_sibling;
8061 if (kid->op_type != OP_NULL)
8062 Perl_croak(aTHX_ "panic: ck_grep");
8063 kid = kUNOP->op_first;
8066 NewOp(1101, gwop, 1, LOGOP);
8067 gwop->op_type = type;
8068 gwop->op_ppaddr = PL_ppaddr[type];
8069 gwop->op_first = listkids(o);
8070 gwop->op_flags |= OPf_KIDS;
8071 gwop->op_other = LINKLIST(kid);
8072 kid->op_next = (OP*)gwop;
8073 offset = pad_findmy_pvs("$_", 0);
8074 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
8075 o->op_private = gwop->op_private = 0;
8076 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
8079 o->op_private = gwop->op_private = OPpGREP_LEX;
8080 gwop->op_targ = o->op_targ = offset;
8083 kid = cLISTOPo->op_first->op_sibling;
8084 if (!kid || !kid->op_sibling)
8085 return too_few_arguments(o,OP_DESC(o));
8086 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
8087 op_lvalue(kid, OP_GREPSTART);
8093 Perl_ck_index(pTHX_ OP *o)
8095 PERL_ARGS_ASSERT_CK_INDEX;
8097 if (o->op_flags & OPf_KIDS) {
8098 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8100 kid = kid->op_sibling; /* get past "big" */
8101 if (kid && kid->op_type == OP_CONST) {
8102 const bool save_taint = PL_tainted;
8103 fbm_compile(((SVOP*)kid)->op_sv, 0);
8104 PL_tainted = save_taint;
8111 Perl_ck_lfun(pTHX_ OP *o)
8113 const OPCODE type = o->op_type;
8115 PERL_ARGS_ASSERT_CK_LFUN;
8117 return modkids(ck_fun(o), type);
8121 Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
8123 PERL_ARGS_ASSERT_CK_DEFINED;
8125 if ((o->op_flags & OPf_KIDS)) {
8126 switch (cUNOPo->op_first->op_type) {
8128 /* This is needed for
8129 if (defined %stash::)
8130 to work. Do not break Tk.
8132 break; /* Globals via GV can be undef */
8134 case OP_AASSIGN: /* Is this a good idea? */
8135 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8136 "defined(@array) is deprecated");
8137 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8138 "\t(Maybe you should just omit the defined()?)\n");
8142 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8143 "defined(%%hash) is deprecated");
8144 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
8145 "\t(Maybe you should just omit the defined()?)\n");
8156 Perl_ck_readline(pTHX_ OP *o)
8158 PERL_ARGS_ASSERT_CK_READLINE;
8160 if (!(o->op_flags & OPf_KIDS)) {
8162 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
8164 op_getmad(o,newop,'O');
8174 Perl_ck_rfun(pTHX_ OP *o)
8176 const OPCODE type = o->op_type;
8178 PERL_ARGS_ASSERT_CK_RFUN;
8180 return refkids(ck_fun(o), type);
8184 Perl_ck_listiob(pTHX_ OP *o)
8188 PERL_ARGS_ASSERT_CK_LISTIOB;
8190 kid = cLISTOPo->op_first;
8193 kid = cLISTOPo->op_first;
8195 if (kid->op_type == OP_PUSHMARK)
8196 kid = kid->op_sibling;
8197 if (kid && o->op_flags & OPf_STACKED)
8198 kid = kid->op_sibling;
8199 else if (kid && !kid->op_sibling) { /* print HANDLE; */
8200 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
8201 o->op_flags |= OPf_STACKED; /* make it a filehandle */
8202 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
8203 cLISTOPo->op_first->op_sibling = kid;
8204 cLISTOPo->op_last = kid;
8205 kid = kid->op_sibling;
8210 op_append_elem(o->op_type, o, newDEFSVOP());
8216 Perl_ck_smartmatch(pTHX_ OP *o)
8219 PERL_ARGS_ASSERT_CK_SMARTMATCH;
8220 if (0 == (o->op_flags & OPf_SPECIAL)) {
8221 OP *first = cBINOPo->op_first;
8222 OP *second = first->op_sibling;
8224 /* Implicitly take a reference to an array or hash */
8225 first->op_sibling = NULL;
8226 first = cBINOPo->op_first = ref_array_or_hash(first);
8227 second = first->op_sibling = ref_array_or_hash(second);
8229 /* Implicitly take a reference to a regular expression */
8230 if (first->op_type == OP_MATCH) {
8231 first->op_type = OP_QR;
8232 first->op_ppaddr = PL_ppaddr[OP_QR];
8234 if (second->op_type == OP_MATCH) {
8235 second->op_type = OP_QR;
8236 second->op_ppaddr = PL_ppaddr[OP_QR];
8245 Perl_ck_sassign(pTHX_ OP *o)
8248 OP * const kid = cLISTOPo->op_first;
8250 PERL_ARGS_ASSERT_CK_SASSIGN;
8252 /* has a disposable target? */
8253 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
8254 && !(kid->op_flags & OPf_STACKED)
8255 /* Cannot steal the second time! */
8256 && !(kid->op_private & OPpTARGET_MY)
8257 /* Keep the full thing for madskills */
8261 OP * const kkid = kid->op_sibling;
8263 /* Can just relocate the target. */
8264 if (kkid && kkid->op_type == OP_PADSV
8265 && !(kkid->op_private & OPpLVAL_INTRO))
8267 kid->op_targ = kkid->op_targ;
8269 /* Now we do not need PADSV and SASSIGN. */
8270 kid->op_sibling = o->op_sibling; /* NULL */
8271 cLISTOPo->op_first = NULL;
8274 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
8278 if (kid->op_sibling) {
8279 OP *kkid = kid->op_sibling;
8280 /* For state variable assignment, kkid is a list op whose op_last
8282 if ((kkid->op_type == OP_PADSV ||
8283 (kkid->op_type == OP_LIST &&
8284 (kkid = cLISTOPx(kkid)->op_last)->op_type == OP_PADSV
8287 && (kkid->op_private & OPpLVAL_INTRO)
8288 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
8289 const PADOFFSET target = kkid->op_targ;
8290 OP *const other = newOP(OP_PADSV,
8292 | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
8293 OP *const first = newOP(OP_NULL, 0);
8294 OP *const nullop = newCONDOP(0, first, o, other);
8295 OP *const condop = first->op_next;
8296 /* hijacking PADSTALE for uninitialized state variables */
8297 SvPADSTALE_on(PAD_SVl(target));
8299 condop->op_type = OP_ONCE;
8300 condop->op_ppaddr = PL_ppaddr[OP_ONCE];
8301 condop->op_targ = target;
8302 other->op_targ = target;
8304 /* Because we change the type of the op here, we will skip the
8305 assignment binop->op_last = binop->op_first->op_sibling; at the
8306 end of Perl_newBINOP(). So need to do it here. */
8307 cBINOPo->op_last = cBINOPo->op_first->op_sibling;
8316 Perl_ck_match(pTHX_ OP *o)
8320 PERL_ARGS_ASSERT_CK_MATCH;
8322 if (o->op_type != OP_QR && PL_compcv) {
8323 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
8324 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
8325 o->op_targ = offset;
8326 o->op_private |= OPpTARGET_MY;
8329 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
8330 o->op_private |= OPpRUNTIME;
8335 Perl_ck_method(pTHX_ OP *o)
8337 OP * const kid = cUNOPo->op_first;
8339 PERL_ARGS_ASSERT_CK_METHOD;
8341 if (kid->op_type == OP_CONST) {
8342 SV* sv = kSVOP->op_sv;
8343 const char * const method = SvPVX_const(sv);
8344 if (!(strchr(method, ':') || strchr(method, '\''))) {
8346 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
8347 sv = newSVpvn_share(method, SvCUR(sv), 0);
8350 kSVOP->op_sv = NULL;
8352 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
8354 op_getmad(o,cmop,'O');
8365 Perl_ck_null(pTHX_ OP *o)
8367 PERL_ARGS_ASSERT_CK_NULL;
8368 PERL_UNUSED_CONTEXT;
8373 Perl_ck_open(pTHX_ OP *o)
8376 HV * const table = GvHV(PL_hintgv);
8378 PERL_ARGS_ASSERT_CK_OPEN;
8381 SV **svp = hv_fetchs(table, "open_IN", FALSE);
8384 const char *d = SvPV_const(*svp, len);
8385 const I32 mode = mode_from_discipline(d, len);
8386 if (mode & O_BINARY)
8387 o->op_private |= OPpOPEN_IN_RAW;
8388 else if (mode & O_TEXT)
8389 o->op_private |= OPpOPEN_IN_CRLF;
8392 svp = hv_fetchs(table, "open_OUT", FALSE);
8395 const char *d = SvPV_const(*svp, len);
8396 const I32 mode = mode_from_discipline(d, len);
8397 if (mode & O_BINARY)
8398 o->op_private |= OPpOPEN_OUT_RAW;
8399 else if (mode & O_TEXT)
8400 o->op_private |= OPpOPEN_OUT_CRLF;
8403 if (o->op_type == OP_BACKTICK) {
8404 if (!(o->op_flags & OPf_KIDS)) {
8405 OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
8407 op_getmad(o,newop,'O');
8416 /* In case of three-arg dup open remove strictness
8417 * from the last arg if it is a bareword. */
8418 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
8419 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
8423 if ((last->op_type == OP_CONST) && /* The bareword. */
8424 (last->op_private & OPpCONST_BARE) &&
8425 (last->op_private & OPpCONST_STRICT) &&
8426 (oa = first->op_sibling) && /* The fh. */
8427 (oa = oa->op_sibling) && /* The mode. */
8428 (oa->op_type == OP_CONST) &&
8429 SvPOK(((SVOP*)oa)->op_sv) &&
8430 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
8431 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
8432 (last == oa->op_sibling)) /* The bareword. */
8433 last->op_private &= ~OPpCONST_STRICT;
8439 Perl_ck_repeat(pTHX_ OP *o)
8441 PERL_ARGS_ASSERT_CK_REPEAT;
8443 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
8444 o->op_private |= OPpREPEAT_DOLIST;
8445 cBINOPo->op_first = force_list(cBINOPo->op_first);
8453 Perl_ck_require(pTHX_ OP *o)
8458 PERL_ARGS_ASSERT_CK_REQUIRE;
8460 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
8461 SVOP * const kid = (SVOP*)cUNOPo->op_first;
8463 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
8464 SV * const sv = kid->op_sv;
8465 U32 was_readonly = SvREADONLY(sv);
8472 sv_force_normal_flags(sv, 0);
8473 assert(!SvREADONLY(sv));
8483 for (; s < end; s++) {
8484 if (*s == ':' && s[1] == ':') {
8486 Move(s+2, s+1, end - s - 1, char);
8491 sv_catpvs(sv, ".pm");
8492 SvFLAGS(sv) |= was_readonly;
8496 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
8497 /* handle override, if any */
8498 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
8499 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
8500 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
8501 gv = gvp ? *gvp : NULL;
8505 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
8506 OP * const kid = cUNOPo->op_first;
8509 cUNOPo->op_first = 0;
8513 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
8514 op_append_elem(OP_LIST, kid,
8515 scalar(newUNOP(OP_RV2CV, 0,
8518 op_getmad(o,newop,'O');
8522 return scalar(ck_fun(o));
8526 Perl_ck_return(pTHX_ OP *o)
8531 PERL_ARGS_ASSERT_CK_RETURN;
8533 kid = cLISTOPo->op_first->op_sibling;
8534 if (CvLVALUE(PL_compcv)) {
8535 for (; kid; kid = kid->op_sibling)
8536 op_lvalue(kid, OP_LEAVESUBLV);
8543 Perl_ck_select(pTHX_ OP *o)
8548 PERL_ARGS_ASSERT_CK_SELECT;
8550 if (o->op_flags & OPf_KIDS) {
8551 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8552 if (kid && kid->op_sibling) {
8553 o->op_type = OP_SSELECT;
8554 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
8556 return fold_constants(o);
8560 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8561 if (kid && kid->op_type == OP_RV2GV)
8562 kid->op_private &= ~HINT_STRICT_REFS;
8567 Perl_ck_shift(pTHX_ OP *o)
8570 const I32 type = o->op_type;
8572 PERL_ARGS_ASSERT_CK_SHIFT;
8574 if (!(o->op_flags & OPf_KIDS)) {
8577 if (!CvUNIQUE(PL_compcv)) {
8578 o->op_flags |= OPf_SPECIAL;
8582 argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
8585 OP * const oldo = o;
8586 o = newUNOP(type, 0, scalar(argop));
8587 op_getmad(oldo,o,'O');
8592 return newUNOP(type, 0, scalar(argop));
8595 return scalar(ck_fun(o));
8599 Perl_ck_sort(pTHX_ OP *o)
8604 PERL_ARGS_ASSERT_CK_SORT;
8606 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
8607 HV * const hinthv = GvHV(PL_hintgv);
8609 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
8611 const I32 sorthints = (I32)SvIV(*svp);
8612 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
8613 o->op_private |= OPpSORT_QSORT;
8614 if ((sorthints & HINT_SORT_STABLE) != 0)
8615 o->op_private |= OPpSORT_STABLE;
8620 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
8622 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8623 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
8625 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
8627 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
8629 if (kid->op_type == OP_SCOPE) {
8633 else if (kid->op_type == OP_LEAVE) {
8634 if (o->op_type == OP_SORT) {
8635 op_null(kid); /* wipe out leave */
8638 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
8639 if (k->op_next == kid)
8641 /* don't descend into loops */
8642 else if (k->op_type == OP_ENTERLOOP
8643 || k->op_type == OP_ENTERITER)
8645 k = cLOOPx(k)->op_lastop;
8650 kid->op_next = 0; /* just disconnect the leave */
8651 k = kLISTOP->op_first;
8656 if (o->op_type == OP_SORT) {
8657 /* provide scalar context for comparison function/block */
8663 o->op_flags |= OPf_SPECIAL;
8665 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
8668 firstkid = firstkid->op_sibling;
8671 /* provide list context for arguments */
8672 if (o->op_type == OP_SORT)
8679 S_simplify_sort(pTHX_ OP *o)
8682 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8688 PERL_ARGS_ASSERT_SIMPLIFY_SORT;
8690 if (!(o->op_flags & OPf_STACKED))
8692 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
8693 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
8694 kid = kUNOP->op_first; /* get past null */
8695 if (kid->op_type != OP_SCOPE)
8697 kid = kLISTOP->op_last; /* get past scope */
8698 switch(kid->op_type) {
8706 k = kid; /* remember this node*/
8707 if (kBINOP->op_first->op_type != OP_RV2SV)
8709 kid = kBINOP->op_first; /* get past cmp */
8710 if (kUNOP->op_first->op_type != OP_GV)
8712 kid = kUNOP->op_first; /* get past rv2sv */
8714 if (GvSTASH(gv) != PL_curstash)
8716 gvname = GvNAME(gv);
8717 if (*gvname == 'a' && gvname[1] == '\0')
8719 else if (*gvname == 'b' && gvname[1] == '\0')
8724 kid = k; /* back to cmp */
8725 if (kBINOP->op_last->op_type != OP_RV2SV)
8727 kid = kBINOP->op_last; /* down to 2nd arg */
8728 if (kUNOP->op_first->op_type != OP_GV)
8730 kid = kUNOP->op_first; /* get past rv2sv */
8732 if (GvSTASH(gv) != PL_curstash)
8734 gvname = GvNAME(gv);
8736 ? !(*gvname == 'a' && gvname[1] == '\0')
8737 : !(*gvname == 'b' && gvname[1] == '\0'))
8739 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
8741 o->op_private |= OPpSORT_DESCEND;
8742 if (k->op_type == OP_NCMP)
8743 o->op_private |= OPpSORT_NUMERIC;
8744 if (k->op_type == OP_I_NCMP)
8745 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
8746 kid = cLISTOPo->op_first->op_sibling;
8747 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
8749 op_getmad(kid,o,'S'); /* then delete it */
8751 op_free(kid); /* then delete it */
8756 Perl_ck_split(pTHX_ OP *o)
8761 PERL_ARGS_ASSERT_CK_SPLIT;
8763 if (o->op_flags & OPf_STACKED)
8764 return no_fh_allowed(o);
8766 kid = cLISTOPo->op_first;
8767 if (kid->op_type != OP_NULL)
8768 Perl_croak(aTHX_ "panic: ck_split");
8769 kid = kid->op_sibling;
8770 op_free(cLISTOPo->op_first);
8772 cLISTOPo->op_first = kid;
8774 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
8775 cLISTOPo->op_last = kid; /* There was only one element previously */
8778 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
8779 OP * const sibl = kid->op_sibling;
8780 kid->op_sibling = 0;
8781 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
8782 if (cLISTOPo->op_first == cLISTOPo->op_last)
8783 cLISTOPo->op_last = kid;
8784 cLISTOPo->op_first = kid;
8785 kid->op_sibling = sibl;
8788 kid->op_type = OP_PUSHRE;
8789 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
8791 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
8792 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
8793 "Use of /g modifier is meaningless in split");
8796 if (!kid->op_sibling)
8797 op_append_elem(OP_SPLIT, o, newDEFSVOP());
8799 kid = kid->op_sibling;
8802 if (!kid->op_sibling)
8803 op_append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
8804 assert(kid->op_sibling);
8806 kid = kid->op_sibling;
8809 if (kid->op_sibling)
8810 return too_many_arguments(o,OP_DESC(o));
8816 Perl_ck_join(pTHX_ OP *o)
8818 const OP * const kid = cLISTOPo->op_first->op_sibling;
8820 PERL_ARGS_ASSERT_CK_JOIN;
8822 if (kid && kid->op_type == OP_MATCH) {
8823 if (ckWARN(WARN_SYNTAX)) {
8824 const REGEXP *re = PM_GETRE(kPMOP);
8825 const char *pmstr = re ? RX_PRECOMP_const(re) : "STRING";
8826 const STRLEN len = re ? RX_PRELEN(re) : 6;
8827 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
8828 "/%.*s/ should probably be written as \"%.*s\"",
8829 (int)len, pmstr, (int)len, pmstr);
8836 =for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
8838 Examines an op, which is expected to identify a subroutine at runtime,
8839 and attempts to determine at compile time which subroutine it identifies.
8840 This is normally used during Perl compilation to determine whether
8841 a prototype can be applied to a function call. I<cvop> is the op
8842 being considered, normally an C<rv2cv> op. A pointer to the identified
8843 subroutine is returned, if it could be determined statically, and a null
8844 pointer is returned if it was not possible to determine statically.
8846 Currently, the subroutine can be identified statically if the RV that the
8847 C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
8848 A C<gv> op is suitable if the GV's CV slot is populated. A C<const> op is
8849 suitable if the constant value must be an RV pointing to a CV. Details of
8850 this process may change in future versions of Perl. If the C<rv2cv> op
8851 has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
8852 the subroutine statically: this flag is used to suppress compile-time
8853 magic on a subroutine call, forcing it to use default runtime behaviour.
8855 If I<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
8856 of a GV reference is modified. If a GV was examined and its CV slot was
8857 found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
8858 If the op is not optimised away, and the CV slot is later populated with
8859 a subroutine having a prototype, that flag eventually triggers the warning
8860 "called too early to check prototype".
8862 If I<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
8863 of returning a pointer to the subroutine it returns a pointer to the
8864 GV giving the most appropriate name for the subroutine in this context.
8865 Normally this is just the C<CvGV> of the subroutine, but for an anonymous
8866 (C<CvANON>) subroutine that is referenced through a GV it will be the
8867 referencing GV. The resulting C<GV*> is cast to C<CV*> to be returned.
8868 A null pointer is returned as usual if there is no statically-determinable
8875 Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
8880 PERL_ARGS_ASSERT_RV2CV_OP_CV;
8881 if (flags & ~(RV2CVOPCV_MARK_EARLY|RV2CVOPCV_RETURN_NAME_GV))
8882 Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags);
8883 if (cvop->op_type != OP_RV2CV)
8885 if (cvop->op_private & OPpENTERSUB_AMPER)
8887 if (!(cvop->op_flags & OPf_KIDS))
8889 rvop = cUNOPx(cvop)->op_first;
8890 switch (rvop->op_type) {
8892 gv = cGVOPx_gv(rvop);
8895 if (flags & RV2CVOPCV_MARK_EARLY)
8896 rvop->op_private |= OPpEARLY_CV;
8901 SV *rv = cSVOPx_sv(rvop);
8911 if (SvTYPE((SV*)cv) != SVt_PVCV)
8913 if (flags & RV2CVOPCV_RETURN_NAME_GV) {
8914 if (!CvANON(cv) || !gv)
8923 =for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
8925 Performs the default fixup of the arguments part of an C<entersub>
8926 op tree. This consists of applying list context to each of the
8927 argument ops. This is the standard treatment used on a call marked
8928 with C<&>, or a method call, or a call through a subroutine reference,
8929 or any other call where the callee can't be identified at compile time,
8930 or a call where the callee has no prototype.
8936 Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
8939 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
8940 aop = cUNOPx(entersubop)->op_first;
8941 if (!aop->op_sibling)
8942 aop = cUNOPx(aop)->op_first;
8943 for (aop = aop->op_sibling; aop->op_sibling; aop = aop->op_sibling) {
8944 if (!(PL_madskills && aop->op_type == OP_STUB)) {
8946 op_lvalue(aop, OP_ENTERSUB);
8953 =for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
8955 Performs the fixup of the arguments part of an C<entersub> op tree
8956 based on a subroutine prototype. This makes various modifications to
8957 the argument ops, from applying context up to inserting C<refgen> ops,
8958 and checking the number and syntactic types of arguments, as directed by
8959 the prototype. This is the standard treatment used on a subroutine call,
8960 not marked with C<&>, where the callee can be identified at compile time
8961 and has a prototype.
8963 I<protosv> supplies the subroutine prototype to be applied to the call.
8964 It may be a normal defined scalar, of which the string value will be used.
8965 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
8966 that has been cast to C<SV*>) which has a prototype. The prototype
8967 supplied, in whichever form, does not need to match the actual callee
8968 referenced by the op tree.
8970 If the argument ops disagree with the prototype, for example by having
8971 an unacceptable number of arguments, a valid op tree is returned anyway.
8972 The error is reflected in the parser state, normally resulting in a single
8973 exception at the top level of parsing which covers all the compilation
8974 errors that occurred. In the error message, the callee is referred to
8975 by the name defined by the I<namegv> parameter.
8981 Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
8984 const char *proto, *proto_end;
8985 OP *aop, *prev, *cvop;
8988 I32 contextclass = 0;
8989 const char *e = NULL;
8990 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO;
8991 if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv))
8992 Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto");
8993 proto = SvPV(protosv, proto_len);
8994 proto_end = proto + proto_len;
8995 aop = cUNOPx(entersubop)->op_first;
8996 if (!aop->op_sibling)
8997 aop = cUNOPx(aop)->op_first;
8999 aop = aop->op_sibling;
9000 for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
9001 while (aop != cvop) {
9003 if (PL_madskills && aop->op_type == OP_STUB) {
9004 aop = aop->op_sibling;
9007 if (PL_madskills && aop->op_type == OP_NULL)
9008 o3 = ((UNOP*)aop)->op_first;
9012 if (proto >= proto_end)
9013 return too_many_arguments(entersubop, gv_ename(namegv));
9021 /* _ must be at the end */
9022 if (proto[1] && proto[1] != ';')
9037 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
9039 arg == 1 ? "block or sub {}" : "sub {}",
9040 gv_ename(namegv), o3);
9043 /* '*' allows any scalar type, including bareword */
9046 if (o3->op_type == OP_RV2GV)
9047 goto wrapref; /* autoconvert GLOB -> GLOBref */
9048 else if (o3->op_type == OP_CONST)
9049 o3->op_private &= ~OPpCONST_STRICT;
9050 else if (o3->op_type == OP_ENTERSUB) {
9051 /* accidental subroutine, revert to bareword */
9052 OP *gvop = ((UNOP*)o3)->op_first;
9053 if (gvop && gvop->op_type == OP_NULL) {
9054 gvop = ((UNOP*)gvop)->op_first;
9056 for (; gvop->op_sibling; gvop = gvop->op_sibling)
9059 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
9060 (gvop = ((UNOP*)gvop)->op_first) &&
9061 gvop->op_type == OP_GV)
9063 GV * const gv = cGVOPx_gv(gvop);
9064 OP * const sibling = aop->op_sibling;
9065 SV * const n = newSVpvs("");
9067 OP * const oldaop = aop;
9071 gv_fullname4(n, gv, "", FALSE);
9072 aop = newSVOP(OP_CONST, 0, n);
9073 op_getmad(oldaop,aop,'O');
9074 prev->op_sibling = aop;
9075 aop->op_sibling = sibling;
9085 if (o3->op_type == OP_RV2AV ||
9086 o3->op_type == OP_PADAV ||
9087 o3->op_type == OP_RV2HV ||
9088 o3->op_type == OP_PADHV
9103 if (contextclass++ == 0) {
9104 e = strchr(proto, ']');
9105 if (!e || e == proto)
9114 const char *p = proto;
9115 const char *const end = proto;
9118 /* \[$] accepts any scalar lvalue */
9120 && Perl_op_lvalue_flags(aTHX_
9122 OP_READ, /* not entersub */
9125 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
9127 gv_ename(namegv), o3);
9132 if (o3->op_type == OP_RV2GV)
9135 bad_type(arg, "symbol", gv_ename(namegv), o3);
9138 if (o3->op_type == OP_ENTERSUB)
9141 bad_type(arg, "subroutine entry", gv_ename(namegv),
9145 if (o3->op_type == OP_RV2SV ||
9146 o3->op_type == OP_PADSV ||
9147 o3->op_type == OP_HELEM ||
9148 o3->op_type == OP_AELEM)
9150 if (!contextclass) {
9151 /* \$ accepts any scalar lvalue */
9152 if (Perl_op_lvalue_flags(aTHX_
9154 OP_READ, /* not entersub */
9157 bad_type(arg, "scalar", gv_ename(namegv), o3);
9161 if (o3->op_type == OP_RV2AV ||
9162 o3->op_type == OP_PADAV)
9165 bad_type(arg, "array", gv_ename(namegv), o3);
9168 if (o3->op_type == OP_RV2HV ||
9169 o3->op_type == OP_PADHV)
9172 bad_type(arg, "hash", gv_ename(namegv), o3);
9176 OP* const kid = aop;
9177 OP* const sib = kid->op_sibling;
9178 kid->op_sibling = 0;
9179 aop = newUNOP(OP_REFGEN, 0, kid);
9180 aop->op_sibling = sib;
9181 prev->op_sibling = aop;
9183 if (contextclass && e) {
9198 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
9199 gv_ename(namegv), SVfARG(protosv));
9202 op_lvalue(aop, OP_ENTERSUB);
9204 aop = aop->op_sibling;
9206 if (aop == cvop && *proto == '_') {
9207 /* generate an access to $_ */
9209 aop->op_sibling = prev->op_sibling;
9210 prev->op_sibling = aop; /* instead of cvop */
9212 if (!optional && proto_end > proto &&
9213 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
9214 return too_few_arguments(entersubop, gv_ename(namegv));
9219 =for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
9221 Performs the fixup of the arguments part of an C<entersub> op tree either
9222 based on a subroutine prototype or using default list-context processing.
9223 This is the standard treatment used on a subroutine call, not marked
9224 with C<&>, where the callee can be identified at compile time.
9226 I<protosv> supplies the subroutine prototype to be applied to the call,
9227 or indicates that there is no prototype. It may be a normal scalar,
9228 in which case if it is defined then the string value will be used
9229 as a prototype, and if it is undefined then there is no prototype.
9230 Alternatively, for convenience, it may be a subroutine object (a C<CV*>
9231 that has been cast to C<SV*>), of which the prototype will be used if it
9232 has one. The prototype (or lack thereof) supplied, in whichever form,
9233 does not need to match the actual callee referenced by the op tree.
9235 If the argument ops disagree with the prototype, for example by having
9236 an unacceptable number of arguments, a valid op tree is returned anyway.
9237 The error is reflected in the parser state, normally resulting in a single
9238 exception at the top level of parsing which covers all the compilation
9239 errors that occurred. In the error message, the callee is referred to
9240 by the name defined by the I<namegv> parameter.
9246 Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
9247 GV *namegv, SV *protosv)
9249 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST;
9250 if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv))
9251 return ck_entersub_args_proto(entersubop, namegv, protosv);
9253 return ck_entersub_args_list(entersubop);
9257 Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
9259 int opnum = SvTYPE(protosv) == SVt_PVCV ? 0 : (int)SvUV(protosv);
9260 OP *aop = cUNOPx(entersubop)->op_first;
9262 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE;
9266 if (!aop->op_sibling)
9267 aop = cUNOPx(aop)->op_first;
9269 aop = aop->op_sibling;
9270 for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
9271 if (PL_madskills) while (aop != cvop && aop->op_type == OP_STUB) {
9272 aop = aop->op_sibling;
9276 (void)too_many_arguments(entersubop, GvNAME(namegv));
9278 op_free(entersubop);
9279 switch(GvNAME(namegv)[2]) {
9280 case 'F': return newSVOP(OP_CONST, 0,
9281 newSVpv(CopFILE(PL_curcop),0));
9282 case 'L': return newSVOP(
9285 "%"IVdf, (IV)CopLINE(PL_curcop)
9288 case 'P': return newSVOP(OP_CONST, 0,
9290 ? newSVhek(HvNAME_HEK(PL_curstash))
9301 bool seenarg = FALSE;
9303 if (!aop->op_sibling)
9304 aop = cUNOPx(aop)->op_first;
9307 aop = aop->op_sibling;
9308 prev->op_sibling = NULL;
9311 prev=cvop, cvop = cvop->op_sibling)
9313 if (PL_madskills && cvop->op_sibling
9314 && cvop->op_type != OP_STUB) seenarg = TRUE
9317 prev->op_sibling = NULL;
9318 paren = OPf_SPECIAL * !(cvop->op_private & OPpENTERSUB_NOPAREN);
9320 if (aop == cvop) aop = NULL;
9321 op_free(entersubop);
9323 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
9325 case OA_BASEOP_OR_UNOP:
9327 return aop ? newUNOP(opnum,paren,aop) : newOP(opnum,paren);
9331 if (!PL_madskills || seenarg)
9333 (void)too_many_arguments(aop, GvNAME(namegv));
9336 return newOP(opnum,0);
9338 return convert(opnum,0,aop);
9346 =for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
9348 Retrieves the function that will be used to fix up a call to I<cv>.
9349 Specifically, the function is applied to an C<entersub> op tree for a
9350 subroutine call, not marked with C<&>, where the callee can be identified
9351 at compile time as I<cv>.
9353 The C-level function pointer is returned in I<*ckfun_p>, and an SV
9354 argument for it is returned in I<*ckobj_p>. The function is intended
9355 to be called in this manner:
9357 entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
9359 In this call, I<entersubop> is a pointer to the C<entersub> op,
9360 which may be replaced by the check function, and I<namegv> is a GV
9361 supplying the name that should be used by the check function to refer
9362 to the callee of the C<entersub> op if it needs to emit any diagnostics.
9363 It is permitted to apply the check function in non-standard situations,
9364 such as to a call to a different subroutine or to a method call.
9366 By default, the function is
9367 L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
9368 and the SV parameter is I<cv> itself. This implements standard
9369 prototype processing. It can be changed, for a particular subroutine,
9370 by L</cv_set_call_checker>.
9376 Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
9379 PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER;
9380 callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL;
9382 *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr);
9383 *ckobj_p = callmg->mg_obj;
9385 *ckfun_p = Perl_ck_entersub_args_proto_or_list;
9391 =for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
9393 Sets the function that will be used to fix up a call to I<cv>.
9394 Specifically, the function is applied to an C<entersub> op tree for a
9395 subroutine call, not marked with C<&>, where the callee can be identified
9396 at compile time as I<cv>.
9398 The C-level function pointer is supplied in I<ckfun>, and an SV argument
9399 for it is supplied in I<ckobj>. The function is intended to be called
9402 entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
9404 In this call, I<entersubop> is a pointer to the C<entersub> op,
9405 which may be replaced by the check function, and I<namegv> is a GV
9406 supplying the name that should be used by the check function to refer
9407 to the callee of the C<entersub> op if it needs to emit any diagnostics.
9408 It is permitted to apply the check function in non-standard situations,
9409 such as to a call to a different subroutine or to a method call.
9411 The current setting for a particular CV can be retrieved by
9412 L</cv_get_call_checker>.
9418 Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
9420 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER;
9421 if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) {
9422 if (SvMAGICAL((SV*)cv))
9423 mg_free_type((SV*)cv, PERL_MAGIC_checkcall);
9426 sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0);
9427 callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall);
9428 if (callmg->mg_flags & MGf_REFCOUNTED) {
9429 SvREFCNT_dec(callmg->mg_obj);
9430 callmg->mg_flags &= ~MGf_REFCOUNTED;
9432 callmg->mg_ptr = FPTR2DPTR(char *, ckfun);
9433 callmg->mg_obj = ckobj;
9434 if (ckobj != (SV*)cv) {
9435 SvREFCNT_inc_simple_void_NN(ckobj);
9436 callmg->mg_flags |= MGf_REFCOUNTED;
9442 Perl_ck_subr(pTHX_ OP *o)
9448 PERL_ARGS_ASSERT_CK_SUBR;
9450 aop = cUNOPx(o)->op_first;
9451 if (!aop->op_sibling)
9452 aop = cUNOPx(aop)->op_first;
9453 aop = aop->op_sibling;
9454 for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
9455 cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY);
9456 namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_RETURN_NAME_GV) : NULL;
9458 o->op_private &= ~1;
9459 o->op_private |= OPpENTERSUB_HASTARG;
9460 o->op_private |= (PL_hints & HINT_STRICT_REFS);
9461 if (PERLDB_SUB && PL_curstash != PL_debstash)
9462 o->op_private |= OPpENTERSUB_DB;
9463 if (cvop->op_type == OP_RV2CV) {
9464 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
9466 } else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
9467 if (aop->op_type == OP_CONST)
9468 aop->op_private &= ~OPpCONST_STRICT;
9469 else if (aop->op_type == OP_LIST) {
9470 OP * const sib = ((UNOP*)aop)->op_first->op_sibling;
9471 if (sib && sib->op_type == OP_CONST)
9472 sib->op_private &= ~OPpCONST_STRICT;
9477 return ck_entersub_args_list(o);
9479 Perl_call_checker ckfun;
9481 cv_get_call_checker(cv, &ckfun, &ckobj);
9482 return ckfun(aTHX_ o, namegv, ckobj);
9487 Perl_ck_svconst(pTHX_ OP *o)
9489 PERL_ARGS_ASSERT_CK_SVCONST;
9490 PERL_UNUSED_CONTEXT;
9491 SvREADONLY_on(cSVOPo->op_sv);
9496 Perl_ck_chdir(pTHX_ OP *o)
9498 PERL_ARGS_ASSERT_CK_CHDIR;
9499 if (o->op_flags & OPf_KIDS) {
9500 SVOP * const kid = (SVOP*)cUNOPo->op_first;
9502 if (kid && kid->op_type == OP_CONST &&
9503 (kid->op_private & OPpCONST_BARE))
9505 o->op_flags |= OPf_SPECIAL;
9506 kid->op_private &= ~OPpCONST_STRICT;
9513 Perl_ck_trunc(pTHX_ OP *o)
9515 PERL_ARGS_ASSERT_CK_TRUNC;
9517 if (o->op_flags & OPf_KIDS) {
9518 SVOP *kid = (SVOP*)cUNOPo->op_first;
9520 if (kid->op_type == OP_NULL)
9521 kid = (SVOP*)kid->op_sibling;
9522 if (kid && kid->op_type == OP_CONST &&
9523 (kid->op_private & OPpCONST_BARE))
9525 o->op_flags |= OPf_SPECIAL;
9526 kid->op_private &= ~OPpCONST_STRICT;
9533 Perl_ck_substr(pTHX_ OP *o)
9535 PERL_ARGS_ASSERT_CK_SUBSTR;
9538 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
9539 OP *kid = cLISTOPo->op_first;
9541 if (kid->op_type == OP_NULL)
9542 kid = kid->op_sibling;
9544 kid->op_flags |= OPf_MOD;
9551 Perl_ck_each(pTHX_ OP *o)
9554 OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL;
9555 const unsigned orig_type = o->op_type;
9556 const unsigned array_type = orig_type == OP_EACH ? OP_AEACH
9557 : orig_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
9558 const unsigned ref_type = orig_type == OP_EACH ? OP_REACH
9559 : orig_type == OP_KEYS ? OP_RKEYS : OP_RVALUES;
9561 PERL_ARGS_ASSERT_CK_EACH;
9564 switch (kid->op_type) {
9570 CHANGE_TYPE(o, array_type);
9573 if (kid->op_private == OPpCONST_BARE
9574 || !SvROK(cSVOPx_sv(kid))
9575 || ( SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV
9576 && SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVHV )
9578 /* we let ck_fun handle it */
9581 CHANGE_TYPE(o, ref_type);
9585 /* if treating as a reference, defer additional checks to runtime */
9586 return o->op_type == ref_type ? o : ck_fun(o);
9589 /* caller is supposed to assign the return to the
9590 container of the rep_op var */
9592 S_opt_scalarhv(pTHX_ OP *rep_op) {
9596 PERL_ARGS_ASSERT_OPT_SCALARHV;
9598 NewOp(1101, unop, 1, UNOP);
9599 unop->op_type = (OPCODE)OP_BOOLKEYS;
9600 unop->op_ppaddr = PL_ppaddr[OP_BOOLKEYS];
9601 unop->op_flags = (U8)(OPf_WANT_SCALAR | OPf_KIDS );
9602 unop->op_private = (U8)(1 | ((OPf_WANT_SCALAR | OPf_KIDS) >> 8));
9603 unop->op_first = rep_op;
9604 unop->op_next = rep_op->op_next;
9605 rep_op->op_next = (OP*)unop;
9606 rep_op->op_flags|=(OPf_REF | OPf_MOD);
9607 unop->op_sibling = rep_op->op_sibling;
9608 rep_op->op_sibling = NULL;
9609 /* unop->op_targ = pad_alloc(OP_BOOLKEYS, SVs_PADTMP); */
9610 if (rep_op->op_type == OP_PADHV) {
9611 rep_op->op_flags &= ~OPf_WANT_SCALAR;
9612 rep_op->op_flags |= OPf_WANT_LIST;
9617 /* Check for in place reverse and sort assignments like "@a = reverse @a"
9618 and modify the optree to make them work inplace */
9621 S_inplace_aassign(pTHX_ OP *o) {
9623 OP *modop, *modop_pushmark;
9625 OP *oleft, *oleft_pushmark;
9627 PERL_ARGS_ASSERT_INPLACE_AASSIGN;
9629 assert((o->op_flags & OPf_WANT) == OPf_WANT_VOID);
9631 assert(cUNOPo->op_first->op_type == OP_NULL);
9632 modop_pushmark = cUNOPx(cUNOPo->op_first)->op_first;
9633 assert(modop_pushmark->op_type == OP_PUSHMARK);
9634 modop = modop_pushmark->op_sibling;
9636 if (modop->op_type != OP_SORT && modop->op_type != OP_REVERSE)
9639 /* no other operation except sort/reverse */
9640 if (modop->op_sibling)
9643 assert(cUNOPx(modop)->op_first->op_type == OP_PUSHMARK);
9644 oright = cUNOPx(modop)->op_first->op_sibling;
9646 if (modop->op_flags & OPf_STACKED) {
9647 /* skip sort subroutine/block */
9648 assert(oright->op_type == OP_NULL);
9649 oright = oright->op_sibling;
9652 assert(cUNOPo->op_first->op_sibling->op_type == OP_NULL);
9653 oleft_pushmark = cUNOPx(cUNOPo->op_first->op_sibling)->op_first;
9654 assert(oleft_pushmark->op_type == OP_PUSHMARK);
9655 oleft = oleft_pushmark->op_sibling;
9657 /* Check the lhs is an array */
9659 (oleft->op_type != OP_RV2AV && oleft->op_type != OP_PADAV)
9660 || oleft->op_sibling
9661 || (oleft->op_private & OPpLVAL_INTRO)
9665 /* Only one thing on the rhs */
9666 if (oright->op_sibling)
9669 /* check the array is the same on both sides */
9670 if (oleft->op_type == OP_RV2AV) {
9671 if (oright->op_type != OP_RV2AV
9672 || !cUNOPx(oright)->op_first
9673 || cUNOPx(oright)->op_first->op_type != OP_GV
9674 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
9675 cGVOPx_gv(cUNOPx(oright)->op_first)
9679 else if (oright->op_type != OP_PADAV
9680 || oright->op_targ != oleft->op_targ
9684 /* This actually is an inplace assignment */
9686 modop->op_private |= OPpSORT_INPLACE;
9688 /* transfer MODishness etc from LHS arg to RHS arg */
9689 oright->op_flags = oleft->op_flags;
9691 /* remove the aassign op and the lhs */
9693 op_null(oleft_pushmark);
9694 if (oleft->op_type == OP_RV2AV && cUNOPx(oleft)->op_first)
9695 op_null(cUNOPx(oleft)->op_first);
9699 #define MAX_DEFERRED 4
9702 if (defer_ix == (MAX_DEFERRED-1)) { \
9703 CALL_RPEEP(defer_queue[defer_base]); \
9704 defer_base = (defer_base + 1) % MAX_DEFERRED; \
9707 defer_queue[(defer_base + ++defer_ix) % MAX_DEFERRED] = o;
9709 /* A peephole optimizer. We visit the ops in the order they're to execute.
9710 * See the comments at the top of this file for more details about when
9711 * peep() is called */
9714 Perl_rpeep(pTHX_ register OP *o)
9717 register OP* oldop = NULL;
9718 OP* defer_queue[MAX_DEFERRED]; /* small queue of deferred branches */
9722 if (!o || o->op_opt)
9726 SAVEVPTR(PL_curcop);
9727 for (;; o = o->op_next) {
9731 while (defer_ix >= 0)
9732 CALL_RPEEP(defer_queue[(defer_base + defer_ix--) % MAX_DEFERRED]);
9736 /* By default, this op has now been optimised. A couple of cases below
9737 clear this again. */
9740 switch (o->op_type) {
9742 PL_curcop = ((COP*)o); /* for warnings */
9745 PL_curcop = ((COP*)o); /* for warnings */
9747 /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
9748 to carry two labels. For now, take the easier option, and skip
9749 this optimisation if the first NEXTSTATE has a label. */
9750 if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) {
9751 OP *nextop = o->op_next;
9752 while (nextop && nextop->op_type == OP_NULL)
9753 nextop = nextop->op_next;
9755 if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
9756 COP *firstcop = (COP *)o;
9757 COP *secondcop = (COP *)nextop;
9758 /* We want the COP pointed to by o (and anything else) to
9759 become the next COP down the line. */
9762 firstcop->op_next = secondcop->op_next;
9764 /* Now steal all its pointers, and duplicate the other
9766 firstcop->cop_line = secondcop->cop_line;
9768 firstcop->cop_stashpv = secondcop->cop_stashpv;
9769 firstcop->cop_file = secondcop->cop_file;
9771 firstcop->cop_stash = secondcop->cop_stash;
9772 firstcop->cop_filegv = secondcop->cop_filegv;
9774 firstcop->cop_hints = secondcop->cop_hints;
9775 firstcop->cop_seq = secondcop->cop_seq;
9776 firstcop->cop_warnings = secondcop->cop_warnings;
9777 firstcop->cop_hints_hash = secondcop->cop_hints_hash;
9780 secondcop->cop_stashpv = NULL;
9781 secondcop->cop_file = NULL;
9783 secondcop->cop_stash = NULL;
9784 secondcop->cop_filegv = NULL;
9786 secondcop->cop_warnings = NULL;
9787 secondcop->cop_hints_hash = NULL;
9789 /* If we use op_null(), and hence leave an ex-COP, some
9790 warnings are misreported. For example, the compile-time
9791 error in 'use strict; no strict refs;' */
9792 secondcop->op_type = OP_NULL;
9793 secondcop->op_ppaddr = PL_ppaddr[OP_NULL];
9799 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
9800 if (o->op_next->op_private & OPpTARGET_MY) {
9801 if (o->op_flags & OPf_STACKED) /* chained concats */
9802 break; /* ignore_optimization */
9804 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
9805 o->op_targ = o->op_next->op_targ;
9806 o->op_next->op_targ = 0;
9807 o->op_private |= OPpTARGET_MY;
9810 op_null(o->op_next);
9814 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
9815 break; /* Scalar stub must produce undef. List stub is noop */
9819 if (o->op_targ == OP_NEXTSTATE
9820 || o->op_targ == OP_DBSTATE)
9822 PL_curcop = ((COP*)o);
9824 /* XXX: We avoid setting op_seq here to prevent later calls
9825 to rpeep() from mistakenly concluding that optimisation
9826 has already occurred. This doesn't fix the real problem,
9827 though (See 20010220.007). AMS 20010719 */
9828 /* op_seq functionality is now replaced by op_opt */
9835 if (oldop && o->op_next) {
9836 oldop->op_next = o->op_next;
9844 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
9845 OP* const pop = (o->op_type == OP_PADAV) ?
9846 o->op_next : o->op_next->op_next;
9848 if (pop && pop->op_type == OP_CONST &&
9849 ((PL_op = pop->op_next)) &&
9850 pop->op_next->op_type == OP_AELEM &&
9851 !(pop->op_next->op_private &
9852 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
9853 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
9858 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
9859 no_bareword_allowed(pop);
9860 if (o->op_type == OP_GV)
9861 op_null(o->op_next);
9862 op_null(pop->op_next);
9864 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
9865 o->op_next = pop->op_next->op_next;
9866 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
9867 o->op_private = (U8)i;
9868 if (o->op_type == OP_GV) {
9871 o->op_type = OP_AELEMFAST;
9874 o->op_type = OP_AELEMFAST_LEX;
9879 if (o->op_next->op_type == OP_RV2SV) {
9880 if (!(o->op_next->op_private & OPpDEREF)) {
9881 op_null(o->op_next);
9882 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
9884 o->op_next = o->op_next->op_next;
9885 o->op_type = OP_GVSV;
9886 o->op_ppaddr = PL_ppaddr[OP_GVSV];
9889 else if (o->op_next->op_type == OP_READLINE
9890 && o->op_next->op_next->op_type == OP_CONCAT
9891 && (o->op_next->op_next->op_flags & OPf_STACKED))
9893 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
9894 o->op_type = OP_RCATLINE;
9895 o->op_flags |= OPf_STACKED;
9896 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
9897 op_null(o->op_next->op_next);
9898 op_null(o->op_next);
9908 fop = cUNOP->op_first;
9916 fop = cLOGOP->op_first;
9917 sop = fop->op_sibling;
9918 while (cLOGOP->op_other->op_type == OP_NULL)
9919 cLOGOP->op_other = cLOGOP->op_other->op_next;
9920 while (o->op_next && ( o->op_type == o->op_next->op_type
9921 || o->op_next->op_type == OP_NULL))
9922 o->op_next = o->op_next->op_next;
9923 DEFER(cLOGOP->op_other);
9927 if ((fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
9929 (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV)
9934 if (!((nop->op_flags & OPf_WANT) == OPf_WANT_VOID)) {
9935 while (nop && nop->op_next) {
9936 switch (nop->op_next->op_type) {
9941 lop = nop = nop->op_next;
9952 if ((lop->op_flags & OPf_WANT) == OPf_WANT_VOID) {
9953 if (fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
9954 cLOGOP->op_first = opt_scalarhv(fop);
9955 if (sop && (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV))
9956 cLOGOP->op_first->op_sibling = opt_scalarhv(sop);
9972 while (cLOGOP->op_other->op_type == OP_NULL)
9973 cLOGOP->op_other = cLOGOP->op_other->op_next;
9974 DEFER(cLOGOP->op_other);
9979 while (cLOOP->op_redoop->op_type == OP_NULL)
9980 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
9981 while (cLOOP->op_nextop->op_type == OP_NULL)
9982 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
9983 while (cLOOP->op_lastop->op_type == OP_NULL)
9984 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
9985 /* a while(1) loop doesn't have an op_next that escapes the
9986 * loop, so we have to explicitly follow the op_lastop to
9987 * process the rest of the code */
9988 DEFER(cLOOP->op_lastop);
9992 assert(!(cPMOP->op_pmflags & PMf_ONCE));
9993 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
9994 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
9995 cPMOP->op_pmstashstartu.op_pmreplstart
9996 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
9997 DEFER(cPMOP->op_pmstashstartu.op_pmreplstart);
10001 /* check that RHS of sort is a single plain array */
10002 OP *oright = cUNOPo->op_first;
10003 if (!oright || oright->op_type != OP_PUSHMARK)
10006 if (o->op_private & OPpSORT_INPLACE)
10009 /* reverse sort ... can be optimised. */
10010 if (!cUNOPo->op_sibling) {
10011 /* Nothing follows us on the list. */
10012 OP * const reverse = o->op_next;
10014 if (reverse->op_type == OP_REVERSE &&
10015 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
10016 OP * const pushmark = cUNOPx(reverse)->op_first;
10017 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
10018 && (cUNOPx(pushmark)->op_sibling == o)) {
10019 /* reverse -> pushmark -> sort */
10020 o->op_private |= OPpSORT_REVERSE;
10022 pushmark->op_next = oright->op_next;
10032 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
10034 LISTOP *enter, *exlist;
10036 if (o->op_private & OPpSORT_INPLACE)
10039 enter = (LISTOP *) o->op_next;
10042 if (enter->op_type == OP_NULL) {
10043 enter = (LISTOP *) enter->op_next;
10047 /* for $a (...) will have OP_GV then OP_RV2GV here.
10048 for (...) just has an OP_GV. */
10049 if (enter->op_type == OP_GV) {
10050 gvop = (OP *) enter;
10051 enter = (LISTOP *) enter->op_next;
10054 if (enter->op_type == OP_RV2GV) {
10055 enter = (LISTOP *) enter->op_next;
10061 if (enter->op_type != OP_ENTERITER)
10064 iter = enter->op_next;
10065 if (!iter || iter->op_type != OP_ITER)
10068 expushmark = enter->op_first;
10069 if (!expushmark || expushmark->op_type != OP_NULL
10070 || expushmark->op_targ != OP_PUSHMARK)
10073 exlist = (LISTOP *) expushmark->op_sibling;
10074 if (!exlist || exlist->op_type != OP_NULL
10075 || exlist->op_targ != OP_LIST)
10078 if (exlist->op_last != o) {
10079 /* Mmm. Was expecting to point back to this op. */
10082 theirmark = exlist->op_first;
10083 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
10086 if (theirmark->op_sibling != o) {
10087 /* There's something between the mark and the reverse, eg
10088 for (1, reverse (...))
10093 ourmark = ((LISTOP *)o)->op_first;
10094 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
10097 ourlast = ((LISTOP *)o)->op_last;
10098 if (!ourlast || ourlast->op_next != o)
10101 rv2av = ourmark->op_sibling;
10102 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
10103 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
10104 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
10105 /* We're just reversing a single array. */
10106 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
10107 enter->op_flags |= OPf_STACKED;
10110 /* We don't have control over who points to theirmark, so sacrifice
10112 theirmark->op_next = ourmark->op_next;
10113 theirmark->op_flags = ourmark->op_flags;
10114 ourlast->op_next = gvop ? gvop : (OP *) enter;
10117 enter->op_private |= OPpITER_REVERSED;
10118 iter->op_private |= OPpITER_REVERSED;
10125 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
10126 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
10131 Perl_cpeep_t cpeep =
10132 XopENTRY(Perl_custom_op_xop(aTHX_ o), xop_peep);
10134 cpeep(aTHX_ o, oldop);
10145 Perl_peep(pTHX_ register OP *o)
10151 =head1 Custom Operators
10153 =for apidoc Ao||custom_op_xop
10154 Return the XOP structure for a given custom op. This function should be
10155 considered internal to OP_NAME and the other access macros: use them instead.
10161 Perl_custom_op_xop(pTHX_ const OP *o)
10167 static const XOP xop_null = { 0, 0, 0, 0, 0 };
10169 PERL_ARGS_ASSERT_CUSTOM_OP_XOP;
10170 assert(o->op_type == OP_CUSTOM);
10172 /* This is wrong. It assumes a function pointer can be cast to IV,
10173 * which isn't guaranteed, but this is what the old custom OP code
10174 * did. In principle it should be safer to Copy the bytes of the
10175 * pointer into a PV: since the new interface is hidden behind
10176 * functions, this can be changed later if necessary. */
10177 /* Change custom_op_xop if this ever happens */
10178 keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
10181 he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0);
10183 /* assume noone will have just registered a desc */
10184 if (!he && PL_custom_op_names &&
10185 (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0))
10190 /* XXX does all this need to be shared mem? */
10191 Newxz(xop, 1, XOP);
10192 pv = SvPV(HeVAL(he), l);
10193 XopENTRY_set(xop, xop_name, savepvn(pv, l));
10194 if (PL_custom_op_descs &&
10195 (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0))
10197 pv = SvPV(HeVAL(he), l);
10198 XopENTRY_set(xop, xop_desc, savepvn(pv, l));
10200 Perl_custom_op_register(aTHX_ o->op_ppaddr, xop);
10204 if (!he) return &xop_null;
10206 xop = INT2PTR(XOP *, SvIV(HeVAL(he)));
10211 =for apidoc Ao||custom_op_register
10212 Register a custom op. See L<perlguts/"Custom Operators">.
10218 Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
10222 PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER;
10224 /* see the comment in custom_op_xop */
10225 keysv = sv_2mortal(newSViv(PTR2IV(ppaddr)));
10227 if (!PL_custom_ops)
10228 PL_custom_ops = newHV();
10230 if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0))
10231 Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name);
10235 =head1 Functions in file op.c
10237 =for apidoc core_prototype
10238 This function assigns the prototype of the named core function to C<sv>, or
10239 to a new mortal SV if C<sv> is NULL. It returns the modified C<sv>, or
10240 NULL if the core function has no prototype. C<code> is a code as returned
10241 by C<keyword()>. It must be negative and unequal to -KEY_CORE.
10247 Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code,
10250 int i = 0, n = 0, seen_question = 0, defgv = 0;
10252 #define MAX_ARGS_OP ((sizeof(I32) - 1) * 2)
10253 char str[ MAX_ARGS_OP * 2 + 2 ]; /* One ';', one '\0' */
10254 bool nullret = FALSE;
10256 PERL_ARGS_ASSERT_CORE_PROTOTYPE;
10258 assert (code < 0 && code != -KEY_CORE);
10260 if (!sv) sv = sv_newmortal();
10262 #define retsetpvs(x,y) sv_setpvs(sv, x); if(opnum) *opnum=(y); return sv
10265 case KEY_and : case KEY_chop: case KEY_chomp:
10266 case KEY_cmp : case KEY_exec: case KEY_eq :
10267 case KEY_ge : case KEY_gt : case KEY_le :
10268 case KEY_lt : case KEY_ne : case KEY_or :
10269 case KEY_select: case KEY_system: case KEY_x : case KEY_xor:
10270 if (!opnum) return NULL; nullret = TRUE; goto findopnum;
10271 case KEY_keys: retsetpvs("+", OP_KEYS);
10272 case KEY_values: retsetpvs("+", OP_VALUES);
10273 case KEY_each: retsetpvs("+", OP_EACH);
10274 case KEY_push: retsetpvs("+@", OP_PUSH);
10275 case KEY_unshift: retsetpvs("+@", OP_UNSHIFT);
10276 case KEY_pop: retsetpvs(";+", OP_POP);
10277 case KEY_shift: retsetpvs(";+", OP_SHIFT);
10279 retsetpvs("+;$$@", OP_SPLICE);
10280 case KEY___FILE__: case KEY___LINE__: case KEY___PACKAGE__:
10289 while (i < MAXO) { /* The slow way. */
10290 if (strEQ(name, PL_op_name[i])
10291 || strEQ(name, PL_op_desc[i]))
10293 if (nullret) { assert(opnum); *opnum = i; return NULL; }
10298 assert(0); return NULL; /* Should not happen... */
10300 defgv = PL_opargs[i] & OA_DEFGV;
10301 oa = PL_opargs[i] >> OASHIFT;
10303 if (oa & OA_OPTIONAL && !seen_question && (
10304 !defgv || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF
10309 if ((oa & (OA_OPTIONAL - 1)) >= OA_AVREF
10310 && (oa & (OA_OPTIONAL - 1)) <= OA_SCALARREF
10311 /* But globs are already references (kinda) */
10312 && (oa & (OA_OPTIONAL - 1)) != OA_FILEREF
10316 if ((oa & (OA_OPTIONAL - 1)) == OA_SCALARREF
10317 && !scalar_mod_type(NULL, i)) {
10322 if (i == OP_LOCK) str[n++] = '&';
10326 else str[n++] = ("?$@@%&*$")[oa & (OA_OPTIONAL - 1)];
10327 if (oa & OA_OPTIONAL && defgv && str[n-1] == '$') {
10328 str[n-1] = '_'; defgv = 0;
10332 if (code == -KEY_not || code == -KEY_getprotobynumber) str[n++] = ';';
10334 sv_setpvn(sv, str, n - 1);
10335 if (opnum) *opnum = i;
10340 Perl_coresub_op(pTHX_ SV * const coreargssv, const int code,
10343 OP * const argop = newSVOP(OP_COREARGS,0,coreargssv);
10346 PERL_ARGS_ASSERT_CORESUB_OP;
10350 return op_append_elem(OP_LINESEQ,
10353 newSVOP(OP_CONST, 0, newSViv(-code % 3)),
10358 switch (PL_opargs[opnum] & OA_CLASS_MASK) {
10360 return op_append_elem(
10363 opnum == OP_WANTARRAY ? OPpOFFBYONE << 8 : 0)
10365 case OA_BASEOP_OR_UNOP:
10366 o = newUNOP(opnum,0,argop);
10368 if (is_handle_constructor(o, 1))
10369 argop->op_private |= OPpCOREARGS_DEREF1;
10372 o = convert(opnum,0,argop);
10373 if (is_handle_constructor(o, 2))
10374 argop->op_private |= OPpCOREARGS_DEREF2;
10382 /* Efficient sub that returns a constant scalar value. */
10384 const_sv_xsub(pTHX_ CV* cv)
10388 SV *const sv = MUTABLE_SV(XSANY.any_ptr);
10392 /* diag_listed_as: SKIPME */
10393 Perl_croak(aTHX_ "usage: %s::%s()",
10394 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
10407 * c-indentation-style: bsd
10408 * c-basic-offset: 4
10409 * indent-tabs-mode: t
10412 * ex: set ts=8 sts=4 sw=4 noet: