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