This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix indentation for prototype switch statements
[perl5.git] / op.c
... / ...
CommitLineData
1#line 2 "op.c"
2/* op.c
3 *
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
6 *
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.
9 *
10 */
11
12/*
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
18 *
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
20 */
21
22/* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
24 *
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
31 * stack.
32 *
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):
37 *
38 * newBINOP(OP_ADD, flags,
39 * newSVREF($a),
40 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
41 * )
42 *
43 * Note that during the build of miniperl, a temporary copy of this file
44 * is made, called opmini.c.
45 */
46
47/*
48Perl's compiler is essentially a 3-pass compiler with interleaved phases:
49
50 A bottom-up pass
51 A top-down pass
52 An execution-order pass
53
54The bottom-up pass is represented by all the "newOP" routines and
55the ck_ routines. The bottom-upness is actually driven by yacc.
56So at the point that a ck_ routine fires, we have no idea what the
57context is, either upward in the syntax tree, or either forward or
58backward in the execution order. (The bottom-up parser builds that
59part of the execution order it knows about, but if you follow the "next"
60links around, you'll find it's actually a closed loop through the
61top level node.)
62
63Whenever the bottom-up parser gets to a node that supplies context to
64its components, it invokes that portion of the top-down pass that applies
65to that part of the subtree (and marks the top node as processed, so
66if a node further up supplies context, it doesn't have to take the
67plunge again). As a particular subcase of this, as the new node is
68built, it takes all the closed execution loops of its subcomponents
69and links them into a new closed loop for the higher level node. But
70it's still not the real execution order.
71
72The actual execution order is not known till we get a grammar reduction
73to 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
75into peep() to do that code's portion of the 3rd pass. It has to be
76recursive, but it's recursive on basic blocks, not on tree nodes.
77*/
78
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.
91
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.
99*/
100
101#include "EXTERN.h"
102#define PERL_IN_OP_C
103#include "perl.h"
104#include "keywords.h"
105
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)
109
110#if defined(PL_OP_SLAB_ALLOC)
111
112#ifdef PERL_DEBUG_READONLY_OPS
113# define PERL_SLAB_SIZE 4096
114# include <sys/mman.h>
115#endif
116
117#ifndef PERL_SLAB_SIZE
118#define PERL_SLAB_SIZE 2048
119#endif
120
121void *
122Perl_Slab_Alloc(pTHX_ size_t sz)
123{
124 dVAR;
125 /*
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
130 */
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
135 mapping */
136 PL_OpPtr = (I32**) mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
137 MAP_ANON|MAP_PRIVATE, -1, 0);
138
139 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
140 (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
141 PL_OpPtr));
142 if(PL_OpPtr == MAP_FAILED) {
143 perror("mmap failed");
144 abort();
145 }
146#else
147
148 PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*));
149#endif
150 if (!PL_OpPtr) {
151 return NULL;
152 }
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
157 */
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
162 */
163 PL_OpPtr += PERL_SLAB_SIZE;
164
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));
171#endif
172 }
173 assert( PL_OpSpace >= 0 );
174 /* Move the allocation pointer down */
175 PL_OpPtr -= sz;
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);
182}
183
184#ifdef PERL_DEBUG_READONLY_OPS
185void
186Perl_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;
190
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 */
194
195 PL_slabs = NULL;
196 PL_slab_count = 0;
197
198 /* Force a new slab for any further allocation. */
199 PL_OpSpace = 0;
200
201 while (count--) {
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);
207 }
208 }
209
210 free(slabs);
211}
212
213STATIC void
214S_Slab_to_rw(pTHX_ void *op)
215{
216 I32 * const * const ptr = (I32 **) op;
217 I32 * const slab = ptr[-1];
218
219 PERL_ARGS_ASSERT_SLAB_TO_RW;
220
221 assert( ptr-1 > (I32 **) slab );
222 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
223 assert( *slab > 0 );
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);
227 }
228}
229
230OP *
231Perl_op_refcnt_inc(pTHX_ OP *o)
232{
233 if(o) {
234 Slab_to_rw(o);
235 ++o->op_targ;
236 }
237 return o;
238
239}
240
241PADOFFSET
242Perl_op_refcnt_dec(pTHX_ OP *o)
243{
244 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
245 Slab_to_rw(o);
246 return --o->op_targ;
247}
248#else
249# define Slab_to_rw(op)
250#endif
251
252void
253Perl_Slab_Free(pTHX_ void *op)
254{
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) );
260 assert( *slab > 0 );
261 Slab_to_rw(op);
262 if (--(*slab) == 0) {
263# ifdef NETWARE
264# define PerlMemShared PerlMem
265# endif
266
267#ifdef PERL_DEBUG_READONLY_OPS
268 U32 count = PL_slab_count;
269 /* Need to remove this slab from our list of slabs */
270 if (count) {
271 while (count--) {
272 if (PL_slabs[count] == slab) {
273 dVAR;
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",
277 PL_OpSlab,
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
282 worth it. */
283 if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
284 perror("munmap failed");
285 abort();
286 }
287 break;
288 }
289 }
290 }
291#else
292 PerlMemShared_free(slab);
293#endif
294 if (slab == PL_OpSlab) {
295 PL_OpSpace = 0;
296 }
297 }
298}
299#endif
300/*
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.
303 */
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]), \
308 (OP*)0 ) \
309 : PL_check[type](aTHX_ (OP*)o))
310
311#define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
312
313STATIC const char*
314S_gv_ename(pTHX_ GV *gv)
315{
316 SV* const tmpsv = sv_newmortal();
317
318 PERL_ARGS_ASSERT_GV_ENAME;
319
320 gv_efullname3(tmpsv, gv, NULL);
321 return SvPV_nolen_const(tmpsv);
322}
323
324STATIC OP *
325S_no_fh_allowed(pTHX_ OP *o)
326{
327 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
328
329 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
330 OP_DESC(o)));
331 return o;
332}
333
334STATIC OP *
335S_too_few_arguments(pTHX_ OP *o, const char *name)
336{
337 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS;
338
339 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
340 return o;
341}
342
343STATIC OP *
344S_too_many_arguments(pTHX_ OP *o, const char *name)
345{
346 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS;
347
348 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
349 return o;
350}
351
352STATIC void
353S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
354{
355 PERL_ARGS_ASSERT_BAD_TYPE;
356
357 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
358 (int)n, name, t, OP_DESC(kid)));
359}
360
361STATIC void
362S_no_bareword_allowed(pTHX_ const OP *o)
363{
364 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
365
366 if (PL_madskills)
367 return; /* various ok barewords are hidden in extra OP_NULL */
368 qerror(Perl_mess(aTHX_
369 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
370 SVfARG(cSVOPo_sv)));
371}
372
373/* "register" allocation */
374
375PADOFFSET
376Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
377{
378 dVAR;
379 PADOFFSET off;
380 const bool is_our = (PL_parser->in_my == KEY_our);
381
382 PERL_ARGS_ASSERT_ALLOCMY;
383
384 if (flags)
385 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
386 (UV)flags);
387
388 /* Until we're using the length for real, cross check that we're being
389 told the truth. */
390 assert(strlen(name) == len);
391
392 /* complain about "my $<special_var>" etc etc */
393 if (len &&
394 !(is_our ||
395 isALPHA(name[1]) ||
396 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
397 (name[1] == '_' && (*name == '$' || len > 2))))
398 {
399 /* name[2] is true if strlen(name) > 2 */
400 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
401 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
402 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
403 PL_parser->in_my == KEY_state ? "state" : "my"));
404 } else {
405 yyerror(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
406 PL_parser->in_my == KEY_state ? "state" : "my"));
407 }
408 }
409
410 /* allocate a spare slot and store the name in that slot */
411
412 off = pad_add_name(name, len,
413 is_our ? padadd_OUR :
414 PL_parser->in_my == KEY_state ? padadd_STATE : 0,
415 PL_parser->in_my_stash,
416 (is_our
417 /* $_ is always in main::, even with our */
418 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
419 : NULL
420 )
421 );
422 /* anon sub prototypes contains state vars should always be cloned,
423 * otherwise the state var would be shared between anon subs */
424
425 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
426 CvCLONE_on(PL_compcv);
427
428 return off;
429}
430
431/* free the body of an op without examining its contents.
432 * Always use this rather than FreeOp directly */
433
434static void
435S_op_destroy(pTHX_ OP *o)
436{
437 if (o->op_latefree) {
438 o->op_latefreed = 1;
439 return;
440 }
441 FreeOp(o);
442}
443
444#ifdef USE_ITHREADS
445# define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
446#else
447# define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
448#endif
449
450/* Destructor */
451
452void
453Perl_op_free(pTHX_ OP *o)
454{
455 dVAR;
456 OPCODE type;
457
458 if (!o)
459 return;
460 if (o->op_latefreed) {
461 if (o->op_latefree)
462 return;
463 goto do_free;
464 }
465
466 type = o->op_type;
467 if (o->op_private & OPpREFCOUNTED) {
468 switch (type) {
469 case OP_LEAVESUB:
470 case OP_LEAVESUBLV:
471 case OP_LEAVEEVAL:
472 case OP_LEAVE:
473 case OP_SCOPE:
474 case OP_LEAVEWRITE:
475 {
476 PADOFFSET refcnt;
477 OP_REFCNT_LOCK;
478 refcnt = OpREFCNT_dec(o);
479 OP_REFCNT_UNLOCK;
480 if (refcnt) {
481 /* Need to find and remove any pattern match ops from the list
482 we maintain for reset(). */
483 find_and_forget_pmops(o);
484 return;
485 }
486 }
487 break;
488 default:
489 break;
490 }
491 }
492
493 /* Call the op_free hook if it has been set. Do it now so that it's called
494 * at the right time for refcounted ops, but still before all of the kids
495 * are freed. */
496 CALL_OPFREEHOOK(o);
497
498 if (o->op_flags & OPf_KIDS) {
499 register OP *kid, *nextkid;
500 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
501 nextkid = kid->op_sibling; /* Get before next freeing kid */
502 op_free(kid);
503 }
504 }
505
506#ifdef PERL_DEBUG_READONLY_OPS
507 Slab_to_rw(o);
508#endif
509
510 /* COP* is not cleared by op_clear() so that we may track line
511 * numbers etc even after null() */
512 if (type == OP_NEXTSTATE || type == OP_DBSTATE
513 || (type == OP_NULL /* the COP might have been null'ed */
514 && ((OPCODE)o->op_targ == OP_NEXTSTATE
515 || (OPCODE)o->op_targ == OP_DBSTATE))) {
516 cop_free((COP*)o);
517 }
518
519 if (type == OP_NULL)
520 type = (OPCODE)o->op_targ;
521
522 op_clear(o);
523 if (o->op_latefree) {
524 o->op_latefreed = 1;
525 return;
526 }
527 do_free:
528 FreeOp(o);
529#ifdef DEBUG_LEAKING_SCALARS
530 if (PL_op == o)
531 PL_op = NULL;
532#endif
533}
534
535void
536Perl_op_clear(pTHX_ OP *o)
537{
538
539 dVAR;
540
541 PERL_ARGS_ASSERT_OP_CLEAR;
542
543#ifdef PERL_MAD
544 /* if (o->op_madprop && o->op_madprop->mad_next)
545 abort(); */
546 /* FIXME for MAD - if I uncomment these two lines t/op/pack.t fails with
547 "modification of a read only value" for a reason I can't fathom why.
548 It's the "" stringification of $_, where $_ was set to '' in a foreach
549 loop, but it defies simplification into a small test case.
550 However, commenting them out has caused ext/List/Util/t/weak.t to fail
551 the last test. */
552 /*
553 mad_free(o->op_madprop);
554 o->op_madprop = 0;
555 */
556#endif
557
558 retry:
559 switch (o->op_type) {
560 case OP_NULL: /* Was holding old type, if any. */
561 if (PL_madskills && o->op_targ != OP_NULL) {
562 o->op_type = (Optype)o->op_targ;
563 o->op_targ = 0;
564 goto retry;
565 }
566 case OP_ENTERTRY:
567 case OP_ENTEREVAL: /* Was holding hints. */
568 o->op_targ = 0;
569 break;
570 default:
571 if (!(o->op_flags & OPf_REF)
572 || (PL_check[o->op_type] != Perl_ck_ftst))
573 break;
574 /* FALL THROUGH */
575 case OP_GVSV:
576 case OP_GV:
577 case OP_AELEMFAST:
578 if (! (o->op_type == OP_AELEMFAST && o->op_flags & OPf_SPECIAL)) {
579 /* not an OP_PADAV replacement */
580 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
581#ifdef USE_ITHREADS
582 && PL_curpad
583#endif
584 ? cGVOPo_gv : NULL;
585 /* It's possible during global destruction that the GV is freed
586 before the optree. Whilst the SvREFCNT_inc is happy to bump from
587 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
588 will trigger an assertion failure, because the entry to sv_clear
589 checks that the scalar is not already freed. A check of for
590 !SvIS_FREED(gv) turns out to be invalid, because during global
591 destruction the reference count can be forced down to zero
592 (with SVf_BREAK set). In which case raising to 1 and then
593 dropping to 0 triggers cleanup before it should happen. I
594 *think* that this might actually be a general, systematic,
595 weakness of the whole idea of SVf_BREAK, in that code *is*
596 allowed to raise and lower references during global destruction,
597 so any *valid* code that happens to do this during global
598 destruction might well trigger premature cleanup. */
599 bool still_valid = gv && SvREFCNT(gv);
600
601 if (still_valid)
602 SvREFCNT_inc_simple_void(gv);
603#ifdef USE_ITHREADS
604 if (cPADOPo->op_padix > 0) {
605 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
606 * may still exist on the pad */
607 pad_swipe(cPADOPo->op_padix, TRUE);
608 cPADOPo->op_padix = 0;
609 }
610#else
611 SvREFCNT_dec(cSVOPo->op_sv);
612 cSVOPo->op_sv = NULL;
613#endif
614 if (still_valid) {
615 int try_downgrade = SvREFCNT(gv) == 2;
616 SvREFCNT_dec(gv);
617 if (try_downgrade)
618 gv_try_downgrade(gv);
619 }
620 }
621 break;
622 case OP_METHOD_NAMED:
623 case OP_CONST:
624 case OP_HINTSEVAL:
625 SvREFCNT_dec(cSVOPo->op_sv);
626 cSVOPo->op_sv = NULL;
627#ifdef USE_ITHREADS
628 /** Bug #15654
629 Even if op_clear does a pad_free for the target of the op,
630 pad_free doesn't actually remove the sv that exists in the pad;
631 instead it lives on. This results in that it could be reused as
632 a target later on when the pad was reallocated.
633 **/
634 if(o->op_targ) {
635 pad_swipe(o->op_targ,1);
636 o->op_targ = 0;
637 }
638#endif
639 break;
640 case OP_GOTO:
641 case OP_NEXT:
642 case OP_LAST:
643 case OP_REDO:
644 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
645 break;
646 /* FALL THROUGH */
647 case OP_TRANS:
648 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
649#ifdef USE_ITHREADS
650 if (cPADOPo->op_padix > 0) {
651 pad_swipe(cPADOPo->op_padix, TRUE);
652 cPADOPo->op_padix = 0;
653 }
654#else
655 SvREFCNT_dec(cSVOPo->op_sv);
656 cSVOPo->op_sv = NULL;
657#endif
658 }
659 else {
660 PerlMemShared_free(cPVOPo->op_pv);
661 cPVOPo->op_pv = NULL;
662 }
663 break;
664 case OP_SUBST:
665 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
666 goto clear_pmop;
667 case OP_PUSHRE:
668#ifdef USE_ITHREADS
669 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
670 /* No GvIN_PAD_off here, because other references may still
671 * exist on the pad */
672 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
673 }
674#else
675 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
676#endif
677 /* FALL THROUGH */
678 case OP_MATCH:
679 case OP_QR:
680clear_pmop:
681 forget_pmop(cPMOPo, 1);
682 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
683 /* we use the same protection as the "SAFE" version of the PM_ macros
684 * here since sv_clean_all might release some PMOPs
685 * after PL_regex_padav has been cleared
686 * and the clearing of PL_regex_padav needs to
687 * happen before sv_clean_all
688 */
689#ifdef USE_ITHREADS
690 if(PL_regex_pad) { /* We could be in destruction */
691 const IV offset = (cPMOPo)->op_pmoffset;
692 ReREFCNT_dec(PM_GETRE(cPMOPo));
693 PL_regex_pad[offset] = &PL_sv_undef;
694 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
695 sizeof(offset));
696 }
697#else
698 ReREFCNT_dec(PM_GETRE(cPMOPo));
699 PM_SETRE(cPMOPo, NULL);
700#endif
701
702 break;
703 }
704
705 if (o->op_targ > 0) {
706 pad_free(o->op_targ);
707 o->op_targ = 0;
708 }
709}
710
711STATIC void
712S_cop_free(pTHX_ COP* cop)
713{
714 PERL_ARGS_ASSERT_COP_FREE;
715
716 CopFILE_free(cop);
717 CopSTASH_free(cop);
718 if (! specialWARN(cop->cop_warnings))
719 PerlMemShared_free(cop->cop_warnings);
720 Perl_refcounted_he_free(aTHX_ cop->cop_hints_hash);
721}
722
723STATIC void
724S_forget_pmop(pTHX_ PMOP *const o
725#ifdef USE_ITHREADS
726 , U32 flags
727#endif
728 )
729{
730 HV * const pmstash = PmopSTASH(o);
731
732 PERL_ARGS_ASSERT_FORGET_PMOP;
733
734 if (pmstash && !SvIS_FREED(pmstash)) {
735 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
736 if (mg) {
737 PMOP **const array = (PMOP**) mg->mg_ptr;
738 U32 count = mg->mg_len / sizeof(PMOP**);
739 U32 i = count;
740
741 while (i--) {
742 if (array[i] == o) {
743 /* Found it. Move the entry at the end to overwrite it. */
744 array[i] = array[--count];
745 mg->mg_len = count * sizeof(PMOP**);
746 /* Could realloc smaller at this point always, but probably
747 not worth it. Probably worth free()ing if we're the
748 last. */
749 if(!count) {
750 Safefree(mg->mg_ptr);
751 mg->mg_ptr = NULL;
752 }
753 break;
754 }
755 }
756 }
757 }
758 if (PL_curpm == o)
759 PL_curpm = NULL;
760#ifdef USE_ITHREADS
761 if (flags)
762 PmopSTASH_free(o);
763#endif
764}
765
766STATIC void
767S_find_and_forget_pmops(pTHX_ OP *o)
768{
769 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
770
771 if (o->op_flags & OPf_KIDS) {
772 OP *kid = cUNOPo->op_first;
773 while (kid) {
774 switch (kid->op_type) {
775 case OP_SUBST:
776 case OP_PUSHRE:
777 case OP_MATCH:
778 case OP_QR:
779 forget_pmop((PMOP*)kid, 0);
780 }
781 find_and_forget_pmops(kid);
782 kid = kid->op_sibling;
783 }
784 }
785}
786
787void
788Perl_op_null(pTHX_ OP *o)
789{
790 dVAR;
791
792 PERL_ARGS_ASSERT_OP_NULL;
793
794 if (o->op_type == OP_NULL)
795 return;
796 if (!PL_madskills)
797 op_clear(o);
798 o->op_targ = o->op_type;
799 o->op_type = OP_NULL;
800 o->op_ppaddr = PL_ppaddr[OP_NULL];
801}
802
803void
804Perl_op_refcnt_lock(pTHX)
805{
806 dVAR;
807 PERL_UNUSED_CONTEXT;
808 OP_REFCNT_LOCK;
809}
810
811void
812Perl_op_refcnt_unlock(pTHX)
813{
814 dVAR;
815 PERL_UNUSED_CONTEXT;
816 OP_REFCNT_UNLOCK;
817}
818
819/* Contextualizers */
820
821/*
822=for apidoc Am|OP *|op_contextualize|OP *o|I32 context
823
824Applies a syntactic context to an op tree representing an expression.
825I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
826or C<G_VOID> to specify the context to apply. The modified op tree
827is returned.
828
829=cut
830*/
831
832OP *
833Perl_op_contextualize(pTHX_ OP *o, I32 context)
834{
835 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
836 switch (context) {
837 case G_SCALAR: return scalar(o);
838 case G_ARRAY: return list(o);
839 case G_VOID: return scalarvoid(o);
840 default:
841 Perl_croak(aTHX_ "panic: op_contextualize bad context");
842 return o;
843 }
844}
845
846/*
847=head1 Optree Manipulation Functions
848
849=for apidoc Am|OP*|op_linklist|OP *o
850This function is the implementation of the L</LINKLIST> macro. It should
851not be called directly.
852
853=cut
854*/
855
856OP *
857Perl_op_linklist(pTHX_ OP *o)
858{
859 OP *first;
860
861 PERL_ARGS_ASSERT_OP_LINKLIST;
862
863 if (o->op_next)
864 return o->op_next;
865
866 /* establish postfix order */
867 first = cUNOPo->op_first;
868 if (first) {
869 register OP *kid;
870 o->op_next = LINKLIST(first);
871 kid = first;
872 for (;;) {
873 if (kid->op_sibling) {
874 kid->op_next = LINKLIST(kid->op_sibling);
875 kid = kid->op_sibling;
876 } else {
877 kid->op_next = o;
878 break;
879 }
880 }
881 }
882 else
883 o->op_next = o;
884
885 return o->op_next;
886}
887
888static OP *
889S_scalarkids(pTHX_ OP *o)
890{
891 if (o && o->op_flags & OPf_KIDS) {
892 OP *kid;
893 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
894 scalar(kid);
895 }
896 return o;
897}
898
899STATIC OP *
900S_scalarboolean(pTHX_ OP *o)
901{
902 dVAR;
903
904 PERL_ARGS_ASSERT_SCALARBOOLEAN;
905
906 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
907 if (ckWARN(WARN_SYNTAX)) {
908 const line_t oldline = CopLINE(PL_curcop);
909
910 if (PL_parser && PL_parser->copline != NOLINE)
911 CopLINE_set(PL_curcop, PL_parser->copline);
912 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
913 CopLINE_set(PL_curcop, oldline);
914 }
915 }
916 return scalar(o);
917}
918
919OP *
920Perl_scalar(pTHX_ OP *o)
921{
922 dVAR;
923 OP *kid;
924
925 /* assumes no premature commitment */
926 if (!o || (PL_parser && PL_parser->error_count)
927 || (o->op_flags & OPf_WANT)
928 || o->op_type == OP_RETURN)
929 {
930 return o;
931 }
932
933 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
934
935 switch (o->op_type) {
936 case OP_REPEAT:
937 scalar(cBINOPo->op_first);
938 break;
939 case OP_OR:
940 case OP_AND:
941 case OP_COND_EXPR:
942 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
943 scalar(kid);
944 break;
945 /* FALL THROUGH */
946 case OP_SPLIT:
947 case OP_MATCH:
948 case OP_QR:
949 case OP_SUBST:
950 case OP_NULL:
951 default:
952 if (o->op_flags & OPf_KIDS) {
953 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
954 scalar(kid);
955 }
956 break;
957 case OP_LEAVE:
958 case OP_LEAVETRY:
959 kid = cLISTOPo->op_first;
960 scalar(kid);
961 kid = kid->op_sibling;
962 do_kids:
963 while (kid) {
964 OP *sib = kid->op_sibling;
965 if (sib && kid->op_type != OP_LEAVEWHEN) {
966 if (sib->op_type == OP_BREAK && sib->op_flags & OPf_SPECIAL) {
967 scalar(kid);
968 scalarvoid(sib);
969 break;
970 } else
971 scalarvoid(kid);
972 } else
973 scalar(kid);
974 kid = sib;
975 }
976 PL_curcop = &PL_compiling;
977 break;
978 case OP_SCOPE:
979 case OP_LINESEQ:
980 case OP_LIST:
981 kid = cLISTOPo->op_first;
982 goto do_kids;
983 case OP_SORT:
984 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
985 break;
986 }
987 return o;
988}
989
990OP *
991Perl_scalarvoid(pTHX_ OP *o)
992{
993 dVAR;
994 OP *kid;
995 const char* useless = NULL;
996 SV* sv;
997 U8 want;
998
999 PERL_ARGS_ASSERT_SCALARVOID;
1000
1001 /* trailing mad null ops don't count as "there" for void processing */
1002 if (PL_madskills &&
1003 o->op_type != OP_NULL &&
1004 o->op_sibling &&
1005 o->op_sibling->op_type == OP_NULL)
1006 {
1007 OP *sib;
1008 for (sib = o->op_sibling;
1009 sib && sib->op_type == OP_NULL;
1010 sib = sib->op_sibling) ;
1011
1012 if (!sib)
1013 return o;
1014 }
1015
1016 if (o->op_type == OP_NEXTSTATE
1017 || o->op_type == OP_DBSTATE
1018 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
1019 || o->op_targ == OP_DBSTATE)))
1020 PL_curcop = (COP*)o; /* for warning below */
1021
1022 /* assumes no premature commitment */
1023 want = o->op_flags & OPf_WANT;
1024 if ((want && want != OPf_WANT_SCALAR)
1025 || (PL_parser && PL_parser->error_count)
1026 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
1027 {
1028 return o;
1029 }
1030
1031 if ((o->op_private & OPpTARGET_MY)
1032 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1033 {
1034 return scalar(o); /* As if inside SASSIGN */
1035 }
1036
1037 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
1038
1039 switch (o->op_type) {
1040 default:
1041 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
1042 break;
1043 /* FALL THROUGH */
1044 case OP_REPEAT:
1045 if (o->op_flags & OPf_STACKED)
1046 break;
1047 goto func_ops;
1048 case OP_SUBSTR:
1049 if (o->op_private == 4)
1050 break;
1051 /* FALL THROUGH */
1052 case OP_GVSV:
1053 case OP_WANTARRAY:
1054 case OP_GV:
1055 case OP_SMARTMATCH:
1056 case OP_PADSV:
1057 case OP_PADAV:
1058 case OP_PADHV:
1059 case OP_PADANY:
1060 case OP_AV2ARYLEN:
1061 case OP_REF:
1062 case OP_REFGEN:
1063 case OP_SREFGEN:
1064 case OP_DEFINED:
1065 case OP_HEX:
1066 case OP_OCT:
1067 case OP_LENGTH:
1068 case OP_VEC:
1069 case OP_INDEX:
1070 case OP_RINDEX:
1071 case OP_SPRINTF:
1072 case OP_AELEM:
1073 case OP_AELEMFAST:
1074 case OP_ASLICE:
1075 case OP_HELEM:
1076 case OP_HSLICE:
1077 case OP_UNPACK:
1078 case OP_PACK:
1079 case OP_JOIN:
1080 case OP_LSLICE:
1081 case OP_ANONLIST:
1082 case OP_ANONHASH:
1083 case OP_SORT:
1084 case OP_REVERSE:
1085 case OP_RANGE:
1086 case OP_FLIP:
1087 case OP_FLOP:
1088 case OP_CALLER:
1089 case OP_FILENO:
1090 case OP_EOF:
1091 case OP_TELL:
1092 case OP_GETSOCKNAME:
1093 case OP_GETPEERNAME:
1094 case OP_READLINK:
1095 case OP_TELLDIR:
1096 case OP_GETPPID:
1097 case OP_GETPGRP:
1098 case OP_GETPRIORITY:
1099 case OP_TIME:
1100 case OP_TMS:
1101 case OP_LOCALTIME:
1102 case OP_GMTIME:
1103 case OP_GHBYNAME:
1104 case OP_GHBYADDR:
1105 case OP_GHOSTENT:
1106 case OP_GNBYNAME:
1107 case OP_GNBYADDR:
1108 case OP_GNETENT:
1109 case OP_GPBYNAME:
1110 case OP_GPBYNUMBER:
1111 case OP_GPROTOENT:
1112 case OP_GSBYNAME:
1113 case OP_GSBYPORT:
1114 case OP_GSERVENT:
1115 case OP_GPWNAM:
1116 case OP_GPWUID:
1117 case OP_GGRNAM:
1118 case OP_GGRGID:
1119 case OP_GETLOGIN:
1120 case OP_PROTOTYPE:
1121 func_ops:
1122 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
1123 /* Otherwise it's "Useless use of grep iterator" */
1124 useless = OP_DESC(o);
1125 break;
1126
1127 case OP_SPLIT:
1128 kid = cLISTOPo->op_first;
1129 if (kid && kid->op_type == OP_PUSHRE
1130#ifdef USE_ITHREADS
1131 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1132#else
1133 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1134#endif
1135 useless = OP_DESC(o);
1136 break;
1137
1138 case OP_NOT:
1139 kid = cUNOPo->op_first;
1140 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
1141 kid->op_type != OP_TRANS) {
1142 goto func_ops;
1143 }
1144 useless = "negative pattern binding (!~)";
1145 break;
1146
1147 case OP_SUBST:
1148 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
1149 useless = "Non-destructive substitution (s///r)";
1150 break;
1151
1152 case OP_RV2GV:
1153 case OP_RV2SV:
1154 case OP_RV2AV:
1155 case OP_RV2HV:
1156 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
1157 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
1158 useless = "a variable";
1159 break;
1160
1161 case OP_CONST:
1162 sv = cSVOPo_sv;
1163 if (cSVOPo->op_private & OPpCONST_STRICT)
1164 no_bareword_allowed(o);
1165 else {
1166 if (ckWARN(WARN_VOID)) {
1167 if (SvOK(sv)) {
1168 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1169 "a constant (%"SVf")", sv));
1170 useless = SvPV_nolen(msv);
1171 }
1172 else
1173 useless = "a constant (undef)";
1174 if (o->op_private & OPpCONST_ARYBASE)
1175 useless = NULL;
1176 /* don't warn on optimised away booleans, eg
1177 * use constant Foo, 5; Foo || print; */
1178 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
1179 useless = NULL;
1180 /* the constants 0 and 1 are permitted as they are
1181 conventionally used as dummies in constructs like
1182 1 while some_condition_with_side_effects; */
1183 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
1184 useless = NULL;
1185 else if (SvPOK(sv)) {
1186 /* perl4's way of mixing documentation and code
1187 (before the invention of POD) was based on a
1188 trick to mix nroff and perl code. The trick was
1189 built upon these three nroff macros being used in
1190 void context. The pink camel has the details in
1191 the script wrapman near page 319. */
1192 const char * const maybe_macro = SvPVX_const(sv);
1193 if (strnEQ(maybe_macro, "di", 2) ||
1194 strnEQ(maybe_macro, "ds", 2) ||
1195 strnEQ(maybe_macro, "ig", 2))
1196 useless = NULL;
1197 }
1198 }
1199 }
1200 op_null(o); /* don't execute or even remember it */
1201 break;
1202
1203 case OP_POSTINC:
1204 o->op_type = OP_PREINC; /* pre-increment is faster */
1205 o->op_ppaddr = PL_ppaddr[OP_PREINC];
1206 break;
1207
1208 case OP_POSTDEC:
1209 o->op_type = OP_PREDEC; /* pre-decrement is faster */
1210 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
1211 break;
1212
1213 case OP_I_POSTINC:
1214 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1215 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1216 break;
1217
1218 case OP_I_POSTDEC:
1219 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1220 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1221 break;
1222
1223 case OP_OR:
1224 case OP_AND:
1225 kid = cLOGOPo->op_first;
1226 if (kid->op_type == OP_NOT
1227 && (kid->op_flags & OPf_KIDS)
1228 && !PL_madskills) {
1229 if (o->op_type == OP_AND) {
1230 o->op_type = OP_OR;
1231 o->op_ppaddr = PL_ppaddr[OP_OR];
1232 } else {
1233 o->op_type = OP_AND;
1234 o->op_ppaddr = PL_ppaddr[OP_AND];
1235 }
1236 op_null(kid);
1237 }
1238
1239 case OP_DOR:
1240 case OP_COND_EXPR:
1241 case OP_ENTERGIVEN:
1242 case OP_ENTERWHEN:
1243 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1244 scalarvoid(kid);
1245 break;
1246
1247 case OP_NULL:
1248 if (o->op_flags & OPf_STACKED)
1249 break;
1250 /* FALL THROUGH */
1251 case OP_NEXTSTATE:
1252 case OP_DBSTATE:
1253 case OP_ENTERTRY:
1254 case OP_ENTER:
1255 if (!(o->op_flags & OPf_KIDS))
1256 break;
1257 /* FALL THROUGH */
1258 case OP_SCOPE:
1259 case OP_LEAVE:
1260 case OP_LEAVETRY:
1261 case OP_LEAVELOOP:
1262 case OP_LINESEQ:
1263 case OP_LIST:
1264 case OP_LEAVEGIVEN:
1265 case OP_LEAVEWHEN:
1266 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1267 scalarvoid(kid);
1268 break;
1269 case OP_ENTEREVAL:
1270 scalarkids(o);
1271 break;
1272 case OP_SCALAR:
1273 return scalar(o);
1274 }
1275 if (useless)
1276 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
1277 return o;
1278}
1279
1280static OP *
1281S_listkids(pTHX_ OP *o)
1282{
1283 if (o && o->op_flags & OPf_KIDS) {
1284 OP *kid;
1285 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1286 list(kid);
1287 }
1288 return o;
1289}
1290
1291OP *
1292Perl_list(pTHX_ OP *o)
1293{
1294 dVAR;
1295 OP *kid;
1296
1297 /* assumes no premature commitment */
1298 if (!o || (o->op_flags & OPf_WANT)
1299 || (PL_parser && PL_parser->error_count)
1300 || o->op_type == OP_RETURN)
1301 {
1302 return o;
1303 }
1304
1305 if ((o->op_private & OPpTARGET_MY)
1306 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1307 {
1308 return o; /* As if inside SASSIGN */
1309 }
1310
1311 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
1312
1313 switch (o->op_type) {
1314 case OP_FLOP:
1315 case OP_REPEAT:
1316 list(cBINOPo->op_first);
1317 break;
1318 case OP_OR:
1319 case OP_AND:
1320 case OP_COND_EXPR:
1321 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1322 list(kid);
1323 break;
1324 default:
1325 case OP_MATCH:
1326 case OP_QR:
1327 case OP_SUBST:
1328 case OP_NULL:
1329 if (!(o->op_flags & OPf_KIDS))
1330 break;
1331 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1332 list(cBINOPo->op_first);
1333 return gen_constant_list(o);
1334 }
1335 case OP_LIST:
1336 listkids(o);
1337 break;
1338 case OP_LEAVE:
1339 case OP_LEAVETRY:
1340 kid = cLISTOPo->op_first;
1341 list(kid);
1342 kid = kid->op_sibling;
1343 do_kids:
1344 while (kid) {
1345 OP *sib = kid->op_sibling;
1346 if (sib && kid->op_type != OP_LEAVEWHEN) {
1347 if (sib->op_type == OP_BREAK && sib->op_flags & OPf_SPECIAL) {
1348 list(kid);
1349 scalarvoid(sib);
1350 break;
1351 } else
1352 scalarvoid(kid);
1353 } else
1354 list(kid);
1355 kid = sib;
1356 }
1357 PL_curcop = &PL_compiling;
1358 break;
1359 case OP_SCOPE:
1360 case OP_LINESEQ:
1361 kid = cLISTOPo->op_first;
1362 goto do_kids;
1363 }
1364 return o;
1365}
1366
1367static OP *
1368S_scalarseq(pTHX_ OP *o)
1369{
1370 dVAR;
1371 if (o) {
1372 const OPCODE type = o->op_type;
1373
1374 if (type == OP_LINESEQ || type == OP_SCOPE ||
1375 type == OP_LEAVE || type == OP_LEAVETRY)
1376 {
1377 OP *kid;
1378 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
1379 if (kid->op_sibling) {
1380 scalarvoid(kid);
1381 }
1382 }
1383 PL_curcop = &PL_compiling;
1384 }
1385 o->op_flags &= ~OPf_PARENS;
1386 if (PL_hints & HINT_BLOCK_SCOPE)
1387 o->op_flags |= OPf_PARENS;
1388 }
1389 else
1390 o = newOP(OP_STUB, 0);
1391 return o;
1392}
1393
1394STATIC OP *
1395S_modkids(pTHX_ OP *o, I32 type)
1396{
1397 if (o && o->op_flags & OPf_KIDS) {
1398 OP *kid;
1399 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1400 mod(kid, type);
1401 }
1402 return o;
1403}
1404
1405/* Propagate lvalue ("modifiable") context to an op and its children.
1406 * 'type' represents the context type, roughly based on the type of op that
1407 * would do the modifying, although local() is represented by OP_NULL.
1408 * It's responsible for detecting things that can't be modified, flag
1409 * things that need to behave specially in an lvalue context (e.g., "$$x = 5"
1410 * might have to vivify a reference in $x), and so on.
1411 *
1412 * For example, "$a+1 = 2" would cause mod() to be called with o being
1413 * OP_ADD and type being OP_SASSIGN, and would output an error.
1414 */
1415
1416OP *
1417Perl_mod(pTHX_ OP *o, I32 type)
1418{
1419 dVAR;
1420 OP *kid;
1421 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1422 int localize = -1;
1423
1424 if (!o || (PL_parser && PL_parser->error_count))
1425 return o;
1426
1427 if ((o->op_private & OPpTARGET_MY)
1428 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1429 {
1430 return o;
1431 }
1432
1433 switch (o->op_type) {
1434 case OP_UNDEF:
1435 localize = 0;
1436 PL_modcount++;
1437 return o;
1438 case OP_CONST:
1439 if (!(o->op_private & OPpCONST_ARYBASE))
1440 goto nomod;
1441 localize = 0;
1442 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
1443 CopARYBASE_set(&PL_compiling,
1444 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
1445 PL_eval_start = 0;
1446 }
1447 else if (!type) {
1448 SAVECOPARYBASE(&PL_compiling);
1449 CopARYBASE_set(&PL_compiling, 0);
1450 }
1451 else if (type == OP_REFGEN)
1452 goto nomod;
1453 else
1454 Perl_croak(aTHX_ "That use of $[ is unsupported");
1455 break;
1456 case OP_STUB:
1457 if ((o->op_flags & OPf_PARENS) || PL_madskills)
1458 break;
1459 goto nomod;
1460 case OP_ENTERSUB:
1461 if ((type == OP_UNDEF || type == OP_REFGEN) &&
1462 !(o->op_flags & OPf_STACKED)) {
1463 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1464 /* The default is to set op_private to the number of children,
1465 which for a UNOP such as RV2CV is always 1. And w're using
1466 the bit for a flag in RV2CV, so we need it clear. */
1467 o->op_private &= ~1;
1468 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1469 assert(cUNOPo->op_first->op_type == OP_NULL);
1470 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
1471 break;
1472 }
1473 else if (o->op_private & OPpENTERSUB_NOMOD)
1474 return o;
1475 else { /* lvalue subroutine call */
1476 o->op_private |= OPpLVAL_INTRO;
1477 PL_modcount = RETURN_UNLIMITED_NUMBER;
1478 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
1479 /* Backward compatibility mode: */
1480 o->op_private |= OPpENTERSUB_INARGS;
1481 break;
1482 }
1483 else { /* Compile-time error message: */
1484 OP *kid = cUNOPo->op_first;
1485 CV *cv;
1486 OP *okid;
1487
1488 if (kid->op_type != OP_PUSHMARK) {
1489 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1490 Perl_croak(aTHX_
1491 "panic: unexpected lvalue entersub "
1492 "args: type/targ %ld:%"UVuf,
1493 (long)kid->op_type, (UV)kid->op_targ);
1494 kid = kLISTOP->op_first;
1495 }
1496 while (kid->op_sibling)
1497 kid = kid->op_sibling;
1498 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1499 /* Indirect call */
1500 if (kid->op_type == OP_METHOD_NAMED
1501 || kid->op_type == OP_METHOD)
1502 {
1503 UNOP *newop;
1504
1505 NewOp(1101, newop, 1, UNOP);
1506 newop->op_type = OP_RV2CV;
1507 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
1508 newop->op_first = NULL;
1509 newop->op_next = (OP*)newop;
1510 kid->op_sibling = (OP*)newop;
1511 newop->op_private |= OPpLVAL_INTRO;
1512 newop->op_private &= ~1;
1513 break;
1514 }
1515
1516 if (kid->op_type != OP_RV2CV)
1517 Perl_croak(aTHX_
1518 "panic: unexpected lvalue entersub "
1519 "entry via type/targ %ld:%"UVuf,
1520 (long)kid->op_type, (UV)kid->op_targ);
1521 kid->op_private |= OPpLVAL_INTRO;
1522 break; /* Postpone until runtime */
1523 }
1524
1525 okid = kid;
1526 kid = kUNOP->op_first;
1527 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1528 kid = kUNOP->op_first;
1529 if (kid->op_type == OP_NULL)
1530 Perl_croak(aTHX_
1531 "Unexpected constant lvalue entersub "
1532 "entry via type/targ %ld:%"UVuf,
1533 (long)kid->op_type, (UV)kid->op_targ);
1534 if (kid->op_type != OP_GV) {
1535 /* Restore RV2CV to check lvalueness */
1536 restore_2cv:
1537 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1538 okid->op_next = kid->op_next;
1539 kid->op_next = okid;
1540 }
1541 else
1542 okid->op_next = NULL;
1543 okid->op_type = OP_RV2CV;
1544 okid->op_targ = 0;
1545 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1546 okid->op_private |= OPpLVAL_INTRO;
1547 okid->op_private &= ~1;
1548 break;
1549 }
1550
1551 cv = GvCV(kGVOP_gv);
1552 if (!cv)
1553 goto restore_2cv;
1554 if (CvLVALUE(cv))
1555 break;
1556 }
1557 }
1558 /* FALL THROUGH */
1559 default:
1560 nomod:
1561 /* grep, foreach, subcalls, refgen */
1562 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
1563 break;
1564 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
1565 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
1566 ? "do block"
1567 : (o->op_type == OP_ENTERSUB
1568 ? "non-lvalue subroutine call"
1569 : OP_DESC(o))),
1570 type ? PL_op_desc[type] : "local"));
1571 return o;
1572
1573 case OP_PREINC:
1574 case OP_PREDEC:
1575 case OP_POW:
1576 case OP_MULTIPLY:
1577 case OP_DIVIDE:
1578 case OP_MODULO:
1579 case OP_REPEAT:
1580 case OP_ADD:
1581 case OP_SUBTRACT:
1582 case OP_CONCAT:
1583 case OP_LEFT_SHIFT:
1584 case OP_RIGHT_SHIFT:
1585 case OP_BIT_AND:
1586 case OP_BIT_XOR:
1587 case OP_BIT_OR:
1588 case OP_I_MULTIPLY:
1589 case OP_I_DIVIDE:
1590 case OP_I_MODULO:
1591 case OP_I_ADD:
1592 case OP_I_SUBTRACT:
1593 if (!(o->op_flags & OPf_STACKED))
1594 goto nomod;
1595 PL_modcount++;
1596 break;
1597
1598 case OP_COND_EXPR:
1599 localize = 1;
1600 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1601 mod(kid, type);
1602 break;
1603
1604 case OP_RV2AV:
1605 case OP_RV2HV:
1606 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
1607 PL_modcount = RETURN_UNLIMITED_NUMBER;
1608 return o; /* Treat \(@foo) like ordinary list. */
1609 }
1610 /* FALL THROUGH */
1611 case OP_RV2GV:
1612 if (scalar_mod_type(o, type))
1613 goto nomod;
1614 ref(cUNOPo->op_first, o->op_type);
1615 /* FALL THROUGH */
1616 case OP_ASLICE:
1617 case OP_HSLICE:
1618 if (type == OP_LEAVESUBLV)
1619 o->op_private |= OPpMAYBE_LVSUB;
1620 localize = 1;
1621 /* FALL THROUGH */
1622 case OP_AASSIGN:
1623 case OP_NEXTSTATE:
1624 case OP_DBSTATE:
1625 PL_modcount = RETURN_UNLIMITED_NUMBER;
1626 break;
1627 case OP_AV2ARYLEN:
1628 PL_hints |= HINT_BLOCK_SCOPE;
1629 if (type == OP_LEAVESUBLV)
1630 o->op_private |= OPpMAYBE_LVSUB;
1631 PL_modcount++;
1632 break;
1633 case OP_RV2SV:
1634 ref(cUNOPo->op_first, o->op_type);
1635 localize = 1;
1636 /* FALL THROUGH */
1637 case OP_GV:
1638 PL_hints |= HINT_BLOCK_SCOPE;
1639 case OP_SASSIGN:
1640 case OP_ANDASSIGN:
1641 case OP_ORASSIGN:
1642 case OP_DORASSIGN:
1643 PL_modcount++;
1644 break;
1645
1646 case OP_AELEMFAST:
1647 localize = -1;
1648 PL_modcount++;
1649 break;
1650
1651 case OP_PADAV:
1652 case OP_PADHV:
1653 PL_modcount = RETURN_UNLIMITED_NUMBER;
1654 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1655 return o; /* Treat \(@foo) like ordinary list. */
1656 if (scalar_mod_type(o, type))
1657 goto nomod;
1658 if (type == OP_LEAVESUBLV)
1659 o->op_private |= OPpMAYBE_LVSUB;
1660 /* FALL THROUGH */
1661 case OP_PADSV:
1662 PL_modcount++;
1663 if (!type) /* local() */
1664 Perl_croak(aTHX_ "Can't localize lexical variable %s",
1665 PAD_COMPNAME_PV(o->op_targ));
1666 break;
1667
1668 case OP_PUSHMARK:
1669 localize = 0;
1670 break;
1671
1672 case OP_KEYS:
1673 if (type != OP_SASSIGN)
1674 goto nomod;
1675 goto lvalue_func;
1676 case OP_SUBSTR:
1677 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1678 goto nomod;
1679 /* FALL THROUGH */
1680 case OP_POS:
1681 case OP_VEC:
1682 if (type == OP_LEAVESUBLV)
1683 o->op_private |= OPpMAYBE_LVSUB;
1684 lvalue_func:
1685 pad_free(o->op_targ);
1686 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
1687 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
1688 if (o->op_flags & OPf_KIDS)
1689 mod(cBINOPo->op_first->op_sibling, type);
1690 break;
1691
1692 case OP_AELEM:
1693 case OP_HELEM:
1694 ref(cBINOPo->op_first, o->op_type);
1695 if (type == OP_ENTERSUB &&
1696 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1697 o->op_private |= OPpLVAL_DEFER;
1698 if (type == OP_LEAVESUBLV)
1699 o->op_private |= OPpMAYBE_LVSUB;
1700 localize = 1;
1701 PL_modcount++;
1702 break;
1703
1704 case OP_SCOPE:
1705 case OP_LEAVE:
1706 case OP_ENTER:
1707 case OP_LINESEQ:
1708 localize = 0;
1709 if (o->op_flags & OPf_KIDS)
1710 mod(cLISTOPo->op_last, type);
1711 break;
1712
1713 case OP_NULL:
1714 localize = 0;
1715 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1716 goto nomod;
1717 else if (!(o->op_flags & OPf_KIDS))
1718 break;
1719 if (o->op_targ != OP_LIST) {
1720 mod(cBINOPo->op_first, type);
1721 break;
1722 }
1723 /* FALL THROUGH */
1724 case OP_LIST:
1725 localize = 0;
1726 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1727 mod(kid, type);
1728 break;
1729
1730 case OP_RETURN:
1731 if (type != OP_LEAVESUBLV)
1732 goto nomod;
1733 break; /* mod()ing was handled by ck_return() */
1734 }
1735
1736 /* [20011101.069] File test operators interpret OPf_REF to mean that
1737 their argument is a filehandle; thus \stat(".") should not set
1738 it. AMS 20011102 */
1739 if (type == OP_REFGEN &&
1740 PL_check[o->op_type] == Perl_ck_ftst)
1741 return o;
1742
1743 if (type != OP_LEAVESUBLV)
1744 o->op_flags |= OPf_MOD;
1745
1746 if (type == OP_AASSIGN || type == OP_SASSIGN)
1747 o->op_flags |= OPf_SPECIAL|OPf_REF;
1748 else if (!type) { /* local() */
1749 switch (localize) {
1750 case 1:
1751 o->op_private |= OPpLVAL_INTRO;
1752 o->op_flags &= ~OPf_SPECIAL;
1753 PL_hints |= HINT_BLOCK_SCOPE;
1754 break;
1755 case 0:
1756 break;
1757 case -1:
1758 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
1759 "Useless localization of %s", OP_DESC(o));
1760 }
1761 }
1762 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1763 && type != OP_LEAVESUBLV)
1764 o->op_flags |= OPf_REF;
1765 return o;
1766}
1767
1768STATIC bool
1769S_scalar_mod_type(const OP *o, I32 type)
1770{
1771 PERL_ARGS_ASSERT_SCALAR_MOD_TYPE;
1772
1773 switch (type) {
1774 case OP_SASSIGN:
1775 if (o->op_type == OP_RV2GV)
1776 return FALSE;
1777 /* FALL THROUGH */
1778 case OP_PREINC:
1779 case OP_PREDEC:
1780 case OP_POSTINC:
1781 case OP_POSTDEC:
1782 case OP_I_PREINC:
1783 case OP_I_PREDEC:
1784 case OP_I_POSTINC:
1785 case OP_I_POSTDEC:
1786 case OP_POW:
1787 case OP_MULTIPLY:
1788 case OP_DIVIDE:
1789 case OP_MODULO:
1790 case OP_REPEAT:
1791 case OP_ADD:
1792 case OP_SUBTRACT:
1793 case OP_I_MULTIPLY:
1794 case OP_I_DIVIDE:
1795 case OP_I_MODULO:
1796 case OP_I_ADD:
1797 case OP_I_SUBTRACT:
1798 case OP_LEFT_SHIFT:
1799 case OP_RIGHT_SHIFT:
1800 case OP_BIT_AND:
1801 case OP_BIT_XOR:
1802 case OP_BIT_OR:
1803 case OP_CONCAT:
1804 case OP_SUBST:
1805 case OP_TRANS:
1806 case OP_READ:
1807 case OP_SYSREAD:
1808 case OP_RECV:
1809 case OP_ANDASSIGN:
1810 case OP_ORASSIGN:
1811 case OP_DORASSIGN:
1812 return TRUE;
1813 default:
1814 return FALSE;
1815 }
1816}
1817
1818STATIC bool
1819S_is_handle_constructor(const OP *o, I32 numargs)
1820{
1821 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
1822
1823 switch (o->op_type) {
1824 case OP_PIPE_OP:
1825 case OP_SOCKPAIR:
1826 if (numargs == 2)
1827 return TRUE;
1828 /* FALL THROUGH */
1829 case OP_SYSOPEN:
1830 case OP_OPEN:
1831 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
1832 case OP_SOCKET:
1833 case OP_OPEN_DIR:
1834 case OP_ACCEPT:
1835 if (numargs == 1)
1836 return TRUE;
1837 /* FALLTHROUGH */
1838 default:
1839 return FALSE;
1840 }
1841}
1842
1843static OP *
1844S_refkids(pTHX_ OP *o, I32 type)
1845{
1846 if (o && o->op_flags & OPf_KIDS) {
1847 OP *kid;
1848 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
1849 ref(kid, type);
1850 }
1851 return o;
1852}
1853
1854OP *
1855Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
1856{
1857 dVAR;
1858 OP *kid;
1859
1860 PERL_ARGS_ASSERT_DOREF;
1861
1862 if (!o || (PL_parser && PL_parser->error_count))
1863 return o;
1864
1865 switch (o->op_type) {
1866 case OP_ENTERSUB:
1867 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
1868 !(o->op_flags & OPf_STACKED)) {
1869 o->op_type = OP_RV2CV; /* entersub => rv2cv */
1870 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
1871 assert(cUNOPo->op_first->op_type == OP_NULL);
1872 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
1873 o->op_flags |= OPf_SPECIAL;
1874 o->op_private &= ~1;
1875 }
1876 break;
1877
1878 case OP_COND_EXPR:
1879 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
1880 doref(kid, type, set_op_ref);
1881 break;
1882 case OP_RV2SV:
1883 if (type == OP_DEFINED)
1884 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1885 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1886 /* FALL THROUGH */
1887 case OP_PADSV:
1888 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1889 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1890 : type == OP_RV2HV ? OPpDEREF_HV
1891 : OPpDEREF_SV);
1892 o->op_flags |= OPf_MOD;
1893 }
1894 break;
1895
1896 case OP_RV2AV:
1897 case OP_RV2HV:
1898 if (set_op_ref)
1899 o->op_flags |= OPf_REF;
1900 /* FALL THROUGH */
1901 case OP_RV2GV:
1902 if (type == OP_DEFINED)
1903 o->op_flags |= OPf_SPECIAL; /* don't create GV */
1904 doref(cUNOPo->op_first, o->op_type, set_op_ref);
1905 break;
1906
1907 case OP_PADAV:
1908 case OP_PADHV:
1909 if (set_op_ref)
1910 o->op_flags |= OPf_REF;
1911 break;
1912
1913 case OP_SCALAR:
1914 case OP_NULL:
1915 if (!(o->op_flags & OPf_KIDS))
1916 break;
1917 doref(cBINOPo->op_first, type, set_op_ref);
1918 break;
1919 case OP_AELEM:
1920 case OP_HELEM:
1921 doref(cBINOPo->op_first, o->op_type, set_op_ref);
1922 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
1923 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1924 : type == OP_RV2HV ? OPpDEREF_HV
1925 : OPpDEREF_SV);
1926 o->op_flags |= OPf_MOD;
1927 }
1928 break;
1929
1930 case OP_SCOPE:
1931 case OP_LEAVE:
1932 set_op_ref = FALSE;
1933 /* FALL THROUGH */
1934 case OP_ENTER:
1935 case OP_LIST:
1936 if (!(o->op_flags & OPf_KIDS))
1937 break;
1938 doref(cLISTOPo->op_last, type, set_op_ref);
1939 break;
1940 default:
1941 break;
1942 }
1943 return scalar(o);
1944
1945}
1946
1947STATIC OP *
1948S_dup_attrlist(pTHX_ OP *o)
1949{
1950 dVAR;
1951 OP *rop;
1952
1953 PERL_ARGS_ASSERT_DUP_ATTRLIST;
1954
1955 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1956 * where the first kid is OP_PUSHMARK and the remaining ones
1957 * are OP_CONST. We need to push the OP_CONST values.
1958 */
1959 if (o->op_type == OP_CONST)
1960 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
1961#ifdef PERL_MAD
1962 else if (o->op_type == OP_NULL)
1963 rop = NULL;
1964#endif
1965 else {
1966 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
1967 rop = NULL;
1968 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1969 if (o->op_type == OP_CONST)
1970 rop = op_append_elem(OP_LIST, rop,
1971 newSVOP(OP_CONST, o->op_flags,
1972 SvREFCNT_inc_NN(cSVOPo->op_sv)));
1973 }
1974 }
1975 return rop;
1976}
1977
1978STATIC void
1979S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
1980{
1981 dVAR;
1982 SV *stashsv;
1983
1984 PERL_ARGS_ASSERT_APPLY_ATTRS;
1985
1986 /* fake up C<use attributes $pkg,$rv,@attrs> */
1987 ENTER; /* need to protect against side-effects of 'use' */
1988 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
1989
1990#define ATTRSMODULE "attributes"
1991#define ATTRSMODULE_PM "attributes.pm"
1992
1993 if (for_my) {
1994 /* Don't force the C<use> if we don't need it. */
1995 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
1996 if (svp && *svp != &PL_sv_undef)
1997 NOOP; /* already in %INC */
1998 else
1999 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
2000 newSVpvs(ATTRSMODULE), NULL);
2001 }
2002 else {
2003 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2004 newSVpvs(ATTRSMODULE),
2005 NULL,
2006 op_prepend_elem(OP_LIST,
2007 newSVOP(OP_CONST, 0, stashsv),
2008 op_prepend_elem(OP_LIST,
2009 newSVOP(OP_CONST, 0,
2010 newRV(target)),
2011 dup_attrlist(attrs))));
2012 }
2013 LEAVE;
2014}
2015
2016STATIC void
2017S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
2018{
2019 dVAR;
2020 OP *pack, *imop, *arg;
2021 SV *meth, *stashsv;
2022
2023 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
2024
2025 if (!attrs)
2026 return;
2027
2028 assert(target->op_type == OP_PADSV ||
2029 target->op_type == OP_PADHV ||
2030 target->op_type == OP_PADAV);
2031
2032 /* Ensure that attributes.pm is loaded. */
2033 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
2034
2035 /* Need package name for method call. */
2036 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
2037
2038 /* Build up the real arg-list. */
2039 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2040
2041 arg = newOP(OP_PADSV, 0);
2042 arg->op_targ = target->op_targ;
2043 arg = op_prepend_elem(OP_LIST,
2044 newSVOP(OP_CONST, 0, stashsv),
2045 op_prepend_elem(OP_LIST,
2046 newUNOP(OP_REFGEN, 0,
2047 mod(arg, OP_REFGEN)),
2048 dup_attrlist(attrs)));
2049
2050 /* Fake up a method call to import */
2051 meth = newSVpvs_share("import");
2052 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2053 op_append_elem(OP_LIST,
2054 op_prepend_elem(OP_LIST, pack, list(arg)),
2055 newSVOP(OP_METHOD_NAMED, 0, meth)));
2056 imop->op_private |= OPpENTERSUB_NOMOD;
2057
2058 /* Combine the ops. */
2059 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
2060}
2061
2062/*
2063=notfor apidoc apply_attrs_string
2064
2065Attempts to apply a list of attributes specified by the C<attrstr> and
2066C<len> arguments to the subroutine identified by the C<cv> argument which
2067is expected to be associated with the package identified by the C<stashpv>
2068argument (see L<attributes>). It gets this wrong, though, in that it
2069does not correctly identify the boundaries of the individual attribute
2070specifications within C<attrstr>. This is not really intended for the
2071public API, but has to be listed here for systems such as AIX which
2072need an explicit export list for symbols. (It's called from XS code
2073in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2074to respect attribute syntax properly would be welcome.
2075
2076=cut
2077*/
2078
2079void
2080Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2081 const char *attrstr, STRLEN len)
2082{
2083 OP *attrs = NULL;
2084
2085 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2086
2087 if (!len) {
2088 len = strlen(attrstr);
2089 }
2090
2091 while (len) {
2092 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2093 if (len) {
2094 const char * const sstr = attrstr;
2095 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2096 attrs = op_append_elem(OP_LIST, attrs,
2097 newSVOP(OP_CONST, 0,
2098 newSVpvn(sstr, attrstr-sstr)));
2099 }
2100 }
2101
2102 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
2103 newSVpvs(ATTRSMODULE),
2104 NULL, op_prepend_elem(OP_LIST,
2105 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2106 op_prepend_elem(OP_LIST,
2107 newSVOP(OP_CONST, 0,
2108 newRV(MUTABLE_SV(cv))),
2109 attrs)));
2110}
2111
2112STATIC OP *
2113S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
2114{
2115 dVAR;
2116 I32 type;
2117
2118 PERL_ARGS_ASSERT_MY_KID;
2119
2120 if (!o || (PL_parser && PL_parser->error_count))
2121 return o;
2122
2123 type = o->op_type;
2124 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2125 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2126 return o;
2127 }
2128
2129 if (type == OP_LIST) {
2130 OP *kid;
2131 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
2132 my_kid(kid, attrs, imopsp);
2133 } else if (type == OP_UNDEF
2134#ifdef PERL_MAD
2135 || type == OP_STUB
2136#endif
2137 ) {
2138 return o;
2139 } else if (type == OP_RV2SV || /* "our" declaration */
2140 type == OP_RV2AV ||
2141 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
2142 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
2143 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2144 OP_DESC(o),
2145 PL_parser->in_my == KEY_our
2146 ? "our"
2147 : PL_parser->in_my == KEY_state ? "state" : "my"));
2148 } else if (attrs) {
2149 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
2150 PL_parser->in_my = FALSE;
2151 PL_parser->in_my_stash = NULL;
2152 apply_attrs(GvSTASH(gv),
2153 (type == OP_RV2SV ? GvSV(gv) :
2154 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2155 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
2156 attrs, FALSE);
2157 }
2158 o->op_private |= OPpOUR_INTRO;
2159 return o;
2160 }
2161 else if (type != OP_PADSV &&
2162 type != OP_PADAV &&
2163 type != OP_PADHV &&
2164 type != OP_PUSHMARK)
2165 {
2166 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
2167 OP_DESC(o),
2168 PL_parser->in_my == KEY_our
2169 ? "our"
2170 : PL_parser->in_my == KEY_state ? "state" : "my"));
2171 return o;
2172 }
2173 else if (attrs && type != OP_PUSHMARK) {
2174 HV *stash;
2175
2176 PL_parser->in_my = FALSE;
2177 PL_parser->in_my_stash = NULL;
2178
2179 /* check for C<my Dog $spot> when deciding package */
2180 stash = PAD_COMPNAME_TYPE(o->op_targ);
2181 if (!stash)
2182 stash = PL_curstash;
2183 apply_attrs_my(stash, o, attrs, imopsp);
2184 }
2185 o->op_flags |= OPf_MOD;
2186 o->op_private |= OPpLVAL_INTRO;
2187 if (PL_parser->in_my == KEY_state)
2188 o->op_private |= OPpPAD_STATE;
2189 return o;
2190}
2191
2192OP *
2193Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2194{
2195 dVAR;
2196 OP *rops;
2197 int maybe_scalar = 0;
2198
2199 PERL_ARGS_ASSERT_MY_ATTRS;
2200
2201/* [perl #17376]: this appears to be premature, and results in code such as
2202 C< our(%x); > executing in list mode rather than void mode */
2203#if 0
2204 if (o->op_flags & OPf_PARENS)
2205 list(o);
2206 else
2207 maybe_scalar = 1;
2208#else
2209 maybe_scalar = 1;
2210#endif
2211 if (attrs)
2212 SAVEFREEOP(attrs);
2213 rops = NULL;
2214 o = my_kid(o, attrs, &rops);
2215 if (rops) {
2216 if (maybe_scalar && o->op_type == OP_PADSV) {
2217 o = scalar(op_append_list(OP_LIST, rops, o));
2218 o->op_private |= OPpLVAL_INTRO;
2219 }
2220 else
2221 o = op_append_list(OP_LIST, o, rops);
2222 }
2223 PL_parser->in_my = FALSE;
2224 PL_parser->in_my_stash = NULL;
2225 return o;
2226}
2227
2228OP *
2229Perl_sawparens(pTHX_ OP *o)
2230{
2231 PERL_UNUSED_CONTEXT;
2232 if (o)
2233 o->op_flags |= OPf_PARENS;
2234 return o;
2235}
2236
2237OP *
2238Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
2239{
2240 OP *o;
2241 bool ismatchop = 0;
2242 const OPCODE ltype = left->op_type;
2243 const OPCODE rtype = right->op_type;
2244
2245 PERL_ARGS_ASSERT_BIND_MATCH;
2246
2247 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2248 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
2249 {
2250 const char * const desc
2251 = PL_op_desc[(rtype == OP_SUBST || rtype == OP_TRANS)
2252 ? (int)rtype : OP_MATCH];
2253 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2254 ? "@array" : "%hash");
2255 Perl_warner(aTHX_ packWARN(WARN_MISC),
2256 "Applying %s to %s will act on scalar(%s)",
2257 desc, sample, sample);
2258 }
2259
2260 if (rtype == OP_CONST &&
2261 cSVOPx(right)->op_private & OPpCONST_BARE &&
2262 cSVOPx(right)->op_private & OPpCONST_STRICT)
2263 {
2264 no_bareword_allowed(right);
2265 }
2266
2267 /* !~ doesn't make sense with s///r, so error on it for now */
2268 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
2269 type == OP_NOT)
2270 yyerror("Using !~ with s///r doesn't make sense");
2271
2272 ismatchop = (rtype == OP_MATCH ||
2273 rtype == OP_SUBST ||
2274 rtype == OP_TRANS)
2275 && !(right->op_flags & OPf_SPECIAL);
2276 if (ismatchop && right->op_private & OPpTARGET_MY) {
2277 right->op_targ = 0;
2278 right->op_private &= ~OPpTARGET_MY;
2279 }
2280 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
2281 OP *newleft;
2282
2283 right->op_flags |= OPf_STACKED;
2284 if (rtype != OP_MATCH &&
2285 ! (rtype == OP_TRANS &&
2286 right->op_private & OPpTRANS_IDENTICAL) &&
2287 ! (rtype == OP_SUBST &&
2288 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
2289 newleft = mod(left, rtype);
2290 else
2291 newleft = left;
2292 if (right->op_type == OP_TRANS)
2293 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
2294 else
2295 o = op_prepend_elem(rtype, scalar(newleft), right);
2296 if (type == OP_NOT)
2297 return newUNOP(OP_NOT, 0, scalar(o));
2298 return o;
2299 }
2300 else
2301 return bind_match(type, left,
2302 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
2303}
2304
2305OP *
2306Perl_invert(pTHX_ OP *o)
2307{
2308 if (!o)
2309 return NULL;
2310 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
2311}
2312
2313OP *
2314Perl_scope(pTHX_ OP *o)
2315{
2316 dVAR;
2317 if (o) {
2318 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2319 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
2320 o->op_type = OP_LEAVE;
2321 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
2322 }
2323 else if (o->op_type == OP_LINESEQ) {
2324 OP *kid;
2325 o->op_type = OP_SCOPE;
2326 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2327 kid = ((LISTOP*)o)->op_first;
2328 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
2329 op_null(kid);
2330
2331 /* The following deals with things like 'do {1 for 1}' */
2332 kid = kid->op_sibling;
2333 if (kid &&
2334 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2335 op_null(kid);
2336 }
2337 }
2338 else
2339 o = newLISTOP(OP_SCOPE, 0, o, NULL);
2340 }
2341 return o;
2342}
2343
2344int
2345Perl_block_start(pTHX_ int full)
2346{
2347 dVAR;
2348 const int retval = PL_savestack_ix;
2349
2350 pad_block_start(full);
2351 SAVEHINTS();
2352 PL_hints &= ~HINT_BLOCK_SCOPE;
2353 SAVECOMPILEWARNINGS();
2354 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
2355
2356 CALL_BLOCK_HOOKS(bhk_start, full);
2357
2358 return retval;
2359}
2360
2361OP*
2362Perl_block_end(pTHX_ I32 floor, OP *seq)
2363{
2364 dVAR;
2365 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
2366 OP* retval = scalarseq(seq);
2367
2368 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
2369
2370 LEAVE_SCOPE(floor);
2371 CopHINTS_set(&PL_compiling, PL_hints);
2372 if (needblockscope)
2373 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
2374 pad_leavemy();
2375
2376 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
2377
2378 return retval;
2379}
2380
2381/*
2382=head1 Compile-time scope hooks
2383
2384=for apidoc Ao||blockhook_register
2385
2386Register a set of hooks to be called when the Perl lexical scope changes
2387at compile time. See L<perlguts/"Compile-time scope hooks">.
2388
2389=cut
2390*/
2391
2392void
2393Perl_blockhook_register(pTHX_ BHK *hk)
2394{
2395 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
2396
2397 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
2398}
2399
2400STATIC OP *
2401S_newDEFSVOP(pTHX)
2402{
2403 dVAR;
2404 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
2405 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
2406 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2407 }
2408 else {
2409 OP * const o = newOP(OP_PADSV, 0);
2410 o->op_targ = offset;
2411 return o;
2412 }
2413}
2414
2415void
2416Perl_newPROG(pTHX_ OP *o)
2417{
2418 dVAR;
2419
2420 PERL_ARGS_ASSERT_NEWPROG;
2421
2422 if (PL_in_eval) {
2423 if (PL_eval_root)
2424 return;
2425 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2426 ((PL_in_eval & EVAL_KEEPERR)
2427 ? OPf_SPECIAL : 0), o);
2428 /* don't use LINKLIST, since PL_eval_root might indirect through
2429 * a rather expensive function call and LINKLIST evaluates its
2430 * argument more than once */
2431 PL_eval_start = op_linklist(PL_eval_root);
2432 PL_eval_root->op_private |= OPpREFCOUNTED;
2433 OpREFCNT_set(PL_eval_root, 1);
2434 PL_eval_root->op_next = 0;
2435 CALL_PEEP(PL_eval_start);
2436 }
2437 else {
2438 if (o->op_type == OP_STUB) {
2439 PL_comppad_name = 0;
2440 PL_compcv = 0;
2441 S_op_destroy(aTHX_ o);
2442 return;
2443 }
2444 PL_main_root = scope(sawparens(scalarvoid(o)));
2445 PL_curcop = &PL_compiling;
2446 PL_main_start = LINKLIST(PL_main_root);
2447 PL_main_root->op_private |= OPpREFCOUNTED;
2448 OpREFCNT_set(PL_main_root, 1);
2449 PL_main_root->op_next = 0;
2450 CALL_PEEP(PL_main_start);
2451 PL_compcv = 0;
2452
2453 /* Register with debugger */
2454 if (PERLDB_INTER) {
2455 CV * const cv = get_cvs("DB::postponed", 0);
2456 if (cv) {
2457 dSP;
2458 PUSHMARK(SP);
2459 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
2460 PUTBACK;
2461 call_sv(MUTABLE_SV(cv), G_DISCARD);
2462 }
2463 }
2464 }
2465}
2466
2467OP *
2468Perl_localize(pTHX_ OP *o, I32 lex)
2469{
2470 dVAR;
2471
2472 PERL_ARGS_ASSERT_LOCALIZE;
2473
2474 if (o->op_flags & OPf_PARENS)
2475/* [perl #17376]: this appears to be premature, and results in code such as
2476 C< our(%x); > executing in list mode rather than void mode */
2477#if 0
2478 list(o);
2479#else
2480 NOOP;
2481#endif
2482 else {
2483 if ( PL_parser->bufptr > PL_parser->oldbufptr
2484 && PL_parser->bufptr[-1] == ','
2485 && ckWARN(WARN_PARENTHESIS))
2486 {
2487 char *s = PL_parser->bufptr;
2488 bool sigil = FALSE;
2489
2490 /* some heuristics to detect a potential error */
2491 while (*s && (strchr(", \t\n", *s)))
2492 s++;
2493
2494 while (1) {
2495 if (*s && strchr("@$%*", *s) && *++s
2496 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2497 s++;
2498 sigil = TRUE;
2499 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2500 s++;
2501 while (*s && (strchr(", \t\n", *s)))
2502 s++;
2503 }
2504 else
2505 break;
2506 }
2507 if (sigil && (*s == ';' || *s == '=')) {
2508 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
2509 "Parentheses missing around \"%s\" list",
2510 lex
2511 ? (PL_parser->in_my == KEY_our
2512 ? "our"
2513 : PL_parser->in_my == KEY_state
2514 ? "state"
2515 : "my")
2516 : "local");
2517 }
2518 }
2519 }
2520 if (lex)
2521 o = my(o);
2522 else
2523 o = mod(o, OP_NULL); /* a bit kludgey */
2524 PL_parser->in_my = FALSE;
2525 PL_parser->in_my_stash = NULL;
2526 return o;
2527}
2528
2529OP *
2530Perl_jmaybe(pTHX_ OP *o)
2531{
2532 PERL_ARGS_ASSERT_JMAYBE;
2533
2534 if (o->op_type == OP_LIST) {
2535 OP * const o2
2536 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2537 o = convert(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
2538 }
2539 return o;
2540}
2541
2542static OP *
2543S_fold_constants(pTHX_ register OP *o)
2544{
2545 dVAR;
2546 register OP * VOL curop;
2547 OP *newop;
2548 VOL I32 type = o->op_type;
2549 SV * VOL sv = NULL;
2550 int ret = 0;
2551 I32 oldscope;
2552 OP *old_next;
2553 SV * const oldwarnhook = PL_warnhook;
2554 SV * const olddiehook = PL_diehook;
2555 COP not_compiling;
2556 dJMPENV;
2557
2558 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
2559
2560 if (PL_opargs[type] & OA_RETSCALAR)
2561 scalar(o);
2562 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
2563 o->op_targ = pad_alloc(type, SVs_PADTMP);
2564
2565 /* integerize op, unless it happens to be C<-foo>.
2566 * XXX should pp_i_negate() do magic string negation instead? */
2567 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2568 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2569 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2570 {
2571 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
2572 }
2573
2574 if (!(PL_opargs[type] & OA_FOLDCONST))
2575 goto nope;
2576
2577 switch (type) {
2578 case OP_NEGATE:
2579 /* XXX might want a ck_negate() for this */
2580 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2581 break;
2582 case OP_UCFIRST:
2583 case OP_LCFIRST:
2584 case OP_UC:
2585 case OP_LC:
2586 case OP_SLT:
2587 case OP_SGT:
2588 case OP_SLE:
2589 case OP_SGE:
2590 case OP_SCMP:
2591 /* XXX what about the numeric ops? */
2592 if (PL_hints & HINT_LOCALE)
2593 goto nope;
2594 break;
2595 }
2596
2597 if (PL_parser && PL_parser->error_count)
2598 goto nope; /* Don't try to run w/ errors */
2599
2600 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
2601 const OPCODE type = curop->op_type;
2602 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2603 type != OP_LIST &&
2604 type != OP_SCALAR &&
2605 type != OP_NULL &&
2606 type != OP_PUSHMARK)
2607 {
2608 goto nope;
2609 }
2610 }
2611
2612 curop = LINKLIST(o);
2613 old_next = o->op_next;
2614 o->op_next = 0;
2615 PL_op = curop;
2616
2617 oldscope = PL_scopestack_ix;
2618 create_eval_scope(G_FAKINGEVAL);
2619
2620 /* Verify that we don't need to save it: */
2621 assert(PL_curcop == &PL_compiling);
2622 StructCopy(&PL_compiling, &not_compiling, COP);
2623 PL_curcop = &not_compiling;
2624 /* The above ensures that we run with all the correct hints of the
2625 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
2626 assert(IN_PERL_RUNTIME);
2627 PL_warnhook = PERL_WARNHOOK_FATAL;
2628 PL_diehook = NULL;
2629 JMPENV_PUSH(ret);
2630
2631 switch (ret) {
2632 case 0:
2633 CALLRUNOPS(aTHX);
2634 sv = *(PL_stack_sp--);
2635 if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
2636 pad_swipe(o->op_targ, FALSE);
2637 else if (SvTEMP(sv)) { /* grab mortal temp? */
2638 SvREFCNT_inc_simple_void(sv);
2639 SvTEMP_off(sv);
2640 }
2641 break;
2642 case 3:
2643 /* Something tried to die. Abandon constant folding. */
2644 /* Pretend the error never happened. */
2645 CLEAR_ERRSV();
2646 o->op_next = old_next;
2647 break;
2648 default:
2649 JMPENV_POP;
2650 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2651 PL_warnhook = oldwarnhook;
2652 PL_diehook = olddiehook;
2653 /* XXX note that this croak may fail as we've already blown away
2654 * the stack - eg any nested evals */
2655 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2656 }
2657 JMPENV_POP;
2658 PL_warnhook = oldwarnhook;
2659 PL_diehook = olddiehook;
2660 PL_curcop = &PL_compiling;
2661
2662 if (PL_scopestack_ix > oldscope)
2663 delete_eval_scope();
2664
2665 if (ret)
2666 goto nope;
2667
2668#ifndef PERL_MAD
2669 op_free(o);
2670#endif
2671 assert(sv);
2672 if (type == OP_RV2GV)
2673 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
2674 else
2675 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
2676 op_getmad(o,newop,'f');
2677 return newop;
2678
2679 nope:
2680 return o;
2681}
2682
2683static OP *
2684S_gen_constant_list(pTHX_ register OP *o)
2685{
2686 dVAR;
2687 register OP *curop;
2688 const I32 oldtmps_floor = PL_tmps_floor;
2689
2690 list(o);
2691 if (PL_parser && PL_parser->error_count)
2692 return o; /* Don't attempt to run with errors */
2693
2694 PL_op = curop = LINKLIST(o);
2695 o->op_next = 0;
2696 CALL_PEEP(curop);
2697 pp_pushmark();
2698 CALLRUNOPS(aTHX);
2699 PL_op = curop;
2700 assert (!(curop->op_flags & OPf_SPECIAL));
2701 assert(curop->op_type == OP_RANGE);
2702 pp_anonlist();
2703 PL_tmps_floor = oldtmps_floor;
2704
2705 o->op_type = OP_RV2AV;
2706 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
2707 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2708 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
2709 o->op_opt = 0; /* needs to be revisited in rpeep() */
2710 curop = ((UNOP*)o)->op_first;
2711 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
2712#ifdef PERL_MAD
2713 op_getmad(curop,o,'O');
2714#else
2715 op_free(curop);
2716#endif
2717 LINKLIST(o);
2718 return list(o);
2719}
2720
2721OP *
2722Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
2723{
2724 dVAR;
2725 if (!o || o->op_type != OP_LIST)
2726 o = newLISTOP(OP_LIST, 0, o, NULL);
2727 else
2728 o->op_flags &= ~OPf_WANT;
2729
2730 if (!(PL_opargs[type] & OA_MARK))
2731 op_null(cLISTOPo->op_first);
2732
2733 o->op_type = (OPCODE)type;
2734 o->op_ppaddr = PL_ppaddr[type];
2735 o->op_flags |= flags;
2736
2737 o = CHECKOP(type, o);
2738 if (o->op_type != (unsigned)type)
2739 return o;
2740
2741 return fold_constants(o);
2742}
2743
2744/*
2745=head1 Optree Manipulation Functions
2746*/
2747
2748/* List constructors */
2749
2750/*
2751=for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
2752
2753Append an item to the list of ops contained directly within a list-type
2754op, returning the lengthened list. I<first> is the list-type op,
2755and I<last> is the op to append to the list. I<optype> specifies the
2756intended opcode for the list. If I<first> is not already a list of the
2757right type, it will be upgraded into one. If either I<first> or I<last>
2758is null, the other is returned unchanged.
2759
2760=cut
2761*/
2762
2763OP *
2764Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
2765{
2766 if (!first)
2767 return last;
2768
2769 if (!last)
2770 return first;
2771
2772 if (first->op_type != (unsigned)type
2773 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2774 {
2775 return newLISTOP(type, 0, first, last);
2776 }
2777
2778 if (first->op_flags & OPf_KIDS)
2779 ((LISTOP*)first)->op_last->op_sibling = last;
2780 else {
2781 first->op_flags |= OPf_KIDS;
2782 ((LISTOP*)first)->op_first = last;
2783 }
2784 ((LISTOP*)first)->op_last = last;
2785 return first;
2786}
2787
2788/*
2789=for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
2790
2791Concatenate the lists of ops contained directly within two list-type ops,
2792returning the combined list. I<first> and I<last> are the list-type ops
2793to concatenate. I<optype> specifies the intended opcode for the list.
2794If either I<first> or I<last> is not already a list of the right type,
2795it will be upgraded into one. If either I<first> or I<last> is null,
2796the other is returned unchanged.
2797
2798=cut
2799*/
2800
2801OP *
2802Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
2803{
2804 if (!first)
2805 return last;
2806
2807 if (!last)
2808 return first;
2809
2810 if (first->op_type != (unsigned)type)
2811 return op_prepend_elem(type, first, last);
2812
2813 if (last->op_type != (unsigned)type)
2814 return op_append_elem(type, first, last);
2815
2816 ((LISTOP*)first)->op_last->op_sibling = ((LISTOP*)last)->op_first;
2817 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
2818 first->op_flags |= (last->op_flags & OPf_KIDS);
2819
2820#ifdef PERL_MAD
2821 if (((LISTOP*)last)->op_first && first->op_madprop) {
2822 MADPROP *mp = ((LISTOP*)last)->op_first->op_madprop;
2823 if (mp) {
2824 while (mp->mad_next)
2825 mp = mp->mad_next;
2826 mp->mad_next = first->op_madprop;
2827 }
2828 else {
2829 ((LISTOP*)last)->op_first->op_madprop = first->op_madprop;
2830 }
2831 }
2832 first->op_madprop = last->op_madprop;
2833 last->op_madprop = 0;
2834#endif
2835
2836 S_op_destroy(aTHX_ last);
2837
2838 return first;
2839}
2840
2841/*
2842=for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
2843
2844Prepend an item to the list of ops contained directly within a list-type
2845op, returning the lengthened list. I<first> is the op to prepend to the
2846list, and I<last> is the list-type op. I<optype> specifies the intended
2847opcode for the list. If I<last> is not already a list of the right type,
2848it will be upgraded into one. If either I<first> or I<last> is null,
2849the other is returned unchanged.
2850
2851=cut
2852*/
2853
2854OP *
2855Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
2856{
2857 if (!first)
2858 return last;
2859
2860 if (!last)
2861 return first;
2862
2863 if (last->op_type == (unsigned)type) {
2864 if (type == OP_LIST) { /* already a PUSHMARK there */
2865 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2866 ((LISTOP*)last)->op_first->op_sibling = first;
2867 if (!(first->op_flags & OPf_PARENS))
2868 last->op_flags &= ~OPf_PARENS;
2869 }
2870 else {
2871 if (!(last->op_flags & OPf_KIDS)) {
2872 ((LISTOP*)last)->op_last = first;
2873 last->op_flags |= OPf_KIDS;
2874 }
2875 first->op_sibling = ((LISTOP*)last)->op_first;
2876 ((LISTOP*)last)->op_first = first;
2877 }
2878 last->op_flags |= OPf_KIDS;
2879 return last;
2880 }
2881
2882 return newLISTOP(type, 0, first, last);
2883}
2884
2885/* Constructors */
2886
2887#ifdef PERL_MAD
2888
2889TOKEN *
2890Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2891{
2892 TOKEN *tk;
2893 Newxz(tk, 1, TOKEN);
2894 tk->tk_type = (OPCODE)optype;
2895 tk->tk_type = 12345;
2896 tk->tk_lval = lval;
2897 tk->tk_mad = madprop;
2898 return tk;
2899}
2900
2901void
2902Perl_token_free(pTHX_ TOKEN* tk)
2903{
2904 PERL_ARGS_ASSERT_TOKEN_FREE;
2905
2906 if (tk->tk_type != 12345)
2907 return;
2908 mad_free(tk->tk_mad);
2909 Safefree(tk);
2910}
2911
2912void
2913Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2914{
2915 MADPROP* mp;
2916 MADPROP* tm;
2917
2918 PERL_ARGS_ASSERT_TOKEN_GETMAD;
2919
2920 if (tk->tk_type != 12345) {
2921 Perl_warner(aTHX_ packWARN(WARN_MISC),
2922 "Invalid TOKEN object ignored");
2923 return;
2924 }
2925 tm = tk->tk_mad;
2926 if (!tm)
2927 return;
2928
2929 /* faked up qw list? */
2930 if (slot == '(' &&
2931 tm->mad_type == MAD_SV &&
2932 SvPVX((SV *)tm->mad_val)[0] == 'q')
2933 slot = 'x';
2934
2935 if (o) {
2936 mp = o->op_madprop;
2937 if (mp) {
2938 for (;;) {
2939 /* pretend constant fold didn't happen? */
2940 if (mp->mad_key == 'f' &&
2941 (o->op_type == OP_CONST ||
2942 o->op_type == OP_GV) )
2943 {
2944 token_getmad(tk,(OP*)mp->mad_val,slot);
2945 return;
2946 }
2947 if (!mp->mad_next)
2948 break;
2949 mp = mp->mad_next;
2950 }
2951 mp->mad_next = tm;
2952 mp = mp->mad_next;
2953 }
2954 else {
2955 o->op_madprop = tm;
2956 mp = o->op_madprop;
2957 }
2958 if (mp->mad_key == 'X')
2959 mp->mad_key = slot; /* just change the first one */
2960
2961 tk->tk_mad = 0;
2962 }
2963 else
2964 mad_free(tm);
2965 Safefree(tk);
2966}
2967
2968void
2969Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
2970{
2971 MADPROP* mp;
2972 if (!from)
2973 return;
2974 if (o) {
2975 mp = o->op_madprop;
2976 if (mp) {
2977 for (;;) {
2978 /* pretend constant fold didn't happen? */
2979 if (mp->mad_key == 'f' &&
2980 (o->op_type == OP_CONST ||
2981 o->op_type == OP_GV) )
2982 {
2983 op_getmad(from,(OP*)mp->mad_val,slot);
2984 return;
2985 }
2986 if (!mp->mad_next)
2987 break;
2988 mp = mp->mad_next;
2989 }
2990 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
2991 }
2992 else {
2993 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
2994 }
2995 }
2996}
2997
2998void
2999Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
3000{
3001 MADPROP* mp;
3002 if (!from)
3003 return;
3004 if (o) {
3005 mp = o->op_madprop;
3006 if (mp) {
3007 for (;;) {
3008 /* pretend constant fold didn't happen? */
3009 if (mp->mad_key == 'f' &&
3010 (o->op_type == OP_CONST ||
3011 o->op_type == OP_GV) )
3012 {
3013 op_getmad(from,(OP*)mp->mad_val,slot);
3014 return;
3015 }
3016 if (!mp->mad_next)
3017 break;
3018 mp = mp->mad_next;
3019 }
3020 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
3021 }
3022 else {
3023 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
3024 }
3025 }
3026 else {
3027 PerlIO_printf(PerlIO_stderr(),
3028 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
3029 op_free(from);
3030 }
3031}
3032
3033void
3034Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
3035{
3036 MADPROP* tm;
3037 if (!mp || !o)
3038 return;
3039 if (slot)
3040 mp->mad_key = slot;
3041 tm = o->op_madprop;
3042 o->op_madprop = mp;
3043 for (;;) {
3044 if (!mp->mad_next)
3045 break;
3046 mp = mp->mad_next;
3047 }
3048 mp->mad_next = tm;
3049}
3050
3051void
3052Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
3053{
3054 if (!o)
3055 return;
3056 addmad(tm, &(o->op_madprop), slot);
3057}
3058
3059void
3060Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
3061{
3062 MADPROP* mp;
3063 if (!tm || !root)
3064 return;
3065 if (slot)
3066 tm->mad_key = slot;
3067 mp = *root;
3068 if (!mp) {
3069 *root = tm;
3070 return;
3071 }
3072 for (;;) {
3073 if (!mp->mad_next)
3074 break;
3075 mp = mp->mad_next;
3076 }
3077 mp->mad_next = tm;
3078}
3079
3080MADPROP *
3081Perl_newMADsv(pTHX_ char key, SV* sv)
3082{
3083 PERL_ARGS_ASSERT_NEWMADSV;
3084
3085 return newMADPROP(key, MAD_SV, sv, 0);
3086}
3087
3088MADPROP *
3089Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
3090{
3091 MADPROP *mp;
3092 Newxz(mp, 1, MADPROP);
3093 mp->mad_next = 0;
3094 mp->mad_key = key;
3095 mp->mad_vlen = vlen;
3096 mp->mad_type = type;
3097 mp->mad_val = val;
3098/* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
3099 return mp;
3100}
3101
3102void
3103Perl_mad_free(pTHX_ MADPROP* mp)
3104{
3105/* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
3106 if (!mp)
3107 return;
3108 if (mp->mad_next)
3109 mad_free(mp->mad_next);
3110/* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
3111 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
3112 switch (mp->mad_type) {
3113 case MAD_NULL:
3114 break;
3115 case MAD_PV:
3116 Safefree((char*)mp->mad_val);
3117 break;
3118 case MAD_OP:
3119 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
3120 op_free((OP*)mp->mad_val);
3121 break;
3122 case MAD_SV:
3123 sv_free(MUTABLE_SV(mp->mad_val));
3124 break;
3125 default:
3126 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3127 break;
3128 }
3129 Safefree(mp);
3130}
3131
3132#endif
3133
3134/*
3135=head1 Optree construction
3136
3137=for apidoc Am|OP *|newNULLLIST
3138
3139Constructs, checks, and returns a new C<stub> op, which represents an
3140empty list expression.
3141
3142=cut
3143*/
3144
3145OP *
3146Perl_newNULLLIST(pTHX)
3147{
3148 return newOP(OP_STUB, 0);
3149}
3150
3151static OP *
3152S_force_list(pTHX_ OP *o)
3153{
3154 if (!o || o->op_type != OP_LIST)
3155 o = newLISTOP(OP_LIST, 0, o, NULL);
3156 op_null(o);
3157 return o;
3158}
3159
3160/*
3161=for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
3162
3163Constructs, checks, and returns an op of any list type. I<type> is
3164the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3165C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
3166supply up to two ops to be direct children of the list op; they are
3167consumed by this function and become part of the constructed op tree.
3168
3169=cut
3170*/
3171
3172OP *
3173Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3174{
3175 dVAR;
3176 LISTOP *listop;
3177
3178 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3179
3180 NewOp(1101, listop, 1, LISTOP);
3181
3182 listop->op_type = (OPCODE)type;
3183 listop->op_ppaddr = PL_ppaddr[type];
3184 if (first || last)
3185 flags |= OPf_KIDS;
3186 listop->op_flags = (U8)flags;
3187
3188 if (!last && first)
3189 last = first;
3190 else if (!first && last)
3191 first = last;
3192 else if (first)
3193 first->op_sibling = last;
3194 listop->op_first = first;
3195 listop->op_last = last;
3196 if (type == OP_LIST) {
3197 OP* const pushop = newOP(OP_PUSHMARK, 0);
3198 pushop->op_sibling = first;
3199 listop->op_first = pushop;
3200 listop->op_flags |= OPf_KIDS;
3201 if (!last)
3202 listop->op_last = pushop;
3203 }
3204
3205 return CHECKOP(type, listop);
3206}
3207
3208/*
3209=for apidoc Am|OP *|newOP|I32 type|I32 flags
3210
3211Constructs, checks, and returns an op of any base type (any type that
3212has no extra fields). I<type> is the opcode. I<flags> gives the
3213eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
3214of C<op_private>.
3215
3216=cut
3217*/
3218
3219OP *
3220Perl_newOP(pTHX_ I32 type, I32 flags)
3221{
3222 dVAR;
3223 OP *o;
3224
3225 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3226 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3227 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3228 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3229
3230 NewOp(1101, o, 1, OP);
3231 o->op_type = (OPCODE)type;
3232 o->op_ppaddr = PL_ppaddr[type];
3233 o->op_flags = (U8)flags;
3234 o->op_latefree = 0;
3235 o->op_latefreed = 0;
3236 o->op_attached = 0;
3237
3238 o->op_next = o;
3239 o->op_private = (U8)(0 | (flags >> 8));
3240 if (PL_opargs[type] & OA_RETSCALAR)
3241 scalar(o);
3242 if (PL_opargs[type] & OA_TARGET)
3243 o->op_targ = pad_alloc(type, SVs_PADTMP);
3244 return CHECKOP(type, o);
3245}
3246
3247/*
3248=for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
3249
3250Constructs, checks, and returns an op of any unary type. I<type> is
3251the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3252C<OPf_KIDS> will be set automatically if required, and, shifted up eight
3253bits, the eight bits of C<op_private>, except that the bit with value 1
3254is automatically set. I<first> supplies an optional op to be the direct
3255child of the unary op; it is consumed by this function and become part
3256of the constructed op tree.
3257
3258=cut
3259*/
3260
3261OP *
3262Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
3263{
3264 dVAR;
3265 UNOP *unop;
3266
3267 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3268 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3269 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3270 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3271 || type == OP_SASSIGN
3272 || type == OP_ENTERTRY
3273 || type == OP_NULL );
3274
3275 if (!first)
3276 first = newOP(OP_STUB, 0);
3277 if (PL_opargs[type] & OA_MARK)
3278 first = force_list(first);
3279
3280 NewOp(1101, unop, 1, UNOP);
3281 unop->op_type = (OPCODE)type;
3282 unop->op_ppaddr = PL_ppaddr[type];
3283 unop->op_first = first;
3284 unop->op_flags = (U8)(flags | OPf_KIDS);
3285 unop->op_private = (U8)(1 | (flags >> 8));
3286 unop = (UNOP*) CHECKOP(type, unop);
3287 if (unop->op_next)
3288 return (OP*)unop;
3289
3290 return fold_constants((OP *) unop);
3291}
3292
3293/*
3294=for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
3295
3296Constructs, checks, and returns an op of any binary type. I<type>
3297is the opcode. I<flags> gives the eight bits of C<op_flags>, except
3298that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
3299the eight bits of C<op_private>, except that the bit with value 1 or
33002 is automatically set as required. I<first> and I<last> supply up to
3301two ops to be the direct children of the binary op; they are consumed
3302by this function and become part of the constructed op tree.
3303
3304=cut
3305*/
3306
3307OP *
3308Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
3309{
3310 dVAR;
3311 BINOP *binop;
3312
3313 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3314 || type == OP_SASSIGN || type == OP_NULL );
3315
3316 NewOp(1101, binop, 1, BINOP);
3317
3318 if (!first)
3319 first = newOP(OP_NULL, 0);
3320
3321 binop->op_type = (OPCODE)type;
3322 binop->op_ppaddr = PL_ppaddr[type];
3323 binop->op_first = first;
3324 binop->op_flags = (U8)(flags | OPf_KIDS);
3325 if (!last) {
3326 last = first;
3327 binop->op_private = (U8)(1 | (flags >> 8));
3328 }
3329 else {
3330 binop->op_private = (U8)(2 | (flags >> 8));
3331 first->op_sibling = last;
3332 }
3333
3334 binop = (BINOP*)CHECKOP(type, binop);
3335 if (binop->op_next || binop->op_type != (OPCODE)type)
3336 return (OP*)binop;
3337
3338 binop->op_last = binop->op_first->op_sibling;
3339
3340 return fold_constants((OP *)binop);
3341}
3342
3343static int uvcompare(const void *a, const void *b)
3344 __attribute__nonnull__(1)
3345 __attribute__nonnull__(2)
3346 __attribute__pure__;
3347static int uvcompare(const void *a, const void *b)
3348{
3349 if (*((const UV *)a) < (*(const UV *)b))
3350 return -1;
3351 if (*((const UV *)a) > (*(const UV *)b))
3352 return 1;
3353 if (*((const UV *)a+1) < (*(const UV *)b+1))
3354 return -1;
3355 if (*((const UV *)a+1) > (*(const UV *)b+1))
3356 return 1;
3357 return 0;
3358}
3359
3360static OP *
3361S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
3362{
3363 dVAR;
3364 SV * const tstr = ((SVOP*)expr)->op_sv;
3365 SV * const rstr =
3366#ifdef PERL_MAD
3367 (repl->op_type == OP_NULL)
3368 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3369#endif
3370 ((SVOP*)repl)->op_sv;
3371 STRLEN tlen;
3372 STRLEN rlen;
3373 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3374 const U8 *r = (U8*)SvPV_const(rstr, rlen);
3375 register I32 i;
3376 register I32 j;
3377 I32 grows = 0;
3378 register short *tbl;
3379
3380 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3381 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3382 I32 del = o->op_private & OPpTRANS_DELETE;
3383 SV* swash;
3384
3385 PERL_ARGS_ASSERT_PMTRANS;
3386
3387 PL_hints |= HINT_BLOCK_SCOPE;
3388
3389 if (SvUTF8(tstr))
3390 o->op_private |= OPpTRANS_FROM_UTF;
3391
3392 if (SvUTF8(rstr))
3393 o->op_private |= OPpTRANS_TO_UTF;
3394
3395 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
3396 SV* const listsv = newSVpvs("# comment\n");
3397 SV* transv = NULL;
3398 const U8* tend = t + tlen;
3399 const U8* rend = r + rlen;
3400 STRLEN ulen;
3401 UV tfirst = 1;
3402 UV tlast = 0;
3403 IV tdiff;
3404 UV rfirst = 1;
3405 UV rlast = 0;
3406 IV rdiff;
3407 IV diff;
3408 I32 none = 0;
3409 U32 max = 0;
3410 I32 bits;
3411 I32 havefinal = 0;
3412 U32 final = 0;
3413 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3414 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
3415 U8* tsave = NULL;
3416 U8* rsave = NULL;
3417 const U32 flags = UTF8_ALLOW_DEFAULT;
3418
3419 if (!from_utf) {
3420 STRLEN len = tlen;
3421 t = tsave = bytes_to_utf8(t, &len);
3422 tend = t + len;
3423 }
3424 if (!to_utf && rlen) {
3425 STRLEN len = rlen;
3426 r = rsave = bytes_to_utf8(r, &len);
3427 rend = r + len;
3428 }
3429
3430/* There are several snags with this code on EBCDIC:
3431 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3432 2. scan_const() in toke.c has encoded chars in native encoding which makes
3433 ranges at least in EBCDIC 0..255 range the bottom odd.
3434*/
3435
3436 if (complement) {
3437 U8 tmpbuf[UTF8_MAXBYTES+1];
3438 UV *cp;
3439 UV nextmin = 0;
3440 Newx(cp, 2*tlen, UV);
3441 i = 0;
3442 transv = newSVpvs("");
3443 while (t < tend) {
3444 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3445 t += ulen;
3446 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
3447 t++;
3448 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
3449 t += ulen;
3450 }
3451 else {
3452 cp[2*i+1] = cp[2*i];
3453 }
3454 i++;
3455 }
3456 qsort(cp, i, 2*sizeof(UV), uvcompare);
3457 for (j = 0; j < i; j++) {
3458 UV val = cp[2*j];
3459 diff = val - nextmin;
3460 if (diff > 0) {
3461 t = uvuni_to_utf8(tmpbuf,nextmin);
3462 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3463 if (diff > 1) {
3464 U8 range_mark = UTF_TO_NATIVE(0xff);
3465 t = uvuni_to_utf8(tmpbuf, val - 1);
3466 sv_catpvn(transv, (char *)&range_mark, 1);
3467 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3468 }
3469 }
3470 val = cp[2*j+1];
3471 if (val >= nextmin)
3472 nextmin = val + 1;
3473 }
3474 t = uvuni_to_utf8(tmpbuf,nextmin);
3475 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3476 {
3477 U8 range_mark = UTF_TO_NATIVE(0xff);
3478 sv_catpvn(transv, (char *)&range_mark, 1);
3479 }
3480 t = uvuni_to_utf8_flags(tmpbuf, 0x7fffffff,
3481 UNICODE_ALLOW_SUPER);
3482 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
3483 t = (const U8*)SvPVX_const(transv);
3484 tlen = SvCUR(transv);
3485 tend = t + tlen;
3486 Safefree(cp);
3487 }
3488 else if (!rlen && !del) {
3489 r = t; rlen = tlen; rend = tend;
3490 }
3491 if (!squash) {
3492 if ((!rlen && !del) || t == r ||
3493 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
3494 {
3495 o->op_private |= OPpTRANS_IDENTICAL;
3496 }
3497 }
3498
3499 while (t < tend || tfirst <= tlast) {
3500 /* see if we need more "t" chars */
3501 if (tfirst > tlast) {
3502 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3503 t += ulen;
3504 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
3505 t++;
3506 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
3507 t += ulen;
3508 }
3509 else
3510 tlast = tfirst;
3511 }
3512
3513 /* now see if we need more "r" chars */
3514 if (rfirst > rlast) {
3515 if (r < rend) {
3516 rfirst = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3517 r += ulen;
3518 if (r < rend && NATIVE_TO_UTF(*r) == 0xff) { /* illegal utf8 val indicates range */
3519 r++;
3520 rlast = (I32)utf8n_to_uvuni(r, rend - r, &ulen, flags);
3521 r += ulen;
3522 }
3523 else
3524 rlast = rfirst;
3525 }
3526 else {
3527 if (!havefinal++)
3528 final = rlast;
3529 rfirst = rlast = 0xffffffff;
3530 }
3531 }
3532
3533 /* now see which range will peter our first, if either. */
3534 tdiff = tlast - tfirst;
3535 rdiff = rlast - rfirst;
3536
3537 if (tdiff <= rdiff)
3538 diff = tdiff;
3539 else
3540 diff = rdiff;
3541
3542 if (rfirst == 0xffffffff) {
3543 diff = tdiff; /* oops, pretend rdiff is infinite */
3544 if (diff > 0)
3545 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
3546 (long)tfirst, (long)tlast);
3547 else
3548 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
3549 }
3550 else {
3551 if (diff > 0)
3552 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
3553 (long)tfirst, (long)(tfirst + diff),
3554 (long)rfirst);
3555 else
3556 Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
3557 (long)tfirst, (long)rfirst);
3558
3559 if (rfirst + diff > max)
3560 max = rfirst + diff;
3561 if (!grows)
3562 grows = (tfirst < rfirst &&
3563 UNISKIP(tfirst) < UNISKIP(rfirst + diff));
3564 rfirst += diff + 1;
3565 }
3566 tfirst += diff + 1;
3567 }
3568
3569 none = ++max;
3570 if (del)
3571 del = ++max;
3572
3573 if (max > 0xffff)
3574 bits = 32;
3575 else if (max > 0xff)
3576 bits = 16;
3577 else
3578 bits = 8;
3579
3580 PerlMemShared_free(cPVOPo->op_pv);
3581 cPVOPo->op_pv = NULL;
3582
3583 swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
3584#ifdef USE_ITHREADS
3585 cPADOPo->op_padix = pad_alloc(OP_TRANS, SVs_PADTMP);
3586 SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
3587 PAD_SETSV(cPADOPo->op_padix, swash);
3588 SvPADTMP_on(swash);
3589 SvREADONLY_on(swash);
3590#else
3591 cSVOPo->op_sv = swash;
3592#endif
3593 SvREFCNT_dec(listsv);
3594 SvREFCNT_dec(transv);
3595
3596 if (!del && havefinal && rlen)
3597 (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
3598 newSVuv((UV)final), 0);
3599
3600 if (grows)
3601 o->op_private |= OPpTRANS_GROWS;
3602
3603 Safefree(tsave);
3604 Safefree(rsave);
3605
3606#ifdef PERL_MAD
3607 op_getmad(expr,o,'e');
3608 op_getmad(repl,o,'r');
3609#else
3610 op_free(expr);
3611 op_free(repl);
3612#endif
3613 return o;
3614 }
3615
3616 tbl = (short*)cPVOPo->op_pv;
3617 if (complement) {
3618 Zero(tbl, 256, short);
3619 for (i = 0; i < (I32)tlen; i++)
3620 tbl[t[i]] = -1;
3621 for (i = 0, j = 0; i < 256; i++) {
3622 if (!tbl[i]) {
3623 if (j >= (I32)rlen) {
3624 if (del)
3625 tbl[i] = -2;
3626 else if (rlen)
3627 tbl[i] = r[j-1];
3628 else
3629 tbl[i] = (short)i;
3630 }
3631 else {
3632 if (i < 128 && r[j] >= 128)
3633 grows = 1;
3634 tbl[i] = r[j++];
3635 }
3636 }
3637 }
3638 if (!del) {
3639 if (!rlen) {
3640 j = rlen;
3641 if (!squash)
3642 o->op_private |= OPpTRANS_IDENTICAL;
3643 }
3644 else if (j >= (I32)rlen)
3645 j = rlen - 1;
3646 else {
3647 tbl =
3648 (short *)
3649 PerlMemShared_realloc(tbl,
3650 (0x101+rlen-j) * sizeof(short));
3651 cPVOPo->op_pv = (char*)tbl;
3652 }
3653 tbl[0x100] = (short)(rlen - j);
3654 for (i=0; i < (I32)rlen - j; i++)
3655 tbl[0x101+i] = r[j+i];
3656 }
3657 }
3658 else {
3659 if (!rlen && !del) {
3660 r = t; rlen = tlen;
3661 if (!squash)
3662 o->op_private |= OPpTRANS_IDENTICAL;
3663 }
3664 else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
3665 o->op_private |= OPpTRANS_IDENTICAL;
3666 }
3667 for (i = 0; i < 256; i++)
3668 tbl[i] = -1;
3669 for (i = 0, j = 0; i < (I32)tlen; i++,j++) {
3670 if (j >= (I32)rlen) {
3671 if (del) {
3672 if (tbl[t[i]] == -1)
3673 tbl[t[i]] = -2;
3674 continue;
3675 }
3676 --j;
3677 }
3678 if (tbl[t[i]] == -1) {
3679 if (t[i] < 128 && r[j] >= 128)
3680 grows = 1;
3681 tbl[t[i]] = r[j];
3682 }
3683 }
3684 }
3685
3686 if(del && rlen == tlen) {
3687 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
3688 } else if(rlen > tlen) {
3689 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
3690 }
3691
3692 if (grows)
3693 o->op_private |= OPpTRANS_GROWS;
3694#ifdef PERL_MAD
3695 op_getmad(expr,o,'e');
3696 op_getmad(repl,o,'r');
3697#else
3698 op_free(expr);
3699 op_free(repl);
3700#endif
3701
3702 return o;
3703}
3704
3705/*
3706=for apidoc Am|OP *|newPMOP|I32 type|I32 flags
3707
3708Constructs, checks, and returns an op of any pattern matching type.
3709I<type> is the opcode. I<flags> gives the eight bits of C<op_flags>
3710and, shifted up eight bits, the eight bits of C<op_private>.
3711
3712=cut
3713*/
3714
3715OP *
3716Perl_newPMOP(pTHX_ I32 type, I32 flags)
3717{
3718 dVAR;
3719 PMOP *pmop;
3720
3721 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP);
3722
3723 NewOp(1101, pmop, 1, PMOP);
3724 pmop->op_type = (OPCODE)type;
3725 pmop->op_ppaddr = PL_ppaddr[type];
3726 pmop->op_flags = (U8)flags;
3727 pmop->op_private = (U8)(0 | (flags >> 8));
3728
3729 if (PL_hints & HINT_RE_TAINT)
3730 pmop->op_pmflags |= PMf_RETAINT;
3731 if (PL_hints & HINT_LOCALE) {
3732 pmop->op_pmflags |= PMf_LOCALE;
3733 }
3734 else if ((! (PL_hints & HINT_BYTES)) && (PL_hints & HINT_UNI_8_BIT)) {
3735 pmop->op_pmflags |= RXf_PMf_UNICODE;
3736 }
3737
3738
3739#ifdef USE_ITHREADS
3740 assert(SvPOK(PL_regex_pad[0]));
3741 if (SvCUR(PL_regex_pad[0])) {
3742 /* Pop off the "packed" IV from the end. */
3743 SV *const repointer_list = PL_regex_pad[0];
3744 const char *p = SvEND(repointer_list) - sizeof(IV);
3745 const IV offset = *((IV*)p);
3746
3747 assert(SvCUR(repointer_list) % sizeof(IV) == 0);
3748
3749 SvEND_set(repointer_list, p);
3750
3751 pmop->op_pmoffset = offset;
3752 /* This slot should be free, so assert this: */
3753 assert(PL_regex_pad[offset] == &PL_sv_undef);
3754 } else {
3755 SV * const repointer = &PL_sv_undef;
3756 av_push(PL_regex_padav, repointer);
3757 pmop->op_pmoffset = av_len(PL_regex_padav);
3758 PL_regex_pad = AvARRAY(PL_regex_padav);
3759 }
3760#endif
3761
3762 return CHECKOP(type, pmop);
3763}
3764
3765/* Given some sort of match op o, and an expression expr containing a
3766 * pattern, either compile expr into a regex and attach it to o (if it's
3767 * constant), or convert expr into a runtime regcomp op sequence (if it's
3768 * not)
3769 *
3770 * isreg indicates that the pattern is part of a regex construct, eg
3771 * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
3772 * split "pattern", which aren't. In the former case, expr will be a list
3773 * if the pattern contains more than one term (eg /a$b/) or if it contains
3774 * a replacement, ie s/// or tr///.
3775 */
3776
3777OP *
3778Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg)
3779{
3780 dVAR;
3781 PMOP *pm;
3782 LOGOP *rcop;
3783 I32 repl_has_vars = 0;
3784 OP* repl = NULL;
3785 bool reglist;
3786
3787 PERL_ARGS_ASSERT_PMRUNTIME;
3788
3789 if (o->op_type == OP_SUBST || o->op_type == OP_TRANS) {
3790 /* last element in list is the replacement; pop it */
3791 OP* kid;
3792 repl = cLISTOPx(expr)->op_last;
3793 kid = cLISTOPx(expr)->op_first;
3794 while (kid->op_sibling != repl)
3795 kid = kid->op_sibling;
3796 kid->op_sibling = NULL;
3797 cLISTOPx(expr)->op_last = kid;
3798 }
3799
3800 if (isreg && expr->op_type == OP_LIST &&
3801 cLISTOPx(expr)->op_first->op_sibling == cLISTOPx(expr)->op_last)
3802 {
3803 /* convert single element list to element */
3804 OP* const oe = expr;
3805 expr = cLISTOPx(oe)->op_first->op_sibling;
3806 cLISTOPx(oe)->op_first->op_sibling = NULL;
3807 cLISTOPx(oe)->op_last = NULL;
3808 op_free(oe);
3809 }
3810
3811 if (o->op_type == OP_TRANS) {
3812 return pmtrans(o, expr, repl);
3813 }
3814
3815 reglist = isreg && expr->op_type == OP_LIST;
3816 if (reglist)
3817 op_null(expr);
3818
3819 PL_hints |= HINT_BLOCK_SCOPE;
3820 pm = (PMOP*)o;
3821
3822 if (expr->op_type == OP_CONST) {
3823 SV *pat = ((SVOP*)expr)->op_sv;
3824 U32 pm_flags = pm->op_pmflags & PMf_COMPILETIME;
3825
3826 if (o->op_flags & OPf_SPECIAL)
3827 pm_flags |= RXf_SPLIT;
3828
3829 if (DO_UTF8(pat)) {
3830 assert (SvUTF8(pat));
3831 } else if (SvUTF8(pat)) {
3832 /* Not doing UTF-8, despite what the SV says. Is this only if we're
3833 trapped in use 'bytes'? */
3834 /* Make a copy of the octet sequence, but without the flag on, as
3835 the compiler now honours the SvUTF8 flag on pat. */
3836 STRLEN len;
3837 const char *const p = SvPV(pat, len);
3838 pat = newSVpvn_flags(p, len, SVs_TEMP);
3839 }
3840
3841 PM_SETRE(pm, CALLREGCOMP(pat, pm_flags));
3842
3843#ifdef PERL_MAD
3844 op_getmad(expr,(OP*)pm,'e');
3845#else
3846 op_free(expr);
3847#endif
3848 }
3849 else {
3850 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
3851 expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
3852 ? OP_REGCRESET
3853 : OP_REGCMAYBE),0,expr);
3854
3855 NewOp(1101, rcop, 1, LOGOP);
3856 rcop->op_type = OP_REGCOMP;
3857 rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
3858 rcop->op_first = scalar(expr);
3859 rcop->op_flags |= OPf_KIDS
3860 | ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0)
3861 | (reglist ? OPf_STACKED : 0);
3862 rcop->op_private = 1;
3863 rcop->op_other = o;
3864 if (reglist)
3865 rcop->op_targ = pad_alloc(rcop->op_type, SVs_PADTMP);
3866
3867 /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */
3868 PL_cv_has_eval = 1;
3869
3870 /* establish postfix order */
3871 if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
3872 LINKLIST(expr);
3873 rcop->op_next = expr;
3874 ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
3875 }
3876 else {
3877 rcop->op_next = LINKLIST(expr);
3878 expr->op_next = (OP*)rcop;
3879 }
3880
3881 op_prepend_elem(o->op_type, scalar((OP*)rcop), o);
3882 }
3883
3884 if (repl) {
3885 OP *curop;
3886 if (pm->op_pmflags & PMf_EVAL) {
3887 curop = NULL;
3888 if (CopLINE(PL_curcop) < (line_t)PL_parser->multi_end)
3889 CopLINE_set(PL_curcop, (line_t)PL_parser->multi_end);
3890 }
3891 else if (repl->op_type == OP_CONST)
3892 curop = repl;
3893 else {
3894 OP *lastop = NULL;
3895 for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
3896 if (curop->op_type == OP_SCOPE
3897 || curop->op_type == OP_LEAVE
3898 || (PL_opargs[curop->op_type] & OA_DANGEROUS)) {
3899 if (curop->op_type == OP_GV) {
3900 GV * const gv = cGVOPx_gv(curop);
3901 repl_has_vars = 1;
3902 if (strchr("&`'123456789+-\016\022", *GvENAME(gv)))
3903 break;
3904 }
3905 else if (curop->op_type == OP_RV2CV)
3906 break;
3907 else if (curop->op_type == OP_RV2SV ||
3908 curop->op_type == OP_RV2AV ||
3909 curop->op_type == OP_RV2HV ||
3910 curop->op_type == OP_RV2GV) {
3911 if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
3912 break;
3913 }
3914 else if (curop->op_type == OP_PADSV ||
3915 curop->op_type == OP_PADAV ||
3916 curop->op_type == OP_PADHV ||
3917 curop->op_type == OP_PADANY)
3918 {
3919 repl_has_vars = 1;
3920 }
3921 else if (curop->op_type == OP_PUSHRE)
3922 NOOP; /* Okay here, dangerous in newASSIGNOP */
3923 else
3924 break;
3925 }
3926 lastop = curop;
3927 }
3928 }
3929 if (curop == repl
3930 && !(repl_has_vars
3931 && (!PM_GETRE(pm)
3932 || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN)))
3933 {
3934 pm->op_pmflags |= PMf_CONST; /* const for long enough */
3935 op_prepend_elem(o->op_type, scalar(repl), o);
3936 }
3937 else {
3938 if (curop == repl && !PM_GETRE(pm)) { /* Has variables. */
3939 pm->op_pmflags |= PMf_MAYBE_CONST;
3940 }
3941 NewOp(1101, rcop, 1, LOGOP);
3942 rcop->op_type = OP_SUBSTCONT;
3943 rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
3944 rcop->op_first = scalar(repl);
3945 rcop->op_flags |= OPf_KIDS;
3946 rcop->op_private = 1;
3947 rcop->op_other = o;
3948
3949 /* establish postfix order */
3950 rcop->op_next = LINKLIST(repl);
3951 repl->op_next = (OP*)rcop;
3952
3953 pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop);
3954 assert(!(pm->op_pmflags & PMf_ONCE));
3955 pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop);
3956 rcop->op_next = 0;
3957 }
3958 }
3959
3960 return (OP*)pm;
3961}
3962
3963/*
3964=for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
3965
3966Constructs, checks, and returns an op of any type that involves an
3967embedded SV. I<type> is the opcode. I<flags> gives the eight bits
3968of C<op_flags>. I<sv> gives the SV to embed in the op; this function
3969takes ownership of one reference to it.
3970
3971=cut
3972*/
3973
3974OP *
3975Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
3976{
3977 dVAR;
3978 SVOP *svop;
3979
3980 PERL_ARGS_ASSERT_NEWSVOP;
3981
3982 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
3983 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
3984 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
3985
3986 NewOp(1101, svop, 1, SVOP);
3987 svop->op_type = (OPCODE)type;
3988 svop->op_ppaddr = PL_ppaddr[type];
3989 svop->op_sv = sv;
3990 svop->op_next = (OP*)svop;
3991 svop->op_flags = (U8)flags;
3992 if (PL_opargs[type] & OA_RETSCALAR)
3993 scalar((OP*)svop);
3994 if (PL_opargs[type] & OA_TARGET)
3995 svop->op_targ = pad_alloc(type, SVs_PADTMP);
3996 return CHECKOP(type, svop);
3997}
3998
3999#ifdef USE_ITHREADS
4000
4001/*
4002=for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
4003
4004Constructs, checks, and returns an op of any type that involves a
4005reference to a pad element. I<type> is the opcode. I<flags> gives the
4006eight bits of C<op_flags>. A pad slot is automatically allocated, and
4007is populated with I<sv>; this function takes ownership of one reference
4008to it.
4009
4010This function only exists if Perl has been compiled to use ithreads.
4011
4012=cut
4013*/
4014
4015OP *
4016Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
4017{
4018 dVAR;
4019 PADOP *padop;
4020
4021 PERL_ARGS_ASSERT_NEWPADOP;
4022
4023 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP
4024 || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4025 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP);
4026
4027 NewOp(1101, padop, 1, PADOP);
4028 padop->op_type = (OPCODE)type;
4029 padop->op_ppaddr = PL_ppaddr[type];
4030 padop->op_padix = pad_alloc(type, SVs_PADTMP);
4031 SvREFCNT_dec(PAD_SVl(padop->op_padix));
4032 PAD_SETSV(padop->op_padix, sv);
4033 assert(sv);
4034 SvPADTMP_on(sv);
4035 padop->op_next = (OP*)padop;
4036 padop->op_flags = (U8)flags;
4037 if (PL_opargs[type] & OA_RETSCALAR)
4038 scalar((OP*)padop);
4039 if (PL_opargs[type] & OA_TARGET)
4040 padop->op_targ = pad_alloc(type, SVs_PADTMP);
4041 return CHECKOP(type, padop);
4042}
4043
4044#endif /* !USE_ITHREADS */
4045
4046/*
4047=for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
4048
4049Constructs, checks, and returns an op of any type that involves an
4050embedded reference to a GV. I<type> is the opcode. I<flags> gives the
4051eight bits of C<op_flags>. I<gv> identifies the GV that the op should
4052reference; calling this function does not transfer ownership of any
4053reference to it.
4054
4055=cut
4056*/
4057
4058OP *
4059Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
4060{
4061 dVAR;
4062
4063 PERL_ARGS_ASSERT_NEWGVOP;
4064
4065#ifdef USE_ITHREADS
4066 GvIN_PAD_on(gv);
4067 return newPADOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4068#else
4069 return newSVOP(type, flags, SvREFCNT_inc_simple_NN(gv));
4070#endif
4071}
4072
4073/*
4074=for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
4075
4076Constructs, checks, and returns an op of any type that involves an
4077embedded C-level pointer (PV). I<type> is the opcode. I<flags> gives
4078the eight bits of C<op_flags>. I<pv> supplies the C-level pointer, which
4079must have been allocated using L</PerlMemShared_malloc>; the memory will
4080be freed when the op is destroyed.
4081
4082=cut
4083*/
4084
4085OP *
4086Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
4087{
4088 dVAR;
4089 PVOP *pvop;
4090
4091 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP
4092 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
4093
4094 NewOp(1101, pvop, 1, PVOP);
4095 pvop->op_type = (OPCODE)type;
4096 pvop->op_ppaddr = PL_ppaddr[type];
4097 pvop->op_pv = pv;
4098 pvop->op_next = (OP*)pvop;
4099 pvop->op_flags = (U8)flags;
4100 if (PL_opargs[type] & OA_RETSCALAR)
4101 scalar((OP*)pvop);
4102 if (PL_opargs[type] & OA_TARGET)
4103 pvop->op_targ = pad_alloc(type, SVs_PADTMP);
4104 return CHECKOP(type, pvop);
4105}
4106
4107#ifdef PERL_MAD
4108OP*
4109#else
4110void
4111#endif
4112Perl_package(pTHX_ OP *o)
4113{
4114 dVAR;
4115 SV *const sv = cSVOPo->op_sv;
4116#ifdef PERL_MAD
4117 OP *pegop;
4118#endif
4119
4120 PERL_ARGS_ASSERT_PACKAGE;
4121
4122 save_hptr(&PL_curstash);
4123 save_item(PL_curstname);
4124
4125 PL_curstash = gv_stashsv(sv, GV_ADD);
4126
4127 sv_setsv(PL_curstname, sv);
4128
4129 PL_hints |= HINT_BLOCK_SCOPE;
4130 PL_parser->copline = NOLINE;
4131 PL_parser->expect = XSTATE;
4132
4133#ifndef PERL_MAD
4134 op_free(o);
4135#else
4136 if (!PL_madskills) {
4137 op_free(o);
4138 return NULL;
4139 }
4140
4141 pegop = newOP(OP_NULL,0);
4142 op_getmad(o,pegop,'P');
4143 return pegop;
4144#endif
4145}
4146
4147void
4148Perl_package_version( pTHX_ OP *v )
4149{
4150 dVAR;
4151 U32 savehints = PL_hints;
4152 PERL_ARGS_ASSERT_PACKAGE_VERSION;
4153 PL_hints &= ~HINT_STRICT_VARS;
4154 sv_setsv( GvSV(gv_fetchpvs("VERSION", GV_ADDMULTI, SVt_PV)), cSVOPx(v)->op_sv );
4155 PL_hints = savehints;
4156 op_free(v);
4157}
4158
4159#ifdef PERL_MAD
4160OP*
4161#else
4162void
4163#endif
4164Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg)
4165{
4166 dVAR;
4167 OP *pack;
4168 OP *imop;
4169 OP *veop;
4170#ifdef PERL_MAD
4171 OP *pegop = newOP(OP_NULL,0);
4172#endif
4173
4174 PERL_ARGS_ASSERT_UTILIZE;
4175
4176 if (idop->op_type != OP_CONST)
4177 Perl_croak(aTHX_ "Module name must be constant");
4178
4179 if (PL_madskills)
4180 op_getmad(idop,pegop,'U');
4181
4182 veop = NULL;
4183
4184 if (version) {
4185 SV * const vesv = ((SVOP*)version)->op_sv;
4186
4187 if (PL_madskills)
4188 op_getmad(version,pegop,'V');
4189 if (!arg && !SvNIOKp(vesv)) {
4190 arg = version;
4191 }
4192 else {
4193 OP *pack;
4194 SV *meth;
4195
4196 if (version->op_type != OP_CONST || !SvNIOKp(vesv))
4197 Perl_croak(aTHX_ "Version number must be a constant number");
4198
4199 /* Make copy of idop so we don't free it twice */
4200 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4201
4202 /* Fake up a method call to VERSION */
4203 meth = newSVpvs_share("VERSION");
4204 veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4205 op_append_elem(OP_LIST,
4206 op_prepend_elem(OP_LIST, pack, list(version)),
4207 newSVOP(OP_METHOD_NAMED, 0, meth)));
4208 }
4209 }
4210
4211 /* Fake up an import/unimport */
4212 if (arg && arg->op_type == OP_STUB) {
4213 if (PL_madskills)
4214 op_getmad(arg,pegop,'S');
4215 imop = arg; /* no import on explicit () */
4216 }
4217 else if (SvNIOKp(((SVOP*)idop)->op_sv)) {
4218 imop = NULL; /* use 5.0; */
4219 if (!aver)
4220 idop->op_private |= OPpCONST_NOVER;
4221 }
4222 else {
4223 SV *meth;
4224
4225 if (PL_madskills)
4226 op_getmad(arg,pegop,'A');
4227
4228 /* Make copy of idop so we don't free it twice */
4229 pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv));
4230
4231 /* Fake up a method call to import/unimport */
4232 meth = aver
4233 ? newSVpvs_share("import") : newSVpvs_share("unimport");
4234 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
4235 op_append_elem(OP_LIST,
4236 op_prepend_elem(OP_LIST, pack, list(arg)),
4237 newSVOP(OP_METHOD_NAMED, 0, meth)));
4238 }
4239
4240 /* Fake up the BEGIN {}, which does its thing immediately. */
4241 newATTRSUB(floor,
4242 newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
4243 NULL,
4244 NULL,
4245 op_append_elem(OP_LINESEQ,
4246 op_append_elem(OP_LINESEQ,
4247 newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
4248 newSTATEOP(0, NULL, veop)),
4249 newSTATEOP(0, NULL, imop) ));
4250
4251 /* The "did you use incorrect case?" warning used to be here.
4252 * The problem is that on case-insensitive filesystems one
4253 * might get false positives for "use" (and "require"):
4254 * "use Strict" or "require CARP" will work. This causes
4255 * portability problems for the script: in case-strict
4256 * filesystems the script will stop working.
4257 *
4258 * The "incorrect case" warning checked whether "use Foo"
4259 * imported "Foo" to your namespace, but that is wrong, too:
4260 * there is no requirement nor promise in the language that
4261 * a Foo.pm should or would contain anything in package "Foo".
4262 *
4263 * There is very little Configure-wise that can be done, either:
4264 * the case-sensitivity of the build filesystem of Perl does not
4265 * help in guessing the case-sensitivity of the runtime environment.
4266 */
4267
4268 PL_hints |= HINT_BLOCK_SCOPE;
4269 PL_parser->copline = NOLINE;
4270 PL_parser->expect = XSTATE;
4271 PL_cop_seqmax++; /* Purely for B::*'s benefit */
4272
4273#ifdef PERL_MAD
4274 if (!PL_madskills) {
4275 /* FIXME - don't allocate pegop if !PL_madskills */
4276 op_free(pegop);
4277 return NULL;
4278 }
4279 return pegop;
4280#endif
4281}
4282
4283/*
4284=head1 Embedding Functions
4285
4286=for apidoc load_module
4287
4288Loads the module whose name is pointed to by the string part of name.
4289Note that the actual module name, not its filename, should be given.
4290Eg, "Foo::Bar" instead of "Foo/Bar.pm". flags can be any of
4291PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
4292(or 0 for no flags). ver, if specified, provides version semantics
4293similar to C<use Foo::Bar VERSION>. The optional trailing SV*
4294arguments can be used to specify arguments to the module's import()
4295method, similar to C<use Foo::Bar VERSION LIST>. They must be
4296terminated with a final NULL pointer. Note that this list can only
4297be omitted when the PERL_LOADMOD_NOIMPORT flag has been used.
4298Otherwise at least a single NULL pointer to designate the default
4299import list is required.
4300
4301=cut */
4302
4303void
4304Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
4305{
4306 va_list args;
4307
4308 PERL_ARGS_ASSERT_LOAD_MODULE;
4309
4310 va_start(args, ver);
4311 vload_module(flags, name, ver, &args);
4312 va_end(args);
4313}
4314
4315#ifdef PERL_IMPLICIT_CONTEXT
4316void
4317Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
4318{
4319 dTHX;
4320 va_list args;
4321 PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT;
4322 va_start(args, ver);
4323 vload_module(flags, name, ver, &args);
4324 va_end(args);
4325}
4326#endif
4327
4328void
4329Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
4330{
4331 dVAR;
4332 OP *veop, *imop;
4333 OP * const modname = newSVOP(OP_CONST, 0, name);
4334
4335 PERL_ARGS_ASSERT_VLOAD_MODULE;
4336
4337 modname->op_private |= OPpCONST_BARE;
4338 if (ver) {
4339 veop = newSVOP(OP_CONST, 0, ver);
4340 }
4341 else
4342 veop = NULL;
4343 if (flags & PERL_LOADMOD_NOIMPORT) {
4344 imop = sawparens(newNULLLIST());
4345 }
4346 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
4347 imop = va_arg(*args, OP*);
4348 }
4349 else {
4350 SV *sv;
4351 imop = NULL;
4352 sv = va_arg(*args, SV*);
4353 while (sv) {
4354 imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
4355 sv = va_arg(*args, SV*);
4356 }
4357 }
4358
4359 /* utilize() fakes up a BEGIN { require ..; import ... }, so make sure
4360 * that it has a PL_parser to play with while doing that, and also
4361 * that it doesn't mess with any existing parser, by creating a tmp
4362 * new parser with lex_start(). This won't actually be used for much,
4363 * since pp_require() will create another parser for the real work. */
4364
4365 ENTER;
4366 SAVEVPTR(PL_curcop);
4367 lex_start(NULL, NULL, FALSE);
4368 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
4369 veop, modname, imop);
4370 LEAVE;
4371}
4372
4373OP *
4374Perl_dofile(pTHX_ OP *term, I32 force_builtin)
4375{
4376 dVAR;
4377 OP *doop;
4378 GV *gv = NULL;
4379
4380 PERL_ARGS_ASSERT_DOFILE;
4381
4382 if (!force_builtin) {
4383 gv = gv_fetchpvs("do", GV_NOTQUAL, SVt_PVCV);
4384 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
4385 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "do", FALSE);
4386 gv = gvp ? *gvp : NULL;
4387 }
4388 }
4389
4390 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
4391 doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
4392 op_append_elem(OP_LIST, term,
4393 scalar(newUNOP(OP_RV2CV, 0,
4394 newGVOP(OP_GV, 0, gv))))));
4395 }
4396 else {
4397 doop = newUNOP(OP_DOFILE, 0, scalar(term));
4398 }
4399 return doop;
4400}
4401
4402/*
4403=head1 Optree construction
4404
4405=for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
4406
4407Constructs, checks, and returns an C<lslice> (list slice) op. I<flags>
4408gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
4409be set automatically, and, shifted up eight bits, the eight bits of
4410C<op_private>, except that the bit with value 1 or 2 is automatically
4411set as required. I<listval> and I<subscript> supply the parameters of
4412the slice; they are consumed by this function and become part of the
4413constructed op tree.
4414
4415=cut
4416*/
4417
4418OP *
4419Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
4420{
4421 return newBINOP(OP_LSLICE, flags,
4422 list(force_list(subscript)),
4423 list(force_list(listval)) );
4424}
4425
4426STATIC I32
4427S_is_list_assignment(pTHX_ register const OP *o)
4428{
4429 unsigned type;
4430 U8 flags;
4431
4432 if (!o)
4433 return TRUE;
4434
4435 if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS))
4436 o = cUNOPo->op_first;
4437
4438 flags = o->op_flags;
4439 type = o->op_type;
4440 if (type == OP_COND_EXPR) {
4441 const I32 t = is_list_assignment(cLOGOPo->op_first->op_sibling);
4442 const I32 f = is_list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
4443
4444 if (t && f)
4445 return TRUE;
4446 if (t || f)
4447 yyerror("Assignment to both a list and a scalar");
4448 return FALSE;
4449 }
4450
4451 if (type == OP_LIST &&
4452 (flags & OPf_WANT) == OPf_WANT_SCALAR &&
4453 o->op_private & OPpLVAL_INTRO)
4454 return FALSE;
4455
4456 if (type == OP_LIST || flags & OPf_PARENS ||
4457 type == OP_RV2AV || type == OP_RV2HV ||
4458 type == OP_ASLICE || type == OP_HSLICE)
4459 return TRUE;
4460
4461 if (type == OP_PADAV || type == OP_PADHV)
4462 return TRUE;
4463
4464 if (type == OP_RV2SV)
4465 return FALSE;
4466
4467 return FALSE;
4468}
4469
4470/*
4471=for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
4472
4473Constructs, checks, and returns an assignment op. I<left> and I<right>
4474supply the parameters of the assignment; they are consumed by this
4475function and become part of the constructed op tree.
4476
4477If I<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
4478a suitable conditional optree is constructed. If I<optype> is the opcode
4479of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
4480performs the binary operation and assigns the result to the left argument.
4481Either way, if I<optype> is non-zero then I<flags> has no effect.
4482
4483If I<optype> is zero, then a plain scalar or list assignment is
4484constructed. Which type of assignment it is is automatically determined.
4485I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
4486will be set automatically, and, shifted up eight bits, the eight bits
4487of C<op_private>, except that the bit with value 1 or 2 is automatically
4488set as required.
4489
4490=cut
4491*/
4492
4493OP *
4494Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
4495{
4496 dVAR;
4497 OP *o;
4498
4499 if (optype) {
4500 if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) {
4501 return newLOGOP(optype, 0,
4502 mod(scalar(left), optype),
4503 newUNOP(OP_SASSIGN, 0, scalar(right)));
4504 }
4505 else {
4506 return newBINOP(optype, OPf_STACKED,
4507 mod(scalar(left), optype), scalar(right));
4508 }
4509 }
4510
4511 if (is_list_assignment(left)) {
4512 static const char no_list_state[] = "Initialization of state variables"
4513 " in list context currently forbidden";
4514 OP *curop;
4515 bool maybe_common_vars = TRUE;
4516
4517 PL_modcount = 0;
4518 /* Grandfathering $[ assignment here. Bletch.*/
4519 /* Only simple assignments like C<< ($[) = 1 >> are allowed */
4520 PL_eval_start = (left->op_type == OP_CONST) ? right : NULL;
4521 left = mod(left, OP_AASSIGN);
4522 if (PL_eval_start)
4523 PL_eval_start = 0;
4524 else if (left->op_type == OP_CONST) {
4525 deprecate("assignment to $[");
4526 /* FIXME for MAD */
4527 /* Result of assignment is always 1 (or we'd be dead already) */
4528 return newSVOP(OP_CONST, 0, newSViv(1));
4529 }
4530 curop = list(force_list(left));
4531 o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
4532 o->op_private = (U8)(0 | (flags >> 8));
4533
4534 if ((left->op_type == OP_LIST
4535 || (left->op_type == OP_NULL && left->op_targ == OP_LIST)))
4536 {
4537 OP* lop = ((LISTOP*)left)->op_first;
4538 maybe_common_vars = FALSE;
4539 while (lop) {
4540 if (lop->op_type == OP_PADSV ||
4541 lop->op_type == OP_PADAV ||
4542 lop->op_type == OP_PADHV ||
4543 lop->op_type == OP_PADANY) {
4544 if (!(lop->op_private & OPpLVAL_INTRO))
4545 maybe_common_vars = TRUE;
4546
4547 if (lop->op_private & OPpPAD_STATE) {
4548 if (left->op_private & OPpLVAL_INTRO) {
4549 /* Each variable in state($a, $b, $c) = ... */
4550 }
4551 else {
4552 /* Each state variable in
4553 (state $a, my $b, our $c, $d, undef) = ... */
4554 }
4555 yyerror(no_list_state);
4556 } else {
4557 /* Each my variable in
4558 (state $a, my $b, our $c, $d, undef) = ... */
4559 }
4560 } else if (lop->op_type == OP_UNDEF ||
4561 lop->op_type == OP_PUSHMARK) {
4562 /* undef may be interesting in
4563 (state $a, undef, state $c) */
4564 } else {
4565 /* Other ops in the list. */
4566 maybe_common_vars = TRUE;
4567 }
4568 lop = lop->op_sibling;
4569 }
4570 }
4571 else if ((left->op_private & OPpLVAL_INTRO)
4572 && ( left->op_type == OP_PADSV
4573 || left->op_type == OP_PADAV
4574 || left->op_type == OP_PADHV
4575 || left->op_type == OP_PADANY))
4576 {
4577 if (left->op_type == OP_PADSV) maybe_common_vars = FALSE;
4578 if (left->op_private & OPpPAD_STATE) {
4579 /* All single variable list context state assignments, hence
4580 state ($a) = ...
4581 (state $a) = ...
4582 state @a = ...
4583 state (@a) = ...
4584 (state @a) = ...
4585 state %a = ...
4586 state (%a) = ...
4587 (state %a) = ...
4588 */
4589 yyerror(no_list_state);
4590 }
4591 }
4592
4593 /* PL_generation sorcery:
4594 * an assignment like ($a,$b) = ($c,$d) is easier than
4595 * ($a,$b) = ($c,$a), since there is no need for temporary vars.
4596 * To detect whether there are common vars, the global var
4597 * PL_generation is incremented for each assign op we compile.
4598 * Then, while compiling the assign op, we run through all the
4599 * variables on both sides of the assignment, setting a spare slot
4600 * in each of them to PL_generation. If any of them already have
4601 * that value, we know we've got commonality. We could use a
4602 * single bit marker, but then we'd have to make 2 passes, first
4603 * to clear the flag, then to test and set it. To find somewhere
4604 * to store these values, evil chicanery is done with SvUVX().
4605 */
4606
4607 if (maybe_common_vars) {
4608 OP *lastop = o;
4609 PL_generation++;
4610 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
4611 if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
4612 if (curop->op_type == OP_GV) {
4613 GV *gv = cGVOPx_gv(curop);
4614 if (gv == PL_defgv
4615 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4616 break;
4617 GvASSIGN_GENERATION_set(gv, PL_generation);
4618 }
4619 else if (curop->op_type == OP_PADSV ||
4620 curop->op_type == OP_PADAV ||
4621 curop->op_type == OP_PADHV ||
4622 curop->op_type == OP_PADANY)
4623 {
4624 if (PAD_COMPNAME_GEN(curop->op_targ)
4625 == (STRLEN)PL_generation)
4626 break;
4627 PAD_COMPNAME_GEN_set(curop->op_targ, PL_generation);
4628
4629 }
4630 else if (curop->op_type == OP_RV2CV)
4631 break;
4632 else if (curop->op_type == OP_RV2SV ||
4633 curop->op_type == OP_RV2AV ||
4634 curop->op_type == OP_RV2HV ||
4635 curop->op_type == OP_RV2GV) {
4636 if (lastop->op_type != OP_GV) /* funny deref? */
4637 break;
4638 }
4639 else if (curop->op_type == OP_PUSHRE) {
4640#ifdef USE_ITHREADS
4641 if (((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff) {
4642 GV *const gv = MUTABLE_GV(PAD_SVl(((PMOP*)curop)->op_pmreplrootu.op_pmtargetoff));
4643 if (gv == PL_defgv
4644 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4645 break;
4646 GvASSIGN_GENERATION_set(gv, PL_generation);
4647 }
4648#else
4649 GV *const gv
4650 = ((PMOP*)curop)->op_pmreplrootu.op_pmtargetgv;
4651 if (gv) {
4652 if (gv == PL_defgv
4653 || (int)GvASSIGN_GENERATION(gv) == PL_generation)
4654 break;
4655 GvASSIGN_GENERATION_set(gv, PL_generation);
4656 }
4657#endif
4658 }
4659 else
4660 break;
4661 }
4662 lastop = curop;
4663 }
4664 if (curop != o)
4665 o->op_private |= OPpASSIGN_COMMON;
4666 }
4667
4668 if (right && right->op_type == OP_SPLIT && !PL_madskills) {
4669 OP* tmpop = ((LISTOP*)right)->op_first;
4670 if (tmpop && (tmpop->op_type == OP_PUSHRE)) {
4671 PMOP * const pm = (PMOP*)tmpop;
4672 if (left->op_type == OP_RV2AV &&
4673 !(left->op_private & OPpLVAL_INTRO) &&
4674 !(o->op_private & OPpASSIGN_COMMON) )
4675 {
4676 tmpop = ((UNOP*)left)->op_first;
4677 if (tmpop->op_type == OP_GV
4678#ifdef USE_ITHREADS
4679 && !pm->op_pmreplrootu.op_pmtargetoff
4680#else
4681 && !pm->op_pmreplrootu.op_pmtargetgv
4682#endif
4683 ) {
4684#ifdef USE_ITHREADS
4685 pm->op_pmreplrootu.op_pmtargetoff
4686 = cPADOPx(tmpop)->op_padix;
4687 cPADOPx(tmpop)->op_padix = 0; /* steal it */
4688#else
4689 pm->op_pmreplrootu.op_pmtargetgv
4690 = MUTABLE_GV(cSVOPx(tmpop)->op_sv);
4691 cSVOPx(tmpop)->op_sv = NULL; /* steal it */
4692#endif
4693 pm->op_pmflags |= PMf_ONCE;
4694 tmpop = cUNOPo->op_first; /* to list (nulled) */
4695 tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
4696 tmpop->op_sibling = NULL; /* don't free split */
4697 right->op_next = tmpop->op_next; /* fix starting loc */
4698 op_free(o); /* blow off assign */
4699 right->op_flags &= ~OPf_WANT;
4700 /* "I don't know and I don't care." */
4701 return right;
4702 }
4703 }
4704 else {
4705 if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
4706 ((LISTOP*)right)->op_last->op_type == OP_CONST)
4707 {
4708 SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
4709 if (SvIOK(sv) && SvIVX(sv) == 0)
4710 sv_setiv(sv, PL_modcount+1);
4711 }
4712 }
4713 }
4714 }
4715 return o;
4716 }
4717 if (!right)
4718 right = newOP(OP_UNDEF, 0);
4719 if (right->op_type == OP_READLINE) {
4720 right->op_flags |= OPf_STACKED;
4721 return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
4722 }
4723 else {
4724 PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
4725 o = newBINOP(OP_SASSIGN, flags,
4726 scalar(right), mod(scalar(left), OP_SASSIGN) );
4727 if (PL_eval_start)
4728 PL_eval_start = 0;
4729 else {
4730 if (!PL_madskills) { /* assignment to $[ is ignored when making a mad dump */
4731 deprecate("assignment to $[");
4732 op_free(o);
4733 o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling)));
4734 o->op_private |= OPpCONST_ARYBASE;
4735 }
4736 }
4737 }
4738 return o;
4739}
4740
4741/*
4742=for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
4743
4744Constructs a state op (COP). The state op is normally a C<nextstate> op,
4745but will be a C<dbstate> op if debugging is enabled for currently-compiled
4746code. The state op is populated from L</PL_curcop> (or L</PL_compiling>).
4747If I<label> is non-null, it supplies the name of a label to attach to
4748the state op; this function takes ownership of the memory pointed at by
4749I<label>, and will free it. I<flags> gives the eight bits of C<op_flags>
4750for the state op.
4751
4752If I<o> is null, the state op is returned. Otherwise the state op is
4753combined with I<o> into a C<lineseq> list op, which is returned. I<o>
4754is consumed by this function and becomes part of the returned op tree.
4755
4756=cut
4757*/
4758
4759OP *
4760Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
4761{
4762 dVAR;
4763 const U32 seq = intro_my();
4764 register COP *cop;
4765
4766 NewOp(1101, cop, 1, COP);
4767 if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
4768 cop->op_type = OP_DBSTATE;
4769 cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
4770 }
4771 else {
4772 cop->op_type = OP_NEXTSTATE;
4773 cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
4774 }
4775 cop->op_flags = (U8)flags;
4776 CopHINTS_set(cop, PL_hints);
4777#ifdef NATIVE_HINTS
4778 cop->op_private |= NATIVE_HINTS;
4779#endif
4780 CopHINTS_set(&PL_compiling, CopHINTS_get(cop));
4781 cop->op_next = (OP*)cop;
4782
4783 cop->cop_seq = seq;
4784 /* CopARYBASE is now "virtual", in that it's stored as a flag bit in
4785 CopHINTS and a possible value in cop_hints_hash, so no need to copy it.
4786 */
4787 cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings);
4788 cop->cop_hints_hash = PL_curcop->cop_hints_hash;
4789 if (cop->cop_hints_hash) {
4790 HINTS_REFCNT_LOCK;
4791 cop->cop_hints_hash->refcounted_he_refcnt++;
4792 HINTS_REFCNT_UNLOCK;
4793 }
4794 if (label) {
4795 Perl_store_cop_label(aTHX_ cop, label, strlen(label), 0);
4796
4797 PL_hints |= HINT_BLOCK_SCOPE;
4798 /* It seems that we need to defer freeing this pointer, as other parts
4799 of the grammar end up wanting to copy it after this op has been
4800 created. */
4801 SAVEFREEPV(label);
4802 }
4803
4804 if (PL_parser && PL_parser->copline == NOLINE)
4805 CopLINE_set(cop, CopLINE(PL_curcop));
4806 else {
4807 CopLINE_set(cop, PL_parser->copline);
4808 if (PL_parser)
4809 PL_parser->copline = NOLINE;
4810 }
4811#ifdef USE_ITHREADS
4812 CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
4813#else
4814 CopFILEGV_set(cop, CopFILEGV(PL_curcop));
4815#endif
4816 CopSTASH_set(cop, PL_curstash);
4817
4818 if ((PERLDB_LINE || PERLDB_SAVESRC) && PL_curstash != PL_debstash) {
4819 /* this line can have a breakpoint - store the cop in IV */
4820 AV *av = CopFILEAVx(PL_curcop);
4821 if (av) {
4822 SV * const * const svp = av_fetch(av, (I32)CopLINE(cop), FALSE);
4823 if (svp && *svp != &PL_sv_undef ) {
4824 (void)SvIOK_on(*svp);
4825 SvIV_set(*svp, PTR2IV(cop));
4826 }
4827 }
4828 }
4829
4830 if (flags & OPf_SPECIAL)
4831 op_null((OP*)cop);
4832 return op_prepend_elem(OP_LINESEQ, (OP*)cop, o);
4833}
4834
4835/*
4836=for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
4837
4838Constructs, checks, and returns a logical (flow control) op. I<type>
4839is the opcode. I<flags> gives the eight bits of C<op_flags>, except
4840that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
4841the eight bits of C<op_private>, except that the bit with value 1 is
4842automatically set. I<first> supplies the expression controlling the
4843flow, and I<other> supplies the side (alternate) chain of ops; they are
4844consumed by this function and become part of the constructed op tree.
4845
4846=cut
4847*/
4848
4849OP *
4850Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
4851{
4852 dVAR;
4853
4854 PERL_ARGS_ASSERT_NEWLOGOP;
4855
4856 return new_logop(type, flags, &first, &other);
4857}
4858
4859STATIC OP *
4860S_search_const(pTHX_ OP *o)
4861{
4862 PERL_ARGS_ASSERT_SEARCH_CONST;
4863
4864 switch (o->op_type) {
4865 case OP_CONST:
4866 return o;
4867 case OP_NULL:
4868 if (o->op_flags & OPf_KIDS)
4869 return search_const(cUNOPo->op_first);
4870 break;
4871 case OP_LEAVE:
4872 case OP_SCOPE:
4873 case OP_LINESEQ:
4874 {
4875 OP *kid;
4876 if (!(o->op_flags & OPf_KIDS))
4877 return NULL;
4878 kid = cLISTOPo->op_first;
4879 do {
4880 switch (kid->op_type) {
4881 case OP_ENTER:
4882 case OP_NULL:
4883 case OP_NEXTSTATE:
4884 kid = kid->op_sibling;
4885 break;
4886 default:
4887 if (kid != cLISTOPo->op_last)
4888 return NULL;
4889 goto last;
4890 }
4891 } while (kid);
4892 if (!kid)
4893 kid = cLISTOPo->op_last;
4894last:
4895 return search_const(kid);
4896 }
4897 }
4898
4899 return NULL;
4900}
4901
4902STATIC OP *
4903S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
4904{
4905 dVAR;
4906 LOGOP *logop;
4907 OP *o;
4908 OP *first;
4909 OP *other;
4910 OP *cstop = NULL;
4911 int prepend_not = 0;
4912
4913 PERL_ARGS_ASSERT_NEW_LOGOP;
4914
4915 first = *firstp;
4916 other = *otherp;
4917
4918 if (type == OP_XOR) /* Not short circuit, but here by precedence. */
4919 return newBINOP(type, flags, scalar(first), scalar(other));
4920
4921 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP);
4922
4923 scalarboolean(first);
4924 /* optimize AND and OR ops that have NOTs as children */
4925 if (first->op_type == OP_NOT
4926 && (first->op_flags & OPf_KIDS)
4927 && ((first->op_flags & OPf_SPECIAL) /* unless ($x) { } */
4928 || (other->op_type == OP_NOT)) /* if (!$x && !$y) { } */
4929 && !PL_madskills) {
4930 if (type == OP_AND || type == OP_OR) {
4931 if (type == OP_AND)
4932 type = OP_OR;
4933 else
4934 type = OP_AND;
4935 op_null(first);
4936 if (other->op_type == OP_NOT) { /* !a AND|OR !b => !(a OR|AND b) */
4937 op_null(other);
4938 prepend_not = 1; /* prepend a NOT op later */
4939 }
4940 }
4941 }
4942 /* search for a constant op that could let us fold the test */
4943 if ((cstop = search_const(first))) {
4944 if (cstop->op_private & OPpCONST_STRICT)
4945 no_bareword_allowed(cstop);
4946 else if ((cstop->op_private & OPpCONST_BARE))
4947 Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional");
4948 if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) ||
4949 (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) ||
4950 (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) {
4951 *firstp = NULL;
4952 if (other->op_type == OP_CONST)
4953 other->op_private |= OPpCONST_SHORTCIRCUIT;
4954 if (PL_madskills) {
4955 OP *newop = newUNOP(OP_NULL, 0, other);
4956 op_getmad(first, newop, '1');
4957 newop->op_targ = type; /* set "was" field */
4958 return newop;
4959 }
4960 op_free(first);
4961 if (other->op_type == OP_LEAVE)
4962 other = newUNOP(OP_NULL, OPf_SPECIAL, other);
4963 else if (other->op_type == OP_MATCH
4964 || other->op_type == OP_SUBST
4965 || other->op_type == OP_TRANS)
4966 /* Mark the op as being unbindable with =~ */
4967 other->op_flags |= OPf_SPECIAL;
4968 return other;
4969 }
4970 else {
4971 /* check for C<my $x if 0>, or C<my($x,$y) if 0> */
4972 const OP *o2 = other;
4973 if ( ! (o2->op_type == OP_LIST
4974 && (( o2 = cUNOPx(o2)->op_first))
4975 && o2->op_type == OP_PUSHMARK
4976 && (( o2 = o2->op_sibling)) )
4977 )
4978 o2 = other;
4979 if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV
4980 || o2->op_type == OP_PADHV)
4981 && o2->op_private & OPpLVAL_INTRO
4982 && !(o2->op_private & OPpPAD_STATE))
4983 {
4984 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
4985 "Deprecated use of my() in false conditional");
4986 }
4987
4988 *otherp = NULL;
4989 if (first->op_type == OP_CONST)
4990 first->op_private |= OPpCONST_SHORTCIRCUIT;
4991 if (PL_madskills) {
4992 first = newUNOP(OP_NULL, 0, first);
4993 op_getmad(other, first, '2');
4994 first->op_targ = type; /* set "was" field */
4995 }
4996 else
4997 op_free(other);
4998 return first;
4999 }
5000 }
5001 else if ((first->op_flags & OPf_KIDS) && type != OP_DOR
5002 && ckWARN(WARN_MISC)) /* [#24076] Don't warn for <FH> err FOO. */
5003 {
5004 const OP * const k1 = ((UNOP*)first)->op_first;
5005 const OP * const k2 = k1->op_sibling;
5006 OPCODE warnop = 0;
5007 switch (first->op_type)
5008 {
5009 case OP_NULL:
5010 if (k2 && k2->op_type == OP_READLINE
5011 && (k2->op_flags & OPf_STACKED)
5012 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5013 {
5014 warnop = k2->op_type;
5015 }
5016 break;
5017
5018 case OP_SASSIGN:
5019 if (k1->op_type == OP_READDIR
5020 || k1->op_type == OP_GLOB
5021 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5022 || k1->op_type == OP_EACH)
5023 {
5024 warnop = ((k1->op_type == OP_NULL)
5025 ? (OPCODE)k1->op_targ : k1->op_type);
5026 }
5027 break;
5028 }
5029 if (warnop) {
5030 const line_t oldline = CopLINE(PL_curcop);
5031 CopLINE_set(PL_curcop, PL_parser->copline);
5032 Perl_warner(aTHX_ packWARN(WARN_MISC),
5033 "Value of %s%s can be \"0\"; test with defined()",
5034 PL_op_desc[warnop],
5035 ((warnop == OP_READLINE || warnop == OP_GLOB)
5036 ? " construct" : "() operator"));
5037 CopLINE_set(PL_curcop, oldline);
5038 }
5039 }
5040
5041 if (!other)
5042 return first;
5043
5044 if (type == OP_ANDASSIGN || type == OP_ORASSIGN || type == OP_DORASSIGN)
5045 other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
5046
5047 NewOp(1101, logop, 1, LOGOP);
5048
5049 logop->op_type = (OPCODE)type;
5050 logop->op_ppaddr = PL_ppaddr[type];
5051 logop->op_first = first;
5052 logop->op_flags = (U8)(flags | OPf_KIDS);
5053 logop->op_other = LINKLIST(other);
5054 logop->op_private = (U8)(1 | (flags >> 8));
5055
5056 /* establish postfix order */
5057 logop->op_next = LINKLIST(first);
5058 first->op_next = (OP*)logop;
5059 first->op_sibling = other;
5060
5061 CHECKOP(type,logop);
5062
5063 o = newUNOP(prepend_not ? OP_NOT : OP_NULL, 0, (OP*)logop);
5064 other->op_next = o;
5065
5066 return o;
5067}
5068
5069/*
5070=for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
5071
5072Constructs, checks, and returns a conditional-expression (C<cond_expr>)
5073op. I<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
5074will be set automatically, and, shifted up eight bits, the eight bits of
5075C<op_private>, except that the bit with value 1 is automatically set.
5076I<first> supplies the expression selecting between the two branches,
5077and I<trueop> and I<falseop> supply the branches; they are consumed by
5078this function and become part of the constructed op tree.
5079
5080=cut
5081*/
5082
5083OP *
5084Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
5085{
5086 dVAR;
5087 LOGOP *logop;
5088 OP *start;
5089 OP *o;
5090 OP *cstop;
5091
5092 PERL_ARGS_ASSERT_NEWCONDOP;
5093
5094 if (!falseop)
5095 return newLOGOP(OP_AND, 0, first, trueop);
5096 if (!trueop)
5097 return newLOGOP(OP_OR, 0, first, falseop);
5098
5099 scalarboolean(first);
5100 if ((cstop = search_const(first))) {
5101 /* Left or right arm of the conditional? */
5102 const bool left = SvTRUE(((SVOP*)cstop)->op_sv);
5103 OP *live = left ? trueop : falseop;
5104 OP *const dead = left ? falseop : trueop;
5105 if (cstop->op_private & OPpCONST_BARE &&
5106 cstop->op_private & OPpCONST_STRICT) {
5107 no_bareword_allowed(cstop);
5108 }
5109 if (PL_madskills) {
5110 /* This is all dead code when PERL_MAD is not defined. */
5111 live = newUNOP(OP_NULL, 0, live);
5112 op_getmad(first, live, 'C');
5113 op_getmad(dead, live, left ? 'e' : 't');
5114 } else {
5115 op_free(first);
5116 op_free(dead);
5117 }
5118 if (live->op_type == OP_LEAVE)
5119 live = newUNOP(OP_NULL, OPf_SPECIAL, live);
5120 else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST
5121 || live->op_type == OP_TRANS)
5122 /* Mark the op as being unbindable with =~ */
5123 live->op_flags |= OPf_SPECIAL;
5124 return live;
5125 }
5126 NewOp(1101, logop, 1, LOGOP);
5127 logop->op_type = OP_COND_EXPR;
5128 logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
5129 logop->op_first = first;
5130 logop->op_flags = (U8)(flags | OPf_KIDS);
5131 logop->op_private = (U8)(1 | (flags >> 8));
5132 logop->op_other = LINKLIST(trueop);
5133 logop->op_next = LINKLIST(falseop);
5134
5135 CHECKOP(OP_COND_EXPR, /* that's logop->op_type */
5136 logop);
5137
5138 /* establish postfix order */
5139 start = LINKLIST(first);
5140 first->op_next = (OP*)logop;
5141
5142 first->op_sibling = trueop;
5143 trueop->op_sibling = falseop;
5144 o = newUNOP(OP_NULL, 0, (OP*)logop);
5145
5146 trueop->op_next = falseop->op_next = o;
5147
5148 o->op_next = start;
5149 return o;
5150}
5151
5152/*
5153=for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
5154
5155Constructs and returns a C<range> op, with subordinate C<flip> and
5156C<flop> ops. I<flags> gives the eight bits of C<op_flags> for the
5157C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
5158for both the C<flip> and C<range> ops, except that the bit with value
51591 is automatically set. I<left> and I<right> supply the expressions
5160controlling the endpoints of the range; they are consumed by this function
5161and become part of the constructed op tree.
5162
5163=cut
5164*/
5165
5166OP *
5167Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
5168{
5169 dVAR;
5170 LOGOP *range;
5171 OP *flip;
5172 OP *flop;
5173 OP *leftstart;
5174 OP *o;
5175
5176 PERL_ARGS_ASSERT_NEWRANGE;
5177
5178 NewOp(1101, range, 1, LOGOP);
5179
5180 range->op_type = OP_RANGE;
5181 range->op_ppaddr = PL_ppaddr[OP_RANGE];
5182 range->op_first = left;
5183 range->op_flags = OPf_KIDS;
5184 leftstart = LINKLIST(left);
5185 range->op_other = LINKLIST(right);
5186 range->op_private = (U8)(1 | (flags >> 8));
5187
5188 left->op_sibling = right;
5189
5190 range->op_next = (OP*)range;
5191 flip = newUNOP(OP_FLIP, flags, (OP*)range);
5192 flop = newUNOP(OP_FLOP, 0, flip);
5193 o = newUNOP(OP_NULL, 0, flop);
5194 LINKLIST(flop);
5195 range->op_next = leftstart;
5196
5197 left->op_next = flip;
5198 right->op_next = flop;
5199
5200 range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5201 sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
5202 flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
5203 sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
5204
5205 flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5206 flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
5207
5208 flip->op_next = o;
5209 if (!flip->op_private || !flop->op_private)
5210 LINKLIST(o); /* blow off optimizer unless constant */
5211
5212 return o;
5213}
5214
5215/*
5216=for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
5217
5218Constructs, checks, and returns an op tree expressing a loop. This is
5219only a loop in the control flow through the op tree; it does not have
5220the heavyweight loop structure that allows exiting the loop by C<last>
5221and suchlike. I<flags> gives the eight bits of C<op_flags> for the
5222top-level op, except that some bits will be set automatically as required.
5223I<expr> supplies the expression controlling loop iteration, and I<block>
5224supplies the body of the loop; they are consumed by this function and
5225become part of the constructed op tree. I<debuggable> is currently
5226unused and should always be 1.
5227
5228=cut
5229*/
5230
5231OP *
5232Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
5233{
5234 dVAR;
5235 OP* listop;
5236 OP* o;
5237 const bool once = block && block->op_flags & OPf_SPECIAL &&
5238 (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
5239
5240 PERL_UNUSED_ARG(debuggable);
5241
5242 if (expr) {
5243 if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
5244 return block; /* do {} while 0 does once */
5245 if (expr->op_type == OP_READLINE
5246 || expr->op_type == OP_READDIR
5247 || expr->op_type == OP_GLOB
5248 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5249 expr = newUNOP(OP_DEFINED, 0,
5250 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5251 } else if (expr->op_flags & OPf_KIDS) {
5252 const OP * const k1 = ((UNOP*)expr)->op_first;
5253 const OP * const k2 = k1 ? k1->op_sibling : NULL;
5254 switch (expr->op_type) {
5255 case OP_NULL:
5256 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5257 && (k2->op_flags & OPf_STACKED)
5258 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5259 expr = newUNOP(OP_DEFINED, 0, expr);
5260 break;
5261
5262 case OP_SASSIGN:
5263 if (k1 && (k1->op_type == OP_READDIR
5264 || k1->op_type == OP_GLOB
5265 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5266 || k1->op_type == OP_EACH))
5267 expr = newUNOP(OP_DEFINED, 0, expr);
5268 break;
5269 }
5270 }
5271 }
5272
5273 /* if block is null, the next op_append_elem() would put UNSTACK, a scalar
5274 * op, in listop. This is wrong. [perl #27024] */
5275 if (!block)
5276 block = newOP(OP_NULL, 0);
5277 listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
5278 o = new_logop(OP_AND, 0, &expr, &listop);
5279
5280 if (listop)
5281 ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
5282
5283 if (once && o != listop)
5284 o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
5285
5286 if (o == listop)
5287 o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
5288
5289 o->op_flags |= flags;
5290 o = scope(o);
5291 o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
5292 return o;
5293}
5294
5295/*
5296=for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|I32 whileline|OP *expr|OP *block|OP *cont|I32 has_my
5297
5298Constructs, checks, and returns an op tree expressing a C<while> loop.
5299This is a heavyweight loop, with structure that allows exiting the loop
5300by C<last> and suchlike.
5301
5302I<loop> is an optional preconstructed C<enterloop> op to use in the
5303loop; if it is null then a suitable op will be constructed automatically.
5304I<expr> supplies the loop's controlling expression. I<block> supplies the
5305main body of the loop, and I<cont> optionally supplies a C<continue> block
5306that operates as a second half of the body. All of these optree inputs
5307are consumed by this function and become part of the constructed op tree.
5308
5309I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5310op and, shifted up eight bits, the eight bits of C<op_private> for
5311the C<leaveloop> op, except that (in both cases) some bits will be set
5312automatically. I<debuggable> is currently unused and should always be 1.
5313I<whileline> is the line number that should be attributed to the loop's
5314controlling expression. I<has_my> can be supplied as true to force the
5315loop body to be enclosed in its own scope.
5316
5317=cut
5318*/
5319
5320OP *
5321Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32
5322whileline, OP *expr, OP *block, OP *cont, I32 has_my)
5323{
5324 dVAR;
5325 OP *redo;
5326 OP *next = NULL;
5327 OP *listop;
5328 OP *o;
5329 U8 loopflags = 0;
5330
5331 PERL_UNUSED_ARG(debuggable);
5332
5333 if (expr) {
5334 if (expr->op_type == OP_READLINE
5335 || expr->op_type == OP_READDIR
5336 || expr->op_type == OP_GLOB
5337 || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
5338 expr = newUNOP(OP_DEFINED, 0,
5339 newASSIGNOP(0, newDEFSVOP(), 0, expr) );
5340 } else if (expr->op_flags & OPf_KIDS) {
5341 const OP * const k1 = ((UNOP*)expr)->op_first;
5342 const OP * const k2 = (k1) ? k1->op_sibling : NULL;
5343 switch (expr->op_type) {
5344 case OP_NULL:
5345 if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR)
5346 && (k2->op_flags & OPf_STACKED)
5347 && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
5348 expr = newUNOP(OP_DEFINED, 0, expr);
5349 break;
5350
5351 case OP_SASSIGN:
5352 if (k1 && (k1->op_type == OP_READDIR
5353 || k1->op_type == OP_GLOB
5354 || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
5355 || k1->op_type == OP_EACH))
5356 expr = newUNOP(OP_DEFINED, 0, expr);
5357 break;
5358 }
5359 }
5360 }
5361
5362 if (!block)
5363 block = newOP(OP_NULL, 0);
5364 else if (cont || has_my) {
5365 block = scope(block);
5366 }
5367
5368 if (cont) {
5369 next = LINKLIST(cont);
5370 }
5371 if (expr) {
5372 OP * const unstack = newOP(OP_UNSTACK, 0);
5373 if (!next)
5374 next = unstack;
5375 cont = op_append_elem(OP_LINESEQ, cont, unstack);
5376 }
5377
5378 assert(block);
5379 listop = op_append_list(OP_LINESEQ, block, cont);
5380 assert(listop);
5381 redo = LINKLIST(listop);
5382
5383 if (expr) {
5384 PL_parser->copline = (line_t)whileline;
5385 scalar(listop);
5386 o = new_logop(OP_AND, 0, &expr, &listop);
5387 if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
5388 op_free(expr); /* oops, it's a while (0) */
5389 op_free((OP*)loop);
5390 return NULL; /* listop already freed by new_logop */
5391 }
5392 if (listop)
5393 ((LISTOP*)listop)->op_last->op_next =
5394 (o == listop ? redo : LINKLIST(o));
5395 }
5396 else
5397 o = listop;
5398
5399 if (!loop) {
5400 NewOp(1101,loop,1,LOOP);
5401 loop->op_type = OP_ENTERLOOP;
5402 loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
5403 loop->op_private = 0;
5404 loop->op_next = (OP*)loop;
5405 }
5406
5407 o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
5408
5409 loop->op_redoop = redo;
5410 loop->op_lastop = o;
5411 o->op_private |= loopflags;
5412
5413 if (next)
5414 loop->op_nextop = next;
5415 else
5416 loop->op_nextop = o;
5417
5418 o->op_flags |= flags;
5419 o->op_private |= (flags >> 8);
5420 return o;
5421}
5422
5423/*
5424=for apidoc Am|OP *|newFOROP|I32 flags|char *label|line_t forline|OP *sv|OP *expr|OP *block|OP *cont
5425
5426Constructs, checks, and returns an op tree expressing a C<foreach>
5427loop (iteration through a list of values). This is a heavyweight loop,
5428with structure that allows exiting the loop by C<last> and suchlike.
5429
5430I<sv> optionally supplies the variable that will be aliased to each
5431item in turn; if null, it defaults to C<$_> (either lexical or global).
5432I<expr> supplies the list of values to iterate over. I<block> supplies
5433the main body of the loop, and I<cont> optionally supplies a C<continue>
5434block that operates as a second half of the body. All of these optree
5435inputs are consumed by this function and become part of the constructed
5436op tree.
5437
5438I<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
5439op and, shifted up eight bits, the eight bits of C<op_private> for
5440the C<leaveloop> op, except that (in both cases) some bits will be set
5441automatically. I<forline> is the line number that should be attributed
5442to the loop's list expression. If I<label> is non-null, it supplies
5443the name of a label to attach to the state op at the start of the loop;
5444this function takes ownership of the memory pointed at by I<label>,
5445and will free it.
5446
5447=cut
5448*/
5449
5450OP *
5451Perl_newFOROP(pTHX_ I32 flags, char *label, line_t forline, OP *sv, OP *expr, OP *block, OP *cont)
5452{
5453 dVAR;
5454 LOOP *loop;
5455 OP *wop;
5456 PADOFFSET padoff = 0;
5457 I32 iterflags = 0;
5458 I32 iterpflags = 0;
5459 OP *madsv = NULL;
5460
5461 PERL_ARGS_ASSERT_NEWFOROP;
5462
5463 if (sv) {
5464 if (sv->op_type == OP_RV2SV) { /* symbol table variable */
5465 iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
5466 sv->op_type = OP_RV2GV;
5467 sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
5468
5469 /* The op_type check is needed to prevent a possible segfault
5470 * if the loop variable is undeclared and 'strict vars' is in
5471 * effect. This is illegal but is nonetheless parsed, so we
5472 * may reach this point with an OP_CONST where we're expecting
5473 * an OP_GV.
5474 */
5475 if (cUNOPx(sv)->op_first->op_type == OP_GV
5476 && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
5477 iterpflags |= OPpITER_DEF;
5478 }
5479 else if (sv->op_type == OP_PADSV) { /* private variable */
5480 iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
5481 padoff = sv->op_targ;
5482 if (PL_madskills)
5483 madsv = sv;
5484 else {
5485 sv->op_targ = 0;
5486 op_free(sv);
5487 }
5488 sv = NULL;
5489 }
5490 else
5491 Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
5492 if (padoff) {
5493 SV *const namesv = PAD_COMPNAME_SV(padoff);
5494 STRLEN len;
5495 const char *const name = SvPV_const(namesv, len);
5496
5497 if (len == 2 && name[0] == '$' && name[1] == '_')
5498 iterpflags |= OPpITER_DEF;
5499 }
5500 }
5501 else {
5502 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
5503 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
5504 sv = newGVOP(OP_GV, 0, PL_defgv);
5505 }
5506 else {
5507 padoff = offset;
5508 }
5509 iterpflags |= OPpITER_DEF;
5510 }
5511 if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
5512 expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
5513 iterflags |= OPf_STACKED;
5514 }
5515 else if (expr->op_type == OP_NULL &&
5516 (expr->op_flags & OPf_KIDS) &&
5517 ((BINOP*)expr)->op_first->op_type == OP_FLOP)
5518 {
5519 /* Basically turn for($x..$y) into the same as for($x,$y), but we
5520 * set the STACKED flag to indicate that these values are to be
5521 * treated as min/max values by 'pp_iterinit'.
5522 */
5523 const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
5524 LOGOP* const range = (LOGOP*) flip->op_first;
5525 OP* const left = range->op_first;
5526 OP* const right = left->op_sibling;
5527 LISTOP* listop;
5528
5529 range->op_flags &= ~OPf_KIDS;
5530 range->op_first = NULL;
5531
5532 listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
5533 listop->op_first->op_next = range->op_next;
5534 left->op_next = range->op_other;
5535 right->op_next = (OP*)listop;
5536 listop->op_next = listop->op_first;
5537
5538#ifdef PERL_MAD
5539 op_getmad(expr,(OP*)listop,'O');
5540#else
5541 op_free(expr);
5542#endif
5543 expr = (OP*)(listop);
5544 op_null(expr);
5545 iterflags |= OPf_STACKED;
5546 }
5547 else {
5548 expr = mod(force_list(expr), OP_GREPSTART);
5549 }
5550
5551 loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
5552 op_append_elem(OP_LIST, expr, scalar(sv))));
5553 assert(!loop->op_next);
5554 /* for my $x () sets OPpLVAL_INTRO;
5555 * for our $x () sets OPpOUR_INTRO */
5556 loop->op_private = (U8)iterpflags;
5557#ifdef PL_OP_SLAB_ALLOC
5558 {
5559 LOOP *tmp;
5560 NewOp(1234,tmp,1,LOOP);
5561 Copy(loop,tmp,1,LISTOP);
5562 S_op_destroy(aTHX_ (OP*)loop);
5563 loop = tmp;
5564 }
5565#else
5566 loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
5567#endif
5568 loop->op_targ = padoff;
5569 wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont, 0);
5570 if (madsv)
5571 op_getmad(madsv, (OP*)loop, 'v');
5572 PL_parser->copline = forline;
5573 return newSTATEOP(0, label, wop);
5574}
5575
5576/*
5577=for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
5578
5579Constructs, checks, and returns a loop-exiting op (such as C<goto>
5580or C<last>). I<type> is the opcode. I<label> supplies the parameter
5581determining the target of the op; it is consumed by this function and
5582become part of the constructed op tree.
5583
5584=cut
5585*/
5586
5587OP*
5588Perl_newLOOPEX(pTHX_ I32 type, OP *label)
5589{
5590 dVAR;
5591 OP *o;
5592
5593 PERL_ARGS_ASSERT_NEWLOOPEX;
5594
5595 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
5596
5597 if (type != OP_GOTO || label->op_type == OP_CONST) {
5598 /* "last()" means "last" */
5599 if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
5600 o = newOP(type, OPf_SPECIAL);
5601 else {
5602 o = newPVOP(type, 0, savesharedpv(label->op_type == OP_CONST
5603 ? SvPV_nolen_const(((SVOP*)label)->op_sv)
5604 : ""));
5605 }
5606#ifdef PERL_MAD
5607 op_getmad(label,o,'L');
5608#else
5609 op_free(label);
5610#endif
5611 }
5612 else {
5613 /* Check whether it's going to be a goto &function */
5614 if (label->op_type == OP_ENTERSUB
5615 && !(label->op_flags & OPf_STACKED))
5616 label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
5617 o = newUNOP(type, OPf_STACKED, label);
5618 }
5619 PL_hints |= HINT_BLOCK_SCOPE;
5620 return o;
5621}
5622
5623/* if the condition is a literal array or hash
5624 (or @{ ... } etc), make a reference to it.
5625 */
5626STATIC OP *
5627S_ref_array_or_hash(pTHX_ OP *cond)
5628{
5629 if (cond
5630 && (cond->op_type == OP_RV2AV
5631 || cond->op_type == OP_PADAV
5632 || cond->op_type == OP_RV2HV
5633 || cond->op_type == OP_PADHV))
5634
5635 return newUNOP(OP_REFGEN,
5636 0, mod(cond, OP_REFGEN));
5637
5638 else if(cond
5639 && (cond->op_type == OP_ASLICE
5640 || cond->op_type == OP_HSLICE)) {
5641
5642 /* anonlist now needs a list from this op, was previously used in
5643 * scalar context */
5644 cond->op_flags |= ~(OPf_WANT_SCALAR | OPf_REF);
5645 cond->op_flags |= OPf_WANT_LIST;
5646
5647 return newANONLIST(mod(cond, OP_ANONLIST));
5648 }
5649
5650 else
5651 return cond;
5652}
5653
5654/* These construct the optree fragments representing given()
5655 and when() blocks.
5656
5657 entergiven and enterwhen are LOGOPs; the op_other pointer
5658 points up to the associated leave op. We need this so we
5659 can put it in the context and make break/continue work.
5660 (Also, of course, pp_enterwhen will jump straight to
5661 op_other if the match fails.)
5662 */
5663
5664STATIC OP *
5665S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
5666 I32 enter_opcode, I32 leave_opcode,
5667 PADOFFSET entertarg)
5668{
5669 dVAR;
5670 LOGOP *enterop;
5671 OP *o;
5672
5673 PERL_ARGS_ASSERT_NEWGIVWHENOP;
5674
5675 NewOp(1101, enterop, 1, LOGOP);
5676 enterop->op_type = (Optype)enter_opcode;
5677 enterop->op_ppaddr = PL_ppaddr[enter_opcode];
5678 enterop->op_flags = (U8) OPf_KIDS;
5679 enterop->op_targ = ((entertarg == NOT_IN_PAD) ? 0 : entertarg);
5680 enterop->op_private = 0;
5681
5682 o = newUNOP(leave_opcode, 0, (OP *) enterop);
5683
5684 if (cond) {
5685 enterop->op_first = scalar(cond);
5686 cond->op_sibling = block;
5687
5688 o->op_next = LINKLIST(cond);
5689 cond->op_next = (OP *) enterop;
5690 }
5691 else {
5692 /* This is a default {} block */
5693 enterop->op_first = block;
5694 enterop->op_flags |= OPf_SPECIAL;
5695
5696 o->op_next = (OP *) enterop;
5697 }
5698
5699 CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
5700 entergiven and enterwhen both
5701 use ck_null() */
5702
5703 enterop->op_next = LINKLIST(block);
5704 block->op_next = enterop->op_other = o;
5705
5706 return o;
5707}
5708
5709/* Does this look like a boolean operation? For these purposes
5710 a boolean operation is:
5711 - a subroutine call [*]
5712 - a logical connective
5713 - a comparison operator
5714 - a filetest operator, with the exception of -s -M -A -C
5715 - defined(), exists() or eof()
5716 - /$re/ or $foo =~ /$re/
5717
5718 [*] possibly surprising
5719 */
5720STATIC bool
5721S_looks_like_bool(pTHX_ const OP *o)
5722{
5723 dVAR;
5724
5725 PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
5726
5727 switch(o->op_type) {
5728 case OP_OR:
5729 case OP_DOR:
5730 return looks_like_bool(cLOGOPo->op_first);
5731
5732 case OP_AND:
5733 return (
5734 looks_like_bool(cLOGOPo->op_first)
5735 && looks_like_bool(cLOGOPo->op_first->op_sibling));
5736
5737 case OP_NULL:
5738 case OP_SCALAR:
5739 return (
5740 o->op_flags & OPf_KIDS
5741 && looks_like_bool(cUNOPo->op_first));
5742
5743 case OP_ENTERSUB:
5744
5745 case OP_NOT: case OP_XOR:
5746
5747 case OP_EQ: case OP_NE: case OP_LT:
5748 case OP_GT: case OP_LE: case OP_GE:
5749
5750 case OP_I_EQ: case OP_I_NE: case OP_I_LT:
5751 case OP_I_GT: case OP_I_LE: case OP_I_GE:
5752
5753 case OP_SEQ: case OP_SNE: case OP_SLT:
5754 case OP_SGT: case OP_SLE: case OP_SGE:
5755
5756 case OP_SMARTMATCH:
5757
5758 case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
5759 case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
5760 case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
5761 case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR:
5762 case OP_FTBLK: case OP_FTFILE: case OP_FTDIR:
5763 case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
5764 case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
5765 case OP_FTTEXT: case OP_FTBINARY:
5766
5767 case OP_DEFINED: case OP_EXISTS:
5768 case OP_MATCH: case OP_EOF:
5769
5770 case OP_FLOP:
5771
5772 return TRUE;
5773
5774 case OP_CONST:
5775 /* Detect comparisons that have been optimized away */
5776 if (cSVOPo->op_sv == &PL_sv_yes
5777 || cSVOPo->op_sv == &PL_sv_no)
5778
5779 return TRUE;
5780 else
5781 return FALSE;
5782
5783 /* FALL THROUGH */
5784 default:
5785 return FALSE;
5786 }
5787}
5788
5789/*
5790=for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
5791
5792Constructs, checks, and returns an op tree expressing a C<given> block.
5793I<cond> supplies the expression that will be locally assigned to a lexical
5794variable, and I<block> supplies the body of the C<given> construct; they
5795are consumed by this function and become part of the constructed op tree.
5796I<defsv_off> is the pad offset of the scalar lexical variable that will
5797be affected.
5798
5799=cut
5800*/
5801
5802OP *
5803Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
5804{
5805 dVAR;
5806 PERL_ARGS_ASSERT_NEWGIVENOP;
5807 return newGIVWHENOP(
5808 ref_array_or_hash(cond),
5809 block,
5810 OP_ENTERGIVEN, OP_LEAVEGIVEN,
5811 defsv_off);
5812}
5813
5814/*
5815=for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
5816
5817Constructs, checks, and returns an op tree expressing a C<when> block.
5818I<cond> supplies the test expression, and I<block> supplies the block
5819that will be executed if the test evaluates to true; they are consumed
5820by this function and become part of the constructed op tree. I<cond>
5821will be interpreted DWIMically, often as a comparison against C<$_>,
5822and may be null to generate a C<default> block.
5823
5824=cut
5825*/
5826
5827OP *
5828Perl_newWHENOP(pTHX_ OP *cond, OP *block)
5829{
5830 const bool cond_llb = (!cond || looks_like_bool(cond));
5831 OP *cond_op;
5832
5833 PERL_ARGS_ASSERT_NEWWHENOP;
5834
5835 if (cond_llb)
5836 cond_op = cond;
5837 else {
5838 cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
5839 newDEFSVOP(),
5840 scalar(ref_array_or_hash(cond)));
5841 }
5842
5843 return newGIVWHENOP(
5844 cond_op,
5845 op_append_elem(block->op_type, block, newOP(OP_BREAK, OPf_SPECIAL)),
5846 OP_ENTERWHEN, OP_LEAVEWHEN, 0);
5847}
5848
5849/*
5850=head1 Embedding Functions
5851
5852=for apidoc cv_undef
5853
5854Clear out all the active components of a CV. This can happen either
5855by an explicit C<undef &foo>, or by the reference count going to zero.
5856In the former case, we keep the CvOUTSIDE pointer, so that any anonymous
5857children can still follow the full lexical scope chain.
5858
5859=cut
5860*/
5861
5862void
5863Perl_cv_undef(pTHX_ CV *cv)
5864{
5865 dVAR;
5866
5867 PERL_ARGS_ASSERT_CV_UNDEF;
5868
5869 DEBUG_X(PerlIO_printf(Perl_debug_log,
5870 "CV undef: cv=0x%"UVxf" comppad=0x%"UVxf"\n",
5871 PTR2UV(cv), PTR2UV(PL_comppad))
5872 );
5873
5874#ifdef USE_ITHREADS
5875 if (CvFILE(cv) && !CvISXSUB(cv)) {
5876 /* for XSUBs CvFILE point directly to static memory; __FILE__ */
5877 Safefree(CvFILE(cv));
5878 }
5879 CvFILE(cv) = NULL;
5880#endif
5881
5882 if (!CvISXSUB(cv) && CvROOT(cv)) {
5883 if (SvTYPE(cv) == SVt_PVCV && CvDEPTH(cv))
5884 Perl_croak(aTHX_ "Can't undef active subroutine");
5885 ENTER;
5886
5887 PAD_SAVE_SETNULLPAD();
5888
5889 op_free(CvROOT(cv));
5890 CvROOT(cv) = NULL;
5891 CvSTART(cv) = NULL;
5892 LEAVE;
5893 }
5894 SvPOK_off(MUTABLE_SV(cv)); /* forget prototype */
5895 CvGV_set(cv, NULL);
5896
5897 pad_undef(cv);
5898
5899 /* remove CvOUTSIDE unless this is an undef rather than a free */
5900 if (!SvREFCNT(cv) && CvOUTSIDE(cv)) {
5901 if (!CvWEAKOUTSIDE(cv))
5902 SvREFCNT_dec(CvOUTSIDE(cv));
5903 CvOUTSIDE(cv) = NULL;
5904 }
5905 if (CvCONST(cv)) {
5906 SvREFCNT_dec(MUTABLE_SV(CvXSUBANY(cv).any_ptr));
5907 CvCONST_off(cv);
5908 }
5909 if (CvISXSUB(cv) && CvXSUB(cv)) {
5910 CvXSUB(cv) = NULL;
5911 }
5912 /* delete all flags except WEAKOUTSIDE and CVGV_RC, which indicate the
5913 * ref status of CvOUTSIDE and CvGV */
5914 CvFLAGS(cv) &= (CVf_WEAKOUTSIDE|CVf_CVGV_RC);
5915}
5916
5917void
5918Perl_cv_ckproto_len(pTHX_ const CV *cv, const GV *gv, const char *p,
5919 const STRLEN len)
5920{
5921 PERL_ARGS_ASSERT_CV_CKPROTO_LEN;
5922
5923 /* Can't just use a strcmp on the prototype, as CONSTSUBs "cheat" by
5924 relying on SvCUR, and doubling up the buffer to hold CvFILE(). */
5925 if (((!p != !SvPOK(cv)) /* One has prototype, one has not. */
5926 || (p && (len != SvCUR(cv) /* Not the same length. */
5927 || memNE(p, SvPVX_const(cv), len))))
5928 && ckWARN_d(WARN_PROTOTYPE)) {
5929 SV* const msg = sv_newmortal();
5930 SV* name = NULL;
5931
5932 if (gv)
5933 gv_efullname3(name = sv_newmortal(), gv, NULL);
5934 sv_setpvs(msg, "Prototype mismatch:");
5935 if (name)
5936 Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, SVfARG(name));
5937 if (SvPOK(cv))
5938 Perl_sv_catpvf(aTHX_ msg, " (%"SVf")", SVfARG(cv));
5939 else
5940 sv_catpvs(msg, ": none");
5941 sv_catpvs(msg, " vs ");
5942 if (p)
5943 Perl_sv_catpvf(aTHX_ msg, "(%.*s)", (int) len, p);
5944 else
5945 sv_catpvs(msg, "none");
5946 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%"SVf, SVfARG(msg));
5947 }
5948}
5949
5950static void const_sv_xsub(pTHX_ CV* cv);
5951
5952/*
5953
5954=head1 Optree Manipulation Functions
5955
5956=for apidoc cv_const_sv
5957
5958If C<cv> is a constant sub eligible for inlining. returns the constant
5959value returned by the sub. Otherwise, returns NULL.
5960
5961Constant subs can be created with C<newCONSTSUB> or as described in
5962L<perlsub/"Constant Functions">.
5963
5964=cut
5965*/
5966SV *
5967Perl_cv_const_sv(pTHX_ const CV *const cv)
5968{
5969 PERL_UNUSED_CONTEXT;
5970 if (!cv)
5971 return NULL;
5972 if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM))
5973 return NULL;
5974 return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL;
5975}
5976
5977/* op_const_sv: examine an optree to determine whether it's in-lineable.
5978 * Can be called in 3 ways:
5979 *
5980 * !cv
5981 * look for a single OP_CONST with attached value: return the value
5982 *
5983 * cv && CvCLONE(cv) && !CvCONST(cv)
5984 *
5985 * examine the clone prototype, and if contains only a single
5986 * OP_CONST referencing a pad const, or a single PADSV referencing
5987 * an outer lexical, return a non-zero value to indicate the CV is
5988 * a candidate for "constizing" at clone time
5989 *
5990 * cv && CvCONST(cv)
5991 *
5992 * We have just cloned an anon prototype that was marked as a const
5993 * candidiate. Try to grab the current value, and in the case of
5994 * PADSV, ignore it if it has multiple references. Return the value.
5995 */
5996
5997SV *
5998Perl_op_const_sv(pTHX_ const OP *o, CV *cv)
5999{
6000 dVAR;
6001 SV *sv = NULL;
6002
6003 if (PL_madskills)
6004 return NULL;
6005
6006 if (!o)
6007 return NULL;
6008
6009 if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
6010 o = cLISTOPo->op_first->op_sibling;
6011
6012 for (; o; o = o->op_next) {
6013 const OPCODE type = o->op_type;
6014
6015 if (sv && o->op_next == o)
6016 return sv;
6017 if (o->op_next != o) {
6018 if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
6019 continue;
6020 if (type == OP_DBSTATE)
6021 continue;
6022 }
6023 if (type == OP_LEAVESUB || type == OP_RETURN)
6024 break;
6025 if (sv)
6026 return NULL;
6027 if (type == OP_CONST && cSVOPo->op_sv)
6028 sv = cSVOPo->op_sv;
6029 else if (cv && type == OP_CONST) {
6030 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6031 if (!sv)
6032 return NULL;
6033 }
6034 else if (cv && type == OP_PADSV) {
6035 if (CvCONST(cv)) { /* newly cloned anon */
6036 sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ);
6037 /* the candidate should have 1 ref from this pad and 1 ref
6038 * from the parent */
6039 if (!sv || SvREFCNT(sv) != 2)
6040 return NULL;
6041 sv = newSVsv(sv);
6042 SvREADONLY_on(sv);
6043 return sv;
6044 }
6045 else {
6046 if (PAD_COMPNAME_FLAGS(o->op_targ) & SVf_FAKE)
6047 sv = &PL_sv_undef; /* an arbitrary non-null value */
6048 }
6049 }
6050 else {
6051 return NULL;
6052 }
6053 }
6054 return sv;
6055}
6056
6057#ifdef PERL_MAD
6058OP *
6059#else
6060void
6061#endif
6062Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6063{
6064#if 0
6065 /* This would be the return value, but the return cannot be reached. */
6066 OP* pegop = newOP(OP_NULL, 0);
6067#endif
6068
6069 PERL_UNUSED_ARG(floor);
6070
6071 if (o)
6072 SAVEFREEOP(o);
6073 if (proto)
6074 SAVEFREEOP(proto);
6075 if (attrs)
6076 SAVEFREEOP(attrs);
6077 if (block)
6078 SAVEFREEOP(block);
6079 Perl_croak(aTHX_ "\"my sub\" not yet implemented");
6080#ifdef PERL_MAD
6081 NORETURN_FUNCTION_END;
6082#endif
6083}
6084
6085CV *
6086Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
6087{
6088 return Perl_newATTRSUB(aTHX_ floor, o, proto, NULL, block);
6089}
6090
6091CV *
6092Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
6093{
6094 dVAR;
6095 GV *gv;
6096 const char *ps;
6097 STRLEN ps_len = 0; /* init it to avoid false uninit warning from icc */
6098 register CV *cv = NULL;
6099 SV *const_sv;
6100 /* If the subroutine has no body, no attributes, and no builtin attributes
6101 then it's just a sub declaration, and we may be able to get away with
6102 storing with a placeholder scalar in the symbol table, rather than a
6103 full GV and CV. If anything is present then it will take a full CV to
6104 store it. */
6105 const I32 gv_fetch_flags
6106 = (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6107 || PL_madskills)
6108 ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT;
6109 const char * const name = o ? SvPV_nolen_const(cSVOPo->op_sv) : NULL;
6110 bool has_name;
6111
6112 if (proto) {
6113 assert(proto->op_type == OP_CONST);
6114 ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len);
6115 }
6116 else
6117 ps = NULL;
6118
6119 if (name) {
6120 gv = gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV);
6121 has_name = TRUE;
6122 } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) {
6123 SV * const sv = sv_newmortal();
6124 Perl_sv_setpvf(aTHX_ sv, "%s[%s:%"IVdf"]",
6125 PL_curstash ? "__ANON__" : "__ANON__::__ANON__",
6126 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
6127 gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV);
6128 has_name = TRUE;
6129 } else if (PL_curstash) {
6130 gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV);
6131 has_name = FALSE;
6132 } else {
6133 gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV);
6134 has_name = FALSE;
6135 }
6136
6137 if (!PL_madskills) {
6138 if (o)
6139 SAVEFREEOP(o);
6140 if (proto)
6141 SAVEFREEOP(proto);
6142 if (attrs)
6143 SAVEFREEOP(attrs);
6144 }
6145
6146 if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
6147 maximum a prototype before. */
6148 if (SvTYPE(gv) > SVt_NULL) {
6149 if (!SvPOK((const SV *)gv)
6150 && !(SvIOK((const SV *)gv) && SvIVX((const SV *)gv) == -1))
6151 {
6152 Perl_ck_warner_d(aTHX_ packWARN(WARN_PROTOTYPE), "Runaway prototype");
6153 }
6154 cv_ckproto_len((const CV *)gv, NULL, ps, ps_len);
6155 }
6156 if (ps)
6157 sv_setpvn(MUTABLE_SV(gv), ps, ps_len);
6158 else
6159 sv_setiv(MUTABLE_SV(gv), -1);
6160
6161 SvREFCNT_dec(PL_compcv);
6162 cv = PL_compcv = NULL;
6163 goto done;
6164 }
6165
6166 cv = (!name || GvCVGEN(gv)) ? NULL : GvCV(gv);
6167
6168 if (!block || !ps || *ps || attrs
6169 || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)
6170#ifdef PERL_MAD
6171 || block->op_type == OP_NULL
6172#endif
6173 )
6174 const_sv = NULL;
6175 else
6176 const_sv = op_const_sv(block, NULL);
6177
6178 if (cv) {
6179 const bool exists = CvROOT(cv) || CvXSUB(cv);
6180
6181 /* if the subroutine doesn't exist and wasn't pre-declared
6182 * with a prototype, assume it will be AUTOLOADed,
6183 * skipping the prototype check
6184 */
6185 if (exists || SvPOK(cv))
6186 cv_ckproto_len(cv, gv, ps, ps_len);
6187 /* already defined (or promised)? */
6188 if (exists || GvASSUMECV(gv)) {
6189 if ((!block
6190#ifdef PERL_MAD
6191 || block->op_type == OP_NULL
6192#endif
6193 )&& !attrs) {
6194 if (CvFLAGS(PL_compcv)) {
6195 /* might have had built-in attrs applied */
6196 if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && ckWARN(WARN_MISC))
6197 Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined");
6198 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS & ~CVf_LVALUE);
6199 }
6200 /* just a "sub foo;" when &foo is already defined */
6201 SAVEFREESV(PL_compcv);
6202 goto done;
6203 }
6204 if (block
6205#ifdef PERL_MAD
6206 && block->op_type != OP_NULL
6207#endif
6208 ) {
6209 if (ckWARN(WARN_REDEFINE)
6210 || (CvCONST(cv)
6211 && (!const_sv || sv_cmp(cv_const_sv(cv), const_sv))))
6212 {
6213 const line_t oldline = CopLINE(PL_curcop);
6214 if (PL_parser && PL_parser->copline != NOLINE)
6215 CopLINE_set(PL_curcop, PL_parser->copline);
6216 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6217 CvCONST(cv) ? "Constant subroutine %s redefined"
6218 : "Subroutine %s redefined", name);
6219 CopLINE_set(PL_curcop, oldline);
6220 }
6221#ifdef PERL_MAD
6222 if (!PL_minus_c) /* keep old one around for madskills */
6223#endif
6224 {
6225 /* (PL_madskills unset in used file.) */
6226 SvREFCNT_dec(cv);
6227 }
6228 cv = NULL;
6229 }
6230 }
6231 }
6232 if (const_sv) {
6233 SvREFCNT_inc_simple_void_NN(const_sv);
6234 if (cv) {
6235 assert(!CvROOT(cv) && !CvCONST(cv));
6236 sv_setpvs(MUTABLE_SV(cv), ""); /* prototype is "" */
6237 CvXSUBANY(cv).any_ptr = const_sv;
6238 CvXSUB(cv) = const_sv_xsub;
6239 CvCONST_on(cv);
6240 CvISXSUB_on(cv);
6241 }
6242 else {
6243 GvCV(gv) = NULL;
6244 cv = newCONSTSUB(NULL, name, const_sv);
6245 }
6246 mro_method_changed_in( /* sub Foo::Bar () { 123 } */
6247 (CvGV(cv) && GvSTASH(CvGV(cv)))
6248 ? GvSTASH(CvGV(cv))
6249 : CvSTASH(cv)
6250 ? CvSTASH(cv)
6251 : PL_curstash
6252 );
6253 if (PL_madskills)
6254 goto install_block;
6255 op_free(block);
6256 SvREFCNT_dec(PL_compcv);
6257 PL_compcv = NULL;
6258 goto done;
6259 }
6260 if (cv) { /* must reuse cv if autoloaded */
6261 /* transfer PL_compcv to cv */
6262 if (block
6263#ifdef PERL_MAD
6264 && block->op_type != OP_NULL
6265#endif
6266 ) {
6267 cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS;
6268 cv_undef(cv);
6269 CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs;
6270 if (!CvWEAKOUTSIDE(cv))
6271 SvREFCNT_dec(CvOUTSIDE(cv));
6272 CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
6273 CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv);
6274 CvOUTSIDE(PL_compcv) = 0;
6275 CvPADLIST(cv) = CvPADLIST(PL_compcv);
6276 CvPADLIST(PL_compcv) = 0;
6277 /* inner references to PL_compcv must be fixed up ... */
6278 pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv);
6279 if (PERLDB_INTER)/* Advice debugger on the new sub. */
6280 ++PL_sub_generation;
6281 if (CvSTASH(cv))
6282 sv_del_backref(MUTABLE_SV(CvSTASH(cv)), MUTABLE_SV(cv));
6283 }
6284 else {
6285 /* Might have had built-in attributes applied -- propagate them. */
6286 CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS);
6287 }
6288 /* ... before we throw it away */
6289 SvREFCNT_dec(PL_compcv);
6290 PL_compcv = cv;
6291 }
6292 else {
6293 cv = PL_compcv;
6294 if (name) {
6295 GvCV(gv) = cv;
6296 if (PL_madskills) {
6297 if (strEQ(name, "import")) {
6298 PL_formfeed = MUTABLE_SV(cv);
6299 /* diag_listed_as: SKIPME */
6300 Perl_warner(aTHX_ packWARN(WARN_VOID), "0x%"UVxf"\n", PTR2UV(cv));
6301 }
6302 }
6303 GvCVGEN(gv) = 0;
6304 mro_method_changed_in(GvSTASH(gv)); /* sub Foo::bar { (shift)+1 } */
6305 }
6306 }
6307 if (!CvGV(cv)) {
6308 CvGV_set(cv, gv);
6309 CvFILE_set_from_cop(cv, PL_curcop);
6310 CvSTASH(cv) = PL_curstash;
6311 if (PL_curstash)
6312 Perl_sv_add_backref(aTHX_ MUTABLE_SV(PL_curstash), MUTABLE_SV(cv));
6313 }
6314 if (attrs) {
6315 /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>. */
6316 HV *stash = name && GvSTASH(CvGV(cv)) ? GvSTASH(CvGV(cv)) : PL_curstash;
6317 apply_attrs(stash, MUTABLE_SV(cv), attrs, FALSE);
6318 }
6319
6320 if (ps)
6321 sv_setpvn(MUTABLE_SV(cv), ps, ps_len);
6322
6323 if (PL_parser && PL_parser->error_count) {
6324 op_free(block);
6325 block = NULL;
6326 if (name) {
6327 const char *s = strrchr(name, ':');
6328 s = s ? s+1 : name;
6329 if (strEQ(s, "BEGIN")) {
6330 const char not_safe[] =
6331 "BEGIN not safe after errors--compilation aborted";
6332 if (PL_in_eval & EVAL_KEEPERR)
6333 Perl_croak(aTHX_ not_safe);
6334 else {
6335 /* force display of errors found but not reported */
6336 sv_catpv(ERRSV, not_safe);
6337 Perl_croak(aTHX_ "%"SVf, SVfARG(ERRSV));
6338 }
6339 }
6340 }
6341 }
6342 install_block:
6343 if (!block)
6344 goto done;
6345
6346 /* If we assign an optree to a PVCV, then we've defined a subroutine that
6347 the debugger could be able to set a breakpoint in, so signal to
6348 pp_entereval that it should not throw away any saved lines at scope
6349 exit. */
6350
6351 PL_breakable_sub_gen++;
6352 if (CvLVALUE(cv)) {
6353 CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
6354 mod(scalarseq(block), OP_LEAVESUBLV));
6355 block->op_attached = 1;
6356 }
6357 else {
6358 /* This makes sub {}; work as expected. */
6359 if (block->op_type == OP_STUB) {
6360 OP* const newblock = newSTATEOP(0, NULL, 0);
6361#ifdef PERL_MAD
6362 op_getmad(block,newblock,'B');
6363#else
6364 op_free(block);
6365#endif
6366 block = newblock;
6367 }
6368 else
6369 block->op_attached = 1;
6370 CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
6371 }
6372 CvROOT(cv)->op_private |= OPpREFCOUNTED;
6373 OpREFCNT_set(CvROOT(cv), 1);
6374 CvSTART(cv) = LINKLIST(CvROOT(cv));
6375 CvROOT(cv)->op_next = 0;
6376 CALL_PEEP(CvSTART(cv));
6377
6378 /* now that optimizer has done its work, adjust pad values */
6379
6380 pad_tidy(CvCLONE(cv) ? padtidy_SUBCLONE : padtidy_SUB);
6381
6382 if (CvCLONE(cv)) {
6383 assert(!CvCONST(cv));
6384 if (ps && !*ps && op_const_sv(block, cv))
6385 CvCONST_on(cv);
6386 }
6387
6388 if (has_name) {
6389 if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
6390 SV * const tmpstr = sv_newmortal();
6391 GV * const db_postponed = gv_fetchpvs("DB::postponed",
6392 GV_ADDMULTI, SVt_PVHV);
6393 HV *hv;
6394 SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld",
6395 CopFILE(PL_curcop),
6396 (long)PL_subline,
6397 (long)CopLINE(PL_curcop));
6398 gv_efullname3(tmpstr, gv, NULL);
6399 (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr),
6400 SvCUR(tmpstr), sv, 0);
6401 hv = GvHVn(db_postponed);
6402 if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvCUR(tmpstr))) {
6403 CV * const pcv = GvCV(db_postponed);
6404 if (pcv) {
6405 dSP;
6406 PUSHMARK(SP);
6407 XPUSHs(tmpstr);
6408 PUTBACK;
6409 call_sv(MUTABLE_SV(pcv), G_DISCARD);
6410 }
6411 }
6412 }
6413
6414 if (name && ! (PL_parser && PL_parser->error_count))
6415 process_special_blocks(name, gv, cv);
6416 }
6417
6418 done:
6419 if (PL_parser)
6420 PL_parser->copline = NOLINE;
6421 LEAVE_SCOPE(floor);
6422 return cv;
6423}
6424
6425STATIC void
6426S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv,
6427 CV *const cv)
6428{
6429 const char *const colon = strrchr(fullname,':');
6430 const char *const name = colon ? colon + 1 : fullname;
6431
6432 PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS;
6433
6434 if (*name == 'B') {
6435 if (strEQ(name, "BEGIN")) {
6436 const I32 oldscope = PL_scopestack_ix;
6437 ENTER;
6438 SAVECOPFILE(&PL_compiling);
6439 SAVECOPLINE(&PL_compiling);
6440
6441 DEBUG_x( dump_sub(gv) );
6442 Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv));
6443 GvCV(gv) = 0; /* cv has been hijacked */
6444 call_list(oldscope, PL_beginav);
6445
6446 PL_curcop = &PL_compiling;
6447 CopHINTS_set(&PL_compiling, PL_hints);
6448 LEAVE;
6449 }
6450 else
6451 return;
6452 } else {
6453 if (*name == 'E') {
6454 if strEQ(name, "END") {
6455 DEBUG_x( dump_sub(gv) );
6456 Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
6457 } else
6458 return;
6459 } else if (*name == 'U') {
6460 if (strEQ(name, "UNITCHECK")) {
6461 /* It's never too late to run a unitcheck block */
6462 Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv));
6463 }
6464 else
6465 return;
6466 } else if (*name == 'C') {
6467 if (strEQ(name, "CHECK")) {
6468 if (PL_main_start)
6469 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6470 "Too late to run CHECK block");
6471 Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv));
6472 }
6473 else
6474 return;
6475 } else if (*name == 'I') {
6476 if (strEQ(name, "INIT")) {
6477 if (PL_main_start)
6478 Perl_ck_warner(aTHX_ packWARN(WARN_VOID),
6479 "Too late to run INIT block");
6480 Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv));
6481 }
6482 else
6483 return;
6484 } else
6485 return;
6486 DEBUG_x( dump_sub(gv) );
6487 GvCV(gv) = 0; /* cv has been hijacked */
6488 }
6489}
6490
6491/*
6492=for apidoc newCONSTSUB
6493
6494Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
6495eligible for inlining at compile-time.
6496
6497Passing NULL for SV creates a constant sub equivalent to C<sub BAR () {}>,
6498which won't be called if used as a destructor, but will suppress the overhead
6499of a call to C<AUTOLOAD>. (This form, however, isn't eligible for inlining at
6500compile time.)
6501
6502=cut
6503*/
6504
6505CV *
6506Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
6507{
6508 dVAR;
6509 CV* cv;
6510#ifdef USE_ITHREADS
6511 const char *const file = CopFILE(PL_curcop);
6512#else
6513 SV *const temp_sv = CopFILESV(PL_curcop);
6514 const char *const file = temp_sv ? SvPV_nolen_const(temp_sv) : NULL;
6515#endif
6516
6517 ENTER;
6518
6519 if (IN_PERL_RUNTIME) {
6520 /* at runtime, it's not safe to manipulate PL_curcop: it may be
6521 * an op shared between threads. Use a non-shared COP for our
6522 * dirty work */
6523 SAVEVPTR(PL_curcop);
6524 PL_curcop = &PL_compiling;
6525 }
6526 SAVECOPLINE(PL_curcop);
6527 CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE);
6528
6529 SAVEHINTS();
6530 PL_hints &= ~HINT_BLOCK_SCOPE;
6531
6532 if (stash) {
6533 SAVESPTR(PL_curstash);
6534 SAVECOPSTASH(PL_curcop);
6535 PL_curstash = stash;
6536 CopSTASH_set(PL_curcop,stash);
6537 }
6538
6539 /* file becomes the CvFILE. For an XS, it's supposed to be static storage,
6540 and so doesn't get free()d. (It's expected to be from the C pre-
6541 processor __FILE__ directive). But we need a dynamically allocated one,
6542 and we need it to get freed. */
6543 cv = newXS_flags(name, const_sv_xsub, file ? file : "", "",
6544 XS_DYNAMIC_FILENAME);
6545 CvXSUBANY(cv).any_ptr = sv;
6546 CvCONST_on(cv);
6547
6548#ifdef USE_ITHREADS
6549 if (stash)
6550 CopSTASH_free(PL_curcop);
6551#endif
6552 LEAVE;
6553
6554 return cv;
6555}
6556
6557CV *
6558Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr,
6559 const char *const filename, const char *const proto,
6560 U32 flags)
6561{
6562 CV *cv = newXS(name, subaddr, filename);
6563
6564 PERL_ARGS_ASSERT_NEWXS_FLAGS;
6565
6566 if (flags & XS_DYNAMIC_FILENAME) {
6567 /* We need to "make arrangements" (ie cheat) to ensure that the
6568 filename lasts as long as the PVCV we just created, but also doesn't
6569 leak */
6570 STRLEN filename_len = strlen(filename);
6571 STRLEN proto_and_file_len = filename_len;
6572 char *proto_and_file;
6573 STRLEN proto_len;
6574
6575 if (proto) {
6576 proto_len = strlen(proto);
6577 proto_and_file_len += proto_len;
6578
6579 Newx(proto_and_file, proto_and_file_len + 1, char);
6580 Copy(proto, proto_and_file, proto_len, char);
6581 Copy(filename, proto_and_file + proto_len, filename_len + 1, char);
6582 } else {
6583 proto_len = 0;
6584 proto_and_file = savepvn(filename, filename_len);
6585 }
6586
6587 /* This gets free()d. :-) */
6588 sv_usepvn_flags(MUTABLE_SV(cv), proto_and_file, proto_and_file_len,
6589 SV_HAS_TRAILING_NUL);
6590 if (proto) {
6591 /* This gives us the correct prototype, rather than one with the
6592 file name appended. */
6593 SvCUR_set(cv, proto_len);
6594 } else {
6595 SvPOK_off(cv);
6596 }
6597 CvFILE(cv) = proto_and_file + proto_len;
6598 } else {
6599 sv_setpv(MUTABLE_SV(cv), proto);
6600 }
6601 return cv;
6602}
6603
6604/*
6605=for apidoc U||newXS
6606
6607Used by C<xsubpp> to hook up XSUBs as Perl subs. I<filename> needs to be
6608static storage, as it is used directly as CvFILE(), without a copy being made.
6609
6610=cut
6611*/
6612
6613CV *
6614Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
6615{
6616 dVAR;
6617 GV * const gv = gv_fetchpv(name ? name :
6618 (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"),
6619 GV_ADDMULTI, SVt_PVCV);
6620 register CV *cv;
6621
6622 PERL_ARGS_ASSERT_NEWXS;
6623
6624 if (!subaddr)
6625 Perl_croak(aTHX_ "panic: no address for '%s' in '%s'", name, filename);
6626
6627 if ((cv = (name ? GvCV(gv) : NULL))) {
6628 if (GvCVGEN(gv)) {
6629 /* just a cached method */
6630 SvREFCNT_dec(cv);
6631 cv = NULL;
6632 }
6633 else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
6634 /* already defined (or promised) */
6635 /* XXX It's possible for this HvNAME_get to return null, and get passed into strEQ */
6636 if (ckWARN(WARN_REDEFINE)) {
6637 GV * const gvcv = CvGV(cv);
6638 if (gvcv) {
6639 HV * const stash = GvSTASH(gvcv);
6640 if (stash) {
6641 const char *redefined_name = HvNAME_get(stash);
6642 if ( strEQ(redefined_name,"autouse") ) {
6643 const line_t oldline = CopLINE(PL_curcop);
6644 if (PL_parser && PL_parser->copline != NOLINE)
6645 CopLINE_set(PL_curcop, PL_parser->copline);
6646 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6647 CvCONST(cv) ? "Constant subroutine %s redefined"
6648 : "Subroutine %s redefined"
6649 ,name);
6650 CopLINE_set(PL_curcop, oldline);
6651 }
6652 }
6653 }
6654 }
6655 SvREFCNT_dec(cv);
6656 cv = NULL;
6657 }
6658 }
6659
6660 if (cv) /* must reuse cv if autoloaded */
6661 cv_undef(cv);
6662 else {
6663 cv = MUTABLE_CV(newSV_type(SVt_PVCV));
6664 if (name) {
6665 GvCV(gv) = cv;
6666 GvCVGEN(gv) = 0;
6667 mro_method_changed_in(GvSTASH(gv)); /* newXS */
6668 }
6669 }
6670 if (!name)
6671 CvANON_on(cv);
6672 CvGV_set(cv, gv);
6673 (void)gv_fetchfile(filename);
6674 CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
6675 an external constant string */
6676 CvISXSUB_on(cv);
6677 CvXSUB(cv) = subaddr;
6678
6679 if (name)
6680 process_special_blocks(name, gv, cv);
6681
6682 return cv;
6683}
6684
6685#ifdef PERL_MAD
6686OP *
6687#else
6688void
6689#endif
6690Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
6691{
6692 dVAR;
6693 register CV *cv;
6694#ifdef PERL_MAD
6695 OP* pegop = newOP(OP_NULL, 0);
6696#endif
6697
6698 GV * const gv = o
6699 ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM)
6700 : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM);
6701
6702 GvMULTI_on(gv);
6703 if ((cv = GvFORM(gv))) {
6704 if (ckWARN(WARN_REDEFINE)) {
6705 const line_t oldline = CopLINE(PL_curcop);
6706 if (PL_parser && PL_parser->copline != NOLINE)
6707 CopLINE_set(PL_curcop, PL_parser->copline);
6708 if (o) {
6709 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6710 "Format %"SVf" redefined", SVfARG(cSVOPo->op_sv));
6711 } else {
6712 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
6713 "Format STDOUT redefined");
6714 }
6715 CopLINE_set(PL_curcop, oldline);
6716 }
6717 SvREFCNT_dec(cv);
6718 }
6719 cv = PL_compcv;
6720 GvFORM(gv) = cv;
6721 CvGV_set(cv, gv);
6722 CvFILE_set_from_cop(cv, PL_curcop);
6723
6724
6725 pad_tidy(padtidy_FORMAT);
6726 CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
6727 CvROOT(cv)->op_private |= OPpREFCOUNTED;
6728 OpREFCNT_set(CvROOT(cv), 1);
6729 CvSTART(cv) = LINKLIST(CvROOT(cv));
6730 CvROOT(cv)->op_next = 0;
6731 CALL_PEEP(CvSTART(cv));
6732#ifdef PERL_MAD
6733 op_getmad(o,pegop,'n');
6734 op_getmad_weak(block, pegop, 'b');
6735#else
6736 op_free(o);
6737#endif
6738 if (PL_parser)
6739 PL_parser->copline = NOLINE;
6740 LEAVE_SCOPE(floor);
6741#ifdef PERL_MAD
6742 return pegop;
6743#endif
6744}
6745
6746OP *
6747Perl_newANONLIST(pTHX_ OP *o)
6748{
6749 return convert(OP_ANONLIST, OPf_SPECIAL, o);
6750}
6751
6752OP *
6753Perl_newANONHASH(pTHX_ OP *o)
6754{
6755 return convert(OP_ANONHASH, OPf_SPECIAL, o);
6756}
6757
6758OP *
6759Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
6760{
6761 return newANONATTRSUB(floor, proto, NULL, block);
6762}
6763
6764OP *
6765Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
6766{
6767 return newUNOP(OP_REFGEN, 0,
6768 newSVOP(OP_ANONCODE, 0,
6769 MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block))));
6770}
6771
6772OP *
6773Perl_oopsAV(pTHX_ OP *o)
6774{
6775 dVAR;
6776
6777 PERL_ARGS_ASSERT_OOPSAV;
6778
6779 switch (o->op_type) {
6780 case OP_PADSV:
6781 o->op_type = OP_PADAV;
6782 o->op_ppaddr = PL_ppaddr[OP_PADAV];
6783 return ref(o, OP_RV2AV);
6784
6785 case OP_RV2SV:
6786 o->op_type = OP_RV2AV;
6787 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
6788 ref(o, OP_RV2AV);
6789 break;
6790
6791 default:
6792 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV");
6793 break;
6794 }
6795 return o;
6796}
6797
6798OP *
6799Perl_oopsHV(pTHX_ OP *o)
6800{
6801 dVAR;
6802
6803 PERL_ARGS_ASSERT_OOPSHV;
6804
6805 switch (o->op_type) {
6806 case OP_PADSV:
6807 case OP_PADAV:
6808 o->op_type = OP_PADHV;
6809 o->op_ppaddr = PL_ppaddr[OP_PADHV];
6810 return ref(o, OP_RV2HV);
6811
6812 case OP_RV2SV:
6813 case OP_RV2AV:
6814 o->op_type = OP_RV2HV;
6815 o->op_ppaddr = PL_ppaddr[OP_RV2HV];
6816 ref(o, OP_RV2HV);
6817 break;
6818
6819 default:
6820 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV");
6821 break;
6822 }
6823 return o;
6824}
6825
6826OP *
6827Perl_newAVREF(pTHX_ OP *o)
6828{
6829 dVAR;
6830
6831 PERL_ARGS_ASSERT_NEWAVREF;
6832
6833 if (o->op_type == OP_PADANY) {
6834 o->op_type = OP_PADAV;
6835 o->op_ppaddr = PL_ppaddr[OP_PADAV];
6836 return o;
6837 }
6838 else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) {
6839 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6840 "Using an array as a reference is deprecated");
6841 }
6842 return newUNOP(OP_RV2AV, 0, scalar(o));
6843}
6844
6845OP *
6846Perl_newGVREF(pTHX_ I32 type, OP *o)
6847{
6848 if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
6849 return newUNOP(OP_NULL, 0, o);
6850 return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
6851}
6852
6853OP *
6854Perl_newHVREF(pTHX_ OP *o)
6855{
6856 dVAR;
6857
6858 PERL_ARGS_ASSERT_NEWHVREF;
6859
6860 if (o->op_type == OP_PADANY) {
6861 o->op_type = OP_PADHV;
6862 o->op_ppaddr = PL_ppaddr[OP_PADHV];
6863 return o;
6864 }
6865 else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) {
6866 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
6867 "Using a hash as a reference is deprecated");
6868 }
6869 return newUNOP(OP_RV2HV, 0, scalar(o));
6870}
6871
6872OP *
6873Perl_newCVREF(pTHX_ I32 flags, OP *o)
6874{
6875 return newUNOP(OP_RV2CV, flags, scalar(o));
6876}
6877
6878OP *
6879Perl_newSVREF(pTHX_ OP *o)
6880{
6881 dVAR;
6882
6883 PERL_ARGS_ASSERT_NEWSVREF;
6884
6885 if (o->op_type == OP_PADANY) {
6886 o->op_type = OP_PADSV;
6887 o->op_ppaddr = PL_ppaddr[OP_PADSV];
6888 return o;
6889 }
6890 return newUNOP(OP_RV2SV, 0, scalar(o));
6891}
6892
6893/* Check routines. See the comments at the top of this file for details
6894 * on when these are called */
6895
6896OP *
6897Perl_ck_anoncode(pTHX_ OP *o)
6898{
6899 PERL_ARGS_ASSERT_CK_ANONCODE;
6900
6901 cSVOPo->op_targ = pad_add_anon(cSVOPo->op_sv, o->op_type);
6902 if (!PL_madskills)
6903 cSVOPo->op_sv = NULL;
6904 return o;
6905}
6906
6907OP *
6908Perl_ck_bitop(pTHX_ OP *o)
6909{
6910 dVAR;
6911
6912 PERL_ARGS_ASSERT_CK_BITOP;
6913
6914#define OP_IS_NUMCOMPARE(op) \
6915 ((op) == OP_LT || (op) == OP_I_LT || \
6916 (op) == OP_GT || (op) == OP_I_GT || \
6917 (op) == OP_LE || (op) == OP_I_LE || \
6918 (op) == OP_GE || (op) == OP_I_GE || \
6919 (op) == OP_EQ || (op) == OP_I_EQ || \
6920 (op) == OP_NE || (op) == OP_I_NE || \
6921 (op) == OP_NCMP || (op) == OP_I_NCMP)
6922 o->op_private = (U8)(PL_hints & HINT_INTEGER);
6923 if (!(o->op_flags & OPf_STACKED) /* Not an assignment */
6924 && (o->op_type == OP_BIT_OR
6925 || o->op_type == OP_BIT_AND
6926 || o->op_type == OP_BIT_XOR))
6927 {
6928 const OP * const left = cBINOPo->op_first;
6929 const OP * const right = left->op_sibling;
6930 if ((OP_IS_NUMCOMPARE(left->op_type) &&
6931 (left->op_flags & OPf_PARENS) == 0) ||
6932 (OP_IS_NUMCOMPARE(right->op_type) &&
6933 (right->op_flags & OPf_PARENS) == 0))
6934 Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE),
6935 "Possible precedence problem on bitwise %c operator",
6936 o->op_type == OP_BIT_OR ? '|'
6937 : o->op_type == OP_BIT_AND ? '&' : '^'
6938 );
6939 }
6940 return o;
6941}
6942
6943OP *
6944Perl_ck_concat(pTHX_ OP *o)
6945{
6946 const OP * const kid = cUNOPo->op_first;
6947
6948 PERL_ARGS_ASSERT_CK_CONCAT;
6949 PERL_UNUSED_CONTEXT;
6950
6951 if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) &&
6952 !(kUNOP->op_first->op_flags & OPf_MOD))
6953 o->op_flags |= OPf_STACKED;
6954 return o;
6955}
6956
6957OP *
6958Perl_ck_spair(pTHX_ OP *o)
6959{
6960 dVAR;
6961
6962 PERL_ARGS_ASSERT_CK_SPAIR;
6963
6964 if (o->op_flags & OPf_KIDS) {
6965 OP* newop;
6966 OP* kid;
6967 const OPCODE type = o->op_type;
6968 o = modkids(ck_fun(o), type);
6969 kid = cUNOPo->op_first;
6970 newop = kUNOP->op_first->op_sibling;
6971 if (newop) {
6972 const OPCODE type = newop->op_type;
6973 if (newop->op_sibling || !(PL_opargs[type] & OA_RETSCALAR) ||
6974 type == OP_PADAV || type == OP_PADHV ||
6975 type == OP_RV2AV || type == OP_RV2HV)
6976 return o;
6977 }
6978#ifdef PERL_MAD
6979 op_getmad(kUNOP->op_first,newop,'K');
6980#else
6981 op_free(kUNOP->op_first);
6982#endif
6983 kUNOP->op_first = newop;
6984 }
6985 o->op_ppaddr = PL_ppaddr[++o->op_type];
6986 return ck_fun(o);
6987}
6988
6989OP *
6990Perl_ck_delete(pTHX_ OP *o)
6991{
6992 PERL_ARGS_ASSERT_CK_DELETE;
6993
6994 o = ck_fun(o);
6995 o->op_private = 0;
6996 if (o->op_flags & OPf_KIDS) {
6997 OP * const kid = cUNOPo->op_first;
6998 switch (kid->op_type) {
6999 case OP_ASLICE:
7000 o->op_flags |= OPf_SPECIAL;
7001 /* FALL THROUGH */
7002 case OP_HSLICE:
7003 o->op_private |= OPpSLICE;
7004 break;
7005 case OP_AELEM:
7006 o->op_flags |= OPf_SPECIAL;
7007 /* FALL THROUGH */
7008 case OP_HELEM:
7009 break;
7010 default:
7011 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
7012 OP_DESC(o));
7013 }
7014 if (kid->op_private & OPpLVAL_INTRO)
7015 o->op_private |= OPpLVAL_INTRO;
7016 op_null(kid);
7017 }
7018 return o;
7019}
7020
7021OP *
7022Perl_ck_die(pTHX_ OP *o)
7023{
7024 PERL_ARGS_ASSERT_CK_DIE;
7025
7026#ifdef VMS
7027 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7028#endif
7029 return ck_fun(o);
7030}
7031
7032OP *
7033Perl_ck_eof(pTHX_ OP *o)
7034{
7035 dVAR;
7036
7037 PERL_ARGS_ASSERT_CK_EOF;
7038
7039 if (o->op_flags & OPf_KIDS) {
7040 if (cLISTOPo->op_first->op_type == OP_STUB) {
7041 OP * const newop
7042 = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv));
7043#ifdef PERL_MAD
7044 op_getmad(o,newop,'O');
7045#else
7046 op_free(o);
7047#endif
7048 o = newop;
7049 }
7050 return ck_fun(o);
7051 }
7052 return o;
7053}
7054
7055OP *
7056Perl_ck_eval(pTHX_ OP *o)
7057{
7058 dVAR;
7059
7060 PERL_ARGS_ASSERT_CK_EVAL;
7061
7062 PL_hints |= HINT_BLOCK_SCOPE;
7063 if (o->op_flags & OPf_KIDS) {
7064 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7065
7066 if (!kid) {
7067 o->op_flags &= ~OPf_KIDS;
7068 op_null(o);
7069 }
7070 else if (kid->op_type == OP_LINESEQ || kid->op_type == OP_STUB) {
7071 LOGOP *enter;
7072#ifdef PERL_MAD
7073 OP* const oldo = o;
7074#endif
7075
7076 cUNOPo->op_first = 0;
7077#ifndef PERL_MAD
7078 op_free(o);
7079#endif
7080
7081 NewOp(1101, enter, 1, LOGOP);
7082 enter->op_type = OP_ENTERTRY;
7083 enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
7084 enter->op_private = 0;
7085
7086 /* establish postfix order */
7087 enter->op_next = (OP*)enter;
7088
7089 o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
7090 o->op_type = OP_LEAVETRY;
7091 o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
7092 enter->op_other = o;
7093 op_getmad(oldo,o,'O');
7094 return o;
7095 }
7096 else {
7097 scalar((OP*)kid);
7098 PL_cv_has_eval = 1;
7099 }
7100 }
7101 else {
7102#ifdef PERL_MAD
7103 OP* const oldo = o;
7104#else
7105 op_free(o);
7106#endif
7107 o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
7108 op_getmad(oldo,o,'O');
7109 }
7110 o->op_targ = (PADOFFSET)PL_hints;
7111 if ((PL_hints & HINT_LOCALIZE_HH) != 0 && GvHV(PL_hintgv)) {
7112 /* Store a copy of %^H that pp_entereval can pick up. */
7113 OP *hhop = newSVOP(OP_HINTSEVAL, 0,
7114 MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv))));
7115 cUNOPo->op_first->op_sibling = hhop;
7116 o->op_private |= OPpEVAL_HAS_HH;
7117 }
7118 return o;
7119}
7120
7121OP *
7122Perl_ck_exit(pTHX_ OP *o)
7123{
7124 PERL_ARGS_ASSERT_CK_EXIT;
7125
7126#ifdef VMS
7127 HV * const table = GvHV(PL_hintgv);
7128 if (table) {
7129 SV * const * const svp = hv_fetchs(table, "vmsish_exit", FALSE);
7130 if (svp && *svp && SvTRUE(*svp))
7131 o->op_private |= OPpEXIT_VMSISH;
7132 }
7133 if (VMSISH_HUSHED) o->op_private |= OPpHUSH_VMSISH;
7134#endif
7135 return ck_fun(o);
7136}
7137
7138OP *
7139Perl_ck_exec(pTHX_ OP *o)
7140{
7141 PERL_ARGS_ASSERT_CK_EXEC;
7142
7143 if (o->op_flags & OPf_STACKED) {
7144 OP *kid;
7145 o = ck_fun(o);
7146 kid = cUNOPo->op_first->op_sibling;
7147 if (kid->op_type == OP_RV2GV)
7148 op_null(kid);
7149 }
7150 else
7151 o = listkids(o);
7152 return o;
7153}
7154
7155OP *
7156Perl_ck_exists(pTHX_ OP *o)
7157{
7158 dVAR;
7159
7160 PERL_ARGS_ASSERT_CK_EXISTS;
7161
7162 o = ck_fun(o);
7163 if (o->op_flags & OPf_KIDS) {
7164 OP * const kid = cUNOPo->op_first;
7165 if (kid->op_type == OP_ENTERSUB) {
7166 (void) ref(kid, o->op_type);
7167 if (kid->op_type != OP_RV2CV
7168 && !(PL_parser && PL_parser->error_count))
7169 Perl_croak(aTHX_ "%s argument is not a subroutine name",
7170 OP_DESC(o));
7171 o->op_private |= OPpEXISTS_SUB;
7172 }
7173 else if (kid->op_type == OP_AELEM)
7174 o->op_flags |= OPf_SPECIAL;
7175 else if (kid->op_type != OP_HELEM)
7176 Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or a subroutine",
7177 OP_DESC(o));
7178 op_null(kid);
7179 }
7180 return o;
7181}
7182
7183OP *
7184Perl_ck_rvconst(pTHX_ register OP *o)
7185{
7186 dVAR;
7187 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7188
7189 PERL_ARGS_ASSERT_CK_RVCONST;
7190
7191 o->op_private |= (PL_hints & HINT_STRICT_REFS);
7192 if (o->op_type == OP_RV2CV)
7193 o->op_private &= ~1;
7194
7195 if (kid->op_type == OP_CONST) {
7196 int iscv;
7197 GV *gv;
7198 SV * const kidsv = kid->op_sv;
7199
7200 /* Is it a constant from cv_const_sv()? */
7201 if (SvROK(kidsv) && SvREADONLY(kidsv)) {
7202 SV * const rsv = SvRV(kidsv);
7203 const svtype type = SvTYPE(rsv);
7204 const char *badtype = NULL;
7205
7206 switch (o->op_type) {
7207 case OP_RV2SV:
7208 if (type > SVt_PVMG)
7209 badtype = "a SCALAR";
7210 break;
7211 case OP_RV2AV:
7212 if (type != SVt_PVAV)
7213 badtype = "an ARRAY";
7214 break;
7215 case OP_RV2HV:
7216 if (type != SVt_PVHV)
7217 badtype = "a HASH";
7218 break;
7219 case OP_RV2CV:
7220 if (type != SVt_PVCV)
7221 badtype = "a CODE";
7222 break;
7223 }
7224 if (badtype)
7225 Perl_croak(aTHX_ "Constant is not %s reference", badtype);
7226 return o;
7227 }
7228 if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
7229 const char *badthing;
7230 switch (o->op_type) {
7231 case OP_RV2SV:
7232 badthing = "a SCALAR";
7233 break;
7234 case OP_RV2AV:
7235 badthing = "an ARRAY";
7236 break;
7237 case OP_RV2HV:
7238 badthing = "a HASH";
7239 break;
7240 default:
7241 badthing = NULL;
7242 break;
7243 }
7244 if (badthing)
7245 Perl_croak(aTHX_
7246 "Can't use bareword (\"%"SVf"\") as %s ref while \"strict refs\" in use",
7247 SVfARG(kidsv), badthing);
7248 }
7249 /*
7250 * This is a little tricky. We only want to add the symbol if we
7251 * didn't add it in the lexer. Otherwise we get duplicate strict
7252 * warnings. But if we didn't add it in the lexer, we must at
7253 * least pretend like we wanted to add it even if it existed before,
7254 * or we get possible typo warnings. OPpCONST_ENTERED says
7255 * whether the lexer already added THIS instance of this symbol.
7256 */
7257 iscv = (o->op_type == OP_RV2CV) * 2;
7258 do {
7259 gv = gv_fetchsv(kidsv,
7260 iscv | !(kid->op_private & OPpCONST_ENTERED),
7261 iscv
7262 ? SVt_PVCV
7263 : o->op_type == OP_RV2SV
7264 ? SVt_PV
7265 : o->op_type == OP_RV2AV
7266 ? SVt_PVAV
7267 : o->op_type == OP_RV2HV
7268 ? SVt_PVHV
7269 : SVt_PVGV);
7270 } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
7271 if (gv) {
7272 kid->op_type = OP_GV;
7273 SvREFCNT_dec(kid->op_sv);
7274#ifdef USE_ITHREADS
7275 /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
7276 kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
7277 SvREFCNT_dec(PAD_SVl(kPADOP->op_padix));
7278 GvIN_PAD_on(gv);
7279 PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv)));
7280#else
7281 kid->op_sv = SvREFCNT_inc_simple_NN(gv);
7282#endif
7283 kid->op_private = 0;
7284 kid->op_ppaddr = PL_ppaddr[OP_GV];
7285 }
7286 }
7287 return o;
7288}
7289
7290OP *
7291Perl_ck_ftst(pTHX_ OP *o)
7292{
7293 dVAR;
7294 const I32 type = o->op_type;
7295
7296 PERL_ARGS_ASSERT_CK_FTST;
7297
7298 if (o->op_flags & OPf_REF) {
7299 NOOP;
7300 }
7301 else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
7302 SVOP * const kid = (SVOP*)cUNOPo->op_first;
7303 const OPCODE kidtype = kid->op_type;
7304
7305 if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
7306 OP * const newop = newGVOP(type, OPf_REF,
7307 gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO));
7308#ifdef PERL_MAD
7309 op_getmad(o,newop,'O');
7310#else
7311 op_free(o);
7312#endif
7313 return newop;
7314 }
7315 if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
7316 o->op_private |= OPpFT_ACCESS;
7317 if (PL_check[kidtype] == Perl_ck_ftst
7318 && kidtype != OP_STAT && kidtype != OP_LSTAT)
7319 o->op_private |= OPpFT_STACKED;
7320 }
7321 else {
7322#ifdef PERL_MAD
7323 OP* const oldo = o;
7324#else
7325 op_free(o);
7326#endif
7327 if (type == OP_FTTTY)
7328 o = newGVOP(type, OPf_REF, PL_stdingv);
7329 else
7330 o = newUNOP(type, 0, newDEFSVOP());
7331 op_getmad(oldo,o,'O');
7332 }
7333 return o;
7334}
7335
7336OP *
7337Perl_ck_fun(pTHX_ OP *o)
7338{
7339 dVAR;
7340 const int type = o->op_type;
7341 register I32 oa = PL_opargs[type] >> OASHIFT;
7342
7343 PERL_ARGS_ASSERT_CK_FUN;
7344
7345 if (o->op_flags & OPf_STACKED) {
7346 if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
7347 oa &= ~OA_OPTIONAL;
7348 else
7349 return no_fh_allowed(o);
7350 }
7351
7352 if (o->op_flags & OPf_KIDS) {
7353 OP **tokid = &cLISTOPo->op_first;
7354 register OP *kid = cLISTOPo->op_first;
7355 OP *sibl;
7356 I32 numargs = 0;
7357
7358 if (kid->op_type == OP_PUSHMARK ||
7359 (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
7360 {
7361 tokid = &kid->op_sibling;
7362 kid = kid->op_sibling;
7363 }
7364 if (!kid && PL_opargs[type] & OA_DEFGV)
7365 *tokid = kid = newDEFSVOP();
7366
7367 while (oa && kid) {
7368 numargs++;
7369 sibl = kid->op_sibling;
7370#ifdef PERL_MAD
7371 if (!sibl && kid->op_type == OP_STUB) {
7372 numargs--;
7373 break;
7374 }
7375#endif
7376 switch (oa & 7) {
7377 case OA_SCALAR:
7378 /* list seen where single (scalar) arg expected? */
7379 if (numargs == 1 && !(oa >> 4)
7380 && kid->op_type == OP_LIST && type != OP_SCALAR)
7381 {
7382 return too_many_arguments(o,PL_op_desc[type]);
7383 }
7384 scalar(kid);
7385 break;
7386 case OA_LIST:
7387 if (oa < 16) {
7388 kid = 0;
7389 continue;
7390 }
7391 else
7392 list(kid);
7393 break;
7394 case OA_AVREF:
7395 if ((type == OP_PUSH || type == OP_UNSHIFT)
7396 && !kid->op_sibling)
7397 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
7398 "Useless use of %s with no values",
7399 PL_op_desc[type]);
7400
7401 if (kid->op_type == OP_CONST &&
7402 (kid->op_private & OPpCONST_BARE))
7403 {
7404 OP * const newop = newAVREF(newGVOP(OP_GV, 0,
7405 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVAV) ));
7406 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7407 "Array @%"SVf" missing the @ in argument %"IVdf" of %s()",
7408 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7409#ifdef PERL_MAD
7410 op_getmad(kid,newop,'K');
7411#else
7412 op_free(kid);
7413#endif
7414 kid = newop;
7415 kid->op_sibling = sibl;
7416 *tokid = kid;
7417 }
7418 else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
7419 bad_type(numargs, "array", PL_op_desc[type], kid);
7420 mod(kid, type);
7421 break;
7422 case OA_HVREF:
7423 if (kid->op_type == OP_CONST &&
7424 (kid->op_private & OPpCONST_BARE))
7425 {
7426 OP * const newop = newHVREF(newGVOP(OP_GV, 0,
7427 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVHV) ));
7428 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7429 "Hash %%%"SVf" missing the %% in argument %"IVdf" of %s()",
7430 SVfARG(((SVOP*)kid)->op_sv), (IV)numargs, PL_op_desc[type]);
7431#ifdef PERL_MAD
7432 op_getmad(kid,newop,'K');
7433#else
7434 op_free(kid);
7435#endif
7436 kid = newop;
7437 kid->op_sibling = sibl;
7438 *tokid = kid;
7439 }
7440 else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
7441 bad_type(numargs, "hash", PL_op_desc[type], kid);
7442 mod(kid, type);
7443 break;
7444 case OA_CVREF:
7445 {
7446 OP * const newop = newUNOP(OP_NULL, 0, kid);
7447 kid->op_sibling = 0;
7448 LINKLIST(kid);
7449 newop->op_next = newop;
7450 kid = newop;
7451 kid->op_sibling = sibl;
7452 *tokid = kid;
7453 }
7454 break;
7455 case OA_FILEREF:
7456 if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
7457 if (kid->op_type == OP_CONST &&
7458 (kid->op_private & OPpCONST_BARE))
7459 {
7460 OP * const newop = newGVOP(OP_GV, 0,
7461 gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO));
7462 if (!(o->op_private & 1) && /* if not unop */
7463 kid == cLISTOPo->op_last)
7464 cLISTOPo->op_last = newop;
7465#ifdef PERL_MAD
7466 op_getmad(kid,newop,'K');
7467#else
7468 op_free(kid);
7469#endif
7470 kid = newop;
7471 }
7472 else if (kid->op_type == OP_READLINE) {
7473 /* neophyte patrol: open(<FH>), close(<FH>) etc. */
7474 bad_type(numargs, "HANDLE", OP_DESC(o), kid);
7475 }
7476 else {
7477 I32 flags = OPf_SPECIAL;
7478 I32 priv = 0;
7479 PADOFFSET targ = 0;
7480
7481 /* is this op a FH constructor? */
7482 if (is_handle_constructor(o,numargs)) {
7483 const char *name = NULL;
7484 STRLEN len = 0;
7485
7486 flags = 0;
7487 /* Set a flag to tell rv2gv to vivify
7488 * need to "prove" flag does not mean something
7489 * else already - NI-S 1999/05/07
7490 */
7491 priv = OPpDEREF;
7492 if (kid->op_type == OP_PADSV) {
7493 SV *const namesv
7494 = PAD_COMPNAME_SV(kid->op_targ);
7495 name = SvPV_const(namesv, len);
7496 }
7497 else if (kid->op_type == OP_RV2SV
7498 && kUNOP->op_first->op_type == OP_GV)
7499 {
7500 GV * const gv = cGVOPx_gv(kUNOP->op_first);
7501 name = GvNAME(gv);
7502 len = GvNAMELEN(gv);
7503 }
7504 else if (kid->op_type == OP_AELEM
7505 || kid->op_type == OP_HELEM)
7506 {
7507 OP *firstop;
7508 OP *op = ((BINOP*)kid)->op_first;
7509 name = NULL;
7510 if (op) {
7511 SV *tmpstr = NULL;
7512 const char * const a =
7513 kid->op_type == OP_AELEM ?
7514 "[]" : "{}";
7515 if (((op->op_type == OP_RV2AV) ||
7516 (op->op_type == OP_RV2HV)) &&
7517 (firstop = ((UNOP*)op)->op_first) &&
7518 (firstop->op_type == OP_GV)) {
7519 /* packagevar $a[] or $h{} */
7520 GV * const gv = cGVOPx_gv(firstop);
7521 if (gv)
7522 tmpstr =
7523 Perl_newSVpvf(aTHX_
7524 "%s%c...%c",
7525 GvNAME(gv),
7526 a[0], a[1]);
7527 }
7528 else if (op->op_type == OP_PADAV
7529 || op->op_type == OP_PADHV) {
7530 /* lexicalvar $a[] or $h{} */
7531 const char * const padname =
7532 PAD_COMPNAME_PV(op->op_targ);
7533 if (padname)
7534 tmpstr =
7535 Perl_newSVpvf(aTHX_
7536 "%s%c...%c",
7537 padname + 1,
7538 a[0], a[1]);
7539 }
7540 if (tmpstr) {
7541 name = SvPV_const(tmpstr, len);
7542 sv_2mortal(tmpstr);
7543 }
7544 }
7545 if (!name) {
7546 name = "__ANONIO__";
7547 len = 10;
7548 }
7549 mod(kid, type);
7550 }
7551 if (name) {
7552 SV *namesv;
7553 targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
7554 namesv = PAD_SVl(targ);
7555 SvUPGRADE(namesv, SVt_PV);
7556 if (*name != '$')
7557 sv_setpvs(namesv, "$");
7558 sv_catpvn(namesv, name, len);
7559 }
7560 }
7561 kid->op_sibling = 0;
7562 kid = newUNOP(OP_RV2GV, flags, scalar(kid));
7563 kid->op_targ = targ;
7564 kid->op_private |= priv;
7565 }
7566 kid->op_sibling = sibl;
7567 *tokid = kid;
7568 }
7569 scalar(kid);
7570 break;
7571 case OA_SCALARREF:
7572 mod(scalar(kid), type);
7573 break;
7574 }
7575 oa >>= 4;
7576 tokid = &kid->op_sibling;
7577 kid = kid->op_sibling;
7578 }
7579#ifdef PERL_MAD
7580 if (kid && kid->op_type != OP_STUB)
7581 return too_many_arguments(o,OP_DESC(o));
7582 o->op_private |= numargs;
7583#else
7584 /* FIXME - should the numargs move as for the PERL_MAD case? */
7585 o->op_private |= numargs;
7586 if (kid)
7587 return too_many_arguments(o,OP_DESC(o));
7588#endif
7589 listkids(o);
7590 }
7591 else if (PL_opargs[type] & OA_DEFGV) {
7592#ifdef PERL_MAD
7593 OP *newop = newUNOP(type, 0, newDEFSVOP());
7594 op_getmad(o,newop,'O');
7595 return newop;
7596#else
7597 /* Ordering of these two is important to keep f_map.t passing. */
7598 op_free(o);
7599 return newUNOP(type, 0, newDEFSVOP());
7600#endif
7601 }
7602
7603 if (oa) {
7604 while (oa & OA_OPTIONAL)
7605 oa >>= 4;
7606 if (oa && oa != OA_LIST)
7607 return too_few_arguments(o,OP_DESC(o));
7608 }
7609 return o;
7610}
7611
7612OP *
7613Perl_ck_glob(pTHX_ OP *o)
7614{
7615 dVAR;
7616 GV *gv;
7617
7618 PERL_ARGS_ASSERT_CK_GLOB;
7619
7620 o = ck_fun(o);
7621 if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
7622 op_append_elem(OP_GLOB, o, newDEFSVOP());
7623
7624 if (!((gv = gv_fetchpvs("glob", GV_NOTQUAL, SVt_PVCV))
7625 && GvCVu(gv) && GvIMPORTED_CV(gv)))
7626 {
7627 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7628 }
7629
7630#if !defined(PERL_EXTERNAL_GLOB)
7631 /* XXX this can be tightened up and made more failsafe. */
7632 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
7633 GV *glob_gv;
7634 ENTER;
7635 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
7636 newSVpvs("File::Glob"), NULL, NULL, NULL);
7637 if((glob_gv = gv_fetchpvs("File::Glob::csh_glob", 0, SVt_PVCV))) {
7638 gv = gv_fetchpvs("CORE::GLOBAL::glob", 0, SVt_PVCV);
7639 GvCV(gv) = GvCV(glob_gv);
7640 SvREFCNT_inc_void(MUTABLE_SV(GvCV(gv)));
7641 GvIMPORTED_CV_on(gv);
7642 }
7643 LEAVE;
7644 }
7645#endif /* PERL_EXTERNAL_GLOB */
7646
7647 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
7648 op_append_elem(OP_GLOB, o,
7649 newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
7650 o->op_type = OP_LIST;
7651 o->op_ppaddr = PL_ppaddr[OP_LIST];
7652 cLISTOPo->op_first->op_type = OP_PUSHMARK;
7653 cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
7654 cLISTOPo->op_first->op_targ = 0;
7655 o = newUNOP(OP_ENTERSUB, OPf_STACKED,
7656 op_append_elem(OP_LIST, o,
7657 scalar(newUNOP(OP_RV2CV, 0,
7658 newGVOP(OP_GV, 0, gv)))));
7659 o = newUNOP(OP_NULL, 0, ck_subr(o));
7660 o->op_targ = OP_GLOB; /* hint at what it used to be */
7661 return o;
7662 }
7663 gv = newGVgen("main");
7664 gv_IOadd(gv);
7665 op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
7666 scalarkids(o);
7667 return o;
7668}
7669
7670OP *
7671Perl_ck_grep(pTHX_ OP *o)
7672{
7673 dVAR;
7674 LOGOP *gwop = NULL;
7675 OP *kid;
7676 const OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
7677 PADOFFSET offset;
7678
7679 PERL_ARGS_ASSERT_CK_GREP;
7680
7681 o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
7682 /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */
7683
7684 if (o->op_flags & OPf_STACKED) {
7685 OP* k;
7686 o = ck_sort(o);
7687 kid = cUNOPx(cLISTOPo->op_first->op_sibling)->op_first;
7688 if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE)
7689 return no_fh_allowed(o);
7690 for (k = kid; k; k = k->op_next) {
7691 kid = k;
7692 }
7693 NewOp(1101, gwop, 1, LOGOP);
7694 kid->op_next = (OP*)gwop;
7695 o->op_flags &= ~OPf_STACKED;
7696 }
7697 kid = cLISTOPo->op_first->op_sibling;
7698 if (type == OP_MAPWHILE)
7699 list(kid);
7700 else
7701 scalar(kid);
7702 o = ck_fun(o);
7703 if (PL_parser && PL_parser->error_count)
7704 return o;
7705 kid = cLISTOPo->op_first->op_sibling;
7706 if (kid->op_type != OP_NULL)
7707 Perl_croak(aTHX_ "panic: ck_grep");
7708 kid = kUNOP->op_first;
7709
7710 if (!gwop)
7711 NewOp(1101, gwop, 1, LOGOP);
7712 gwop->op_type = type;
7713 gwop->op_ppaddr = PL_ppaddr[type];
7714 gwop->op_first = listkids(o);
7715 gwop->op_flags |= OPf_KIDS;
7716 gwop->op_other = LINKLIST(kid);
7717 kid->op_next = (OP*)gwop;
7718 offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
7719 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
7720 o->op_private = gwop->op_private = 0;
7721 gwop->op_targ = pad_alloc(type, SVs_PADTMP);
7722 }
7723 else {
7724 o->op_private = gwop->op_private = OPpGREP_LEX;
7725 gwop->op_targ = o->op_targ = offset;
7726 }
7727
7728 kid = cLISTOPo->op_first->op_sibling;
7729 if (!kid || !kid->op_sibling)
7730 return too_few_arguments(o,OP_DESC(o));
7731 for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
7732 mod(kid, OP_GREPSTART);
7733
7734 return (OP*)gwop;
7735}
7736
7737OP *
7738Perl_ck_index(pTHX_ OP *o)
7739{
7740 PERL_ARGS_ASSERT_CK_INDEX;
7741
7742 if (o->op_flags & OPf_KIDS) {
7743 OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
7744 if (kid)
7745 kid = kid->op_sibling; /* get past "big" */
7746 if (kid && kid->op_type == OP_CONST)
7747 fbm_compile(((SVOP*)kid)->op_sv, 0);
7748 }
7749 return ck_fun(o);
7750}
7751
7752OP *
7753Perl_ck_lfun(pTHX_ OP *o)
7754{
7755 const OPCODE type = o->op_type;
7756
7757 PERL_ARGS_ASSERT_CK_LFUN;
7758
7759 return modkids(ck_fun(o), type);
7760}
7761
7762OP *
7763Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
7764{
7765 PERL_ARGS_ASSERT_CK_DEFINED;
7766
7767 if ((o->op_flags & OPf_KIDS)) {
7768 switch (cUNOPo->op_first->op_type) {
7769 case OP_RV2AV:
7770 /* This is needed for
7771 if (defined %stash::)
7772 to work. Do not break Tk.
7773 */
7774 break; /* Globals via GV can be undef */
7775 case OP_PADAV:
7776 case OP_AASSIGN: /* Is this a good idea? */
7777 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7778 "defined(@array) is deprecated");
7779 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7780 "\t(Maybe you should just omit the defined()?)\n");
7781 break;
7782 case OP_RV2HV:
7783 case OP_PADHV:
7784 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7785 "defined(%%hash) is deprecated");
7786 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
7787 "\t(Maybe you should just omit the defined()?)\n");
7788 break;
7789 default:
7790 /* no warning */
7791 break;
7792 }
7793 }
7794 return ck_rfun(o);
7795}
7796
7797OP *
7798Perl_ck_readline(pTHX_ OP *o)
7799{
7800 PERL_ARGS_ASSERT_CK_READLINE;
7801
7802 if (!(o->op_flags & OPf_KIDS)) {
7803 OP * const newop
7804 = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv));
7805#ifdef PERL_MAD
7806 op_getmad(o,newop,'O');
7807#else
7808 op_free(o);
7809#endif
7810 return newop;
7811 }
7812 return o;
7813}
7814
7815OP *
7816Perl_ck_rfun(pTHX_ OP *o)
7817{
7818 const OPCODE type = o->op_type;
7819
7820 PERL_ARGS_ASSERT_CK_RFUN;
7821
7822 return refkids(ck_fun(o), type);
7823}
7824
7825OP *
7826Perl_ck_listiob(pTHX_ OP *o)
7827{
7828 register OP *kid;
7829
7830 PERL_ARGS_ASSERT_CK_LISTIOB;
7831
7832 kid = cLISTOPo->op_first;
7833 if (!kid) {
7834 o = force_list(o);
7835 kid = cLISTOPo->op_first;
7836 }
7837 if (kid->op_type == OP_PUSHMARK)
7838 kid = kid->op_sibling;
7839 if (kid && o->op_flags & OPf_STACKED)
7840 kid = kid->op_sibling;
7841 else if (kid && !kid->op_sibling) { /* print HANDLE; */
7842 if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
7843 o->op_flags |= OPf_STACKED; /* make it a filehandle */
7844 kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
7845 cLISTOPo->op_first->op_sibling = kid;
7846 cLISTOPo->op_last = kid;
7847 kid = kid->op_sibling;
7848 }
7849 }
7850
7851 if (!kid)
7852 op_append_elem(o->op_type, o, newDEFSVOP());
7853
7854 return listkids(o);
7855}
7856
7857OP *
7858Perl_ck_smartmatch(pTHX_ OP *o)
7859{
7860 dVAR;
7861 PERL_ARGS_ASSERT_CK_SMARTMATCH;
7862 if (0 == (o->op_flags & OPf_SPECIAL)) {
7863 OP *first = cBINOPo->op_first;
7864 OP *second = first->op_sibling;
7865
7866 /* Implicitly take a reference to an array or hash */
7867 first->op_sibling = NULL;
7868 first = cBINOPo->op_first = ref_array_or_hash(first);
7869 second = first->op_sibling = ref_array_or_hash(second);
7870
7871 /* Implicitly take a reference to a regular expression */
7872 if (first->op_type == OP_MATCH) {
7873 first->op_type = OP_QR;
7874 first->op_ppaddr = PL_ppaddr[OP_QR];
7875 }
7876 if (second->op_type == OP_MATCH) {
7877 second->op_type = OP_QR;
7878 second->op_ppaddr = PL_ppaddr[OP_QR];
7879 }
7880 }
7881
7882 return o;
7883}
7884
7885
7886OP *
7887Perl_ck_sassign(pTHX_ OP *o)
7888{
7889 dVAR;
7890 OP * const kid = cLISTOPo->op_first;
7891
7892 PERL_ARGS_ASSERT_CK_SASSIGN;
7893
7894 /* has a disposable target? */
7895 if ((PL_opargs[kid->op_type] & OA_TARGLEX)
7896 && !(kid->op_flags & OPf_STACKED)
7897 /* Cannot steal the second time! */
7898 && !(kid->op_private & OPpTARGET_MY)
7899 /* Keep the full thing for madskills */
7900 && !PL_madskills
7901 )
7902 {
7903 OP * const kkid = kid->op_sibling;
7904
7905 /* Can just relocate the target. */
7906 if (kkid && kkid->op_type == OP_PADSV
7907 && !(kkid->op_private & OPpLVAL_INTRO))
7908 {
7909 kid->op_targ = kkid->op_targ;
7910 kkid->op_targ = 0;
7911 /* Now we do not need PADSV and SASSIGN. */
7912 kid->op_sibling = o->op_sibling; /* NULL */
7913 cLISTOPo->op_first = NULL;
7914 op_free(o);
7915 op_free(kkid);
7916 kid->op_private |= OPpTARGET_MY; /* Used for context settings */
7917 return kid;
7918 }
7919 }
7920 if (kid->op_sibling) {
7921 OP *kkid = kid->op_sibling;
7922 if (kkid->op_type == OP_PADSV
7923 && (kkid->op_private & OPpLVAL_INTRO)
7924 && SvPAD_STATE(*av_fetch(PL_comppad_name, kkid->op_targ, FALSE))) {
7925 const PADOFFSET target = kkid->op_targ;
7926 OP *const other = newOP(OP_PADSV,
7927 kkid->op_flags
7928 | ((kkid->op_private & ~OPpLVAL_INTRO) << 8));
7929 OP *const first = newOP(OP_NULL, 0);
7930 OP *const nullop = newCONDOP(0, first, o, other);
7931 OP *const condop = first->op_next;
7932 /* hijacking PADSTALE for uninitialized state variables */
7933 SvPADSTALE_on(PAD_SVl(target));
7934
7935 condop->op_type = OP_ONCE;
7936 condop->op_ppaddr = PL_ppaddr[OP_ONCE];
7937 condop->op_targ = target;
7938 other->op_targ = target;
7939
7940 /* Because we change the type of the op here, we will skip the
7941 assinment binop->op_last = binop->op_first->op_sibling; at the
7942 end of Perl_newBINOP(). So need to do it here. */
7943 cBINOPo->op_last = cBINOPo->op_first->op_sibling;
7944
7945 return nullop;
7946 }
7947 }
7948 return o;
7949}
7950
7951OP *
7952Perl_ck_match(pTHX_ OP *o)
7953{
7954 dVAR;
7955
7956 PERL_ARGS_ASSERT_CK_MATCH;
7957
7958 if (o->op_type != OP_QR && PL_compcv) {
7959 const PADOFFSET offset = Perl_pad_findmy(aTHX_ STR_WITH_LEN("$_"), 0);
7960 if (offset != NOT_IN_PAD && !(PAD_COMPNAME_FLAGS_isOUR(offset))) {
7961 o->op_targ = offset;
7962 o->op_private |= OPpTARGET_MY;
7963 }
7964 }
7965 if (o->op_type == OP_MATCH || o->op_type == OP_QR)
7966 o->op_private |= OPpRUNTIME;
7967 return o;
7968}
7969
7970OP *
7971Perl_ck_method(pTHX_ OP *o)
7972{
7973 OP * const kid = cUNOPo->op_first;
7974
7975 PERL_ARGS_ASSERT_CK_METHOD;
7976
7977 if (kid->op_type == OP_CONST) {
7978 SV* sv = kSVOP->op_sv;
7979 const char * const method = SvPVX_const(sv);
7980 if (!(strchr(method, ':') || strchr(method, '\''))) {
7981 OP *cmop;
7982 if (!SvREADONLY(sv) || !SvFAKE(sv)) {
7983 sv = newSVpvn_share(method, SvCUR(sv), 0);
7984 }
7985 else {
7986 kSVOP->op_sv = NULL;
7987 }
7988 cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
7989#ifdef PERL_MAD
7990 op_getmad(o,cmop,'O');
7991#else
7992 op_free(o);
7993#endif
7994 return cmop;
7995 }
7996 }
7997 return o;
7998}
7999
8000OP *
8001Perl_ck_null(pTHX_ OP *o)
8002{
8003 PERL_ARGS_ASSERT_CK_NULL;
8004 PERL_UNUSED_CONTEXT;
8005 return o;
8006}
8007
8008OP *
8009Perl_ck_open(pTHX_ OP *o)
8010{
8011 dVAR;
8012 HV * const table = GvHV(PL_hintgv);
8013
8014 PERL_ARGS_ASSERT_CK_OPEN;
8015
8016 if (table) {
8017 SV **svp = hv_fetchs(table, "open_IN", FALSE);
8018 if (svp && *svp) {
8019 STRLEN len = 0;
8020 const char *d = SvPV_const(*svp, len);
8021 const I32 mode = mode_from_discipline(d, len);
8022 if (mode & O_BINARY)
8023 o->op_private |= OPpOPEN_IN_RAW;
8024 else if (mode & O_TEXT)
8025 o->op_private |= OPpOPEN_IN_CRLF;
8026 }
8027
8028 svp = hv_fetchs(table, "open_OUT", FALSE);
8029 if (svp && *svp) {
8030 STRLEN len = 0;
8031 const char *d = SvPV_const(*svp, len);
8032 const I32 mode = mode_from_discipline(d, len);
8033 if (mode & O_BINARY)
8034 o->op_private |= OPpOPEN_OUT_RAW;
8035 else if (mode & O_TEXT)
8036 o->op_private |= OPpOPEN_OUT_CRLF;
8037 }
8038 }
8039 if (o->op_type == OP_BACKTICK) {
8040 if (!(o->op_flags & OPf_KIDS)) {
8041 OP * const newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP());
8042#ifdef PERL_MAD
8043 op_getmad(o,newop,'O');
8044#else
8045 op_free(o);
8046#endif
8047 return newop;
8048 }
8049 return o;
8050 }
8051 {
8052 /* In case of three-arg dup open remove strictness
8053 * from the last arg if it is a bareword. */
8054 OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */
8055 OP * const last = cLISTOPx(o)->op_last; /* The bareword. */
8056 OP *oa;
8057 const char *mode;
8058
8059 if ((last->op_type == OP_CONST) && /* The bareword. */
8060 (last->op_private & OPpCONST_BARE) &&
8061 (last->op_private & OPpCONST_STRICT) &&
8062 (oa = first->op_sibling) && /* The fh. */
8063 (oa = oa->op_sibling) && /* The mode. */
8064 (oa->op_type == OP_CONST) &&
8065 SvPOK(((SVOP*)oa)->op_sv) &&
8066 (mode = SvPVX_const(((SVOP*)oa)->op_sv)) &&
8067 mode[0] == '>' && mode[1] == '&' && /* A dup open. */
8068 (last == oa->op_sibling)) /* The bareword. */
8069 last->op_private &= ~OPpCONST_STRICT;
8070 }
8071 return ck_fun(o);
8072}
8073
8074OP *
8075Perl_ck_repeat(pTHX_ OP *o)
8076{
8077 PERL_ARGS_ASSERT_CK_REPEAT;
8078
8079 if (cBINOPo->op_first->op_flags & OPf_PARENS) {
8080 o->op_private |= OPpREPEAT_DOLIST;
8081 cBINOPo->op_first = force_list(cBINOPo->op_first);
8082 }
8083 else
8084 scalar(o);
8085 return o;
8086}
8087
8088OP *
8089Perl_ck_require(pTHX_ OP *o)
8090{
8091 dVAR;
8092 GV* gv = NULL;
8093
8094 PERL_ARGS_ASSERT_CK_REQUIRE;
8095
8096 if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
8097 SVOP * const kid = (SVOP*)cUNOPo->op_first;
8098
8099 if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
8100 SV * const sv = kid->op_sv;
8101 U32 was_readonly = SvREADONLY(sv);
8102 char *s;
8103 STRLEN len;
8104 const char *end;
8105
8106 if (was_readonly) {
8107 if (SvFAKE(sv)) {
8108 sv_force_normal_flags(sv, 0);
8109 assert(!SvREADONLY(sv));
8110 was_readonly = 0;
8111 } else {
8112 SvREADONLY_off(sv);
8113 }
8114 }
8115
8116 s = SvPVX(sv);
8117 len = SvCUR(sv);
8118 end = s + len;
8119 for (; s < end; s++) {
8120 if (*s == ':' && s[1] == ':') {
8121 *s = '/';
8122 Move(s+2, s+1, end - s - 1, char);
8123 --end;
8124 }
8125 }
8126 SvEND_set(sv, end);
8127 sv_catpvs(sv, ".pm");
8128 SvFLAGS(sv) |= was_readonly;
8129 }
8130 }
8131
8132 if (!(o->op_flags & OPf_SPECIAL)) { /* Wasn't written as CORE::require */
8133 /* handle override, if any */
8134 gv = gv_fetchpvs("require", GV_NOTQUAL, SVt_PVCV);
8135 if (!(gv && GvCVu(gv) && GvIMPORTED_CV(gv))) {
8136 GV * const * const gvp = (GV**)hv_fetchs(PL_globalstash, "require", FALSE);
8137 gv = gvp ? *gvp : NULL;
8138 }
8139 }
8140
8141 if (gv && GvCVu(gv) && GvIMPORTED_CV(gv)) {
8142 OP * const kid = cUNOPo->op_first;
8143 OP * newop;
8144
8145 cUNOPo->op_first = 0;
8146#ifndef PERL_MAD
8147 op_free(o);
8148#endif
8149 newop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
8150 op_append_elem(OP_LIST, kid,
8151 scalar(newUNOP(OP_RV2CV, 0,
8152 newGVOP(OP_GV, 0,
8153 gv))))));
8154 op_getmad(o,newop,'O');
8155 return newop;
8156 }
8157
8158 return scalar(ck_fun(o));
8159}
8160
8161OP *
8162Perl_ck_return(pTHX_ OP *o)
8163{
8164 dVAR;
8165 OP *kid;
8166
8167 PERL_ARGS_ASSERT_CK_RETURN;
8168
8169 kid = cLISTOPo->op_first->op_sibling;
8170 if (CvLVALUE(PL_compcv)) {
8171 for (; kid; kid = kid->op_sibling)
8172 mod(kid, OP_LEAVESUBLV);
8173 } else {
8174 for (; kid; kid = kid->op_sibling)
8175 if ((kid->op_type == OP_NULL)
8176 && ((kid->op_flags & (OPf_SPECIAL|OPf_KIDS)) == (OPf_SPECIAL|OPf_KIDS))) {
8177 /* This is a do block */
8178 OP *op = kUNOP->op_first;
8179 if (op->op_type == OP_LEAVE && op->op_flags & OPf_KIDS) {
8180 op = cUNOPx(op)->op_first;
8181 assert(op->op_type == OP_ENTER && !(op->op_flags & OPf_SPECIAL));
8182 /* Force the use of the caller's context */
8183 op->op_flags |= OPf_SPECIAL;
8184 }
8185 }
8186 }
8187
8188 return o;
8189}
8190
8191OP *
8192Perl_ck_select(pTHX_ OP *o)
8193{
8194 dVAR;
8195 OP* kid;
8196
8197 PERL_ARGS_ASSERT_CK_SELECT;
8198
8199 if (o->op_flags & OPf_KIDS) {
8200 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8201 if (kid && kid->op_sibling) {
8202 o->op_type = OP_SSELECT;
8203 o->op_ppaddr = PL_ppaddr[OP_SSELECT];
8204 o = ck_fun(o);
8205 return fold_constants(o);
8206 }
8207 }
8208 o = ck_fun(o);
8209 kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8210 if (kid && kid->op_type == OP_RV2GV)
8211 kid->op_private &= ~HINT_STRICT_REFS;
8212 return o;
8213}
8214
8215OP *
8216Perl_ck_shift(pTHX_ OP *o)
8217{
8218 dVAR;
8219 const I32 type = o->op_type;
8220
8221 PERL_ARGS_ASSERT_CK_SHIFT;
8222
8223 if (!(o->op_flags & OPf_KIDS)) {
8224 OP *argop;
8225
8226 if (!CvUNIQUE(PL_compcv)) {
8227 o->op_flags |= OPf_SPECIAL;
8228 return o;
8229 }
8230
8231 argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv)));
8232#ifdef PERL_MAD
8233 {
8234 OP * const oldo = o;
8235 o = newUNOP(type, 0, scalar(argop));
8236 op_getmad(oldo,o,'O');
8237 return o;
8238 }
8239#else
8240 op_free(o);
8241 return newUNOP(type, 0, scalar(argop));
8242#endif
8243 }
8244 return scalar(modkids(ck_fun(o), type));
8245}
8246
8247OP *
8248Perl_ck_sort(pTHX_ OP *o)
8249{
8250 dVAR;
8251 OP *firstkid;
8252
8253 PERL_ARGS_ASSERT_CK_SORT;
8254
8255 if (o->op_type == OP_SORT && (PL_hints & HINT_LOCALIZE_HH) != 0) {
8256 HV * const hinthv = GvHV(PL_hintgv);
8257 if (hinthv) {
8258 SV ** const svp = hv_fetchs(hinthv, "sort", FALSE);
8259 if (svp) {
8260 const I32 sorthints = (I32)SvIV(*svp);
8261 if ((sorthints & HINT_SORT_QUICKSORT) != 0)
8262 o->op_private |= OPpSORT_QSORT;
8263 if ((sorthints & HINT_SORT_STABLE) != 0)
8264 o->op_private |= OPpSORT_STABLE;
8265 }
8266 }
8267 }
8268
8269 if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
8270 simplify_sort(o);
8271 firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8272 if (o->op_flags & OPf_STACKED) { /* may have been cleared */
8273 OP *k = NULL;
8274 OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
8275
8276 if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
8277 LINKLIST(kid);
8278 if (kid->op_type == OP_SCOPE) {
8279 k = kid->op_next;
8280 kid->op_next = 0;
8281 }
8282 else if (kid->op_type == OP_LEAVE) {
8283 if (o->op_type == OP_SORT) {
8284 op_null(kid); /* wipe out leave */
8285 kid->op_next = kid;
8286
8287 for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
8288 if (k->op_next == kid)
8289 k->op_next = 0;
8290 /* don't descend into loops */
8291 else if (k->op_type == OP_ENTERLOOP
8292 || k->op_type == OP_ENTERITER)
8293 {
8294 k = cLOOPx(k)->op_lastop;
8295 }
8296 }
8297 }
8298 else
8299 kid->op_next = 0; /* just disconnect the leave */
8300 k = kLISTOP->op_first;
8301 }
8302 CALL_PEEP(k);
8303
8304 kid = firstkid;
8305 if (o->op_type == OP_SORT) {
8306 /* provide scalar context for comparison function/block */
8307 kid = scalar(kid);
8308 kid->op_next = kid;
8309 }
8310 else
8311 kid->op_next = k;
8312 o->op_flags |= OPf_SPECIAL;
8313 }
8314 else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
8315 op_null(firstkid);
8316
8317 firstkid = firstkid->op_sibling;
8318 }
8319
8320 /* provide list context for arguments */
8321 if (o->op_type == OP_SORT)
8322 list(firstkid);
8323
8324 return o;
8325}
8326
8327STATIC void
8328S_simplify_sort(pTHX_ OP *o)
8329{
8330 dVAR;
8331 register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
8332 OP *k;
8333 int descending;
8334 GV *gv;
8335 const char *gvname;
8336
8337 PERL_ARGS_ASSERT_SIMPLIFY_SORT;
8338
8339 if (!(o->op_flags & OPf_STACKED))
8340 return;
8341 GvMULTI_on(gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV));
8342 GvMULTI_on(gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV));
8343 kid = kUNOP->op_first; /* get past null */
8344 if (kid->op_type != OP_SCOPE)
8345 return;
8346 kid = kLISTOP->op_last; /* get past scope */
8347 switch(kid->op_type) {
8348 case OP_NCMP:
8349 case OP_I_NCMP:
8350 case OP_SCMP:
8351 break;
8352 default:
8353 return;
8354 }
8355 k = kid; /* remember this node*/
8356 if (kBINOP->op_first->op_type != OP_RV2SV)
8357 return;
8358 kid = kBINOP->op_first; /* get past cmp */
8359 if (kUNOP->op_first->op_type != OP_GV)
8360 return;
8361 kid = kUNOP->op_first; /* get past rv2sv */
8362 gv = kGVOP_gv;
8363 if (GvSTASH(gv) != PL_curstash)
8364 return;
8365 gvname = GvNAME(gv);
8366 if (*gvname == 'a' && gvname[1] == '\0')
8367 descending = 0;
8368 else if (*gvname == 'b' && gvname[1] == '\0')
8369 descending = 1;
8370 else
8371 return;
8372
8373 kid = k; /* back to cmp */
8374 if (kBINOP->op_last->op_type != OP_RV2SV)
8375 return;
8376 kid = kBINOP->op_last; /* down to 2nd arg */
8377 if (kUNOP->op_first->op_type != OP_GV)
8378 return;
8379 kid = kUNOP->op_first; /* get past rv2sv */
8380 gv = kGVOP_gv;
8381 if (GvSTASH(gv) != PL_curstash)
8382 return;
8383 gvname = GvNAME(gv);
8384 if ( descending
8385 ? !(*gvname == 'a' && gvname[1] == '\0')
8386 : !(*gvname == 'b' && gvname[1] == '\0'))
8387 return;
8388 o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
8389 if (descending)
8390 o->op_private |= OPpSORT_DESCEND;
8391 if (k->op_type == OP_NCMP)
8392 o->op_private |= OPpSORT_NUMERIC;
8393 if (k->op_type == OP_I_NCMP)
8394 o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
8395 kid = cLISTOPo->op_first->op_sibling;
8396 cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
8397#ifdef PERL_MAD
8398 op_getmad(kid,o,'S'); /* then delete it */
8399#else
8400 op_free(kid); /* then delete it */
8401#endif
8402}
8403
8404OP *
8405Perl_ck_split(pTHX_ OP *o)
8406{
8407 dVAR;
8408 register OP *kid;
8409
8410 PERL_ARGS_ASSERT_CK_SPLIT;
8411
8412 if (o->op_flags & OPf_STACKED)
8413 return no_fh_allowed(o);
8414
8415 kid = cLISTOPo->op_first;
8416 if (kid->op_type != OP_NULL)
8417 Perl_croak(aTHX_ "panic: ck_split");
8418 kid = kid->op_sibling;
8419 op_free(cLISTOPo->op_first);
8420 cLISTOPo->op_first = kid;
8421 if (!kid) {
8422 cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvs(" "));
8423 cLISTOPo->op_last = kid; /* There was only one element previously */
8424 }
8425
8426 if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
8427 OP * const sibl = kid->op_sibling;
8428 kid->op_sibling = 0;
8429 kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, 0);
8430 if (cLISTOPo->op_first == cLISTOPo->op_last)
8431 cLISTOPo->op_last = kid;
8432 cLISTOPo->op_first = kid;
8433 kid->op_sibling = sibl;
8434 }
8435
8436 kid->op_type = OP_PUSHRE;
8437 kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
8438 scalar(kid);
8439 if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) {
8440 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),
8441 "Use of /g modifier is meaningless in split");
8442 }
8443
8444 if (!kid->op_sibling)
8445 op_append_elem(OP_SPLIT, o, newDEFSVOP());
8446
8447 kid = kid->op_sibling;
8448 scalar(kid);
8449
8450 if (!kid->op_sibling)
8451 op_append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
8452 assert(kid->op_sibling);
8453
8454 kid = kid->op_sibling;
8455 scalar(kid);
8456
8457 if (kid->op_sibling)
8458 return too_many_arguments(o,OP_DESC(o));
8459
8460 return o;
8461}
8462
8463OP *
8464Perl_ck_join(pTHX_ OP *o)
8465{
8466 const OP * const kid = cLISTOPo->op_first->op_sibling;
8467
8468 PERL_ARGS_ASSERT_CK_JOIN;
8469
8470 if (kid && kid->op_type == OP_MATCH) {
8471 if (ckWARN(WARN_SYNTAX)) {
8472 const REGEXP *re = PM_GETRE(kPMOP);
8473 const char *pmstr = re ? RX_PRECOMP_const(re) : "STRING";
8474 const STRLEN len = re ? RX_PRELEN(re) : 6;
8475 Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
8476 "/%.*s/ should probably be written as \"%.*s\"",
8477 (int)len, pmstr, (int)len, pmstr);
8478 }
8479 }
8480 return ck_fun(o);
8481}
8482
8483/*
8484=for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
8485
8486Examines an op, which is expected to identify a subroutine at runtime,
8487and attempts to determine at compile time which subroutine it identifies.
8488This is normally used during Perl compilation to determine whether
8489a prototype can be applied to a function call. I<cvop> is the op
8490being considered, normally an C<rv2cv> op. A pointer to the identified
8491subroutine is returned, if it could be determined statically, and a null
8492pointer is returned if it was not possible to determine statically.
8493
8494Currently, the subroutine can be identified statically if the RV that the
8495C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
8496A C<gv> op is suitable if the GV's CV slot is populated. A C<const> op is
8497suitable if the constant value must be an RV pointing to a CV. Details of
8498this process may change in future versions of Perl. If the C<rv2cv> op
8499has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
8500the subroutine statically: this flag is used to suppress compile-time
8501magic on a subroutine call, forcing it to use default runtime behaviour.
8502
8503If I<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
8504of a GV reference is modified. If a GV was examined and its CV slot was
8505found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
8506If the op is not optimised away, and the CV slot is later populated with
8507a subroutine having a prototype, that flag eventually triggers the warning
8508"called too early to check prototype".
8509
8510If I<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
8511of returning a pointer to the subroutine it returns a pointer to the
8512GV giving the most appropriate name for the subroutine in this context.
8513Normally this is just the C<CvGV> of the subroutine, but for an anonymous
8514(C<CvANON>) subroutine that is referenced through a GV it will be the
8515referencing GV. The resulting C<GV*> is cast to C<CV*> to be returned.
8516A null pointer is returned as usual if there is no statically-determinable
8517subroutine.
8518
8519=cut
8520*/
8521
8522CV *
8523Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
8524{
8525 OP *rvop;
8526 CV *cv;
8527 GV *gv;
8528 PERL_ARGS_ASSERT_RV2CV_OP_CV;
8529 if (flags & ~(RV2CVOPCV_MARK_EARLY|RV2CVOPCV_RETURN_NAME_GV))
8530 Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags);
8531 if (cvop->op_type != OP_RV2CV)
8532 return NULL;
8533 if (cvop->op_private & OPpENTERSUB_AMPER)
8534 return NULL;
8535 if (!(cvop->op_flags & OPf_KIDS))
8536 return NULL;
8537 rvop = cUNOPx(cvop)->op_first;
8538 switch (rvop->op_type) {
8539 case OP_GV: {
8540 gv = cGVOPx_gv(rvop);
8541 cv = GvCVu(gv);
8542 if (!cv) {
8543 if (flags & RV2CVOPCV_MARK_EARLY)
8544 rvop->op_private |= OPpEARLY_CV;
8545 return NULL;
8546 }
8547 } break;
8548 case OP_CONST: {
8549 SV *rv = cSVOPx_sv(rvop);
8550 if (!SvROK(rv))
8551 return NULL;
8552 cv = (CV*)SvRV(rv);
8553 gv = NULL;
8554 } break;
8555 default: {
8556 return NULL;
8557 } break;
8558 }
8559 if (SvTYPE((SV*)cv) != SVt_PVCV)
8560 return NULL;
8561 if (flags & RV2CVOPCV_RETURN_NAME_GV) {
8562 if (!CvANON(cv) || !gv)
8563 gv = CvGV(cv);
8564 return (CV*)gv;
8565 } else {
8566 return cv;
8567 }
8568}
8569
8570/*
8571=for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
8572
8573Performs the default fixup of the arguments part of an C<entersub>
8574op tree. This consists of applying list context to each of the
8575argument ops. This is the standard treatment used on a call marked
8576with C<&>, or a method call, or a call through a subroutine reference,
8577or any other call where the callee can't be identified at compile time,
8578or a call where the callee has no prototype.
8579
8580=cut
8581*/
8582
8583OP *
8584Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
8585{
8586 OP *aop;
8587 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
8588 aop = cUNOPx(entersubop)->op_first;
8589 if (!aop->op_sibling)
8590 aop = cUNOPx(aop)->op_first;
8591 for (aop = aop->op_sibling; aop->op_sibling; aop = aop->op_sibling) {
8592 if (!(PL_madskills && aop->op_type == OP_STUB)) {
8593 list(aop);
8594 mod(aop, OP_ENTERSUB);
8595 }
8596 }
8597 return entersubop;
8598}
8599
8600/*
8601=for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
8602
8603Performs the fixup of the arguments part of an C<entersub> op tree
8604based on a subroutine prototype. This makes various modifications to
8605the argument ops, from applying context up to inserting C<refgen> ops,
8606and checking the number and syntactic types of arguments, as directed by
8607the prototype. This is the standard treatment used on a subroutine call,
8608not marked with C<&>, where the callee can be identified at compile time
8609and has a prototype.
8610
8611I<protosv> supplies the subroutine prototype to be applied to the call.
8612It may be a normal defined scalar, of which the string value will be used.
8613Alternatively, for convenience, it may be a subroutine object (a C<CV*>
8614that has been cast to C<SV*>) which has a prototype. The prototype
8615supplied, in whichever form, does not need to match the actual callee
8616referenced by the op tree.
8617
8618If the argument ops disagree with the prototype, for example by having
8619an unacceptable number of arguments, a valid op tree is returned anyway.
8620The error is reflected in the parser state, normally resulting in a single
8621exception at the top level of parsing which covers all the compilation
8622errors that occurred. In the error message, the callee is referred to
8623by the name defined by the I<namegv> parameter.
8624
8625=cut
8626*/
8627
8628OP *
8629Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
8630{
8631 STRLEN proto_len;
8632 const char *proto, *proto_end;
8633 OP *aop, *prev, *cvop;
8634 int optional = 0;
8635 I32 arg = 0;
8636 I32 contextclass = 0;
8637 const char *e = NULL;
8638 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO;
8639 if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv))
8640 Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto");
8641 proto = SvPV(protosv, proto_len);
8642 proto_end = proto + proto_len;
8643 aop = cUNOPx(entersubop)->op_first;
8644 if (!aop->op_sibling)
8645 aop = cUNOPx(aop)->op_first;
8646 prev = aop;
8647 aop = aop->op_sibling;
8648 for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
8649 while (aop != cvop) {
8650 OP* o3;
8651 if (PL_madskills && aop->op_type == OP_STUB) {
8652 aop = aop->op_sibling;
8653 continue;
8654 }
8655 if (PL_madskills && aop->op_type == OP_NULL)
8656 o3 = ((UNOP*)aop)->op_first;
8657 else
8658 o3 = aop;
8659
8660 if (proto >= proto_end)
8661 return too_many_arguments(entersubop, gv_ename(namegv));
8662
8663 switch (*proto) {
8664 case ';':
8665 optional = 1;
8666 proto++;
8667 continue;
8668 case '_':
8669 /* _ must be at the end */
8670 if (proto[1] && proto[1] != ';')
8671 goto oops;
8672 case '$':
8673 proto++;
8674 arg++;
8675 scalar(aop);
8676 break;
8677 case '%':
8678 case '@':
8679 list(aop);
8680 arg++;
8681 break;
8682 case '&':
8683 proto++;
8684 arg++;
8685 if (o3->op_type != OP_REFGEN && o3->op_type != OP_UNDEF)
8686 bad_type(arg,
8687 arg == 1 ? "block or sub {}" : "sub {}",
8688 gv_ename(namegv), o3);
8689 break;
8690 case '*':
8691 /* '*' allows any scalar type, including bareword */
8692 proto++;
8693 arg++;
8694 if (o3->op_type == OP_RV2GV)
8695 goto wrapref; /* autoconvert GLOB -> GLOBref */
8696 else if (o3->op_type == OP_CONST)
8697 o3->op_private &= ~OPpCONST_STRICT;
8698 else if (o3->op_type == OP_ENTERSUB) {
8699 /* accidental subroutine, revert to bareword */
8700 OP *gvop = ((UNOP*)o3)->op_first;
8701 if (gvop && gvop->op_type == OP_NULL) {
8702 gvop = ((UNOP*)gvop)->op_first;
8703 if (gvop) {
8704 for (; gvop->op_sibling; gvop = gvop->op_sibling)
8705 ;
8706 if (gvop &&
8707 (gvop->op_private & OPpENTERSUB_NOPAREN) &&
8708 (gvop = ((UNOP*)gvop)->op_first) &&
8709 gvop->op_type == OP_GV)
8710 {
8711 GV * const gv = cGVOPx_gv(gvop);
8712 OP * const sibling = aop->op_sibling;
8713 SV * const n = newSVpvs("");
8714#ifdef PERL_MAD
8715 OP * const oldaop = aop;
8716#else
8717 op_free(aop);
8718#endif
8719 gv_fullname4(n, gv, "", FALSE);
8720 aop = newSVOP(OP_CONST, 0, n);
8721 op_getmad(oldaop,aop,'O');
8722 prev->op_sibling = aop;
8723 aop->op_sibling = sibling;
8724 }
8725 }
8726 }
8727 }
8728 scalar(aop);
8729 break;
8730 case '[': case ']':
8731 goto oops;
8732 break;
8733 case '\\':
8734 proto++;
8735 arg++;
8736 again:
8737 switch (*proto++) {
8738 case '[':
8739 if (contextclass++ == 0) {
8740 e = strchr(proto, ']');
8741 if (!e || e == proto)
8742 goto oops;
8743 }
8744 else
8745 goto oops;
8746 goto again;
8747 break;
8748 case ']':
8749 if (contextclass) {
8750 const char *p = proto;
8751 const char *const end = proto;
8752 contextclass = 0;
8753 while (*--p != '[') {}
8754 bad_type(arg, Perl_form(aTHX_ "one of %.*s",
8755 (int)(end - p), p),
8756 gv_ename(namegv), o3);
8757 } else
8758 goto oops;
8759 break;
8760 case '*':
8761 if (o3->op_type == OP_RV2GV)
8762 goto wrapref;
8763 if (!contextclass)
8764 bad_type(arg, "symbol", gv_ename(namegv), o3);
8765 break;
8766 case '&':
8767 if (o3->op_type == OP_ENTERSUB)
8768 goto wrapref;
8769 if (!contextclass)
8770 bad_type(arg, "subroutine entry", gv_ename(namegv),
8771 o3);
8772 break;
8773 case '$':
8774 if (o3->op_type == OP_RV2SV ||
8775 o3->op_type == OP_PADSV ||
8776 o3->op_type == OP_HELEM ||
8777 o3->op_type == OP_AELEM)
8778 goto wrapref;
8779 if (!contextclass)
8780 bad_type(arg, "scalar", gv_ename(namegv), o3);
8781 break;
8782 case '@':
8783 if (o3->op_type == OP_RV2AV ||
8784 o3->op_type == OP_PADAV)
8785 goto wrapref;
8786 if (!contextclass)
8787 bad_type(arg, "array", gv_ename(namegv), o3);
8788 break;
8789 case '%':
8790 if (o3->op_type == OP_RV2HV ||
8791 o3->op_type == OP_PADHV)
8792 goto wrapref;
8793 if (!contextclass)
8794 bad_type(arg, "hash", gv_ename(namegv), o3);
8795 break;
8796 wrapref:
8797 {
8798 OP* const kid = aop;
8799 OP* const sib = kid->op_sibling;
8800 kid->op_sibling = 0;
8801 aop = newUNOP(OP_REFGEN, 0, kid);
8802 aop->op_sibling = sib;
8803 prev->op_sibling = aop;
8804 }
8805 if (contextclass && e) {
8806 proto = e + 1;
8807 contextclass = 0;
8808 }
8809 break;
8810 default: goto oops;
8811 }
8812 if (contextclass)
8813 goto again;
8814 break;
8815 case ' ':
8816 proto++;
8817 continue;
8818 default:
8819 oops:
8820 Perl_croak(aTHX_ "Malformed prototype for %s: %"SVf,
8821 gv_ename(namegv), SVfARG(protosv));
8822 }
8823
8824 mod(aop, OP_ENTERSUB);
8825 prev = aop;
8826 aop = aop->op_sibling;
8827 }
8828 if (aop == cvop && *proto == '_') {
8829 /* generate an access to $_ */
8830 aop = newDEFSVOP();
8831 aop->op_sibling = prev->op_sibling;
8832 prev->op_sibling = aop; /* instead of cvop */
8833 }
8834 if (!optional && proto_end > proto &&
8835 (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_'))
8836 return too_few_arguments(entersubop, gv_ename(namegv));
8837 return entersubop;
8838}
8839
8840/*
8841=for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
8842
8843Performs the fixup of the arguments part of an C<entersub> op tree either
8844based on a subroutine prototype or using default list-context processing.
8845This is the standard treatment used on a subroutine call, not marked
8846with C<&>, where the callee can be identified at compile time.
8847
8848I<protosv> supplies the subroutine prototype to be applied to the call,
8849or indicates that there is no prototype. It may be a normal scalar,
8850in which case if it is defined then the string value will be used
8851as a prototype, and if it is undefined then there is no prototype.
8852Alternatively, for convenience, it may be a subroutine object (a C<CV*>
8853that has been cast to C<SV*>), of which the prototype will be used if it
8854has one. The prototype (or lack thereof) supplied, in whichever form,
8855does not need to match the actual callee referenced by the op tree.
8856
8857If the argument ops disagree with the prototype, for example by having
8858an unacceptable number of arguments, a valid op tree is returned anyway.
8859The error is reflected in the parser state, normally resulting in a single
8860exception at the top level of parsing which covers all the compilation
8861errors that occurred. In the error message, the callee is referred to
8862by the name defined by the I<namegv> parameter.
8863
8864=cut
8865*/
8866
8867OP *
8868Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop,
8869 GV *namegv, SV *protosv)
8870{
8871 PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST;
8872 if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv))
8873 return ck_entersub_args_proto(entersubop, namegv, protosv);
8874 else
8875 return ck_entersub_args_list(entersubop);
8876}
8877
8878/*
8879=for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
8880
8881Retrieves the function that will be used to fix up a call to I<cv>.
8882Specifically, the function is applied to an C<entersub> op tree for a
8883subroutine call, not marked with C<&>, where the callee can be identified
8884at compile time as I<cv>.
8885
8886The C-level function pointer is returned in I<*ckfun_p>, and an SV
8887argument for it is returned in I<*ckobj_p>. The function is intended
8888to be called in this manner:
8889
8890 entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
8891
8892In this call, I<entersubop> is a pointer to the C<entersub> op,
8893which may be replaced by the check function, and I<namegv> is a GV
8894supplying the name that should be used by the check function to refer
8895to the callee of the C<entersub> op if it needs to emit any diagnostics.
8896It is permitted to apply the check function in non-standard situations,
8897such as to a call to a different subroutine or to a method call.
8898
8899By default, the function is
8900L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
8901and the SV parameter is I<cv> itself. This implements standard
8902prototype processing. It can be changed, for a particular subroutine,
8903by L</cv_set_call_checker>.
8904
8905=cut
8906*/
8907
8908void
8909Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
8910{
8911 MAGIC *callmg;
8912 PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER;
8913 callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL;
8914 if (callmg) {
8915 *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr);
8916 *ckobj_p = callmg->mg_obj;
8917 } else {
8918 *ckfun_p = Perl_ck_entersub_args_proto_or_list;
8919 *ckobj_p = (SV*)cv;
8920 }
8921}
8922
8923/*
8924=for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
8925
8926Sets the function that will be used to fix up a call to I<cv>.
8927Specifically, the function is applied to an C<entersub> op tree for a
8928subroutine call, not marked with C<&>, where the callee can be identified
8929at compile time as I<cv>.
8930
8931The C-level function pointer is supplied in I<ckfun>, and an SV argument
8932for it is supplied in I<ckobj>. The function is intended to be called
8933in this manner:
8934
8935 entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
8936
8937In this call, I<entersubop> is a pointer to the C<entersub> op,
8938which may be replaced by the check function, and I<namegv> is a GV
8939supplying the name that should be used by the check function to refer
8940to the callee of the C<entersub> op if it needs to emit any diagnostics.
8941It is permitted to apply the check function in non-standard situations,
8942such as to a call to a different subroutine or to a method call.
8943
8944The current setting for a particular CV can be retrieved by
8945L</cv_get_call_checker>.
8946
8947=cut
8948*/
8949
8950void
8951Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj)
8952{
8953 PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER;
8954 if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) {
8955 if (SvMAGICAL((SV*)cv))
8956 mg_free_type((SV*)cv, PERL_MAGIC_checkcall);
8957 } else {
8958 MAGIC *callmg;
8959 sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0);
8960 callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall);
8961 if (callmg->mg_flags & MGf_REFCOUNTED) {
8962 SvREFCNT_dec(callmg->mg_obj);
8963 callmg->mg_flags &= ~MGf_REFCOUNTED;
8964 }
8965 callmg->mg_ptr = FPTR2DPTR(char *, ckfun);
8966 callmg->mg_obj = ckobj;
8967 if (ckobj != (SV*)cv) {
8968 SvREFCNT_inc_simple_void_NN(ckobj);
8969 callmg->mg_flags |= MGf_REFCOUNTED;
8970 }
8971 }
8972}
8973
8974OP *
8975Perl_ck_subr(pTHX_ OP *o)
8976{
8977 OP *aop, *cvop;
8978 CV *cv;
8979 GV *namegv;
8980
8981 PERL_ARGS_ASSERT_CK_SUBR;
8982
8983 aop = cUNOPx(o)->op_first;
8984 if (!aop->op_sibling)
8985 aop = cUNOPx(aop)->op_first;
8986 aop = aop->op_sibling;
8987 for (cvop = aop; cvop->op_sibling; cvop = cvop->op_sibling) ;
8988 cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY);
8989 namegv = cv ? (GV*)rv2cv_op_cv(cvop, RV2CVOPCV_RETURN_NAME_GV) : NULL;
8990
8991 o->op_private |= OPpENTERSUB_HASTARG;
8992 o->op_private |= (PL_hints & HINT_STRICT_REFS);
8993 if (PERLDB_SUB && PL_curstash != PL_debstash)
8994 o->op_private |= OPpENTERSUB_DB;
8995 if (cvop->op_type == OP_RV2CV) {
8996 o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
8997 op_null(cvop);
8998 } else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
8999 if (aop->op_type == OP_CONST)
9000 aop->op_private &= ~OPpCONST_STRICT;
9001 else if (aop->op_type == OP_LIST) {
9002 OP * const sib = ((UNOP*)aop)->op_first->op_sibling;
9003 if (sib && sib->op_type == OP_CONST)
9004 sib->op_private &= ~OPpCONST_STRICT;
9005 }
9006 }
9007
9008 if (!cv) {
9009 return ck_entersub_args_list(o);
9010 } else {
9011 Perl_call_checker ckfun;
9012 SV *ckobj;
9013 cv_get_call_checker(cv, &ckfun, &ckobj);
9014 return ckfun(aTHX_ o, namegv, ckobj);
9015 }
9016}
9017
9018OP *
9019Perl_ck_svconst(pTHX_ OP *o)
9020{
9021 PERL_ARGS_ASSERT_CK_SVCONST;
9022 PERL_UNUSED_CONTEXT;
9023 SvREADONLY_on(cSVOPo->op_sv);
9024 return o;
9025}
9026
9027OP *
9028Perl_ck_chdir(pTHX_ OP *o)
9029{
9030 PERL_ARGS_ASSERT_CK_CHDIR;
9031 if (o->op_flags & OPf_KIDS) {
9032 SVOP * const kid = (SVOP*)cUNOPo->op_first;
9033
9034 if (kid && kid->op_type == OP_CONST &&
9035 (kid->op_private & OPpCONST_BARE))
9036 {
9037 o->op_flags |= OPf_SPECIAL;
9038 kid->op_private &= ~OPpCONST_STRICT;
9039 }
9040 }
9041 return ck_fun(o);
9042}
9043
9044OP *
9045Perl_ck_trunc(pTHX_ OP *o)
9046{
9047 PERL_ARGS_ASSERT_CK_TRUNC;
9048
9049 if (o->op_flags & OPf_KIDS) {
9050 SVOP *kid = (SVOP*)cUNOPo->op_first;
9051
9052 if (kid->op_type == OP_NULL)
9053 kid = (SVOP*)kid->op_sibling;
9054 if (kid && kid->op_type == OP_CONST &&
9055 (kid->op_private & OPpCONST_BARE))
9056 {
9057 o->op_flags |= OPf_SPECIAL;
9058 kid->op_private &= ~OPpCONST_STRICT;
9059 }
9060 }
9061 return ck_fun(o);
9062}
9063
9064OP *
9065Perl_ck_unpack(pTHX_ OP *o)
9066{
9067 OP *kid = cLISTOPo->op_first;
9068
9069 PERL_ARGS_ASSERT_CK_UNPACK;
9070
9071 if (kid->op_sibling) {
9072 kid = kid->op_sibling;
9073 if (!kid->op_sibling)
9074 kid->op_sibling = newDEFSVOP();
9075 }
9076 return ck_fun(o);
9077}
9078
9079OP *
9080Perl_ck_substr(pTHX_ OP *o)
9081{
9082 PERL_ARGS_ASSERT_CK_SUBSTR;
9083
9084 o = ck_fun(o);
9085 if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) {
9086 OP *kid = cLISTOPo->op_first;
9087
9088 if (kid->op_type == OP_NULL)
9089 kid = kid->op_sibling;
9090 if (kid)
9091 kid->op_flags |= OPf_MOD;
9092
9093 }
9094 return o;
9095}
9096
9097OP *
9098Perl_ck_each(pTHX_ OP *o)
9099{
9100 dVAR;
9101 OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : NULL;
9102
9103 PERL_ARGS_ASSERT_CK_EACH;
9104
9105 if (kid) {
9106 if (kid->op_type == OP_PADAV || kid->op_type == OP_RV2AV) {
9107 const unsigned new_type = o->op_type == OP_EACH ? OP_AEACH
9108 : o->op_type == OP_KEYS ? OP_AKEYS : OP_AVALUES;
9109 o->op_type = new_type;
9110 o->op_ppaddr = PL_ppaddr[new_type];
9111 }
9112 else if (!(kid->op_type == OP_PADHV || kid->op_type == OP_RV2HV
9113 || (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE)
9114 )) {
9115 bad_type(1, "hash or array", PL_op_desc[o->op_type], kid);
9116 return o;
9117 }
9118 }
9119 return ck_fun(o);
9120}
9121
9122/* caller is supposed to assign the return to the
9123 container of the rep_op var */
9124STATIC OP *
9125S_opt_scalarhv(pTHX_ OP *rep_op) {
9126 dVAR;
9127 UNOP *unop;
9128
9129 PERL_ARGS_ASSERT_OPT_SCALARHV;
9130
9131 NewOp(1101, unop, 1, UNOP);
9132 unop->op_type = (OPCODE)OP_BOOLKEYS;
9133 unop->op_ppaddr = PL_ppaddr[OP_BOOLKEYS];
9134 unop->op_flags = (U8)(OPf_WANT_SCALAR | OPf_KIDS );
9135 unop->op_private = (U8)(1 | ((OPf_WANT_SCALAR | OPf_KIDS) >> 8));
9136 unop->op_first = rep_op;
9137 unop->op_next = rep_op->op_next;
9138 rep_op->op_next = (OP*)unop;
9139 rep_op->op_flags|=(OPf_REF | OPf_MOD);
9140 unop->op_sibling = rep_op->op_sibling;
9141 rep_op->op_sibling = NULL;
9142 /* unop->op_targ = pad_alloc(OP_BOOLKEYS, SVs_PADTMP); */
9143 if (rep_op->op_type == OP_PADHV) {
9144 rep_op->op_flags &= ~OPf_WANT_SCALAR;
9145 rep_op->op_flags |= OPf_WANT_LIST;
9146 }
9147 return (OP*)unop;
9148}
9149
9150/* Checks if o acts as an in-place operator on an array. oright points to the
9151 * beginning of the right-hand side. Returns the left-hand side of the
9152 * assignment if o acts in-place, or NULL otherwise. */
9153
9154STATIC OP *
9155S_is_inplace_av(pTHX_ OP *o, OP *oright) {
9156 OP *o2;
9157 OP *oleft = NULL;
9158
9159 PERL_ARGS_ASSERT_IS_INPLACE_AV;
9160
9161 if (!oright ||
9162 (oright->op_type != OP_RV2AV && oright->op_type != OP_PADAV)
9163 || oright->op_next != o
9164 || (oright->op_private & OPpLVAL_INTRO)
9165 )
9166 return NULL;
9167
9168 /* o2 follows the chain of op_nexts through the LHS of the
9169 * assign (if any) to the aassign op itself */
9170 o2 = o->op_next;
9171 if (!o2 || o2->op_type != OP_NULL)
9172 return NULL;
9173 o2 = o2->op_next;
9174 if (!o2 || o2->op_type != OP_PUSHMARK)
9175 return NULL;
9176 o2 = o2->op_next;
9177 if (o2 && o2->op_type == OP_GV)
9178 o2 = o2->op_next;
9179 if (!o2
9180 || (o2->op_type != OP_PADAV && o2->op_type != OP_RV2AV)
9181 || (o2->op_private & OPpLVAL_INTRO)
9182 )
9183 return NULL;
9184 oleft = o2;
9185 o2 = o2->op_next;
9186 if (!o2 || o2->op_type != OP_NULL)
9187 return NULL;
9188 o2 = o2->op_next;
9189 if (!o2 || o2->op_type != OP_AASSIGN
9190 || (o2->op_flags & OPf_WANT) != OPf_WANT_VOID)
9191 return NULL;
9192
9193 /* check that the sort is the first arg on RHS of assign */
9194
9195 o2 = cUNOPx(o2)->op_first;
9196 if (!o2 || o2->op_type != OP_NULL)
9197 return NULL;
9198 o2 = cUNOPx(o2)->op_first;
9199 if (!o2 || o2->op_type != OP_PUSHMARK)
9200 return NULL;
9201 if (o2->op_sibling != o)
9202 return NULL;
9203
9204 /* check the array is the same on both sides */
9205 if (oleft->op_type == OP_RV2AV) {
9206 if (oright->op_type != OP_RV2AV
9207 || !cUNOPx(oright)->op_first
9208 || cUNOPx(oright)->op_first->op_type != OP_GV
9209 || cGVOPx_gv(cUNOPx(oleft)->op_first) !=
9210 cGVOPx_gv(cUNOPx(oright)->op_first)
9211 )
9212 return NULL;
9213 }
9214 else if (oright->op_type != OP_PADAV
9215 || oright->op_targ != oleft->op_targ
9216 )
9217 return NULL;
9218
9219 return oleft;
9220}
9221
9222/* A peephole optimizer. We visit the ops in the order they're to execute.
9223 * See the comments at the top of this file for more details about when
9224 * peep() is called */
9225
9226void
9227Perl_rpeep(pTHX_ register OP *o)
9228{
9229 dVAR;
9230 register OP* oldop = NULL;
9231
9232 if (!o || o->op_opt)
9233 return;
9234 ENTER;
9235 SAVEOP();
9236 SAVEVPTR(PL_curcop);
9237 for (; o; o = o->op_next) {
9238 if (o->op_opt)
9239 break;
9240 /* By default, this op has now been optimised. A couple of cases below
9241 clear this again. */
9242 o->op_opt = 1;
9243 PL_op = o;
9244 switch (o->op_type) {
9245 case OP_DBSTATE:
9246 PL_curcop = ((COP*)o); /* for warnings */
9247 break;
9248 case OP_NEXTSTATE:
9249 PL_curcop = ((COP*)o); /* for warnings */
9250
9251 /* Two NEXTSTATEs in a row serve no purpose. Except if they happen
9252 to carry two labels. For now, take the easier option, and skip
9253 this optimisation if the first NEXTSTATE has a label. */
9254 if (!CopLABEL((COP*)o)) {
9255 OP *nextop = o->op_next;
9256 while (nextop && nextop->op_type == OP_NULL)
9257 nextop = nextop->op_next;
9258
9259 if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
9260 COP *firstcop = (COP *)o;
9261 COP *secondcop = (COP *)nextop;
9262 /* We want the COP pointed to by o (and anything else) to
9263 become the next COP down the line. */
9264 cop_free(firstcop);
9265
9266 firstcop->op_next = secondcop->op_next;
9267
9268 /* Now steal all its pointers, and duplicate the other
9269 data. */
9270 firstcop->cop_line = secondcop->cop_line;
9271#ifdef USE_ITHREADS
9272 firstcop->cop_stashpv = secondcop->cop_stashpv;
9273 firstcop->cop_file = secondcop->cop_file;
9274#else
9275 firstcop->cop_stash = secondcop->cop_stash;
9276 firstcop->cop_filegv = secondcop->cop_filegv;
9277#endif
9278 firstcop->cop_hints = secondcop->cop_hints;
9279 firstcop->cop_seq = secondcop->cop_seq;
9280 firstcop->cop_warnings = secondcop->cop_warnings;
9281 firstcop->cop_hints_hash = secondcop->cop_hints_hash;
9282
9283#ifdef USE_ITHREADS
9284 secondcop->cop_stashpv = NULL;
9285 secondcop->cop_file = NULL;
9286#else
9287 secondcop->cop_stash = NULL;
9288 secondcop->cop_filegv = NULL;
9289#endif
9290 secondcop->cop_warnings = NULL;
9291 secondcop->cop_hints_hash = NULL;
9292
9293 /* If we use op_null(), and hence leave an ex-COP, some
9294 warnings are misreported. For example, the compile-time
9295 error in 'use strict; no strict refs;' */
9296 secondcop->op_type = OP_NULL;
9297 secondcop->op_ppaddr = PL_ppaddr[OP_NULL];
9298 }
9299 }
9300 break;
9301
9302 case OP_CONST:
9303 if (cSVOPo->op_private & OPpCONST_STRICT)
9304 no_bareword_allowed(o);
9305#ifdef USE_ITHREADS
9306 case OP_HINTSEVAL:
9307 case OP_METHOD_NAMED:
9308 /* Relocate sv to the pad for thread safety.
9309 * Despite being a "constant", the SV is written to,
9310 * for reference counts, sv_upgrade() etc. */
9311 if (cSVOP->op_sv) {
9312 const PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
9313 if (o->op_type != OP_METHOD_NAMED && SvPADTMP(cSVOPo->op_sv)) {
9314 /* If op_sv is already a PADTMP then it is being used by
9315 * some pad, so make a copy. */
9316 sv_setsv(PAD_SVl(ix),cSVOPo->op_sv);
9317 SvREADONLY_on(PAD_SVl(ix));
9318 SvREFCNT_dec(cSVOPo->op_sv);
9319 }
9320 else if (o->op_type != OP_METHOD_NAMED
9321 && cSVOPo->op_sv == &PL_sv_undef) {
9322 /* PL_sv_undef is hack - it's unsafe to store it in the
9323 AV that is the pad, because av_fetch treats values of
9324 PL_sv_undef as a "free" AV entry and will merrily
9325 replace them with a new SV, causing pad_alloc to think
9326 that this pad slot is free. (When, clearly, it is not)
9327 */
9328 SvOK_off(PAD_SVl(ix));
9329 SvPADTMP_on(PAD_SVl(ix));
9330 SvREADONLY_on(PAD_SVl(ix));
9331 }
9332 else {
9333 SvREFCNT_dec(PAD_SVl(ix));
9334 SvPADTMP_on(cSVOPo->op_sv);
9335 PAD_SETSV(ix, cSVOPo->op_sv);
9336 /* XXX I don't know how this isn't readonly already. */
9337 SvREADONLY_on(PAD_SVl(ix));
9338 }
9339 cSVOPo->op_sv = NULL;
9340 o->op_targ = ix;
9341 }
9342#endif
9343 break;
9344
9345 case OP_CONCAT:
9346 if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
9347 if (o->op_next->op_private & OPpTARGET_MY) {
9348 if (o->op_flags & OPf_STACKED) /* chained concats */
9349 break; /* ignore_optimization */
9350 else {
9351 /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
9352 o->op_targ = o->op_next->op_targ;
9353 o->op_next->op_targ = 0;
9354 o->op_private |= OPpTARGET_MY;
9355 }
9356 }
9357 op_null(o->op_next);
9358 }
9359 break;
9360 case OP_STUB:
9361 if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
9362 break; /* Scalar stub must produce undef. List stub is noop */
9363 }
9364 goto nothin;
9365 case OP_NULL:
9366 if (o->op_targ == OP_NEXTSTATE
9367 || o->op_targ == OP_DBSTATE)
9368 {
9369 PL_curcop = ((COP*)o);
9370 }
9371 /* XXX: We avoid setting op_seq here to prevent later calls
9372 to rpeep() from mistakenly concluding that optimisation
9373 has already occurred. This doesn't fix the real problem,
9374 though (See 20010220.007). AMS 20010719 */
9375 /* op_seq functionality is now replaced by op_opt */
9376 o->op_opt = 0;
9377 /* FALL THROUGH */
9378 case OP_SCALAR:
9379 case OP_LINESEQ:
9380 case OP_SCOPE:
9381 nothin:
9382 if (oldop && o->op_next) {
9383 oldop->op_next = o->op_next;
9384 o->op_opt = 0;
9385 continue;
9386 }
9387 break;
9388
9389 case OP_PADAV:
9390 case OP_GV:
9391 if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) {
9392 OP* const pop = (o->op_type == OP_PADAV) ?
9393 o->op_next : o->op_next->op_next;
9394 IV i;
9395 if (pop && pop->op_type == OP_CONST &&
9396 ((PL_op = pop->op_next)) &&
9397 pop->op_next->op_type == OP_AELEM &&
9398 !(pop->op_next->op_private &
9399 (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
9400 (i = SvIV(((SVOP*)pop)->op_sv) - CopARYBASE_get(PL_curcop))
9401 <= 255 &&
9402 i >= 0)
9403 {
9404 GV *gv;
9405 if (cSVOPx(pop)->op_private & OPpCONST_STRICT)
9406 no_bareword_allowed(pop);
9407 if (o->op_type == OP_GV)
9408 op_null(o->op_next);
9409 op_null(pop->op_next);
9410 op_null(pop);
9411 o->op_flags |= pop->op_next->op_flags & OPf_MOD;
9412 o->op_next = pop->op_next->op_next;
9413 o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
9414 o->op_private = (U8)i;
9415 if (o->op_type == OP_GV) {
9416 gv = cGVOPo_gv;
9417 GvAVn(gv);
9418 }
9419 else
9420 o->op_flags |= OPf_SPECIAL;
9421 o->op_type = OP_AELEMFAST;
9422 }
9423 break;
9424 }
9425
9426 if (o->op_next->op_type == OP_RV2SV) {
9427 if (!(o->op_next->op_private & OPpDEREF)) {
9428 op_null(o->op_next);
9429 o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
9430 | OPpOUR_INTRO);
9431 o->op_next = o->op_next->op_next;
9432 o->op_type = OP_GVSV;
9433 o->op_ppaddr = PL_ppaddr[OP_GVSV];
9434 }
9435 }
9436 else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
9437 GV * const gv = cGVOPo_gv;
9438 if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX_const(GvCV(gv))) {
9439 /* XXX could check prototype here instead of just carping */
9440 SV * const sv = sv_newmortal();
9441 gv_efullname3(sv, gv, NULL);
9442 Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE),
9443 "%"SVf"() called too early to check prototype",
9444 SVfARG(sv));
9445 }
9446 }
9447 else if (o->op_next->op_type == OP_READLINE
9448 && o->op_next->op_next->op_type == OP_CONCAT
9449 && (o->op_next->op_next->op_flags & OPf_STACKED))
9450 {
9451 /* Turn "$a .= <FH>" into an OP_RCATLINE. AMS 20010917 */
9452 o->op_type = OP_RCATLINE;
9453 o->op_flags |= OPf_STACKED;
9454 o->op_ppaddr = PL_ppaddr[OP_RCATLINE];
9455 op_null(o->op_next->op_next);
9456 op_null(o->op_next);
9457 }
9458
9459 break;
9460
9461 {
9462 OP *fop;
9463 OP *sop;
9464
9465 case OP_NOT:
9466 fop = cUNOP->op_first;
9467 sop = NULL;
9468 goto stitch_keys;
9469 break;
9470
9471 case OP_AND:
9472 case OP_OR:
9473 case OP_DOR:
9474 fop = cLOGOP->op_first;
9475 sop = fop->op_sibling;
9476 while (cLOGOP->op_other->op_type == OP_NULL)
9477 cLOGOP->op_other = cLOGOP->op_other->op_next;
9478 CALL_RPEEP(cLOGOP->op_other);
9479
9480 stitch_keys:
9481 o->op_opt = 1;
9482 if ((fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
9483 || ( sop &&
9484 (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV)
9485 )
9486 ){
9487 OP * nop = o;
9488 OP * lop = o;
9489 if (!((nop->op_flags & OPf_WANT) == OPf_WANT_VOID)) {
9490 while (nop && nop->op_next) {
9491 switch (nop->op_next->op_type) {
9492 case OP_NOT:
9493 case OP_AND:
9494 case OP_OR:
9495 case OP_DOR:
9496 lop = nop = nop->op_next;
9497 break;
9498 case OP_NULL:
9499 nop = nop->op_next;
9500 break;
9501 default:
9502 nop = NULL;
9503 break;
9504 }
9505 }
9506 }
9507 if ((lop->op_flags & OPf_WANT) == OPf_WANT_VOID) {
9508 if (fop->op_type == OP_PADHV || fop->op_type == OP_RV2HV)
9509 cLOGOP->op_first = opt_scalarhv(fop);
9510 if (sop && (sop->op_type == OP_PADHV || sop->op_type == OP_RV2HV))
9511 cLOGOP->op_first->op_sibling = opt_scalarhv(sop);
9512 }
9513 }
9514
9515
9516 break;
9517 }
9518
9519 case OP_MAPWHILE:
9520 case OP_GREPWHILE:
9521 case OP_ANDASSIGN:
9522 case OP_ORASSIGN:
9523 case OP_DORASSIGN:
9524 case OP_COND_EXPR:
9525 case OP_RANGE:
9526 case OP_ONCE:
9527 while (cLOGOP->op_other->op_type == OP_NULL)
9528 cLOGOP->op_other = cLOGOP->op_other->op_next;
9529 CALL_RPEEP(cLOGOP->op_other);
9530 break;
9531
9532 case OP_ENTERLOOP:
9533 case OP_ENTERITER:
9534 while (cLOOP->op_redoop->op_type == OP_NULL)
9535 cLOOP->op_redoop = cLOOP->op_redoop->op_next;
9536 CALL_RPEEP(cLOOP->op_redoop);
9537 while (cLOOP->op_nextop->op_type == OP_NULL)
9538 cLOOP->op_nextop = cLOOP->op_nextop->op_next;
9539 CALL_RPEEP(cLOOP->op_nextop);
9540 while (cLOOP->op_lastop->op_type == OP_NULL)
9541 cLOOP->op_lastop = cLOOP->op_lastop->op_next;
9542 CALL_RPEEP(cLOOP->op_lastop);
9543 break;
9544
9545 case OP_SUBST:
9546 assert(!(cPMOP->op_pmflags & PMf_ONCE));
9547 while (cPMOP->op_pmstashstartu.op_pmreplstart &&
9548 cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL)
9549 cPMOP->op_pmstashstartu.op_pmreplstart
9550 = cPMOP->op_pmstashstartu.op_pmreplstart->op_next;
9551 CALL_RPEEP(cPMOP->op_pmstashstartu.op_pmreplstart);
9552 break;
9553
9554 case OP_EXEC:
9555 if (o->op_next && o->op_next->op_type == OP_NEXTSTATE
9556 && ckWARN(WARN_SYNTAX))
9557 {
9558 if (o->op_next->op_sibling) {
9559 const OPCODE type = o->op_next->op_sibling->op_type;
9560 if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) {
9561 const line_t oldline = CopLINE(PL_curcop);
9562 CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
9563 Perl_warner(aTHX_ packWARN(WARN_EXEC),
9564 "Statement unlikely to be reached");
9565 Perl_warner(aTHX_ packWARN(WARN_EXEC),
9566 "\t(Maybe you meant system() when you said exec()?)\n");
9567 CopLINE_set(PL_curcop, oldline);
9568 }
9569 }
9570 }
9571 break;
9572
9573 case OP_HELEM: {
9574 UNOP *rop;
9575 SV *lexname;
9576 GV **fields;
9577 SV **svp, *sv;
9578 const char *key = NULL;
9579 STRLEN keylen;
9580
9581 if (((BINOP*)o)->op_last->op_type != OP_CONST)
9582 break;
9583
9584 /* Make the CONST have a shared SV */
9585 svp = cSVOPx_svp(((BINOP*)o)->op_last);
9586 if (!SvFAKE(sv = *svp) || !SvREADONLY(sv)) {
9587 key = SvPV_const(sv, keylen);
9588 lexname = newSVpvn_share(key,
9589 SvUTF8(sv) ? -(I32)keylen : (I32)keylen,
9590 0);
9591 SvREFCNT_dec(sv);
9592 *svp = lexname;
9593 }
9594
9595 if ((o->op_private & (OPpLVAL_INTRO)))
9596 break;
9597
9598 rop = (UNOP*)((BINOP*)o)->op_first;
9599 if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
9600 break;
9601 lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
9602 if (!SvPAD_TYPED(lexname))
9603 break;
9604 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
9605 if (!fields || !GvHV(*fields))
9606 break;
9607 key = SvPV_const(*svp, keylen);
9608 if (!hv_fetch(GvHV(*fields), key,
9609 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
9610 {
9611 Perl_croak(aTHX_ "No such class field \"%s\" "
9612 "in variable %s of type %s",
9613 key, SvPV_nolen_const(lexname), HvNAME_get(SvSTASH(lexname)));
9614 }
9615
9616 break;
9617 }
9618
9619 case OP_HSLICE: {
9620 UNOP *rop;
9621 SV *lexname;
9622 GV **fields;
9623 SV **svp;
9624 const char *key;
9625 STRLEN keylen;
9626 SVOP *first_key_op, *key_op;
9627
9628 if ((o->op_private & (OPpLVAL_INTRO))
9629 /* I bet there's always a pushmark... */
9630 || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
9631 /* hmmm, no optimization if list contains only one key. */
9632 break;
9633 rop = (UNOP*)((LISTOP*)o)->op_last;
9634 if (rop->op_type != OP_RV2HV)
9635 break;
9636 if (rop->op_first->op_type == OP_PADSV)
9637 /* @$hash{qw(keys here)} */
9638 rop = (UNOP*)rop->op_first;
9639 else {
9640 /* @{$hash}{qw(keys here)} */
9641 if (rop->op_first->op_type == OP_SCOPE
9642 && cLISTOPx(rop->op_first)->op_last->op_type == OP_PADSV)
9643 {
9644 rop = (UNOP*)cLISTOPx(rop->op_first)->op_last;
9645 }
9646 else
9647 break;
9648 }
9649
9650 lexname = *av_fetch(PL_comppad_name, rop->op_targ, TRUE);
9651 if (!SvPAD_TYPED(lexname))
9652 break;
9653 fields = (GV**)hv_fetchs(SvSTASH(lexname), "FIELDS", FALSE);
9654 if (!fields || !GvHV(*fields))
9655 break;
9656 /* Again guessing that the pushmark can be jumped over.... */
9657 first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
9658 ->op_first->op_sibling;
9659 for (key_op = first_key_op; key_op;
9660 key_op = (SVOP*)key_op->op_sibling) {
9661 if (key_op->op_type != OP_CONST)
9662 continue;
9663 svp = cSVOPx_svp(key_op);
9664 key = SvPV_const(*svp, keylen);
9665 if (!hv_fetch(GvHV(*fields), key,
9666 SvUTF8(*svp) ? -(I32)keylen : (I32)keylen, FALSE))
9667 {
9668 Perl_croak(aTHX_ "No such class field \"%s\" "
9669 "in variable %s of type %s",
9670 key, SvPV_nolen(lexname), HvNAME_get(SvSTASH(lexname)));
9671 }
9672 }
9673 break;
9674 }
9675 case OP_RV2SV:
9676 case OP_RV2AV:
9677 case OP_RV2HV:
9678 if (oldop
9679 && ( oldop->op_type == OP_AELEM
9680 || oldop->op_type == OP_PADSV
9681 || oldop->op_type == OP_RV2SV
9682 || oldop->op_type == OP_RV2GV
9683 || oldop->op_type == OP_HELEM
9684 )
9685 && (oldop->op_private & OPpDEREF)
9686 ) {
9687 o->op_private |= OPpDEREFed;
9688 }
9689
9690 case OP_SORT: {
9691 /* will point to RV2AV or PADAV op on LHS/RHS of assign */
9692 OP *oleft;
9693 OP *o2;
9694
9695 /* check that RHS of sort is a single plain array */
9696 OP *oright = cUNOPo->op_first;
9697 if (!oright || oright->op_type != OP_PUSHMARK)
9698 break;
9699
9700 /* reverse sort ... can be optimised. */
9701 if (!cUNOPo->op_sibling) {
9702 /* Nothing follows us on the list. */
9703 OP * const reverse = o->op_next;
9704
9705 if (reverse->op_type == OP_REVERSE &&
9706 (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) {
9707 OP * const pushmark = cUNOPx(reverse)->op_first;
9708 if (pushmark && (pushmark->op_type == OP_PUSHMARK)
9709 && (cUNOPx(pushmark)->op_sibling == o)) {
9710 /* reverse -> pushmark -> sort */
9711 o->op_private |= OPpSORT_REVERSE;
9712 op_null(reverse);
9713 pushmark->op_next = oright->op_next;
9714 op_null(oright);
9715 }
9716 }
9717 }
9718
9719 /* make @a = sort @a act in-place */
9720
9721 oright = cUNOPx(oright)->op_sibling;
9722 if (!oright)
9723 break;
9724 if (oright->op_type == OP_NULL) { /* skip sort block/sub */
9725 oright = cUNOPx(oright)->op_sibling;
9726 }
9727
9728 oleft = is_inplace_av(o, oright);
9729 if (!oleft)
9730 break;
9731
9732 /* transfer MODishness etc from LHS arg to RHS arg */
9733 oright->op_flags = oleft->op_flags;
9734 o->op_private |= OPpSORT_INPLACE;
9735
9736 /* excise push->gv->rv2av->null->aassign */
9737 o2 = o->op_next->op_next;
9738 op_null(o2); /* PUSHMARK */
9739 o2 = o2->op_next;
9740 if (o2->op_type == OP_GV) {
9741 op_null(o2); /* GV */
9742 o2 = o2->op_next;
9743 }
9744 op_null(o2); /* RV2AV or PADAV */
9745 o2 = o2->op_next->op_next;
9746 op_null(o2); /* AASSIGN */
9747
9748 o->op_next = o2->op_next;
9749
9750 break;
9751 }
9752
9753 case OP_REVERSE: {
9754 OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av;
9755 OP *gvop = NULL;
9756 OP *oleft, *oright;
9757 LISTOP *enter, *exlist;
9758
9759 /* @a = reverse @a */
9760 if ((oright = cLISTOPo->op_first)
9761 && (oright->op_type == OP_PUSHMARK)
9762 && (oright = oright->op_sibling)
9763 && (oleft = is_inplace_av(o, oright))) {
9764 OP *o2;
9765
9766 /* transfer MODishness etc from LHS arg to RHS arg */
9767 oright->op_flags = oleft->op_flags;
9768 o->op_private |= OPpREVERSE_INPLACE;
9769
9770 /* excise push->gv->rv2av->null->aassign */
9771 o2 = o->op_next->op_next;
9772 op_null(o2); /* PUSHMARK */
9773 o2 = o2->op_next;
9774 if (o2->op_type == OP_GV) {
9775 op_null(o2); /* GV */
9776 o2 = o2->op_next;
9777 }
9778 op_null(o2); /* RV2AV or PADAV */
9779 o2 = o2->op_next->op_next;
9780 op_null(o2); /* AASSIGN */
9781
9782 o->op_next = o2->op_next;
9783 break;
9784 }
9785
9786 enter = (LISTOP *) o->op_next;
9787 if (!enter)
9788 break;
9789 if (enter->op_type == OP_NULL) {
9790 enter = (LISTOP *) enter->op_next;
9791 if (!enter)
9792 break;
9793 }
9794 /* for $a (...) will have OP_GV then OP_RV2GV here.
9795 for (...) just has an OP_GV. */
9796 if (enter->op_type == OP_GV) {
9797 gvop = (OP *) enter;
9798 enter = (LISTOP *) enter->op_next;
9799 if (!enter)
9800 break;
9801 if (enter->op_type == OP_RV2GV) {
9802 enter = (LISTOP *) enter->op_next;
9803 if (!enter)
9804 break;
9805 }
9806 }
9807
9808 if (enter->op_type != OP_ENTERITER)
9809 break;
9810
9811 iter = enter->op_next;
9812 if (!iter || iter->op_type != OP_ITER)
9813 break;
9814
9815 expushmark = enter->op_first;
9816 if (!expushmark || expushmark->op_type != OP_NULL
9817 || expushmark->op_targ != OP_PUSHMARK)
9818 break;
9819
9820 exlist = (LISTOP *) expushmark->op_sibling;
9821 if (!exlist || exlist->op_type != OP_NULL
9822 || exlist->op_targ != OP_LIST)
9823 break;
9824
9825 if (exlist->op_last != o) {
9826 /* Mmm. Was expecting to point back to this op. */
9827 break;
9828 }
9829 theirmark = exlist->op_first;
9830 if (!theirmark || theirmark->op_type != OP_PUSHMARK)
9831 break;
9832
9833 if (theirmark->op_sibling != o) {
9834 /* There's something between the mark and the reverse, eg
9835 for (1, reverse (...))
9836 so no go. */
9837 break;
9838 }
9839
9840 ourmark = ((LISTOP *)o)->op_first;
9841 if (!ourmark || ourmark->op_type != OP_PUSHMARK)
9842 break;
9843
9844 ourlast = ((LISTOP *)o)->op_last;
9845 if (!ourlast || ourlast->op_next != o)
9846 break;
9847
9848 rv2av = ourmark->op_sibling;
9849 if (rv2av && rv2av->op_type == OP_RV2AV && rv2av->op_sibling == 0
9850 && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)
9851 && enter->op_flags == (OPf_WANT_LIST | OPf_KIDS)) {
9852 /* We're just reversing a single array. */
9853 rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF;
9854 enter->op_flags |= OPf_STACKED;
9855 }
9856
9857 /* We don't have control over who points to theirmark, so sacrifice
9858 ours. */
9859 theirmark->op_next = ourmark->op_next;
9860 theirmark->op_flags = ourmark->op_flags;
9861 ourlast->op_next = gvop ? gvop : (OP *) enter;
9862 op_null(ourmark);
9863 op_null(o);
9864 enter->op_private |= OPpITER_REVERSED;
9865 iter->op_private |= OPpITER_REVERSED;
9866
9867 break;
9868 }
9869
9870 case OP_SASSIGN: {
9871 OP *rv2gv;
9872 UNOP *refgen, *rv2cv;
9873 LISTOP *exlist;
9874
9875 if ((o->op_flags & OPf_WANT) != OPf_WANT_VOID)
9876 break;
9877
9878 if ((o->op_private & ~OPpASSIGN_BACKWARDS) != 2)
9879 break;
9880
9881 rv2gv = ((BINOP *)o)->op_last;
9882 if (!rv2gv || rv2gv->op_type != OP_RV2GV)
9883 break;
9884
9885 refgen = (UNOP *)((BINOP *)o)->op_first;
9886
9887 if (!refgen || refgen->op_type != OP_REFGEN)
9888 break;
9889
9890 exlist = (LISTOP *)refgen->op_first;
9891 if (!exlist || exlist->op_type != OP_NULL
9892 || exlist->op_targ != OP_LIST)
9893 break;
9894
9895 if (exlist->op_first->op_type != OP_PUSHMARK)
9896 break;
9897
9898 rv2cv = (UNOP*)exlist->op_last;
9899
9900 if (rv2cv->op_type != OP_RV2CV)
9901 break;
9902
9903 assert ((rv2gv->op_private & OPpDONT_INIT_GV) == 0);
9904 assert ((o->op_private & OPpASSIGN_CV_TO_GV) == 0);
9905 assert ((rv2cv->op_private & OPpMAY_RETURN_CONSTANT) == 0);
9906
9907 o->op_private |= OPpASSIGN_CV_TO_GV;
9908 rv2gv->op_private |= OPpDONT_INIT_GV;
9909 rv2cv->op_private |= OPpMAY_RETURN_CONSTANT;
9910
9911 break;
9912 }
9913
9914
9915 case OP_QR:
9916 case OP_MATCH:
9917 if (!(cPMOP->op_pmflags & PMf_ONCE)) {
9918 assert (!cPMOP->op_pmstashstartu.op_pmreplstart);
9919 }
9920 break;
9921 }
9922 oldop = o;
9923 }
9924 LEAVE;
9925}
9926
9927void
9928Perl_peep(pTHX_ register OP *o)
9929{
9930 CALL_RPEEP(o);
9931}
9932
9933const char*
9934Perl_custom_op_name(pTHX_ const OP* o)
9935{
9936 dVAR;
9937 const IV index = PTR2IV(o->op_ppaddr);
9938 SV* keysv;
9939 HE* he;
9940
9941 PERL_ARGS_ASSERT_CUSTOM_OP_NAME;
9942
9943 if (!PL_custom_op_names) /* This probably shouldn't happen */
9944 return (char *)PL_op_name[OP_CUSTOM];
9945
9946 keysv = sv_2mortal(newSViv(index));
9947
9948 he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0);
9949 if (!he)
9950 return (char *)PL_op_name[OP_CUSTOM]; /* Don't know who you are */
9951
9952 return SvPV_nolen(HeVAL(he));
9953}
9954
9955const char*
9956Perl_custom_op_desc(pTHX_ const OP* o)
9957{
9958 dVAR;
9959 const IV index = PTR2IV(o->op_ppaddr);
9960 SV* keysv;
9961 HE* he;
9962
9963 PERL_ARGS_ASSERT_CUSTOM_OP_DESC;
9964
9965 if (!PL_custom_op_descs)
9966 return (char *)PL_op_desc[OP_CUSTOM];
9967
9968 keysv = sv_2mortal(newSViv(index));
9969
9970 he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0);
9971 if (!he)
9972 return (char *)PL_op_desc[OP_CUSTOM];
9973
9974 return SvPV_nolen(HeVAL(he));
9975}
9976
9977#include "XSUB.h"
9978
9979/* Efficient sub that returns a constant scalar value. */
9980static void
9981const_sv_xsub(pTHX_ CV* cv)
9982{
9983 dVAR;
9984 dXSARGS;
9985 SV *const sv = MUTABLE_SV(XSANY.any_ptr);
9986 if (items != 0) {
9987 NOOP;
9988#if 0
9989 /* diag_listed_as: SKIPME */
9990 Perl_croak(aTHX_ "usage: %s::%s()",
9991 HvNAME_get(GvSTASH(CvGV(cv))), GvNAME(CvGV(cv)));
9992#endif
9993 }
9994 if (!sv) {
9995 XSRETURN(0);
9996 }
9997 EXTEND(sp, 1);
9998 ST(0) = sv;
9999 XSRETURN(1);
10000}
10001
10002/*
10003 * Local variables:
10004 * c-indentation-style: bsd
10005 * c-basic-offset: 4
10006 * indent-tabs-mode: t
10007 * End:
10008 *
10009 * ex: set ts=8 sts=4 sw=4 noet:
10010 */