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);
92 /* no PUTBACK, SETs doesn't inc/dec SP */
99 XPUSHs(MUTABLE_SV(cGVOP_gv));
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 SV * const sv = *PL_stack_sp;
117 if (PL_op->op_type == OP_AND)
119 return cLOGOP->op_other;
127 /* sassign keeps its args in the optree traditionally backwards.
128 So we pop them differently.
130 SV *left = POPs; SV *right = TOPs;
132 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
133 SV * const temp = left;
134 left = right; right = temp;
136 if (TAINTING_get && TAINT_get && !SvTAINTED(right))
138 if (PL_op->op_private & OPpASSIGN_CV_TO_GV) {
139 SV * const cv = SvRV(right);
140 const U32 cv_type = SvTYPE(cv);
141 const bool is_gv = isGV_with_GP(left);
142 const bool got_coderef = cv_type == SVt_PVCV || cv_type == SVt_PVFM;
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
151 if (!got_coderef && !is_gv && GIMME_V == G_VOID) {
152 /* Is the target symbol table currently empty? */
153 GV * const gv = gv_fetchsv_nomg(left, GV_NOINIT, SVt_PVGV);
154 if (SvTYPE(gv) != SVt_PVGV && !SvOK(gv)) {
155 /* Good. Create a new proxy constant subroutine in the target.
156 The gv becomes a(nother) reference to the constant. */
157 SV *const value = SvRV(cv);
159 SvUPGRADE(MUTABLE_SV(gv), SVt_IV);
160 SvPCS_IMPORTED_on(gv);
162 SvREFCNT_inc_simple_void(value);
168 /* Need to fix things up. */
170 /* Need to fix GV. */
171 left = MUTABLE_SV(gv_fetchsv_nomg(left,GV_ADD, SVt_PVGV));
175 /* We've been returned a constant rather than a full subroutine,
176 but they expect a subroutine reference to apply. */
178 ENTER_with_name("sassign_coderef");
179 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.
185 SvRV_set(right, MUTABLE_SV(newCONSTSUB(GvSTASH(left), NULL,
188 LEAVE_with_name("sassign_coderef");
190 /* What can happen for the corner case *{"BONK"} = \&{"BONK"};
192 First: ops for \&{"BONK"}; return us the constant in the
194 Second: ops for *{"BONK"} cause that symbol table entry
195 (and our reference to it) to be upgraded from RV
197 Thirdly: We get here. cv is actually PVGV now, and its
198 GvCV() is actually the subroutine we're looking for
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.
203 GV *const upgraded = MUTABLE_GV(cv);
204 CV *const source = GvCV(upgraded);
207 assert(CvFLAGS(source) & CVf_CONST);
209 SvREFCNT_inc_void(source);
210 SvREFCNT_dec(upgraded);
211 SvRV_set(right, MUTABLE_SV(source));
217 SvTEMP(left) && !SvSMAGICAL(left) && SvREFCNT(left) == 1 &&
218 (!isGV_with_GP(left) || SvFAKE(left)) && ckWARN(WARN_MISC)
221 packWARN(WARN_MISC), "Useless assignment to a temporary"
223 SvSetMagicSV(left, right);
233 RETURNOP(cLOGOP->op_other);
235 RETURNOP(cLOGOP->op_next);
242 TAINT_NOT; /* Each statement is presumed innocent */
243 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
245 if (!(PL_op->op_flags & OPf_SPECIAL)) {
246 I32 oldsave = PL_scopestack[PL_scopestack_ix - 1];
247 LEAVE_SCOPE(oldsave);
254 dVAR; dSP; dATARGET; tryAMAGICbin_MG(concat_amg, AMGf_assign);
259 const char *rpv = NULL;
261 bool rcopied = FALSE;
263 if (TARG == right && right != left) { /* $r = $l.$r */
264 rpv = SvPV_nomg_const(right, rlen);
265 rbyte = !DO_UTF8(right);
266 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
267 rpv = SvPV_const(right, rlen); /* no point setting UTF-8 here */
271 if (TARG != left) { /* not $l .= $r */
273 const char* const lpv = SvPV_nomg_const(left, llen);
274 lbyte = !DO_UTF8(left);
275 sv_setpvn(TARG, lpv, llen);
281 else { /* $l .= $r */
283 if (left == right && ckWARN(WARN_UNINITIALIZED)) /* $l .= $l */
284 report_uninit(right);
287 SvPV_force_nomg_nolen(left);
288 lbyte = !DO_UTF8(left);
295 /* $r.$r: do magic twice: tied might return different 2nd time */
297 rpv = SvPV_nomg_const(right, rlen);
298 rbyte = !DO_UTF8(right);
300 if (lbyte != rbyte) {
301 /* sv_utf8_upgrade_nomg() may reallocate the stack */
304 sv_utf8_upgrade_nomg(TARG);
307 right = newSVpvn_flags(rpv, rlen, SVs_TEMP);
308 sv_utf8_upgrade_nomg(right);
309 rpv = SvPV_nomg_const(right, rlen);
313 sv_catpvn_nomg(TARG, rpv, rlen);
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 */
326 S_pushav(pTHX_ AV* const av)
329 const I32 maxarg = AvFILL(av) + 1;
331 if (SvRMAGICAL(av)) {
333 for (i=0; i < (U32)maxarg; i++) {
334 SV ** const svp = av_fetch(av, i, FALSE);
335 /* See note in pp_helem, and bug id #27839 */
337 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
342 Copy(AvARRAY(av), SP+1, maxarg, SV*);
349 /* ($lex1,@lex2,...) or my ($lex1,@lex2,...) */
354 PADOFFSET base = PL_op->op_targ;
355 int count = (int)(PL_op->op_private) & OPpPADRANGE_COUNTMASK;
357 if (PL_op->op_flags & OPf_SPECIAL) {
358 /* fake the RHS of my ($x,$y,..) = @_ */
360 S_pushav(aTHX_ GvAVn(PL_defgv));
364 /* note, this is only skipped for compile-time-known void cxt */
365 if ((PL_op->op_flags & OPf_WANT) != OPf_WANT_VOID) {
368 for (i = 0; i <count; i++)
369 *++SP = PAD_SV(base+i);
371 if (PL_op->op_private & OPpLVAL_INTRO) {
372 SV **svp = &(PAD_SVl(base));
373 const UV payload = (UV)(
374 (base << (OPpPADRANGE_COUNTSHIFT + SAVE_TIGHT_SHIFT))
375 | (count << SAVE_TIGHT_SHIFT)
376 | SAVEt_CLEARPADRANGE);
377 assert(OPpPADRANGE_COUNTMASK + 1 == (1 <<OPpPADRANGE_COUNTSHIFT));
378 assert((payload >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT)) == base);
382 for (i = 0; i <count; i++)
383 SvPADSTALE_off(*svp++); /* mark lexical as active */
394 OP * const op = PL_op;
395 /* access PL_curpad once */
396 SV ** const padentry = &(PAD_SVl(op->op_targ));
401 PUTBACK; /* no pop/push after this, TOPs ok */
403 if (op->op_flags & OPf_MOD) {
404 if (op->op_private & OPpLVAL_INTRO)
405 if (!(op->op_private & OPpPAD_STATE))
406 save_clearsv(padentry);
407 if (op->op_private & OPpDEREF) {
408 /* TOPs is equivalent to TARG here. Using TOPs (SP) rather
409 than TARG reduces the scope of TARG, so it does not
410 span the call to save_clearsv, resulting in smaller
412 TOPs = vivify_ref(TOPs, op->op_private & OPpDEREF);
425 tryAMAGICunTARGETlist(iter_amg, 0, 0);
426 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
428 else PL_last_in_gv = PL_argvgv, PL_stack_sp--;
429 if (!isGV_with_GP(PL_last_in_gv)) {
430 if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
431 PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
434 XPUSHs(MUTABLE_SV(PL_last_in_gv));
437 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
440 return do_readline();
448 tryAMAGICbin_MG(eq_amg, AMGf_set|AMGf_numeric);
452 (SvIOK_notUV(left) && SvIOK_notUV(right))
453 ? (SvIVX(left) == SvIVX(right))
454 : ( do_ncmp(left, right) == 0)
463 PL_op->op_type == OP_PREINC || PL_op->op_type == OP_I_PREINC;
464 if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs)))
465 Perl_croak_no_modify();
466 if (!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
467 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
469 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
470 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
472 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
473 if (inc) sv_inc(TOPs);
486 if (PL_op->op_type == OP_OR)
488 RETURNOP(cLOGOP->op_other);
497 const int op_type = PL_op->op_type;
498 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
503 if (!sv || !SvANY(sv)) {
504 if (op_type == OP_DOR)
506 RETURNOP(cLOGOP->op_other);
512 if (!sv || !SvANY(sv))
517 switch (SvTYPE(sv)) {
519 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
523 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
527 if (CvROOT(sv) || CvXSUB(sv))
540 if(op_type == OP_DOR)
542 RETURNOP(cLOGOP->op_other);
544 /* assuming OP_DEFINED */
552 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
553 tryAMAGICbin_MG(add_amg, AMGf_assign|AMGf_numeric);
557 useleft = USE_LEFT(svl);
558 #ifdef PERL_PRESERVE_IVUV
559 /* We must see if we can perform the addition with integers if possible,
560 as the integer code detects overflow while the NV code doesn't.
561 If either argument hasn't had a numeric conversion yet attempt to get
562 the IV. It's important to do this now, rather than just assuming that
563 it's not IOK as a PV of "9223372036854775806" may not take well to NV
564 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
565 integer in case the second argument is IV=9223372036854775806
566 We can (now) rely on sv_2iv to do the right thing, only setting the
567 public IOK flag if the value in the NV (or PV) slot is truly integer.
569 A side effect is that this also aggressively prefers integer maths over
570 fp maths for integer values.
572 How to detect overflow?
574 C 99 section 6.2.6.1 says
576 The range of nonnegative values of a signed integer type is a subrange
577 of the corresponding unsigned integer type, and the representation of
578 the same value in each type is the same. A computation involving
579 unsigned operands can never overflow, because a result that cannot be
580 represented by the resulting unsigned integer type is reduced modulo
581 the number that is one greater than the largest value that can be
582 represented by the resulting type.
586 which I read as "unsigned ints wrap."
588 signed integer overflow seems to be classed as "exception condition"
590 If an exceptional condition occurs during the evaluation of an
591 expression (that is, if the result is not mathematically defined or not
592 in the range of representable values for its type), the behavior is
595 (6.5, the 5th paragraph)
597 I had assumed that on 2s complement machines signed arithmetic would
598 wrap, hence coded pp_add and pp_subtract on the assumption that
599 everything perl builds on would be happy. After much wailing and
600 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
601 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
602 unsigned code below is actually shorter than the old code. :-)
605 if (SvIV_please_nomg(svr)) {
606 /* Unless the left argument is integer in range we are going to have to
607 use NV maths. Hence only attempt to coerce the right argument if
608 we know the left is integer. */
616 /* left operand is undef, treat as zero. + 0 is identity,
617 Could SETi or SETu right now, but space optimise by not adding
618 lots of code to speed up what is probably a rarish case. */
620 /* Left operand is defined, so is it IV? */
621 if (SvIV_please_nomg(svl)) {
622 if ((auvok = SvUOK(svl)))
625 const IV aiv = SvIVX(svl);
628 auvok = 1; /* Now acting as a sign flag. */
629 } else { /* 2s complement assumption for IV_MIN */
637 bool result_good = 0;
640 bool buvok = SvUOK(svr);
645 const IV biv = SvIVX(svr);
652 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
653 else "IV" now, independent of how it came in.
654 if a, b represents positive, A, B negative, a maps to -A etc
659 all UV maths. negate result if A negative.
660 add if signs same, subtract if signs differ. */
666 /* Must get smaller */
672 /* result really should be -(auv-buv). as its negation
673 of true value, need to swap our result flag */
690 if (result <= (UV)IV_MIN)
693 /* result valid, but out of range for IV. */
698 } /* Overflow, drop through to NVs. */
703 NV value = SvNV_nomg(svr);
706 /* left operand is undef, treat as zero. + 0.0 is identity. */
710 SETn( value + SvNV_nomg(svl) );
718 AV * const av = PL_op->op_type == OP_AELEMFAST_LEX
719 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAVn(cGVOP_gv);
720 const U32 lval = PL_op->op_flags & OPf_MOD;
721 SV** const svp = av_fetch(av, PL_op->op_private, lval);
722 SV *sv = (svp ? *svp : &PL_sv_undef);
724 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
732 dVAR; dSP; dMARK; dTARGET;
734 do_join(TARG, *MARK, MARK, SP);
745 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
746 * will be enough to hold an OP*.
748 SV* const sv = sv_newmortal();
749 sv_upgrade(sv, SVt_PVLV);
751 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
754 XPUSHs(MUTABLE_SV(PL_op));
759 /* Oversized hot code. */
763 dVAR; dSP; dMARK; dORIGMARK;
767 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
771 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
774 if (MARK == ORIGMARK) {
775 /* If using default handle then we need to make space to
776 * pass object as 1st arg, so move other args up ...
780 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
783 return Perl_tied_method(aTHX_ "PRINT", mark - 1, MUTABLE_SV(io),
785 (G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK
786 | (PL_op->op_type == OP_SAY
787 ? TIED_METHOD_SAY : 0)), sp - mark);
790 if ( gv && GvEGVx(gv) && (io = GvIO(GvEGV(gv)))
791 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
794 SETERRNO(EBADF,RMS_IFI);
797 else if (!(fp = IoOFP(io))) {
799 report_wrongway_fh(gv, '<');
802 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
806 SV * const ofs = GvSV(PL_ofsgv); /* $, */
808 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
810 if (!do_print(*MARK, fp))
814 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
815 if (!do_print(GvSV(PL_ofsgv), fp)) {
824 if (!do_print(*MARK, fp))
832 if (PL_op->op_type == OP_SAY) {
833 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
836 else if (PL_ors_sv && SvOK(PL_ors_sv))
837 if (!do_print(PL_ors_sv, fp)) /* $\ */
840 if (IoFLAGS(io) & IOf_FLUSH)
841 if (PerlIO_flush(fp) == EOF)
851 XPUSHs(&PL_sv_undef);
858 const I32 gimme = GIMME_V;
859 static const char an_array[] = "an ARRAY";
860 static const char a_hash[] = "a HASH";
861 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
862 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
867 sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
870 if (SvTYPE(sv) != type)
871 /* diag_listed_as: Not an ARRAY reference */
872 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
873 else if (PL_op->op_flags & OPf_MOD
874 && PL_op->op_private & OPpLVAL_INTRO)
875 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
877 else if (SvTYPE(sv) != type) {
880 if (!isGV_with_GP(sv)) {
881 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
889 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
890 if (PL_op->op_private & OPpLVAL_INTRO)
891 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
893 if (PL_op->op_flags & OPf_REF) {
897 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
898 const I32 flags = is_lvalue_sub();
899 if (flags && !(flags & OPpENTERSUB_INARGS)) {
900 if (gimme != G_ARRAY)
901 goto croak_cant_return;
908 AV *const av = MUTABLE_AV(sv);
909 /* The guts of pp_rv2av, with no intending change to preserve history
910 (until such time as we get tools that can do blame annotation across
911 whitespace changes. */
912 if (gimme == G_ARRAY) {
918 else if (gimme == G_SCALAR) {
920 const I32 maxarg = AvFILL(av) + 1;
924 /* The guts of pp_rv2hv */
925 if (gimme == G_ARRAY) { /* array wanted */
927 return Perl_do_kv(aTHX);
929 else if ((PL_op->op_private & OPpTRUEBOOL
930 || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
931 && block_gimme() == G_VOID ))
932 && (!SvRMAGICAL(sv) || !mg_find(sv, PERL_MAGIC_tied)))
933 SETs(HvUSEDKEYS(sv) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
934 else if (gimme == G_SCALAR) {
936 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
944 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
945 is_pp_rv2av ? "array" : "hash");
950 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
954 PERL_ARGS_ASSERT_DO_ODDBALL;
960 if (ckWARN(WARN_MISC)) {
962 if (relem == firstrelem &&
964 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
965 SvTYPE(SvRV(*relem)) == SVt_PVHV))
967 err = "Reference found where even-sized list expected";
970 err = "Odd number of elements in hash assignment";
971 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
975 didstore = hv_store_ent(hash,*relem,tmpstr,0);
976 if (SvMAGICAL(hash)) {
977 if (SvSMAGICAL(tmpstr))
989 SV **lastlelem = PL_stack_sp;
990 SV **lastrelem = PL_stack_base + POPMARK;
991 SV **firstrelem = PL_stack_base + POPMARK + 1;
992 SV **firstlelem = lastrelem + 1;
1005 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
1007 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
1010 /* If there's a common identifier on both sides we have to take
1011 * special care that assigning the identifier on the left doesn't
1012 * clobber a value on the right that's used later in the list.
1013 * Don't bother if LHS is just an empty hash or array.
1016 if ( (PL_op->op_private & OPpASSIGN_COMMON)
1018 firstlelem != lastlelem
1019 || ! ((sv = *firstlelem))
1021 || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
1022 || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
1023 || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
1026 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1027 for (relem = firstrelem; relem <= lastrelem; relem++) {
1028 if ((sv = *relem)) {
1029 TAINT_NOT; /* Each item is independent */
1031 /* Dear TODO test in t/op/sort.t, I love you.
1032 (It's relying on a panic, not a "semi-panic" from newSVsv()
1033 and then an assertion failure below.) */
1034 if (SvIS_FREED(sv)) {
1035 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
1038 /* Not newSVsv(), as it does not allow copy-on-write,
1039 resulting in wasteful copies. We need a second copy of
1040 a temp here, hence the SV_NOSTEAL. */
1041 *relem = sv_mortalcopy_flags(sv,SV_GMAGIC|SV_DO_COW_SVSETSV
1052 while (lelem <= lastlelem) {
1053 TAINT_NOT; /* Each item stands on its own, taintwise. */
1055 switch (SvTYPE(sv)) {
1057 ary = MUTABLE_AV(sv);
1058 magic = SvMAGICAL(ary) != 0;
1060 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1062 av_extend(ary, lastrelem - relem);
1064 while (relem <= lastrelem) { /* gobble up all the rest */
1067 SvGETMAGIC(*relem); /* before newSV, in case it dies */
1069 sv_setsv_nomg(sv, *relem);
1071 didstore = av_store(ary,i++,sv);
1080 if (PL_delaymagic & DM_ARRAY_ISA)
1081 SvSETMAGIC(MUTABLE_SV(ary));
1084 case SVt_PVHV: { /* normal hash */
1086 SV** topelem = relem;
1088 hash = MUTABLE_HV(sv);
1089 magic = SvMAGICAL(hash) != 0;
1091 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1093 firsthashrelem = relem;
1095 while (relem < lastrelem) { /* gobble up all the rest */
1097 sv = *relem ? *relem : &PL_sv_no;
1099 tmpstr = sv_newmortal();
1101 sv_setsv(tmpstr,*relem); /* value */
1103 if (gimme != G_VOID) {
1104 if (hv_exists_ent(hash, sv, 0))
1105 /* key overwrites an existing entry */
1108 if (gimme == G_ARRAY) {
1109 /* copy element back: possibly to an earlier
1110 * stack location if we encountered dups earlier */
1112 *topelem++ = tmpstr;
1115 didstore = hv_store_ent(hash,sv,tmpstr,0);
1116 if (didstore) SvREFCNT_inc_simple_void_NN(tmpstr);
1118 if (SvSMAGICAL(tmpstr))
1123 if (relem == lastrelem) {
1124 do_oddball(hash, relem, firstrelem);
1131 if (SvIMMORTAL(sv)) {
1132 if (relem <= lastrelem)
1136 if (relem <= lastrelem) {
1138 SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1139 (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
1142 packWARN(WARN_MISC),
1143 "Useless assignment to a temporary"
1145 sv_setsv(sv, *relem);
1149 sv_setsv(sv, &PL_sv_undef);
1154 if (PL_delaymagic & ~DM_DELAY) {
1155 /* Will be used to set PL_tainting below */
1156 UV tmp_uid = PerlProc_getuid();
1157 UV tmp_euid = PerlProc_geteuid();
1158 UV tmp_gid = PerlProc_getgid();
1159 UV tmp_egid = PerlProc_getegid();
1161 if (PL_delaymagic & DM_UID) {
1162 #ifdef HAS_SETRESUID
1163 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1164 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
1167 # ifdef HAS_SETREUID
1168 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1169 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1);
1172 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1173 (void)setruid(PL_delaymagic_uid);
1174 PL_delaymagic &= ~DM_RUID;
1176 # endif /* HAS_SETRUID */
1178 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1179 (void)seteuid(PL_delaymagic_euid);
1180 PL_delaymagic &= ~DM_EUID;
1182 # endif /* HAS_SETEUID */
1183 if (PL_delaymagic & DM_UID) {
1184 if (PL_delaymagic_uid != PL_delaymagic_euid)
1185 DIE(aTHX_ "No setreuid available");
1186 (void)PerlProc_setuid(PL_delaymagic_uid);
1188 # endif /* HAS_SETREUID */
1189 #endif /* HAS_SETRESUID */
1190 tmp_uid = PerlProc_getuid();
1191 tmp_euid = PerlProc_geteuid();
1193 if (PL_delaymagic & DM_GID) {
1194 #ifdef HAS_SETRESGID
1195 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1196 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
1199 # ifdef HAS_SETREGID
1200 (void)setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1201 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1);
1204 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1205 (void)setrgid(PL_delaymagic_gid);
1206 PL_delaymagic &= ~DM_RGID;
1208 # endif /* HAS_SETRGID */
1210 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1211 (void)setegid(PL_delaymagic_egid);
1212 PL_delaymagic &= ~DM_EGID;
1214 # endif /* HAS_SETEGID */
1215 if (PL_delaymagic & DM_GID) {
1216 if (PL_delaymagic_gid != PL_delaymagic_egid)
1217 DIE(aTHX_ "No setregid available");
1218 (void)PerlProc_setgid(PL_delaymagic_gid);
1220 # endif /* HAS_SETREGID */
1221 #endif /* HAS_SETRESGID */
1222 tmp_gid = PerlProc_getgid();
1223 tmp_egid = PerlProc_getegid();
1225 TAINTING_set( TAINTING_get | (tmp_uid && (tmp_euid != tmp_uid || tmp_egid != tmp_gid)) );
1229 if (gimme == G_VOID)
1230 SP = firstrelem - 1;
1231 else if (gimme == G_SCALAR) {
1234 SETi(lastrelem - firstrelem + 1 - duplicates);
1241 /* at this point we have removed the duplicate key/value
1242 * pairs from the stack, but the remaining values may be
1243 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1244 * the (a 2), but the stack now probably contains
1245 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1246 * obliterates the earlier key. So refresh all values. */
1247 lastrelem -= duplicates;
1248 relem = firsthashrelem;
1249 while (relem < lastrelem) {
1252 he = hv_fetch_ent(hash, sv, 0, 0);
1253 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1259 SP = firstrelem + (lastlelem - firstlelem);
1260 lelem = firstlelem + (relem - firstrelem);
1262 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1271 PMOP * const pm = cPMOP;
1272 REGEXP * rx = PM_GETRE(pm);
1273 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1274 SV * const rv = sv_newmortal();
1278 SvUPGRADE(rv, SVt_IV);
1279 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1280 loathe to use it here, but it seems to be the right fix. Or close.
1281 The key part appears to be that it's essential for pp_qr to return a new
1282 object (SV), which implies that there needs to be an effective way to
1283 generate a new SV from the existing SV that is pre-compiled in the
1285 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1288 cvp = &( ReANY((REGEXP *)SvRV(rv))->qr_anoncv);
1289 if ((cv = *cvp) && CvCLONE(*cvp)) {
1290 *cvp = cv_clone(cv);
1295 HV *const stash = gv_stashsv(pkg, GV_ADD);
1297 (void)sv_bless(rv, stash);
1300 if (RX_ISTAINTED(rx)) {
1302 SvTAINTED_on(SvRV(rv));
1317 U8 r_flags = REXEC_CHECKED;
1318 const char *truebase; /* Start of string */
1319 REGEXP *rx = PM_GETRE(pm);
1321 const I32 gimme = GIMME;
1324 const I32 oldsave = PL_savestack_ix;
1325 I32 update_minmatch = 1;
1326 I32 had_zerolen = 0;
1329 if (PL_op->op_flags & OPf_STACKED)
1331 else if (PL_op->op_private & OPpTARGET_MY)
1338 PUTBACK; /* EVAL blocks need stack_sp. */
1339 /* Skip get-magic if this is a qr// clone, because regcomp has
1341 s = ReANY(rx)->mother_re
1342 ? SvPV_nomg_const(TARG, len)
1343 : SvPV_const(TARG, len);
1345 DIE(aTHX_ "panic: pp_match");
1347 rxtainted = (RX_ISTAINTED(rx) ||
1348 (TAINT_get && (pm->op_pmflags & PMf_RETAINT)));
1351 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1353 /* PMdf_USED is set after a ?? matches once */
1356 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1358 pm->op_pmflags & PMf_USED
1361 DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
1364 if (gimme == G_ARRAY)
1371 /* empty pattern special-cased to use last successful pattern if
1372 possible, except for qr// */
1373 if (!ReANY(rx)->mother_re && !RX_PRELEN(rx)
1379 if (RX_MINLEN(rx) > (I32)len) {
1380 DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match\n"));
1386 /* XXXX What part of this is needed with true \G-support? */
1387 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1388 RX_OFFS(rx)[0].start = -1;
1389 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1390 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1391 if (mg && mg->mg_len >= 0) {
1392 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1393 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1394 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1395 r_flags |= REXEC_IGNOREPOS;
1396 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1397 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1400 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1401 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1402 update_minmatch = 0;
1408 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
1410 r_flags |= (REXEC_COPY_STR|REXEC_COPY_SKIP_PRE);
1411 /* in @a =~ /(.)/g, we iterate multiple times, but copy the buffer
1412 * only on the first iteration. Therefore we need to copy $' as well
1413 * as $&, to make the rest of the string available for captures in
1414 * subsequent iterations */
1415 if (! (global && gimme == G_ARRAY))
1416 r_flags |= REXEC_COPY_SKIP_POST;
1420 if (global && RX_OFFS(rx)[0].start != -1) {
1421 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1422 if ((s + RX_MINLEN(rx)) > strend || s < truebase) {
1423 DEBUG_r(PerlIO_printf(Perl_debug_log, "Regex match can't succeed, so not even tried\n"));
1426 if (update_minmatch++)
1427 minmatch = had_zerolen;
1429 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1430 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1431 /* FIXME - can PL_bostr be made const char *? */
1432 PL_bostr = (char *)truebase;
1433 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1437 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1439 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1440 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1443 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1444 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1448 if (dynpm->op_pmflags & PMf_ONCE) {
1450 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1452 dynpm->op_pmflags |= PMf_USED;
1458 RX_MATCH_TAINTED_on(rx);
1459 TAINT_IF(RX_MATCH_TAINTED(rx));
1460 if (gimme == G_ARRAY) {
1461 const I32 nparens = RX_NPARENS(rx);
1462 I32 i = (global && !nparens) ? 1 : 0;
1464 SPAGAIN; /* EVAL blocks could move the stack. */
1465 EXTEND(SP, nparens + i);
1466 EXTEND_MORTAL(nparens + i);
1467 for (i = !i; i <= nparens; i++) {
1468 PUSHs(sv_newmortal());
1469 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1470 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1471 s = RX_OFFS(rx)[i].start + truebase;
1472 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1473 len < 0 || len > strend - s)
1474 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1475 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1476 (long) i, (long) RX_OFFS(rx)[i].start,
1477 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1478 sv_setpvn(*SP, s, len);
1479 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1484 if (dynpm->op_pmflags & PMf_CONTINUE) {
1486 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1487 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1489 #ifdef PERL_OLD_COPY_ON_WRITE
1491 sv_force_normal_flags(TARG, 0);
1493 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1494 &PL_vtbl_mglob, NULL, 0);
1496 if (RX_OFFS(rx)[0].start != -1) {
1497 mg->mg_len = RX_OFFS(rx)[0].end;
1498 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1499 mg->mg_flags |= MGf_MINMATCH;
1501 mg->mg_flags &= ~MGf_MINMATCH;
1504 had_zerolen = (RX_OFFS(rx)[0].start != -1
1505 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1506 == (UV)RX_OFFS(rx)[0].end));
1507 PUTBACK; /* EVAL blocks may use stack */
1508 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1513 LEAVE_SCOPE(oldsave);
1519 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1520 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1524 #ifdef PERL_OLD_COPY_ON_WRITE
1526 sv_force_normal_flags(TARG, 0);
1528 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1529 &PL_vtbl_mglob, NULL, 0);
1531 if (RX_OFFS(rx)[0].start != -1) {
1532 mg->mg_len = RX_OFFS(rx)[0].end;
1533 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1534 mg->mg_flags |= MGf_MINMATCH;
1536 mg->mg_flags &= ~MGf_MINMATCH;
1539 LEAVE_SCOPE(oldsave);
1543 yup: /* Confirmed by INTUIT */
1545 RX_MATCH_TAINTED_on(rx);
1546 TAINT_IF(RX_MATCH_TAINTED(rx));
1548 if (dynpm->op_pmflags & PMf_ONCE) {
1550 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1552 dynpm->op_pmflags |= PMf_USED;
1555 if (RX_MATCH_COPIED(rx))
1556 Safefree(RX_SUBBEG(rx));
1557 RX_MATCH_COPIED_off(rx);
1558 RX_SUBBEG(rx) = NULL;
1560 /* FIXME - should rx->subbeg be const char *? */
1561 RX_SUBBEG(rx) = (char *) truebase;
1562 RX_SUBOFFSET(rx) = 0;
1563 RX_SUBCOFFSET(rx) = 0;
1564 RX_OFFS(rx)[0].start = s - truebase;
1565 if (RX_MATCH_UTF8(rx)) {
1566 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1567 RX_OFFS(rx)[0].end = t - truebase;
1570 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1572 RX_SUBLEN(rx) = strend - truebase;
1575 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1577 #ifdef PERL_OLD_COPY_ON_WRITE
1578 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1580 PerlIO_printf(Perl_debug_log,
1581 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1582 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1585 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1587 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1588 assert (SvPOKp(RX_SAVED_COPY(rx)));
1593 RX_SUBBEG(rx) = savepvn(t, strend - t);
1594 #ifdef PERL_OLD_COPY_ON_WRITE
1595 RX_SAVED_COPY(rx) = NULL;
1598 RX_SUBLEN(rx) = strend - t;
1599 RX_SUBOFFSET(rx) = 0;
1600 RX_SUBCOFFSET(rx) = 0;
1601 RX_MATCH_COPIED_on(rx);
1602 off = RX_OFFS(rx)[0].start = s - t;
1603 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1605 else { /* startp/endp are used by @- @+. */
1606 RX_OFFS(rx)[0].start = s - truebase;
1607 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1609 /* match via INTUIT shouldn't have any captures. Let @-, @+, $^N know */
1610 assert(!RX_NPARENS(rx));
1611 RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0;
1612 LEAVE_SCOPE(oldsave);
1617 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1618 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1619 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1624 LEAVE_SCOPE(oldsave);
1625 if (gimme == G_ARRAY)
1631 Perl_do_readline(pTHX)
1633 dVAR; dSP; dTARGETSTACKED;
1638 IO * const io = GvIO(PL_last_in_gv);
1639 const I32 type = PL_op->op_type;
1640 const I32 gimme = GIMME_V;
1643 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1645 Perl_tied_method(aTHX_ "READLINE", SP, MUTABLE_SV(io), mg, gimme, 0);
1646 if (gimme == G_SCALAR) {
1648 SvSetSV_nosteal(TARG, TOPs);
1658 if (IoFLAGS(io) & IOf_ARGV) {
1659 if (IoFLAGS(io) & IOf_START) {
1661 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1662 IoFLAGS(io) &= ~IOf_START;
1663 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1664 SvTAINTED_off(GvSVn(PL_last_in_gv)); /* previous tainting irrelevant */
1665 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1666 SvSETMAGIC(GvSV(PL_last_in_gv));
1671 fp = nextargv(PL_last_in_gv);
1672 if (!fp) { /* Note: fp != IoIFP(io) */
1673 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1676 else if (type == OP_GLOB)
1677 fp = Perl_start_glob(aTHX_ POPs, io);
1679 else if (type == OP_GLOB)
1681 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1682 report_wrongway_fh(PL_last_in_gv, '>');
1686 if ((!io || !(IoFLAGS(io) & IOf_START))
1687 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1689 if (type == OP_GLOB)
1690 Perl_ck_warner_d(aTHX_ packWARN(WARN_GLOB),
1691 "glob failed (can't start child: %s)",
1694 report_evil_fh(PL_last_in_gv);
1696 if (gimme == G_SCALAR) {
1697 /* undef TARG, and push that undefined value */
1698 if (type != OP_RCATLINE) {
1699 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1707 if (gimme == G_SCALAR) {
1709 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1712 if (type == OP_RCATLINE)
1713 SvPV_force_nomg_nolen(sv);
1717 else if (isGV_with_GP(sv)) {
1718 SvPV_force_nomg_nolen(sv);
1720 SvUPGRADE(sv, SVt_PV);
1721 tmplen = SvLEN(sv); /* remember if already alloced */
1722 if (!tmplen && !SvREADONLY(sv) && !SvIsCOW(sv)) {
1723 /* try short-buffering it. Please update t/op/readline.t
1724 * if you change the growth length.
1729 if (type == OP_RCATLINE && SvOK(sv)) {
1731 SvPV_force_nomg_nolen(sv);
1737 sv = sv_2mortal(newSV(80));
1741 /* This should not be marked tainted if the fp is marked clean */
1742 #define MAYBE_TAINT_LINE(io, sv) \
1743 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1748 /* delay EOF state for a snarfed empty file */
1749 #define SNARF_EOF(gimme,rs,io,sv) \
1750 (gimme != G_SCALAR || SvCUR(sv) \
1751 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1755 if (!sv_gets(sv, fp, offset)
1757 || SNARF_EOF(gimme, PL_rs, io, sv)
1758 || PerlIO_error(fp)))
1760 PerlIO_clearerr(fp);
1761 if (IoFLAGS(io) & IOf_ARGV) {
1762 fp = nextargv(PL_last_in_gv);
1765 (void)do_close(PL_last_in_gv, FALSE);
1767 else if (type == OP_GLOB) {
1768 if (!do_close(PL_last_in_gv, FALSE)) {
1769 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1770 "glob failed (child exited with status %d%s)",
1771 (int)(STATUS_CURRENT >> 8),
1772 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1775 if (gimme == G_SCALAR) {
1776 if (type != OP_RCATLINE) {
1777 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1783 MAYBE_TAINT_LINE(io, sv);
1786 MAYBE_TAINT_LINE(io, sv);
1788 IoFLAGS(io) |= IOf_NOLINE;
1792 if (type == OP_GLOB) {
1795 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1796 char * const tmps = SvEND(sv) - 1;
1797 if (*tmps == *SvPVX_const(PL_rs)) {
1799 SvCUR_set(sv, SvCUR(sv) - 1);
1802 for (t1 = SvPVX_const(sv); *t1; t1++)
1803 if (!isALNUMC(*t1) &&
1804 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1806 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1807 (void)POPs; /* Unmatched wildcard? Chuck it... */
1810 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1811 if (ckWARN(WARN_UTF8)) {
1812 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1813 const STRLEN len = SvCUR(sv) - offset;
1816 if (!is_utf8_string_loc(s, len, &f))
1817 /* Emulate :encoding(utf8) warning in the same case. */
1818 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1819 "utf8 \"\\x%02X\" does not map to Unicode",
1820 f < (U8*)SvEND(sv) ? *f : 0);
1823 if (gimme == G_ARRAY) {
1824 if (SvLEN(sv) - SvCUR(sv) > 20) {
1825 SvPV_shrink_to_cur(sv);
1827 sv = sv_2mortal(newSV(80));
1830 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1831 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1832 const STRLEN new_len
1833 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1834 SvPV_renew(sv, new_len);
1845 SV * const keysv = POPs;
1846 HV * const hv = MUTABLE_HV(POPs);
1847 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1848 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1850 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1851 bool preeminent = TRUE;
1853 if (SvTYPE(hv) != SVt_PVHV)
1860 /* If we can determine whether the element exist,
1861 * Try to preserve the existenceness of a tied hash
1862 * element by using EXISTS and DELETE if possible.
1863 * Fallback to FETCH and STORE otherwise. */
1864 if (SvCANEXISTDELETE(hv))
1865 preeminent = hv_exists_ent(hv, keysv, 0);
1868 he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
1869 svp = he ? &HeVAL(he) : NULL;
1871 if (!svp || !*svp || *svp == &PL_sv_undef) {
1875 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1877 lv = sv_newmortal();
1878 sv_upgrade(lv, SVt_PVLV);
1880 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1881 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1882 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1888 if (HvNAME_get(hv) && isGV(*svp))
1889 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1890 else if (preeminent)
1891 save_helem_flags(hv, keysv, svp,
1892 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1894 SAVEHDELETE(hv, keysv);
1896 else if (PL_op->op_private & OPpDEREF) {
1897 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1901 sv = (svp && *svp ? *svp : &PL_sv_undef);
1902 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1903 * was to make C<local $tied{foo} = $tied{foo}> possible.
1904 * However, it seems no longer to be needed for that purpose, and
1905 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1906 * would loop endlessly since the pos magic is getting set on the
1907 * mortal copy and lost. However, the copy has the effect of
1908 * triggering the get magic, and losing it altogether made things like
1909 * c<$tied{foo};> in void context no longer do get magic, which some
1910 * code relied on. Also, delayed triggering of magic on @+ and friends
1911 * meant the original regex may be out of scope by now. So as a
1912 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1913 * being called too many times). */
1914 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1928 cx = &cxstack[cxstack_ix];
1929 itersvp = CxITERVAR(cx);
1931 switch (CxTYPE(cx)) {
1933 case CXt_LOOP_LAZYSV: /* string increment */
1935 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1936 SV *end = cx->blk_loop.state_u.lazysv.end;
1937 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1938 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1940 const char *max = SvPV_const(end, maxlen);
1941 if (SvNIOK(cur) || SvCUR(cur) > maxlen)
1945 if (SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv)) {
1946 /* safe to reuse old SV */
1947 sv_setsv(oldsv, cur);
1951 /* we need a fresh SV every time so that loop body sees a
1952 * completely new SV for closures/references to work as
1954 *itersvp = newSVsv(cur);
1955 SvREFCNT_dec(oldsv);
1957 if (strEQ(SvPVX_const(cur), max))
1958 sv_setiv(cur, 0); /* terminate next time */
1964 case CXt_LOOP_LAZYIV: /* integer increment */
1966 IV cur = cx->blk_loop.state_u.lazyiv.cur;
1967 if (cur > cx->blk_loop.state_u.lazyiv.end)
1971 /* don't risk potential race */
1972 if (SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv)) {
1973 /* safe to reuse old SV */
1974 sv_setiv(oldsv, cur);
1978 /* we need a fresh SV every time so that loop body sees a
1979 * completely new SV for closures/references to work as they
1981 *itersvp = newSViv(cur);
1982 SvREFCNT_dec(oldsv);
1985 if (cur == IV_MAX) {
1986 /* Handle end of range at IV_MAX */
1987 cx->blk_loop.state_u.lazyiv.end = IV_MIN;
1989 ++cx->blk_loop.state_u.lazyiv.cur;
1993 case CXt_LOOP_FOR: /* iterate array */
1996 AV *av = cx->blk_loop.state_u.ary.ary;
1998 bool av_is_stack = FALSE;
2005 if (PL_op->op_private & OPpITER_REVERSED) {
2006 ix = --cx->blk_loop.state_u.ary.ix;
2007 if (ix <= (av_is_stack ? cx->blk_loop.resetsp : -1))
2011 ix = ++cx->blk_loop.state_u.ary.ix;
2012 if (ix > (av_is_stack ? cx->blk_oldsp : AvFILL(av)))
2016 if (SvMAGICAL(av) || AvREIFY(av)) {
2017 SV * const * const svp = av_fetch(av, ix, FALSE);
2018 sv = svp ? *svp : NULL;
2021 sv = AvARRAY(av)[ix];
2025 if (SvIS_FREED(sv)) {
2027 Perl_croak(aTHX_ "Use of freed value in iteration");
2030 SvREFCNT_inc_simple_void_NN(sv);
2035 if (!av_is_stack && sv == &PL_sv_undef) {
2036 SV *lv = newSV_type(SVt_PVLV);
2038 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2039 LvTARG(lv) = SvREFCNT_inc_simple(av);
2041 LvTARGLEN(lv) = (STRLEN)UV_MAX;
2047 SvREFCNT_dec(oldsv);
2052 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
2058 A description of how taint works in pattern matching and substitution.
2060 This is all conditional on NO_TAINT_SUPPORT not being defined. Under
2061 NO_TAINT_SUPPORT, taint-related operations should become no-ops.
2063 While the pattern is being assembled/concatenated and then compiled,
2064 PL_tainted will get set (via TAINT_set) if any component of the pattern
2065 is tainted, e.g. /.*$tainted/. At the end of pattern compilation,
2066 the RXf_TAINTED flag is set on the pattern if PL_tainted is set (via
2069 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
2070 the pattern is marked as tainted. This means that subsequent usage, such
2071 as /x$r/, will set PL_tainted using TAINT_set, and thus RXf_TAINTED,
2072 on the new pattern too.
2074 During execution of a pattern, locale-variant ops such as ALNUML set the
2075 local flag RF_tainted. At the end of execution, the engine sets the
2076 RXf_TAINTED_SEEN on the pattern if RF_tainted got set, or clears it
2079 In addition, RXf_TAINTED_SEEN is used post-execution by the get magic code
2080 of $1 et al to indicate whether the returned value should be tainted.
2081 It is the responsibility of the caller of the pattern (i.e. pp_match,
2082 pp_subst etc) to set this flag for any other circumstances where $1 needs
2085 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
2087 There are three possible sources of taint
2089 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
2090 * the replacement string (or expression under /e)
2092 There are four destinations of taint and they are affected by the sources
2093 according to the rules below:
2095 * the return value (not including /r):
2096 tainted by the source string and pattern, but only for the
2097 number-of-iterations case; boolean returns aren't tainted;
2098 * the modified string (or modified copy under /r):
2099 tainted by the source string, pattern, and replacement strings;
2101 tainted by the pattern, and under 'use re "taint"', by the source
2103 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2104 should always be unset before executing subsequent code.
2106 The overall action of pp_subst is:
2108 * at the start, set bits in rxtainted indicating the taint status of
2109 the various sources.
2111 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2112 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2113 pattern has subsequently become tainted via locale ops.
2115 * If control is being passed to pp_substcont to execute a /e block,
2116 save rxtainted in the CXt_SUBST block, for future use by
2119 * Whenever control is being returned to perl code (either by falling
2120 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2121 use the flag bits in rxtainted to make all the appropriate types of
2122 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2123 et al will appear tainted.
2125 pp_match is just a simpler version of the above.
2144 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2145 See "how taint works" above */
2148 REGEXP *rx = PM_GETRE(pm);
2150 int force_on_match = 0;
2151 const I32 oldsave = PL_savestack_ix;
2153 bool doutf8 = FALSE; /* whether replacement is in utf8 */
2154 #ifdef PERL_OLD_COPY_ON_WRITE
2158 /* known replacement string? */
2159 SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2163 if (PL_op->op_flags & OPf_STACKED)
2165 else if (PL_op->op_private & OPpTARGET_MY)
2172 SvGETMAGIC(TARG); /* must come before cow check */
2173 #ifdef PERL_OLD_COPY_ON_WRITE
2174 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2175 because they make integers such as 256 "false". */
2176 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2179 sv_force_normal_flags(TARG,0);
2181 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2182 #ifdef PERL_OLD_COPY_ON_WRITE
2185 && (SvREADONLY(TARG)
2186 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2187 || SvTYPE(TARG) > SVt_PVLV)
2188 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2189 Perl_croak_no_modify();
2192 s = SvPV_nomg(TARG, len);
2193 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV || SvVOK(TARG))
2196 /* only replace once? */
2197 once = !(rpm->op_pmflags & PMf_GLOBAL);
2199 /* See "how taint works" above */
2202 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2203 | (RX_ISTAINTED(rx) ? SUBST_TAINT_PAT : 0)
2204 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2205 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2206 ? SUBST_TAINT_BOOLRET : 0));
2210 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2214 DIE(aTHX_ "panic: pp_subst, pm=%p, s=%p", pm, s);
2217 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2218 maxiters = 2 * slen + 10; /* We can match twice at each
2219 position, once with zero-length,
2220 second time with non-zero. */
2222 if (!RX_PRELEN(rx) && PL_curpm
2223 && !ReANY(rx)->mother_re) {
2228 r_flags = ( RX_NPARENS(rx)
2230 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
2236 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2238 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2242 /* How to do it in subst? */
2243 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2245 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY))
2250 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2251 r_flags | REXEC_CHECKED))
2255 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2256 LEAVE_SCOPE(oldsave);
2262 /* known replacement string? */
2264 /* replacement needing upgrading? */
2265 if (DO_UTF8(TARG) && !doutf8) {
2266 nsv = sv_newmortal();
2269 sv_recode_to_utf8(nsv, PL_encoding);
2271 sv_utf8_upgrade(nsv);
2272 c = SvPV_const(nsv, clen);
2276 c = SvPV_const(dstr, clen);
2277 doutf8 = DO_UTF8(dstr);
2280 if (SvTAINTED(dstr))
2281 rxtainted |= SUBST_TAINT_REPL;
2288 /* can do inplace substitution? */
2290 #ifdef PERL_OLD_COPY_ON_WRITE
2293 && (I32)clen <= RX_MINLENRET(rx)
2294 && (once || !(r_flags & REXEC_COPY_STR))
2295 && !(RX_EXTFLAGS(rx) & (RXf_LOOKBEHIND_SEEN|RXf_MODIFIES_VARS))
2296 && (!doutf8 || SvUTF8(TARG))
2297 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2300 #ifdef PERL_OLD_COPY_ON_WRITE
2301 if (SvIsCOW(TARG)) {
2302 assert (!force_on_match);
2306 if (force_on_match) {
2308 s = SvPV_force_nomg(TARG, len);
2313 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2314 rxtainted |= SUBST_TAINT_PAT;
2315 m = orig + RX_OFFS(rx)[0].start;
2316 d = orig + RX_OFFS(rx)[0].end;
2318 if (m - s > strend - d) { /* faster to shorten from end */
2320 Copy(c, m, clen, char);
2325 Move(d, m, i, char);
2329 SvCUR_set(TARG, m - s);
2331 else if ((i = m - s)) { /* faster from front */
2334 Move(s, d - i, i, char);
2337 Copy(c, m, clen, char);
2342 Copy(c, d, clen, char);
2352 if (iters++ > maxiters)
2353 DIE(aTHX_ "Substitution loop");
2354 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2355 rxtainted |= SUBST_TAINT_PAT;
2356 m = RX_OFFS(rx)[0].start + orig;
2359 Move(s, d, i, char);
2363 Copy(c, d, clen, char);
2366 s = RX_OFFS(rx)[0].end + orig;
2367 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2369 /* don't match same null twice */
2370 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2373 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2374 Move(s, d, i+1, char); /* include the NUL */
2383 if (force_on_match) {
2385 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2386 /* I feel that it should be possible to avoid this mortal copy
2387 given that the code below copies into a new destination.
2388 However, I suspect it isn't worth the complexity of
2389 unravelling the C<goto force_it> for the small number of
2390 cases where it would be viable to drop into the copy code. */
2391 TARG = sv_2mortal(newSVsv(TARG));
2393 s = SvPV_force_nomg(TARG, len);
2396 #ifdef PERL_OLD_COPY_ON_WRITE
2399 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2400 rxtainted |= SUBST_TAINT_PAT;
2402 dstr = newSVpvn_flags(m, s-m, SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2406 /* note that a whole bunch of local vars are saved here for
2407 * use by pp_substcont: here's a list of them in case you're
2408 * searching for places in this sub that uses a particular var:
2409 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2410 * s m strend rx once */
2412 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2414 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2417 if (iters++ > maxiters)
2418 DIE(aTHX_ "Substitution loop");
2419 if (RX_MATCH_TAINTED(rx))
2420 rxtainted |= SUBST_TAINT_PAT;
2421 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2424 assert(RX_SUBOFFSET(rx) == 0);
2425 orig = RX_SUBBEG(rx);
2427 strend = s + (strend - m);
2429 m = RX_OFFS(rx)[0].start + orig;
2430 sv_catpvn_nomg_maybeutf8(dstr, s, m - s, DO_UTF8(TARG));
2431 s = RX_OFFS(rx)[0].end + orig;
2433 /* replacement already stringified */
2435 sv_catpvn_nomg_maybeutf8(dstr, c, clen, doutf8);
2440 if (!nsv) nsv = sv_newmortal();
2441 sv_copypv(nsv, repl);
2442 if (!DO_UTF8(nsv)) sv_recode_to_utf8(nsv, PL_encoding);
2443 sv_catsv(dstr, nsv);
2445 else sv_catsv(dstr, repl);
2446 if (SvTAINTED(repl))
2447 rxtainted |= SUBST_TAINT_REPL;
2451 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2452 TARG, NULL, r_flags));
2453 sv_catpvn_nomg_maybeutf8(dstr, s, strend - s, DO_UTF8(TARG));
2455 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2456 /* From here on down we're using the copy, and leaving the original
2462 #ifdef PERL_OLD_COPY_ON_WRITE
2463 /* The match may make the string COW. If so, brilliant, because
2464 that's just saved us one malloc, copy and free - the regexp has
2465 donated the old buffer, and we malloc an entirely new one, rather
2466 than the regexp malloc()ing a buffer and copying our original,
2467 only for us to throw it away here during the substitution. */
2468 if (SvIsCOW(TARG)) {
2469 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2475 SvPV_set(TARG, SvPVX(dstr));
2476 SvCUR_set(TARG, SvCUR(dstr));
2477 SvLEN_set(TARG, SvLEN(dstr));
2478 SvFLAGS(TARG) |= SvUTF8(dstr);
2479 SvPV_set(dstr, NULL);
2486 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2487 (void)SvPOK_only_UTF8(TARG);
2490 /* See "how taint works" above */
2492 if ((rxtainted & SUBST_TAINT_PAT) ||
2493 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2494 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2496 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2498 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2499 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2501 SvTAINTED_on(TOPs); /* taint return value */
2503 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2505 /* needed for mg_set below */
2507 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
2511 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2513 LEAVE_SCOPE(oldsave);
2522 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2523 ++*PL_markstack_ptr;
2525 LEAVE_with_name("grep_item"); /* exit inner scope */
2528 if (PL_stack_base + *PL_markstack_ptr > SP) {
2530 const I32 gimme = GIMME_V;
2532 LEAVE_with_name("grep"); /* exit outer scope */
2533 (void)POPMARK; /* pop src */
2534 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2535 (void)POPMARK; /* pop dst */
2536 SP = PL_stack_base + POPMARK; /* pop original mark */
2537 if (gimme == G_SCALAR) {
2538 if (PL_op->op_private & OPpGREP_LEX) {
2539 SV* const sv = sv_newmortal();
2540 sv_setiv(sv, items);
2548 else if (gimme == G_ARRAY)
2555 ENTER_with_name("grep_item"); /* enter inner scope */
2558 src = PL_stack_base[*PL_markstack_ptr];
2560 if (PL_op->op_private & OPpGREP_LEX)
2561 PAD_SVl(PL_op->op_targ) = src;
2565 RETURNOP(cLOGOP->op_other);
2579 if (CxMULTICALL(&cxstack[cxstack_ix]))
2583 cxstack_ix++; /* temporarily protect top context */
2586 if (gimme == G_SCALAR) {
2589 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2590 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2591 && !SvMAGICAL(TOPs)) {
2592 *MARK = SvREFCNT_inc(TOPs);
2597 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2599 *MARK = sv_mortalcopy(sv);
2603 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2604 && !SvMAGICAL(TOPs)) {
2608 *MARK = sv_mortalcopy(TOPs);
2612 *MARK = &PL_sv_undef;
2616 else if (gimme == G_ARRAY) {
2617 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2618 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2619 || SvMAGICAL(*MARK)) {
2620 *MARK = sv_mortalcopy(*MARK);
2621 TAINT_NOT; /* Each item is independent */
2629 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2630 PL_curpm = newpm; /* ... and pop $1 et al */
2633 return cx->blk_sub.retop;
2643 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2646 DIE(aTHX_ "Not a CODE reference");
2647 switch (SvTYPE(sv)) {
2648 /* This is overwhelming the most common case: */
2651 if (!(cv = GvCVu((const GV *)sv))) {
2653 cv = sv_2cv(sv, &stash, &gv, 0);
2662 if(isGV_with_GP(sv)) goto we_have_a_glob;
2665 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2667 SP = PL_stack_base + POPMARK;
2675 sv = amagic_deref_call(sv, to_cv_amg);
2676 /* Don't SPAGAIN here. */
2683 DIE(aTHX_ PL_no_usym, "a subroutine");
2684 sym = SvPV_nomg_const(sv, len);
2685 if (PL_op->op_private & HINT_STRICT_REFS)
2686 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
2687 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2690 cv = MUTABLE_CV(SvRV(sv));
2691 if (SvTYPE(cv) == SVt_PVCV)
2696 DIE(aTHX_ "Not a CODE reference");
2697 /* This is the second most common case: */
2699 cv = MUTABLE_CV(sv);
2707 if (CvCLONE(cv) && ! CvCLONED(cv))
2708 DIE(aTHX_ "Closure prototype called");
2709 if (!CvROOT(cv) && !CvXSUB(cv)) {
2713 /* anonymous or undef'd function leaves us no recourse */
2714 if (CvANON(cv) || !(gv = CvGV(cv))) {
2716 DIE(aTHX_ "Undefined subroutine &%"HEKf" called",
2717 HEKfARG(CvNAME_HEK(cv)));
2718 DIE(aTHX_ "Undefined subroutine called");
2721 /* autoloaded stub? */
2722 if (cv != GvCV(gv)) {
2725 /* should call AUTOLOAD now? */
2728 if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2729 GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
2735 sub_name = sv_newmortal();
2736 gv_efullname3(sub_name, gv, NULL);
2737 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2746 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2747 Perl_get_db_sub(aTHX_ &sv, cv);
2749 PL_curcopdb = PL_curcop;
2751 /* check for lsub that handles lvalue subroutines */
2752 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2753 /* if lsub not found then fall back to DB::sub */
2754 if (!cv) cv = GvCV(PL_DBsub);
2756 cv = GvCV(PL_DBsub);
2759 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2760 DIE(aTHX_ "No DB::sub routine defined");
2763 if (!(CvISXSUB(cv))) {
2764 /* This path taken at least 75% of the time */
2766 I32 items = SP - MARK;
2767 PADLIST * const padlist = CvPADLIST(cv);
2768 PUSHBLOCK(cx, CXt_SUB, MARK);
2770 cx->blk_sub.retop = PL_op->op_next;
2772 if (CvDEPTH(cv) >= 2) {
2773 PERL_STACK_OVERFLOW_CHECK();
2774 pad_push(padlist, CvDEPTH(cv));
2777 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2779 AV *const av = MUTABLE_AV(PAD_SVl(0));
2781 /* @_ is normally not REAL--this should only ever
2782 * happen when DB::sub() calls things that modify @_ */
2787 cx->blk_sub.savearray = GvAV(PL_defgv);
2788 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2789 CX_CURPAD_SAVE(cx->blk_sub);
2790 cx->blk_sub.argarray = av;
2793 if (items > AvMAX(av) + 1) {
2794 SV **ary = AvALLOC(av);
2795 if (AvARRAY(av) != ary) {
2796 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2799 if (items > AvMAX(av) + 1) {
2800 AvMAX(av) = items - 1;
2801 Renew(ary,items,SV*);
2806 Copy(MARK,AvARRAY(av),items,SV*);
2807 AvFILLp(av) = items - 1;
2815 if ((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
2817 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2818 /* warning must come *after* we fully set up the context
2819 * stuff so that __WARN__ handlers can safely dounwind()
2822 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2823 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2824 sub_crush_depth(cv);
2825 RETURNOP(CvSTART(cv));
2828 I32 markix = TOPMARK;
2833 /* Need to copy @_ to stack. Alternative may be to
2834 * switch stack to @_, and copy return values
2835 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2836 AV * const av = GvAV(PL_defgv);
2837 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2840 /* Mark is at the end of the stack. */
2842 Copy(AvARRAY(av), SP + 1, items, SV*);
2847 /* We assume first XSUB in &DB::sub is the called one. */
2849 SAVEVPTR(PL_curcop);
2850 PL_curcop = PL_curcopdb;
2853 /* Do we need to open block here? XXXX */
2855 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2857 CvXSUB(cv)(aTHX_ cv);
2859 /* Enforce some sanity in scalar context. */
2860 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2861 if (markix > PL_stack_sp - PL_stack_base)
2862 *(PL_stack_base + markix) = &PL_sv_undef;
2864 *(PL_stack_base + markix) = *PL_stack_sp;
2865 PL_stack_sp = PL_stack_base + markix;
2873 Perl_sub_crush_depth(pTHX_ CV *cv)
2875 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2878 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2880 SV* const tmpstr = sv_newmortal();
2881 gv_efullname3(tmpstr, CvGV(cv), NULL);
2882 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2891 SV* const elemsv = POPs;
2892 IV elem = SvIV(elemsv);
2893 AV *const av = MUTABLE_AV(POPs);
2894 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2895 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2896 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2897 bool preeminent = TRUE;
2900 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2901 Perl_warner(aTHX_ packWARN(WARN_MISC),
2902 "Use of reference \"%"SVf"\" as array index",
2904 if (SvTYPE(av) != SVt_PVAV)
2911 /* If we can determine whether the element exist,
2912 * Try to preserve the existenceness of a tied array
2913 * element by using EXISTS and DELETE if possible.
2914 * Fallback to FETCH and STORE otherwise. */
2915 if (SvCANEXISTDELETE(av))
2916 preeminent = av_exists(av, elem);
2919 svp = av_fetch(av, elem, lval && !defer);
2921 #ifdef PERL_MALLOC_WRAP
2922 if (SvUOK(elemsv)) {
2923 const UV uv = SvUV(elemsv);
2924 elem = uv > IV_MAX ? IV_MAX : uv;
2926 else if (SvNOK(elemsv))
2927 elem = (IV)SvNV(elemsv);
2929 static const char oom_array_extend[] =
2930 "Out of memory during array extend"; /* Duplicated in av.c */
2931 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2934 if (!svp || *svp == &PL_sv_undef) {
2937 DIE(aTHX_ PL_no_aelem, elem);
2938 lv = sv_newmortal();
2939 sv_upgrade(lv, SVt_PVLV);
2941 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2942 LvTARG(lv) = SvREFCNT_inc_simple(av);
2943 LvTARGOFF(lv) = elem;
2950 save_aelem(av, elem, svp);
2952 SAVEADELETE(av, elem);
2954 else if (PL_op->op_private & OPpDEREF) {
2955 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
2959 sv = (svp ? *svp : &PL_sv_undef);
2960 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
2967 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2969 PERL_ARGS_ASSERT_VIVIFY_REF;
2974 Perl_croak_no_modify();
2975 prepare_SV_for_RV(sv);
2978 SvRV_set(sv, newSV(0));
2981 SvRV_set(sv, MUTABLE_SV(newAV()));
2984 SvRV_set(sv, MUTABLE_SV(newHV()));
2991 if (SvGMAGICAL(sv)) {
2992 /* copy the sv without magic to prevent magic from being
2994 SV* msv = sv_newmortal();
2995 sv_setsv_nomg(msv, sv);
3004 SV* const sv = TOPs;
3007 SV* const rsv = SvRV(sv);
3008 if (SvTYPE(rsv) == SVt_PVCV) {
3014 SETs(method_common(sv, NULL));
3021 SV* const sv = cSVOP_sv;
3022 U32 hash = SvSHARED_HASH(sv);
3024 XPUSHs(method_common(sv, &hash));
3029 S_method_common(pTHX_ SV* meth, U32* hashp)
3036 SV * const sv = PL_stack_base + TOPMARK == PL_stack_sp
3037 ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
3038 "package or object reference", SVfARG(meth)),
3040 : *(PL_stack_base + TOPMARK + 1);
3042 PERL_ARGS_ASSERT_METHOD_COMMON;
3046 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
3051 ob = MUTABLE_SV(SvRV(sv));
3052 else if (!SvOK(sv)) goto undefined;
3054 /* this isn't a reference */
3057 const char * const packname = SvPV_nomg_const(sv, packlen);
3058 const bool packname_is_utf8 = !!SvUTF8(sv);
3059 const HE* const he =
3060 (const HE *)hv_common(
3061 PL_stashcache, NULL, packname, packlen,
3062 packname_is_utf8 ? HVhek_UTF8 : 0, 0, NULL, 0
3066 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
3067 DEBUG_o(Perl_deb(aTHX_ "PL_stashcache hit %p for '%"SVf"'\n",
3072 if (!(iogv = gv_fetchpvn_flags(
3073 packname, packlen, SVf_UTF8 * packname_is_utf8, SVt_PVIO
3075 !(ob=MUTABLE_SV(GvIO(iogv))))
3077 /* this isn't the name of a filehandle either */
3080 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3081 "without a package or object reference",
3084 /* assume it's a package name */
3085 stash = gv_stashpvn(packname, packlen, packname_is_utf8 ? SVf_UTF8 : 0);
3089 SV* const ref = newSViv(PTR2IV(stash));
3090 (void)hv_store(PL_stashcache, packname,
3091 packname_is_utf8 ? -(I32)packlen : (I32)packlen, ref, 0);
3092 DEBUG_o(Perl_deb(aTHX_ "PL_stashcache caching %p for '%"SVf"'\n",
3097 /* it _is_ a filehandle name -- replace with a reference */
3098 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3101 /* if we got here, ob should be a reference or a glob */
3102 if (!ob || !(SvOBJECT(ob)
3103 || (SvTYPE(ob) == SVt_PVGV
3105 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3108 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3109 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3110 ? newSVpvs_flags("DOES", SVs_TEMP)
3114 stash = SvSTASH(ob);
3117 /* NOTE: stash may be null, hope hv_fetch_ent and
3118 gv_fetchmethod can cope (it seems they can) */
3120 /* shortcut for simple names */
3122 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3124 gv = MUTABLE_GV(HeVAL(he));
3125 if (isGV(gv) && GvCV(gv) &&
3126 (!GvCVGEN(gv) || GvCVGEN(gv)
3127 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3128 return MUTABLE_SV(GvCV(gv));
3132 gv = gv_fetchmethod_sv_flags(stash ? stash : MUTABLE_HV(packsv),
3133 meth, GV_AUTOLOAD | GV_CROAK);
3137 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3142 * c-indentation-style: bsd
3144 * indent-tabs-mode: nil
3147 * ex: set ts=8 sts=4 sw=4 et: