File Coverage

pp_hot.c
Criterion Covered Total %
statement 1418 1464 96.9
branch 1659 2022 82.0
condition n/a
subroutine n/a
total 3077 3486 88.3


line stmt bran cond sub time code
1           /* pp_hot.c
2           *
3           * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4           * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
5           *
6           * You may distribute under the terms of either the GNU General Public
7           * License or the Artistic License, as specified in the README file.
8           *
9           */
10            
11           /*
12           * Then he heard Merry change the note, and up went the Horn-cry of Buckland,
13           * shaking the air.
14           *
15           * Awake! Awake! Fear, Fire, Foes! Awake!
16           * Fire, Foes! Awake!
17           *
18           * [p.1007 of _The Lord of the Rings_, VI/viii: "The Scouring of the Shire"]
19           */
20            
21           /* This file contains 'hot' pp ("push/pop") functions that
22           * execute the opcodes that make up a perl program. A typical pp function
23           * expects to find its arguments on the stack, and usually pushes its
24           * results onto the stack, hence the 'pp' terminology. Each OP structure
25           * contains a pointer to the relevant pp_foo() function.
26           *
27           * By 'hot', we mean common ops whose execution speed is critical.
28           * By gathering them together into a single file, we encourage
29           * CPU cache hits on hot code. Also it could be taken as a warning not to
30           * change any code in this file unless you're sure it won't affect
31           * performance.
32           */
33            
34           #include "EXTERN.h"
35           #define PERL_IN_PP_HOT_C
36           #include "perl.h"
37            
38           /* Hot code. */
39            
40 1625713949         PP(pp_const)
41           {
42           dVAR;
43 1625713949         dSP;
44 1625713949 100       XPUSHs(cSVOP_sv);
45 1625713949         RETURN;
46           }
47            
48 2570688099         PP(pp_nextstate)
49           {
50           dVAR;
51 2570688099         PL_curcop = (COP*)PL_op;
52 2570688099         TAINT_NOT; /* Each statement is presumed innocent */
53 2570688099         PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
54 2570688099 100       FREETMPS;
55 2570688099 100       PERL_ASYNC_CHECK();
56 2570688097         return NORMAL;
57           }
58            
59 503336076         PP(pp_gvsv)
60 503336076 100       {
61           dVAR;
62 503336076         dSP;
63 250801581         EXTEND(SP,1);
64 503336076 100       if (PL_op->op_private & OPpLVAL_INTRO)
65 49878290         PUSHs(save_scalar(cGVOP_gv));
66           else
67 453457786 100       PUSHs(GvSVn(cGVOP_gv));
68 503336076         RETURN;
69           }
70            
71 15735473         PP(pp_null)
72           {
73           dVAR;
74 15735473         return NORMAL;
75           }
76            
77           /* This is sometimes called directly by pp_coreargs and pp_grepstart. */
78 756423342         PP(pp_pushmark)
79           {
80           dVAR;
81 756423342 100       PUSHMARK(PL_stack_sp);
82 756423342         return NORMAL;
83           }
84            
85 6317481         PP(pp_stringify)
86           {
87 6317481         dVAR; dSP; dTARGET;
88 6317481         SV * const sv = TOPs;
89 6317481         SETs(TARG);
90 6317481         sv_copypv(TARG, sv);
91 6317479 100       SvSETMAGIC(TARG);
92           /* no PUTBACK, SETs doesn't inc/dec SP */
93 6317479         return NORMAL;
94           }
95            
96 435904583         PP(pp_gv)
97           {
98 435904583         dVAR; dSP;
99 435904583 100       XPUSHs(MUTABLE_SV(cGVOP_gv));
100 435904583         RETURN;
101           }
102            
103 1091416353         PP(pp_and)
104           {
105           dVAR;
106 1091416353 100       PERL_ASYNC_CHECK();
107           {
108           /* SP is not used to remove a variable that is saved across the
109           sv_2bool_flags call in SvTRUE_NN, if a RISC/CISC or low/high machine
110           register or load/store vs direct mem ops macro is introduced, this
111           should be a define block between direct PL_stack_sp and dSP operations,
112           presently, using PL_stack_sp is bias towards CISC cpus */
113 1091416351         SV * const sv = *PL_stack_sp;
114 1091416351 100       if (!SvTRUE_NN(sv))
    100        
    50        
    50        
    100        
    50        
    100        
    100        
    100        
    100        
    100        
    100        
    100        
    100        
    100        
115 581963434         return NORMAL;
116           else {
117 509452917 100       if (PL_op->op_type == OP_AND)
118 509442201         --PL_stack_sp;
119 800911827         return cLOGOP->op_other;
120           }
121           }
122           }
123            
124 958241640         PP(pp_sassign)
125           {
126 958241640         dVAR; dSP;
127           /* sassign keeps its args in the optree traditionally backwards.
128           So we pop them differently.
129           */
130 958241640         SV *left = POPs; SV *right = TOPs;
131            
132 958241640 100       if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
133           SV * const temp = left;
134           left = right; right = temp;
135           }
136 958241640 100       if (TAINTING_get && TAINT_get && !SvTAINTED(right))
    100        
    50        
    50        
137 0         TAINT_NOT;
138 958241640 100       if (PL_op->op_private & OPpASSIGN_CV_TO_GV) {
139 2120544         SV * const cv = SvRV(right);
140 2120544         const U32 cv_type = SvTYPE(cv);
141 2120544 100       const bool is_gv = isGV_with_GP(left);
    50        
142 2120544         const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
143            
144           if (!got_coderef) {
145           assert(SvROK(cv));
146           }
147            
148           /* Can do the optimisation if left (LVALUE) is not a typeglob,
149           right (RVALUE) is a reference to something, and we're in void
150           context. */
151 2120544 100       if (!got_coderef && !is_gv && GIMME_V == G_VOID) {
    100        
    50        
    50        
152           /* Is the target symbol table currently empty? */
153 683754         GV * const gv = gv_fetchsv_nomg(left, GV_NOINIT, SVt_PVGV);
154 1016264 100       if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
    100        
    50        
    50        
    50        
155           /* Good. Create a new proxy constant subroutine in the target.
156           The gv becomes a(nother) reference to the constant. */
157 666456         SV *const value = SvRV(cv);
158            
159 998966         SvUPGRADE(MUTABLE_SV(gv), SVt_IV);
160 666456         SvPCS_IMPORTED_on(gv);
161 666456         SvRV_set(gv, value);
162 666456 50       SvREFCNT_inc_simple_void(value);
163 666456         SETs(left);
164 666456         RETURN;
165           }
166           }
167            
168           /* Need to fix things up. */
169 1454088 100       if (!is_gv) {
170           /* Need to fix GV. */
171 1000356         left = MUTABLE_SV(gv_fetchsv_nomg(left,GV_ADD, SVt_PVGV));
172           }
173            
174 1454088 100       if (!got_coderef) {
175           /* We've been returned a constant rather than a full subroutine,
176           but they expect a subroutine reference to apply. */
177 17302 100       if (SvROK(cv)) {
178 17298         ENTER_with_name("sassign_coderef");
179 17298         SvREFCNT_inc_void(SvRV(cv));
180           /* newCONSTSUB takes a reference count on the passed in SV
181           from us. We set the name to NULL, otherwise we get into
182           all sorts of fun as the reference to our new sub is
183           donated to the GV that we're about to assign to.
184           */
185 17298         SvRV_set(right, MUTABLE_SV(newCONSTSUB(GvSTASH(left), NULL,
186           SvRV(cv))));
187 17298         SvREFCNT_dec_NN(cv);
188 17298         LEAVE_with_name("sassign_coderef");
189           } else {
190           /* What can happen for the corner case *{"BONK"} = \&{"BONK"};
191           is that
192           First: ops for \&{"BONK"}; return us the constant in the
193           symbol table
194           Second: ops for *{"BONK"} cause that symbol table entry
195           (and our reference to it) to be upgraded from RV
196           to typeblob)
197           Thirdly: We get here. cv is actually PVGV now, and its
198           GvCV() is actually the subroutine we're looking for
199            
200           So change the reference so that it points to the subroutine
201           of that typeglob, as that's what they were after all along.
202           */
203           GV *const upgraded = MUTABLE_GV(cv);
204 4         CV *const source = GvCV(upgraded);
205            
206           assert(source);
207           assert(CvFLAGS(source) & CVf_CONST);
208            
209           SvREFCNT_inc_void(source);
210 4         SvREFCNT_dec_NN(upgraded);
211 4         SvRV_set(right, MUTABLE_SV(source));
212           }
213           }
214            
215           }
216 957575184 100       if (
217 477721779 100       SvTEMP(left) && !SvSMAGICAL(left) && SvREFCNT(left) == 1 &&
218 59 50       (!isGV_with_GP(left) || SvFAKE(left)) && ckWARN(WARN_MISC)
    50        
    50        
219           )
220 2         Perl_warner(aTHX_
221           packWARN(WARN_MISC), "Useless assignment to a temporary"
222           );
223 957575184 100       SvSetMagicSV(left, right);
    100        
224 957575064         SETs(left);
225 957909010         RETURN;
226           }
227            
228 293227728         PP(pp_cond_expr)
229           {
230 293227728         dVAR; dSP;
231 293227728 100       PERL_ASYNC_CHECK();
232 293227728 50       if (SvTRUEx(POPs))
    100        
    100        
    100        
    50        
    50        
    100        
    50        
    100        
    100        
    100        
    100        
    100        
    100        
    100        
    100        
    100        
    100        
    50        
    100        
233 77831555         RETURNOP(cLOGOP->op_other);
234           else
235 254603673         RETURNOP(cLOGOP->op_next);
236           }
237            
238 959569420         PP(pp_unstack)
239           {
240           dVAR;
241 959569420 100       PERL_ASYNC_CHECK();
242 959569414         TAINT_NOT; /* Each statement is presumed innocent */
243 959569414         PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
244 959569414 100       FREETMPS;
245 959569414 100       if (!(PL_op->op_flags & OPf_SPECIAL)) {
246 948273104         I32 oldsave = PL_scopestack[PL_scopestack_ix - 1];
247 948273104 100       LEAVE_SCOPE(oldsave);
248           }
249 959569414         return NORMAL;
250           }
251            
252 204951605         PP(pp_concat)
253           {
254 204951605 100       dVAR; dSP; dATARGET; tryAMAGICbin_MG(concat_amg, AMGf_assign);
    100        
    100        
255           {
256 204951567         dPOPTOPssrl;
257           bool lbyte;
258           STRLEN rlen;
259           const char *rpv = NULL;
260           bool rbyte = FALSE;
261           bool rcopied = FALSE;
262            
263 204951567 100       if (TARG == right && right != left) { /* $r = $l.$r */
264 1983482 100       rpv = SvPV_nomg_const(right, rlen);
265 1983482 100       rbyte = !DO_UTF8(right);
    50        
266 1983482         right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
267 1983482 50       rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
268           rcopied = TRUE;
269           }
270            
271 204951567 100       if (TARG != left) { /* not $l .= $r */
272           STRLEN llen;
273 94119236 100       const char* const lpv = SvPV_nomg_const(left, llen);
274 94119236 100       lbyte = !DO_UTF8(left);
    100        
275 94119236         sv_setpvn(TARG, lpv, llen);
276 94119236 100       if (!lbyte)
277 140014         SvUTF8_on(TARG);
278           else
279 93979222         SvUTF8_off(TARG);
280           }
281           else { /* $l .= $r */
282 110832331 100       if (!SvOK(TARG)) {
    50        
    100        
283 509160 100       if (left == right && ckWARN(WARN_UNINITIALIZED)) /* $l .= $l */
    50        
284 2         report_uninit(right);
285 509160         sv_setpvs(left, "");
286           }
287 110832331 100       SvPV_force_nomg_nolen(left);
288 110832329 100       lbyte = !DO_UTF8(left);
    100        
289 110832329 100       if (IN_BYTES)
290 1388074         SvUTF8_off(TARG);
291           }
292            
293 204951565 100       if (!rcopied) {
294 202968650 100       if (left == right)
    50        
295           /* $r.$r: do magic twice: tied might return different 2nd time */
296 567         SvGETMAGIC(right);
297 202968083 100       rpv = SvPV_nomg_const(right, rlen);
298 202968083 100       rbyte = !DO_UTF8(right);
    100        
299           }
300 204951565 100       if (lbyte != rbyte) {
301           /* sv_utf8_upgrade_nomg() may reallocate the stack */
302 2159786         PUTBACK;
303 2159786 100       if (lbyte)
304 946608         sv_utf8_upgrade_nomg(TARG);
305           else {
306 1213178 100       if (!rcopied)
307 1213148         right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
308 1213178         sv_utf8_upgrade_nomg(right);
309 1213178 50       rpv = SvPV_nomg_const(right, rlen);
310           }
311 2159782         SPAGAIN;
312           }
313 204951561         sv_catpvn_nomg(TARG, rpv, rlen);
314            
315 204951561 100       SETTARG;
316 204951577         RETURN;
317           }
318           }
319            
320           /* push the elements of av onto the stack.
321           * XXX Note that padav has similar code but without the mg_get().
322           * I suspect that the mg_get is no longer needed, but while padav
323           * differs, it can't share this function */
324            
325           STATIC void
326 176339546         S_pushav(pTHX_ AV* const av)
327 176339546 100       {
328 176339546         dSP;
329 176339546 100       const SSize_t maxarg = AvFILL(av) + 1;
330 88103832         EXTEND(SP, maxarg);
331 176339546 100       if (SvRMAGICAL(av)) {
332           PADOFFSET i;
333 202609 100       for (i=0; i < (PADOFFSET)maxarg; i++) {
334 186488         SV ** const svp = av_fetch(av, i, FALSE);
335           /* See note in pp_helem, and bug id #27839 */
336 372976         SP[i+1] = svp
337 184538 100       ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
338 186488 100       : &PL_sv_undef;
339           }
340           }
341           else {
342           PADOFFSET i;
343 438362517 100       for (i=0; i < (PADOFFSET)maxarg; i++) {
344 350132650         SV * const sv = AvARRAY(av)[i];
345 350132650 100       SP[i+1] = sv ? sv : &PL_sv_undef;
346           }
347           }
348 176339546         SP += maxarg;
349 176339546         PUTBACK;
350 176339546         }
351            
352            
353           /* ($lex1,@lex2,...) or my ($lex1,@lex2,...) */
354            
355 894270059         PP(pp_padrange)
356           {
357 894270059         dVAR; dSP;
358 894270059         PADOFFSET base = PL_op->op_targ;
359 894270059         int count = (int)(PL_op->op_private) & OPpPADRANGE_COUNTMASK;
360           int i;
361 894270059 100       if (PL_op->op_flags & OPf_SPECIAL) {
362           /* fake the RHS of my ($x,$y,..) = @_ */
363 147347374 50       PUSHMARK(SP);
364 147347374 50       S_pushav(aTHX_ GvAVn(PL_defgv));
365 147347374         SPAGAIN;
366           }
367            
368           /* note, this is only skipped for compile-time-known void cxt */
369 1336696301 100       if ((PL_op->op_flags & OPf_WANT) != OPf_WANT_VOID) {
    50        
370 442426242         EXTEND(SP, count);
371 885361353 100       PUSHMARK(SP);
372 1934878276 100       for (i = 0; i
373 1049516923         *++SP = PAD_SV(base+i);
374           }
375 894270059 100       if (PL_op->op_private & OPpLVAL_INTRO) {
376 186319484         SV **svp = &(PAD_SVl(base));
377 186319484         const UV payload = (UV)(
378 186319484         (base << (OPpPADRANGE_COUNTSHIFT + SAVE_TIGHT_SHIFT))
379 186319484         | (count << SAVE_TIGHT_SHIFT)
380           | SAVEt_CLEARPADRANGE);
381           assert(OPpPADRANGE_COUNTMASK + 1 == (1 <
382           assert((payload >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT)) == base);
383           {
384 186319484         dSS_ADD;
385 186319484         SS_ADD_UV(payload);
386 186319484 50       SS_ADD_END(1);
387           }
388            
389 443336880 100       for (i = 0; i
390 350099100         SvPADSTALE_off(*svp++); /* mark lexical as active */
391           }
392 894270059         RETURN;
393           }
394            
395            
396 3118059641         PP(pp_padsv)
397 3118059641 50       {
398 3118059641         dVAR; dSP;
399 1555711975         EXTEND(SP, 1);
400           {
401 3118059641         OP * const op = PL_op;
402           /* access PL_curpad once */
403 3118059641         SV ** const padentry = &(PAD_SVl(op->op_targ));
404           {
405           dTARG;
406 3118059641         TARG = *padentry;
407 3118059641         PUSHs(TARG);
408 3118059641         PUTBACK; /* no pop/push after this, TOPs ok */
409           }
410 3118059641 100       if (op->op_flags & OPf_MOD) {
411 1436456790 100       if (op->op_private & OPpLVAL_INTRO)
412 644101295 100       if (!(op->op_private & OPpPAD_STATE))
413 644101153         save_clearsv(padentry);
414 1436456790 100       if (op->op_private & OPpDEREF) {
415           /* TOPs is equivalent to TARG here. Using TOPs (SP) rather
416           than TARG reduces the scope of TARG, so it does not
417           span the call to save_clearsv, resulting in smaller
418           machine code. */
419 297912783         TOPs = vivify_ref(TOPs, op->op_private & OPpDEREF);
420           }
421           }
422 3118059641         return op->op_next;
423           }
424           }
425            
426 9326719         PP(pp_readline)
427           {
428           dVAR;
429 9326719         dSP;
430 13809337 100       if (TOPs) {
    100        
431 4482620         SvGETMAGIC(TOPs);
432 9326717 100       tryAMAGICunTARGETlist(iter_amg, 0);
    100        
    100        
    100        
    100        
    50        
    0        
    0        
    0        
    0        
    0        
    0        
433 9326715         PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
434           }
435 2         else PL_last_in_gv = PL_argvgv, PL_stack_sp--;
436 9326717 100       if (!isGV_with_GP(PL_last_in_gv)) {
    50        
437 6999272 100       if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
    100        
    50        
438 6803408         PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
439           else {
440 195864         dSP;
441 195864 50       XPUSHs(MUTABLE_SV(PL_last_in_gv));
442 195864         PUTBACK;
443 195864         Perl_pp_rv2gv(aTHX);
444 195862         PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
445           }
446           }
447 9326716         return do_readline();
448           }
449            
450 70855286         PP(pp_eq)
451           {
452 70855286         dVAR; dSP;
453           SV *left, *right;
454            
455 70855286 100       tryAMAGICbin_MG(eq_amg, AMGf_set|AMGf_numeric);
    100        
456 70599348         right = POPs;
457 70599348         left = TOPs;
458 70599348 100       SETs(boolSV(
    100        
    100        
459           (SvIOK_notUV(left) && SvIOK_notUV(right))
460           ? (SvIVX(left) == SvIVX(right))
461           : ( do_ncmp(left, right) == 0)
462           ));
463 70727315         RETURN;
464           }
465            
466 63258352         PP(pp_preinc)
467           {
468 63258352         dVAR; dSP;
469 63258352         const bool inc =
470 63258352         PL_op->op_type == OP_PREINC || PL_op->op_type == OP_I_PREINC;
471 63258352 50       if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs)))
    100        
    50        
    50        
472 0         Perl_croak_no_modify();
473 63258352 100       if (!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
474 59479058 100       && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
    100        
475           {
476 59477982 100       SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
477 59477982         SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
478           }
479           else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
480 3780370 100       if (inc) sv_inc(TOPs);
481 25072         else sv_dec(TOPs);
482 63258308 100       SvSETMAGIC(TOPs);
483 63258308         return NORMAL;
484           }
485            
486 337732866         PP(pp_or)
487           {
488 337732866         dVAR; dSP;
489 337732866 100       PERL_ASYNC_CHECK();
490 337732866 50       if (SvTRUE(TOPs))
    100        
    100        
    100        
    50        
    50        
    100        
    50        
    100        
    100        
    100        
    100        
    100        
    100        
    100        
    100        
    100        
    100        
    100        
491 195022523         RETURN;
492           else {
493 142710343 100       if (PL_op->op_type == OP_OR)
494 135720956         --SP;
495 240485025         RETURNOP(cLOGOP->op_other);
496           }
497           }
498            
499 114687858         PP(pp_defined)
500           {
501 114687858         dVAR; dSP;
502           SV* sv;
503           bool defined;
504 114687858         const int op_type = PL_op->op_type;
505 114687858         const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
506            
507 114687858 100       if (is_dor) {
508 398650 50       PERL_ASYNC_CHECK();
509 398650         sv = TOPs;
510 398650 50       if (!sv || !SvANY(sv)) {
    100        
511 3018 100       if (op_type == OP_DOR)
512 2704         --SP;
513 3018         RETURNOP(cLOGOP->op_other);
514           }
515           }
516           else {
517           /* OP_DEFINED */
518 114289208         sv = POPs;
519 114289208 50       if (!sv || !SvANY(sv))
    100        
520 20439359         RETPUSHNO;
521           }
522            
523           defined = FALSE;
524 140604759 100       switch (SvTYPE(sv)) {
525           case SVt_PVAV:
526 14 100       if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
    50        
    100        
    50        
527           defined = TRUE;
528           break;
529           case SVt_PVHV:
530 50 100       if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
    50        
    100        
    50        
531           defined = TRUE;
532           break;
533           case SVt_PVCV:
534 757706 100       if (CvROOT(sv) || CvXSUB(sv))
    50        
535           defined = TRUE;
536           break;
537           default:
538 47757190         SvGETMAGIC(sv);
539 93487711 100       if (SvOK(sv))
    100        
    50        
540           defined = TRUE;
541           break;
542           }
543            
544 94245481 100       if (is_dor) {
545 395632 100       if(defined)
546 156622         RETURN;
547 239010 100       if(op_type == OP_DOR)
548 237850         --SP;
549 239010         RETURNOP(cLOGOP->op_other);
550           }
551           /* assuming OP_DEFINED */
552 93849849 100       if(defined)
553 85121163         RETPUSHYES;
554 62107607         RETPUSHNO;
555           }
556            
557 44462032         PP(pp_add)
558           {
559 44462032 100       dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
560 44462032 100       tryAMAGICbin_MG(add_amg, AMGf_assign|AMGf_numeric);
    100        
561 44457410         svr = TOPs;
562 44457410         svl = TOPm1s;
563            
564 44457410 100       useleft = USE_LEFT(svl);
    50        
    50        
    100        
565           #ifdef PERL_PRESERVE_IVUV
566           /* We must see if we can perform the addition with integers if possible,
567           as the integer code detects overflow while the NV code doesn't.
568           If either argument hasn't had a numeric conversion yet attempt to get
569           the IV. It's important to do this now, rather than just assuming that
570           it's not IOK as a PV of "9223372036854775806" may not take well to NV
571           addition, and an SV which is NOK, NV=6.0 ought to be coerced to
572           integer in case the second argument is IV=9223372036854775806
573           We can (now) rely on sv_2iv to do the right thing, only setting the
574           public IOK flag if the value in the NV (or PV) slot is truly integer.
575            
576           A side effect is that this also aggressively prefers integer maths over
577           fp maths for integer values.
578            
579           How to detect overflow?
580            
581           C 99 section 6.2.6.1 says
582            
583           The range of nonnegative values of a signed integer type is a subrange
584           of the corresponding unsigned integer type, and the representation of
585           the same value in each type is the same. A computation involving
586           unsigned operands can never overflow, because a result that cannot be
587           represented by the resulting unsigned integer type is reduced modulo
588           the number that is one greater than the largest value that can be
589           represented by the resulting type.
590            
591           (the 9th paragraph)
592            
593           which I read as "unsigned ints wrap."
594            
595           signed integer overflow seems to be classed as "exception condition"
596            
597           If an exceptional condition occurs during the evaluation of an
598           expression (that is, if the result is not mathematically defined or not
599           in the range of representable values for its type), the behavior is
600           undefined.
601            
602           (6.5, the 5th paragraph)
603            
604           I had assumed that on 2s complement machines signed arithmetic would
605           wrap, hence coded pp_add and pp_subtract on the assumption that
606           everything perl builds on would be happy. After much wailing and
607           gnashing of teeth it would seem that irix64 knows its ANSI spec well,
608           knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
609           unsigned code below is actually shorter than the old code. :-)
610           */
611            
612 44457410 100       if (SvIV_please_nomg(svr)) {
    100        
    50        
    100        
613           /* Unless the left argument is integer in range we are going to have to
614           use NV maths. Hence only attempt to coerce the right argument if
615           we know the left is integer. */
616           UV auv = 0;
617           bool auvok = FALSE;
618           bool a_valid = 0;
619            
620 44216674 100       if (!useleft) {
621           auv = 0;
622           a_valid = auvok = 1;
623           /* left operand is undef, treat as zero. + 0 is identity,
624           Could SETi or SETu right now, but space optimise by not adding
625           lots of code to speed up what is probably a rarish case. */
626           } else {
627           /* Left operand is defined, so is it IV? */
628 42661232 100       if (SvIV_please_nomg(svl)) {
    100        
    50        
    100        
629 42578090 100       if ((auvok = SvUOK(svl)))
630 10394         auv = SvUVX(svl);
631           else {
632 42567696         const IV aiv = SvIVX(svl);
633 42567696 100       if (aiv >= 0) {
634 42361408         auv = aiv;
635           auvok = 1; /* Now acting as a sign flag. */
636           } else { /* 2s complement assumption for IV_MIN */
637 206288         auv = (UV)-aiv;
638           }
639           }
640           a_valid = 1;
641           }
642           }
643 44216672 100       if (a_valid) {
644           bool result_good = 0;
645           UV result;
646           UV buv;
647 44133532         bool buvok = SvUOK(svr);
648          
649 44133532 100       if (buvok)
650 186         buv = SvUVX(svr);
651           else {
652 44133346         const IV biv = SvIVX(svr);
653 44133346 100       if (biv >= 0) {
654 44077056         buv = biv;
655           buvok = 1;
656           } else
657 56290         buv = (UV)-biv;
658           }
659           /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
660           else "IV" now, independent of how it came in.
661           if a, b represents positive, A, B negative, a maps to -A etc
662           a + b => (a + b)
663           A + b => -(a - b)
664           a + B => (a - b)
665           A + B => -(a + b)
666           all UV maths. negate result if A negative.
667           add if signs same, subtract if signs differ. */
668            
669 44133532 100       if (auvok ^ buvok) {
670           /* Signs differ. */
671 258898 100       if (auv >= buv) {
672 224354         result = auv - buv;
673           /* Must get smaller */
674 224354 50       if (result <= auv)
675           result_good = 1;
676           } else {
677 34544         result = buv - auv;
678 34544 50       if (result <= buv) {
679           /* result really should be -(auv-buv). as its negation
680           of true value, need to swap our result flag */
681 34544         auvok = !auvok;
682           result_good = 1;
683           }
684           }
685           } else {
686           /* Signs same */
687 43874634         result = auv + buv;
688 43874634 100       if (result >= auv)
689           result_good = 1;
690           }
691 44133532 100       if (result_good) {
692 44133392         SP--;
693 44133392 100       if (auvok)
694 43913980 100       SETu( result );
695           else {
696           /* Negate result */
697 219412 50       if (result <= (UV)IV_MIN)
698 219412 100       SETi( -(IV)result );
699           else {
700           /* result valid, but out of range for IV. */
701 0 0       SETn( -(NV)result );
702           }
703           }
704 44133392         RETURN;
705           } /* Overflow, drop through to NVs. */
706           }
707           }
708           #endif
709           {
710 324014 100       NV value = SvNV_nomg(svr);
711 324014         (void)POPs;
712 324014 100       if (!useleft) {
713           /* left operand is undef, treat as zero. + 0.0 is identity. */
714 8 50       SETn(value);
715 8         RETURN;
716           }
717 324006 100       SETn( value + SvNV_nomg(svl) );
    50        
718 22394430         RETURN;
719           }
720           }
721            
722 48824452         PP(pp_aelemfast)
723 48824452 50       {
724 48824452         dVAR; dSP;
725 48824452         AV * const av = PL_op->op_type == OP_AELEMFAST_LEX
726 48824452 100       ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAVn(cGVOP_gv);
    100        
727 48824452         const U32 lval = PL_op->op_flags & OPf_MOD;
728 48824452         SV** const svp = av_fetch(av, PL_op->op_private, lval);
729 48824452 100       SV *sv = (svp ? *svp : &PL_sv_undef);
730 24380493         EXTEND(SP, 1);
731 48824452 100       if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
    100        
    100        
732 66182         mg_get(sv);
733 48824452         PUSHs(sv);
734 48824452         RETURN;
735           }
736            
737 7224727         PP(pp_join)
738           {
739 7224727         dVAR; dSP; dMARK; dTARGET;
740 7224727         MARK++;
741 7224727         do_join(TARG, *MARK, MARK, SP);
742           SP = MARK;
743 7224727         SETs(TARG);
744 7224727         RETURN;
745           }
746            
747 4476850         PP(pp_pushre)
748           {
749 4476850         dVAR; dSP;
750           #ifdef DEBUGGING
751           /*
752           * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
753           * will be enough to hold an OP*.
754           */
755           SV* const sv = sv_newmortal();
756           sv_upgrade(sv, SVt_PVLV);
757           LvTYPE(sv) = '/';
758           Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
759           XPUSHs(sv);
760           #else
761 4476850 50       XPUSHs(MUTABLE_SV(PL_op));
762           #endif
763 4476850         RETURN;
764           }
765            
766           /* Oversized hot code. */
767            
768 3171717         PP(pp_print)
769           {
770 3171717         dVAR; dSP; dMARK; dORIGMARK;
771           PerlIO *fp;
772           MAGIC *mg;
773           GV * const gv
774 3171717 100       = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
775 3171717 100       IO *io = GvIO(gv);
    50        
    50        
776            
777 3171717 100       if (io
778 3171689 100       && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
    100        
779           {
780           had_magic:
781 192338 100       if (MARK == ORIGMARK) {
782           /* If using default handle then we need to make space to
783           * pass object as 1st arg, so move other args up ...
784           */
785 127326 50       MEXTEND(SP, 1);
786 127326         ++MARK;
787 127326 50       Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
788 127326         ++SP;
789           }
790 288507 100       return Perl_tied_method(aTHX_ SV_CONST(PRINT), mark - 1, MUTABLE_SV(io),
    100        
791           mg,
792           (G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK
793 192338         | (PL_op->op_type == OP_SAY
794 192338         ? TIED_METHOD_SAY : 0)), sp - mark);
795           }
796 2979379 100       if (!io) {
797 28 100       if ( gv && GvEGVx(gv) && (io = GvIO(GvEGV(gv)))
    50        
    50        
    50        
    50        
    50        
    50        
    50        
798 0 0       && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
    0        
799           goto had_magic;
800 28         report_evil_fh(gv);
801 28         SETERRNO(EBADF,RMS_IFI);
802 28         goto just_say_no;
803           }
804 2979351 100       else if (!(fp = IoOFP(io))) {
805 74 100       if (IoIFP(io))
806 22         report_wrongway_fh(gv, '<');
807           else
808 52         report_evil_fh(gv);
809 72         SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
810 72         goto just_say_no;
811           }
812           else {
813 2979277         SV * const ofs = GvSV(PL_ofsgv); /* $, */
814 2979277         MARK++;
815 2979277 50       if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
    100        
    100        
    50        
    50        
816 2523874 100       while (MARK <= SP) {
817 1501118 50       if (!do_print(*MARK, fp))
818           break;
819 1501118         MARK++;
820 1501118 100       if (MARK <= SP) {
821           /* don't use 'ofs' here - it may be invalidated by magic callbacks */
822 989876 50       if (!do_print(GvSV(PL_ofsgv), fp)) {
823           MARK--;
824           break;
825           }
826           }
827           }
828           }
829           else {
830 4981182 100       while (MARK <= SP) {
831 3024673 100       if (!do_print(*MARK, fp))
832           break;
833 3024661         MARK++;
834           }
835           }
836 2979271 100       if (MARK <= SP)
837           goto just_say_no;
838           else {
839 2979265 100       if (PL_op->op_type == OP_SAY) {
840 68 50       if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
    50        
841           goto just_say_no;
842           }
843 2979197 100       else if (PL_ors_sv && SvOK(PL_ors_sv))
    50        
    0        
    0        
844 42852 50       if (!do_print(PL_ors_sv, fp)) /* $\ */
845           goto just_say_no;
846            
847 2979265 100       if (IoFLAGS(io) & IOf_FLUSH)
848 696948 50       if (PerlIO_flush(fp) == EOF)
849           goto just_say_no;
850           }
851           }
852 2979265         SP = ORIGMARK;
853 2979265 50       XPUSHs(&PL_sv_yes);
854 2979265         RETURN;
855            
856           just_say_no:
857 106         SP = ORIGMARK;
858 106 50       XPUSHs(&PL_sv_undef);
859 1586080         RETURN;
860           }
861            
862 600757963         PP(pp_rv2av)
863 600757963 100       {
864 600757963         dVAR; dSP; dTOPss;
865 600757963 100       const I32 gimme = GIMME_V;
866           static const char an_array[] = "an ARRAY";
867           static const char a_hash[] = "a HASH";
868 600757963         const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
869 600757963 100       const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
870            
871 299281958         SvGETMAGIC(sv);
872 600757963 100       if (SvROK(sv)) {
873 413329709 50       if (SvAMAGIC(sv)) {
    100        
    100        
874 4525351 100       sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
875           }
876 413329709         sv = SvRV(sv);
877 413329709 100       if (SvTYPE(sv) != type)
878           /* diag_listed_as: Not an ARRAY reference */
879 98 100       DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
880 413329611 100       else if (PL_op->op_flags & OPf_MOD
881 15778613 100       && PL_op->op_private & OPpLVAL_INTRO)
882 40         Perl_croak(aTHX_ "%s", PL_no_localize_ref);
883           }
884 187428254 100       else if (SvTYPE(sv) != type) {
885           GV *gv;
886          
887 187246586 100       if (!isGV_with_GP(sv)) {
    50        
888 3515435 100       gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
889           type, &sp);
890 3515415 100       if (!gv)
891 70         RETURN;
892           }
893           else {
894           gv = MUTABLE_GV(sv);
895           }
896 187246496 100       sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
    100        
    100        
897 187246496 100       if (PL_op->op_private & OPpLVAL_INTRO)
898 124364 100       sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
899           }
900 600757735 100       if (PL_op->op_flags & OPf_REF) {
901 554949794         SETs(sv);
902 554949794         RETURN;
903           }
904 45807941 100       else if (PL_op->op_private & OPpMAYBE_LVSUB) {
905 18         const I32 flags = is_lvalue_sub();
906 18 50       if (flags && !(flags & OPpENTERSUB_INARGS)) {
    100        
907 8 50       if (gimme != G_ARRAY)
908           goto croak_cant_return;
909 8         SETs(sv);
910 8         RETURN;
911           }
912           }
913            
914 45807933 100       if (is_pp_rv2av) {
915           AV *const av = MUTABLE_AV(sv);
916           /* The guts of pp_rv2av, with no intending change to preserve history
917           (until such time as we get tools that can do blame annotation across
918           whitespace changes. */
919 45077440 100       if (gimme == G_ARRAY) {
920 28992172         SP--;
921 28992172         PUTBACK;
922 28992172         S_pushav(aTHX_ av);
923 28992172         SPAGAIN;
924           }
925 16085268 100       else if (gimme == G_SCALAR) {
926 15944489         dTARGET;
927 15944489 100       const SSize_t maxarg = AvFILL(av) + 1;
928 15944489 50       SETi(maxarg);
929           }
930           } else {
931           /* The guts of pp_rv2hv */
932 730493 100       if (gimme == G_ARRAY) { /* array wanted */
933 376502         *PL_stack_sp = sv;
934 376502         return Perl_do_kv(aTHX);
935           }
936 353991 100       else if ((PL_op->op_private & OPpTRUEBOOL
937 190012 50       || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
938 0 0       && block_gimme() == G_VOID ))
939 163979 50       && (!SvRMAGICAL(sv) || !mg_find(sv, PERL_MAGIC_tied)))
    0        
940 163979 50       SETs(HvUSEDKEYS(sv) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
    100        
941 190012 100       else if (gimme == G_SCALAR) {
942           dTARGET;
943 108595         TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
944 108595         SPAGAIN;
945 108595 50       SETTARG;
946           }
947           }
948 45431431         RETURN;
949            
950           croak_cant_return:
951 301475944 0       Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
952           is_pp_rv2av ? "array" : "hash");
953           RETURN;
954           }
955            
956           STATIC void
957           S_do_oddball(pTHX_ SV **oddkey, SV **firstkey)
958           {
959           dVAR;
960            
961           PERL_ARGS_ASSERT_DO_ODDBALL;
962            
963 82 50       if (*oddkey) {
964 82 100       if (ckWARN(WARN_MISC)) {
965           const char *err;
966 46 100       if (oddkey == firstkey &&
    100        
967 38 100       SvROK(*oddkey) &&
968 18         (SvTYPE(SvRV(*oddkey)) == SVt_PVAV ||
969           SvTYPE(SvRV(*oddkey)) == SVt_PVHV))
970           {
971           err = "Reference found where even-sized list expected";
972           }
973           else
974           err = "Odd number of elements in hash assignment";
975 34         Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
976           }
977            
978           }
979           }
980            
981 201988272         PP(pp_aassign)
982           {
983           dVAR; dSP;
984 201988272         SV **lastlelem = PL_stack_sp;
985 201988272         SV **lastrelem = PL_stack_base + POPMARK;
986 201988272         SV **firstrelem = PL_stack_base + POPMARK + 1;
987 201988272         SV **firstlelem = lastrelem + 1;
988            
989           SV **relem;
990           SV **lelem;
991            
992           SV *sv;
993           AV *ary;
994            
995           I32 gimme;
996           HV *hash;
997           SSize_t i;
998           int magic;
999           U32 lval = 0;
1000            
1001 201988272         PL_delaymagic = DM_DELAY; /* catch simultaneous items */
1002 201988272 100       gimme = GIMME_V;
1003 201988272 100       if (gimme == G_ARRAY)
1004 95046 100       lval = PL_op->op_flags & OPf_MOD || LVRET;
    100        
    50        
1005            
1006           /* If there's a common identifier on both sides we have to take
1007           * special care that assigning the identifier on the left doesn't
1008           * clobber a value on the right that's used later in the list.
1009           * Don't bother if LHS is just an empty hash or array.
1010           */
1011            
1012 206845909 100       if ( (PL_op->op_private & OPpASSIGN_COMMON)
    50        
1013 23157622 100       && (
1014           firstlelem != lastlelem
1015 8377761 50       || ! ((sv = *firstlelem))
1016 8377761 100       || SvMAGICAL(sv)
1017 8347047 100       || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
1018 10587827 100       || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
    0        
    100        
1019 7685271 100       || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
    50        
    100        
1020           )
1021           ) {
1022 15506071 100       EXTEND_MORTAL(lastrelem - firstrelem + 1);
1023 59674143 100       for (relem = firstrelem; relem <= lastrelem; relem++) {
1024 44168076 50       if ((sv = *relem)) {
1025 44168076         TAINT_NOT; /* Each item is independent */
1026            
1027           /* Dear TODO test in t/op/sort.t, I love you.
1028           (It's relying on a panic, not a "semi-panic" from newSVsv()
1029           and then an assertion failure below.) */
1030 44168076 50       if (SvIS_FREED(sv)) {
1031 0         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
1032           (void*)sv);
1033           }
1034           /* Not newSVsv(), as it does not allow copy-on-write,
1035           resulting in wasteful copies. We need a second copy of
1036           a temp here, hence the SV_NOSTEAL. */
1037 44168076         *relem = sv_mortalcopy_flags(sv,SV_GMAGIC|SV_DO_COW_SVSETSV
1038           |SV_NOSTEAL);
1039           }
1040           }
1041           }
1042            
1043           relem = firstrelem;
1044           lelem = firstlelem;
1045           ary = NULL;
1046           hash = NULL;
1047            
1048 686088296 100       while (lelem <= lastlelem) {
1049 383286927         TAINT_NOT; /* Each item stands on its own, taintwise. */
1050 383286927         sv = *lelem++;
1051 383286927         switch (SvTYPE(sv)) {
1052           case SVt_PVAV:
1053           ary = MUTABLE_AV(sv);
1054 18824826         magic = SvMAGICAL(ary) != 0;
1055 18824826         ENTER;
1056 18824826         SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1057 18824826         av_clear(ary);
1058 18824824         av_extend(ary, lastrelem - relem);
1059           i = 0;
1060 140844550 100       while (relem <= lastrelem) { /* gobble up all the rest */
1061           SV **didstore;
1062 168852963 50       if (*relem)
    100        
1063 56261668         SvGETMAGIC(*relem); /* before newSV, in case it dies */
1064 112649909         sv = newSV(0);
1065 112649909         sv_setsv_nomg(sv, *relem);
1066 112649907         *(relem++) = sv;
1067 112649907         didstore = av_store(ary,i++,sv);
1068 112649907 100       if (magic) {
1069 502608 100       if (!didstore)
1070 1132         sv_2mortal(sv);
1071 502608 100       if (SvSMAGICAL(sv))
1072 371800         mg_set(sv);
1073           }
1074 112649903         TAINT_NOT;
1075           }
1076 18824814 100       if (PL_delaymagic & DM_ARRAY_ISA)
1077 348450 50       SvSETMAGIC(MUTABLE_SV(ary));
1078 18824742         LEAVE;
1079 18824742         break;
1080           case SVt_PVHV: { /* normal hash */
1081           SV *tmpstr;
1082           int odd;
1083           int duplicates = 0;
1084           SV** topelem = relem;
1085           SV **firsthashrelem = relem;
1086            
1087           hash = MUTABLE_HV(sv);
1088 5878683         magic = SvMAGICAL(hash) != 0;
1089            
1090 5878683 100       odd = ((lastrelem - firsthashrelem)&1)? 0 : 1;
1091 5878683 100       if ( odd ) {
1092           do_oddball(lastrelem, firsthashrelem);
1093           /* we have firstlelem to reuse, it's not needed anymore
1094           */
1095 82         *(lastrelem+1) = &PL_sv_undef;
1096           }
1097            
1098 5878683         ENTER;
1099 5878683         SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1100 5878683         hv_clear(hash);
1101 49560755 100       while (relem < lastrelem+odd) { /* gobble up all the rest */
    100        
1102           HE *didstore;
1103           assert(*relem);
1104           /* Copy the key if aassign is called in lvalue context,
1105           to avoid having the next op modify our rhs. Copy
1106           it also if it is gmagical, lest it make the
1107           hv_store_ent call below croak, leaking the value. */
1108 20374756 100       sv = lval || SvGMAGICAL(*relem)
1109 58         ? sv_mortalcopy(*relem)
1110 30724567 100       : *relem;
1111           relem++;
1112           assert(*relem);
1113 11445415         SvGETMAGIC(*relem);
1114 20374786         tmpstr = newSV(0);
1115 20374786         sv_setsv_nomg(tmpstr,*relem++); /* value */
1116 20374786 100       if (gimme == G_ARRAY) {
1117 184 100       if (hv_exists_ent(hash, sv, 0))
1118           /* key overwrites an existing entry */
1119 58         duplicates += 2;
1120           else {
1121           /* copy element back: possibly to an earlier
1122           * stack location if we encountered dups earlier,
1123           * possibly to a later stack location if odd */
1124 126         *topelem++ = sv;
1125 126         *topelem++ = tmpstr;
1126           }
1127           }
1128 20374786         didstore = hv_store_ent(hash,sv,tmpstr,0);
1129 20374786 100       if (magic) {
1130 338728 100       if (!didstore) sv_2mortal(tmpstr);
1131 338728 100       SvSETMAGIC(tmpstr);
1132           }
1133 20374786         TAINT_NOT;
1134           }
1135 5878663         LEAVE;
1136 5878663 100       if (duplicates && gimme == G_ARRAY) {
1137           /* at this point we have removed the duplicate key/value
1138           * pairs from the stack, but the remaining values may be
1139           * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1140           * the (a 2), but the stack now probably contains
1141           * (a b 3), because { hv_save(a,1); hv_save(a,2) }
1142           * obliterates the earlier key. So refresh all values. */
1143 32         lastrelem -= duplicates;
1144           relem = firsthashrelem;
1145 92 100       while (relem < lastrelem+odd) {
1146           HE *he;
1147 44         he = hv_fetch_ent(hash, *relem++, 0, 0);
1148 44 50       *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1149           }
1150           }
1151 5878663 100       if (odd && gimme == G_ARRAY) lastrelem++;
1152           }
1153           break;
1154           default:
1155 358583418 100       if (SvIMMORTAL(sv)) {
    50        
    0        
    0        
    0        
1156 651948 100       if (relem <= lastrelem)
1157 643818         relem++;
1158           break;
1159           }
1160 357931470 100       if (relem <= lastrelem) {
1161 340789163 100       if (
1162 170120671 100       SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1163 8 50       (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
    50        
    50        
1164           )
1165 2         Perl_warner(aTHX_
1166           packWARN(WARN_MISC),
1167           "Useless assignment to a temporary"
1168           );
1169 340789163         sv_setsv(sv, *relem);
1170 340789163         *(relem++) = sv;
1171           }
1172           else
1173 17142307         sv_setsv(sv, &PL_sv_undef);
1174 370663074 100       SvSETMAGIC(sv);
1175           break;
1176           }
1177           }
1178 201988164 100       if (PL_delaymagic & ~DM_DELAY) {
1179           /* Will be used to set PL_tainting below */
1180 348374         Uid_t tmp_uid = PerlProc_getuid();
1181 348374         Uid_t tmp_euid = PerlProc_geteuid();
1182 348374         Gid_t tmp_gid = PerlProc_getgid();
1183 348374         Gid_t tmp_egid = PerlProc_getegid();
1184            
1185 348374 50       if (PL_delaymagic & DM_UID) {
1186           #ifdef HAS_SETRESUID
1187 0 0       (void)setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
    0        
1188 0         (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
1189           (Uid_t)-1);
1190           #else
1191           # ifdef HAS_SETREUID
1192           (void)setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1193           (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1);
1194           # else
1195           # ifdef HAS_SETRUID
1196           if ((PL_delaymagic & DM_UID) == DM_RUID) {
1197           (void)setruid(PL_delaymagic_uid);
1198           PL_delaymagic &= ~DM_RUID;
1199           }
1200           # endif /* HAS_SETRUID */
1201           # ifdef HAS_SETEUID
1202           if ((PL_delaymagic & DM_UID) == DM_EUID) {
1203           (void)seteuid(PL_delaymagic_euid);
1204           PL_delaymagic &= ~DM_EUID;
1205           }
1206           # endif /* HAS_SETEUID */
1207           if (PL_delaymagic & DM_UID) {
1208           if (PL_delaymagic_uid != PL_delaymagic_euid)
1209           DIE(aTHX_ "No setreuid available");
1210           (void)PerlProc_setuid(PL_delaymagic_uid);
1211           }
1212           # endif /* HAS_SETREUID */
1213           #endif /* HAS_SETRESUID */
1214 0         tmp_uid = PerlProc_getuid();
1215 0         tmp_euid = PerlProc_geteuid();
1216           }
1217 348374 50       if (PL_delaymagic & DM_GID) {
1218           #ifdef HAS_SETRESGID
1219 0 0       (void)setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
    0        
1220 0         (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
1221           (Gid_t)-1);
1222           #else
1223           # ifdef HAS_SETREGID
1224           (void)setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1225           (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1);
1226           # else
1227           # ifdef HAS_SETRGID
1228           if ((PL_delaymagic & DM_GID) == DM_RGID) {
1229           (void)setrgid(PL_delaymagic_gid);
1230           PL_delaymagic &= ~DM_RGID;
1231           }
1232           # endif /* HAS_SETRGID */
1233           # ifdef HAS_SETEGID
1234           if ((PL_delaymagic & DM_GID) == DM_EGID) {
1235           (void)setegid(PL_delaymagic_egid);
1236           PL_delaymagic &= ~DM_EGID;
1237           }
1238           # endif /* HAS_SETEGID */
1239           if (PL_delaymagic & DM_GID) {
1240           if (PL_delaymagic_gid != PL_delaymagic_egid)
1241           DIE(aTHX_ "No setregid available");
1242           (void)PerlProc_setgid(PL_delaymagic_gid);
1243           }
1244           # endif /* HAS_SETREGID */
1245           #endif /* HAS_SETRESGID */
1246 0         tmp_gid = PerlProc_getgid();
1247 0         tmp_egid = PerlProc_getegid();
1248           }
1249 348374 50       TAINTING_set( TAINTING_get | (tmp_uid && (tmp_euid != tmp_uid || tmp_egid != tmp_gid)) );
    50        
1250           #ifdef NO_TAINT_SUPPORT
1251           PERL_UNUSED_VAR(tmp_uid);
1252           PERL_UNUSED_VAR(tmp_euid);
1253           PERL_UNUSED_VAR(tmp_gid);
1254           PERL_UNUSED_VAR(tmp_egid);
1255           #endif
1256           }
1257 201988164         PL_delaymagic = 0;
1258            
1259 201988164 100       if (gimme == G_VOID)
1260 198439226         SP = firstrelem - 1;
1261 3548938 100       else if (gimme == G_SCALAR) {
1262 3453892         dTARGET;
1263           SP = firstrelem;
1264 3453892 50       SETi(lastrelem - firstrelem + 1);
1265           }
1266           else {
1267 95046 100       if (ary || hash)
1268           /* note that in this case *firstlelem may have been overwritten
1269           by sv_undef in the odd hash case */
1270           SP = lastrelem;
1271           else {
1272 91600         SP = firstrelem + (lastlelem - firstlelem);
1273 91600         lelem = firstlelem + (relem - firstrelem);
1274 137404 100       while (relem <= SP)
1275 4 50       *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1276           }
1277           }
1278            
1279 201988164         RETURN;
1280           }
1281            
1282 2087052         PP(pp_qr)
1283 2087052 50       {
1284 2087052         dVAR; dSP;
1285 2087052         PMOP * const pm = cPMOP;
1286 2087052         REGEXP * rx = PM_GETRE(pm);
1287 3121038 50       SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1288 2087052         SV * const rv = sv_newmortal();
1289           CV **cvp;
1290           CV *cv;
1291            
1292 3121038         SvUPGRADE(rv, SVt_IV);
1293           /* For a subroutine describing itself as "This is a hacky workaround" I'm
1294           loathe to use it here, but it seems to be the right fix. Or close.
1295           The key part appears to be that it's essential for pp_qr to return a new
1296           object (SV), which implies that there needs to be an effective way to
1297           generate a new SV from the existing SV that is pre-compiled in the
1298           optree. */
1299 2087052         SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1300 2087052         SvROK_on(rv);
1301            
1302 2087052         cvp = &( ReANY((REGEXP *)SvRV(rv))->qr_anoncv);
1303 2087052 100       if ((cv = *cvp) && CvCLONE(*cvp)) {
    100        
1304 7648         *cvp = cv_clone(cv);
1305 7648         SvREFCNT_dec_NN(cv);
1306           }
1307            
1308 2087052 50       if (pkg) {
1309 2087052         HV *const stash = gv_stashsv(pkg, GV_ADD);
1310 2087052         SvREFCNT_dec_NN(pkg);
1311 2087052         (void)sv_bless(rv, stash);
1312           }
1313            
1314 2087052 100       if (RX_ISTAINTED(rx)) {
1315 650 50       SvTAINTED_on(rv);
1316 650 50       SvTAINTED_on(SvRV(rv));
1317           }
1318 2087052 50       XPUSHs(rv);
1319 2087052         RETURN;
1320           }
1321            
1322 158822148         PP(pp_match)
1323           {
1324 158822148         dVAR; dSP; dTARG;
1325 158822148         PMOP *pm = cPMOP;
1326           PMOP *dynpm = pm;
1327           const char *s;
1328           const char *strend;
1329           SSize_t curpos = 0; /* initial pos() or current $+[0] */
1330           I32 global;
1331           U8 r_flags = 0;
1332           const char *truebase; /* Start of string */
1333 158822148         REGEXP *rx = PM_GETRE(pm);
1334           bool rxtainted;
1335 158822148 100       const I32 gimme = GIMME;
    100        
1336           STRLEN len;
1337 158822148         const I32 oldsave = PL_savestack_ix;
1338           I32 had_zerolen = 0;
1339           MAGIC *mg = NULL;
1340            
1341 158822148 100       if (PL_op->op_flags & OPf_STACKED)
1342 128478340         TARG = POPs;
1343 60687556 100       else if (PL_op->op_private & OPpTARGET_MY)
    50        
1344 60         GETTARGET;
1345           else {
1346 30343748 100       TARG = DEFSV;
1347 15149018         EXTEND(SP,1);
1348           }
1349            
1350 158822148         PUTBACK; /* EVAL blocks need stack_sp. */
1351           /* Skip get-magic if this is a qr// clone, because regcomp has
1352           already done it. */
1353 158822148         truebase = ReANY(rx)->mother_re
1354 13132731 100       ? SvPV_nomg_const(TARG, len)
1355 231418929 100       : SvPV_const(TARG, len);
    100        
1356 158822146 50       if (!truebase)
1357 0         DIE(aTHX_ "panic: pp_match");
1358 158822146         strend = truebase + len;
1359 158822146 100       rxtainted = (RX_ISTAINTED(rx) ||
    100        
1360 79883153 50       (TAINT_get && (pm->op_pmflags & PMf_RETAINT)));
1361 158822146         TAINT_NOT;
1362            
1363           /* We need to know this in case we fail out early - pos() must be reset */
1364 158822146         global = dynpm->op_pmflags & PMf_GLOBAL;
1365            
1366           /* PMdf_USED is set after a ?? matches once */
1367 158822146 100       if (
1368           #ifdef USE_ITHREADS
1369           SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1370           #else
1371 158822146         pm->op_pmflags & PMf_USED
1372           #endif
1373           ) {
1374           DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
1375           goto nope;
1376           }
1377            
1378           /* empty pattern special-cased to use last successful pattern if
1379           possible, except for qr// */
1380 231418875 100       if (!ReANY(rx)->mother_re && !RX_PRELEN(rx)
    100        
1381 662 100       && PL_curpm) {
1382 612         pm = PL_curpm;
1383 612         rx = PM_GETRE(pm);
1384           }
1385            
1386 237796220 50       if (RX_MINLEN(rx) >= 0 && (STRLEN)RX_MINLEN(rx) > len) {
    100        
1387           DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match (%"
1388           UVuf" < %"IVdf")\n",
1389           (UV)len, (IV)RX_MINLEN(rx)));
1390           goto nope;
1391           }
1392            
1393           /* get pos() if //g */
1394 139581562 100       if (global) {
1395 14231040         mg = mg_find_mglob(TARG);
1396 14231040 100       if (mg && mg->mg_len >= 0) {
    100        
1397 24945724         curpos = MgBYTEPOS(mg, TARG, truebase, len);
1398           /* last time pos() was set, it was zero-length match */
1399 12472862 100       if (mg->mg_flags & MGf_MINMATCH)
1400           had_zerolen = 1;
1401           }
1402           }
1403            
1404           #ifdef PERL_SAWAMPERSAND
1405           if ( RX_NPARENS(rx)
1406           || PL_sawampersand
1407           || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
1408           || (dynpm->op_pmflags & PMf_KEEPCOPY)
1409           )
1410           #endif
1411           {
1412           r_flags |= (REXEC_COPY_STR|REXEC_COPY_SKIP_PRE);
1413           /* in @a =~ /(.)/g, we iterate multiple times, but copy the buffer
1414           * only on the first iteration. Therefore we need to copy $' as well
1415           * as $&, to make the rest of the string available for captures in
1416           * subsequent iterations */
1417 139581562 100       if (! (global && gimme == G_ARRAY))
1418           r_flags |= REXEC_COPY_SKIP_POST;
1419           };
1420           #ifdef PERL_SAWAMPERSAND
1421           if (dynpm->op_pmflags & PMf_KEEPCOPY)
1422           /* handle KEEPCOPY in pmop but not rx, eg $r=qr/a/; /$r/p */
1423           r_flags &= ~(REXEC_COPY_SKIP_PRE|REXEC_COPY_SKIP_POST);
1424           #endif
1425            
1426           s = truebase;
1427            
1428           play_it_again:
1429 140837714 100       if (global)
1430 15487192         s = truebase + curpos;
1431            
1432 140837714 100       if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1433           had_zerolen, TARG, NULL, r_flags))
1434           goto nope;
1435            
1436 41666671         PL_curpm = pm;
1437 41666671 100       if (dynpm->op_pmflags & PMf_ONCE)
1438           #ifdef USE_ITHREADS
1439           SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1440           #else
1441 34         dynpm->op_pmflags |= PMf_USED;
1442           #endif
1443            
1444 41666671 100       if (rxtainted)
1445 130         RX_MATCH_TAINTED_on(rx);
1446 41666671 100       TAINT_IF(RX_MATCH_TAINTED(rx));
1447            
1448           /* update pos */
1449            
1450 41666671 100       if (global && (gimme != G_ARRAY || (dynpm->op_pmflags & PMf_CONTINUE))) {
    100        
    100        
1451 12385310 100       if (!mg)
1452 1106310         mg = sv_magicext_mglob(TARG);
1453 18577965 100       MgBYTEPOS_set(mg, TARG, truebase, RX_OFFS(rx)[0].end);
    50        
    0        
1454 24770620 100       if (RX_ZERO_LEN(rx))
1455 41498         mg->mg_flags |= MGf_MINMATCH;
1456           else
1457 12343812         mg->mg_flags &= ~MGf_MINMATCH;
1458           }
1459            
1460 41666671 100       if ((!RX_NPARENS(rx) && !global) || gimme != G_ARRAY) {
    100        
    100        
1461 39220408 100       LEAVE_SCOPE(oldsave);
1462 39220408         RETPUSHYES;
1463           }
1464            
1465           /* push captures on stack */
1466            
1467 2446263 100       {
1468 2446263         const I32 nparens = RX_NPARENS(rx);
1469 2446263         I32 i = (global && !nparens) ? 1 : 0;
1470            
1471 2446263         SPAGAIN; /* EVAL blocks could move the stack. */
1472 1206936         EXTEND(SP, nparens + i);
1473 2446263 50       EXTEND_MORTAL(nparens + i);
1474 6759321 100       for (i = !i; i <= nparens; i++) {
1475 4313058         PUSHs(sv_newmortal());
1476 6401800 100       if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
    50        
1477 8478788         const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1478 4239394         const char * const s = RX_OFFS(rx)[i].start + truebase;
1479 6328136 50       if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
    50        
    50        
1480 4239394 50       len < 0 || len > strend - s)
1481 0         DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1482           "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1483 0         (long) i, (long) RX_OFFS(rx)[i].start,
1484 0         (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1485 4239394         sv_setpvn(*SP, s, len);
1486 4239394 100       if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
    50        
    100        
1487 12880         SvUTF8_on(*SP);
1488           }
1489           }
1490 2446263 100       if (global) {
1491 1256152         curpos = (UV)RX_OFFS(rx)[0].end;
1492 3768456         had_zerolen = RX_ZERO_LEN(rx);
1493 1256152         PUTBACK; /* EVAL blocks may use stack */
1494 1256152         r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1495 1256152         goto play_it_again;
1496           }
1497 1190111 100       LEAVE_SCOPE(oldsave);
1498 1190111         RETURN;
1499           }
1500           /* NOTREACHED */
1501            
1502           nope:
1503 118386475 100       if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
    100        
1504 1764926 100       if (!mg)
1505 645110         mg = mg_find_mglob(TARG);
1506 1764926 100       if (mg)
1507 1126148         mg->mg_len = -1;
1508           }
1509 118386475 100       LEAVE_SCOPE(oldsave);
1510 118386475 100       if (gimme == G_ARRAY)
1511 825076         RETURN;
1512 138388100         RETPUSHNO;
1513           }
1514            
1515           OP *
1516 9330653         Perl_do_readline(pTHX)
1517           {
1518 9330653 100       dVAR; dSP; dTARGETSTACKED;
1519           SV *sv;
1520           STRLEN tmplen = 0;
1521           STRLEN offset;
1522           PerlIO *fp;
1523 9330653 50       IO * const io = GvIO(PL_last_in_gv);
    100        
    50        
1524 9330653         const I32 type = PL_op->op_type;
1525 9330653 100       const I32 gimme = GIMME_V;
1526            
1527 9330653 100       if (io) {
1528 9330645 100       const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1529 9330645 100       if (mg) {
1530 8414 100       Perl_tied_method(aTHX_ SV_CONST(READLINE), SP, MUTABLE_SV(io), mg, gimme, 0);
1531 8404 100       if (gimme == G_SCALAR) {
1532 8338         SPAGAIN;
1533 8338 50       SvSetSV_nosteal(TARG, TOPs);
1534 8338 50       SETTARG;
1535           }
1536 8404         return NORMAL;
1537           }
1538           }
1539           fp = NULL;
1540 9322239 100       if (io) {
1541 9322231         fp = IoIFP(io);
1542 9322231 100       if (!fp) {
1543 718 100       if (IoFLAGS(io) & IOf_ARGV) {
1544 238 50       if (IoFLAGS(io) & IOf_START) {
1545 238         IoLINES(io) = 0;
1546 238 50       if (av_len(GvAVn(PL_last_in_gv)) < 0) {
    100        
1547 154         IoFLAGS(io) &= ~IOf_START;
1548 154         do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1549 154 50       SvTAINTED_off(GvSVn(PL_last_in_gv)); /* previous tainting irrelevant */
    0        
1550 154 50       sv_setpvs(GvSVn(PL_last_in_gv), "-");
1551 154 50       SvSETMAGIC(GvSV(PL_last_in_gv));
1552 154         fp = IoIFP(io);
1553 154         goto have_fp;
1554           }
1555           }
1556 84         fp = nextargv(PL_last_in_gv);
1557 84 100       if (!fp) { /* Note: fp != IoIFP(io) */
1558 6         (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1559           }
1560           }
1561 480 100       else if (type == OP_GLOB)
1562 438         fp = Perl_start_glob(aTHX_ POPs, io);
1563           }
1564 9321513 50       else if (type == OP_GLOB)
1565 0         SP--;
1566 9321513 100       else if (IoTYPE(io) == IoTYPE_WRONLY) {
1567 12         report_wrongway_fh(PL_last_in_gv, '>');
1568           }
1569           }
1570 9322085 100       if (!fp) {
1571 56 100       if ((!io || !(IoFLAGS(io) & IOf_START))
    100        
1572 50 100       && ckWARN2(WARN_GLOB, WARN_CLOSED))
1573           {
1574 20 50       if (type == OP_GLOB)
1575 0         Perl_ck_warner_d(aTHX_ packWARN(WARN_GLOB),
1576           "glob failed (can't start child: %s)",
1577 0         Strerror(errno));
1578           else
1579 20         report_evil_fh(PL_last_in_gv);
1580           }
1581 56 100       if (gimme == G_SCALAR) {
1582           /* undef TARG, and push that undefined value */
1583 46 100       if (type != OP_RCATLINE) {
1584 40 100       SV_CHECK_THINKFIRST_COW_DROP(TARG);
1585 36 50       SvOK_off(TARG);
1586           }
1587 42 100       PUSHTARG;
1588           }
1589 52         RETURN;
1590           }
1591           have_fp:
1592 18640102 100       if (gimme == G_SCALAR) {
    100        
1593           sv = TARG;
1594 9317919 100       if (type == OP_RCATLINE && SvGMAGICAL(sv))
    100        
1595 4         mg_get(sv);
1596 9317919 100       if (SvROK(sv)) {
1597 14 100       if (type == OP_RCATLINE)
1598 4 50       SvPV_force_nomg_nolen(sv);
1599           else
1600 10         sv_unref(sv);
1601           }
1602 9317905 100       else if (isGV_with_GP(sv)) {
    50        
1603 4 50       SvPV_force_nomg_nolen(sv);
1604           }
1605 4494845         SvUPGRADE(sv, SVt_PV);
1606 9317919         tmplen = SvLEN(sv); /* remember if already alloced */
1607 9317919 100       if (!tmplen && !SvREADONLY(sv) && !SvIsCOW(sv)) {
    100        
1608           /* try short-buffering it. Please update t/op/readline.t
1609           * if you change the growth length.
1610           */
1611 568467         Sv_Grow(sv, 80);
1612           }
1613           offset = 0;
1614 9317919 100       if (type == OP_RCATLINE && SvOK(sv)) {
    100        
    50        
    50        
1615 3346 100       if (!SvPOK(sv)) {
1616 4 50       SvPV_force_nomg_nolen(sv);
1617           }
1618 4843505         offset = SvCUR(sv);
1619           }
1620           }
1621           else {
1622 87232         sv = sv_2mortal(newSV(80));
1623           offset = 0;
1624           }
1625            
1626           /* This should not be marked tainted if the fp is marked clean */
1627           #define MAYBE_TAINT_LINE(io, sv) \
1628           if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1629           TAINT; \
1630           SvTAINTED_on(sv); \
1631           }
1632            
1633           /* delay EOF state for a snarfed empty file */
1634           #define SNARF_EOF(gimme,rs,io,sv) \
1635           (gimme != G_SCALAR || SvCUR(sv) \
1636           || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1637            
1638           for (;;) {
1639 9488119         PUTBACK;
1640 9488119 100       if (!sv_gets(sv, fp, offset)
1641 24495 100       && (type == OP_GLOB
1642 24063 100       || SNARF_EOF(gimme, PL_rs, io, sv)
    100        
    100        
    100        
    50        
    50        
1643 428 100       || PerlIO_error(fp)))
1644           {
1645 24071         PerlIO_clearerr(fp);
1646 24071 100       if (IoFLAGS(io) & IOf_ARGV) {
1647 580         fp = nextargv(PL_last_in_gv);
1648 580 100       if (fp)
1649 384         continue;
1650 196         (void)do_close(PL_last_in_gv, FALSE);
1651           }
1652 23491 100       else if (type == OP_GLOB) {
1653 432 50       if (!do_close(PL_last_in_gv, FALSE)) {
1654 0 0       Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1655           "glob failed (child exited with status %d%s)",
1656           (int)(STATUS_CURRENT >> 8),
1657 0         (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1658           }
1659           }
1660 23687 100       if (gimme == G_SCALAR) {
1661 19529 100       if (type != OP_RCATLINE) {
1662 19525 50       SV_CHECK_THINKFIRST_COW_DROP(TARG);
1663 19525 100       SvOK_off(TARG);
1664           }
1665 19529         SPAGAIN;
1666 19529 100       PUSHTARG;
1667           }
1668 23687 100       MAYBE_TAINT_LINE(io, sv);
    50        
1669 23687         RETURN;
1670           }
1671 9464042 100       MAYBE_TAINT_LINE(io, sv);
    100        
1672 9464042         IoLINES(io)++;
1673 9464042         IoFLAGS(io) |= IOf_NOLINE;
1674 9464042 100       SvSETMAGIC(sv);
1675 9464042         SPAGAIN;
1676 9464042 100       XPUSHs(sv);
1677 9464042 100       if (type == OP_GLOB) {
1678           const char *t1;
1679            
1680 442 50       if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
    50        
1681 442         char * const tmps = SvEND(sv) - 1;
1682 442 50       if (*tmps == *SvPVX_const(PL_rs)) {
1683 442         *tmps = '\0';
1684 442         SvCUR_set(sv, SvCUR(sv) - 1);
1685           }
1686           }
1687 3692 100       for (t1 = SvPVX_const(sv); *t1; t1++)
1688 3997 100       if (!isALPHANUMERIC(*t1) &&
    100        
1689 662         strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1690           break;
1691 858         if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1692           (void)POPs; /* Unmatched wildcard? Chuck it... */
1693 416         continue;
1694           }
1695 9463600 100       } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1696 21798 100       if (ckWARN(WARN_UTF8)) {
1697 2176         const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1698 2176         const STRLEN len = SvCUR(sv) - offset;
1699           const U8 *f;
1700            
1701 2176 100       if (!is_utf8_string_loc(s, len, &f))
1702           /* Emulate :encoding(utf8) warning in the same case. */
1703 9 50       Perl_warner(aTHX_ packWARN(WARN_UTF8),
1704           "utf8 \"\\x%02X\" does not map to Unicode",
1705 12         f < (U8*)SvEND(sv) ? *f : 0);
1706           }
1707           }
1708 9463626 100       if (gimme == G_ARRAY) {
1709 165136 100       if (SvLEN(sv) - SvCUR(sv) > 20) {
1710 145416         SvPV_shrink_to_cur(sv);
1711           }
1712 165136         sv = sv_2mortal(newSV(80));
1713 165136         continue;
1714           }
1715 9298490 100       else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
    100        
1716           /* try to reclaim a bit of scalar space (only on 1st alloc) */
1717           const STRLEN new_len
1718 93033 100       = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1719 93033         SvPV_renew(sv, new_len);
1720           }
1721 9314741         RETURN;
1722           }
1723           }
1724            
1725 483465120         PP(pp_helem)
1726           {
1727 483465120         dVAR; dSP;
1728           HE* he;
1729           SV **svp;
1730 483465120         SV * const keysv = POPs;
1731 483465120         HV * const hv = MUTABLE_HV(POPs);
1732 483465120 100       const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
    100        
    100        
1733 483465120         const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1734           SV *sv;
1735 483465120         const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1736           bool preeminent = TRUE;
1737            
1738 483465120 50       if (SvTYPE(hv) != SVt_PVHV)
1739 0         RETPUSHUNDEF;
1740            
1741 483465120 100       if (localizing) {
1742           MAGIC *mg;
1743           HV *stash;
1744            
1745           /* If we can determine whether the element exist,
1746           * Try to preserve the existenceness of a tied hash
1747           * element by using EXISTS and DELETE if possible.
1748           * Fallback to FETCH and STORE otherwise. */
1749 3715408 100       if (SvCANEXISTDELETE(hv))
    100        
    50        
    50        
    50        
    50        
1750 3715408         preeminent = hv_exists_ent(hv, keysv, 0);
1751           }
1752            
1753 483465120 100       he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
1754 483464878 100       svp = he ? &HeVAL(he) : NULL;
1755 483464878 100       if (lval) {
1756 256220726 100       if (!svp || !*svp || *svp == &PL_sv_undef) {
    50        
    50        
1757           SV* lv;
1758           SV* key2;
1759 78722 50       if (!defer) {
1760 0         DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1761           }
1762 78722         lv = sv_newmortal();
1763 78722         sv_upgrade(lv, SVt_PVLV);
1764 78722         LvTYPE(lv) = 'y';
1765 78722         sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1766 78722         SvREFCNT_dec_NN(key2); /* sv_magic() increments refcount */
1767 157444         LvTARG(lv) = SvREFCNT_inc_simple(hv);
1768 78722         LvTARGLEN(lv) = 1;
1769 78722         PUSHs(lv);
1770 78722         RETURN;
1771           }
1772 256142004 100       if (localizing) {
1773 3715408 100       if (HvNAME_get(hv) && isGV(*svp))
    100        
    50        
    0        
    50        
    50        
    50        
    100        
1774 10         save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1775 3715398 100       else if (preeminent)
1776 605294         save_helem_flags(hv, keysv, svp,
1777           (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1778           else
1779 3110104         SAVEHDELETE(hv, keysv);
1780           }
1781 252426596 100       else if (PL_op->op_private & OPpDEREF) {
1782 96629523         PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1783 96629523         RETURN;
1784           }
1785           }
1786 386756633 100       sv = (svp && *svp ? *svp : &PL_sv_undef);
    50        
1787           /* Originally this did a conditional C; this
1788           * was to make C possible.
1789           * However, it seems no longer to be needed for that purpose, and
1790           * introduced a new bug: stuff like C
1791           * would loop endlessly since the pos magic is getting set on the
1792           * mortal copy and lost. However, the copy has the effect of
1793           * triggering the get magic, and losing it altogether made things like
1794           * c<$tied{foo};> in void context no longer do get magic, which some
1795           * code relied on. Also, delayed triggering of magic on @+ and friends
1796           * meant the original regex may be out of scope by now. So as a
1797           * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1798           * being called too many times). */
1799 386756633 100       if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
    100        
    100        
1800 424245         mg_get(sv);
1801 386756625         PUSHs(sv);
1802 435558114         RETURN;
1803           }
1804            
1805 151771607         PP(pp_iter)
1806 151771607 50       {
1807 151771607         dVAR; dSP;
1808           PERL_CONTEXT *cx;
1809           SV *oldsv;
1810           SV **itersvp;
1811            
1812 75659283         EXTEND(SP, 1);
1813 151771607         cx = &cxstack[cxstack_ix];
1814 151771607 50       itersvp = CxITERVAR(cx);
    100        
1815            
1816 151771607         switch (CxTYPE(cx)) {
1817            
1818           case CXt_LOOP_LAZYSV: /* string increment */
1819           {
1820 836         SV* cur = cx->blk_loop.state_u.lazysv.cur;
1821 836         SV *end = cx->blk_loop.state_u.lazysv.end;
1822           /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1823           It has SvPVX of "" and SvCUR of 0, which is what we want. */
1824 836         STRLEN maxlen = 0;
1825 836 100       const char *max = SvPV_const(end, maxlen);
1826 836 100       if (SvNIOK(cur) || SvCUR(cur) > maxlen)
    100        
1827 56         RETPUSHNO;
1828            
1829 780         oldsv = *itersvp;
1830 780 100       if (SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv)) {
1831           /* safe to reuse old SV */
1832 774         sv_setsv(oldsv, cur);
1833           }
1834           else
1835           {
1836           /* we need a fresh SV every time so that loop body sees a
1837           * completely new SV for closures/references to work as
1838           * they used to */
1839 6         *itersvp = newSVsv(cur);
1840 6         SvREFCNT_dec_NN(oldsv);
1841           }
1842 780 100       if (strEQ(SvPVX_const(cur), max))
1843 38         sv_setiv(cur, 0); /* terminate next time */
1844           else
1845 742         sv_inc(cur);
1846           break;
1847           }
1848            
1849           case CXt_LOOP_LAZYIV: /* integer increment */
1850           {
1851 21824758         IV cur = cx->blk_loop.state_u.lazyiv.cur;
1852 21824758 100       if (cur > cx->blk_loop.state_u.lazyiv.end)
1853 604040         RETPUSHNO;
1854            
1855 21220718         oldsv = *itersvp;
1856           /* don't risk potential race */
1857 21220718 100       if (SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv)) {
1858           /* safe to reuse old SV */
1859 20884076         sv_setiv(oldsv, cur);
1860           }
1861           else
1862           {
1863           /* we need a fresh SV every time so that loop body sees a
1864           * completely new SV for closures/references to work as they
1865           * used to */
1866 336642         *itersvp = newSViv(cur);
1867 336642         SvREFCNT_dec_NN(oldsv);
1868           }
1869            
1870 21220718 100       if (cur == IV_MAX) {
1871           /* Handle end of range at IV_MAX */
1872 10         cx->blk_loop.state_u.lazyiv.end = IV_MIN;
1873           } else
1874 21220708         ++cx->blk_loop.state_u.lazyiv.cur;
1875           break;
1876           }
1877            
1878           case CXt_LOOP_FOR: /* iterate array */
1879           {
1880            
1881 129946013         AV *av = cx->blk_loop.state_u.ary.ary;
1882           SV *sv;
1883           bool av_is_stack = FALSE;
1884           IV ix;
1885            
1886 129946013 100       if (!av) {
1887           av_is_stack = TRUE;
1888 91359381         av = PL_curstack;
1889           }
1890 129946013 100       if (PL_op->op_private & OPpITER_REVERSED) {
1891 68304         ix = --cx->blk_loop.state_u.ary.ix;
1892 68304 100       if (ix <= (av_is_stack ? cx->blk_loop.resetsp : -1))
    100        
1893 14784         RETPUSHNO;
1894           }
1895           else {
1896 129877709         ix = ++cx->blk_loop.state_u.ary.ix;
1897 129877709 100       if (ix > (av_is_stack ? cx->blk_oldsp : AvFILL(av)))
    100        
    100        
1898 29053349         RETPUSHNO;
1899           }
1900            
1901 105553790 100       if (SvMAGICAL(av) || AvREIFY(av)) {
    100        
1902 4675910         SV * const * const svp = av_fetch(av, ix, FALSE);
1903 4675910 100       sv = svp ? *svp : NULL;
1904           }
1905           else {
1906 96201970         sv = AvARRAY(av)[ix];
1907           }
1908            
1909 100877880 100       if (sv) {
1910 100851260 100       if (SvIS_FREED(sv)) {
1911 2         *itersvp = NULL;
1912 2         Perl_croak(aTHX_ "Use of freed value in iteration");
1913           }
1914 100851258 100       if (SvPADTMP(sv) && !IS_PADGV(sv))
1915 66148         sv = newSVsv(sv);
1916           else {
1917 100785110         SvTEMP_off(sv);
1918 100785110         SvREFCNT_inc_simple_void_NN(sv);
1919           }
1920           }
1921 26620 50       else if (!av_is_stack) {
1922 26620         SV *lv = newSV_type(SVt_PVLV);
1923 26620         LvTYPE(lv) = 'y';
1924 26620         sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
1925 53240         LvTARG(lv) = SvREFCNT_inc_simple(av);
1926 26620         LvTARGOFF(lv) = ix;
1927 26620         LvTARGLEN(lv) = (STRLEN)UV_MAX;
1928           sv = lv;
1929           }
1930           else
1931           sv = &PL_sv_undef;
1932            
1933 100877878         oldsv = *itersvp;
1934 100877878         *itersvp = sv;
1935 100877878         SvREFCNT_dec(oldsv);
1936 100877878         break;
1937           }
1938            
1939           default:
1940 0         DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
1941           }
1942 136989483         RETPUSHYES;
1943           }
1944            
1945           /*
1946           A description of how taint works in pattern matching and substitution.
1947            
1948           This is all conditional on NO_TAINT_SUPPORT not being defined. Under
1949           NO_TAINT_SUPPORT, taint-related operations should become no-ops.
1950            
1951           While the pattern is being assembled/concatenated and then compiled,
1952           PL_tainted will get set (via TAINT_set) if any component of the pattern
1953           is tainted, e.g. /.*$tainted/. At the end of pattern compilation,
1954           the RXf_TAINTED flag is set on the pattern if PL_tainted is set (via
1955           TAINT_get).
1956            
1957           When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
1958           the pattern is marked as tainted. This means that subsequent usage, such
1959           as /x$r/, will set PL_tainted using TAINT_set, and thus RXf_TAINTED,
1960           on the new pattern too.
1961            
1962           At the start of execution of a pattern, the RXf_TAINTED_SEEN flag on the
1963           regex is cleared; during execution, locale-variant ops such as POSIXL may
1964           set RXf_TAINTED_SEEN.
1965            
1966           RXf_TAINTED_SEEN is used post-execution by the get magic code
1967           of $1 et al to indicate whether the returned value should be tainted.
1968           It is the responsibility of the caller of the pattern (i.e. pp_match,
1969           pp_subst etc) to set this flag for any other circumstances where $1 needs
1970           to be tainted.
1971            
1972           The taint behaviour of pp_subst (and pp_substcont) is quite complex.
1973            
1974           There are three possible sources of taint
1975           * the source string
1976           * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
1977           * the replacement string (or expression under /e)
1978          
1979           There are four destinations of taint and they are affected by the sources
1980           according to the rules below:
1981            
1982           * the return value (not including /r):
1983           tainted by the source string and pattern, but only for the
1984           number-of-iterations case; boolean returns aren't tainted;
1985           * the modified string (or modified copy under /r):
1986           tainted by the source string, pattern, and replacement strings;
1987           * $1 et al:
1988           tainted by the pattern, and under 'use re "taint"', by the source
1989           string too;
1990           * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
1991           should always be unset before executing subsequent code.
1992            
1993           The overall action of pp_subst is:
1994            
1995           * at the start, set bits in rxtainted indicating the taint status of
1996           the various sources.
1997            
1998           * After each pattern execution, update the SUBST_TAINT_PAT bit in
1999           rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2000           pattern has subsequently become tainted via locale ops.
2001            
2002           * If control is being passed to pp_substcont to execute a /e block,
2003           save rxtainted in the CXt_SUBST block, for future use by
2004           pp_substcont.
2005            
2006           * Whenever control is being returned to perl code (either by falling
2007           off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2008           use the flag bits in rxtainted to make all the appropriate types of
2009           destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2010           et al will appear tainted.
2011            
2012           pp_match is just a simpler version of the above.
2013            
2014           */
2015            
2016 104453038         PP(pp_subst)
2017 104453038 100       {
2018 104453038         dVAR; dSP; dTARG;
2019 104453038         PMOP *pm = cPMOP;
2020           PMOP *rpm = pm;
2021           char *s;
2022           char *strend;
2023           const char *c;
2024           STRLEN clen;
2025           I32 iters = 0;
2026           I32 maxiters;
2027           bool once;
2028           U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2029           See "how taint works" above */
2030           char *orig;
2031           U8 r_flags;
2032 104453038         REGEXP *rx = PM_GETRE(pm);
2033           STRLEN len;
2034           int force_on_match = 0;
2035 104453038         const I32 oldsave = PL_savestack_ix;
2036           STRLEN slen;
2037           bool doutf8 = FALSE; /* whether replacement is in utf8 */
2038           #ifdef PERL_ANY_COW
2039           bool is_cow;
2040           #endif
2041           SV *nsv = NULL;
2042           /* known replacement string? */
2043 104453038 100       SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2044            
2045 104453038 50       PERL_ASYNC_CHECK();
2046            
2047 104453038 100       if (PL_op->op_flags & OPf_STACKED)
2048 90733934         TARG = POPs;
2049 27438192 100       else if (PL_op->op_private & OPpTARGET_MY)
    50        
2050 16         GETTARGET;
2051           else {
2052 13719088 100       TARG = DEFSV;
2053 6823798         EXTEND(SP,1);
2054           }
2055            
2056 52187689         SvGETMAGIC(TARG); /* must come before cow check */
2057           #ifdef PERL_ANY_COW
2058           /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2059           because they make integers such as 256 "false". */
2060 104453038         is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2061           #else
2062           if (SvIsCOW(TARG))
2063           sv_force_normal_flags(TARG,0);
2064           #endif
2065 104453038 100       if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2066 103539248 100       && (SvREADONLY(TARG)
2067 103539242 100       || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
    50        
    50        
2068 103539208 50       || SvTYPE(TARG) > SVt_PVLV)
2069 34 50       && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2070 6         Perl_croak_no_modify();
2071 104453032         PUTBACK;
2072            
2073 104453032 100       orig = SvPV_nomg(TARG, len);
2074           /* note we don't (yet) force the var into being a string; if we fail
2075           * to match, we leave as-is; on successful match howeverm, we *will*
2076           * coerce into a string, then repeat the match */
2077 104453032 100       if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV || SvVOK(TARG))
    50        
    100        
    100        
2078           force_on_match = 1;
2079            
2080           /* only replace once? */
2081 104453032         once = !(rpm->op_pmflags & PMf_GLOBAL);
2082            
2083           /* See "how taint works" above */
2084 104453032 100       if (TAINTING_get) {
2085 1188350 100       rxtainted = (
    50        
    50        
    100        
2086 198194 50       (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2087 396092         | (RX_ISTAINTED(rx) ? SUBST_TAINT_PAT : 0)
2088 396092         | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2089 394810 50       | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2090           ? SUBST_TAINT_BOOLRET : 0));
2091 52468992         TAINT_NOT;
2092           }
2093            
2094           force_it:
2095 104454216 50       if (!pm || !orig)
2096 0         DIE(aTHX_ "panic: pp_subst, pm=%p, orig=%p", pm, orig);
2097            
2098 104454216         strend = orig + len;
2099 104454216 100       slen = DO_UTF8(TARG) ? utf8_length((U8*)orig, (U8*)strend) : len;
    100        
2100 104454216         maxiters = 2 * slen + 10; /* We can match twice at each
2101           position, once with zero-length,
2102           second time with non-zero. */
2103            
2104 156637486 100       if (!RX_PRELEN(rx) && PL_curpm
    100        
2105 60 100       && !ReANY(rx)->mother_re) {
2106 58         pm = PL_curpm;
2107 58         rx = PM_GETRE(pm);
2108           }
2109            
2110           #ifdef PERL_SAWAMPERSAND
2111           r_flags = ( RX_NPARENS(rx)
2112           || PL_sawampersand
2113           || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
2114           || (rpm->op_pmflags & PMf_KEEPCOPY)
2115           )
2116           ? REXEC_COPY_STR
2117           : 0;
2118           #else
2119           r_flags = REXEC_COPY_STR;
2120           #endif
2121            
2122 104454216 100       if (!CALLREGEXEC(rx, orig, strend, orig, 0, TARG, NULL, r_flags))
2123           {
2124 48970316         SPAGAIN;
2125 48970316 100       PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2126 48970316 100       LEAVE_SCOPE(oldsave);
2127 48970316         RETURN;
2128           }
2129 55483896         PL_curpm = pm;
2130            
2131           /* known replacement string? */
2132 55483896 100       if (dstr) {
2133           /* replacement needing upgrading? */
2134 54170329 100       if (DO_UTF8(TARG) && !doutf8) {
    100        
    100        
2135 88288         nsv = sv_newmortal();
2136 88288 50       SvSetSV(nsv, dstr);
2137 88288 100       if (PL_encoding)
2138 2358         sv_recode_to_utf8(nsv, PL_encoding);
2139           else
2140 85930         sv_utf8_upgrade(nsv);
2141 88288 50       c = SvPV_const(nsv, clen);
2142 88288         doutf8 = TRUE;
2143           }
2144           else {
2145 54082041 100       c = SvPV_const(dstr, clen);
2146 54082041 100       doutf8 = DO_UTF8(dstr);
    50        
2147           }
2148            
2149 54170329 100       if (SvTAINTED(dstr))
    50        
2150 0         rxtainted |= SUBST_TAINT_REPL;
2151           }
2152           else {
2153           c = NULL;
2154           doutf8 = FALSE;
2155           }
2156          
2157           /* can do inplace substitution? */
2158 55483896 100       if (c
2159           #ifdef PERL_ANY_COW
2160 54170329 100       && !is_cow
2161           #endif
2162 6000014 100       && (I32)clen <= RX_MINLENRET(rx)
2163 3761629 100       && ( once
2164           || !(r_flags & REXEC_COPY_STR)
2165 1475859 100       || (!SvGMAGICAL(dstr) && !(RX_EXTFLAGS(rx) & RXf_EVAL_SEEN))
    100        
2166           )
2167 3757321 100       && !(RX_EXTFLAGS(rx) & RXf_NO_INPLACE_SUBST)
2168 3693391 100       && (!doutf8 || SvUTF8(TARG))
    100        
2169 3693355 100       && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2170           {
2171            
2172           #ifdef PERL_ANY_COW
2173 3493273 100       if (SvIsCOW(TARG)) {
2174 3221741 50       if (!force_on_match)
2175           goto have_a_cow;
2176           assert(SvVOK(TARG));
2177           }
2178           #endif
2179 271532 100       if (force_on_match) {
2180           /* redo the first match, this time with the orig var
2181           * forced into being a string */
2182           force_on_match = 0;
2183 946 50       orig = SvPV_force_nomg(TARG, len);
2184           goto force_it;
2185           }
2186            
2187 270586 100       if (once) {
2188           char *d, *m;
2189 255896 50       if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2190 0         rxtainted |= SUBST_TAINT_PAT;
2191 255896         m = orig + RX_OFFS(rx)[0].start;
2192 255896         d = orig + RX_OFFS(rx)[0].end;
2193           s = orig;
2194 255896 100       if (m - s > strend - d) { /* faster to shorten from end */
2195           I32 i;
2196 24914 100       if (clen) {
2197 28         Copy(c, m, clen, char);
2198 28         m += clen;
2199           }
2200 24914         i = strend - d;
2201 24914 100       if (i > 0) {
2202 934         Move(d, m, i, char);
2203 934         m += i;
2204           }
2205 24914         *m = '\0';
2206 24914         SvCUR_set(TARG, m - s);
2207           }
2208           else { /* faster from front */
2209 230982         I32 i = m - s;
2210 230982         d -= clen;
2211 230982 100       if (i > 0)
2212 34         Move(s, d - i, i, char);
2213 230982         sv_chop(TARG, d-i);
2214 230982 100       if (clen)
2215 148         Copy(c, d, clen, char);
2216           }
2217 255896         SPAGAIN;
2218 255896         PUSHs(&PL_sv_yes);
2219           }
2220           else {
2221           char *d, *m;
2222 14690         d = s = RX_OFFS(rx)[0].start + orig;
2223           do {
2224           I32 i;
2225 34680 50       if (iters++ > maxiters)
2226 0         DIE(aTHX_ "Substitution loop");
2227 34680 50       if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2228 0         rxtainted |= SUBST_TAINT_PAT;
2229 34680         m = RX_OFFS(rx)[0].start + orig;
2230 34680 100       if ((i = m - s)) {
2231 16690 100       if (s != d)
2232 9808         Move(s, d, i, char);
2233 16690         d += i;
2234           }
2235 34680 100       if (clen) {
2236 20464         Copy(c, d, clen, char);
2237 20464         d += clen;
2238           }
2239 34680         s = RX_OFFS(rx)[0].end + orig;
2240 34680 100       } while (CALLREGEXEC(rx, s, strend, orig,
2241           s == m, /* don't match same null twice */
2242           TARG, NULL,
2243           REXEC_NOT_FIRST|REXEC_IGNOREPOS|REXEC_FAIL_ON_UNDERFLOW));
2244 14690 100       if (s != d) {
2245 4216         I32 i = strend - s;
2246 4216         SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2247 4216         Move(s, d, i+1, char); /* include the NUL */
2248           }
2249 14690         SPAGAIN;
2250 14690         mPUSHi((I32)iters);
2251           }
2252           }
2253           else {
2254           bool first;
2255           char *m;
2256           SV *repl;
2257 51990623 100       if (force_on_match) {
2258           /* redo the first match, this time with the orig var
2259           * forced into being a string */
2260           force_on_match = 0;
2261 238 100       if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2262           /* I feel that it should be possible to avoid this mortal copy
2263           given that the code below copies into a new destination.
2264           However, I suspect it isn't worth the complexity of
2265           unravelling the C for the small number of
2266           cases where it would be viable to drop into the copy code. */
2267 16         TARG = sv_2mortal(newSVsv(TARG));
2268           }
2269 238 50       orig = SvPV_force_nomg(TARG, len);
2270           goto force_it;
2271           }
2272           #ifdef PERL_ANY_COW
2273           have_a_cow:
2274           #endif
2275 55212126 100       if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2276 78         rxtainted |= SUBST_TAINT_PAT;
2277           repl = dstr;
2278 55212126         s = RX_OFFS(rx)[0].start + orig;
2279 55212126 100       dstr = newSVpvn_flags(orig, s-orig,
    100        
2280           SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2281 55212126 100       if (!c) {
2282           PERL_CONTEXT *cx;
2283 1313427         SPAGAIN;
2284           m = orig;
2285           /* note that a whole bunch of local vars are saved here for
2286           * use by pp_substcont: here's a list of them in case you're
2287           * searching for places in this sub that uses a particular var:
2288           * iters maxiters r_flags oldsave rxtainted orig dstr targ
2289           * s m strend rx once */
2290 1313427 100       PUSHSUBST(cx);
    100        
2291 28268713         RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2292           }
2293           first = TRUE;
2294           do {
2295 56491071 50       if (iters++ > maxiters)
2296 0         DIE(aTHX_ "Substitution loop");
2297 56491071 100       if (RX_MATCH_TAINTED(rx))
2298 80         rxtainted |= SUBST_TAINT_PAT;
2299 56500346 100       if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
    100        
2300           char *old_s = s;
2301           char *old_orig = orig;
2302           assert(RX_SUBOFFSET(rx) == 0);
2303            
2304 7012         orig = RX_SUBBEG(rx);
2305 7012         s = orig + (old_s - old_orig);
2306 7012         strend = s + (strend - old_s);
2307           }
2308 56491071         m = RX_OFFS(rx)[0].start + orig;
2309 56491071 100       sv_catpvn_nomg_maybeutf8(dstr, s, m - s, DO_UTF8(TARG));
    100        
2310 56491071         s = RX_OFFS(rx)[0].end + orig;
2311 56491071 100       if (first) {
2312           /* replacement already stringified */
2313 53898699 100       if (clen)
2314 867914 100       sv_catpvn_nomg_maybeutf8(dstr, c, clen, doutf8);
2315           first = FALSE;
2316           }
2317           else {
2318 2592372 100       if (PL_encoding) {
2319 3150 100       if (!nsv) nsv = sv_newmortal();
2320 3150         sv_copypv(nsv, repl);
2321 3150 50       if (!DO_UTF8(nsv)) sv_recode_to_utf8(nsv, PL_encoding);
    0        
2322 3150         sv_catsv(dstr, nsv);
2323           }
2324 2589222         else sv_catsv(dstr, repl);
2325 2592372 100       if (SvTAINTED(repl))
    50        
2326 0         rxtainted |= SUBST_TAINT_REPL;
2327           }
2328 56491071 100       if (once)
2329           break;
2330 4295950 100       } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2331           TARG, NULL,
2332           REXEC_NOT_FIRST|REXEC_IGNOREPOS|REXEC_FAIL_ON_UNDERFLOW));
2333 53898699 100       sv_catpvn_nomg_maybeutf8(dstr, s, strend - s, DO_UTF8(TARG));
    100        
2334            
2335 53898699 100       if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2336           /* From here on down we're using the copy, and leaving the original
2337           untouched. */
2338           TARG = dstr;
2339 370500         SPAGAIN;
2340 370500         PUSHs(dstr);
2341           } else {
2342           #ifdef PERL_ANY_COW
2343           /* The match may make the string COW. If so, brilliant, because
2344           that's just saved us one malloc, copy and free - the regexp has
2345           donated the old buffer, and we malloc an entirely new one, rather
2346           than the regexp malloc()ing a buffer and copying our original,
2347           only for us to throw it away here during the substitution. */
2348 53528199 100       if (SvIsCOW(TARG)) {
2349 53523743         sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2350           } else
2351           #endif
2352           {
2353 4456 50       SvPV_free(TARG);
    100        
    50        
    50        
2354           }
2355 53528199         SvPV_set(TARG, SvPVX(dstr));
2356 53528199         SvCUR_set(TARG, SvCUR(dstr));
2357 53528199         SvLEN_set(TARG, SvLEN(dstr));
2358 53528199         SvFLAGS(TARG) |= SvUTF8(dstr);
2359 53528199         SvPV_set(dstr, NULL);
2360            
2361 53528199         SPAGAIN;
2362 53528199         mPUSHi((I32)iters);
2363           }
2364           }
2365            
2366 54169285 100       if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2367 53798785         (void)SvPOK_only_UTF8(TARG);
2368           }
2369            
2370           /* See "how taint works" above */
2371 54169285 100       if (TAINTING_get) {
2372 5454 50       if ((rxtainted & SUBST_TAINT_PAT) ||
    50        
2373 3636         ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2374           (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2375           )
2376 0         (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2377            
2378 3636 100       if (!(rxtainted & SUBST_TAINT_BOOLRET)
2379 528 50       && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2380           )
2381 0 0       SvTAINTED_on(TOPs); /* taint return value */
2382           else
2383 3636 50       SvTAINTED_off(TOPs); /* may have got tainted earlier */
2384            
2385           /* needed for mg_set below */
2386 3636         TAINT_set(
2387           cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
2388           );
2389 3636 50       SvTAINT(TARG);
    100        
    50        
2390           }
2391 54169285 100       SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2392 54169285         TAINT_NOT;
2393 54169285 100       LEAVE_SCOPE(oldsave);
2394 79349058         RETURN;
2395           }
2396            
2397 170727800         PP(pp_grepwhile)
2398           {
2399 170727800         dVAR; dSP;
2400            
2401 170727800 50       if (SvTRUEx(POPs))
    50        
    0        
    100        
    50        
    50        
    100        
    50        
    100        
    100        
    100        
    100        
    100        
    50        
    100        
    50        
    0        
    100        
    50        
    100        
2402 7306120         PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2403 170727800         ++*PL_markstack_ptr;
2404 170727800 100       FREETMPS;
2405 170727800         LEAVE_with_name("grep_item"); /* exit inner scope */
2406            
2407           /* All done yet? */
2408 170727800 100       if (PL_stack_base + *PL_markstack_ptr > SP) {
2409           I32 items;
2410 13543256 100       const I32 gimme = GIMME_V;
2411            
2412 13543256         LEAVE_with_name("grep"); /* exit outer scope */
2413 13543256         (void)POPMARK; /* pop src */
2414 13543256         items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2415 13543256         (void)POPMARK; /* pop dst */
2416 13543256         SP = PL_stack_base + POPMARK; /* pop original mark */
2417 13543256 100       if (gimme == G_SCALAR) {
2418 653963 100       if (PL_op->op_private & OPpGREP_LEX) {
2419 2         SV* const sv = sv_newmortal();
2420 2         sv_setiv(sv, items);
2421 2         PUSHs(sv);
2422           }
2423           else {
2424 653961         dTARGET;
2425 653961 50       XPUSHi(items);
    50        
2426           }
2427           }
2428 12889293 100       else if (gimme == G_ARRAY)
2429 12889265         SP += items;
2430 13543256         RETURN;
2431           }
2432           else {
2433           SV *src;
2434            
2435 157184544         ENTER_with_name("grep_item"); /* enter inner scope */
2436 157184544         SAVEVPTR(PL_curpm);
2437            
2438 157184544         src = PL_stack_base[*PL_markstack_ptr];
2439 157184544 100       if (SvPADTMP(src) && !IS_PADGV(src)) {
2440 14         src = PL_stack_base[*PL_markstack_ptr] = sv_mortalcopy(src);
2441 14         PL_tmps_floor++;
2442           }
2443 157184544         SvTEMP_off(src);
2444 157184544 100       if (PL_op->op_private & OPpGREP_LEX)
2445 6         PAD_SVl(PL_op->op_targ) = src;
2446           else
2447 314369076         DEFSV_set(src);
2448            
2449 163960100         RETURNOP(cLOGOP->op_other);
2450           }
2451           }
2452            
2453 134987005         PP(pp_leavesub)
2454           {
2455 134987005         dVAR; dSP;
2456           SV **mark;
2457           SV **newsp;
2458           PMOP *newpm;
2459           I32 gimme;
2460           PERL_CONTEXT *cx;
2461           SV *sv;
2462            
2463 134987005 100       if (CxMULTICALL(&cxstack[cxstack_ix]))
2464           return 0;
2465            
2466 134952113         POPBLOCK(cx,newpm);
2467 134952113         cxstack_ix++; /* temporarily protect top context */
2468            
2469 134952113         TAINT_NOT;
2470 134952113 100       if (gimme == G_SCALAR) {
2471 67440038         MARK = newsp + 1;
2472 67440038 100       if (MARK <= SP) {
2473 101041766 50       if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
    100        
2474 24757053 100       if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2475 16504702         && !SvMAGICAL(TOPs)) {
2476 558116         *MARK = SvREFCNT_inc(TOPs);
2477 279058 50       FREETMPS;
2478 279058         sv_2mortal(*MARK);
2479           }
2480           else {
2481 16225644         sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2482 16225644 100       FREETMPS;
2483 16225644         *MARK = sv_mortalcopy(sv);
2484 16225644         SvREFCNT_dec_NN(sv);
2485           }
2486           }
2487 76284713 100       else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2488 50867568         && !SvMAGICAL(TOPs)) {
2489 11620337         *MARK = TOPs;
2490           }
2491           else
2492 39247231         *MARK = sv_mortalcopy(TOPs);
2493           }
2494           else {
2495 67768 50       MEXTEND(MARK, 0);
2496 33770542         *MARK = &PL_sv_undef;
2497           }
2498           SP = MARK;
2499           }
2500 67512075 100       else if (gimme == G_ARRAY) {
2501 24340224 100       for (MARK = newsp + 1; MARK <= SP; MARK++) {
2502 23565270 100       if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2503 15711439         || SvMAGICAL(*MARK)) {
2504 13814557         *MARK = sv_mortalcopy(*MARK);
2505 13814557         TAINT_NOT; /* Each item is independent */
2506           }
2507           }
2508           }
2509 134952113         PUTBACK;
2510            
2511 134952113         LEAVE;
2512 202259617 100       POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
    100        
    50        
    50        
    100        
2513 134952113         cxstack_ix--;
2514 134952113         PL_curpm = newpm; /* ... and pop $1 et al */
2515            
2516 134952113         LEAVESUB(sv);
2517 134969559         return cx->blk_sub.retop;
2518           }
2519            
2520 921144959         PP(pp_entersub)
2521           {
2522 921144959         dVAR; dSP; dPOPss;
2523           GV *gv;
2524           CV *cv;
2525           PERL_CONTEXT *cx;
2526           I32 gimme;
2527 921144959         const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2528            
2529 921144959 50       if (!sv)
2530 0         DIE(aTHX_ "Not a CODE reference");
2531 940276073 100       switch (SvTYPE(sv)) {
2532           /* This is overwhelming the most common case: */
2533           case SVt_PVGV:
2534           we_have_a_glob:
2535 245135758 100       if (!(cv = GvCVu((const GV *)sv))) {
    100        
2536           HV *stash;
2537 1426         cv = sv_2cv(sv, &stash, &gv, 0);
2538           }
2539 245135758 100       if (!cv) {
2540 1426         ENTER;
2541 1426         SAVETMPS;
2542 1426         goto try_autoload;
2543           }
2544           break;
2545           case SVt_PVLV:
2546 74 100       if(isGV_with_GP(sv)) goto we_have_a_glob;
    50        
2547           /*FALLTHROUGH*/
2548           default:
2549 21631036 100       if (sv == &PL_sv_yes) { /* unfound import, ignore */
2550 2499922 50       if (hasargs)
2551 2499922         SP = PL_stack_base + POPMARK;
2552           else
2553 0         (void)POPMARK;
2554 2499922         RETURN;
2555           }
2556 9563771         SvGETMAGIC(sv);
2557 19131114 100       if (SvROK(sv)) {
2558 19042764 50       if (SvAMAGIC(sv)) {
    100        
    100        
2559 92         sv = amagic_deref_call(sv, to_cv_amg);
2560           /* Don't SPAGAIN here. */
2561           }
2562           }
2563           else {
2564           const char *sym;
2565           STRLEN len;
2566 88350 100       if (!SvOK(sv))
    50        
    50        
2567 10         DIE(aTHX_ PL_no_usym, "a subroutine");
2568 88340 100       sym = SvPV_nomg_const(sv, len);
2569 88340 100       if (PL_op->op_private & HINT_STRICT_REFS)
2570 6 50       DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
2571 88334         cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2572 88334         break;
2573           }
2574 19042764         cv = MUTABLE_CV(SvRV(sv));
2575 19042764 100       if (SvTYPE(cv) == SVt_PVCV)
2576           break;
2577           /* FALL THROUGH */
2578           case SVt_PVHV:
2579           case SVt_PVAV:
2580 6         DIE(aTHX_ "Not a CODE reference");
2581           /* This is the second most common case: */
2582           case SVt_PVCV:
2583 654378165         cv = MUTABLE_CV(sv);
2584 654378165         break;
2585           }
2586            
2587 918643589         ENTER;
2588            
2589           retry:
2590 919906321 50       if (CvCLONE(cv) && ! CvCLONED(cv))
    0        
2591 0         DIE(aTHX_ "Closure prototype called");
2592 919906321 100       if (!CvROOT(cv) && !CvXSUB(cv)) {
    50        
2593           GV* autogv;
2594           SV* sub_name;
2595            
2596           /* anonymous or undef'd function leaves us no recourse */
2597 2522794 100       if (CvANON(cv) || !(gv = CvGV(cv))) {
    100        
2598 28 100       if (CvNAMED(cv))
2599 26         DIE(aTHX_ "Undefined subroutine &%"HEKf" called",
2600           HEKfARG(CvNAME_HEK(cv)));
2601 2         DIE(aTHX_ "Undefined subroutine called");
2602           }
2603            
2604           /* autoloaded stub? */
2605 1261370 100       if (cv != GvCV(gv)) {
2606 1252604         cv = GvCV(gv);
2607           }
2608           /* should call AUTOLOAD now? */
2609           else {
2610           try_autoload:
2611 10192 100       if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
    100        
2612           GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
2613           {
2614 10132         cv = GvCV(autogv);
2615           }
2616           else {
2617           sorry:
2618 64         sub_name = sv_newmortal();
2619 64         gv_efullname3(sub_name, gv, NULL);
2620 64         DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2621           }
2622           }
2623 1262736 100       if (!cv)
2624           goto sorry;
2625           goto retry;
2626           }
2627            
2628 918644923 100       gimme = GIMME_V;
2629 918644923 100       if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
    100        
    50        
2630 32832         Perl_get_db_sub(aTHX_ &sv, cv);
2631 32832 100       if (CvISXSUB(cv))
2632 1712         PL_curcopdb = PL_curcop;
2633 32832 100       if (CvLVALUE(cv)) {
2634           /* check for lsub that handles lvalue subroutines */
2635 6         cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2636           /* if lsub not found then fall back to DB::sub */
2637 6 50       if (!cv) cv = GvCV(PL_DBsub);
2638           } else {
2639 32826         cv = GvCV(PL_DBsub);
2640           }
2641            
2642 32832 50       if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
    50        
    0        
2643 0         DIE(aTHX_ "No DB::sub routine defined");
2644           }
2645            
2646 918644923 100       if (!(CvISXSUB(cv))) {
2647           /* This path taken at least 75% of the time */
2648 377837061         dMARK;
2649 377837061         I32 items = SP - MARK;
2650 377837061         PADLIST * const padlist = CvPADLIST(cv);
2651 377837061 100       PUSHBLOCK(cx, CXt_SUB, MARK);
2652 755306921 100       PUSHSUB(cx);
    100        
    100        
    100        
2653 377837061         cx->blk_sub.retop = PL_op->op_next;
2654 377837061         CvDEPTH(cv)++;
2655 377837061 100       if (CvDEPTH(cv) >= 2) {
2656           PERL_STACK_OVERFLOW_CHECK();
2657 45108288         pad_push(padlist, CvDEPTH(cv));
2658           }
2659 377837061         SAVECOMPPAD();
2660 755674122         PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2661 377837061 100       if (hasargs) {
2662 372831997         AV *const av = MUTABLE_AV(PAD_SVl(0));
2663 372831997 50       if (AvREAL(av)) {
2664           /* @_ is normally not REAL--this should only ever
2665           * happen when DB::sub() calls things that modify @_ */
2666 0         av_clear(av);
2667 0         AvREAL_off(av);
2668 0         AvREIFY_on(av);
2669           }
2670 372831997         cx->blk_sub.savearray = GvAV(PL_defgv);
2671 745663994         GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2672 372831997         CX_CURPAD_SAVE(cx->blk_sub);
2673 372831997         cx->blk_sub.argarray = av;
2674 372831997         ++MARK;
2675            
2676 372831997 100       if (items - 1 > AvMAX(av)) {
2677 3283772         SV **ary = AvALLOC(av);
2678 3283772         AvMAX(av) = items - 1;
2679 3283772 50       Renew(ary, items, SV*);
2680 3283772         AvALLOC(av) = ary;
2681 3283772         AvARRAY(av) = ary;
2682           }
2683            
2684 372831997 50       Copy(MARK,AvARRAY(av),items,SV*);
2685 372831997         AvFILLp(av) = items - 1;
2686          
2687 372831997         MARK = AvARRAY(av);
2688 1150851868 100       while (items--) {
2689 591787114 50       if (*MARK)
2690           {
2691 591787114 100       if (SvPADTMP(*MARK) && !IS_PADGV(*MARK))
2692 28583851         *MARK = sv_mortalcopy(*MARK);
2693 591787114         SvTEMP_off(*MARK);
2694           }
2695 591787114         MARK++;
2696           }
2697           }
2698 377837061         SAVETMPS;
2699 377837358 100       if ((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
    100        
2700 594         !CvLVALUE(cv))
2701 10         DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2702           /* warning must come *after* we fully set up the context
2703           * stuff so that __WARN__ handlers can safely dounwind()
2704           * if they want to
2705           */
2706 377837051 100       if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
    100        
2707 10 100       && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
    50        
    0        
2708 10         sub_crush_depth(cv);
2709 377837047         RETURNOP(CvSTART(cv));
2710           }
2711           else {
2712 540807862         I32 markix = TOPMARK;
2713            
2714 540807862         SAVETMPS;
2715 540807862         PUTBACK;
2716            
2717 811180487 100       if (((PL_op->op_private
2718 540807862 100       & PUSHSUB_GET_LVALUE_MASK(Perl_is_lvalue_sub)
    100        
2719 270372637 100       ) & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
2720 12         !CvLVALUE(cv))
2721 2         DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2722            
2723 540807860 100       if (!hasargs) {
2724           /* Need to copy @_ to stack. Alternative may be to
2725           * switch stack to @_, and copy return values
2726           * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2727 82552         AV * const av = GvAV(PL_defgv);
2728 82552         const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2729            
2730 120958 100       if (items) {
    50        
2731           /* Mark is at the end of the stack. */
2732 38406         EXTEND(SP, items);
2733 76812 50       Copy(AvARRAY(av), SP + 1, items, SV*);
2734 76812         SP += items;
2735 76812         PUTBACK ;
2736           }
2737           }
2738           else {
2739 540725308         SV **mark = PL_stack_base + markix;
2740 540725308         I32 items = SP - mark;
2741 1438805130 100       while (items--) {
2742 627748474         mark++;
2743 627748474 50       if (*mark && SvPADTMP(*mark) && !IS_PADGV(*mark))
    100        
2744 314017291         *mark = sv_mortalcopy(*mark);
2745           }
2746           }
2747           /* We assume first XSUB in &DB::sub is the called one. */
2748 540807860 100       if (PL_curcopdb) {
2749 1712         SAVEVPTR(PL_curcop);
2750 1712         PL_curcop = PL_curcopdb;
2751 1712         PL_curcopdb = NULL;
2752           }
2753           /* Do we need to open block here? XXXX */
2754            
2755           /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2756           assert(CvXSUB(cv));
2757 540807860         CvXSUB(cv)(aTHX_ cv);
2758            
2759           /* Enforce some sanity in scalar context. */
2760 540803408 100       if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
    100        
2761 35062822 100       if (markix > PL_stack_sp - PL_stack_base)
2762 46         *(PL_stack_base + markix) = &PL_sv_undef;
2763           else
2764 35062776         *(PL_stack_base + markix) = *PL_stack_sp;
2765 35062822         PL_stack_sp = PL_stack_base + markix;
2766           }
2767 540803408         LEAVE;
2768 731159812         return NORMAL;
2769           }
2770           }
2771            
2772           void
2773 10         Perl_sub_crush_depth(pTHX_ CV *cv)
2774           {
2775           PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2776            
2777 10 100       if (CvANON(cv))
2778 2         Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2779           else {
2780           HEK *const hek = CvNAME_HEK(cv);
2781           SV *tmpstr;
2782 8 100       if (hek) {
2783 2         tmpstr = sv_2mortal(newSVhek(hek));
2784           }
2785           else {
2786 6         tmpstr = sv_newmortal();
2787 6         gv_efullname3(tmpstr, CvGV(cv), NULL);
2788           }
2789 8         Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2790           SVfARG(tmpstr));
2791           }
2792 6         }
2793            
2794 132713278         PP(pp_aelem)
2795           {
2796 132713278         dVAR; dSP;
2797           SV** svp;
2798 132713278         SV* const elemsv = POPs;
2799 132713278 100       IV elem = SvIV(elemsv);
2800 132713278         AV *const av = MUTABLE_AV(POPs);
2801 132713278 100       const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
    100        
    50        
2802 132713278         const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
2803 132713278         const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2804           bool preeminent = TRUE;
2805           SV *sv;
2806            
2807 132713278 100       if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
    50        
    50        
    100        
    50        
    100        
2808 4         Perl_warner(aTHX_ packWARN(WARN_MISC),
2809           "Use of reference \"%"SVf"\" as array index",
2810           SVfARG(elemsv));
2811 132713278 50       if (SvTYPE(av) != SVt_PVAV)
2812 0         RETPUSHUNDEF;
2813            
2814 132713278 100       if (localizing) {
2815           MAGIC *mg;
2816           HV *stash;
2817            
2818           /* If we can determine whether the element exist,
2819           * Try to preserve the existenceness of a tied array
2820           * element by using EXISTS and DELETE if possible.
2821           * Fallback to FETCH and STORE otherwise. */
2822 324 100       if (SvCANEXISTDELETE(av))
    100        
    50        
    50        
    100        
    50        
2823 314         preeminent = av_exists(av, elem);
2824           }
2825            
2826 132713278         svp = av_fetch(av, elem, lval && !defer);
2827 132713274 100       if (lval) {
2828           #ifdef PERL_MALLOC_WRAP
2829 90100772 50       if (SvUOK(elemsv)) {
2830 0 0       const UV uv = SvUV(elemsv);
2831 0 0       elem = uv > IV_MAX ? IV_MAX : uv;
2832           }
2833 90100772 100       else if (SvNOK(elemsv))
2834 24172 50       elem = (IV)SvNV(elemsv);
2835 107219329 100       if (elem > 0) {
    50        
2836           static const char oom_array_extend[] =
2837           "Out of memory during array extend"; /* Duplicated in av.c */
2838 17118557         MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2839           }
2840           #endif
2841 90100772 100       if (!svp || !*svp) {
    50        
2842           SV* lv;
2843           IV len;
2844 7630 100       if (!defer)
2845 4         DIE(aTHX_ PL_no_aelem, elem);
2846 7626         len = av_len(av);
2847 7626         lv = sv_newmortal();
2848 7626         sv_upgrade(lv, SVt_PVLV);
2849 7626         LvTYPE(lv) = 'y';
2850 7626         sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2851 15252         LvTARG(lv) = SvREFCNT_inc_simple(av);
2852           /* Resolve a negative index now, unless it points before the
2853           beginning of the array, in which case record it for error
2854           reporting in magic_setdefelem. */
2855 15252         LvSTARGOFF(lv) =
2856 7626 100       elem < 0 && len + elem >= 0 ? len + elem : elem;
    100        
2857 7626         LvTARGLEN(lv) = 1;
2858 7626         PUSHs(lv);
2859 7626         RETURN;
2860           }
2861 90093142 100       if (localizing) {
2862 324 100       if (preeminent)
2863 312         save_aelem(av, elem, svp);
2864           else
2865 12         SAVEADELETE(av, elem);
2866           }
2867 90092818 100       else if (PL_op->op_private & OPpDEREF) {
2868 9164288         PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
2869 9164288         RETURN;
2870           }
2871           }
2872 123541356 100       sv = (svp ? *svp : &PL_sv_undef);
2873 123541356 100       if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
    100        
    100        
2874 828         mg_get(sv);
2875 123541356         PUSHs(sv);
2876 128127313         RETURN;
2877           }
2878            
2879           SV*
2880 413373354         Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2881 413373354 100       {
2882           PERL_ARGS_ASSERT_VIVIFY_REF;
2883            
2884 206089952         SvGETMAGIC(sv);
2885 416764668 100       if (!SvOK(sv)) {
    50        
    50        
    100        
2886 3391314 50       if (SvREADONLY(sv))
2887 0         Perl_croak_no_modify();
2888 3391314 100       prepare_SV_for_RV(sv);
    100        
    50        
    0        
    0        
    0        
2889 3391314         switch (to_what) {
2890           case OPpDEREF_SV:
2891 16         SvRV_set(sv, newSV(0));
2892 16         break;
2893           case OPpDEREF_AV:
2894 1781147         SvRV_set(sv, MUTABLE_SV(newAV()));
2895 1781147         break;
2896           case OPpDEREF_HV:
2897 1610151         SvRV_set(sv, MUTABLE_SV(newHV()));
2898 1610151         break;
2899           }
2900 3391314         SvROK_on(sv);
2901 3391314 100       SvSETMAGIC(sv);
2902 1685729         SvGETMAGIC(sv);
2903           }
2904 413373354 100       if (SvGMAGICAL(sv)) {
2905           /* copy the sv without magic to prevent magic from being
2906           executed twice */
2907 754         SV* msv = sv_newmortal();
2908 754         sv_setsv_nomg(msv, sv);
2909 207284547         return msv;
2910           }
2911           return sv;
2912           }
2913            
2914 38280466         PP(pp_method)
2915           {
2916 38280466         dVAR; dSP;
2917 38280466         SV* const sv = TOPs;
2918            
2919 38280466 100       if (SvROK(sv)) {
2920 38670         SV* const rsv = SvRV(sv);
2921 38670 50       if (SvTYPE(rsv) == SVt_PVCV) {
2922 38670         SETs(rsv);
2923 38670         RETURN;
2924           }
2925           }
2926            
2927 38241796         SETs(method_common(sv, NULL));
2928 38261065         RETURN;
2929           }
2930            
2931 610163116         PP(pp_method_named)
2932           {
2933 610163116         dVAR; dSP;
2934 610163116         SV* const sv = cSVOP_sv;
2935 610163116         U32 hash = SvSHARED_HASH(sv);
2936            
2937 610163116 50       XPUSHs(method_common(sv, &hash));
2938 610011734         RETURN;
2939           }
2940            
2941           STATIC SV *
2942 648404912         S_method_common(pTHX_ SV* meth, U32* hashp)
2943 648404906 100       {
2944           dVAR;
2945           SV* ob;
2946           GV* gv;
2947           HV* stash;
2948           SV *packsv = NULL;
2949 648404912         SV * const sv = PL_stack_base + TOPMARK == PL_stack_sp
2950 6         ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
2951           "package or object reference", SVfARG(meth)),
2952           (SV *)NULL)
2953 972503650 100       : *(PL_stack_base + TOPMARK + 1);
2954            
2955           PERL_ARGS_ASSERT_METHOD_COMMON;
2956            
2957 648404906 50       if (!sv)
2958           undefined:
2959 412         Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
2960           SVfARG(meth));
2961            
2962 324098752         SvGETMAGIC(sv);
2963 648404906 100       if (SvROK(sv))
2964 629209793         ob = MUTABLE_SV(SvRV(sv));
2965 19195113 100       else if (!SvOK(sv)) goto undefined;
    50        
    50        
2966 19194701 100       else if (isGV_with_GP(sv)) {
    50        
2967 580 50       if (!GvIO(sv))
    50        
    50        
    100        
2968 2         Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
2969           "without a package or object reference",
2970           SVfARG(meth));
2971           ob = sv;
2972 578 100       if (SvTYPE(ob) == SVt_PVLV && LvTYPE(ob) == 'y') {
    50        
2973           assert(!LvTARGLEN(ob));
2974 2         ob = LvTARG(ob);
2975           assert(ob);
2976           }
2977 578         *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(ob));
2978           }
2979           else {
2980           /* this isn't a reference */
2981           GV* iogv;
2982           STRLEN packlen;
2983 19194121 100       const char * const packname = SvPV_nomg_const(sv, packlen);
2984 19194121         const bool packname_is_utf8 = !!SvUTF8(sv);
2985 19194121         const HE* const he =
2986 19194121         (const HE *)hv_common(
2987           PL_stashcache, NULL, packname, packlen,
2988           packname_is_utf8 ? HVhek_UTF8 : 0, 0, NULL, 0
2989           );
2990          
2991 19194121 100       if (he) {
2992 12171732 50       stash = INT2PTR(HV*,SvIV(HeVAL(he)));
2993           DEBUG_o(Perl_deb(aTHX_ "PL_stashcache hit %p for '%"SVf"'\n",
2994           stash, sv));
2995 12171732         goto fetch;
2996           }
2997            
2998 7022389 100       if (!(iogv = gv_fetchpvn_flags(
2999           packname, packlen, SVf_UTF8 * packname_is_utf8, SVt_PVIO
3000 11439 100       )) ||
3001 11439 50       !(ob=MUTABLE_SV(GvIO(iogv))))
    50        
    50        
3002           {
3003           /* this isn't the name of a filehandle either */
3004 7021925 100       if (!packlen)
3005           {
3006 4         Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3007           "without a package or object reference",
3008           SVfARG(meth));
3009           }
3010           /* assume it's a package name */
3011 7021921 100       stash = gv_stashpvn(packname, packlen, packname_is_utf8 ? SVf_UTF8 : 0);
3012 7021921 100       if (!stash)
3013           packsv = sv;
3014           else {
3015 7021109         SV* const ref = newSViv(PTR2IV(stash));
3016 7021109 100       (void)hv_store(PL_stashcache, packname,
3017           packname_is_utf8 ? -(I32)packlen : (I32)packlen, ref, 0);
3018           DEBUG_o(Perl_deb(aTHX_ "PL_stashcache caching %p for '%"SVf"'\n",
3019           stash, sv));
3020           }
3021           goto fetch;
3022           }
3023           /* it _is_ a filehandle name -- replace with a reference */
3024 464         *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3025           }
3026            
3027           /* if we got here, ob should be an object or a glob */
3028 629303215 50       if (!ob || !(SvOBJECT(ob)
    100        
    100        
3029 126488 50       || (isGV_with_GP(ob)
3030 34108 50       && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
    50        
    50        
    100        
3031 34086 50       && SvOBJECT(ob))))
3032           {
3033 150678 100       Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3034 75341 50       SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
    50        
    50        
    50        
    50        
3035           ? newSVpvs_flags("DOES", SVs_TEMP)
3036           : meth));
3037           }
3038            
3039 629060161         stash = SvSTASH(ob);
3040            
3041           fetch:
3042           /* NOTE: stash may be null, hope hv_fetch_ent and
3043           gv_fetchmethod can cope (it seems they can) */
3044            
3045           /* shortcut for simple names */
3046 648253814 100       if (hashp) {
3047 610012022         const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3048 610012022 100       if (he) {
3049 609128682         gv = MUTABLE_GV(HeVAL(he));
3050 912376453 100       if (isGV(gv) && GvCV(gv) &&
    100        
    100        
3051 649995089 100       (!GvCVGEN(gv) || GvCVGEN(gv)
3052 231168070 50       == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3053 601653319         return MUTABLE_SV(GvCV(gv));
3054           }
3055           }
3056            
3057 46600495 100       gv = gv_fetchmethod_sv_flags(stash ? stash : MUTABLE_HV(packsv),
3058           meth, GV_AUTOLOAD | GV_CROAK);
3059            
3060           assert(gv);
3061            
3062 347518258 100       return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3063 4344859472         }
3064            
3065           /*
3066           * Local variables:
3067           * c-indentation-style: bsd
3068           * c-basic-offset: 4
3069           * indent-tabs-mode: nil
3070           * End:
3071           *
3072           * ex: set ts=8 sts=4 sw=4 et:
3073           */