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