This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
pad.c: flags checking for the UTF8 flag when necessary
[perl5.git] / op.c
CommitLineData
4b88f280 1#line 2 "op.c"
a0d0e21e 2/* op.c
79072805 3 *
1129b882
NC
4 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
5 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
79072805
LW
6 *
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
9 *
a0d0e21e
LW
10 */
11
12/*
4ac71550
TC
13 * 'You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
14 * our Mr. Bilbo's first cousin on the mother's side (her mother being the
15 * youngest of the Old Took's daughters); and Mr. Drogo was his second
16 * cousin. So Mr. Frodo is his first *and* second cousin, once removed
17 * either way, as the saying is, if you follow me.' --the Gaffer
18 *
19 * [p.23 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
79072805
LW
20 */
21
166f8a29
DM
22/* This file contains the functions that create, manipulate and optimize
23 * the OP structures that hold a compiled perl program.
24 *
25 * A Perl program is compiled into a tree of OPs. Each op contains
26 * structural pointers (eg to its siblings and the next op in the
27 * execution sequence), a pointer to the function that would execute the
28 * op, plus any data specific to that op. For example, an OP_CONST op
29 * points to the pp_const() function and to an SV containing the constant
30 * value. When pp_const() is executed, its job is to push that SV onto the
31 * stack.
32 *
33 * OPs are mainly created by the newFOO() functions, which are mainly
34 * called from the parser (in perly.y) as the code is parsed. For example
35 * the Perl code $a + $b * $c would cause the equivalent of the following
36 * to be called (oversimplifying a bit):
37 *
38 * newBINOP(OP_ADD, flags,
39 * newSVREF($a),
40 * newBINOP(OP_MULTIPLY, flags, newSVREF($b), newSVREF($c))
41 * )
42 *
43 * Note that during the build of miniperl, a temporary copy of this file
44 * is made, called opmini.c.
45 */
ccfc67b7 46
61b743bb
DM
47/*
48Perl's compiler is essentially a 3-pass compiler with interleaved phases:
49
50 A bottom-up pass
51 A top-down pass
52 An execution-order pass
53
54The bottom-up pass is represented by all the "newOP" routines and
55the ck_ routines. The bottom-upness is actually driven by yacc.
56So at the point that a ck_ routine fires, we have no idea what the
57context is, either upward in the syntax tree, or either forward or
58backward in the execution order. (The bottom-up parser builds that
59part of the execution order it knows about, but if you follow the "next"
60links around, you'll find it's actually a closed loop through the
ef9da979 61top level node.)
61b743bb
DM
62
63Whenever the bottom-up parser gets to a node that supplies context to
64its components, it invokes that portion of the top-down pass that applies
65to that part of the subtree (and marks the top node as processed, so
66if a node further up supplies context, it doesn't have to take the
67plunge again). As a particular subcase of this, as the new node is
68built, it takes all the closed execution loops of its subcomponents
69and links them into a new closed loop for the higher level node. But
70it's still not the real execution order.
71
72The actual execution order is not known till we get a grammar reduction
73to a top-level unit like a subroutine or file that will be called by
74"name" rather than via a "next" pointer. At that point, we can call
75into peep() to do that code's portion of the 3rd pass. It has to be
76recursive, but it's recursive on basic blocks, not on tree nodes.
77*/
78
06e0342d 79/* To implement user lexical pragmas, there needs to be a way at run time to
b3ca2e83
NC
80 get the compile time state of %^H for that block. Storing %^H in every
81 block (or even COP) would be very expensive, so a different approach is
82 taken. The (running) state of %^H is serialised into a tree of HE-like
83 structs. Stores into %^H are chained onto the current leaf as a struct
84 refcounted_he * with the key and the value. Deletes from %^H are saved
85 with a value of PL_sv_placeholder. The state of %^H at any point can be
86 turned back into a regular HV by walking back up the tree from that point's
06e0342d 87 leaf, ignoring any key you've already seen (placeholder or not), storing
b3ca2e83
NC
88 the rest into the HV structure, then removing the placeholders. Hence
89 memory is only used to store the %^H deltas from the enclosing COP, rather
90 than the entire %^H on each COP.
91
92 To cause actions on %^H to write out the serialisation records, it has
93 magic type 'H'. This magic (itself) does nothing, but its presence causes
94 the values to gain magic type 'h', which has entries for set and clear.
c28fe1ec 95 C<Perl_magic_sethint> updates C<PL_compiling.cop_hints_hash> with a store
34795b44 96 record, with deletes written by C<Perl_magic_clearhint>. C<SAVEHINTS>
c28fe1ec
NC
97 saves the current C<PL_compiling.cop_hints_hash> on the save stack, so that
98 it will be correctly restored when any inner compiling scope is exited.
b3ca2e83
NC
99*/
100
79072805 101#include "EXTERN.h"
864dbfa3 102#define PERL_IN_OP_C
79072805 103#include "perl.h"
77ca0c92 104#include "keywords.h"
79072805 105
16c91539 106#define CALL_PEEP(o) PL_peepp(aTHX_ o)
1a0a2ba9 107#define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
16c91539 108#define CALL_OPFREEHOOK(o) if (PL_opfreehook) PL_opfreehook(aTHX_ o)
a2efc822 109
238a4c30
NIS
110#if defined(PL_OP_SLAB_ALLOC)
111
f1fac472
NC
112#ifdef PERL_DEBUG_READONLY_OPS
113# define PERL_SLAB_SIZE 4096
114# include <sys/mman.h>
115#endif
116
238a4c30
NIS
117#ifndef PERL_SLAB_SIZE
118#define PERL_SLAB_SIZE 2048
119#endif
120
c7e45529 121void *
e91d68d5 122Perl_Slab_Alloc(pTHX_ size_t sz)
1c846c1f 123{
5186cc12 124 dVAR;
5a8e194f
NIS
125 /*
126 * To make incrementing use count easy PL_OpSlab is an I32 *
127 * To make inserting the link to slab PL_OpPtr is I32 **
128 * So compute size in units of sizeof(I32 *) as that is how Pl_OpPtr increments
129 * Add an overhead for pointer to slab and round up as a number of pointers
130 */
131 sz = (sz + 2*sizeof(I32 *) -1)/sizeof(I32 *);
238a4c30 132 if ((PL_OpSpace -= sz) < 0) {
f1fac472
NC
133#ifdef PERL_DEBUG_READONLY_OPS
134 /* We need to allocate chunk by chunk so that we can control the VM
135 mapping */
5186cc12 136 PL_OpPtr = (I32**) mmap(0, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE,
f1fac472
NC
137 MAP_ANON|MAP_PRIVATE, -1, 0);
138
139 DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
140 (unsigned long) PERL_SLAB_SIZE*sizeof(I32*),
141 PL_OpPtr));
142 if(PL_OpPtr == MAP_FAILED) {
143 perror("mmap failed");
144 abort();
145 }
146#else
277e868c
NC
147
148 PL_OpPtr = (I32 **) PerlMemShared_calloc(PERL_SLAB_SIZE,sizeof(I32*));
f1fac472 149#endif
083fcd59 150 if (!PL_OpPtr) {
238a4c30
NIS
151 return NULL;
152 }
5a8e194f
NIS
153 /* We reserve the 0'th I32 sized chunk as a use count */
154 PL_OpSlab = (I32 *) PL_OpPtr;
155 /* Reduce size by the use count word, and by the size we need.
156 * Latter is to mimic the '-=' in the if() above
157 */
158 PL_OpSpace = PERL_SLAB_SIZE - (sizeof(I32)+sizeof(I32 **)-1)/sizeof(I32 **) - sz;
238a4c30
NIS
159 /* Allocation pointer starts at the top.
160 Theory: because we build leaves before trunk allocating at end
161 means that at run time access is cache friendly upward
162 */
5a8e194f 163 PL_OpPtr += PERL_SLAB_SIZE;
f1fac472
NC
164
165#ifdef PERL_DEBUG_READONLY_OPS
166 /* We remember this slab. */
167 /* This implementation isn't efficient, but it is simple. */
5186cc12 168 PL_slabs = (I32**) realloc(PL_slabs, sizeof(I32**) * (PL_slab_count + 1));
f1fac472
NC
169 PL_slabs[PL_slab_count++] = PL_OpSlab;
170 DEBUG_m(PerlIO_printf(Perl_debug_log, "Allocate %p\n", PL_OpSlab));
171#endif
238a4c30
NIS
172 }
173 assert( PL_OpSpace >= 0 );
174 /* Move the allocation pointer down */
175 PL_OpPtr -= sz;
5a8e194f 176 assert( PL_OpPtr > (I32 **) PL_OpSlab );
238a4c30
NIS
177 *PL_OpPtr = PL_OpSlab; /* Note which slab it belongs to */
178 (*PL_OpSlab)++; /* Increment use count of slab */
5a8e194f 179 assert( PL_OpPtr+sz <= ((I32 **) PL_OpSlab + PERL_SLAB_SIZE) );
238a4c30
NIS
180 assert( *PL_OpSlab > 0 );
181 return (void *)(PL_OpPtr + 1);
182}
183
f1fac472
NC
184#ifdef PERL_DEBUG_READONLY_OPS
185void
186Perl_pending_Slabs_to_ro(pTHX) {
187 /* Turn all the allocated op slabs read only. */
188 U32 count = PL_slab_count;
189 I32 **const slabs = PL_slabs;
190
191 /* Reset the array of pending OP slabs, as we're about to turn this lot
192 read only. Also, do it ahead of the loop in case the warn triggers,
193 and a warn handler has an eval */
194
f1fac472
NC
195 PL_slabs = NULL;
196 PL_slab_count = 0;
197
198 /* Force a new slab for any further allocation. */
199 PL_OpSpace = 0;
200
201 while (count--) {
5892a4d4 202 void *const start = slabs[count];
f1fac472
NC
203 const size_t size = PERL_SLAB_SIZE* sizeof(I32*);
204 if(mprotect(start, size, PROT_READ)) {
205 Perl_warn(aTHX_ "mprotect for %p %lu failed with %d",
206 start, (unsigned long) size, errno);
207 }
208 }
5892a4d4
NC
209
210 free(slabs);
f1fac472
NC
211}
212
213STATIC void
214S_Slab_to_rw(pTHX_ void *op)
215{
216 I32 * const * const ptr = (I32 **) op;
217 I32 * const slab = ptr[-1];
7918f24d
NC
218
219 PERL_ARGS_ASSERT_SLAB_TO_RW;
220
f1fac472
NC
221 assert( ptr-1 > (I32 **) slab );
222 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
223 assert( *slab > 0 );
224 if(mprotect(slab, PERL_SLAB_SIZE*sizeof(I32*), PROT_READ|PROT_WRITE)) {
225 Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d",
226 slab, (unsigned long) PERL_SLAB_SIZE*sizeof(I32*), errno);
227 }
228}
fc97af9c
NC
229
230OP *
231Perl_op_refcnt_inc(pTHX_ OP *o)
232{
233 if(o) {
234 Slab_to_rw(o);
235 ++o->op_targ;
236 }
237 return o;
238
239}
240
241PADOFFSET
242Perl_op_refcnt_dec(pTHX_ OP *o)
243{
7918f24d 244 PERL_ARGS_ASSERT_OP_REFCNT_DEC;
fc97af9c
NC
245 Slab_to_rw(o);
246 return --o->op_targ;
247}
f1fac472
NC
248#else
249# define Slab_to_rw(op)
250#endif
251
c7e45529
AE
252void
253Perl_Slab_Free(pTHX_ void *op)
238a4c30 254{
551405c4 255 I32 * const * const ptr = (I32 **) op;
aec46f14 256 I32 * const slab = ptr[-1];
7918f24d 257 PERL_ARGS_ASSERT_SLAB_FREE;
5a8e194f
NIS
258 assert( ptr-1 > (I32 **) slab );
259 assert( ptr < ( (I32 **) slab + PERL_SLAB_SIZE) );
238a4c30 260 assert( *slab > 0 );
f1fac472 261 Slab_to_rw(op);
238a4c30 262 if (--(*slab) == 0) {
7e4e8c89
NC
263# ifdef NETWARE
264# define PerlMemShared PerlMem
265# endif
083fcd59 266
f1fac472 267#ifdef PERL_DEBUG_READONLY_OPS
782a40f1 268 U32 count = PL_slab_count;
f1fac472 269 /* Need to remove this slab from our list of slabs */
782a40f1 270 if (count) {
f1fac472
NC
271 while (count--) {
272 if (PL_slabs[count] == slab) {
5186cc12 273 dVAR;
f1fac472
NC
274 /* Found it. Move the entry at the end to overwrite it. */
275 DEBUG_m(PerlIO_printf(Perl_debug_log,
276 "Deallocate %p by moving %p from %lu to %lu\n",
277 PL_OpSlab,
278 PL_slabs[PL_slab_count - 1],
279 PL_slab_count, count));
280 PL_slabs[count] = PL_slabs[--PL_slab_count];
281 /* Could realloc smaller at this point, but probably not
282 worth it. */
fc97af9c
NC
283 if(munmap(slab, PERL_SLAB_SIZE*sizeof(I32*))) {
284 perror("munmap failed");
285 abort();
286 }
287 break;
f1fac472 288 }
f1fac472
NC
289 }
290 }
291#else
083fcd59 292 PerlMemShared_free(slab);
f1fac472 293#endif
238a4c30
NIS
294 if (slab == PL_OpSlab) {
295 PL_OpSpace = 0;
296 }
297 }
b7dc083c 298}
b7dc083c 299#endif
e50aee73 300/*
ce6f1cbc 301 * In the following definition, the ", (OP*)0" is just to make the compiler
a5f75d66 302 * think the expression is of the right type: croak actually does a Siglongjmp.
e50aee73 303 */
11343788 304#define CHECKOP(type,o) \
ce6f1cbc 305 ((PL_op_mask && PL_op_mask[type]) \
5dc0d613 306 ? ( op_free((OP*)o), \
cb77fdf0 307 Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \
ce6f1cbc 308 (OP*)0 ) \
16c91539 309 : PL_check[type](aTHX_ (OP*)o))
e50aee73 310
e6438c1a 311#define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
c53d7c7d 312
cba5a3b0
DG
313#define CHANGE_TYPE(o,type) \
314 STMT_START { \
315 o->op_type = (OPCODE)type; \
316 o->op_ppaddr = PL_ppaddr[type]; \
317 } STMT_END
318
8b6b16e7 319STATIC const char*
cea2e8a9 320S_gv_ename(pTHX_ GV *gv)
4633a7c4 321{
46c461b5 322 SV* const tmpsv = sv_newmortal();
7918f24d
NC
323
324 PERL_ARGS_ASSERT_GV_ENAME;
325
bd61b366 326 gv_efullname3(tmpsv, gv, NULL);
8b6b16e7 327 return SvPV_nolen_const(tmpsv);
4633a7c4
LW
328}
329
76e3520e 330STATIC OP *
cea2e8a9 331S_no_fh_allowed(pTHX_ OP *o)
79072805 332{
7918f24d
NC
333 PERL_ARGS_ASSERT_NO_FH_ALLOWED;
334
cea2e8a9 335 yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
53e06cf0 336 OP_DESC(o)));
11343788 337 return o;
79072805
LW
338}
339
76e3520e 340STATIC OP *
bfed75c6 341S_too_few_arguments(pTHX_ OP *o, const char *name)
79072805 342{
7918f24d
NC
343 PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS;
344
cea2e8a9 345 yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
11343788 346 return o;
79072805
LW
347}
348
76e3520e 349STATIC OP *
bfed75c6 350S_too_many_arguments(pTHX_ OP *o, const char *name)
79072805 351{
7918f24d
NC
352 PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS;
353
cea2e8a9 354 yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
11343788 355 return o;
79072805
LW
356}
357
76e3520e 358STATIC void
6867be6d 359S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid)
8990e307 360{
7918f24d
NC
361 PERL_ARGS_ASSERT_BAD_TYPE;
362
cea2e8a9 363 yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
53e06cf0 364 (int)n, name, t, OP_DESC(kid)));
8990e307
LW
365}
366
7a52d87a 367STATIC void
6867be6d 368S_no_bareword_allowed(pTHX_ const OP *o)
7a52d87a 369{
7918f24d
NC
370 PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED;
371
eb8433b7
NC
372 if (PL_madskills)
373 return; /* various ok barewords are hidden in extra OP_NULL */
5a844595 374 qerror(Perl_mess(aTHX_
35c1215d 375 "Bareword \"%"SVf"\" not allowed while \"strict subs\" in use",
be2597df 376 SVfARG(cSVOPo_sv)));
7a52d87a
GS
377}
378
79072805
LW
379/* "register" allocation */
380
381PADOFFSET
d6447115 382Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
93a17b20 383{
97aff369 384 dVAR;
a0d0e21e 385 PADOFFSET off;
12bd6ede 386 const bool is_our = (PL_parser->in_my == KEY_our);
a0d0e21e 387
7918f24d
NC
388 PERL_ARGS_ASSERT_ALLOCMY;
389
d6447115
NC
390 if (flags)
391 Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf,
392 (UV)flags);
393
394 /* Until we're using the length for real, cross check that we're being
395 told the truth. */
396 assert(strlen(name) == len);
397
59f00321 398 /* complain about "my $<special_var>" etc etc */
d6447115 399 if (len &&
3edf23ff 400 !(is_our ||
155aba94 401 isALPHA(name[1]) ||
39e02b42 402 (USE_UTF8_IN_NAMES && UTF8_IS_START(name[1])) ||
d6447115 403 (name[1] == '_' && (*name == '$' || len > 2))))
834a4ddd 404 {
6b58708b 405 /* name[2] is true if strlen(name) > 2 */
c4d0567e 406 if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
d6447115
NC
407 yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
408 name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
aab6a793 409 PL_parser->in_my == KEY_state ? "state" : "my"));
d1544d85 410 } else {
d6447115 411 yyerror(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
aab6a793 412 PL_parser->in_my == KEY_state ? "state" : "my"));
46fc3d4c 413 }
a0d0e21e 414 }
748a9306 415
dd2155a4 416 /* allocate a spare slot and store the name in that slot */
93a17b20 417
cc76b5cc 418 off = pad_add_name_pvn(name, len,
59cfed7d
NC
419 is_our ? padadd_OUR :
420 PL_parser->in_my == KEY_state ? padadd_STATE : 0,
12bd6ede 421 PL_parser->in_my_stash,
3edf23ff 422 (is_our
133706a6
RGS
423 /* $_ is always in main::, even with our */
424 ? (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash)
5c284bb0 425 : NULL
cca43f78 426 )
dd2155a4 427 );
a74073ad
DM
428 /* anon sub prototypes contains state vars should always be cloned,
429 * otherwise the state var would be shared between anon subs */
430
431 if (PL_parser->in_my == KEY_state && CvANON(PL_compcv))
432 CvCLONE_on(PL_compcv);
433
dd2155a4 434 return off;
79072805
LW
435}
436
d2c837a0
DM
437/* free the body of an op without examining its contents.
438 * Always use this rather than FreeOp directly */
439
4136a0f7 440static void
d2c837a0
DM
441S_op_destroy(pTHX_ OP *o)
442{
443 if (o->op_latefree) {
444 o->op_latefreed = 1;
445 return;
446 }
447 FreeOp(o);
448}
449
c4bd3ae5
NC
450#ifdef USE_ITHREADS
451# define forget_pmop(a,b) S_forget_pmop(aTHX_ a,b)
452#else
453# define forget_pmop(a,b) S_forget_pmop(aTHX_ a)
454#endif
d2c837a0 455
79072805
LW
456/* Destructor */
457
458void
864dbfa3 459Perl_op_free(pTHX_ OP *o)
79072805 460{
27da23d5 461 dVAR;
acb36ea4 462 OPCODE type;
79072805 463
85594c31 464 if (!o)
79072805 465 return;
670f3923
DM
466 if (o->op_latefreed) {
467 if (o->op_latefree)
468 return;
469 goto do_free;
470 }
79072805 471
67566ccd 472 type = o->op_type;
7934575e 473 if (o->op_private & OPpREFCOUNTED) {
67566ccd 474 switch (type) {
7934575e
GS
475 case OP_LEAVESUB:
476 case OP_LEAVESUBLV:
477 case OP_LEAVEEVAL:
478 case OP_LEAVE:
479 case OP_SCOPE:
480 case OP_LEAVEWRITE:
67566ccd
AL
481 {
482 PADOFFSET refcnt;
7934575e 483 OP_REFCNT_LOCK;
4026c95a 484 refcnt = OpREFCNT_dec(o);
7934575e 485 OP_REFCNT_UNLOCK;
bfd0ff22
NC
486 if (refcnt) {
487 /* Need to find and remove any pattern match ops from the list
488 we maintain for reset(). */
489 find_and_forget_pmops(o);
4026c95a 490 return;
67566ccd 491 }
bfd0ff22 492 }
7934575e
GS
493 break;
494 default:
495 break;
496 }
497 }
498
f37b8c3f
VP
499 /* Call the op_free hook if it has been set. Do it now so that it's called
500 * at the right time for refcounted ops, but still before all of the kids
501 * are freed. */
502 CALL_OPFREEHOOK(o);
503
11343788 504 if (o->op_flags & OPf_KIDS) {
6867be6d 505 register OP *kid, *nextkid;
11343788 506 for (kid = cUNOPo->op_first; kid; kid = nextkid) {
85e6fe83 507 nextkid = kid->op_sibling; /* Get before next freeing kid */
79072805 508 op_free(kid);
85e6fe83 509 }
79072805 510 }
acb36ea4 511
fc97af9c
NC
512#ifdef PERL_DEBUG_READONLY_OPS
513 Slab_to_rw(o);
514#endif
515
acb36ea4
GS
516 /* COP* is not cleared by op_clear() so that we may track line
517 * numbers etc even after null() */
cc93af5f
RGS
518 if (type == OP_NEXTSTATE || type == OP_DBSTATE
519 || (type == OP_NULL /* the COP might have been null'ed */
520 && ((OPCODE)o->op_targ == OP_NEXTSTATE
521 || (OPCODE)o->op_targ == OP_DBSTATE))) {
acb36ea4 522 cop_free((COP*)o);
3235b7a3 523 }
acb36ea4 524
c53f1caa
RU
525 if (type == OP_NULL)
526 type = (OPCODE)o->op_targ;
527
acb36ea4 528 op_clear(o);
670f3923
DM
529 if (o->op_latefree) {
530 o->op_latefreed = 1;
531 return;
532 }
533 do_free:
238a4c30 534 FreeOp(o);
4d494880
DM
535#ifdef DEBUG_LEAKING_SCALARS
536 if (PL_op == o)
5f66b61c 537 PL_op = NULL;
4d494880 538#endif
acb36ea4 539}
79072805 540
93c66552
DM
541void
542Perl_op_clear(pTHX_ OP *o)
acb36ea4 543{
13137afc 544
27da23d5 545 dVAR;
7918f24d
NC
546
547 PERL_ARGS_ASSERT_OP_CLEAR;
548
eb8433b7 549#ifdef PERL_MAD
df31c78c
NC
550 mad_free(o->op_madprop);
551 o->op_madprop = 0;
eb8433b7
NC
552#endif
553
554 retry:
11343788 555 switch (o->op_type) {
acb36ea4 556 case OP_NULL: /* Was holding old type, if any. */
eb8433b7 557 if (PL_madskills && o->op_targ != OP_NULL) {
61a59f30 558 o->op_type = (Optype)o->op_targ;
eb8433b7
NC
559 o->op_targ = 0;
560 goto retry;
561 }
4d193d44 562 case OP_ENTERTRY:
acb36ea4 563 case OP_ENTEREVAL: /* Was holding hints. */
acb36ea4 564 o->op_targ = 0;
a0d0e21e 565 break;
a6006777 566 default:
ac4c12e7 567 if (!(o->op_flags & OPf_REF)
ef69c8fc 568 || (PL_check[o->op_type] != Perl_ck_ftst))
a6006777 569 break;
570 /* FALL THROUGH */
463ee0b2 571 case OP_GVSV:
79072805 572 case OP_GV:
a6006777 573 case OP_AELEMFAST:
93bad3fd 574 {
f7461760
Z
575 GV *gv = (o->op_type == OP_GV || o->op_type == OP_GVSV)
576#ifdef USE_ITHREADS
577 && PL_curpad
578#endif
579 ? cGVOPo_gv : NULL;
b327b36f
NC
580 /* It's possible during global destruction that the GV is freed
581 before the optree. Whilst the SvREFCNT_inc is happy to bump from
582 0 to 1 on a freed SV, the corresponding SvREFCNT_dec from 1 to 0
583 will trigger an assertion failure, because the entry to sv_clear
584 checks that the scalar is not already freed. A check of for
585 !SvIS_FREED(gv) turns out to be invalid, because during global
586 destruction the reference count can be forced down to zero
587 (with SVf_BREAK set). In which case raising to 1 and then
588 dropping to 0 triggers cleanup before it should happen. I
589 *think* that this might actually be a general, systematic,
590 weakness of the whole idea of SVf_BREAK, in that code *is*
591 allowed to raise and lower references during global destruction,
592 so any *valid* code that happens to do this during global
593 destruction might well trigger premature cleanup. */
594 bool still_valid = gv && SvREFCNT(gv);
595
596 if (still_valid)
597 SvREFCNT_inc_simple_void(gv);
350de78d 598#ifdef USE_ITHREADS
6a077020
DM
599 if (cPADOPo->op_padix > 0) {
600 /* No GvIN_PAD_off(cGVOPo_gv) here, because other references
601 * may still exist on the pad */
602 pad_swipe(cPADOPo->op_padix, TRUE);
603 cPADOPo->op_padix = 0;
604 }
350de78d 605#else
6a077020 606 SvREFCNT_dec(cSVOPo->op_sv);
a0714e2c 607 cSVOPo->op_sv = NULL;
350de78d 608#endif
b327b36f 609 if (still_valid) {
f7461760
Z
610 int try_downgrade = SvREFCNT(gv) == 2;
611 SvREFCNT_dec(gv);
612 if (try_downgrade)
613 gv_try_downgrade(gv);
614 }
6a077020 615 }
79072805 616 break;
a1ae71d2 617 case OP_METHOD_NAMED:
79072805 618 case OP_CONST:
996c9baa 619 case OP_HINTSEVAL:
11343788 620 SvREFCNT_dec(cSVOPo->op_sv);
a0714e2c 621 cSVOPo->op_sv = NULL;
3b1c21fa
AB
622#ifdef USE_ITHREADS
623 /** Bug #15654
624 Even if op_clear does a pad_free for the target of the op,
6a077020 625 pad_free doesn't actually remove the sv that exists in the pad;
3b1c21fa
AB
626 instead it lives on. This results in that it could be reused as
627 a target later on when the pad was reallocated.
628 **/
629 if(o->op_targ) {
630 pad_swipe(o->op_targ,1);
631 o->op_targ = 0;
632 }
633#endif
79072805 634 break;
748a9306
LW
635 case OP_GOTO:
636 case OP_NEXT:
637 case OP_LAST:
638 case OP_REDO:
11343788 639 if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
748a9306
LW
640 break;
641 /* FALL THROUGH */
a0d0e21e 642 case OP_TRANS:
bb16bae8 643 case OP_TRANSR:
acb36ea4 644 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
043e41b8
DM
645#ifdef USE_ITHREADS
646 if (cPADOPo->op_padix > 0) {
647 pad_swipe(cPADOPo->op_padix, TRUE);
648 cPADOPo->op_padix = 0;
649 }
650#else
a0ed51b3 651 SvREFCNT_dec(cSVOPo->op_sv);
a0714e2c 652 cSVOPo->op_sv = NULL;
043e41b8 653#endif
acb36ea4
GS
654 }
655 else {
ea71c68d 656 PerlMemShared_free(cPVOPo->op_pv);
bd61b366 657 cPVOPo->op_pv = NULL;
acb36ea4 658 }
a0d0e21e
LW
659 break;
660 case OP_SUBST:
20e98b0f 661 op_free(cPMOPo->op_pmreplrootu.op_pmreplroot);
971a9dd3 662 goto clear_pmop;
748a9306 663 case OP_PUSHRE:
971a9dd3 664#ifdef USE_ITHREADS
20e98b0f 665 if (cPMOPo->op_pmreplrootu.op_pmtargetoff) {
dd2155a4
DM
666 /* No GvIN_PAD_off here, because other references may still
667 * exist on the pad */
20e98b0f 668 pad_swipe(cPMOPo->op_pmreplrootu.op_pmtargetoff, TRUE);
971a9dd3
GS
669 }
670#else
ad64d0ec 671 SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv));
971a9dd3
GS
672#endif
673 /* FALL THROUGH */
a0d0e21e 674 case OP_MATCH:
8782bef2 675 case OP_QR:
971a9dd3 676clear_pmop:
c2b1997a 677 forget_pmop(cPMOPo, 1);
20e98b0f 678 cPMOPo->op_pmreplrootu.op_pmreplroot = NULL;
9cddf794
NC
679 /* we use the same protection as the "SAFE" version of the PM_ macros
680 * here since sv_clean_all might release some PMOPs
5f8cb046
DM
681 * after PL_regex_padav has been cleared
682 * and the clearing of PL_regex_padav needs to
683 * happen before sv_clean_all
684 */
13137afc
AB
685#ifdef USE_ITHREADS
686 if(PL_regex_pad) { /* We could be in destruction */
402d2eb1 687 const IV offset = (cPMOPo)->op_pmoffset;
9cddf794 688 ReREFCNT_dec(PM_GETRE(cPMOPo));
402d2eb1
NC
689 PL_regex_pad[offset] = &PL_sv_undef;
690 sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset,
691 sizeof(offset));
13137afc 692 }
9cddf794
NC
693#else
694 ReREFCNT_dec(PM_GETRE(cPMOPo));
695 PM_SETRE(cPMOPo, NULL);
1eb1540c 696#endif
13137afc 697
a0d0e21e 698 break;
79072805
LW
699 }
700
743e66e6 701 if (o->op_targ > 0) {
11343788 702 pad_free(o->op_targ);
743e66e6
GS
703 o->op_targ = 0;
704 }
79072805
LW
705}
706
76e3520e 707STATIC void
3eb57f73
HS
708S_cop_free(pTHX_ COP* cop)
709{
7918f24d
NC
710 PERL_ARGS_ASSERT_COP_FREE;
711
05ec9bb3
NIS
712 CopFILE_free(cop);
713 CopSTASH_free(cop);
0453d815 714 if (! specialWARN(cop->cop_warnings))
72dc9ed5 715 PerlMemShared_free(cop->cop_warnings);
20439bc7 716 cophh_free(CopHINTHASH_get(cop));
3eb57f73
HS
717}
718
c2b1997a 719STATIC void
c4bd3ae5
NC
720S_forget_pmop(pTHX_ PMOP *const o
721#ifdef USE_ITHREADS
722 , U32 flags
723#endif
724 )
c2b1997a
NC
725{
726 HV * const pmstash = PmopSTASH(o);
7918f24d
NC
727
728 PERL_ARGS_ASSERT_FORGET_PMOP;
729
c2b1997a 730 if (pmstash && !SvIS_FREED(pmstash)) {
ad64d0ec 731 MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab);
c2b1997a
NC
732 if (mg) {
733 PMOP **const array = (PMOP**) mg->mg_ptr;
734 U32 count = mg->mg_len / sizeof(PMOP**);
735 U32 i = count;
736
737 while (i--) {
738 if (array[i] == o) {
739 /* Found it. Move the entry at the end to overwrite it. */
740 array[i] = array[--count];
741 mg->mg_len = count * sizeof(PMOP**);
742 /* Could realloc smaller at this point always, but probably
743 not worth it. Probably worth free()ing if we're the
744 last. */
745 if(!count) {
746 Safefree(mg->mg_ptr);
747 mg->mg_ptr = NULL;
748 }
749 break;
750 }
751 }
752 }
753 }
1cdf7faf
NC
754 if (PL_curpm == o)
755 PL_curpm = NULL;
c4bd3ae5 756#ifdef USE_ITHREADS
c2b1997a
NC
757 if (flags)
758 PmopSTASH_free(o);
c4bd3ae5 759#endif
c2b1997a
NC
760}
761
bfd0ff22
NC
762STATIC void
763S_find_and_forget_pmops(pTHX_ OP *o)
764{
7918f24d
NC
765 PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
766
bfd0ff22
NC
767 if (o->op_flags & OPf_KIDS) {
768 OP *kid = cUNOPo->op_first;
769 while (kid) {
770 switch (kid->op_type) {
771 case OP_SUBST:
772 case OP_PUSHRE:
773 case OP_MATCH:
774 case OP_QR:
775 forget_pmop((PMOP*)kid, 0);
776 }
777 find_and_forget_pmops(kid);
778 kid = kid->op_sibling;
779 }
780 }
781}
782
93c66552
DM
783void
784Perl_op_null(pTHX_ OP *o)
8990e307 785{
27da23d5 786 dVAR;
7918f24d
NC
787
788 PERL_ARGS_ASSERT_OP_NULL;
789
acb36ea4
GS
790 if (o->op_type == OP_NULL)
791 return;
eb8433b7
NC
792 if (!PL_madskills)
793 op_clear(o);
11343788
MB
794 o->op_targ = o->op_type;
795 o->op_type = OP_NULL;
22c35a8c 796 o->op_ppaddr = PL_ppaddr[OP_NULL];
8990e307
LW
797}
798
4026c95a
SH
799void
800Perl_op_refcnt_lock(pTHX)
801{
27da23d5 802 dVAR;
96a5add6 803 PERL_UNUSED_CONTEXT;
4026c95a
SH
804 OP_REFCNT_LOCK;
805}
806
807void
808Perl_op_refcnt_unlock(pTHX)
809{
27da23d5 810 dVAR;
96a5add6 811 PERL_UNUSED_CONTEXT;
4026c95a
SH
812 OP_REFCNT_UNLOCK;
813}
814
79072805
LW
815/* Contextualizers */
816
d9088386
Z
817/*
818=for apidoc Am|OP *|op_contextualize|OP *o|I32 context
819
820Applies a syntactic context to an op tree representing an expression.
821I<o> is the op tree, and I<context> must be C<G_SCALAR>, C<G_ARRAY>,
822or C<G_VOID> to specify the context to apply. The modified op tree
823is returned.
824
825=cut
826*/
827
828OP *
829Perl_op_contextualize(pTHX_ OP *o, I32 context)
830{
831 PERL_ARGS_ASSERT_OP_CONTEXTUALIZE;
832 switch (context) {
833 case G_SCALAR: return scalar(o);
834 case G_ARRAY: return list(o);
835 case G_VOID: return scalarvoid(o);
836 default:
837 Perl_croak(aTHX_ "panic: op_contextualize bad context");
838 return o;
839 }
840}
841
5983a79d
BM
842/*
843=head1 Optree Manipulation Functions
79072805 844
5983a79d
BM
845=for apidoc Am|OP*|op_linklist|OP *o
846This function is the implementation of the L</LINKLIST> macro. It should
847not be called directly.
848
849=cut
850*/
851
852OP *
853Perl_op_linklist(pTHX_ OP *o)
79072805 854{
3edf23ff 855 OP *first;
79072805 856
5983a79d 857 PERL_ARGS_ASSERT_OP_LINKLIST;
7918f24d 858
11343788
MB
859 if (o->op_next)
860 return o->op_next;
79072805
LW
861
862 /* establish postfix order */
3edf23ff
AL
863 first = cUNOPo->op_first;
864 if (first) {
6867be6d 865 register OP *kid;
3edf23ff
AL
866 o->op_next = LINKLIST(first);
867 kid = first;
868 for (;;) {
869 if (kid->op_sibling) {
79072805 870 kid->op_next = LINKLIST(kid->op_sibling);
3edf23ff
AL
871 kid = kid->op_sibling;
872 } else {
11343788 873 kid->op_next = o;
3edf23ff
AL
874 break;
875 }
79072805
LW
876 }
877 }
878 else
11343788 879 o->op_next = o;
79072805 880
11343788 881 return o->op_next;
79072805
LW
882}
883
1f676739 884static OP *
2dd5337b 885S_scalarkids(pTHX_ OP *o)
79072805 886{
11343788 887 if (o && o->op_flags & OPf_KIDS) {
bfed75c6 888 OP *kid;
11343788 889 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
79072805
LW
890 scalar(kid);
891 }
11343788 892 return o;
79072805
LW
893}
894
76e3520e 895STATIC OP *
cea2e8a9 896S_scalarboolean(pTHX_ OP *o)
8990e307 897{
97aff369 898 dVAR;
7918f24d
NC
899
900 PERL_ARGS_ASSERT_SCALARBOOLEAN;
901
6b7c6d95
FC
902 if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST
903 && !(cBINOPo->op_first->op_flags & OPf_SPECIAL)) {
d008e5eb 904 if (ckWARN(WARN_SYNTAX)) {
6867be6d 905 const line_t oldline = CopLINE(PL_curcop);
a0d0e21e 906
53a7735b
DM
907 if (PL_parser && PL_parser->copline != NOLINE)
908 CopLINE_set(PL_curcop, PL_parser->copline);
9014280d 909 Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be ==");
57843af0 910 CopLINE_set(PL_curcop, oldline);
d008e5eb 911 }
a0d0e21e 912 }
11343788 913 return scalar(o);
8990e307
LW
914}
915
916OP *
864dbfa3 917Perl_scalar(pTHX_ OP *o)
79072805 918{
27da23d5 919 dVAR;
79072805
LW
920 OP *kid;
921
a0d0e21e 922 /* assumes no premature commitment */
13765c85
DM
923 if (!o || (PL_parser && PL_parser->error_count)
924 || (o->op_flags & OPf_WANT)
5dc0d613 925 || o->op_type == OP_RETURN)
7e363e51 926 {
11343788 927 return o;
7e363e51 928 }
79072805 929
5dc0d613 930 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
79072805 931
11343788 932 switch (o->op_type) {
79072805 933 case OP_REPEAT:
11343788 934 scalar(cBINOPo->op_first);
8990e307 935 break;
79072805
LW
936 case OP_OR:
937 case OP_AND:
938 case OP_COND_EXPR:
11343788 939 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
8990e307 940 scalar(kid);
79072805 941 break;
a0d0e21e 942 /* FALL THROUGH */
a6d8037e 943 case OP_SPLIT:
79072805 944 case OP_MATCH:
8782bef2 945 case OP_QR:
79072805
LW
946 case OP_SUBST:
947 case OP_NULL:
8990e307 948 default:
11343788
MB
949 if (o->op_flags & OPf_KIDS) {
950 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
8990e307
LW
951 scalar(kid);
952 }
79072805
LW
953 break;
954 case OP_LEAVE:
955 case OP_LEAVETRY:
5dc0d613 956 kid = cLISTOPo->op_first;
54310121 957 scalar(kid);
25b991bf
VP
958 kid = kid->op_sibling;
959 do_kids:
960 while (kid) {
961 OP *sib = kid->op_sibling;
c08f093b
VP
962 if (sib && kid->op_type != OP_LEAVEWHEN)
963 scalarvoid(kid);
964 else
54310121 965 scalar(kid);
25b991bf 966 kid = sib;
54310121 967 }
11206fdd 968 PL_curcop = &PL_compiling;
54310121 969 break;
748a9306 970 case OP_SCOPE:
79072805 971 case OP_LINESEQ:
8990e307 972 case OP_LIST:
25b991bf
VP
973 kid = cLISTOPo->op_first;
974 goto do_kids;
a801c63c 975 case OP_SORT:
a2a5de95 976 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
553e7bb0 977 break;
79072805 978 }
11343788 979 return o;
79072805
LW
980}
981
982OP *
864dbfa3 983Perl_scalarvoid(pTHX_ OP *o)
79072805 984{
27da23d5 985 dVAR;
79072805 986 OP *kid;
c445ea15 987 const char* useless = NULL;
8990e307 988 SV* sv;
2ebea0a1
GS
989 U8 want;
990
7918f24d
NC
991 PERL_ARGS_ASSERT_SCALARVOID;
992
eb8433b7
NC
993 /* trailing mad null ops don't count as "there" for void processing */
994 if (PL_madskills &&
995 o->op_type != OP_NULL &&
996 o->op_sibling &&
997 o->op_sibling->op_type == OP_NULL)
998 {
999 OP *sib;
1000 for (sib = o->op_sibling;
1001 sib && sib->op_type == OP_NULL;
1002 sib = sib->op_sibling) ;
1003
1004 if (!sib)
1005 return o;
1006 }
1007
acb36ea4 1008 if (o->op_type == OP_NEXTSTATE
acb36ea4
GS
1009 || o->op_type == OP_DBSTATE
1010 || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
acb36ea4 1011 || o->op_targ == OP_DBSTATE)))
2ebea0a1 1012 PL_curcop = (COP*)o; /* for warning below */
79072805 1013
54310121 1014 /* assumes no premature commitment */
2ebea0a1 1015 want = o->op_flags & OPf_WANT;
13765c85
DM
1016 if ((want && want != OPf_WANT_SCALAR)
1017 || (PL_parser && PL_parser->error_count)
25b991bf 1018 || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
7e363e51 1019 {
11343788 1020 return o;
7e363e51 1021 }
79072805 1022
b162f9ea 1023 if ((o->op_private & OPpTARGET_MY)
7e363e51
GS
1024 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1025 {
b162f9ea 1026 return scalar(o); /* As if inside SASSIGN */
7e363e51 1027 }
1c846c1f 1028
5dc0d613 1029 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
79072805 1030
11343788 1031 switch (o->op_type) {
79072805 1032 default:
22c35a8c 1033 if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
8990e307 1034 break;
36477c24 1035 /* FALL THROUGH */
1036 case OP_REPEAT:
11343788 1037 if (o->op_flags & OPf_STACKED)
8990e307 1038 break;
5d82c453
GA
1039 goto func_ops;
1040 case OP_SUBSTR:
1041 if (o->op_private == 4)
1042 break;
8990e307
LW
1043 /* FALL THROUGH */
1044 case OP_GVSV:
1045 case OP_WANTARRAY:
1046 case OP_GV:
74295f0b 1047 case OP_SMARTMATCH:
8990e307
LW
1048 case OP_PADSV:
1049 case OP_PADAV:
1050 case OP_PADHV:
1051 case OP_PADANY:
1052 case OP_AV2ARYLEN:
8990e307 1053 case OP_REF:
a0d0e21e
LW
1054 case OP_REFGEN:
1055 case OP_SREFGEN:
8990e307
LW
1056 case OP_DEFINED:
1057 case OP_HEX:
1058 case OP_OCT:
1059 case OP_LENGTH:
8990e307
LW
1060 case OP_VEC:
1061 case OP_INDEX:
1062 case OP_RINDEX:
1063 case OP_SPRINTF:
1064 case OP_AELEM:
1065 case OP_AELEMFAST:
93bad3fd 1066 case OP_AELEMFAST_LEX:
8990e307 1067 case OP_ASLICE:
8990e307
LW
1068 case OP_HELEM:
1069 case OP_HSLICE:
1070 case OP_UNPACK:
1071 case OP_PACK:
8990e307
LW
1072 case OP_JOIN:
1073 case OP_LSLICE:
1074 case OP_ANONLIST:
1075 case OP_ANONHASH:
1076 case OP_SORT:
1077 case OP_REVERSE:
1078 case OP_RANGE:
1079 case OP_FLIP:
1080 case OP_FLOP:
1081 case OP_CALLER:
1082 case OP_FILENO:
1083 case OP_EOF:
1084 case OP_TELL:
1085 case OP_GETSOCKNAME:
1086 case OP_GETPEERNAME:
1087 case OP_READLINK:
1088 case OP_TELLDIR:
1089 case OP_GETPPID:
1090 case OP_GETPGRP:
1091 case OP_GETPRIORITY:
1092 case OP_TIME:
1093 case OP_TMS:
1094 case OP_LOCALTIME:
1095 case OP_GMTIME:
1096 case OP_GHBYNAME:
1097 case OP_GHBYADDR:
1098 case OP_GHOSTENT:
1099 case OP_GNBYNAME:
1100 case OP_GNBYADDR:
1101 case OP_GNETENT:
1102 case OP_GPBYNAME:
1103 case OP_GPBYNUMBER:
1104 case OP_GPROTOENT:
1105 case OP_GSBYNAME:
1106 case OP_GSBYPORT:
1107 case OP_GSERVENT:
1108 case OP_GPWNAM:
1109 case OP_GPWUID:
1110 case OP_GGRNAM:
1111 case OP_GGRGID:
1112 case OP_GETLOGIN:
78e1b766 1113 case OP_PROTOTYPE:
5d82c453 1114 func_ops:
64aac5a9 1115 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
74295f0b 1116 /* Otherwise it's "Useless use of grep iterator" */
f5df4782 1117 useless = OP_DESC(o);
75068674
RGS
1118 break;
1119
1120 case OP_SPLIT:
1121 kid = cLISTOPo->op_first;
1122 if (kid && kid->op_type == OP_PUSHRE
1123#ifdef USE_ITHREADS
1124 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetoff)
1125#else
1126 && !((PMOP*)kid)->op_pmreplrootu.op_pmtargetgv)
1127#endif
1128 useless = OP_DESC(o);
8990e307
LW
1129 break;
1130
9f82cd5f
YST
1131 case OP_NOT:
1132 kid = cUNOPo->op_first;
1133 if (kid->op_type != OP_MATCH && kid->op_type != OP_SUBST &&
bb16bae8 1134 kid->op_type != OP_TRANS && kid->op_type != OP_TRANSR) {
9f82cd5f
YST
1135 goto func_ops;
1136 }
1137 useless = "negative pattern binding (!~)";
1138 break;
1139
4f4d7508
DC
1140 case OP_SUBST:
1141 if (cPMOPo->op_pmflags & PMf_NONDESTRUCT)
8db9069c 1142 useless = "non-destructive substitution (s///r)";
4f4d7508
DC
1143 break;
1144
bb16bae8
FC
1145 case OP_TRANSR:
1146 useless = "non-destructive transliteration (tr///r)";
1147 break;
1148
8990e307
LW
1149 case OP_RV2GV:
1150 case OP_RV2SV:
1151 case OP_RV2AV:
1152 case OP_RV2HV:
192587c2 1153 if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
11343788 1154 (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
8990e307
LW
1155 useless = "a variable";
1156 break;
79072805
LW
1157
1158 case OP_CONST:
7766f137 1159 sv = cSVOPo_sv;
7a52d87a
GS
1160 if (cSVOPo->op_private & OPpCONST_STRICT)
1161 no_bareword_allowed(o);
1162 else {
d008e5eb 1163 if (ckWARN(WARN_VOID)) {
fa01e093
RGS
1164 if (SvOK(sv)) {
1165 SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
1166 "a constant (%"SVf")", sv));
1167 useless = SvPV_nolen(msv);
1168 }
1169 else
1170 useless = "a constant (undef)";
2e0ae2d3 1171 if (o->op_private & OPpCONST_ARYBASE)
d4c19fe8 1172 useless = NULL;
e7fec78e 1173 /* don't warn on optimised away booleans, eg
b5a930ec 1174 * use constant Foo, 5; Foo || print; */
e7fec78e 1175 if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
d4c19fe8 1176 useless = NULL;
960b4253
MG
1177 /* the constants 0 and 1 are permitted as they are
1178 conventionally used as dummies in constructs like
1179 1 while some_condition_with_side_effects; */
e7fec78e 1180 else if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
d4c19fe8 1181 useless = NULL;
d008e5eb 1182 else if (SvPOK(sv)) {
a52fe3ac
A
1183 /* perl4's way of mixing documentation and code
1184 (before the invention of POD) was based on a
1185 trick to mix nroff and perl code. The trick was
1186 built upon these three nroff macros being used in
1187 void context. The pink camel has the details in
1188 the script wrapman near page 319. */
6136c704
AL
1189 const char * const maybe_macro = SvPVX_const(sv);
1190 if (strnEQ(maybe_macro, "di", 2) ||
1191 strnEQ(maybe_macro, "ds", 2) ||
1192 strnEQ(maybe_macro, "ig", 2))
d4c19fe8 1193 useless = NULL;
d008e5eb 1194 }
8990e307
LW
1195 }
1196 }
93c66552 1197 op_null(o); /* don't execute or even remember it */
79072805
LW
1198 break;
1199
1200 case OP_POSTINC:
11343788 1201 o->op_type = OP_PREINC; /* pre-increment is faster */
22c35a8c 1202 o->op_ppaddr = PL_ppaddr[OP_PREINC];
79072805
LW
1203 break;
1204
1205 case OP_POSTDEC:
11343788 1206 o->op_type = OP_PREDEC; /* pre-decrement is faster */
22c35a8c 1207 o->op_ppaddr = PL_ppaddr[OP_PREDEC];
79072805
LW
1208 break;
1209
679d6c4e
HS
1210 case OP_I_POSTINC:
1211 o->op_type = OP_I_PREINC; /* pre-increment is faster */
1212 o->op_ppaddr = PL_ppaddr[OP_I_PREINC];
1213 break;
1214
1215 case OP_I_POSTDEC:
1216 o->op_type = OP_I_PREDEC; /* pre-decrement is faster */
1217 o->op_ppaddr = PL_ppaddr[OP_I_PREDEC];
1218 break;
1219
79072805
LW
1220 case OP_OR:
1221 case OP_AND:
edbe35ea
VP
1222 kid = cLOGOPo->op_first;
1223 if (kid->op_type == OP_NOT
1224 && (kid->op_flags & OPf_KIDS)
1225 && !PL_madskills) {
1226 if (o->op_type == OP_AND) {
1227 o->op_type = OP_OR;
1228 o->op_ppaddr = PL_ppaddr[OP_OR];
1229 } else {
1230 o->op_type = OP_AND;
1231 o->op_ppaddr = PL_ppaddr[OP_AND];
1232 }
1233 op_null(kid);
1234 }
1235
c963b151 1236 case OP_DOR:
79072805 1237 case OP_COND_EXPR:
0d863452
RH
1238 case OP_ENTERGIVEN:
1239 case OP_ENTERWHEN:
11343788 1240 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
79072805
LW
1241 scalarvoid(kid);
1242 break;
5aabfad6 1243
a0d0e21e 1244 case OP_NULL:
11343788 1245 if (o->op_flags & OPf_STACKED)
a0d0e21e 1246 break;
5aabfad6 1247 /* FALL THROUGH */
2ebea0a1
GS
1248 case OP_NEXTSTATE:
1249 case OP_DBSTATE:
79072805
LW
1250 case OP_ENTERTRY:
1251 case OP_ENTER:
11343788 1252 if (!(o->op_flags & OPf_KIDS))
79072805 1253 break;
54310121 1254 /* FALL THROUGH */
463ee0b2 1255 case OP_SCOPE:
79072805
LW
1256 case OP_LEAVE:
1257 case OP_LEAVETRY:
a0d0e21e 1258 case OP_LEAVELOOP:
79072805 1259 case OP_LINESEQ:
79072805 1260 case OP_LIST:
0d863452
RH
1261 case OP_LEAVEGIVEN:
1262 case OP_LEAVEWHEN:
11343788 1263 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
79072805
LW
1264 scalarvoid(kid);
1265 break;
c90c0ff4 1266 case OP_ENTEREVAL:
5196be3e 1267 scalarkids(o);
c90c0ff4 1268 break;
d6483035 1269 case OP_SCALAR:
5196be3e 1270 return scalar(o);
79072805 1271 }
a2a5de95
NC
1272 if (useless)
1273 Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of %s in void context", useless);
11343788 1274 return o;
79072805
LW
1275}
1276
1f676739 1277static OP *
412da003 1278S_listkids(pTHX_ OP *o)
79072805 1279{
11343788 1280 if (o && o->op_flags & OPf_KIDS) {
6867be6d 1281 OP *kid;
11343788 1282 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
79072805
LW
1283 list(kid);
1284 }
11343788 1285 return o;
79072805
LW
1286}
1287
1288OP *
864dbfa3 1289Perl_list(pTHX_ OP *o)
79072805 1290{
27da23d5 1291 dVAR;
79072805
LW
1292 OP *kid;
1293
a0d0e21e 1294 /* assumes no premature commitment */
13765c85
DM
1295 if (!o || (o->op_flags & OPf_WANT)
1296 || (PL_parser && PL_parser->error_count)
5dc0d613 1297 || o->op_type == OP_RETURN)
7e363e51 1298 {
11343788 1299 return o;
7e363e51 1300 }
79072805 1301
b162f9ea 1302 if ((o->op_private & OPpTARGET_MY)
7e363e51
GS
1303 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1304 {
b162f9ea 1305 return o; /* As if inside SASSIGN */
7e363e51 1306 }
1c846c1f 1307
5dc0d613 1308 o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
79072805 1309
11343788 1310 switch (o->op_type) {
79072805
LW
1311 case OP_FLOP:
1312 case OP_REPEAT:
11343788 1313 list(cBINOPo->op_first);
79072805
LW
1314 break;
1315 case OP_OR:
1316 case OP_AND:
1317 case OP_COND_EXPR:
11343788 1318 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
79072805
LW
1319 list(kid);
1320 break;
1321 default:
1322 case OP_MATCH:
8782bef2 1323 case OP_QR:
79072805
LW
1324 case OP_SUBST:
1325 case OP_NULL:
11343788 1326 if (!(o->op_flags & OPf_KIDS))
79072805 1327 break;
11343788
MB
1328 if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
1329 list(cBINOPo->op_first);
1330 return gen_constant_list(o);
79072805
LW
1331 }
1332 case OP_LIST:
11343788 1333 listkids(o);
79072805
LW
1334 break;
1335 case OP_LEAVE:
1336 case OP_LEAVETRY:
5dc0d613 1337 kid = cLISTOPo->op_first;
54310121 1338 list(kid);
25b991bf
VP
1339 kid = kid->op_sibling;
1340 do_kids:
1341 while (kid) {
1342 OP *sib = kid->op_sibling;
c08f093b
VP
1343 if (sib && kid->op_type != OP_LEAVEWHEN)
1344 scalarvoid(kid);
1345 else
54310121 1346 list(kid);
25b991bf 1347 kid = sib;
54310121 1348 }
11206fdd 1349 PL_curcop = &PL_compiling;
54310121 1350 break;
748a9306 1351 case OP_SCOPE:
79072805 1352 case OP_LINESEQ:
25b991bf
VP
1353 kid = cLISTOPo->op_first;
1354 goto do_kids;
79072805 1355 }
11343788 1356 return o;
79072805
LW
1357}
1358
1f676739 1359static OP *
2dd5337b 1360S_scalarseq(pTHX_ OP *o)
79072805 1361{
97aff369 1362 dVAR;
11343788 1363 if (o) {
1496a290
AL
1364 const OPCODE type = o->op_type;
1365
1366 if (type == OP_LINESEQ || type == OP_SCOPE ||
1367 type == OP_LEAVE || type == OP_LEAVETRY)
463ee0b2 1368 {
6867be6d 1369 OP *kid;
11343788 1370 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
ed6116ce 1371 if (kid->op_sibling) {
463ee0b2 1372 scalarvoid(kid);
ed6116ce 1373 }
463ee0b2 1374 }
3280af22 1375 PL_curcop = &PL_compiling;
79072805 1376 }
11343788 1377 o->op_flags &= ~OPf_PARENS;
3280af22 1378 if (PL_hints & HINT_BLOCK_SCOPE)
11343788 1379 o->op_flags |= OPf_PARENS;
79072805 1380 }
8990e307 1381 else
11343788
MB
1382 o = newOP(OP_STUB, 0);
1383 return o;
79072805
LW
1384}
1385
76e3520e 1386STATIC OP *
cea2e8a9 1387S_modkids(pTHX_ OP *o, I32 type)
79072805 1388{
11343788 1389 if (o && o->op_flags & OPf_KIDS) {
6867be6d 1390 OP *kid;
11343788 1391 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
3ad73efd 1392 op_lvalue(kid, type);
79072805 1393 }
11343788 1394 return o;
79072805
LW
1395}
1396
3ad73efd
Z
1397/*
1398=for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
1399
1400Propagate lvalue ("modifiable") context to an op and its children.
1401I<type> represents the context type, roughly based on the type of op that
1402would do the modifying, although C<local()> is represented by OP_NULL,
1403because it has no op type of its own (it is signalled by a flag on
001c3c51
FC
1404the lvalue op).
1405
1406This function detects things that can't be modified, such as C<$x+1>, and
1407generates errors for them. For example, C<$x+1 = 2> would cause it to be
1408called with an op of type OP_ADD and a C<type> argument of OP_SASSIGN.
1409
1410It also flags things that need to behave specially in an lvalue context,
1411such as C<$$x = 5> which might have to vivify a reference in C<$x>.
3ad73efd
Z
1412
1413=cut
1414*/
ddeae0f1 1415
79072805 1416OP *
d3d7d28f 1417Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
79072805 1418{
27da23d5 1419 dVAR;
79072805 1420 OP *kid;
ddeae0f1
DM
1421 /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
1422 int localize = -1;
79072805 1423
13765c85 1424 if (!o || (PL_parser && PL_parser->error_count))
11343788 1425 return o;
79072805 1426
b162f9ea 1427 if ((o->op_private & OPpTARGET_MY)
7e363e51
GS
1428 && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
1429 {
b162f9ea 1430 return o;
7e363e51 1431 }
1c846c1f 1432
11343788 1433 switch (o->op_type) {
68dc0745 1434 case OP_UNDEF:
ddeae0f1 1435 localize = 0;
3280af22 1436 PL_modcount++;
5dc0d613 1437 return o;
a0d0e21e 1438 case OP_CONST:
2e0ae2d3 1439 if (!(o->op_private & OPpCONST_ARYBASE))
a0d0e21e 1440 goto nomod;
54dc0f91 1441 localize = 0;
3280af22 1442 if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
fc15ae8f
NC
1443 CopARYBASE_set(&PL_compiling,
1444 (I32)SvIV(cSVOPx(PL_eval_start)->op_sv));
3280af22 1445 PL_eval_start = 0;
a0d0e21e
LW
1446 }
1447 else if (!type) {
fc15ae8f
NC
1448 SAVECOPARYBASE(&PL_compiling);
1449 CopARYBASE_set(&PL_compiling, 0);
a0d0e21e
LW
1450 }
1451 else if (type == OP_REFGEN)
1452 goto nomod;
1453 else
cea2e8a9 1454 Perl_croak(aTHX_ "That use of $[ is unsupported");
a0d0e21e 1455 break;
5f05dabc 1456 case OP_STUB:
58bde88d 1457 if ((o->op_flags & OPf_PARENS) || PL_madskills)
5f05dabc 1458 break;
1459 goto nomod;
a0d0e21e
LW
1460 case OP_ENTERSUB:
1461 if ((type == OP_UNDEF || type == OP_REFGEN) &&
11343788
MB
1462 !(o->op_flags & OPf_STACKED)) {
1463 o->op_type = OP_RV2CV; /* entersub => rv2cv */
767eda44
FC
1464 /* Both ENTERSUB and RV2CV use this bit, but for different pur-
1465 poses, so we need it clear. */
e26df76a 1466 o->op_private &= ~1;
22c35a8c 1467 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
11343788 1468 assert(cUNOPo->op_first->op_type == OP_NULL);
93c66552 1469 op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
79072805
LW
1470 break;
1471 }
95f0a2f1
SB
1472 else if (o->op_private & OPpENTERSUB_NOMOD)
1473 return o;
cd06dffe 1474 else { /* lvalue subroutine call */
777d9014
FC
1475 o->op_private |= OPpLVAL_INTRO
1476 |(OPpENTERSUB_INARGS * (type == OP_LEAVESUBLV));
e6438c1a 1477 PL_modcount = RETURN_UNLIMITED_NUMBER;
4978d6d9 1478 if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
cd06dffe
GS
1479 /* Backward compatibility mode: */
1480 o->op_private |= OPpENTERSUB_INARGS;
1481 break;
1482 }
1483 else { /* Compile-time error message: */
1484 OP *kid = cUNOPo->op_first;
1485 CV *cv;
1486 OP *okid;
1487
3ea285d1
AL
1488 if (kid->op_type != OP_PUSHMARK) {
1489 if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
1490 Perl_croak(aTHX_
1491 "panic: unexpected lvalue entersub "
1492 "args: type/targ %ld:%"UVuf,
1493 (long)kid->op_type, (UV)kid->op_targ);
1494 kid = kLISTOP->op_first;
1495 }
cd06dffe
GS
1496 while (kid->op_sibling)
1497 kid = kid->op_sibling;
1498 if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
1499 /* Indirect call */
1500 if (kid->op_type == OP_METHOD_NAMED
1501 || kid->op_type == OP_METHOD)
1502 {
87d7fd28 1503 UNOP *newop;
b2ffa427 1504
87d7fd28 1505 NewOp(1101, newop, 1, UNOP);
349fd7b7
GS
1506 newop->op_type = OP_RV2CV;
1507 newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
5f66b61c 1508 newop->op_first = NULL;
87d7fd28
GS
1509 newop->op_next = (OP*)newop;
1510 kid->op_sibling = (OP*)newop;
349fd7b7 1511 newop->op_private |= OPpLVAL_INTRO;
e26df76a 1512 newop->op_private &= ~1;
cd06dffe
GS
1513 break;
1514 }
b2ffa427 1515
cd06dffe
GS
1516 if (kid->op_type != OP_RV2CV)
1517 Perl_croak(aTHX_
1518 "panic: unexpected lvalue entersub "
55140b79 1519 "entry via type/targ %ld:%"UVuf,
3d811634 1520 (long)kid->op_type, (UV)kid->op_targ);
cd06dffe
GS
1521 kid->op_private |= OPpLVAL_INTRO;
1522 break; /* Postpone until runtime */
1523 }
b2ffa427
NIS
1524
1525 okid = kid;
cd06dffe
GS
1526 kid = kUNOP->op_first;
1527 if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
1528 kid = kUNOP->op_first;
b2ffa427 1529 if (kid->op_type == OP_NULL)
cd06dffe
GS
1530 Perl_croak(aTHX_
1531 "Unexpected constant lvalue entersub "
55140b79 1532 "entry via type/targ %ld:%"UVuf,
3d811634 1533 (long)kid->op_type, (UV)kid->op_targ);
cd06dffe
GS
1534 if (kid->op_type != OP_GV) {
1535 /* Restore RV2CV to check lvalueness */
1536 restore_2cv:
1537 if (kid->op_next && kid->op_next != kid) { /* Happens? */
1538 okid->op_next = kid->op_next;
1539 kid->op_next = okid;
1540 }
1541 else
5f66b61c 1542 okid->op_next = NULL;
cd06dffe
GS
1543 okid->op_type = OP_RV2CV;
1544 okid->op_targ = 0;
1545 okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
1546 okid->op_private |= OPpLVAL_INTRO;
e26df76a 1547 okid->op_private &= ~1;
cd06dffe
GS
1548 break;
1549 }
b2ffa427 1550
638eceb6 1551 cv = GvCV(kGVOP_gv);
1c846c1f 1552 if (!cv)
cd06dffe
GS
1553 goto restore_2cv;
1554 if (CvLVALUE(cv))
1555 break;
1556 }
1557 }
79072805
LW
1558 /* FALL THROUGH */
1559 default:
a0d0e21e 1560 nomod:
f5d552b4 1561 if (flags & OP_LVALUE_NO_CROAK) return NULL;
6fbb66d6 1562 /* grep, foreach, subcalls, refgen */
145b2bbb
FC
1563 if (type == OP_GREPSTART || type == OP_ENTERSUB
1564 || type == OP_REFGEN || type == OP_LEAVESUBLV)
a0d0e21e 1565 break;
cea2e8a9 1566 yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
638bc118 1567 (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
cd06dffe
GS
1568 ? "do block"
1569 : (o->op_type == OP_ENTERSUB
1570 ? "non-lvalue subroutine call"
53e06cf0 1571 : OP_DESC(o))),
22c35a8c 1572 type ? PL_op_desc[type] : "local"));
11343788 1573 return o;
79072805 1574
a0d0e21e
LW
1575 case OP_PREINC:
1576 case OP_PREDEC:
1577 case OP_POW:
1578 case OP_MULTIPLY:
1579 case OP_DIVIDE:
1580 case OP_MODULO:
1581 case OP_REPEAT:
1582 case OP_ADD:
1583 case OP_SUBTRACT:
1584 case OP_CONCAT:
1585 case OP_LEFT_SHIFT:
1586 case OP_RIGHT_SHIFT:
1587 case OP_BIT_AND:
1588 case OP_BIT_XOR:
1589 case OP_BIT_OR:
1590 case OP_I_MULTIPLY:
1591 case OP_I_DIVIDE:
1592 case OP_I_MODULO:
1593 case OP_I_ADD:
1594 case OP_I_SUBTRACT:
11343788 1595 if (!(o->op_flags & OPf_STACKED))
a0d0e21e 1596 goto nomod;
3280af22 1597 PL_modcount++;
a0d0e21e 1598 break;
b2ffa427 1599
79072805 1600 case OP_COND_EXPR:
ddeae0f1 1601 localize = 1;
11343788 1602 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
3ad73efd 1603 op_lvalue(kid, type);
79072805
LW
1604 break;
1605
1606 case OP_RV2AV:
1607 case OP_RV2HV:
11343788 1608 if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
e6438c1a 1609 PL_modcount = RETURN_UNLIMITED_NUMBER;
11343788 1610 return o; /* Treat \(@foo) like ordinary list. */
748a9306
LW
1611 }
1612 /* FALL THROUGH */
79072805 1613 case OP_RV2GV:
5dc0d613 1614 if (scalar_mod_type(o, type))
3fe9a6f1 1615 goto nomod;
11343788 1616 ref(cUNOPo->op_first, o->op_type);
79072805 1617 /* FALL THROUGH */
79072805
LW
1618 case OP_ASLICE:
1619 case OP_HSLICE:
78f9721b
SM
1620 if (type == OP_LEAVESUBLV)
1621 o->op_private |= OPpMAYBE_LVSUB;
ddeae0f1 1622 localize = 1;
78f9721b
SM
1623 /* FALL THROUGH */
1624 case OP_AASSIGN:
93a17b20
LW
1625 case OP_NEXTSTATE:
1626 case OP_DBSTATE:
e6438c1a 1627 PL_modcount = RETURN_UNLIMITED_NUMBER;
79072805 1628 break;
28c5b5bc
RGS
1629 case OP_AV2ARYLEN:
1630 PL_hints |= HINT_BLOCK_SCOPE;
1631 if (type == OP_LEAVESUBLV)
1632 o->op_private |= OPpMAYBE_LVSUB;
1633 PL_modcount++;
1634 break;
463ee0b2 1635 case OP_RV2SV:
aeea060c 1636 ref(cUNOPo->op_first, o->op_type);
ddeae0f1 1637 localize = 1;
463ee0b2 1638 /* FALL THROUGH */
79072805 1639 case OP_GV:
3280af22 1640 PL_hints |= HINT_BLOCK_SCOPE;
463ee0b2 1641 case OP_SASSIGN:
bf4b1e52
GS
1642 case OP_ANDASSIGN:
1643 case OP_ORASSIGN:
c963b151 1644 case OP_DORASSIGN:
ddeae0f1
DM
1645 PL_modcount++;
1646 break;
1647
8990e307 1648 case OP_AELEMFAST:
93bad3fd 1649 case OP_AELEMFAST_LEX:
6a077020 1650 localize = -1;
3280af22 1651 PL_modcount++;
8990e307
LW
1652 break;
1653
748a9306
LW
1654 case OP_PADAV:
1655 case OP_PADHV:
e6438c1a 1656 PL_modcount = RETURN_UNLIMITED_NUMBER;
5196be3e
MB
1657 if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
1658 return o; /* Treat \(@foo) like ordinary list. */
1659 if (scalar_mod_type(o, type))
3fe9a6f1 1660 goto nomod;
78f9721b
SM
1661 if (type == OP_LEAVESUBLV)
1662 o->op_private |= OPpMAYBE_LVSUB;
748a9306
LW
1663 /* FALL THROUGH */
1664 case OP_PADSV:
3280af22 1665 PL_modcount++;
ddeae0f1 1666 if (!type) /* local() */
cea2e8a9 1667 Perl_croak(aTHX_ "Can't localize lexical variable %s",
dd2155a4 1668 PAD_COMPNAME_PV(o->op_targ));
463ee0b2
LW
1669 break;
1670
748a9306 1671 case OP_PUSHMARK:
ddeae0f1 1672 localize = 0;
748a9306 1673 break;
b2ffa427 1674
69969c6f 1675 case OP_KEYS:
d8065907 1676 case OP_RKEYS:
fad4a2e4 1677 if (type != OP_SASSIGN && type != OP_LEAVESUBLV)
69969c6f 1678 goto nomod;
5d82c453
GA
1679 goto lvalue_func;
1680 case OP_SUBSTR:
1681 if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
1682 goto nomod;
5f05dabc 1683 /* FALL THROUGH */
a0d0e21e 1684 case OP_POS:
463ee0b2 1685 case OP_VEC:
fad4a2e4 1686 lvalue_func:
78f9721b
SM
1687 if (type == OP_LEAVESUBLV)
1688 o->op_private |= OPpMAYBE_LVSUB;
11343788
MB
1689 pad_free(o->op_targ);
1690 o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
5dc0d613 1691 assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
11343788 1692 if (o->op_flags & OPf_KIDS)
3ad73efd 1693 op_lvalue(cBINOPo->op_first->op_sibling, type);
463ee0b2 1694 break;
a0d0e21e 1695
463ee0b2
LW
1696 case OP_AELEM:
1697 case OP_HELEM:
11343788 1698 ref(cBINOPo->op_first, o->op_type);
68dc0745 1699 if (type == OP_ENTERSUB &&
5dc0d613
MB
1700 !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
1701 o->op_private |= OPpLVAL_DEFER;
78f9721b
SM
1702 if (type == OP_LEAVESUBLV)
1703 o->op_private |= OPpMAYBE_LVSUB;
ddeae0f1 1704 localize = 1;
3280af22 1705 PL_modcount++;
463ee0b2
LW
1706 break;
1707
1708 case OP_SCOPE:
1709 case OP_LEAVE:
1710 case OP_ENTER:
78f9721b 1711 case OP_LINESEQ:
ddeae0f1 1712 localize = 0;
11343788 1713 if (o->op_flags & OPf_KIDS)
3ad73efd 1714 op_lvalue(cLISTOPo->op_last, type);
a0d0e21e
LW
1715 break;
1716
1717 case OP_NULL:
ddeae0f1 1718 localize = 0;
638bc118
GS
1719 if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
1720 goto nomod;
1721 else if (!(o->op_flags & OPf_KIDS))
463ee0b2 1722 break;
11343788 1723 if (o->op_targ != OP_LIST) {
3ad73efd 1724 op_lvalue(cBINOPo->op_first, type);
a0d0e21e
LW
1725 break;
1726 }
1727 /* FALL THROUGH */
463ee0b2 1728 case OP_LIST:
ddeae0f1 1729 localize = 0;
11343788 1730 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
3ad73efd 1731 op_lvalue(kid, type);
463ee0b2 1732 break;
78f9721b
SM
1733
1734 case OP_RETURN:
1735 if (type != OP_LEAVESUBLV)
1736 goto nomod;
3ad73efd 1737 break; /* op_lvalue()ing was handled by ck_return() */
463ee0b2 1738 }
58d95175 1739
8be1be90
AMS
1740 /* [20011101.069] File test operators interpret OPf_REF to mean that
1741 their argument is a filehandle; thus \stat(".") should not set
1742 it. AMS 20011102 */
1743 if (type == OP_REFGEN &&
ef69c8fc 1744 PL_check[o->op_type] == Perl_ck_ftst)
8be1be90
AMS
1745 return o;
1746
1747 if (type != OP_LEAVESUBLV)
1748 o->op_flags |= OPf_MOD;
1749
1750 if (type == OP_AASSIGN || type == OP_SASSIGN)
1751 o->op_flags |= OPf_SPECIAL|OPf_REF;
ddeae0f1
DM
1752 else if (!type) { /* local() */
1753 switch (localize) {
1754 case 1:
1755 o->op_private |= OPpLVAL_INTRO;
1756 o->op_flags &= ~OPf_SPECIAL;
1757 PL_hints |= HINT_BLOCK_SCOPE;
1758 break;
1759 case 0:
1760 break;
1761 case -1:
a2a5de95
NC
1762 Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
1763 "Useless localization of %s", OP_DESC(o));
ddeae0f1 1764 }
463ee0b2 1765 }
8be1be90
AMS
1766 else if (type != OP_GREPSTART && type != OP_ENTERSUB
1767 && type != OP_LEAVESUBLV)
1768 o->op_flags |= OPf_REF;
11343788 1769 return o;
463ee0b2
LW
1770}
1771
8b47453d
FC
1772/* Do not use this. It will be removed after 5.14. */
1773OP *
1774Perl_mod(pTHX_ OP *o, I32 type)
1775{
1776 return op_lvalue(o,type);
1777}
1778
1779
864dbfa3 1780STATIC bool
5f66b61c 1781S_scalar_mod_type(const OP *o, I32 type)
3fe9a6f1 1782{
7918f24d
NC
1783 PERL_ARGS_ASSERT_SCALAR_MOD_TYPE;
1784
3fe9a6f1 1785 switch (type) {
1786 case OP_SASSIGN:
5196be3e 1787 if (o->op_type == OP_RV2GV)
3fe9a6f1 1788 return FALSE;
1789 /* FALL THROUGH */
1790 case OP_PREINC:
1791 case OP_PREDEC:
1792 case OP_POSTINC:
1793 case OP_POSTDEC:
1794 case OP_I_PREINC:
1795 case OP_I_PREDEC:
1796 case OP_I_POSTINC:
1797 case OP_I_POSTDEC:
1798 case OP_POW:
1799 case OP_MULTIPLY:
1800 case OP_DIVIDE:
1801 case OP_MODULO:
1802 case OP_REPEAT:
1803 case OP_ADD:
1804 case OP_SUBTRACT:
1805 case OP_I_MULTIPLY:
1806 case OP_I_DIVIDE:
1807 case OP_I_MODULO:
1808 case OP_I_ADD:
1809 case OP_I_SUBTRACT:
1810 case OP_LEFT_SHIFT:
1811 case OP_RIGHT_SHIFT:
1812 case OP_BIT_AND:
1813 case OP_BIT_XOR:
1814 case OP_BIT_OR:
1815 case OP_CONCAT:
1816 case OP_SUBST:
1817 case OP_TRANS:
bb16bae8 1818 case OP_TRANSR:
49e9fbe6
GS
1819 case OP_READ:
1820 case OP_SYSREAD:
1821 case OP_RECV:
bf4b1e52
GS
1822 case OP_ANDASSIGN:
1823 case OP_ORASSIGN:
410d09fe 1824 case OP_DORASSIGN:
3fe9a6f1 1825 return TRUE;
1826 default:
1827 return FALSE;
1828 }
1829}
1830
35cd451c 1831STATIC bool
5f66b61c 1832S_is_handle_constructor(const OP *o, I32 numargs)
35cd451c 1833{
7918f24d
NC
1834 PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR;
1835
35cd451c
GS
1836 switch (o->op_type) {
1837 case OP_PIPE_OP:
1838 case OP_SOCKPAIR:
504618e9 1839 if (numargs == 2)
35cd451c
GS
1840 return TRUE;
1841 /* FALL THROUGH */
1842 case OP_SYSOPEN:
1843 case OP_OPEN:
ded8aa31 1844 case OP_SELECT: /* XXX c.f. SelectSaver.pm */
35cd451c
GS
1845 case OP_SOCKET:
1846 case OP_OPEN_DIR:
1847 case OP_ACCEPT:
504618e9 1848 if (numargs == 1)
35cd451c 1849 return TRUE;
5f66b61c 1850 /* FALLTHROUGH */
35cd451c
GS
1851 default:
1852 return FALSE;
1853 }
1854}
1855
0d86688d
NC
1856static OP *
1857S_refkids(pTHX_ OP *o, I32 type)
463ee0b2 1858{
11343788 1859 if (o && o->op_flags & OPf_KIDS) {
6867be6d 1860 OP *kid;
11343788 1861 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
463ee0b2
LW
1862 ref(kid, type);
1863 }
11343788 1864 return o;
463ee0b2
LW
1865}
1866
1867OP *
e4c5ccf3 1868Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
463ee0b2 1869{
27da23d5 1870 dVAR;
463ee0b2 1871 OP *kid;
463ee0b2 1872
7918f24d
NC
1873 PERL_ARGS_ASSERT_DOREF;
1874
13765c85 1875 if (!o || (PL_parser && PL_parser->error_count))
11343788 1876 return o;
463ee0b2 1877
11343788 1878 switch (o->op_type) {
a0d0e21e 1879 case OP_ENTERSUB:
afebc493 1880 if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
11343788
MB
1881 !(o->op_flags & OPf_STACKED)) {
1882 o->op_type = OP_RV2CV; /* entersub => rv2cv */
22c35a8c 1883 o->op_ppaddr = PL_ppaddr[OP_RV2CV];
11343788 1884 assert(cUNOPo->op_first->op_type == OP_NULL);
93c66552 1885 op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
11343788 1886 o->op_flags |= OPf_SPECIAL;
e26df76a 1887 o->op_private &= ~1;
8990e307 1888 }
767eda44
FC
1889 else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
1890 o->op_private |= OPpENTERSUB_DEREF;
1891 o->op_flags |= OPf_MOD;
1892 }
1893
8990e307 1894 break;
aeea060c 1895
463ee0b2 1896 case OP_COND_EXPR:
11343788 1897 for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
e4c5ccf3 1898 doref(kid, type, set_op_ref);
463ee0b2 1899 break;
8990e307 1900 case OP_RV2SV:
35cd451c
GS
1901 if (type == OP_DEFINED)
1902 o->op_flags |= OPf_SPECIAL; /* don't create GV */
e4c5ccf3 1903 doref(cUNOPo->op_first, o->op_type, set_op_ref);
4633a7c4
LW
1904 /* FALL THROUGH */
1905 case OP_PADSV:
5f05dabc 1906 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
5dc0d613
MB
1907 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1908 : type == OP_RV2HV ? OPpDEREF_HV
1909 : OPpDEREF_SV);
11343788 1910 o->op_flags |= OPf_MOD;
a0d0e21e 1911 }
8990e307 1912 break;
1c846c1f 1913
463ee0b2
LW
1914 case OP_RV2AV:
1915 case OP_RV2HV:
e4c5ccf3
RH
1916 if (set_op_ref)
1917 o->op_flags |= OPf_REF;
8990e307 1918 /* FALL THROUGH */
463ee0b2 1919 case OP_RV2GV:
35cd451c
GS
1920 if (type == OP_DEFINED)
1921 o->op_flags |= OPf_SPECIAL; /* don't create GV */
e4c5ccf3 1922 doref(cUNOPo->op_first, o->op_type, set_op_ref);
463ee0b2 1923 break;
8990e307 1924
463ee0b2
LW
1925 case OP_PADAV:
1926 case OP_PADHV:
e4c5ccf3
RH
1927 if (set_op_ref)
1928 o->op_flags |= OPf_REF;
79072805 1929 break;
aeea060c 1930
8990e307 1931 case OP_SCALAR:
79072805 1932 case OP_NULL:
11343788 1933 if (!(o->op_flags & OPf_KIDS))
463ee0b2 1934 break;
e4c5ccf3 1935 doref(cBINOPo->op_first, type, set_op_ref);
79072805
LW
1936 break;
1937 case OP_AELEM:
1938 case OP_HELEM:
e4c5ccf3 1939 doref(cBINOPo->op_first, o->op_type, set_op_ref);
5f05dabc 1940 if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
5dc0d613
MB
1941 o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
1942 : type == OP_RV2HV ? OPpDEREF_HV
1943 : OPpDEREF_SV);
11343788 1944 o->op_flags |= OPf_MOD;
8990e307 1945 }
79072805
LW
1946 break;
1947
463ee0b2 1948 case OP_SCOPE:
79072805 1949 case OP_LEAVE:
e4c5ccf3
RH
1950 set_op_ref = FALSE;
1951 /* FALL THROUGH */
79072805 1952 case OP_ENTER:
8990e307 1953 case OP_LIST:
11343788 1954 if (!(o->op_flags & OPf_KIDS))
79072805 1955 break;
e4c5ccf3 1956 doref(cLISTOPo->op_last, type, set_op_ref);
79072805 1957 break;
a0d0e21e
LW
1958 default:
1959 break;
79072805 1960 }
11343788 1961 return scalar(o);
8990e307 1962
79072805
LW
1963}
1964
09bef843
SB
1965STATIC OP *
1966S_dup_attrlist(pTHX_ OP *o)
1967{
97aff369 1968 dVAR;
0bd48802 1969 OP *rop;
09bef843 1970
7918f24d
NC
1971 PERL_ARGS_ASSERT_DUP_ATTRLIST;
1972
09bef843
SB
1973 /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
1974 * where the first kid is OP_PUSHMARK and the remaining ones
1975 * are OP_CONST. We need to push the OP_CONST values.
1976 */
1977 if (o->op_type == OP_CONST)
b37c2d43 1978 rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv));
eb8433b7
NC
1979#ifdef PERL_MAD
1980 else if (o->op_type == OP_NULL)
1d866c12 1981 rop = NULL;
eb8433b7 1982#endif
09bef843
SB
1983 else {
1984 assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
5f66b61c 1985 rop = NULL;
09bef843
SB
1986 for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
1987 if (o->op_type == OP_CONST)
2fcb4757 1988 rop = op_append_elem(OP_LIST, rop,
09bef843 1989 newSVOP(OP_CONST, o->op_flags,
b37c2d43 1990 SvREFCNT_inc_NN(cSVOPo->op_sv)));
09bef843
SB
1991 }
1992 }
1993 return rop;
1994}
1995
1996STATIC void
95f0a2f1 1997S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my)
09bef843 1998{
27da23d5 1999 dVAR;
09bef843
SB
2000 SV *stashsv;
2001
7918f24d
NC
2002 PERL_ARGS_ASSERT_APPLY_ATTRS;
2003
09bef843
SB
2004 /* fake up C<use attributes $pkg,$rv,@attrs> */
2005 ENTER; /* need to protect against side-effects of 'use' */
5aaec2b4 2006 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
e4783991 2007
09bef843 2008#define ATTRSMODULE "attributes"
95f0a2f1
SB
2009#define ATTRSMODULE_PM "attributes.pm"
2010
2011 if (for_my) {
95f0a2f1 2012 /* Don't force the C<use> if we don't need it. */
a4fc7abc 2013 SV * const * const svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE);
95f0a2f1 2014 if (svp && *svp != &PL_sv_undef)
6f207bd3 2015 NOOP; /* already in %INC */
95f0a2f1
SB
2016 else
2017 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
6136c704 2018 newSVpvs(ATTRSMODULE), NULL);
95f0a2f1
SB
2019 }
2020 else {
2021 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
6136c704
AL
2022 newSVpvs(ATTRSMODULE),
2023 NULL,
2fcb4757 2024 op_prepend_elem(OP_LIST,
95f0a2f1 2025 newSVOP(OP_CONST, 0, stashsv),
2fcb4757 2026 op_prepend_elem(OP_LIST,
95f0a2f1
SB
2027 newSVOP(OP_CONST, 0,
2028 newRV(target)),
2029 dup_attrlist(attrs))));
2030 }
09bef843
SB
2031 LEAVE;
2032}
2033
95f0a2f1
SB
2034STATIC void
2035S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp)
2036{
97aff369 2037 dVAR;
95f0a2f1
SB
2038 OP *pack, *imop, *arg;
2039 SV *meth, *stashsv;
2040
7918f24d
NC
2041 PERL_ARGS_ASSERT_APPLY_ATTRS_MY;
2042
95f0a2f1
SB
2043 if (!attrs)
2044 return;
2045
2046 assert(target->op_type == OP_PADSV ||
2047 target->op_type == OP_PADHV ||
2048 target->op_type == OP_PADAV);
2049
2050 /* Ensure that attributes.pm is loaded. */
dd2155a4 2051 apply_attrs(stash, PAD_SV(target->op_targ), attrs, TRUE);
95f0a2f1
SB
2052
2053 /* Need package name for method call. */
6136c704 2054 pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE));
95f0a2f1
SB
2055
2056 /* Build up the real arg-list. */
5aaec2b4
NC
2057 stashsv = stash ? newSVhek(HvNAME_HEK(stash)) : &PL_sv_no;
2058
95f0a2f1
SB
2059 arg = newOP(OP_PADSV, 0);
2060 arg->op_targ = target->op_targ;
2fcb4757 2061 arg = op_prepend_elem(OP_LIST,
95f0a2f1 2062 newSVOP(OP_CONST, 0, stashsv),
2fcb4757 2063 op_prepend_elem(OP_LIST,
95f0a2f1 2064 newUNOP(OP_REFGEN, 0,
3ad73efd 2065 op_lvalue(arg, OP_REFGEN)),
95f0a2f1
SB
2066 dup_attrlist(attrs)));
2067
2068 /* Fake up a method call to import */
18916d0d 2069 meth = newSVpvs_share("import");
95f0a2f1 2070 imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID,
2fcb4757
Z
2071 op_append_elem(OP_LIST,
2072 op_prepend_elem(OP_LIST, pack, list(arg)),
95f0a2f1
SB
2073 newSVOP(OP_METHOD_NAMED, 0, meth)));
2074 imop->op_private |= OPpENTERSUB_NOMOD;
2075
2076 /* Combine the ops. */
2fcb4757 2077 *imopsp = op_append_elem(OP_LIST, *imopsp, imop);
95f0a2f1
SB
2078}
2079
2080/*
2081=notfor apidoc apply_attrs_string
2082
2083Attempts to apply a list of attributes specified by the C<attrstr> and
2084C<len> arguments to the subroutine identified by the C<cv> argument which
2085is expected to be associated with the package identified by the C<stashpv>
2086argument (see L<attributes>). It gets this wrong, though, in that it
2087does not correctly identify the boundaries of the individual attribute
2088specifications within C<attrstr>. This is not really intended for the
2089public API, but has to be listed here for systems such as AIX which
2090need an explicit export list for symbols. (It's called from XS code
2091in support of the C<ATTRS:> keyword from F<xsubpp>.) Patches to fix it
2092to respect attribute syntax properly would be welcome.
2093
2094=cut
2095*/
2096
be3174d2 2097void
6867be6d
AL
2098Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv,
2099 const char *attrstr, STRLEN len)
be3174d2 2100{
5f66b61c 2101 OP *attrs = NULL;
be3174d2 2102
7918f24d
NC
2103 PERL_ARGS_ASSERT_APPLY_ATTRS_STRING;
2104
be3174d2
GS
2105 if (!len) {
2106 len = strlen(attrstr);
2107 }
2108
2109 while (len) {
2110 for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
2111 if (len) {
890ce7af 2112 const char * const sstr = attrstr;
be3174d2 2113 for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
2fcb4757 2114 attrs = op_append_elem(OP_LIST, attrs,
be3174d2
GS
2115 newSVOP(OP_CONST, 0,
2116 newSVpvn(sstr, attrstr-sstr)));
2117 }
2118 }
2119
2120 Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
6136c704 2121 newSVpvs(ATTRSMODULE),
2fcb4757 2122 NULL, op_prepend_elem(OP_LIST,
be3174d2 2123 newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
2fcb4757 2124 op_prepend_elem(OP_LIST,
be3174d2 2125 newSVOP(OP_CONST, 0,
ad64d0ec 2126 newRV(MUTABLE_SV(cv))),
be3174d2
GS
2127 attrs)));
2128}
2129
09bef843 2130STATIC OP *
95f0a2f1 2131S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp)
93a17b20 2132{
97aff369 2133 dVAR;
93a17b20 2134 I32 type;
a1fba7eb 2135 const bool stately = PL_parser && PL_parser->in_my == KEY_state;
93a17b20 2136
7918f24d
NC
2137 PERL_ARGS_ASSERT_MY_KID;
2138
13765c85 2139 if (!o || (PL_parser && PL_parser->error_count))
11343788 2140 return o;
93a17b20 2141
bc61e325 2142 type = o->op_type;
eb8433b7
NC
2143 if (PL_madskills && type == OP_NULL && o->op_flags & OPf_KIDS) {
2144 (void)my_kid(cUNOPo->op_first, attrs, imopsp);
2145 return o;
2146 }
2147
93a17b20 2148 if (type == OP_LIST) {
6867be6d 2149 OP *kid;
11343788 2150 for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
95f0a2f1 2151 my_kid(kid, attrs, imopsp);
eb8433b7
NC
2152 } else if (type == OP_UNDEF
2153#ifdef PERL_MAD
2154 || type == OP_STUB
2155#endif
2156 ) {
7766148a 2157 return o;
77ca0c92
LW
2158 } else if (type == OP_RV2SV || /* "our" declaration */
2159 type == OP_RV2AV ||
2160 type == OP_RV2HV) { /* XXX does this let anything illegal in? */
1ce0b88c 2161 if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */
fab01b8e 2162 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
952306ac 2163 OP_DESC(o),
12bd6ede
DM
2164 PL_parser->in_my == KEY_our
2165 ? "our"
2166 : PL_parser->in_my == KEY_state ? "state" : "my"));
1ce0b88c 2167 } else if (attrs) {
551405c4 2168 GV * const gv = cGVOPx_gv(cUNOPo->op_first);
12bd6ede
DM
2169 PL_parser->in_my = FALSE;
2170 PL_parser->in_my_stash = NULL;
1ce0b88c
RGS
2171 apply_attrs(GvSTASH(gv),
2172 (type == OP_RV2SV ? GvSV(gv) :
ad64d0ec
NC
2173 type == OP_RV2AV ? MUTABLE_SV(GvAV(gv)) :
2174 type == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(gv)),
1ce0b88c
RGS
2175 attrs, FALSE);
2176 }
192587c2 2177 o->op_private |= OPpOUR_INTRO;
77ca0c92 2178 return o;
95f0a2f1
SB
2179 }
2180 else if (type != OP_PADSV &&
93a17b20
LW
2181 type != OP_PADAV &&
2182 type != OP_PADHV &&
2183 type != OP_PUSHMARK)
2184 {
eb64745e 2185 yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
53e06cf0 2186 OP_DESC(o),
12bd6ede
DM
2187 PL_parser->in_my == KEY_our
2188 ? "our"
2189 : PL_parser->in_my == KEY_state ? "state" : "my"));
11343788 2190 return o;
93a17b20 2191 }
09bef843
SB
2192 else if (attrs && type != OP_PUSHMARK) {
2193 HV *stash;
09bef843 2194
12bd6ede
DM
2195 PL_parser->in_my = FALSE;
2196 PL_parser->in_my_stash = NULL;
eb64745e 2197
09bef843 2198 /* check for C<my Dog $spot> when deciding package */
dd2155a4
DM
2199 stash = PAD_COMPNAME_TYPE(o->op_targ);
2200 if (!stash)
09bef843 2201 stash = PL_curstash;
95f0a2f1 2202 apply_attrs_my(stash, o, attrs, imopsp);
09bef843 2203 }
11343788
MB
2204 o->op_flags |= OPf_MOD;
2205 o->op_private |= OPpLVAL_INTRO;
a1fba7eb 2206 if (stately)
952306ac 2207 o->op_private |= OPpPAD_STATE;
11343788 2208 return o;
93a17b20
LW
2209}
2210
2211OP *
09bef843
SB
2212Perl_my_attrs(pTHX_ OP *o, OP *attrs)
2213{
97aff369 2214 dVAR;
0bd48802 2215 OP *rops;
95f0a2f1
SB
2216 int maybe_scalar = 0;
2217
7918f24d
NC
2218 PERL_ARGS_ASSERT_MY_ATTRS;
2219
d2be0de5 2220/* [perl #17376]: this appears to be premature, and results in code such as
c754c3d7 2221 C< our(%x); > executing in list mode rather than void mode */
d2be0de5 2222#if 0
09bef843
SB
2223 if (o->op_flags & OPf_PARENS)
2224 list(o);
95f0a2f1
SB
2225 else
2226 maybe_scalar = 1;
d2be0de5
YST
2227#else
2228 maybe_scalar = 1;
2229#endif
09bef843
SB
2230 if (attrs)
2231 SAVEFREEOP(attrs);
5f66b61c 2232 rops = NULL;
95f0a2f1
SB
2233 o = my_kid(o, attrs, &rops);
2234 if (rops) {
2235 if (maybe_scalar && o->op_type == OP_PADSV) {
2fcb4757 2236 o = scalar(op_append_list(OP_LIST, rops, o));
95f0a2f1
SB
2237 o->op_private |= OPpLVAL_INTRO;
2238 }
f5d1ed10
FC
2239 else {
2240 /* The listop in rops might have a pushmark at the beginning,
2241 which will mess up list assignment. */
2242 LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
2243 if (rops->op_type == OP_LIST &&
2244 lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
2245 {
2246 OP * const pushmark = lrops->op_first;
2247 lrops->op_first = pushmark->op_sibling;
2248 op_free(pushmark);
2249 }
2fcb4757 2250 o = op_append_list(OP_LIST, o, rops);
f5d1ed10 2251 }
95f0a2f1 2252 }
12bd6ede
DM
2253 PL_parser->in_my = FALSE;
2254 PL_parser->in_my_stash = NULL;
eb64745e 2255 return o;
09bef843
SB
2256}
2257
2258OP *
864dbfa3 2259Perl_sawparens(pTHX_ OP *o)
79072805 2260{
96a5add6 2261 PERL_UNUSED_CONTEXT;
79072805
LW
2262 if (o)
2263 o->op_flags |= OPf_PARENS;
2264 return o;
2265}
2266
2267OP *
864dbfa3 2268Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
79072805 2269{
11343788 2270 OP *o;
59f00321 2271 bool ismatchop = 0;
1496a290
AL
2272 const OPCODE ltype = left->op_type;
2273 const OPCODE rtype = right->op_type;
79072805 2274
7918f24d
NC
2275 PERL_ARGS_ASSERT_BIND_MATCH;
2276
1496a290
AL
2277 if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV
2278 || ltype == OP_PADHV) && ckWARN(WARN_MISC))
041457d9 2279 {
1496a290 2280 const char * const desc
bb16bae8
FC
2281 = PL_op_desc[(
2282 rtype == OP_SUBST || rtype == OP_TRANS
2283 || rtype == OP_TRANSR
2284 )
666ea192
JH
2285 ? (int)rtype : OP_MATCH];
2286 const char * const sample = ((ltype == OP_RV2AV || ltype == OP_PADAV)
2287 ? "@array" : "%hash");
9014280d 2288 Perl_warner(aTHX_ packWARN(WARN_MISC),
1c846c1f 2289 "Applying %s to %s will act on scalar(%s)",
599cee73 2290 desc, sample, sample);
2ae324a7 2291 }
2292
1496a290 2293 if (rtype == OP_CONST &&
5cc9e5c9
RH
2294 cSVOPx(right)->op_private & OPpCONST_BARE &&
2295 cSVOPx(right)->op_private & OPpCONST_STRICT)
2296 {
2297 no_bareword_allowed(right);
2298 }
2299
bb16bae8 2300 /* !~ doesn't make sense with /r, so error on it for now */
4f4d7508
DC
2301 if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) &&
2302 type == OP_NOT)
2303 yyerror("Using !~ with s///r doesn't make sense");
bb16bae8
FC
2304 if (rtype == OP_TRANSR && type == OP_NOT)
2305 yyerror("Using !~ with tr///r doesn't make sense");
4f4d7508 2306
2474a784
FC
2307 ismatchop = (rtype == OP_MATCH ||
2308 rtype == OP_SUBST ||
bb16bae8 2309 rtype == OP_TRANS || rtype == OP_TRANSR)
2474a784 2310 && !(right->op_flags & OPf_SPECIAL);
59f00321
RGS
2311 if (ismatchop && right->op_private & OPpTARGET_MY) {
2312 right->op_targ = 0;
2313 right->op_private &= ~OPpTARGET_MY;
2314 }
2315 if (!(right->op_flags & OPf_STACKED) && ismatchop) {
1496a290
AL
2316 OP *newleft;
2317
79072805 2318 right->op_flags |= OPf_STACKED;
bb16bae8 2319 if (rtype != OP_MATCH && rtype != OP_TRANSR &&
1496a290 2320 ! (rtype == OP_TRANS &&
4f4d7508
DC
2321 right->op_private & OPpTRANS_IDENTICAL) &&
2322 ! (rtype == OP_SUBST &&
2323 (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT)))
3ad73efd 2324 newleft = op_lvalue(left, rtype);
1496a290
AL
2325 else
2326 newleft = left;
bb16bae8 2327 if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR)
1496a290 2328 o = newBINOP(OP_NULL, OPf_STACKED, scalar(newleft), right);
79072805 2329 else
2fcb4757 2330 o = op_prepend_elem(rtype, scalar(newleft), right);
79072805 2331 if (type == OP_NOT)
11343788
MB
2332 return newUNOP(OP_NOT, 0, scalar(o));
2333 return o;
79072805
LW
2334 }
2335 else
2336 return bind_match(type, left,
131b3ad0 2337 pmruntime(newPMOP(OP_MATCH, 0), right, 0));
79072805
LW
2338}
2339
2340OP *
864dbfa3 2341Perl_invert(pTHX_ OP *o)
79072805 2342{
11343788 2343 if (!o)
1d866c12 2344 return NULL;
11343788 2345 return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
79072805
LW
2346}
2347
3ad73efd
Z
2348/*
2349=for apidoc Amx|OP *|op_scope|OP *o
2350
2351Wraps up an op tree with some additional ops so that at runtime a dynamic
2352scope will be created. The original ops run in the new dynamic scope,
2353and then, provided that they exit normally, the scope will be unwound.
2354The additional ops used to create and unwind the dynamic scope will
2355normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
2356instead if the ops are simple enough to not need the full dynamic scope
2357structure.
2358
2359=cut
2360*/
2361
79072805 2362OP *
3ad73efd 2363Perl_op_scope(pTHX_ OP *o)
79072805 2364{
27da23d5 2365 dVAR;
79072805 2366 if (o) {
3280af22 2367 if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
2fcb4757 2368 o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
463ee0b2 2369 o->op_type = OP_LEAVE;
22c35a8c 2370 o->op_ppaddr = PL_ppaddr[OP_LEAVE];
463ee0b2 2371 }
fdb22418
HS
2372 else if (o->op_type == OP_LINESEQ) {
2373 OP *kid;
2374 o->op_type = OP_SCOPE;
2375 o->op_ppaddr = PL_ppaddr[OP_SCOPE];
2376 kid = ((LISTOP*)o)->op_first;
59110972 2377 if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) {
fdb22418 2378 op_null(kid);
59110972
RH
2379
2380 /* The following deals with things like 'do {1 for 1}' */
2381 kid = kid->op_sibling;
2382 if (kid &&
2383 (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE))
2384 op_null(kid);
2385 }
463ee0b2 2386 }
fdb22418 2387 else
5f66b61c 2388 o = newLISTOP(OP_SCOPE, 0, o, NULL);
79072805
LW
2389 }
2390 return o;
2391}
1930840b 2392
a0d0e21e 2393int
864dbfa3 2394Perl_block_start(pTHX_ int full)
79072805 2395{
97aff369 2396 dVAR;
73d840c0 2397 const int retval = PL_savestack_ix;
1930840b 2398
dd2155a4 2399 pad_block_start(full);
b3ac6de7 2400 SAVEHINTS();
3280af22 2401 PL_hints &= ~HINT_BLOCK_SCOPE;
68da3b2f 2402 SAVECOMPILEWARNINGS();
72dc9ed5 2403 PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
1930840b 2404
a88d97bf 2405 CALL_BLOCK_HOOKS(bhk_start, full);
1930840b 2406
a0d0e21e
LW
2407 return retval;
2408}
2409
2410OP*
864dbfa3 2411Perl_block_end(pTHX_ I32 floor, OP *seq)
a0d0e21e 2412{
97aff369 2413 dVAR;
6867be6d 2414 const int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
1930840b
BM
2415 OP* retval = scalarseq(seq);
2416
a88d97bf 2417 CALL_BLOCK_HOOKS(bhk_pre_end, &retval);
1930840b 2418
e9818f4e 2419 LEAVE_SCOPE(floor);
623e6609 2420 CopHINTS_set(&PL_compiling, PL_hints);
a0d0e21e 2421 if (needblockscope)
3280af22 2422 PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
dd2155a4 2423 pad_leavemy();
1930840b 2424
a88d97bf 2425 CALL_BLOCK_HOOKS(bhk_post_end, &retval);
1930840b 2426
a0d0e21e
LW
2427 return retval;
2428}
2429
fd85fad2
BM
2430/*
2431=head1 Compile-time scope hooks
2432
3e4ddde5 2433=for apidoc Aox||blockhook_register
fd85fad2
BM
2434
2435Register a set of hooks to be called when the Perl lexical scope changes
2436at compile time. See L<perlguts/"Compile-time scope hooks">.
2437
2438=cut
2439*/
2440
bb6c22e7
BM
2441void
2442Perl_blockhook_register(pTHX_ BHK *hk)
2443{
2444 PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER;
2445
2446 Perl_av_create_and_push(aTHX_ &PL_blockhooks, newSViv(PTR2IV(hk)));
2447}
2448
76e3520e 2449STATIC OP *
cea2e8a9 2450S_newDEFSVOP(pTHX)
54b9620d 2451{
97aff369 2452 dVAR;
cc76b5cc 2453 const PADOFFSET offset = pad_findmy_pvs("$_", 0);
00b1698f 2454 if (offset == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(offset)) {
59f00321
RGS
2455 return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
2456 }
2457 else {
551405c4 2458 OP * const o = newOP(OP_PADSV, 0);
59f00321
RGS
2459 o->op_targ = offset;
2460 return o;
2461 }
54b9620d
MB
2462}
2463
a0d0e21e 2464void
864dbfa3 2465Perl_newPROG(pTHX_ OP *o)
a0d0e21e 2466{
97aff369 2467 dVAR;
7918f24d
NC
2468
2469 PERL_ARGS_ASSERT_NEWPROG;
2470
3280af22 2471 if (PL_in_eval) {
b295d113
TH
2472 if (PL_eval_root)
2473 return;
faef0170
HS
2474 PL_eval_root = newUNOP(OP_LEAVEEVAL,
2475 ((PL_in_eval & EVAL_KEEPERR)
2476 ? OPf_SPECIAL : 0), o);
5983a79d
BM
2477 /* don't use LINKLIST, since PL_eval_root might indirect through
2478 * a rather expensive function call and LINKLIST evaluates its
2479 * argument more than once */
2480 PL_eval_start = op_linklist(PL_eval_root);
7934575e
GS
2481 PL_eval_root->op_private |= OPpREFCOUNTED;
2482 OpREFCNT_set(PL_eval_root, 1);
3280af22 2483 PL_eval_root->op_next = 0;
a2efc822 2484 CALL_PEEP(PL_eval_start);
a0d0e21e
LW
2485 }
2486 else {
6be89cf9
AE
2487 if (o->op_type == OP_STUB) {
2488 PL_comppad_name = 0;
2489 PL_compcv = 0;
d2c837a0 2490 S_op_destroy(aTHX_ o);
a0d0e21e 2491 return;
6be89cf9 2492 }
3ad73efd 2493 PL_main_root = op_scope(sawparens(scalarvoid(o)));
3280af22
NIS
2494 PL_curcop = &PL_compiling;
2495 PL_main_start = LINKLIST(PL_main_root);
7934575e
GS
2496 PL_main_root->op_private |= OPpREFCOUNTED;
2497 OpREFCNT_set(PL_main_root, 1);
3280af22 2498 PL_main_root->op_next = 0;
a2efc822 2499 CALL_PEEP(PL_main_start);
3280af22 2500 PL_compcv = 0;
3841441e 2501
4fdae800 2502 /* Register with debugger */
84902520 2503 if (PERLDB_INTER) {
b96d8cd9 2504 CV * const cv = get_cvs("DB::postponed", 0);
3841441e
CS
2505 if (cv) {
2506 dSP;
924508f0 2507 PUSHMARK(SP);
ad64d0ec 2508 XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling)));
3841441e 2509 PUTBACK;
ad64d0ec 2510 call_sv(MUTABLE_SV(cv), G_DISCARD);
3841441e
CS
2511 }
2512 }
79072805 2513 }
79072805
LW
2514}
2515
2516OP *
864dbfa3 2517Perl_localize(pTHX_ OP *o, I32 lex)
79072805 2518{
97aff369 2519 dVAR;
7918f24d
NC
2520
2521 PERL_ARGS_ASSERT_LOCALIZE;
2522
79072805 2523 if (o->op_flags & OPf_PARENS)
d2be0de5
YST
2524/* [perl #17376]: this appears to be premature, and results in code such as
2525 C< our(%x); > executing in list mode rather than void mode */
2526#if 0
79072805 2527 list(o);
d2be0de5 2528#else
6f207bd3 2529 NOOP;
d2be0de5 2530#endif
8990e307 2531 else {
f06b5848
DM
2532 if ( PL_parser->bufptr > PL_parser->oldbufptr
2533 && PL_parser->bufptr[-1] == ','
041457d9 2534 && ckWARN(WARN_PARENTHESIS))
64420d0d 2535 {
f06b5848 2536 char *s = PL_parser->bufptr;
bac662ee 2537 bool sigil = FALSE;
64420d0d 2538
8473848f 2539 /* some heuristics to detect a potential error */
bac662ee 2540 while (*s && (strchr(", \t\n", *s)))
64420d0d 2541 s++;
8473848f 2542
bac662ee
TS
2543 while (1) {
2544 if (*s && strchr("@$%*", *s) && *++s
2545 && (isALNUM(*s) || UTF8_IS_CONTINUED(*s))) {
2546 s++;
2547 sigil = TRUE;
2548 while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s)))
2549 s++;
2550 while (*s && (strchr(", \t\n", *s)))
2551 s++;
2552 }
2553 else
2554 break;
2555 }
2556 if (sigil && (*s == ';' || *s == '=')) {
2557 Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS),
8473848f 2558 "Parentheses missing around \"%s\" list",
12bd6ede
DM
2559 lex
2560 ? (PL_parser->in_my == KEY_our
2561 ? "our"
2562 : PL_parser->in_my == KEY_state
2563 ? "state"
2564 : "my")
2565 : "local");
8473848f 2566 }
8990e307
LW
2567 }
2568 }
93a17b20 2569 if (lex)
eb64745e 2570 o = my(o);
93a17b20 2571 else
3ad73efd 2572 o = op_lvalue(o, OP_NULL); /* a bit kludgey */
12bd6ede
DM
2573 PL_parser->in_my = FALSE;
2574 PL_parser->in_my_stash = NULL;
eb64745e 2575 return o;
79072805
LW
2576}
2577
2578OP *
864dbfa3 2579Perl_jmaybe(pTHX_ OP *o)
79072805 2580{
7918f24d
NC
2581 PERL_ARGS_ASSERT_JMAYBE;
2582
79072805 2583 if (o->op_type == OP_LIST) {
fafc274c 2584 OP * const o2
d4c19fe8 2585 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV)));
2fcb4757 2586 o = convert(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o));
79072805
LW
2587 }
2588 return o;
2589}
2590
1f676739 2591static OP *
b7783a12 2592S_fold_constants(pTHX_ register OP *o)
79072805 2593{
27da23d5 2594 dVAR;
001d637e 2595 register OP * VOL curop;
eb8433b7 2596 OP *newop;
8ea43dc8 2597 VOL I32 type = o->op_type;
e3cbe32f 2598 SV * VOL sv = NULL;
b7f7fd0b
NC
2599 int ret = 0;
2600 I32 oldscope;
2601 OP *old_next;
5f2d9966
DM
2602 SV * const oldwarnhook = PL_warnhook;
2603 SV * const olddiehook = PL_diehook;
c427f4d2 2604 COP not_compiling;
b7f7fd0b 2605 dJMPENV;
79072805 2606
7918f24d
NC
2607 PERL_ARGS_ASSERT_FOLD_CONSTANTS;
2608
22c35a8c 2609 if (PL_opargs[type] & OA_RETSCALAR)
79072805 2610 scalar(o);
b162f9ea 2611 if (PL_opargs[type] & OA_TARGET && !o->op_targ)
ed6116ce 2612 o->op_targ = pad_alloc(type, SVs_PADTMP);
79072805 2613
eac055e9
GS
2614 /* integerize op, unless it happens to be C<-foo>.
2615 * XXX should pp_i_negate() do magic string negation instead? */
2616 if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
2617 && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
2618 && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
2619 {
22c35a8c 2620 o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
eac055e9 2621 }
85e6fe83 2622
22c35a8c 2623 if (!(PL_opargs[type] & OA_FOLDCONST))
79072805
LW
2624 goto nope;
2625
de939608 2626 switch (type) {
7a52d87a
GS
2627 case OP_NEGATE:
2628 /* XXX might want a ck_negate() for this */
2629 cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
2630 break;
de939608
CS
2631 case OP_UCFIRST:
2632 case OP_LCFIRST:
2633 case OP_UC:
2634 case OP_LC:
69dcf70c
MB
2635 case OP_SLT:
2636 case OP_SGT:
2637 case OP_SLE:
2638 case OP_SGE:
2639 case OP_SCMP:
b3fd6149 2640 case OP_SPRINTF:
2de3dbcc
JH
2641 /* XXX what about the numeric ops? */
2642 if (PL_hints & HINT_LOCALE)
de939608 2643 goto nope;
553e7bb0 2644 break;
de939608
CS
2645 }
2646
13765c85 2647 if (PL_parser && PL_parser->error_count)
a0d0e21e
LW
2648 goto nope; /* Don't try to run w/ errors */
2649
79072805 2650 for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
1496a290
AL
2651 const OPCODE type = curop->op_type;
2652 if ((type != OP_CONST || (curop->op_private & OPpCONST_BARE)) &&
2653 type != OP_LIST &&
2654 type != OP_SCALAR &&
2655 type != OP_NULL &&
2656 type != OP_PUSHMARK)
7a52d87a 2657 {
79072805
LW
2658 goto nope;
2659 }
2660 }
2661
2662 curop = LINKLIST(o);
b7f7fd0b 2663 old_next = o->op_next;
79072805 2664 o->op_next = 0;
533c011a 2665 PL_op = curop;
b7f7fd0b
NC
2666
2667 oldscope = PL_scopestack_ix;
edb2152a 2668 create_eval_scope(G_FAKINGEVAL);
b7f7fd0b 2669
c427f4d2
NC
2670 /* Verify that we don't need to save it: */
2671 assert(PL_curcop == &PL_compiling);
2672 StructCopy(&PL_compiling, &not_compiling, COP);
2673 PL_curcop = &not_compiling;
2674 /* The above ensures that we run with all the correct hints of the
2675 currently compiling COP, but that IN_PERL_RUNTIME is not true. */
2676 assert(IN_PERL_RUNTIME);
5f2d9966
DM
2677 PL_warnhook = PERL_WARNHOOK_FATAL;
2678 PL_diehook = NULL;
b7f7fd0b
NC
2679 JMPENV_PUSH(ret);
2680
2681 switch (ret) {
2682 case 0:
2683 CALLRUNOPS(aTHX);
2684 sv = *(PL_stack_sp--);
523a0f0c
NC
2685 if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */
2686#ifdef PERL_MAD
2687 /* Can't simply swipe the SV from the pad, because that relies on
2688 the op being freed "real soon now". Under MAD, this doesn't
2689 happen (see the #ifdef below). */
2690 sv = newSVsv(sv);
2691#else
b7f7fd0b 2692 pad_swipe(o->op_targ, FALSE);
523a0f0c
NC
2693#endif
2694 }
b7f7fd0b
NC
2695 else if (SvTEMP(sv)) { /* grab mortal temp? */
2696 SvREFCNT_inc_simple_void(sv);
2697 SvTEMP_off(sv);
2698 }
2699 break;
2700 case 3:
2701 /* Something tried to die. Abandon constant folding. */
2702 /* Pretend the error never happened. */
ab69dbc2 2703 CLEAR_ERRSV();
b7f7fd0b
NC
2704 o->op_next = old_next;
2705 break;
2706 default:
2707 JMPENV_POP;
5f2d9966
DM
2708 /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */
2709 PL_warnhook = oldwarnhook;
2710 PL_diehook = olddiehook;
2711 /* XXX note that this croak may fail as we've already blown away
2712 * the stack - eg any nested evals */
b7f7fd0b
NC
2713 Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret);
2714 }
b7f7fd0b 2715 JMPENV_POP;
5f2d9966
DM
2716 PL_warnhook = oldwarnhook;
2717 PL_diehook = olddiehook;
c427f4d2 2718 PL_curcop = &PL_compiling;
edb2152a
NC
2719
2720 if (PL_scopestack_ix > oldscope)
2721 delete_eval_scope();
eb8433b7 2722
b7f7fd0b
NC
2723 if (ret)
2724 goto nope;
2725
eb8433b7 2726#ifndef PERL_MAD
79072805 2727 op_free(o);
eb8433b7 2728#endif
de5e01c2 2729 assert(sv);
79072805 2730 if (type == OP_RV2GV)
159b6efe 2731 newop = newGVOP(OP_GV, 0, MUTABLE_GV(sv));
eb8433b7 2732 else
ad64d0ec 2733 newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv));
eb8433b7
NC
2734 op_getmad(o,newop,'f');
2735 return newop;
aeea060c 2736
b7f7fd0b 2737 nope:
79072805
LW
2738 return o;
2739}
2740
1f676739 2741static OP *
b7783a12 2742S_gen_constant_list(pTHX_ register OP *o)
79072805 2743{
27da23d5 2744 dVAR;
79072805 2745 register OP *curop;
6867be6d 2746 const I32 oldtmps_floor = PL_tmps_floor;
79072805 2747
a0d0e21e 2748 list(o);
13765c85 2749 if (PL_parser && PL_parser->error_count)
a0d0e21e
LW
2750 return o; /* Don't attempt to run with errors */
2751
533c011a 2752 PL_op = curop = LINKLIST(o);
a0d0e21e 2753 o->op_next = 0;
a2efc822 2754 CALL_PEEP(curop);
897d3989 2755 Perl_pp_pushmark(aTHX);
cea2e8a9 2756 CALLRUNOPS(aTHX);
533c011a 2757 PL_op = curop;
78c72037
NC
2758 assert (!(curop->op_flags & OPf_SPECIAL));
2759 assert(curop->op_type == OP_RANGE);
897d3989 2760 Perl_pp_anonlist(aTHX);
3280af22 2761 PL_tmps_floor = oldtmps_floor;
79072805
LW
2762
2763 o->op_type = OP_RV2AV;
22c35a8c 2764 o->op_ppaddr = PL_ppaddr[OP_RV2AV];
fb53bbb2
SG
2765 o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
2766 o->op_flags |= OPf_PARENS; /* and flatten \(1..2,3) */
1a0a2ba9 2767 o->op_opt = 0; /* needs to be revisited in rpeep() */
79072805 2768 curop = ((UNOP*)o)->op_first;
b37c2d43 2769 ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(*PL_stack_sp--));
eb8433b7
NC
2770#ifdef PERL_MAD
2771 op_getmad(curop,o,'O');
2772#else
79072805 2773 op_free(curop);
eb8433b7 2774#endif
5983a79d 2775 LINKLIST(o);
79072805
LW
2776 return list(o);
2777}
2778
2779OP *
864dbfa3 2780Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
79072805 2781{
27da23d5 2782 dVAR;
11343788 2783 if (!o || o->op_type != OP_LIST)
5f66b61c 2784 o = newLISTOP(OP_LIST, 0, o, NULL);
748a9306 2785 else
5dc0d613 2786 o->op_flags &= ~OPf_WANT;
79072805 2787
22c35a8c 2788 if (!(PL_opargs[type] & OA_MARK))
93c66552 2789 op_null(cLISTOPo->op_first);
8990e307 2790
eb160463 2791 o->op_type = (OPCODE)type;
22c35a8c 2792 o->op_ppaddr = PL_ppaddr[type];
11343788 2793 o->op_flags |= flags;
79072805 2794
11343788 2795 o = CHECKOP(type, o);
fe2774ed 2796 if (o->op_type != (unsigned)type)
11343788 2797 return o;
79072805 2798
11343788 2799 return fold_constants(o);
79072805
LW
2800}
2801
2fcb4757
Z
2802/*
2803=head1 Optree Manipulation Functions
2804*/
2805
79072805
LW
2806/* List constructors */
2807
2fcb4757
Z
2808/*
2809=for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
2810
2811Append an item to the list of ops contained directly within a list-type
2812op, returning the lengthened list. I<first> is the list-type op,
2813and I<last> is the op to append to the list. I<optype> specifies the
2814intended opcode for the list. If I<first> is not already a list of the
2815right type, it will be upgraded into one. If either I<first> or I<last>
2816is null, the other is returned unchanged.
2817
2818=cut
2819*/
2820
79072805 2821OP *
2fcb4757 2822Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
79072805
LW
2823{
2824 if (!first)
2825 return last;
8990e307
LW
2826
2827 if (!last)
79072805 2828 return first;
8990e307 2829
fe2774ed 2830 if (first->op_type != (unsigned)type
155aba94
GS
2831 || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
2832 {
2833 return newLISTOP(type, 0, first, last);
2834 }
79072805 2835
a0d0e21e
LW
2836 if (first->op_flags & OPf_KIDS)
2837 ((LISTOP*)first)->op_last->op_sibling = last;
2838 else {
2839 first->op_flags |= OPf_KIDS;
2840 ((LISTOP*)first)->op_first = last;
2841 }
2842 ((LISTOP*)first)->op_last = last;
a0d0e21e 2843 return first;
79072805
LW
2844}
2845
2fcb4757
Z
2846/*
2847=for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
2848
2849Concatenate the lists of ops contained directly within two list-type ops,
2850returning the combined list. I<first> and I<last> are the list-type ops
2851to concatenate. I<optype> specifies the intended opcode for the list.
2852If either I<first> or I<last> is not already a list of the right type,
2853it will be upgraded into one. If either I<first> or I<last> is null,
2854the other is returned unchanged.
2855
2856=cut
2857*/
2858
79072805 2859OP *
2fcb4757 2860Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
79072805
LW
2861{
2862 if (!first)
2fcb4757 2863 return last;
8990e307
LW
2864
2865 if (!last)
2fcb4757 2866 return first;
8990e307 2867
fe2774ed 2868 if (first->op_type != (unsigned)type)
2fcb4757 2869 return op_prepend_elem(type, first, last);
8990e307 2870
fe2774ed 2871 if (last->op_type != (unsigned)type)
2fcb4757 2872 return op_append_elem(type, first, last);
79072805 2873
2fcb4757
Z
2874 ((LISTOP*)first)->op_last->op_sibling = ((LISTOP*)last)->op_first;
2875 ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last;
117dada2 2876 first->op_flags |= (last->op_flags & OPf_KIDS);
1c846c1f 2877
eb8433b7 2878#ifdef PERL_MAD
2fcb4757
Z
2879 if (((LISTOP*)last)->op_first && first->op_madprop) {
2880 MADPROP *mp = ((LISTOP*)last)->op_first->op_madprop;
eb8433b7
NC
2881 if (mp) {
2882 while (mp->mad_next)
2883 mp = mp->mad_next;
2884 mp->mad_next = first->op_madprop;
2885 }
2886 else {
2fcb4757 2887 ((LISTOP*)last)->op_first->op_madprop = first->op_madprop;
eb8433b7
NC
2888 }
2889 }
2890 first->op_madprop = last->op_madprop;
2891 last->op_madprop = 0;
2892#endif
2893
2fcb4757 2894 S_op_destroy(aTHX_ last);
238a4c30 2895
2fcb4757 2896 return first;
79072805
LW
2897}
2898
2fcb4757
Z
2899/*
2900=for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
2901
2902Prepend an item to the list of ops contained directly within a list-type
2903op, returning the lengthened list. I<first> is the op to prepend to the
2904list, and I<last> is the list-type op. I<optype> specifies the intended
2905opcode for the list. If I<last> is not already a list of the right type,
2906it will be upgraded into one. If either I<first> or I<last> is null,
2907the other is returned unchanged.
2908
2909=cut
2910*/
2911
79072805 2912OP *
2fcb4757 2913Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
79072805
LW
2914{
2915 if (!first)
2916 return last;
8990e307
LW
2917
2918 if (!last)
79072805 2919 return first;
8990e307 2920
fe2774ed 2921 if (last->op_type == (unsigned)type) {
8990e307
LW
2922 if (type == OP_LIST) { /* already a PUSHMARK there */
2923 first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
2924 ((LISTOP*)last)->op_first->op_sibling = first;
36a5d4ba
DC
2925 if (!(first->op_flags & OPf_PARENS))
2926 last->op_flags &= ~OPf_PARENS;
8990e307
LW
2927 }
2928 else {
2929 if (!(last->op_flags & OPf_KIDS)) {
2930 ((LISTOP*)last)->op_last = first;
2931 last->op_flags |= OPf_KIDS;
2932 }
2933 first->op_sibling = ((LISTOP*)last)->op_first;
2934 ((LISTOP*)last)->op_first = first;
79072805 2935 }
117dada2 2936 last->op_flags |= OPf_KIDS;
79072805
LW
2937 return last;
2938 }
2939
2940 return newLISTOP(type, 0, first, last);
2941}
2942
2943/* Constructors */
2944
eb8433b7
NC
2945#ifdef PERL_MAD
2946
2947TOKEN *
2948Perl_newTOKEN(pTHX_ I32 optype, YYSTYPE lval, MADPROP* madprop)
2949{
2950 TOKEN *tk;
99129197 2951 Newxz(tk, 1, TOKEN);
eb8433b7
NC
2952 tk->tk_type = (OPCODE)optype;
2953 tk->tk_type = 12345;
2954 tk->tk_lval = lval;
2955 tk->tk_mad = madprop;
2956 return tk;
2957}
2958
2959void
2960Perl_token_free(pTHX_ TOKEN* tk)
2961{
7918f24d
NC
2962 PERL_ARGS_ASSERT_TOKEN_FREE;
2963
eb8433b7
NC
2964 if (tk->tk_type != 12345)
2965 return;
2966 mad_free(tk->tk_mad);
2967 Safefree(tk);
2968}
2969
2970void
2971Perl_token_getmad(pTHX_ TOKEN* tk, OP* o, char slot)
2972{
2973 MADPROP* mp;
2974 MADPROP* tm;
7918f24d
NC
2975
2976 PERL_ARGS_ASSERT_TOKEN_GETMAD;
2977
eb8433b7
NC
2978 if (tk->tk_type != 12345) {
2979 Perl_warner(aTHX_ packWARN(WARN_MISC),
2980 "Invalid TOKEN object ignored");
2981 return;
2982 }
2983 tm = tk->tk_mad;
2984 if (!tm)
2985 return;
2986
2987 /* faked up qw list? */
2988 if (slot == '(' &&
2989 tm->mad_type == MAD_SV &&
d503a9ba 2990 SvPVX((SV *)tm->mad_val)[0] == 'q')
eb8433b7
NC
2991 slot = 'x';
2992
2993 if (o) {
2994 mp = o->op_madprop;
2995 if (mp) {
2996 for (;;) {
2997 /* pretend constant fold didn't happen? */
2998 if (mp->mad_key == 'f' &&
2999 (o->op_type == OP_CONST ||
3000 o->op_type == OP_GV) )
3001 {
3002 token_getmad(tk,(OP*)mp->mad_val,slot);
3003 return;
3004 }
3005 if (!mp->mad_next)
3006 break;
3007 mp = mp->mad_next;
3008 }
3009 mp->mad_next = tm;
3010 mp = mp->mad_next;
3011 }
3012 else {
3013 o->op_madprop = tm;
3014 mp = o->op_madprop;
3015 }
3016 if (mp->mad_key == 'X')
3017 mp->mad_key = slot; /* just change the first one */
3018
3019 tk->tk_mad = 0;
3020 }
3021 else
3022 mad_free(tm);
3023 Safefree(tk);
3024}
3025
3026void
3027Perl_op_getmad_weak(pTHX_ OP* from, OP* o, char slot)
3028{
3029 MADPROP* mp;
3030 if (!from)
3031 return;
3032 if (o) {
3033 mp = o->op_madprop;
3034 if (mp) {
3035 for (;;) {
3036 /* pretend constant fold didn't happen? */
3037 if (mp->mad_key == 'f' &&
3038 (o->op_type == OP_CONST ||
3039 o->op_type == OP_GV) )
3040 {
3041 op_getmad(from,(OP*)mp->mad_val,slot);
3042 return;
3043 }
3044 if (!mp->mad_next)
3045 break;
3046 mp = mp->mad_next;
3047 }
3048 mp->mad_next = newMADPROP(slot,MAD_OP,from,0);
3049 }
3050 else {
3051 o->op_madprop = newMADPROP(slot,MAD_OP,from,0);
3052 }
3053 }
3054}
3055
3056void
3057Perl_op_getmad(pTHX_ OP* from, OP* o, char slot)
3058{
3059 MADPROP* mp;
3060 if (!from)
3061 return;
3062 if (o) {
3063 mp = o->op_madprop;
3064 if (mp) {
3065 for (;;) {
3066 /* pretend constant fold didn't happen? */
3067 if (mp->mad_key == 'f' &&
3068 (o->op_type == OP_CONST ||
3069 o->op_type == OP_GV) )
3070 {
3071 op_getmad(from,(OP*)mp->mad_val,slot);
3072 return;
3073 }
3074 if (!mp->mad_next)
3075 break;
3076 mp = mp->mad_next;
3077 }
3078 mp->mad_next = newMADPROP(slot,MAD_OP,from,1);
3079 }
3080 else {
3081 o->op_madprop = newMADPROP(slot,MAD_OP,from,1);
3082 }
3083 }
3084 else {
99129197
NC
3085 PerlIO_printf(PerlIO_stderr(),
3086 "DESTROYING op = %0"UVxf"\n", PTR2UV(from));
eb8433b7
NC
3087 op_free(from);
3088 }
3089}
3090
3091void
3092Perl_prepend_madprops(pTHX_ MADPROP* mp, OP* o, char slot)
3093{
3094 MADPROP* tm;
3095 if (!mp || !o)
3096 return;
3097 if (slot)
3098 mp->mad_key = slot;
3099 tm = o->op_madprop;
3100 o->op_madprop = mp;
3101 for (;;) {
3102 if (!mp->mad_next)
3103 break;
3104 mp = mp->mad_next;
3105 }
3106 mp->mad_next = tm;
3107}
3108
3109void
3110Perl_append_madprops(pTHX_ MADPROP* tm, OP* o, char slot)
3111{
3112 if (!o)
3113 return;
3114 addmad(tm, &(o->op_madprop), slot);
3115}
3116
3117void
3118Perl_addmad(pTHX_ MADPROP* tm, MADPROP** root, char slot)
3119{
3120 MADPROP* mp;
3121 if (!tm || !root)
3122 return;
3123 if (slot)
3124 tm->mad_key = slot;
3125 mp = *root;
3126 if (!mp) {
3127 *root = tm;
3128 return;
3129 }
3130 for (;;) {
3131 if (!mp->mad_next)
3132 break;
3133 mp = mp->mad_next;
3134 }
3135 mp->mad_next = tm;
3136}
3137
3138MADPROP *
3139Perl_newMADsv(pTHX_ char key, SV* sv)
3140{
7918f24d
NC
3141 PERL_ARGS_ASSERT_NEWMADSV;
3142
eb8433b7
NC
3143 return newMADPROP(key, MAD_SV, sv, 0);
3144}
3145
3146MADPROP *
d503a9ba 3147Perl_newMADPROP(pTHX_ char key, char type, void* val, I32 vlen)
eb8433b7 3148{
c111d5f1 3149 MADPROP *const mp = (MADPROP *) PerlMemShared_malloc(sizeof(MADPROP));
eb8433b7
NC
3150 mp->mad_next = 0;
3151 mp->mad_key = key;
3152 mp->mad_vlen = vlen;
3153 mp->mad_type = type;
3154 mp->mad_val = val;
3155/* PerlIO_printf(PerlIO_stderr(), "NEW mp = %0x\n", mp); */
3156 return mp;
3157}
3158
3159void
3160Perl_mad_free(pTHX_ MADPROP* mp)
3161{
3162/* PerlIO_printf(PerlIO_stderr(), "FREE mp = %0x\n", mp); */
3163 if (!mp)
3164 return;
3165 if (mp->mad_next)
3166 mad_free(mp->mad_next);
bc177e6b 3167/* if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING && mp->mad_vlen)
eb8433b7
NC
3168 PerlIO_printf(PerlIO_stderr(), "DESTROYING '%c'=<%s>\n", mp->mad_key & 255, mp->mad_val); */
3169 switch (mp->mad_type) {
3170 case MAD_NULL:
3171 break;
3172 case MAD_PV:
3173 Safefree((char*)mp->mad_val);
3174 break;
3175 case MAD_OP:
3176 if (mp->mad_vlen) /* vlen holds "strong/weak" boolean */
3177 op_free((OP*)mp->mad_val);
3178 break;
3179 case MAD_SV:
ad64d0ec 3180 sv_free(MUTABLE_SV(mp->mad_val));
eb8433b7
NC
3181 break;
3182 default:
3183 PerlIO_printf(PerlIO_stderr(), "Unrecognized mad\n");
3184 break;
3185 }
c111d5f1 3186 PerlMemShared_free(mp);
eb8433b7
NC
3187}
3188
3189#endif
3190
d67eb5f4
Z
3191/*
3192=head1 Optree construction
3193
3194=for apidoc Am|OP *|newNULLLIST
3195
3196Constructs, checks, and returns a new C<stub> op, which represents an
3197empty list expression.
3198
3199=cut
3200*/
3201
79072805 3202OP *
864dbfa3 3203Perl_newNULLLIST(pTHX)
79072805 3204{
8990e307
LW
3205 return newOP(OP_STUB, 0);
3206}
3207
1f676739 3208static OP *
b7783a12 3209S_force_list(pTHX_ OP *o)
8990e307 3210{
11343788 3211 if (!o || o->op_type != OP_LIST)
5f66b61c 3212 o = newLISTOP(OP_LIST, 0, o, NULL);
93c66552 3213 op_null(o);
11343788 3214 return o;
79072805
LW
3215}
3216
d67eb5f4
Z
3217/*
3218=for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
3219
3220Constructs, checks, and returns an op of any list type. I<type> is
3221the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3222C<OPf_KIDS> will be set automatically if required. I<first> and I<last>
3223supply up to two ops to be direct children of the list op; they are
3224consumed by this function and become part of the constructed op tree.
3225
3226=cut
3227*/
3228
79072805 3229OP *
864dbfa3 3230Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
79072805 3231{
27da23d5 3232 dVAR;
79072805
LW
3233 LISTOP *listop;
3234
e69777c1
GG
3235 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP);
3236
b7dc083c 3237 NewOp(1101, listop, 1, LISTOP);
79072805 3238
eb160463 3239 listop->op_type = (OPCODE)type;
22c35a8c 3240 listop->op_ppaddr = PL_ppaddr[type];
117dada2
SM
3241 if (first || last)
3242 flags |= OPf_KIDS;
eb160463 3243 listop->op_flags = (U8)flags;
79072805
LW
3244
3245 if (!last && first)
3246 last = first;
3247 else if (!first && last)
3248 first = last;
8990e307
LW
3249 else if (first)
3250 first->op_sibling = last;
79072805
LW
3251 listop->op_first = first;
3252 listop->op_last = last;
8990e307 3253 if (type == OP_LIST) {
551405c4 3254 OP* const pushop = newOP(OP_PUSHMARK, 0);
8990e307
LW
3255 pushop->op_sibling = first;
3256 listop->op_first = pushop;
3257 listop->op_flags |= OPf_KIDS;
3258 if (!last)
3259 listop->op_last = pushop;
3260 }
79072805 3261
463d09e6 3262 return CHECKOP(type, listop);
79072805
LW
3263}
3264
d67eb5f4
Z
3265/*
3266=for apidoc Am|OP *|newOP|I32 type|I32 flags
3267
3268Constructs, checks, and returns an op of any base type (any type that
3269has no extra fields). I<type> is the opcode. I<flags> gives the
3270eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
3271of C<op_private>.
3272
3273=cut
3274*/
3275
79072805 3276OP *
864dbfa3 3277Perl_newOP(pTHX_ I32 type, I32 flags)
79072805 3278{
27da23d5 3279 dVAR;
11343788 3280 OP *o;
e69777c1
GG
3281
3282 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP
3283 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3284 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3285 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP);
3286
b7dc083c 3287 NewOp(1101, o, 1, OP);
eb160463 3288 o->op_type = (OPCODE)type;
22c35a8c 3289 o->op_ppaddr = PL_ppaddr[type];
eb160463 3290 o->op_flags = (U8)flags;
670f3923
DM
3291 o->op_latefree = 0;
3292 o->op_latefreed = 0;
7e5d8ed2 3293 o->op_attached = 0;
79072805 3294
11343788 3295 o->op_next = o;
eb160463 3296 o->op_private = (U8)(0 | (flags >> 8));
22c35a8c 3297 if (PL_opargs[type] & OA_RETSCALAR)
11343788 3298 scalar(o);
22c35a8c 3299 if (PL_opargs[type] & OA_TARGET)
11343788
MB
3300 o->op_targ = pad_alloc(type, SVs_PADTMP);
3301 return CHECKOP(type, o);
79072805
LW
3302}
3303
d67eb5f4
Z
3304/*
3305=for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
3306
3307Constructs, checks, and returns an op of any unary type. I<type> is
3308the opcode. I<flags> gives the eight bits of C<op_flags>, except that
3309C<OPf_KIDS> will be set automatically if required, and, shifted up eight
3310bits, the eight bits of C<op_private>, except that the bit with value 1
3311is automatically set. I<first> supplies an optional op to be the direct
3312child of the unary op; it is consumed by this function and become part
3313of the constructed op tree.
3314
3315=cut
3316*/
3317
79072805 3318OP *
864dbfa3 3319Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
79072805 3320{
27da23d5 3321 dVAR;
79072805
LW
3322 UNOP *unop;
3323
e69777c1
GG
3324 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP
3325 || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP
3326 || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP
3327 || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP
3328 || type == OP_SASSIGN
32e2a35d 3329 || type == OP_ENTERTRY
e69777c1
GG
3330 || type == OP_NULL );
3331
93a17b20 3332 if (!first)
aeea060c 3333 first = newOP(OP_STUB, 0);
22c35a8c 3334 if (PL_opargs[type] & OA_MARK)
8990e307 3335 first = force_list(first);
93a17b20 3336
b7dc083c 3337 NewOp(1101, unop, 1, UNOP);
eb160463 3338 unop->op_type = (OPCODE)type;
22c35a8c 3339 unop->op_ppaddr = PL_ppaddr[type];
79072805 3340 unop->op_first = first;
585ec06d 3341 unop->op_flags = (U8)(flags | OPf_KIDS);
eb160463 3342 unop->op_private = (U8)(1 | (flags >> 8));
e50aee73 3343 unop = (UNOP*) CHECKOP(type, unop);
79072805
LW
3344 if (unop->op_next)
3345 return (OP*)unop;
3346
a0d0e21e 3347 return fold_constants((OP *) unop);
79072805
LW
3348}
3349
d67eb5f4
Z
3350/*
3351=for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
3352
3353Constructs, checks, and returns an op of any binary type. I<type>
3354is the opcode. I<flags> gives the eight bits of C<op_flags>, except
3355that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
3356the eight bits of C<op_private>, except that the bit with value 1 or
33572 is automatically set as required. I<first> and I<last> supply up to
3358two ops to be the direct children of the binary op; they are consumed
3359by this function and become part of the constructed op tree.
3360
3361=cut
3362*/
3363
79072805 3364OP *
864dbfa3 3365Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
79072805 3366{
27da23d5 3367 dVAR;
79072805 3368 BINOP *binop;
e69777c1
GG
3369
3370 assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP
3371 || type == OP_SASSIGN || type == OP_NULL );
3372
b7dc083c 3373 NewOp(1101, binop, 1, BINOP);
79072805
LW
3374
3375 if (!first)
3376 first = newOP(OP_NULL, 0);
3377
eb160463 3378 binop->op_type = (OPCODE)type;
22c35a8c 3379 binop->op_ppaddr = PL_ppaddr[type];
79072805 3380 binop->op_first = first;
585ec06d 3381 binop->op_flags = (U8)(flags | OPf_KIDS);
79072805
LW
3382 if (!last) {
3383 last = first;
eb160463 3384 binop->op_private = (U8)(1 | (flags >> 8));
79072805
LW
3385 }
3386 else {
eb160463 3387 binop->op_private = (U8)(2 | (flags >> 8));
79072805
LW
3388 first->op_sibling = last;
3389 }
3390
e50aee73 3391 binop = (BINOP*)CHECKOP(type, binop);
eb160463 3392 if (binop->op_next || binop->op_type != (OPCODE)type)
79072805
LW
3393 return (OP*)binop;
3394
7284ab6f 3395 binop->op_last = binop->op_first->op_sibling;
79072805 3396
a0d0e21e 3397 return fold_constants((OP *)binop);
79072805
LW
3398}
3399
5f66b61c
AL
3400static int uvcompare(const void *a, const void *b)
3401 __attribute__nonnull__(1)
3402 __attribute__nonnull__(2)
3403 __attribute__pure__;
abb2c242 3404static int uvcompare(const void *a, const void *b)
2b9d42f0 3405{
e1ec3a88 3406 if (*((const UV *)a) < (*(const UV *)b))
2b9d42f0 3407 return -1;
e1ec3a88 3408 if (*((const UV *)a) > (*(const UV *)b))
2b9d42f0 3409 return 1;
e1ec3a88 3410 if (*((const UV *)a+1) < (*(const UV *)b+1))
2b9d42f0 3411 return -1;
e1ec3a88 3412 if (*((const UV *)a+1) > (*(const UV *)b+1))
2b9d42f0 3413 return 1;
a0ed51b3
LW
3414 return 0;
3415}
3416
0d86688d
NC
3417static OP *
3418S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
79072805 3419{
97aff369 3420 dVAR;
2d03de9c 3421 SV * const tstr = ((SVOP*)expr)->op_sv;
fbbb0949
DM
3422 SV * const rstr =
3423#ifdef PERL_MAD
3424 (repl->op_type == OP_NULL)
3425 ? ((SVOP*)((LISTOP*)repl)->op_first)->op_sv :
3426#endif
3427 ((SVOP*)repl)->op_sv;
463ee0b2
LW
3428 STRLEN tlen;
3429 STRLEN rlen;
5c144d81
NC
3430 const U8 *t = (U8*)SvPV_const(tstr, tlen);
3431 const U8 *r = (U8*)SvPV_const(rstr, rlen);
79072805
LW
3432 register I32 i;
3433 register I32 j;
9b877dbb 3434 I32 grows = 0;
79072805
LW
3435 register short *tbl;
3436
551405c4
AL
3437 const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;
3438 const I32 squash = o->op_private & OPpTRANS_SQUASH;
3439 I32 del = o->op_private & OPpTRANS_DELETE;
043e41b8 3440 SV* swash;
7918f24d
NC
3441
3442 PERL_ARGS_ASSERT_PMTRANS;
3443
800b4dc4 3444 PL_hints |= HINT_BLOCK_SCOPE;
1c846c1f 3445
036b4402
GS
3446 if (SvUTF8(tstr))
3447 o->op_private |= OPpTRANS_FROM_UTF;
1c846c1f
NIS
3448
3449 if (SvUTF8(rstr))
036b4402 3450 o->op_private |= OPpTRANS_TO_UTF;
79072805 3451
a0ed51b3 3452 if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
396482e1 3453 SV* const listsv = newSVpvs("# comment\n");
c445ea15 3454 SV* transv = NULL;
5c144d81
NC
3455 const U8* tend = t + tlen;
3456 const U8* rend = r + rlen;
ba210ebe 3457 STRLEN ulen;
84c133a0
RB
3458 UV tfirst = 1;
3459 UV tlast = 0;
3460 IV tdiff;
3461 UV rfirst = 1;
3462 UV rlast = 0;
3463 IV rdiff;
3464 IV diff;
a0ed51b3
LW
3465 I32 none = 0;
3466 U32 max = 0;
3467 I32 bits;
a0ed51b3 3468 I32 havefinal = 0;
9c5ffd7c 3469 U32 final = 0;
551405c4
AL
3470 const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
3471 const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
bf4a1e57
JH
3472 U8* tsave = NULL;
3473 U8* rsave = NULL;
9f7f3913 3474 const U32 flags = UTF8_ALLOW_DEFAULT;
bf4a1e57
JH
3475
3476 if (!from_utf) {
3477 STRLEN len = tlen;
5c144d81 3478 t = tsave = bytes_to_utf8(t, &len);
bf4a1e57
JH
3479 tend = t + len;
3480 }
3481 if (!to_utf && rlen) {
3482 STRLEN len = rlen;
5c144d81 3483 r = rsave = bytes_to_utf8(r, &len);
bf4a1e57
JH
3484 rend = r + len;
3485 }
a0ed51b3 3486
2b9d42f0
NIS
3487/* There are several snags with this code on EBCDIC:
3488 1. 0xFF is a legal UTF-EBCDIC byte (there are no illegal bytes).
3489 2. scan_const() in toke.c has encoded chars in native encoding which makes
3490 ranges at least in EBCDIC 0..255 range the bottom odd.
3491*/
3492
a0ed51b3 3493 if (complement) {
89ebb4a3 3494 U8 tmpbuf[UTF8_MAXBYTES+1];
2b9d42f0 3495 UV *cp;
a0ed51b3 3496 UV nextmin = 0;
a02a5408 3497 Newx(cp, 2*tlen, UV);
a0ed51b3 3498 i = 0;
396482e1 3499 transv = newSVpvs("");
a0ed51b3 3500 while (t < tend) {
9f7f3913 3501 cp[2*i] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2b9d42f0
NIS
3502 t += ulen;
3503 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) {
a0ed51b3 3504 t++;
9f7f3913 3505 cp[2*i+1] = utf8n_to_uvuni(t, tend-t, &ulen, flags);
2b9d42f0 3506 t += ulen;
a0ed51b3 3507 }
2b9d42f0
NIS
3508 else {
3509 cp[2*i+1] = cp[2*i];
3510 }
3511 i++;
a0ed51b3 3512 }
2b9d42f0 3513 qsort(cp, i, 2*sizeof(UV), uvcompare);
a0ed51b3 3514 for (j = 0; j < i; j++) {
2b9d42f0 3515 UV val = cp[2*j];
a0ed51b3
LW
3516 diff = val - nextmin;
3517 if (diff > 0) {
9041c2e3 3518 t = uvuni_to_utf8(tmpbuf,nextmin);
dfe13c55 3519 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
a0ed51b3 3520 if (diff > 1) {
2b9d42f0 3521 U8 range_mark = UTF_TO_NATIVE(0xff);
9041c2e3 3522 t = uvuni_to_utf8(tmpbuf, val - 1);
2b9d42f0 3523 sv_catpvn(transv, (char *)&range_mark, 1);
dfe13c55 3524 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
a0ed51b3
LW
3525 }
3526 }
2b9d42f0 3527 val = cp[2*j+1];
a0ed51b3
LW
3528 if (val >= nextmin)
3529 nextmin = val + 1;
3530 }
9041c2e3 3531 t = uvuni_to_utf8(tmpbuf,nextmin);
dfe13c55 3532 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
2b9d42f0
NIS
3533 {
3534 U8 range_mark = UTF_TO_NATIVE(0xff);
3535 sv_catpvn(transv, (char *)&range_mark, 1);
3536 }
6247ead0 3537 t = uvuni_to_utf8(tmpbuf, 0x7fffffff);
dfe13c55 3538 sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
93524f2b 3539 t = (const U8*)SvPVX_const(transv);
a0ed51b3
LW
3540 tlen = SvCUR(transv);
3541 tend = t + tlen;
455d824a 3542 Safefree(cp);
a0ed51b3
LW
3543 }
3544 else if (!rlen && !del) {
3545 r = t; rlen = tlen; rend = tend;
4757a243
LW
3546 }
3547 if (!squash) {
05d340b8 3548 if ((!rlen && !del) || t == r ||
12ae5dfc 3549 (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
01ec43d0 3550 {
4757a243 3551 o->op_private |= OPpTRANS_IDENTICAL;
01ec43d0 3552 }
a0ed51b3
LW
3553 }
3554
3555 while (t < tend || tfirst <= tlast) {
3556 /* see if we need more "t" chars */
3557 if (tfirst > tlast) {
9f7f3913 3558 tfirst = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
a0ed51b3 3559 t += ulen;
2b9d42f0 3560 if (t < tend && NATIVE_TO_UTF(*t) == 0xff) { /* illegal utf8 val indicates range */
ba210ebe 3561 t++;
9f7f3913 3562 tlast = (I32)utf8n_to_uvuni(t, tend - t, &ulen, flags);
a0ed51b3
LW
3563 t += ulen;
3564 }
3565 else
3566 tlast = tfirst;
3567 }
3568