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
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.
12 * Then he heard Merry change the note, and up went the Horn-cry of Buckland,
15 * Awake! Awake! Fear, Fire, Foes! Awake!
18 * [p.1007 of _The Lord of the Rings_, VI/viii: "The Scouring of the Shire"]
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.
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
35 #define PERL_IN_PP_HOT_C
51 PL_curcop = (COP*)PL_op;
52 TAINT_NOT; /* Each statement is presumed innocent */
53 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
64 if (PL_op->op_private & OPpLVAL_INTRO)
65 PUSHs(save_scalar(cGVOP_gv));
67 PUSHs(GvSVn(cGVOP_gv));
77 /* This is sometimes called directly by pp_coreargs and pp_grepstart. */
81 PUSHMARK(PL_stack_sp);
96 XPUSHs(MUTABLE_SV(cGVOP_gv));
107 if (PL_op->op_type == OP_AND)
109 RETURNOP(cLOGOP->op_other);
116 /* sassign keeps its args in the optree traditionally backwards.
117 So we pop them differently.
119 SV *left = POPs; SV *right = TOPs;
121 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
122 SV * const temp = left;
123 left = right; right = temp;
125 if (TAINTING_get && TAINT_get && !SvTAINTED(right))
127 if (PL_op->op_private & OPpASSIGN_CV_TO_GV) {
128 SV * const cv = SvRV(right);
129 const U32 cv_type = SvTYPE(cv);
130 const bool is_gv = isGV_with_GP(left);
131 const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
137 /* Can do the optimisation if left (LVALUE) is not a typeglob,
138 right (RVALUE) is a reference to something, and we're in void
140 if (!got_coderef && !is_gv && GIMME_V == G_VOID) {
141 /* Is the target symbol table currently empty? */
142 GV * const gv = gv_fetchsv_nomg(left, GV_NOINIT, SVt_PVGV);
143 if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
144 /* Good. Create a new proxy constant subroutine in the target.
145 The gv becomes a(nother) reference to the constant. */
146 SV *const value = SvRV(cv);
148 SvUPGRADE(MUTABLE_SV(gv), SVt_IV);
149 SvPCS_IMPORTED_on(gv);
151 SvREFCNT_inc_simple_void(value);
157 /* Need to fix things up. */
159 /* Need to fix GV. */
160 left = MUTABLE_SV(gv_fetchsv_nomg(left,GV_ADD, SVt_PVGV));
164 /* We've been returned a constant rather than a full subroutine,
165 but they expect a subroutine reference to apply. */
167 ENTER_with_name("sassign_coderef");
168 SvREFCNT_inc_void(SvRV(cv));
169 /* newCONSTSUB takes a reference count on the passed in SV
170 from us. We set the name to NULL, otherwise we get into
171 all sorts of fun as the reference to our new sub is
172 donated to the GV that we're about to assign to.
174 SvRV_set(right, MUTABLE_SV(newCONSTSUB(GvSTASH(left), NULL,
177 LEAVE_with_name("sassign_coderef");
179 /* What can happen for the corner case *{"BONK"} = \&{"BONK"};
181 First: ops for \&{"BONK"}; return us the constant in the
183 Second: ops for *{"BONK"} cause that symbol table entry
184 (and our reference to it) to be upgraded from RV
186 Thirdly: We get here. cv is actually PVGV now, and its
187 GvCV() is actually the subroutine we're looking for
189 So change the reference so that it points to the subroutine
190 of that typeglob, as that's what they were after all along.
192 GV *const upgraded = MUTABLE_GV(cv);
193 CV *const source = GvCV(upgraded);
196 assert(CvFLAGS(source) & CVf_CONST);
198 SvREFCNT_inc_void(source);
199 SvREFCNT_dec(upgraded);
200 SvRV_set(right, MUTABLE_SV(source));
206 SvTEMP(left) && !SvSMAGICAL(left) && SvREFCNT(left) == 1 &&
207 (!isGV_with_GP(left) || SvFAKE(left)) && ckWARN(WARN_MISC)
210 packWARN(WARN_MISC), "Useless assignment to a temporary"
212 SvSetMagicSV(left, right);
222 RETURNOP(cLOGOP->op_other);
224 RETURNOP(cLOGOP->op_next);
231 TAINT_NOT; /* Each statement is presumed innocent */
232 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
234 if (!(PL_op->op_flags & OPf_SPECIAL)) {
235 I32 oldsave = PL_scopestack[PL_scopestack_ix - 1];
236 LEAVE_SCOPE(oldsave);
243 dVAR; dSP; dATARGET; tryAMAGICbin_MG(concat_amg, AMGf_assign);
248 const char *rpv = NULL;
250 bool rcopied = FALSE;
252 if (TARG == right && right != left) { /* $r = $l.$r */
253 rpv = SvPV_nomg_const(right, rlen);
254 rbyte = !DO_UTF8(right);
255 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
256 rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
260 if (TARG != left) { /* not $l .= $r */
262 const char* const lpv = SvPV_nomg_const(left, llen);
263 lbyte = !DO_UTF8(left);
264 sv_setpvn(TARG, lpv, llen);
270 else { /* $l .= $r */
272 if (left == right && ckWARN(WARN_UNINITIALIZED)) /* $l .= $l */
273 report_uninit(right);
276 SvPV_force_nomg_nolen(left);
277 lbyte = !DO_UTF8(left);
284 /* $r.$r: do magic twice: tied might return different 2nd time */
286 rpv = SvPV_nomg_const(right, rlen);
287 rbyte = !DO_UTF8(right);
289 if (lbyte != rbyte) {
290 /* sv_utf8_upgrade_nomg() may reallocate the stack */
293 sv_utf8_upgrade_nomg(TARG);
296 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
297 sv_utf8_upgrade_nomg(right);
298 rpv = SvPV_nomg_const(right, rlen);
302 sv_catpvn_nomg(TARG, rpv, rlen);
309 /* ($lex1,@lex2,...) or my ($lex1,@lex2,...) */
314 PADOFFSET base = PL_op->op_targ;
315 int count = (int)(PL_op->op_private) & OPpPADRANGE_COUNTMASK;
317 /* note, this is only skipped for compile-time-known void cxt */
318 if ((PL_op->op_flags & OPf_WANT) != OPf_WANT_VOID) {
321 for (i = 0; i <count; i++)
322 *++SP = PAD_SV(base+i);
324 if (PL_op->op_private & OPpLVAL_INTRO) {
325 SV **svp = &(PAD_SVl(base));
326 const UV payload = (UV)(
327 (base << (OPpPADRANGE_COUNTSHIFT + SAVE_TIGHT_SHIFT))
328 | (count << SAVE_TIGHT_SHIFT)
329 | SAVEt_CLEARPADRANGE);
330 assert(OPpPADRANGE_COUNTMASK + 1 == (1 <<OPpPADRANGE_COUNTSHIFT));
331 assert((payload >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT)) == base);
335 for (i = 0; i <count; i++)
336 SvPADSTALE_off(*svp++); /* mark lexical as active */
346 if (PL_op->op_flags & OPf_MOD) {
347 if (PL_op->op_private & OPpLVAL_INTRO)
348 if (!(PL_op->op_private & OPpPAD_STATE))
349 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
350 if (PL_op->op_private & OPpDEREF) {
352 TOPs = vivify_ref(TOPs, PL_op->op_private & OPpDEREF);
365 tryAMAGICunTARGETlist(iter_amg, 0, 0);
366 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
368 else PL_last_in_gv = PL_argvgv, PL_stack_sp--;
369 if (!isGV_with_GP(PL_last_in_gv)) {
370 if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
371 PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
374 XPUSHs(MUTABLE_SV(PL_last_in_gv));
377 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
380 return do_readline();
388 tryAMAGICbin_MG(eq_amg, AMGf_set|AMGf_numeric);
392 (SvIOK_notUV(left) && SvIOK_notUV(right))
393 ? (SvIVX(left) == SvIVX(right))
394 : ( do_ncmp(left, right) == 0)
403 PL_op->op_type == OP_PREINC || PL_op->op_type == OP_I_PREINC;
404 if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs)))
405 Perl_croak_no_modify(aTHX);
406 if (!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
407 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
409 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
410 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
412 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
413 if (inc) sv_inc(TOPs);
426 if (PL_op->op_type == OP_OR)
428 RETURNOP(cLOGOP->op_other);
437 const int op_type = PL_op->op_type;
438 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
443 if (!sv || !SvANY(sv)) {
444 if (op_type == OP_DOR)
446 RETURNOP(cLOGOP->op_other);
452 if (!sv || !SvANY(sv))
457 switch (SvTYPE(sv)) {
459 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
463 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
467 if (CvROOT(sv) || CvXSUB(sv))
480 if(op_type == OP_DOR)
482 RETURNOP(cLOGOP->op_other);
484 /* assuming OP_DEFINED */
492 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
493 tryAMAGICbin_MG(add_amg, AMGf_assign|AMGf_numeric);
497 useleft = USE_LEFT(svl);
498 #ifdef PERL_PRESERVE_IVUV
499 /* We must see if we can perform the addition with integers if possible,
500 as the integer code detects overflow while the NV code doesn't.
501 If either argument hasn't had a numeric conversion yet attempt to get
502 the IV. It's important to do this now, rather than just assuming that
503 it's not IOK as a PV of "9223372036854775806" may not take well to NV
504 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
505 integer in case the second argument is IV=9223372036854775806
506 We can (now) rely on sv_2iv to do the right thing, only setting the
507 public IOK flag if the value in the NV (or PV) slot is truly integer.
509 A side effect is that this also aggressively prefers integer maths over
510 fp maths for integer values.
512 How to detect overflow?
514 C 99 section 6.2.6.1 says
516 The range of nonnegative values of a signed integer type is a subrange
517 of the corresponding unsigned integer type, and the representation of
518 the same value in each type is the same. A computation involving
519 unsigned operands can never overflow, because a result that cannot be
520 represented by the resulting unsigned integer type is reduced modulo
521 the number that is one greater than the largest value that can be
522 represented by the resulting type.
526 which I read as "unsigned ints wrap."
528 signed integer overflow seems to be classed as "exception condition"
530 If an exceptional condition occurs during the evaluation of an
531 expression (that is, if the result is not mathematically defined or not
532 in the range of representable values for its type), the behavior is
535 (6.5, the 5th paragraph)
537 I had assumed that on 2s complement machines signed arithmetic would
538 wrap, hence coded pp_add and pp_subtract on the assumption that
539 everything perl builds on would be happy. After much wailing and
540 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
541 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
542 unsigned code below is actually shorter than the old code. :-)
545 if (SvIV_please_nomg(svr)) {
546 /* Unless the left argument is integer in range we are going to have to
547 use NV maths. Hence only attempt to coerce the right argument if
548 we know the left is integer. */
556 /* left operand is undef, treat as zero. + 0 is identity,
557 Could SETi or SETu right now, but space optimise by not adding
558 lots of code to speed up what is probably a rarish case. */
560 /* Left operand is defined, so is it IV? */
561 if (SvIV_please_nomg(svl)) {
562 if ((auvok = SvUOK(svl)))
565 const IV aiv = SvIVX(svl);
568 auvok = 1; /* Now acting as a sign flag. */
569 } else { /* 2s complement assumption for IV_MIN */
577 bool result_good = 0;
580 bool buvok = SvUOK(svr);
585 const IV biv = SvIVX(svr);
592 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
593 else "IV" now, independent of how it came in.
594 if a, b represents positive, A, B negative, a maps to -A etc
599 all UV maths. negate result if A negative.
600 add if signs same, subtract if signs differ. */
606 /* Must get smaller */
612 /* result really should be -(auv-buv). as its negation
613 of true value, need to swap our result flag */
630 if (result <= (UV)IV_MIN)
633 /* result valid, but out of range for IV. */
638 } /* Overflow, drop through to NVs. */
643 NV value = SvNV_nomg(svr);
646 /* left operand is undef, treat as zero. + 0.0 is identity. */
650 SETn( value + SvNV_nomg(svl) );
658 AV * const av = PL_op->op_type == OP_AELEMFAST_LEX
659 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAVn(cGVOP_gv);
660 const U32 lval = PL_op->op_flags & OPf_MOD;
661 SV** const svp = av_fetch(av, PL_op->op_private, lval);
662 SV *sv = (svp ? *svp : &PL_sv_undef);
664 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
672 dVAR; dSP; dMARK; dTARGET;
674 do_join(TARG, *MARK, MARK, SP);
685 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
686 * will be enough to hold an OP*.
688 SV* const sv = sv_newmortal();
689 sv_upgrade(sv, SVt_PVLV);
691 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
694 XPUSHs(MUTABLE_SV(PL_op));
699 /* Oversized hot code. */
703 dVAR; dSP; dMARK; dORIGMARK;
707 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
711 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
714 if (MARK == ORIGMARK) {
715 /* If using default handle then we need to make space to
716 * pass object as 1st arg, so move other args up ...
720 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
723 return Perl_tied_method(aTHX_ "PRINT", mark - 1, MUTABLE_SV(io),
725 (G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK
726 | (PL_op->op_type == OP_SAY
727 ? TIED_METHOD_SAY : 0)), sp - mark);
730 if ( gv && GvEGVx(gv) && (io = GvIO(GvEGV(gv)))
731 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
734 SETERRNO(EBADF,RMS_IFI);
737 else if (!(fp = IoOFP(io))) {
739 report_wrongway_fh(gv, '<');
742 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
746 SV * const ofs = GvSV(PL_ofsgv); /* $, */
748 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
750 if (!do_print(*MARK, fp))
754 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
755 if (!do_print(GvSV(PL_ofsgv), fp)) {
764 if (!do_print(*MARK, fp))
772 if (PL_op->op_type == OP_SAY) {
773 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
776 else if (PL_ors_sv && SvOK(PL_ors_sv))
777 if (!do_print(PL_ors_sv, fp)) /* $\ */
780 if (IoFLAGS(io) & IOf_FLUSH)
781 if (PerlIO_flush(fp) == EOF)
791 XPUSHs(&PL_sv_undef);
798 const I32 gimme = GIMME_V;
799 static const char an_array[] = "an ARRAY";
800 static const char a_hash[] = "a HASH";
801 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
802 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
807 sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
810 if (SvTYPE(sv) != type)
811 /* diag_listed_as: Not an ARRAY reference */
812 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
813 else if (PL_op->op_flags & OPf_MOD
814 && PL_op->op_private & OPpLVAL_INTRO)
815 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
817 else if (SvTYPE(sv) != type) {
820 if (!isGV_with_GP(sv)) {
821 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
829 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
830 if (PL_op->op_private & OPpLVAL_INTRO)
831 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
833 if (PL_op->op_flags & OPf_REF) {
837 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
838 const I32 flags = is_lvalue_sub();
839 if (flags && !(flags & OPpENTERSUB_INARGS)) {
840 if (gimme != G_ARRAY)
841 goto croak_cant_return;
848 AV *const av = MUTABLE_AV(sv);
849 /* The guts of pp_rv2av, with no intending change to preserve history
850 (until such time as we get tools that can do blame annotation across
851 whitespace changes. */
852 if (gimme == G_ARRAY) {
853 const I32 maxarg = AvFILL(av) + 1;
854 (void)POPs; /* XXXX May be optimized away? */
856 if (SvRMAGICAL(av)) {
858 for (i=0; i < (U32)maxarg; i++) {
859 SV ** const svp = av_fetch(av, i, FALSE);
860 /* See note in pp_helem, and bug id #27839 */
862 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
867 Copy(AvARRAY(av), SP+1, maxarg, SV*);
871 else if (gimme == G_SCALAR) {
873 const I32 maxarg = AvFILL(av) + 1;
877 /* The guts of pp_rv2hv */
878 if (gimme == G_ARRAY) { /* array wanted */
880 return Perl_do_kv(aTHX);
882 else if ((PL_op->op_private & OPpTRUEBOOL
883 || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
884 && block_gimme() == G_VOID ))
885 && (!SvRMAGICAL(sv) || !mg_find(sv, PERL_MAGIC_tied)))
886 SETs(HvUSEDKEYS(sv) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
887 else if (gimme == G_SCALAR) {
889 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
897 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
898 is_pp_rv2av ? "array" : "hash");
903 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
907 PERL_ARGS_ASSERT_DO_ODDBALL;
913 if (ckWARN(WARN_MISC)) {
915 if (relem == firstrelem &&
917 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
918 SvTYPE(SvRV(*relem)) == SVt_PVHV))
920 err = "Reference found where even-sized list expected";
923 err = "Odd number of elements in hash assignment";
924 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
928 didstore = hv_store_ent(hash,*relem,tmpstr,0);
929 if (SvMAGICAL(hash)) {
930 if (SvSMAGICAL(tmpstr))
942 SV **lastlelem = PL_stack_sp;
943 SV **lastrelem = PL_stack_base + POPMARK;
944 SV **firstrelem = PL_stack_base + POPMARK + 1;
945 SV **firstlelem = lastrelem + 1;
958 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
960 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
963 /* If there's a common identifier on both sides we have to take
964 * special care that assigning the identifier on the left doesn't
965 * clobber a value on the right that's used later in the list.
966 * Don't bother if LHS is just an empty hash or array.
969 if ( (PL_op->op_private & OPpASSIGN_COMMON)
971 firstlelem != lastlelem
972 || ! ((sv = *firstlelem))
974 || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
975 || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
976 || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
979 EXTEND_MORTAL(lastrelem - firstrelem + 1);
980 for (relem = firstrelem; relem <= lastrelem; relem++) {
982 TAINT_NOT; /* Each item is independent */
984 /* Dear TODO test in t/op/sort.t, I love you.
985 (It's relying on a panic, not a "semi-panic" from newSVsv()
986 and then an assertion failure below.) */
987 if (SvIS_FREED(sv)) {
988 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
991 /* Not newSVsv(), as it does not allow copy-on-write,
992 resulting in wasteful copies. We need a second copy of
993 a temp here, hence the SV_NOSTEAL. */
994 *relem = sv_mortalcopy_flags(sv,SV_GMAGIC|SV_DO_COW_SVSETSV
1005 while (lelem <= lastlelem) {
1006 TAINT_NOT; /* Each item stands on its own, taintwise. */
1008 switch (SvTYPE(sv)) {
1010 ary = MUTABLE_AV(sv);
1011 magic = SvMAGICAL(ary) != 0;
1013 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1015 av_extend(ary, lastrelem - relem);
1017 while (relem <= lastrelem) { /* gobble up all the rest */
1020 SvGETMAGIC(*relem); /* before newSV, in case it dies */
1022 sv_setsv_nomg(sv, *relem);
1024 didstore = av_store(ary,i++,sv);
1033 if (PL_delaymagic & DM_ARRAY_ISA)
1034 SvSETMAGIC(MUTABLE_SV(ary));
1037 case SVt_PVHV: { /* normal hash */
1039 SV** topelem = relem;
1041 hash = MUTABLE_HV(sv);
1042 magic = SvMAGICAL(hash) != 0;
1044 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1046 firsthashrelem = relem;
1048 while (relem < lastrelem) { /* gobble up all the rest */
1050 sv = *relem ? *relem : &PL_sv_no;
1052 tmpstr = sv_newmortal();
1054 sv_setsv(tmpstr,*relem); /* value */
1056 if (gimme != G_VOID) {
1057 if (hv_exists_ent(hash, sv, 0))
1058 /* key overwrites an existing entry */
1061 if (gimme == G_ARRAY) {
1062 /* copy element back: possibly to an earlier
1063 * stack location if we encountered dups earlier */
1065 *topelem++ = tmpstr;
1068 didstore = hv_store_ent(hash,sv,tmpstr,0);
1069 if (didstore) SvREFCNT_inc_simple_void_NN(tmpstr);
1071 if (SvSMAGICAL(tmpstr))
1076 if (relem == lastrelem) {
1077 do_oddball(hash, relem, firstrelem);
1084 if (SvIMMORTAL(sv)) {
1085 if (relem <= lastrelem)
1089 if (relem <= lastrelem) {
1091 SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1092 (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
1095 packWARN(WARN_MISC),
1096 "Useless assignment to a temporary"
1098 sv_setsv(sv, *relem);
1102 sv_setsv(sv, &PL_sv_undef);
1107 if (PL_delaymagic & ~DM_DELAY) {
1108 /* Will be used to set PL_tainting below */
1109 UV tmp_uid = PerlProc_getuid();
1110 UV tmp_euid = PerlProc_geteuid();
1111 UV tmp_gid = PerlProc_getgid();
1112 UV tmp_egid = PerlProc_getegid();
1114 if (PL_delaymagic & DM_UID) {
1115 #ifdef HAS_SETRESUID
1116 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1117 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
1120 # ifdef HAS_SETREUID
1121 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1122 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1);
1125 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1126 (void)setruid(PL_delaymagic_uid);
1127 PL_delaymagic &= ~DM_RUID;
1129 # endif /* HAS_SETRUID */
1131 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1132 (void)seteuid(PL_delaymagic_euid);
1133 PL_delaymagic &= ~DM_EUID;
1135 # endif /* HAS_SETEUID */
1136 if (PL_delaymagic & DM_UID) {
1137 if (PL_delaymagic_uid != PL_delaymagic_euid)
1138 DIE(aTHX_ "No setreuid available");
1139 (void)PerlProc_setuid(PL_delaymagic_uid);
1141 # endif /* HAS_SETREUID */
1142 #endif /* HAS_SETRESUID */
1143 tmp_uid = PerlProc_getuid();
1144 tmp_euid = PerlProc_geteuid();
1146 if (PL_delaymagic & DM_GID) {
1147 #ifdef HAS_SETRESGID
1148 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1149 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
1152 # ifdef HAS_SETREGID
1153 (void)setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1154 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1);
1157 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1158 (void)setrgid(PL_delaymagic_gid);
1159 PL_delaymagic &= ~DM_RGID;
1161 # endif /* HAS_SETRGID */
1163 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1164 (void)setegid(PL_delaymagic_egid);
1165 PL_delaymagic &= ~DM_EGID;
1167 # endif /* HAS_SETEGID */
1168 if (PL_delaymagic & DM_GID) {
1169 if (PL_delaymagic_gid != PL_delaymagic_egid)
1170 DIE(aTHX_ "No setregid available");
1171 (void)PerlProc_setgid(PL_delaymagic_gid);
1173 # endif /* HAS_SETREGID */
1174 #endif /* HAS_SETRESGID */
1175 tmp_gid = PerlProc_getgid();
1176 tmp_egid = PerlProc_getegid();
1178 TAINTING_set( TAINTING_get | (tmp_uid && (tmp_euid != tmp_uid || tmp_egid != tmp_gid)) );
1182 if (gimme == G_VOID)
1183 SP = firstrelem - 1;
1184 else if (gimme == G_SCALAR) {
1187 SETi(lastrelem - firstrelem + 1 - duplicates);
1194 /* at this point we have removed the duplicate key/value
1195 * pairs from the stack, but the remaining values may be
1196 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1197 * the (a 2), but the stack now probably contains
1198 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1199 * obliterates the earlier key. So refresh all values. */
1200 lastrelem -= duplicates;
1201 relem = firsthashrelem;
1202 while (relem < lastrelem) {
1205 he = hv_fetch_ent(hash, sv, 0, 0);
1206 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1212 SP = firstrelem + (lastlelem - firstlelem);
1213 lelem = firstlelem + (relem - firstrelem);
1215 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1224 PMOP * const pm = cPMOP;
1225 REGEXP * rx = PM_GETRE(pm);
1226 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1227 SV * const rv = sv_newmortal();
1231 SvUPGRADE(rv, SVt_IV);
1232 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1233 loathe to use it here, but it seems to be the right fix. Or close.
1234 The key part appears to be that it's essential for pp_qr to return a new
1235 object (SV), which implies that there needs to be an effective way to
1236 generate a new SV from the existing SV that is pre-compiled in the
1238 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1241 cvp = &( ReANY((REGEXP *)SvRV(rv))->qr_anoncv);
1242 if ((cv = *cvp) && CvCLONE(*cvp)) {
1243 *cvp = cv_clone(cv);
1248 HV *const stash = gv_stashsv(pkg, GV_ADD);
1250 (void)sv_bless(rv, stash);
1253 if (RX_ISTAINTED(rx)) {
1255 SvTAINTED_on(SvRV(rv));
1270 U8 r_flags = REXEC_CHECKED;
1271 const char *truebase; /* Start of string */
1272 REGEXP *rx = PM_GETRE(pm);
1274 const I32 gimme = GIMME;
1277 const I32 oldsave = PL_savestack_ix;
1278 I32 update_minmatch = 1;
1279 I32 had_zerolen = 0;
1282 if (PL_op->op_flags & OPf_STACKED)
1284 else if (PL_op->op_private & OPpTARGET_MY)
1291 PUTBACK; /* EVAL blocks need stack_sp. */
1292 /* Skip get-magic if this is a qr// clone, because regcomp has
1294 s = ReANY(rx)->mother_re
1295 ? SvPV_nomg_const(TARG, len)
1296 : SvPV_const(TARG, len);
1298 DIE(aTHX_ "panic: pp_match");
1300 rxtainted = (RX_ISTAINTED(rx) ||
1301 (TAINT_get && (pm->op_pmflags & PMf_RETAINT)));
1304 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1306 /* PMdf_USED is set after a ?? matches once */
1309 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1311 pm->op_pmflags & PMf_USED
1314 DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
1317 if (gimme == G_ARRAY)
1324 /* empty pattern special-cased to use last successful pattern if
1325 possible, except for qr// */
1326 if (!ReANY(rx)->mother_re && !RX_PRELEN(rx)
1332 if (RX_MINLEN(rx) > (I32)len) {
1333 DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match\n"));
1339 /* XXXX What part of this is needed with true \G-support? */
1340 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1341 RX_OFFS(rx)[0].start = -1;
1342 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1343 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1344 if (mg && mg->mg_len >= 0) {
1345 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1346 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1347 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1348 r_flags |= REXEC_IGNOREPOS;
1349 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1350 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1353 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1354 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1355 update_minmatch = 0;
1361 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
1363 r_flags |= (REXEC_COPY_STR|REXEC_COPY_SKIP_PRE);
1364 /* in @a =~ /(.)/g, we iterate multiple times, but copy the buffer
1365 * only on the first iteration. Therefore we need to copy $' as well
1366 * as $&, to make the rest of the string available for captures in
1367 * subsequent iterations */
1368 if (! (global && gimme == G_ARRAY))
1369 r_flags |= REXEC_COPY_SKIP_POST;
1373 if (global && RX_OFFS(rx)[0].start != -1) {
1374 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1375 if ((s + RX_MINLEN(rx)) > strend || s < truebase) {
1376 DEBUG_r(PerlIO_printf(Perl_debug_log, "Regex match can't succeed, so not even tried\n"));
1379 if (update_minmatch++)
1380 minmatch = had_zerolen;
1382 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1383 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1384 /* FIXME - can PL_bostr be made const char *? */
1385 PL_bostr = (char *)truebase;
1386 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1390 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1392 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1393 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1396 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1397 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1401 if (dynpm->op_pmflags & PMf_ONCE) {
1403 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1405 dynpm->op_pmflags |= PMf_USED;
1411 RX_MATCH_TAINTED_on(rx);
1412 TAINT_IF(RX_MATCH_TAINTED(rx));
1413 if (gimme == G_ARRAY) {
1414 const I32 nparens = RX_NPARENS(rx);
1415 I32 i = (global && !nparens) ? 1 : 0;
1417 SPAGAIN; /* EVAL blocks could move the stack. */
1418 EXTEND(SP, nparens + i);
1419 EXTEND_MORTAL(nparens + i);
1420 for (i = !i; i <= nparens; i++) {
1421 PUSHs(sv_newmortal());
1422 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1423 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1424 s = RX_OFFS(rx)[i].start + truebase;
1425 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1426 len < 0 || len > strend - s)
1427 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1428 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1429 (long) i, (long) RX_OFFS(rx)[i].start,
1430 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1431 sv_setpvn(*SP, s, len);
1432 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1437 if (dynpm->op_pmflags & PMf_CONTINUE) {
1439 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1440 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1442 #ifdef PERL_OLD_COPY_ON_WRITE
1444 sv_force_normal_flags(TARG, 0);
1446 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1447 &PL_vtbl_mglob, NULL, 0);
1449 if (RX_OFFS(rx)[0].start != -1) {
1450 mg->mg_len = RX_OFFS(rx)[0].end;
1451 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1452 mg->mg_flags |= MGf_MINMATCH;
1454 mg->mg_flags &= ~MGf_MINMATCH;
1457 had_zerolen = (RX_OFFS(rx)[0].start != -1
1458 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1459 == (UV)RX_OFFS(rx)[0].end));
1460 PUTBACK; /* EVAL blocks may use stack */
1461 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1466 LEAVE_SCOPE(oldsave);
1472 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1473 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1477 #ifdef PERL_OLD_COPY_ON_WRITE
1479 sv_force_normal_flags(TARG, 0);
1481 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1482 &PL_vtbl_mglob, NULL, 0);
1484 if (RX_OFFS(rx)[0].start != -1) {
1485 mg->mg_len = RX_OFFS(rx)[0].end;
1486 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1487 mg->mg_flags |= MGf_MINMATCH;
1489 mg->mg_flags &= ~MGf_MINMATCH;
1492 LEAVE_SCOPE(oldsave);
1496 yup: /* Confirmed by INTUIT */
1498 RX_MATCH_TAINTED_on(rx);
1499 TAINT_IF(RX_MATCH_TAINTED(rx));
1501 if (dynpm->op_pmflags & PMf_ONCE) {
1503 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1505 dynpm->op_pmflags |= PMf_USED;
1508 if (RX_MATCH_COPIED(rx))
1509 Safefree(RX_SUBBEG(rx));
1510 RX_MATCH_COPIED_off(rx);
1511 RX_SUBBEG(rx) = NULL;
1513 /* FIXME - should rx->subbeg be const char *? */
1514 RX_SUBBEG(rx) = (char *) truebase;
1515 RX_SUBOFFSET(rx) = 0;
1516 RX_SUBCOFFSET(rx) = 0;
1517 RX_OFFS(rx)[0].start = s - truebase;
1518 if (RX_MATCH_UTF8(rx)) {
1519 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1520 RX_OFFS(rx)[0].end = t - truebase;
1523 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1525 RX_SUBLEN(rx) = strend - truebase;
1528 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1530 #ifdef PERL_OLD_COPY_ON_WRITE
1531 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1533 PerlIO_printf(Perl_debug_log,
1534 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1535 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1538 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1540 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1541 assert (SvPOKp(RX_SAVED_COPY(rx)));
1546 RX_SUBBEG(rx) = savepvn(t, strend - t);
1547 #ifdef PERL_OLD_COPY_ON_WRITE
1548 RX_SAVED_COPY(rx) = NULL;
1551 RX_SUBLEN(rx) = strend - t;
1552 RX_SUBOFFSET(rx) = 0;
1553 RX_SUBCOFFSET(rx) = 0;
1554 RX_MATCH_COPIED_on(rx);
1555 off = RX_OFFS(rx)[0].start = s - t;
1556 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1558 else { /* startp/endp are used by @- @+. */
1559 RX_OFFS(rx)[0].start = s - truebase;
1560 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1562 /* match via INTUIT shouldn't have any captures. Let @-, @+, $^N know */
1563 assert(!RX_NPARENS(rx));
1564 RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0;
1565 LEAVE_SCOPE(oldsave);
1570 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1571 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1572 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1577 LEAVE_SCOPE(oldsave);
1578 if (gimme == G_ARRAY)
1584 Perl_do_readline(pTHX)
1586 dVAR; dSP; dTARGETSTACKED;
1591 IO * const io = GvIO(PL_last_in_gv);
1592 const I32 type = PL_op->op_type;
1593 const I32 gimme = GIMME_V;
1596 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1598 Perl_tied_method(aTHX_ "READLINE", SP, MUTABLE_SV(io), mg, gimme, 0);
1599 if (gimme == G_SCALAR) {
1601 SvSetSV_nosteal(TARG, TOPs);
1611 if (IoFLAGS(io) & IOf_ARGV) {
1612 if (IoFLAGS(io) & IOf_START) {
1614 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1615 IoFLAGS(io) &= ~IOf_START;
1616 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1617 SvTAINTED_off(GvSVn(PL_last_in_gv)); /* previous tainting irrelevant */
1618 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1619 SvSETMAGIC(GvSV(PL_last_in_gv));
1624 fp = nextargv(PL_last_in_gv);
1625 if (!fp) { /* Note: fp != IoIFP(io) */
1626 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1629 else if (type == OP_GLOB)
1630 fp = Perl_start_glob(aTHX_ POPs, io);
1632 else if (type == OP_GLOB)
1634 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1635 report_wrongway_fh(PL_last_in_gv, '>');
1639 if ((!io || !(IoFLAGS(io) & IOf_START))
1640 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1642 if (type == OP_GLOB)
1643 Perl_ck_warner_d(aTHX_ packWARN(WARN_GLOB),
1644 "glob failed (can't start child: %s)",
1647 report_evil_fh(PL_last_in_gv);
1649 if (gimme == G_SCALAR) {
1650 /* undef TARG, and push that undefined value */
1651 if (type != OP_RCATLINE) {
1652 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1660 if (gimme == G_SCALAR) {
1662 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1665 if (type == OP_RCATLINE)
1666 SvPV_force_nomg_nolen(sv);
1670 else if (isGV_with_GP(sv)) {
1671 SvPV_force_nomg_nolen(sv);
1673 SvUPGRADE(sv, SVt_PV);
1674 tmplen = SvLEN(sv); /* remember if already alloced */
1675 if (!tmplen && !SvREADONLY(sv)) {
1676 /* try short-buffering it. Please update t/op/readline.t
1677 * if you change the growth length.
1682 if (type == OP_RCATLINE && SvOK(sv)) {
1684 SvPV_force_nomg_nolen(sv);
1690 sv = sv_2mortal(newSV(80));
1694 /* This should not be marked tainted if the fp is marked clean */
1695 #define MAYBE_TAINT_LINE(io, sv) \
1696 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1701 /* delay EOF state for a snarfed empty file */
1702 #define SNARF_EOF(gimme,rs,io,sv) \
1703 (gimme != G_SCALAR || SvCUR(sv) \
1704 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1708 if (!sv_gets(sv, fp, offset)
1710 || SNARF_EOF(gimme, PL_rs, io, sv)
1711 || PerlIO_error(fp)))
1713 PerlIO_clearerr(fp);
1714 if (IoFLAGS(io) & IOf_ARGV) {
1715 fp = nextargv(PL_last_in_gv);
1718 (void)do_close(PL_last_in_gv, FALSE);
1720 else if (type == OP_GLOB) {
1721 if (!do_close(PL_last_in_gv, FALSE)) {
1722 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1723 "glob failed (child exited with status %d%s)",
1724 (int)(STATUS_CURRENT >> 8),
1725 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1728 if (gimme == G_SCALAR) {
1729 if (type != OP_RCATLINE) {
1730 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1736 MAYBE_TAINT_LINE(io, sv);
1739 MAYBE_TAINT_LINE(io, sv);
1741 IoFLAGS(io) |= IOf_NOLINE;
1745 if (type == OP_GLOB) {
1748 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1749 char * const tmps = SvEND(sv) - 1;
1750 if (*tmps == *SvPVX_const(PL_rs)) {
1752 SvCUR_set(sv, SvCUR(sv) - 1);
1755 for (t1 = SvPVX_const(sv); *t1; t1++)
1756 if (!isALNUMC(*t1) &&
1757 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1759 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1760 (void)POPs; /* Unmatched wildcard? Chuck it... */
1763 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1764 if (ckWARN(WARN_UTF8)) {
1765 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1766 const STRLEN len = SvCUR(sv) - offset;
1769 if (!is_utf8_string_loc(s, len, &f))
1770 /* Emulate :encoding(utf8) warning in the same case. */
1771 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1772 "utf8 \"\\x%02X\" does not map to Unicode",
1773 f < (U8*)SvEND(sv) ? *f : 0);
1776 if (gimme == G_ARRAY) {
1777 if (SvLEN(sv) - SvCUR(sv) > 20) {
1778 SvPV_shrink_to_cur(sv);
1780 sv = sv_2mortal(newSV(80));
1783 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1784 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1785 const STRLEN new_len
1786 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1787 SvPV_renew(sv, new_len);
1798 SV * const keysv = POPs;
1799 HV * const hv = MUTABLE_HV(POPs);
1800 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1801 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1803 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1804 bool preeminent = TRUE;
1806 if (SvTYPE(hv) != SVt_PVHV)
1813 /* If we can determine whether the element exist,
1814 * Try to preserve the existenceness of a tied hash
1815 * element by using EXISTS and DELETE if possible.
1816 * Fallback to FETCH and STORE otherwise. */
1817 if (SvCANEXISTDELETE(hv))
1818 preeminent = hv_exists_ent(hv, keysv, 0);
1821 he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
1822 svp = he ? &HeVAL(he) : NULL;
1824 if (!svp || !*svp || *svp == &PL_sv_undef) {
1828 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1830 lv = sv_newmortal();
1831 sv_upgrade(lv, SVt_PVLV);
1833 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1834 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1835 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1841 if (HvNAME_get(hv) && isGV(*svp))
1842 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1843 else if (preeminent)
1844 save_helem_flags(hv, keysv, svp,
1845 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1847 SAVEHDELETE(hv, keysv);
1849 else if (PL_op->op_private & OPpDEREF) {
1850 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1854 sv = (svp && *svp ? *svp : &PL_sv_undef);
1855 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1856 * was to make C<local $tied{foo} = $tied{foo}> possible.
1857 * However, it seems no longer to be needed for that purpose, and
1858 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1859 * would loop endlessly since the pos magic is getting set on the
1860 * mortal copy and lost. However, the copy has the effect of
1861 * triggering the get magic, and losing it altogether made things like
1862 * c<$tied{foo};> in void context no longer do get magic, which some
1863 * code relied on. Also, delayed triggering of magic on @+ and friends
1864 * meant the original regex may be out of scope by now. So as a
1865 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1866 * being called too many times). */
1867 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1879 AV *av = NULL; /* used for LOOP_FOR on arrays and the stack */
1880 bool av_is_stack = FALSE;
1883 cx = &cxstack[cxstack_ix];
1884 if (!CxTYPE_is_LOOP(cx))
1885 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
1887 itersvp = CxITERVAR(cx);
1888 if (CxTYPE(cx) == CXt_LOOP_LAZYSV) {
1889 /* string increment */
1890 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1891 SV *end = cx->blk_loop.state_u.lazysv.end;
1892 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1893 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1895 const char *max = SvPV_const(end, maxlen);
1896 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1897 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1898 /* safe to reuse old SV */
1899 sv_setsv(*itersvp, cur);
1903 /* we need a fresh SV every time so that loop body sees a
1904 * completely new SV for closures/references to work as
1907 *itersvp = newSVsv(cur);
1908 SvREFCNT_dec(oldsv);
1910 if (strEQ(SvPVX_const(cur), max))
1911 sv_setiv(cur, 0); /* terminate next time */
1918 else if (CxTYPE(cx) == CXt_LOOP_LAZYIV) {
1919 /* integer increment */
1920 if (cx->blk_loop.state_u.lazyiv.cur > cx->blk_loop.state_u.lazyiv.end)
1923 /* don't risk potential race */
1924 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1925 /* safe to reuse old SV */
1926 sv_setiv(*itersvp, cx->blk_loop.state_u.lazyiv.cur);
1930 /* we need a fresh SV every time so that loop body sees a
1931 * completely new SV for closures/references to work as they
1934 *itersvp = newSViv(cx->blk_loop.state_u.lazyiv.cur);
1935 SvREFCNT_dec(oldsv);
1938 if (cx->blk_loop.state_u.lazyiv.cur == IV_MAX) {
1939 /* Handle end of range at IV_MAX */
1940 cx->blk_loop.state_u.lazyiv.end = IV_MIN;
1942 ++cx->blk_loop.state_u.lazyiv.cur;
1948 assert(CxTYPE(cx) == CXt_LOOP_FOR);
1949 av = cx->blk_loop.state_u.ary.ary;
1954 if (PL_op->op_private & OPpITER_REVERSED) {
1955 if (cx->blk_loop.state_u.ary.ix <= (av_is_stack
1956 ? cx->blk_loop.resetsp + 1 : 0))
1959 if (SvMAGICAL(av) || AvREIFY(av)) {
1960 SV * const * const svp = av_fetch(av, --cx->blk_loop.state_u.ary.ix, FALSE);
1961 sv = svp ? *svp : NULL;
1964 sv = AvARRAY(av)[--cx->blk_loop.state_u.ary.ix];
1968 if (cx->blk_loop.state_u.ary.ix >= (av_is_stack ? cx->blk_oldsp :
1972 if (SvMAGICAL(av) || AvREIFY(av)) {
1973 SV * const * const svp = av_fetch(av, ++cx->blk_loop.state_u.ary.ix, FALSE);
1974 sv = svp ? *svp : NULL;
1977 sv = AvARRAY(av)[++cx->blk_loop.state_u.ary.ix];
1981 if (sv && SvIS_FREED(sv)) {
1983 Perl_croak(aTHX_ "Use of freed value in iteration");
1988 SvREFCNT_inc_simple_void_NN(sv);
1992 if (!av_is_stack && sv == &PL_sv_undef) {
1993 SV *lv = newSV_type(SVt_PVLV);
1995 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
1996 LvTARG(lv) = SvREFCNT_inc_simple(av);
1997 LvTARGOFF(lv) = cx->blk_loop.state_u.ary.ix;
1998 LvTARGLEN(lv) = (STRLEN)UV_MAX;
2004 SvREFCNT_dec(oldsv);
2010 A description of how taint works in pattern matching and substitution.
2012 This is all conditional on NO_TAINT_SUPPORT not being defined. Under
2013 NO_TAINT_SUPPORT, taint-related operations should become no-ops.
2015 While the pattern is being assembled/concatenated and then compiled,
2016 PL_tainted will get set (via TAINT_set) if any component of the pattern
2017 is tainted, e.g. /.*$tainted/. At the end of pattern compilation,
2018 the RXf_TAINTED flag is set on the pattern if PL_tainted is set (via
2021 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
2022 the pattern is marked as tainted. This means that subsequent usage, such
2023 as /x$r/, will set PL_tainted using TAINT_set, and thus RXf_TAINTED,
2024 on the new pattern too.
2026 During execution of a pattern, locale-variant ops such as ALNUML set the
2027 local flag RF_tainted. At the end of execution, the engine sets the
2028 RXf_TAINTED_SEEN on the pattern if RF_tainted got set, or clears it
2031 In addition, RXf_TAINTED_SEEN is used post-execution by the get magic code
2032 of $1 et al to indicate whether the returned value should be tainted.
2033 It is the responsibility of the caller of the pattern (i.e. pp_match,
2034 pp_subst etc) to set this flag for any other circumstances where $1 needs
2037 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
2039 There are three possible sources of taint
2041 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
2042 * the replacement string (or expression under /e)
2044 There are four destinations of taint and they are affected by the sources
2045 according to the rules below:
2047 * the return value (not including /r):
2048 tainted by the source string and pattern, but only for the
2049 number-of-iterations case; boolean returns aren't tainted;
2050 * the modified string (or modified copy under /r):
2051 tainted by the source string, pattern, and replacement strings;
2053 tainted by the pattern, and under 'use re "taint"', by the source
2055 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2056 should always be unset before executing subsequent code.
2058 The overall action of pp_subst is:
2060 * at the start, set bits in rxtainted indicating the taint status of
2061 the various sources.
2063 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2064 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2065 pattern has subsequently become tainted via locale ops.
2067 * If control is being passed to pp_substcont to execute a /e block,
2068 save rxtainted in the CXt_SUBST block, for future use by
2071 * Whenever control is being returned to perl code (either by falling
2072 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2073 use the flag bits in rxtainted to make all the appropriate types of
2074 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2075 et al will appear tainted.
2077 pp_match is just a simpler version of the above.
2096 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2097 See "how taint works" above */
2100 REGEXP *rx = PM_GETRE(pm);
2102 int force_on_match = 0;
2103 const I32 oldsave = PL_savestack_ix;
2105 bool doutf8 = FALSE; /* whether replacement is in utf8 */
2106 #ifdef PERL_OLD_COPY_ON_WRITE
2110 /* known replacement string? */
2111 SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2115 if (PL_op->op_flags & OPf_STACKED)
2117 else if (PL_op->op_private & OPpTARGET_MY)
2124 SvGETMAGIC(TARG); /* must come before cow check */
2125 #ifdef PERL_OLD_COPY_ON_WRITE
2126 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2127 because they make integers such as 256 "false". */
2128 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2131 sv_force_normal_flags(TARG,0);
2133 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2134 #ifdef PERL_OLD_COPY_ON_WRITE
2137 && (SvREADONLY(TARG)
2138 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2139 || SvTYPE(TARG) > SVt_PVLV)
2140 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2141 Perl_croak_no_modify(aTHX);
2144 s = SvPV_nomg(TARG, len);
2145 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV || SvVOK(TARG))
2148 /* only replace once? */
2149 once = !(rpm->op_pmflags & PMf_GLOBAL);
2151 /* See "how taint works" above */
2154 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2155 | (RX_ISTAINTED(rx) ? SUBST_TAINT_PAT : 0)
2156 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2157 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2158 ? SUBST_TAINT_BOOLRET : 0));
2162 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2166 DIE(aTHX_ "panic: pp_subst, pm=%p, s=%p", pm, s);
2169 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2170 maxiters = 2 * slen + 10; /* We can match twice at each
2171 position, once with zero-length,
2172 second time with non-zero. */
2174 if (!RX_PRELEN(rx) && PL_curpm
2175 && !ReANY(rx)->mother_re) {
2180 r_flags = ( RX_NPARENS(rx)
2182 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
2188 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2190 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2194 /* How to do it in subst? */
2195 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2197 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY))
2202 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2203 r_flags | REXEC_CHECKED))
2207 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2208 LEAVE_SCOPE(oldsave);
2214 /* known replacement string? */
2216 /* replacement needing upgrading? */
2217 if (DO_UTF8(TARG) && !doutf8) {
2218 nsv = sv_newmortal();
2221 sv_recode_to_utf8(nsv, PL_encoding);
2223 sv_utf8_upgrade(nsv);
2224 c = SvPV_const(nsv, clen);
2228 c = SvPV_const(dstr, clen);
2229 doutf8 = DO_UTF8(dstr);
2232 if (SvTAINTED(dstr))
2233 rxtainted |= SUBST_TAINT_REPL;
2240 /* can do inplace substitution? */
2242 #ifdef PERL_OLD_COPY_ON_WRITE
2245 && (I32)clen <= RX_MINLENRET(rx)
2246 && (once || !(r_flags & REXEC_COPY_STR))
2247 && !(RX_EXTFLAGS(rx) & (RXf_LOOKBEHIND_SEEN|RXf_MODIFIES_VARS))
2248 && (!doutf8 || SvUTF8(TARG))
2249 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2252 #ifdef PERL_OLD_COPY_ON_WRITE
2253 if (SvIsCOW(TARG)) {
2254 assert (!force_on_match);
2258 if (force_on_match) {
2260 s = SvPV_force_nomg(TARG, len);
2265 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2266 rxtainted |= SUBST_TAINT_PAT;
2267 m = orig + RX_OFFS(rx)[0].start;
2268 d = orig + RX_OFFS(rx)[0].end;
2270 if (m - s > strend - d) { /* faster to shorten from end */
2272 Copy(c, m, clen, char);
2277 Move(d, m, i, char);
2281 SvCUR_set(TARG, m - s);
2283 else if ((i = m - s)) { /* faster from front */
2286 Move(s, d - i, i, char);
2289 Copy(c, m, clen, char);
2294 Copy(c, d, clen, char);
2304 if (iters++ > maxiters)
2305 DIE(aTHX_ "Substitution loop");
2306 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2307 rxtainted |= SUBST_TAINT_PAT;
2308 m = RX_OFFS(rx)[0].start + orig;
2311 Move(s, d, i, char);
2315 Copy(c, d, clen, char);
2318 s = RX_OFFS(rx)[0].end + orig;
2319 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2321 /* don't match same null twice */
2322 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2325 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2326 Move(s, d, i+1, char); /* include the NUL */
2335 if (force_on_match) {
2337 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2338 /* I feel that it should be possible to avoid this mortal copy
2339 given that the code below copies into a new destination.
2340 However, I suspect it isn't worth the complexity of
2341 unravelling the C<goto force_it> for the small number of
2342 cases where it would be viable to drop into the copy code. */
2343 TARG = sv_2mortal(newSVsv(TARG));
2345 s = SvPV_force_nomg(TARG, len);
2348 #ifdef PERL_OLD_COPY_ON_WRITE
2351 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2352 rxtainted |= SUBST_TAINT_PAT;
2354 dstr = newSVpvn_flags(m, s-m, SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2358 /* note that a whole bunch of local vars are saved here for
2359 * use by pp_substcont: here's a list of them in case you're
2360 * searching for places in this sub that uses a particular var:
2361 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2362 * s m strend rx once */
2364 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2366 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2369 if (iters++ > maxiters)
2370 DIE(aTHX_ "Substitution loop");
2371 if (RX_MATCH_TAINTED(rx))
2372 rxtainted |= SUBST_TAINT_PAT;
2373 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2376 assert(RX_SUBOFFSET(rx) == 0);
2377 orig = RX_SUBBEG(rx);
2379 strend = s + (strend - m);
2381 m = RX_OFFS(rx)[0].start + orig;
2382 sv_catpvn_nomg_maybeutf8(dstr, s, m - s, DO_UTF8(TARG));
2383 s = RX_OFFS(rx)[0].end + orig;
2385 /* replacement already stringified */
2387 sv_catpvn_nomg_maybeutf8(dstr, c, clen, doutf8);
2392 if (!nsv) nsv = sv_newmortal();
2393 sv_copypv(nsv, repl);
2394 if (!DO_UTF8(nsv)) sv_recode_to_utf8(nsv, PL_encoding);
2395 sv_catsv(dstr, nsv);
2397 else sv_catsv(dstr, repl);
2398 if (SvTAINTED(repl))
2399 rxtainted |= SUBST_TAINT_REPL;
2403 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2404 TARG, NULL, r_flags));
2405 sv_catpvn_nomg_maybeutf8(dstr, s, strend - s, DO_UTF8(TARG));
2407 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2408 /* From here on down we're using the copy, and leaving the original
2414 #ifdef PERL_OLD_COPY_ON_WRITE
2415 /* The match may make the string COW. If so, brilliant, because
2416 that's just saved us one malloc, copy and free - the regexp has
2417 donated the old buffer, and we malloc an entirely new one, rather
2418 than the regexp malloc()ing a buffer and copying our original,
2419 only for us to throw it away here during the substitution. */
2420 if (SvIsCOW(TARG)) {
2421 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2427 SvPV_set(TARG, SvPVX(dstr));
2428 SvCUR_set(TARG, SvCUR(dstr));
2429 SvLEN_set(TARG, SvLEN(dstr));
2430 SvFLAGS(TARG) |= SvUTF8(dstr);
2431 SvPV_set(dstr, NULL);
2438 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2439 (void)SvPOK_only_UTF8(TARG);
2442 /* See "how taint works" above */
2444 if ((rxtainted & SUBST_TAINT_PAT) ||
2445 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2446 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2448 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2450 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2451 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2453 SvTAINTED_on(TOPs); /* taint return value */
2455 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2457 /* needed for mg_set below */
2459 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
2463 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2465 LEAVE_SCOPE(oldsave);
2474 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2475 ++*PL_markstack_ptr;
2477 LEAVE_with_name("grep_item"); /* exit inner scope */
2480 if (PL_stack_base + *PL_markstack_ptr > SP) {
2482 const I32 gimme = GIMME_V;
2484 LEAVE_with_name("grep"); /* exit outer scope */
2485 (void)POPMARK; /* pop src */
2486 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2487 (void)POPMARK; /* pop dst */
2488 SP = PL_stack_base + POPMARK; /* pop original mark */
2489 if (gimme == G_SCALAR) {
2490 if (PL_op->op_private & OPpGREP_LEX) {
2491 SV* const sv = sv_newmortal();
2492 sv_setiv(sv, items);
2500 else if (gimme == G_ARRAY)
2507 ENTER_with_name("grep_item"); /* enter inner scope */
2510 src = PL_stack_base[*PL_markstack_ptr];
2512 if (PL_op->op_private & OPpGREP_LEX)
2513 PAD_SVl(PL_op->op_targ) = src;
2517 RETURNOP(cLOGOP->op_other);
2531 if (CxMULTICALL(&cxstack[cxstack_ix]))
2535 cxstack_ix++; /* temporarily protect top context */
2538 if (gimme == G_SCALAR) {
2541 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2542 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2543 && !SvMAGICAL(TOPs)) {
2544 *MARK = SvREFCNT_inc(TOPs);
2549 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2551 *MARK = sv_mortalcopy(sv);
2555 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2556 && !SvMAGICAL(TOPs)) {
2560 *MARK = sv_mortalcopy(TOPs);
2564 *MARK = &PL_sv_undef;
2568 else if (gimme == G_ARRAY) {
2569 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2570 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2571 || SvMAGICAL(*MARK)) {
2572 *MARK = sv_mortalcopy(*MARK);
2573 TAINT_NOT; /* Each item is independent */
2581 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2582 PL_curpm = newpm; /* ... and pop $1 et al */
2585 return cx->blk_sub.retop;
2595 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2598 DIE(aTHX_ "Not a CODE reference");
2599 switch (SvTYPE(sv)) {
2600 /* This is overwhelming the most common case: */
2603 if (!(cv = GvCVu((const GV *)sv))) {
2605 cv = sv_2cv(sv, &stash, &gv, 0);
2614 if(isGV_with_GP(sv)) goto we_have_a_glob;
2617 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2619 SP = PL_stack_base + POPMARK;
2627 sv = amagic_deref_call(sv, to_cv_amg);
2628 /* Don't SPAGAIN here. */
2635 DIE(aTHX_ PL_no_usym, "a subroutine");
2636 sym = SvPV_nomg_const(sv, len);
2637 if (PL_op->op_private & HINT_STRICT_REFS)
2638 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
2639 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2642 cv = MUTABLE_CV(SvRV(sv));
2643 if (SvTYPE(cv) == SVt_PVCV)
2648 DIE(aTHX_ "Not a CODE reference");
2649 /* This is the second most common case: */
2651 cv = MUTABLE_CV(sv);
2659 if (CvCLONE(cv) && ! CvCLONED(cv))
2660 DIE(aTHX_ "Closure prototype called");
2661 if (!CvROOT(cv) && !CvXSUB(cv)) {
2665 /* anonymous or undef'd function leaves us no recourse */
2666 if (CvANON(cv) || !(gv = CvGV(cv))) {
2668 DIE(aTHX_ "Undefined subroutine &%"HEKf" called",
2669 HEKfARG(CvNAME_HEK(cv)));
2670 DIE(aTHX_ "Undefined subroutine called");
2673 /* autoloaded stub? */
2674 if (cv != GvCV(gv)) {
2677 /* should call AUTOLOAD now? */
2680 if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2681 GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
2687 sub_name = sv_newmortal();
2688 gv_efullname3(sub_name, gv, NULL);
2689 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2698 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2699 Perl_get_db_sub(aTHX_ &sv, cv);
2701 PL_curcopdb = PL_curcop;
2703 /* check for lsub that handles lvalue subroutines */
2704 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2705 /* if lsub not found then fall back to DB::sub */
2706 if (!cv) cv = GvCV(PL_DBsub);
2708 cv = GvCV(PL_DBsub);
2711 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2712 DIE(aTHX_ "No DB::sub routine defined");
2715 if (!(CvISXSUB(cv))) {
2716 /* This path taken at least 75% of the time */
2718 I32 items = SP - MARK;
2719 PADLIST * const padlist = CvPADLIST(cv);
2720 PUSHBLOCK(cx, CXt_SUB, MARK);
2722 cx->blk_sub.retop = PL_op->op_next;
2724 if (CvDEPTH(cv) >= 2) {
2725 PERL_STACK_OVERFLOW_CHECK();
2726 pad_push(padlist, CvDEPTH(cv));
2729 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2731 AV *const av = MUTABLE_AV(PAD_SVl(0));
2733 /* @_ is normally not REAL--this should only ever
2734 * happen when DB::sub() calls things that modify @_ */
2739 cx->blk_sub.savearray = GvAV(PL_defgv);
2740 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2741 CX_CURPAD_SAVE(cx->blk_sub);
2742 cx->blk_sub.argarray = av;
2745 if (items > AvMAX(av) + 1) {
2746 SV **ary = AvALLOC(av);
2747 if (AvARRAY(av) != ary) {
2748 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2751 if (items > AvMAX(av) + 1) {
2752 AvMAX(av) = items - 1;
2753 Renew(ary,items,SV*);
2758 Copy(MARK,AvARRAY(av),items,SV*);
2759 AvFILLp(av) = items - 1;
2767 if ((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
2769 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2770 /* warning must come *after* we fully set up the context
2771 * stuff so that __WARN__ handlers can safely dounwind()
2774 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2775 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2776 sub_crush_depth(cv);
2777 RETURNOP(CvSTART(cv));
2780 I32 markix = TOPMARK;
2785 /* Need to copy @_ to stack. Alternative may be to
2786 * switch stack to @_, and copy return values
2787 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2788 AV * const av = GvAV(PL_defgv);
2789 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2792 /* Mark is at the end of the stack. */
2794 Copy(AvARRAY(av), SP + 1, items, SV*);
2799 /* We assume first XSUB in &DB::sub is the called one. */
2801 SAVEVPTR(PL_curcop);
2802 PL_curcop = PL_curcopdb;
2805 /* Do we need to open block here? XXXX */
2807 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2809 CvXSUB(cv)(aTHX_ cv);
2811 /* Enforce some sanity in scalar context. */
2812 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2813 if (markix > PL_stack_sp - PL_stack_base)
2814 *(PL_stack_base + markix) = &PL_sv_undef;
2816 *(PL_stack_base + markix) = *PL_stack_sp;
2817 PL_stack_sp = PL_stack_base + markix;
2825 Perl_sub_crush_depth(pTHX_ CV *cv)
2827 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2830 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2832 SV* const tmpstr = sv_newmortal();
2833 gv_efullname3(tmpstr, CvGV(cv), NULL);
2834 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2843 SV* const elemsv = POPs;
2844 IV elem = SvIV(elemsv);
2845 AV *const av = MUTABLE_AV(POPs);
2846 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2847 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2848 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2849 bool preeminent = TRUE;
2852 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2853 Perl_warner(aTHX_ packWARN(WARN_MISC),
2854 "Use of reference \"%"SVf"\" as array index",
2856 if (SvTYPE(av) != SVt_PVAV)
2863 /* If we can determine whether the element exist,
2864 * Try to preserve the existenceness of a tied array
2865 * element by using EXISTS and DELETE if possible.
2866 * Fallback to FETCH and STORE otherwise. */
2867 if (SvCANEXISTDELETE(av))
2868 preeminent = av_exists(av, elem);
2871 svp = av_fetch(av, elem, lval && !defer);
2873 #ifdef PERL_MALLOC_WRAP
2874 if (SvUOK(elemsv)) {
2875 const UV uv = SvUV(elemsv);
2876 elem = uv > IV_MAX ? IV_MAX : uv;
2878 else if (SvNOK(elemsv))
2879 elem = (IV)SvNV(elemsv);
2881 static const char oom_array_extend[] =
2882 "Out of memory during array extend"; /* Duplicated in av.c */
2883 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2886 if (!svp || *svp == &PL_sv_undef) {
2889 DIE(aTHX_ PL_no_aelem, elem);
2890 lv = sv_newmortal();
2891 sv_upgrade(lv, SVt_PVLV);
2893 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2894 LvTARG(lv) = SvREFCNT_inc_simple(av);
2895 LvTARGOFF(lv) = elem;
2902 save_aelem(av, elem, svp);
2904 SAVEADELETE(av, elem);
2906 else if (PL_op->op_private & OPpDEREF) {
2907 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
2911 sv = (svp ? *svp : &PL_sv_undef);
2912 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
2919 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2921 PERL_ARGS_ASSERT_VIVIFY_REF;
2926 Perl_croak_no_modify(aTHX);
2927 prepare_SV_for_RV(sv);
2930 SvRV_set(sv, newSV(0));
2933 SvRV_set(sv, MUTABLE_SV(newAV()));
2936 SvRV_set(sv, MUTABLE_SV(newHV()));
2943 if (SvGMAGICAL(sv)) {
2944 /* copy the sv without magic to prevent magic from being
2946 SV* msv = sv_newmortal();
2947 sv_setsv_nomg(msv, sv);
2956 SV* const sv = TOPs;
2959 SV* const rsv = SvRV(sv);
2960 if (SvTYPE(rsv) == SVt_PVCV) {
2966 SETs(method_common(sv, NULL));
2973 SV* const sv = cSVOP_sv;
2974 U32 hash = SvSHARED_HASH(sv);
2976 XPUSHs(method_common(sv, &hash));
2981 S_method_common(pTHX_ SV* meth, U32* hashp)
2988 SV * const sv = PL_stack_base + TOPMARK == PL_stack_sp
2989 ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
2990 "package or object reference", SVfARG(meth)),
2992 : *(PL_stack_base + TOPMARK + 1);
2994 PERL_ARGS_ASSERT_METHOD_COMMON;
2998 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
3003 ob = MUTABLE_SV(SvRV(sv));
3004 else if (!SvOK(sv)) goto undefined;
3006 /* this isn't a reference */
3009 const char * const packname = SvPV_nomg_const(sv, packlen);
3010 const bool packname_is_utf8 = !!SvUTF8(sv);
3011 const HE* const he =
3012 (const HE *)hv_common(
3013 PL_stashcache, NULL, packname, packlen,
3014 packname_is_utf8 ? HVhek_UTF8 : 0, 0, NULL, 0
3018 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
3019 DEBUG_o(Perl_deb(aTHX_ "PL_stashcache hit %p for '%"SVf"'\n",
3024 if (!(iogv = gv_fetchpvn_flags(
3025 packname, packlen, SVf_UTF8 * packname_is_utf8, SVt_PVIO
3027 !(ob=MUTABLE_SV(GvIO(iogv))))
3029 /* this isn't the name of a filehandle either */
3032 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3033 "without a package or object reference",
3036 /* assume it's a package name */
3037 stash = gv_stashpvn(packname, packlen, packname_is_utf8 ? SVf_UTF8 : 0);
3041 SV* const ref = newSViv(PTR2IV(stash));
3042 (void)hv_store(PL_stashcache, packname,
3043 packname_is_utf8 ? -(I32)packlen : (I32)packlen, ref, 0);
3044 DEBUG_o(Perl_deb(aTHX_ "PL_stashcache caching %p for '%"SVf"'\n",
3049 /* it _is_ a filehandle name -- replace with a reference */
3050 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3053 /* if we got here, ob should be a reference or a glob */
3054 if (!ob || !(SvOBJECT(ob)
3055 || (SvTYPE(ob) == SVt_PVGV
3057 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3060 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3061 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3062 ? newSVpvs_flags("DOES", SVs_TEMP)
3066 stash = SvSTASH(ob);
3069 /* NOTE: stash may be null, hope hv_fetch_ent and
3070 gv_fetchmethod can cope (it seems they can) */
3072 /* shortcut for simple names */
3074 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3076 gv = MUTABLE_GV(HeVAL(he));
3077 if (isGV(gv) && GvCV(gv) &&
3078 (!GvCVGEN(gv) || GvCVGEN(gv)
3079 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3080 return MUTABLE_SV(GvCV(gv));
3084 gv = gv_fetchmethod_sv_flags(stash ? stash : MUTABLE_HV(packsv),
3085 meth, GV_AUTOLOAD | GV_CROAK);
3089 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3094 * c-indentation-style: bsd
3096 * indent-tabs-mode: nil
3099 * ex: set ts=8 sts=4 sw=4 et: