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