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 /* push the elements of av onto the stack.
310 * XXX Note that padav has similar code but without the mg_get().
311 * I suspect that the mg_get is no longer needed, but while padav
312 * differs, it can't share this function */
315 S_pushav(pTHX_ AV* const av)
318 const I32 maxarg = AvFILL(av) + 1;
320 if (SvRMAGICAL(av)) {
322 for (i=0; i < (U32)maxarg; i++) {
323 SV ** const svp = av_fetch(av, i, FALSE);
324 /* See note in pp_helem, and bug id #27839 */
326 ? SvGMAGICAL(*svp) ? (mg_get(*svp), *svp) : *svp
331 Copy(AvARRAY(av), SP+1, maxarg, SV*);
338 /* ($lex1,@lex2,...) or my ($lex1,@lex2,...) */
343 PADOFFSET base = PL_op->op_targ;
344 int count = (int)(PL_op->op_private) & OPpPADRANGE_COUNTMASK;
346 if (PL_op->op_flags & OPf_SPECIAL) {
347 /* fake the RHS of my ($x,$y,..) = @_ */
349 S_pushav(aTHX_ GvAVn(PL_defgv));
353 /* note, this is only skipped for compile-time-known void cxt */
354 if ((PL_op->op_flags & OPf_WANT) != OPf_WANT_VOID) {
357 for (i = 0; i <count; i++)
358 *++SP = PAD_SV(base+i);
360 if (PL_op->op_private & OPpLVAL_INTRO) {
361 SV **svp = &(PAD_SVl(base));
362 const UV payload = (UV)(
363 (base << (OPpPADRANGE_COUNTSHIFT + SAVE_TIGHT_SHIFT))
364 | (count << SAVE_TIGHT_SHIFT)
365 | SAVEt_CLEARPADRANGE);
366 assert(OPpPADRANGE_COUNTMASK + 1 == (1 <<OPpPADRANGE_COUNTSHIFT));
367 assert((payload >> (OPpPADRANGE_COUNTSHIFT+SAVE_TIGHT_SHIFT)) == base);
371 for (i = 0; i <count; i++)
372 SvPADSTALE_off(*svp++); /* mark lexical as active */
383 OP * const op = PL_op;
384 /* access PL_curpad once */
385 SV ** const padentry = &(PAD_SVl(op->op_targ));
390 PUTBACK; /* no pop/push after this, TOPs ok */
392 if (op->op_flags & OPf_MOD) {
393 if (op->op_private & OPpLVAL_INTRO)
394 if (!(op->op_private & OPpPAD_STATE))
395 save_clearsv(padentry);
396 if (op->op_private & OPpDEREF) {
397 /* TOPs arg is TARG, but TOPs (SP) rmvs a var across save_clearsv */
398 TOPs = vivify_ref(TOPs, op->op_private & OPpDEREF);
411 tryAMAGICunTARGETlist(iter_amg, 0, 0);
412 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
414 else PL_last_in_gv = PL_argvgv, PL_stack_sp--;
415 if (!isGV_with_GP(PL_last_in_gv)) {
416 if (SvROK(PL_last_in_gv) && isGV_with_GP(SvRV(PL_last_in_gv)))
417 PL_last_in_gv = MUTABLE_GV(SvRV(PL_last_in_gv));
420 XPUSHs(MUTABLE_SV(PL_last_in_gv));
423 PL_last_in_gv = MUTABLE_GV(*PL_stack_sp--);
426 return do_readline();
434 tryAMAGICbin_MG(eq_amg, AMGf_set|AMGf_numeric);
438 (SvIOK_notUV(left) && SvIOK_notUV(right))
439 ? (SvIVX(left) == SvIVX(right))
440 : ( do_ncmp(left, right) == 0)
449 PL_op->op_type == OP_PREINC || PL_op->op_type == OP_I_PREINC;
450 if (SvTYPE(TOPs) >= SVt_PVAV || (isGV_with_GP(TOPs) && !SvFAKE(TOPs)))
451 Perl_croak_no_modify();
452 if (!SvREADONLY(TOPs) && !SvGMAGICAL(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
453 && SvIVX(TOPs) != (inc ? IV_MAX : IV_MIN))
455 SvIV_set(TOPs, SvIVX(TOPs) + (inc ? 1 : -1));
456 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
458 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
459 if (inc) sv_inc(TOPs);
472 if (PL_op->op_type == OP_OR)
474 RETURNOP(cLOGOP->op_other);
483 const int op_type = PL_op->op_type;
484 const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
489 if (!sv || !SvANY(sv)) {
490 if (op_type == OP_DOR)
492 RETURNOP(cLOGOP->op_other);
498 if (!sv || !SvANY(sv))
503 switch (SvTYPE(sv)) {
505 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
509 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
513 if (CvROOT(sv) || CvXSUB(sv))
526 if(op_type == OP_DOR)
528 RETURNOP(cLOGOP->op_other);
530 /* assuming OP_DEFINED */
538 dVAR; dSP; dATARGET; bool useleft; SV *svl, *svr;
539 tryAMAGICbin_MG(add_amg, AMGf_assign|AMGf_numeric);
543 useleft = USE_LEFT(svl);
544 #ifdef PERL_PRESERVE_IVUV
545 /* We must see if we can perform the addition with integers if possible,
546 as the integer code detects overflow while the NV code doesn't.
547 If either argument hasn't had a numeric conversion yet attempt to get
548 the IV. It's important to do this now, rather than just assuming that
549 it's not IOK as a PV of "9223372036854775806" may not take well to NV
550 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
551 integer in case the second argument is IV=9223372036854775806
552 We can (now) rely on sv_2iv to do the right thing, only setting the
553 public IOK flag if the value in the NV (or PV) slot is truly integer.
555 A side effect is that this also aggressively prefers integer maths over
556 fp maths for integer values.
558 How to detect overflow?
560 C 99 section 6.2.6.1 says
562 The range of nonnegative values of a signed integer type is a subrange
563 of the corresponding unsigned integer type, and the representation of
564 the same value in each type is the same. A computation involving
565 unsigned operands can never overflow, because a result that cannot be
566 represented by the resulting unsigned integer type is reduced modulo
567 the number that is one greater than the largest value that can be
568 represented by the resulting type.
572 which I read as "unsigned ints wrap."
574 signed integer overflow seems to be classed as "exception condition"
576 If an exceptional condition occurs during the evaluation of an
577 expression (that is, if the result is not mathematically defined or not
578 in the range of representable values for its type), the behavior is
581 (6.5, the 5th paragraph)
583 I had assumed that on 2s complement machines signed arithmetic would
584 wrap, hence coded pp_add and pp_subtract on the assumption that
585 everything perl builds on would be happy. After much wailing and
586 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
587 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
588 unsigned code below is actually shorter than the old code. :-)
591 if (SvIV_please_nomg(svr)) {
592 /* Unless the left argument is integer in range we are going to have to
593 use NV maths. Hence only attempt to coerce the right argument if
594 we know the left is integer. */
602 /* left operand is undef, treat as zero. + 0 is identity,
603 Could SETi or SETu right now, but space optimise by not adding
604 lots of code to speed up what is probably a rarish case. */
606 /* Left operand is defined, so is it IV? */
607 if (SvIV_please_nomg(svl)) {
608 if ((auvok = SvUOK(svl)))
611 const IV aiv = SvIVX(svl);
614 auvok = 1; /* Now acting as a sign flag. */
615 } else { /* 2s complement assumption for IV_MIN */
623 bool result_good = 0;
626 bool buvok = SvUOK(svr);
631 const IV biv = SvIVX(svr);
638 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
639 else "IV" now, independent of how it came in.
640 if a, b represents positive, A, B negative, a maps to -A etc
645 all UV maths. negate result if A negative.
646 add if signs same, subtract if signs differ. */
652 /* Must get smaller */
658 /* result really should be -(auv-buv). as its negation
659 of true value, need to swap our result flag */
676 if (result <= (UV)IV_MIN)
679 /* result valid, but out of range for IV. */
684 } /* Overflow, drop through to NVs. */
689 NV value = SvNV_nomg(svr);
692 /* left operand is undef, treat as zero. + 0.0 is identity. */
696 SETn( value + SvNV_nomg(svl) );
704 AV * const av = PL_op->op_type == OP_AELEMFAST_LEX
705 ? MUTABLE_AV(PAD_SV(PL_op->op_targ)) : GvAVn(cGVOP_gv);
706 const U32 lval = PL_op->op_flags & OPf_MOD;
707 SV** const svp = av_fetch(av, PL_op->op_private, lval);
708 SV *sv = (svp ? *svp : &PL_sv_undef);
710 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
718 dVAR; dSP; dMARK; dTARGET;
720 do_join(TARG, *MARK, MARK, SP);
731 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
732 * will be enough to hold an OP*.
734 SV* const sv = sv_newmortal();
735 sv_upgrade(sv, SVt_PVLV);
737 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
740 XPUSHs(MUTABLE_SV(PL_op));
745 /* Oversized hot code. */
749 dVAR; dSP; dMARK; dORIGMARK;
753 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
757 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
760 if (MARK == ORIGMARK) {
761 /* If using default handle then we need to make space to
762 * pass object as 1st arg, so move other args up ...
766 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
769 return Perl_tied_method(aTHX_ "PRINT", mark - 1, MUTABLE_SV(io),
771 (G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK
772 | (PL_op->op_type == OP_SAY
773 ? TIED_METHOD_SAY : 0)), sp - mark);
776 if ( gv && GvEGVx(gv) && (io = GvIO(GvEGV(gv)))
777 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
780 SETERRNO(EBADF,RMS_IFI);
783 else if (!(fp = IoOFP(io))) {
785 report_wrongway_fh(gv, '<');
788 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
792 SV * const ofs = GvSV(PL_ofsgv); /* $, */
794 if (ofs && (SvGMAGICAL(ofs) || SvOK(ofs))) {
796 if (!do_print(*MARK, fp))
800 /* don't use 'ofs' here - it may be invalidated by magic callbacks */
801 if (!do_print(GvSV(PL_ofsgv), fp)) {
810 if (!do_print(*MARK, fp))
818 if (PL_op->op_type == OP_SAY) {
819 if (PerlIO_write(fp, "\n", 1) == 0 || PerlIO_error(fp))
822 else if (PL_ors_sv && SvOK(PL_ors_sv))
823 if (!do_print(PL_ors_sv, fp)) /* $\ */
826 if (IoFLAGS(io) & IOf_FLUSH)
827 if (PerlIO_flush(fp) == EOF)
837 XPUSHs(&PL_sv_undef);
844 const I32 gimme = GIMME_V;
845 static const char an_array[] = "an ARRAY";
846 static const char a_hash[] = "a HASH";
847 const bool is_pp_rv2av = PL_op->op_type == OP_RV2AV;
848 const svtype type = is_pp_rv2av ? SVt_PVAV : SVt_PVHV;
853 sv = amagic_deref_call(sv, is_pp_rv2av ? to_av_amg : to_hv_amg);
856 if (SvTYPE(sv) != type)
857 /* diag_listed_as: Not an ARRAY reference */
858 DIE(aTHX_ "Not %s reference", is_pp_rv2av ? an_array : a_hash);
859 else if (PL_op->op_flags & OPf_MOD
860 && PL_op->op_private & OPpLVAL_INTRO)
861 Perl_croak(aTHX_ "%s", PL_no_localize_ref);
863 else if (SvTYPE(sv) != type) {
866 if (!isGV_with_GP(sv)) {
867 gv = Perl_softref2xv(aTHX_ sv, is_pp_rv2av ? an_array : a_hash,
875 sv = is_pp_rv2av ? MUTABLE_SV(GvAVn(gv)) : MUTABLE_SV(GvHVn(gv));
876 if (PL_op->op_private & OPpLVAL_INTRO)
877 sv = is_pp_rv2av ? MUTABLE_SV(save_ary(gv)) : MUTABLE_SV(save_hash(gv));
879 if (PL_op->op_flags & OPf_REF) {
883 else if (PL_op->op_private & OPpMAYBE_LVSUB) {
884 const I32 flags = is_lvalue_sub();
885 if (flags && !(flags & OPpENTERSUB_INARGS)) {
886 if (gimme != G_ARRAY)
887 goto croak_cant_return;
894 AV *const av = MUTABLE_AV(sv);
895 /* The guts of pp_rv2av, with no intending change to preserve history
896 (until such time as we get tools that can do blame annotation across
897 whitespace changes. */
898 if (gimme == G_ARRAY) {
904 else if (gimme == G_SCALAR) {
906 const I32 maxarg = AvFILL(av) + 1;
910 /* The guts of pp_rv2hv */
911 if (gimme == G_ARRAY) { /* array wanted */
913 return Perl_do_kv(aTHX);
915 else if ((PL_op->op_private & OPpTRUEBOOL
916 || ( PL_op->op_private & OPpMAYBE_TRUEBOOL
917 && block_gimme() == G_VOID ))
918 && (!SvRMAGICAL(sv) || !mg_find(sv, PERL_MAGIC_tied)))
919 SETs(HvUSEDKEYS(sv) ? &PL_sv_yes : sv_2mortal(newSViv(0)));
920 else if (gimme == G_SCALAR) {
922 TARG = Perl_hv_scalar(aTHX_ MUTABLE_HV(sv));
930 Perl_croak(aTHX_ "Can't return %s to lvalue scalar context",
931 is_pp_rv2av ? "array" : "hash");
936 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
940 PERL_ARGS_ASSERT_DO_ODDBALL;
946 if (ckWARN(WARN_MISC)) {
948 if (relem == firstrelem &&
950 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
951 SvTYPE(SvRV(*relem)) == SVt_PVHV))
953 err = "Reference found where even-sized list expected";
956 err = "Odd number of elements in hash assignment";
957 Perl_warner(aTHX_ packWARN(WARN_MISC), "%s", err);
961 didstore = hv_store_ent(hash,*relem,tmpstr,0);
962 if (SvMAGICAL(hash)) {
963 if (SvSMAGICAL(tmpstr))
975 SV **lastlelem = PL_stack_sp;
976 SV **lastrelem = PL_stack_base + POPMARK;
977 SV **firstrelem = PL_stack_base + POPMARK + 1;
978 SV **firstlelem = lastrelem + 1;
991 SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
993 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
996 /* If there's a common identifier on both sides we have to take
997 * special care that assigning the identifier on the left doesn't
998 * clobber a value on the right that's used later in the list.
999 * Don't bother if LHS is just an empty hash or array.
1002 if ( (PL_op->op_private & OPpASSIGN_COMMON)
1004 firstlelem != lastlelem
1005 || ! ((sv = *firstlelem))
1007 || ! (SvTYPE(sv) == SVt_PVAV || SvTYPE(sv) == SVt_PVHV)
1008 || (SvTYPE(sv) == SVt_PVAV && AvFILL((AV*)sv) != -1)
1009 || (SvTYPE(sv) == SVt_PVHV && HvUSEDKEYS((HV*)sv) != 0)
1012 EXTEND_MORTAL(lastrelem - firstrelem + 1);
1013 for (relem = firstrelem; relem <= lastrelem; relem++) {
1014 if ((sv = *relem)) {
1015 TAINT_NOT; /* Each item is independent */
1017 /* Dear TODO test in t/op/sort.t, I love you.
1018 (It's relying on a panic, not a "semi-panic" from newSVsv()
1019 and then an assertion failure below.) */
1020 if (SvIS_FREED(sv)) {
1021 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p",
1024 /* Not newSVsv(), as it does not allow copy-on-write,
1025 resulting in wasteful copies. We need a second copy of
1026 a temp here, hence the SV_NOSTEAL. */
1027 *relem = sv_mortalcopy_flags(sv,SV_GMAGIC|SV_DO_COW_SVSETSV
1038 while (lelem <= lastlelem) {
1039 TAINT_NOT; /* Each item stands on its own, taintwise. */
1041 switch (SvTYPE(sv)) {
1043 ary = MUTABLE_AV(sv);
1044 magic = SvMAGICAL(ary) != 0;
1046 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1048 av_extend(ary, lastrelem - relem);
1050 while (relem <= lastrelem) { /* gobble up all the rest */
1053 SvGETMAGIC(*relem); /* before newSV, in case it dies */
1055 sv_setsv_nomg(sv, *relem);
1057 didstore = av_store(ary,i++,sv);
1066 if (PL_delaymagic & DM_ARRAY_ISA)
1067 SvSETMAGIC(MUTABLE_SV(ary));
1070 case SVt_PVHV: { /* normal hash */
1072 SV** topelem = relem;
1074 hash = MUTABLE_HV(sv);
1075 magic = SvMAGICAL(hash) != 0;
1077 SAVEFREESV(SvREFCNT_inc_simple_NN(sv));
1079 firsthashrelem = relem;
1081 while (relem < lastrelem) { /* gobble up all the rest */
1083 sv = *relem ? *relem : &PL_sv_no;
1085 tmpstr = sv_newmortal();
1087 sv_setsv(tmpstr,*relem); /* value */
1089 if (gimme != G_VOID) {
1090 if (hv_exists_ent(hash, sv, 0))
1091 /* key overwrites an existing entry */
1094 if (gimme == G_ARRAY) {
1095 /* copy element back: possibly to an earlier
1096 * stack location if we encountered dups earlier */
1098 *topelem++ = tmpstr;
1101 didstore = hv_store_ent(hash,sv,tmpstr,0);
1102 if (didstore) SvREFCNT_inc_simple_void_NN(tmpstr);
1104 if (SvSMAGICAL(tmpstr))
1109 if (relem == lastrelem) {
1110 do_oddball(hash, relem, firstrelem);
1117 if (SvIMMORTAL(sv)) {
1118 if (relem <= lastrelem)
1122 if (relem <= lastrelem) {
1124 SvTEMP(sv) && !SvSMAGICAL(sv) && SvREFCNT(sv) == 1 &&
1125 (!isGV_with_GP(sv) || SvFAKE(sv)) && ckWARN(WARN_MISC)
1128 packWARN(WARN_MISC),
1129 "Useless assignment to a temporary"
1131 sv_setsv(sv, *relem);
1135 sv_setsv(sv, &PL_sv_undef);
1140 if (PL_delaymagic & ~DM_DELAY) {
1141 /* Will be used to set PL_tainting below */
1142 UV tmp_uid = PerlProc_getuid();
1143 UV tmp_euid = PerlProc_geteuid();
1144 UV tmp_gid = PerlProc_getgid();
1145 UV tmp_egid = PerlProc_getegid();
1147 if (PL_delaymagic & DM_UID) {
1148 #ifdef HAS_SETRESUID
1149 (void)setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1150 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
1153 # ifdef HAS_SETREUID
1154 (void)setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
1155 (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1);
1158 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1159 (void)setruid(PL_delaymagic_uid);
1160 PL_delaymagic &= ~DM_RUID;
1162 # endif /* HAS_SETRUID */
1164 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1165 (void)seteuid(PL_delaymagic_euid);
1166 PL_delaymagic &= ~DM_EUID;
1168 # endif /* HAS_SETEUID */
1169 if (PL_delaymagic & DM_UID) {
1170 if (PL_delaymagic_uid != PL_delaymagic_euid)
1171 DIE(aTHX_ "No setreuid available");
1172 (void)PerlProc_setuid(PL_delaymagic_uid);
1174 # endif /* HAS_SETREUID */
1175 #endif /* HAS_SETRESUID */
1176 tmp_uid = PerlProc_getuid();
1177 tmp_euid = PerlProc_geteuid();
1179 if (PL_delaymagic & DM_GID) {
1180 #ifdef HAS_SETRESGID
1181 (void)setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1182 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
1185 # ifdef HAS_SETREGID
1186 (void)setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
1187 (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1);
1190 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1191 (void)setrgid(PL_delaymagic_gid);
1192 PL_delaymagic &= ~DM_RGID;
1194 # endif /* HAS_SETRGID */
1196 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1197 (void)setegid(PL_delaymagic_egid);
1198 PL_delaymagic &= ~DM_EGID;
1200 # endif /* HAS_SETEGID */
1201 if (PL_delaymagic & DM_GID) {
1202 if (PL_delaymagic_gid != PL_delaymagic_egid)
1203 DIE(aTHX_ "No setregid available");
1204 (void)PerlProc_setgid(PL_delaymagic_gid);
1206 # endif /* HAS_SETREGID */
1207 #endif /* HAS_SETRESGID */
1208 tmp_gid = PerlProc_getgid();
1209 tmp_egid = PerlProc_getegid();
1211 TAINTING_set( TAINTING_get | (tmp_uid && (tmp_euid != tmp_uid || tmp_egid != tmp_gid)) );
1215 if (gimme == G_VOID)
1216 SP = firstrelem - 1;
1217 else if (gimme == G_SCALAR) {
1220 SETi(lastrelem - firstrelem + 1 - duplicates);
1227 /* at this point we have removed the duplicate key/value
1228 * pairs from the stack, but the remaining values may be
1229 * wrong; i.e. with (a 1 a 2 b 3) on the stack we've removed
1230 * the (a 2), but the stack now probably contains
1231 * (a <freed> b 3), because { hv_save(a,1); hv_save(a,2) }
1232 * obliterates the earlier key. So refresh all values. */
1233 lastrelem -= duplicates;
1234 relem = firsthashrelem;
1235 while (relem < lastrelem) {
1238 he = hv_fetch_ent(hash, sv, 0, 0);
1239 *relem++ = (he ? HeVAL(he) : &PL_sv_undef);
1245 SP = firstrelem + (lastlelem - firstlelem);
1246 lelem = firstlelem + (relem - firstrelem);
1248 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1257 PMOP * const pm = cPMOP;
1258 REGEXP * rx = PM_GETRE(pm);
1259 SV * const pkg = rx ? CALLREG_PACKAGE(rx) : NULL;
1260 SV * const rv = sv_newmortal();
1264 SvUPGRADE(rv, SVt_IV);
1265 /* For a subroutine describing itself as "This is a hacky workaround" I'm
1266 loathe to use it here, but it seems to be the right fix. Or close.
1267 The key part appears to be that it's essential for pp_qr to return a new
1268 object (SV), which implies that there needs to be an effective way to
1269 generate a new SV from the existing SV that is pre-compiled in the
1271 SvRV_set(rv, MUTABLE_SV(reg_temp_copy(NULL, rx)));
1274 cvp = &( ReANY((REGEXP *)SvRV(rv))->qr_anoncv);
1275 if ((cv = *cvp) && CvCLONE(*cvp)) {
1276 *cvp = cv_clone(cv);
1281 HV *const stash = gv_stashsv(pkg, GV_ADD);
1283 (void)sv_bless(rv, stash);
1286 if (RX_ISTAINTED(rx)) {
1288 SvTAINTED_on(SvRV(rv));
1303 U8 r_flags = REXEC_CHECKED;
1304 const char *truebase; /* Start of string */
1305 REGEXP *rx = PM_GETRE(pm);
1307 const I32 gimme = GIMME;
1310 const I32 oldsave = PL_savestack_ix;
1311 I32 update_minmatch = 1;
1312 I32 had_zerolen = 0;
1315 if (PL_op->op_flags & OPf_STACKED)
1317 else if (PL_op->op_private & OPpTARGET_MY)
1324 PUTBACK; /* EVAL blocks need stack_sp. */
1325 /* Skip get-magic if this is a qr// clone, because regcomp has
1327 s = ReANY(rx)->mother_re
1328 ? SvPV_nomg_const(TARG, len)
1329 : SvPV_const(TARG, len);
1331 DIE(aTHX_ "panic: pp_match");
1333 rxtainted = (RX_ISTAINTED(rx) ||
1334 (TAINT_get && (pm->op_pmflags & PMf_RETAINT)));
1337 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1339 /* PMdf_USED is set after a ?? matches once */
1342 SvREADONLY(PL_regex_pad[pm->op_pmoffset])
1344 pm->op_pmflags & PMf_USED
1347 DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
1350 if (gimme == G_ARRAY)
1357 /* empty pattern special-cased to use last successful pattern if
1358 possible, except for qr// */
1359 if (!ReANY(rx)->mother_re && !RX_PRELEN(rx)
1365 if (RX_MINLEN(rx) > (I32)len) {
1366 DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match\n"));
1372 /* XXXX What part of this is needed with true \G-support? */
1373 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1374 RX_OFFS(rx)[0].start = -1;
1375 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1376 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1377 if (mg && mg->mg_len >= 0) {
1378 if (!(RX_EXTFLAGS(rx) & RXf_GPOS_SEEN))
1379 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1380 else if (RX_EXTFLAGS(rx) & RXf_ANCH_GPOS) {
1381 r_flags |= REXEC_IGNOREPOS;
1382 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1383 } else if (RX_EXTFLAGS(rx) & RXf_GPOS_FLOAT)
1386 RX_OFFS(rx)[0].end = RX_OFFS(rx)[0].start = mg->mg_len;
1387 minmatch = (mg->mg_flags & MGf_MINMATCH) ? RX_GOFS(rx) + 1 : 0;
1388 update_minmatch = 0;
1394 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
1396 r_flags |= (REXEC_COPY_STR|REXEC_COPY_SKIP_PRE);
1397 /* in @a =~ /(.)/g, we iterate multiple times, but copy the buffer
1398 * only on the first iteration. Therefore we need to copy $' as well
1399 * as $&, to make the rest of the string available for captures in
1400 * subsequent iterations */
1401 if (! (global && gimme == G_ARRAY))
1402 r_flags |= REXEC_COPY_SKIP_POST;
1406 if (global && RX_OFFS(rx)[0].start != -1) {
1407 t = s = RX_OFFS(rx)[0].end + truebase - RX_GOFS(rx);
1408 if ((s + RX_MINLEN(rx)) > strend || s < truebase) {
1409 DEBUG_r(PerlIO_printf(Perl_debug_log, "Regex match can't succeed, so not even tried\n"));
1412 if (update_minmatch++)
1413 minmatch = had_zerolen;
1415 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT &&
1416 DO_UTF8(TARG) == (RX_UTF8(rx) != 0)) {
1417 /* FIXME - can PL_bostr be made const char *? */
1418 PL_bostr = (char *)truebase;
1419 s = CALLREG_INTUIT_START(rx, TARG, (char *)s, (char *)strend, r_flags, NULL);
1423 if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
1425 && !(RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY)
1426 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1429 if (!CALLREGEXEC(rx, (char*)s, (char *)strend, (char*)truebase,
1430 minmatch, TARG, NUM2PTR(void*, gpos), r_flags))
1434 if (dynpm->op_pmflags & PMf_ONCE) {
1436 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1438 dynpm->op_pmflags |= PMf_USED;
1444 RX_MATCH_TAINTED_on(rx);
1445 TAINT_IF(RX_MATCH_TAINTED(rx));
1446 if (gimme == G_ARRAY) {
1447 const I32 nparens = RX_NPARENS(rx);
1448 I32 i = (global && !nparens) ? 1 : 0;
1450 SPAGAIN; /* EVAL blocks could move the stack. */
1451 EXTEND(SP, nparens + i);
1452 EXTEND_MORTAL(nparens + i);
1453 for (i = !i; i <= nparens; i++) {
1454 PUSHs(sv_newmortal());
1455 if ((RX_OFFS(rx)[i].start != -1) && RX_OFFS(rx)[i].end != -1 ) {
1456 const I32 len = RX_OFFS(rx)[i].end - RX_OFFS(rx)[i].start;
1457 s = RX_OFFS(rx)[i].start + truebase;
1458 if (RX_OFFS(rx)[i].end < 0 || RX_OFFS(rx)[i].start < 0 ||
1459 len < 0 || len > strend - s)
1460 DIE(aTHX_ "panic: pp_match start/end pointers, i=%ld, "
1461 "start=%ld, end=%ld, s=%p, strend=%p, len=%"UVuf,
1462 (long) i, (long) RX_OFFS(rx)[i].start,
1463 (long)RX_OFFS(rx)[i].end, s, strend, (UV) len);
1464 sv_setpvn(*SP, s, len);
1465 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1470 if (dynpm->op_pmflags & PMf_CONTINUE) {
1472 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1473 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1475 #ifdef PERL_OLD_COPY_ON_WRITE
1477 sv_force_normal_flags(TARG, 0);
1479 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1480 &PL_vtbl_mglob, NULL, 0);
1482 if (RX_OFFS(rx)[0].start != -1) {
1483 mg->mg_len = RX_OFFS(rx)[0].end;
1484 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1485 mg->mg_flags |= MGf_MINMATCH;
1487 mg->mg_flags &= ~MGf_MINMATCH;
1490 had_zerolen = (RX_OFFS(rx)[0].start != -1
1491 && (RX_OFFS(rx)[0].start + RX_GOFS(rx)
1492 == (UV)RX_OFFS(rx)[0].end));
1493 PUTBACK; /* EVAL blocks may use stack */
1494 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1499 LEAVE_SCOPE(oldsave);
1505 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1506 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1510 #ifdef PERL_OLD_COPY_ON_WRITE
1512 sv_force_normal_flags(TARG, 0);
1514 mg = sv_magicext(TARG, NULL, PERL_MAGIC_regex_global,
1515 &PL_vtbl_mglob, NULL, 0);
1517 if (RX_OFFS(rx)[0].start != -1) {
1518 mg->mg_len = RX_OFFS(rx)[0].end;
1519 if (RX_OFFS(rx)[0].start + RX_GOFS(rx) == (UV)RX_OFFS(rx)[0].end)
1520 mg->mg_flags |= MGf_MINMATCH;
1522 mg->mg_flags &= ~MGf_MINMATCH;
1525 LEAVE_SCOPE(oldsave);
1529 yup: /* Confirmed by INTUIT */
1531 RX_MATCH_TAINTED_on(rx);
1532 TAINT_IF(RX_MATCH_TAINTED(rx));
1534 if (dynpm->op_pmflags & PMf_ONCE) {
1536 SvREADONLY_on(PL_regex_pad[dynpm->op_pmoffset]);
1538 dynpm->op_pmflags |= PMf_USED;
1541 if (RX_MATCH_COPIED(rx))
1542 Safefree(RX_SUBBEG(rx));
1543 RX_MATCH_COPIED_off(rx);
1544 RX_SUBBEG(rx) = NULL;
1546 /* FIXME - should rx->subbeg be const char *? */
1547 RX_SUBBEG(rx) = (char *) truebase;
1548 RX_SUBOFFSET(rx) = 0;
1549 RX_SUBCOFFSET(rx) = 0;
1550 RX_OFFS(rx)[0].start = s - truebase;
1551 if (RX_MATCH_UTF8(rx)) {
1552 char * const t = (char*)utf8_hop((U8*)s, RX_MINLENRET(rx));
1553 RX_OFFS(rx)[0].end = t - truebase;
1556 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1558 RX_SUBLEN(rx) = strend - truebase;
1561 if (PL_sawampersand || RX_EXTFLAGS(rx) & RXf_PMf_KEEPCOPY) {
1563 #ifdef PERL_OLD_COPY_ON_WRITE
1564 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1566 PerlIO_printf(Perl_debug_log,
1567 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1568 (int) SvTYPE(TARG), (void*)truebase, (void*)t,
1571 RX_SAVED_COPY(rx) = sv_setsv_cow(RX_SAVED_COPY(rx), TARG);
1573 = (char *) SvPVX_const(RX_SAVED_COPY(rx)) + (t - truebase);
1574 assert (SvPOKp(RX_SAVED_COPY(rx)));
1579 RX_SUBBEG(rx) = savepvn(t, strend - t);
1580 #ifdef PERL_OLD_COPY_ON_WRITE
1581 RX_SAVED_COPY(rx) = NULL;
1584 RX_SUBLEN(rx) = strend - t;
1585 RX_SUBOFFSET(rx) = 0;
1586 RX_SUBCOFFSET(rx) = 0;
1587 RX_MATCH_COPIED_on(rx);
1588 off = RX_OFFS(rx)[0].start = s - t;
1589 RX_OFFS(rx)[0].end = off + RX_MINLENRET(rx);
1591 else { /* startp/endp are used by @- @+. */
1592 RX_OFFS(rx)[0].start = s - truebase;
1593 RX_OFFS(rx)[0].end = s - truebase + RX_MINLENRET(rx);
1595 /* match via INTUIT shouldn't have any captures. Let @-, @+, $^N know */
1596 assert(!RX_NPARENS(rx));
1597 RX_LASTPAREN(rx) = RX_LASTCLOSEPAREN(rx) = 0;
1598 LEAVE_SCOPE(oldsave);
1603 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1604 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1605 MAGIC* const mg = mg_find(TARG, PERL_MAGIC_regex_global);
1610 LEAVE_SCOPE(oldsave);
1611 if (gimme == G_ARRAY)
1617 Perl_do_readline(pTHX)
1619 dVAR; dSP; dTARGETSTACKED;
1624 IO * const io = GvIO(PL_last_in_gv);
1625 const I32 type = PL_op->op_type;
1626 const I32 gimme = GIMME_V;
1629 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1631 Perl_tied_method(aTHX_ "READLINE", SP, MUTABLE_SV(io), mg, gimme, 0);
1632 if (gimme == G_SCALAR) {
1634 SvSetSV_nosteal(TARG, TOPs);
1644 if (IoFLAGS(io) & IOf_ARGV) {
1645 if (IoFLAGS(io) & IOf_START) {
1647 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1648 IoFLAGS(io) &= ~IOf_START;
1649 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,NULL);
1650 SvTAINTED_off(GvSVn(PL_last_in_gv)); /* previous tainting irrelevant */
1651 sv_setpvs(GvSVn(PL_last_in_gv), "-");
1652 SvSETMAGIC(GvSV(PL_last_in_gv));
1657 fp = nextargv(PL_last_in_gv);
1658 if (!fp) { /* Note: fp != IoIFP(io) */
1659 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1662 else if (type == OP_GLOB)
1663 fp = Perl_start_glob(aTHX_ POPs, io);
1665 else if (type == OP_GLOB)
1667 else if (IoTYPE(io) == IoTYPE_WRONLY) {
1668 report_wrongway_fh(PL_last_in_gv, '>');
1672 if ((!io || !(IoFLAGS(io) & IOf_START))
1673 && ckWARN2(WARN_GLOB, WARN_CLOSED))
1675 if (type == OP_GLOB)
1676 Perl_ck_warner_d(aTHX_ packWARN(WARN_GLOB),
1677 "glob failed (can't start child: %s)",
1680 report_evil_fh(PL_last_in_gv);
1682 if (gimme == G_SCALAR) {
1683 /* undef TARG, and push that undefined value */
1684 if (type != OP_RCATLINE) {
1685 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1693 if (gimme == G_SCALAR) {
1695 if (type == OP_RCATLINE && SvGMAGICAL(sv))
1698 if (type == OP_RCATLINE)
1699 SvPV_force_nomg_nolen(sv);
1703 else if (isGV_with_GP(sv)) {
1704 SvPV_force_nomg_nolen(sv);
1706 SvUPGRADE(sv, SVt_PV);
1707 tmplen = SvLEN(sv); /* remember if already alloced */
1708 if (!tmplen && !SvREADONLY(sv) && !SvIsCOW(sv)) {
1709 /* try short-buffering it. Please update t/op/readline.t
1710 * if you change the growth length.
1715 if (type == OP_RCATLINE && SvOK(sv)) {
1717 SvPV_force_nomg_nolen(sv);
1723 sv = sv_2mortal(newSV(80));
1727 /* This should not be marked tainted if the fp is marked clean */
1728 #define MAYBE_TAINT_LINE(io, sv) \
1729 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1734 /* delay EOF state for a snarfed empty file */
1735 #define SNARF_EOF(gimme,rs,io,sv) \
1736 (gimme != G_SCALAR || SvCUR(sv) \
1737 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1741 if (!sv_gets(sv, fp, offset)
1743 || SNARF_EOF(gimme, PL_rs, io, sv)
1744 || PerlIO_error(fp)))
1746 PerlIO_clearerr(fp);
1747 if (IoFLAGS(io) & IOf_ARGV) {
1748 fp = nextargv(PL_last_in_gv);
1751 (void)do_close(PL_last_in_gv, FALSE);
1753 else if (type == OP_GLOB) {
1754 if (!do_close(PL_last_in_gv, FALSE)) {
1755 Perl_ck_warner(aTHX_ packWARN(WARN_GLOB),
1756 "glob failed (child exited with status %d%s)",
1757 (int)(STATUS_CURRENT >> 8),
1758 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1761 if (gimme == G_SCALAR) {
1762 if (type != OP_RCATLINE) {
1763 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1769 MAYBE_TAINT_LINE(io, sv);
1772 MAYBE_TAINT_LINE(io, sv);
1774 IoFLAGS(io) |= IOf_NOLINE;
1778 if (type == OP_GLOB) {
1781 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1782 char * const tmps = SvEND(sv) - 1;
1783 if (*tmps == *SvPVX_const(PL_rs)) {
1785 SvCUR_set(sv, SvCUR(sv) - 1);
1788 for (t1 = SvPVX_const(sv); *t1; t1++)
1789 if (!isALNUMC(*t1) &&
1790 strchr("$&*(){}[]'\";\\|?<>~`", *t1))
1792 if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &PL_statbuf) < 0) {
1793 (void)POPs; /* Unmatched wildcard? Chuck it... */
1796 } else if (SvUTF8(sv)) { /* OP_READLINE, OP_RCATLINE */
1797 if (ckWARN(WARN_UTF8)) {
1798 const U8 * const s = (const U8*)SvPVX_const(sv) + offset;
1799 const STRLEN len = SvCUR(sv) - offset;
1802 if (!is_utf8_string_loc(s, len, &f))
1803 /* Emulate :encoding(utf8) warning in the same case. */
1804 Perl_warner(aTHX_ packWARN(WARN_UTF8),
1805 "utf8 \"\\x%02X\" does not map to Unicode",
1806 f < (U8*)SvEND(sv) ? *f : 0);
1809 if (gimme == G_ARRAY) {
1810 if (SvLEN(sv) - SvCUR(sv) > 20) {
1811 SvPV_shrink_to_cur(sv);
1813 sv = sv_2mortal(newSV(80));
1816 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1817 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1818 const STRLEN new_len
1819 = SvCUR(sv) < 60 ? 80 : SvCUR(sv)+40; /* allow some slop */
1820 SvPV_renew(sv, new_len);
1831 SV * const keysv = POPs;
1832 HV * const hv = MUTABLE_HV(POPs);
1833 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1834 const U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1836 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
1837 bool preeminent = TRUE;
1839 if (SvTYPE(hv) != SVt_PVHV)
1846 /* If we can determine whether the element exist,
1847 * Try to preserve the existenceness of a tied hash
1848 * element by using EXISTS and DELETE if possible.
1849 * Fallback to FETCH and STORE otherwise. */
1850 if (SvCANEXISTDELETE(hv))
1851 preeminent = hv_exists_ent(hv, keysv, 0);
1854 he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
1855 svp = he ? &HeVAL(he) : NULL;
1857 if (!svp || !*svp || *svp == &PL_sv_undef) {
1861 DIE(aTHX_ PL_no_helem_sv, SVfARG(keysv));
1863 lv = sv_newmortal();
1864 sv_upgrade(lv, SVt_PVLV);
1866 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, NULL, 0);
1867 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1868 LvTARG(lv) = SvREFCNT_inc_simple(hv);
1874 if (HvNAME_get(hv) && isGV(*svp))
1875 save_gp(MUTABLE_GV(*svp), !(PL_op->op_flags & OPf_SPECIAL));
1876 else if (preeminent)
1877 save_helem_flags(hv, keysv, svp,
1878 (PL_op->op_flags & OPf_SPECIAL) ? 0 : SAVEf_SETMAGIC);
1880 SAVEHDELETE(hv, keysv);
1882 else if (PL_op->op_private & OPpDEREF) {
1883 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
1887 sv = (svp && *svp ? *svp : &PL_sv_undef);
1888 /* Originally this did a conditional C<sv = sv_mortalcopy(sv)>; this
1889 * was to make C<local $tied{foo} = $tied{foo}> possible.
1890 * However, it seems no longer to be needed for that purpose, and
1891 * introduced a new bug: stuff like C<while ($hash{taintedval} =~ /.../g>
1892 * would loop endlessly since the pos magic is getting set on the
1893 * mortal copy and lost. However, the copy has the effect of
1894 * triggering the get magic, and losing it altogether made things like
1895 * c<$tied{foo};> in void context no longer do get magic, which some
1896 * code relied on. Also, delayed triggering of magic on @+ and friends
1897 * meant the original regex may be out of scope by now. So as a
1898 * compromise, do the get magic here. (The MGf_GSKIP flag will stop it
1899 * being called too many times). */
1900 if (!lval && SvRMAGICAL(hv) && SvGMAGICAL(sv))
1914 cx = &cxstack[cxstack_ix];
1915 itersvp = CxITERVAR(cx);
1917 switch (CxTYPE(cx)) {
1919 case CXt_LOOP_LAZYSV: /* string increment */
1921 SV* cur = cx->blk_loop.state_u.lazysv.cur;
1922 SV *end = cx->blk_loop.state_u.lazysv.end;
1923 /* If the maximum is !SvOK(), pp_enteriter substitutes PL_sv_no.
1924 It has SvPVX of "" and SvCUR of 0, which is what we want. */
1926 const char *max = SvPV_const(end, maxlen);
1927 if (SvNIOK(cur) || SvCUR(cur) > maxlen)
1931 if (SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv)) {
1932 /* safe to reuse old SV */
1933 sv_setsv(oldsv, cur);
1937 /* we need a fresh SV every time so that loop body sees a
1938 * completely new SV for closures/references to work as
1940 *itersvp = newSVsv(cur);
1941 SvREFCNT_dec(oldsv);
1943 if (strEQ(SvPVX_const(cur), max))
1944 sv_setiv(cur, 0); /* terminate next time */
1950 case CXt_LOOP_LAZYIV: /* integer increment */
1952 IV cur = cx->blk_loop.state_u.lazyiv.cur;
1953 if (cur > cx->blk_loop.state_u.lazyiv.end)
1957 /* don't risk potential race */
1958 if (SvREFCNT(oldsv) == 1 && !SvMAGICAL(oldsv)) {
1959 /* safe to reuse old SV */
1960 sv_setiv(oldsv, cur);
1964 /* we need a fresh SV every time so that loop body sees a
1965 * completely new SV for closures/references to work as they
1967 *itersvp = newSViv(cur);
1968 SvREFCNT_dec(oldsv);
1971 if (cur == IV_MAX) {
1972 /* Handle end of range at IV_MAX */
1973 cx->blk_loop.state_u.lazyiv.end = IV_MIN;
1975 ++cx->blk_loop.state_u.lazyiv.cur;
1979 case CXt_LOOP_FOR: /* iterate array */
1982 AV *av = cx->blk_loop.state_u.ary.ary;
1984 bool av_is_stack = FALSE;
1991 if (PL_op->op_private & OPpITER_REVERSED) {
1992 ix = --cx->blk_loop.state_u.ary.ix;
1993 if (ix <= (av_is_stack ? cx->blk_loop.resetsp : -1))
1997 ix = ++cx->blk_loop.state_u.ary.ix;
1998 if (ix > (av_is_stack ? cx->blk_oldsp : AvFILL(av)))
2002 if (SvMAGICAL(av) || AvREIFY(av)) {
2003 SV * const * const svp = av_fetch(av, ix, FALSE);
2004 sv = svp ? *svp : NULL;
2007 sv = AvARRAY(av)[ix];
2011 if (SvIS_FREED(sv)) {
2013 Perl_croak(aTHX_ "Use of freed value in iteration");
2016 SvREFCNT_inc_simple_void_NN(sv);
2021 if (!av_is_stack && sv == &PL_sv_undef) {
2022 SV *lv = newSV_type(SVt_PVLV);
2024 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2025 LvTARG(lv) = SvREFCNT_inc_simple(av);
2027 LvTARGLEN(lv) = (STRLEN)UV_MAX;
2033 SvREFCNT_dec(oldsv);
2038 DIE(aTHX_ "panic: pp_iter, type=%u", CxTYPE(cx));
2044 A description of how taint works in pattern matching and substitution.
2046 This is all conditional on NO_TAINT_SUPPORT not being defined. Under
2047 NO_TAINT_SUPPORT, taint-related operations should become no-ops.
2049 While the pattern is being assembled/concatenated and then compiled,
2050 PL_tainted will get set (via TAINT_set) if any component of the pattern
2051 is tainted, e.g. /.*$tainted/. At the end of pattern compilation,
2052 the RXf_TAINTED flag is set on the pattern if PL_tainted is set (via
2055 When the pattern is copied, e.g. $r = qr/..../, the SV holding the ref to
2056 the pattern is marked as tainted. This means that subsequent usage, such
2057 as /x$r/, will set PL_tainted using TAINT_set, and thus RXf_TAINTED,
2058 on the new pattern too.
2060 During execution of a pattern, locale-variant ops such as ALNUML set the
2061 local flag RF_tainted. At the end of execution, the engine sets the
2062 RXf_TAINTED_SEEN on the pattern if RF_tainted got set, or clears it
2065 In addition, RXf_TAINTED_SEEN is used post-execution by the get magic code
2066 of $1 et al to indicate whether the returned value should be tainted.
2067 It is the responsibility of the caller of the pattern (i.e. pp_match,
2068 pp_subst etc) to set this flag for any other circumstances where $1 needs
2071 The taint behaviour of pp_subst (and pp_substcont) is quite complex.
2073 There are three possible sources of taint
2075 * the pattern (both compile- and run-time, RXf_TAINTED / RXf_TAINTED_SEEN)
2076 * the replacement string (or expression under /e)
2078 There are four destinations of taint and they are affected by the sources
2079 according to the rules below:
2081 * the return value (not including /r):
2082 tainted by the source string and pattern, but only for the
2083 number-of-iterations case; boolean returns aren't tainted;
2084 * the modified string (or modified copy under /r):
2085 tainted by the source string, pattern, and replacement strings;
2087 tainted by the pattern, and under 'use re "taint"', by the source
2089 * PL_taint - i.e. whether subsequent code (e.g. in a /e block) is tainted:
2090 should always be unset before executing subsequent code.
2092 The overall action of pp_subst is:
2094 * at the start, set bits in rxtainted indicating the taint status of
2095 the various sources.
2097 * After each pattern execution, update the SUBST_TAINT_PAT bit in
2098 rxtainted if RXf_TAINTED_SEEN has been set, to indicate that the
2099 pattern has subsequently become tainted via locale ops.
2101 * If control is being passed to pp_substcont to execute a /e block,
2102 save rxtainted in the CXt_SUBST block, for future use by
2105 * Whenever control is being returned to perl code (either by falling
2106 off the "end" of pp_subst/pp_substcont, or by entering a /e block),
2107 use the flag bits in rxtainted to make all the appropriate types of
2108 destination taint visible; e.g. set RXf_TAINTED_SEEN so that $1
2109 et al will appear tainted.
2111 pp_match is just a simpler version of the above.
2130 U8 rxtainted = 0; /* holds various SUBST_TAINT_* flag bits.
2131 See "how taint works" above */
2134 REGEXP *rx = PM_GETRE(pm);
2136 int force_on_match = 0;
2137 const I32 oldsave = PL_savestack_ix;
2139 bool doutf8 = FALSE; /* whether replacement is in utf8 */
2140 #ifdef PERL_OLD_COPY_ON_WRITE
2144 /* known replacement string? */
2145 SV *dstr = (pm->op_pmflags & PMf_CONST) ? POPs : NULL;
2149 if (PL_op->op_flags & OPf_STACKED)
2151 else if (PL_op->op_private & OPpTARGET_MY)
2158 SvGETMAGIC(TARG); /* must come before cow check */
2159 #ifdef PERL_OLD_COPY_ON_WRITE
2160 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
2161 because they make integers such as 256 "false". */
2162 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
2165 sv_force_normal_flags(TARG,0);
2167 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)
2168 #ifdef PERL_OLD_COPY_ON_WRITE
2171 && (SvREADONLY(TARG)
2172 || ( ((SvTYPE(TARG) == SVt_PVGV && isGV_with_GP(TARG))
2173 || SvTYPE(TARG) > SVt_PVLV)
2174 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
2175 Perl_croak_no_modify();
2178 s = SvPV_nomg(TARG, len);
2179 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV || SvVOK(TARG))
2182 /* only replace once? */
2183 once = !(rpm->op_pmflags & PMf_GLOBAL);
2185 /* See "how taint works" above */
2188 (SvTAINTED(TARG) ? SUBST_TAINT_STR : 0)
2189 | (RX_ISTAINTED(rx) ? SUBST_TAINT_PAT : 0)
2190 | ((pm->op_pmflags & PMf_RETAINT) ? SUBST_TAINT_RETAINT : 0)
2191 | ((once && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2192 ? SUBST_TAINT_BOOLRET : 0));
2196 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
2200 DIE(aTHX_ "panic: pp_subst, pm=%p, s=%p", pm, s);
2203 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
2204 maxiters = 2 * slen + 10; /* We can match twice at each
2205 position, once with zero-length,
2206 second time with non-zero. */
2208 if (!RX_PRELEN(rx) && PL_curpm
2209 && !ReANY(rx)->mother_re) {
2214 r_flags = ( RX_NPARENS(rx)
2216 || (RX_EXTFLAGS(rx) & (RXf_EVAL_SEEN|RXf_PMf_KEEPCOPY))
2222 if (RX_EXTFLAGS(rx) & RXf_USE_INTUIT) {
2224 s = CALLREG_INTUIT_START(rx, TARG, s, strend, r_flags, NULL);
2228 /* How to do it in subst? */
2229 /* if ( (RX_EXTFLAGS(rx) & RXf_CHECK_ALL)
2231 && !(RX_EXTFLAGS(rx) & RXf_KEEPCOPY))
2236 if (!CALLREGEXEC(rx, s, strend, orig, 0, TARG, NULL,
2237 r_flags | REXEC_CHECKED))
2241 PUSHs(rpm->op_pmflags & PMf_NONDESTRUCT ? TARG : &PL_sv_no);
2242 LEAVE_SCOPE(oldsave);
2248 /* known replacement string? */
2250 /* replacement needing upgrading? */
2251 if (DO_UTF8(TARG) && !doutf8) {
2252 nsv = sv_newmortal();
2255 sv_recode_to_utf8(nsv, PL_encoding);
2257 sv_utf8_upgrade(nsv);
2258 c = SvPV_const(nsv, clen);
2262 c = SvPV_const(dstr, clen);
2263 doutf8 = DO_UTF8(dstr);
2266 if (SvTAINTED(dstr))
2267 rxtainted |= SUBST_TAINT_REPL;
2274 /* can do inplace substitution? */
2276 #ifdef PERL_OLD_COPY_ON_WRITE
2279 && (I32)clen <= RX_MINLENRET(rx)
2280 && (once || !(r_flags & REXEC_COPY_STR))
2281 && !(RX_EXTFLAGS(rx) & (RXf_LOOKBEHIND_SEEN|RXf_MODIFIES_VARS))
2282 && (!doutf8 || SvUTF8(TARG))
2283 && !(rpm->op_pmflags & PMf_NONDESTRUCT))
2286 #ifdef PERL_OLD_COPY_ON_WRITE
2287 if (SvIsCOW(TARG)) {
2288 assert (!force_on_match);
2292 if (force_on_match) {
2294 s = SvPV_force_nomg(TARG, len);
2299 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2300 rxtainted |= SUBST_TAINT_PAT;
2301 m = orig + RX_OFFS(rx)[0].start;
2302 d = orig + RX_OFFS(rx)[0].end;
2304 if (m - s > strend - d) { /* faster to shorten from end */
2306 Copy(c, m, clen, char);
2311 Move(d, m, i, char);
2315 SvCUR_set(TARG, m - s);
2317 else if ((i = m - s)) { /* faster from front */
2320 Move(s, d - i, i, char);
2323 Copy(c, m, clen, char);
2328 Copy(c, d, clen, char);
2338 if (iters++ > maxiters)
2339 DIE(aTHX_ "Substitution loop");
2340 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2341 rxtainted |= SUBST_TAINT_PAT;
2342 m = RX_OFFS(rx)[0].start + orig;
2345 Move(s, d, i, char);
2349 Copy(c, d, clen, char);
2352 s = RX_OFFS(rx)[0].end + orig;
2353 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2355 /* don't match same null twice */
2356 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2359 SvCUR_set(TARG, d - SvPVX_const(TARG) + i);
2360 Move(s, d, i+1, char); /* include the NUL */
2369 if (force_on_match) {
2371 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2372 /* I feel that it should be possible to avoid this mortal copy
2373 given that the code below copies into a new destination.
2374 However, I suspect it isn't worth the complexity of
2375 unravelling the C<goto force_it> for the small number of
2376 cases where it would be viable to drop into the copy code. */
2377 TARG = sv_2mortal(newSVsv(TARG));
2379 s = SvPV_force_nomg(TARG, len);
2382 #ifdef PERL_OLD_COPY_ON_WRITE
2385 if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
2386 rxtainted |= SUBST_TAINT_PAT;
2388 dstr = newSVpvn_flags(m, s-m, SVs_TEMP | (DO_UTF8(TARG) ? SVf_UTF8 : 0));
2392 /* note that a whole bunch of local vars are saved here for
2393 * use by pp_substcont: here's a list of them in case you're
2394 * searching for places in this sub that uses a particular var:
2395 * iters maxiters r_flags oldsave rxtainted orig dstr targ
2396 * s m strend rx once */
2398 RETURNOP(cPMOP->op_pmreplrootu.op_pmreplroot);
2400 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2403 if (iters++ > maxiters)
2404 DIE(aTHX_ "Substitution loop");
2405 if (RX_MATCH_TAINTED(rx))
2406 rxtainted |= SUBST_TAINT_PAT;
2407 if (RX_MATCH_COPIED(rx) && RX_SUBBEG(rx) != orig) {
2410 assert(RX_SUBOFFSET(rx) == 0);
2411 orig = RX_SUBBEG(rx);
2413 strend = s + (strend - m);
2415 m = RX_OFFS(rx)[0].start + orig;
2416 sv_catpvn_nomg_maybeutf8(dstr, s, m - s, DO_UTF8(TARG));
2417 s = RX_OFFS(rx)[0].end + orig;
2419 /* replacement already stringified */
2421 sv_catpvn_nomg_maybeutf8(dstr, c, clen, doutf8);
2426 if (!nsv) nsv = sv_newmortal();
2427 sv_copypv(nsv, repl);
2428 if (!DO_UTF8(nsv)) sv_recode_to_utf8(nsv, PL_encoding);
2429 sv_catsv(dstr, nsv);
2431 else sv_catsv(dstr, repl);
2432 if (SvTAINTED(repl))
2433 rxtainted |= SUBST_TAINT_REPL;
2437 } while (CALLREGEXEC(rx, s, strend, orig, s == m,
2438 TARG, NULL, r_flags));
2439 sv_catpvn_nomg_maybeutf8(dstr, s, strend - s, DO_UTF8(TARG));
2441 if (rpm->op_pmflags & PMf_NONDESTRUCT) {
2442 /* From here on down we're using the copy, and leaving the original
2448 #ifdef PERL_OLD_COPY_ON_WRITE
2449 /* The match may make the string COW. If so, brilliant, because
2450 that's just saved us one malloc, copy and free - the regexp has
2451 donated the old buffer, and we malloc an entirely new one, rather
2452 than the regexp malloc()ing a buffer and copying our original,
2453 only for us to throw it away here during the substitution. */
2454 if (SvIsCOW(TARG)) {
2455 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2461 SvPV_set(TARG, SvPVX(dstr));
2462 SvCUR_set(TARG, SvCUR(dstr));
2463 SvLEN_set(TARG, SvLEN(dstr));
2464 SvFLAGS(TARG) |= SvUTF8(dstr);
2465 SvPV_set(dstr, NULL);
2472 if (!(rpm->op_pmflags & PMf_NONDESTRUCT)) {
2473 (void)SvPOK_only_UTF8(TARG);
2476 /* See "how taint works" above */
2478 if ((rxtainted & SUBST_TAINT_PAT) ||
2479 ((rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_RETAINT)) ==
2480 (SUBST_TAINT_STR|SUBST_TAINT_RETAINT))
2482 (RX_MATCH_TAINTED_on(rx)); /* taint $1 et al */
2484 if (!(rxtainted & SUBST_TAINT_BOOLRET)
2485 && (rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT))
2487 SvTAINTED_on(TOPs); /* taint return value */
2489 SvTAINTED_off(TOPs); /* may have got tainted earlier */
2491 /* needed for mg_set below */
2493 cBOOL(rxtainted & (SUBST_TAINT_STR|SUBST_TAINT_PAT|SUBST_TAINT_REPL))
2497 SvSETMAGIC(TARG); /* PL_tainted must be correctly set for this mg_set */
2499 LEAVE_SCOPE(oldsave);
2508 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2509 ++*PL_markstack_ptr;
2511 LEAVE_with_name("grep_item"); /* exit inner scope */
2514 if (PL_stack_base + *PL_markstack_ptr > SP) {
2516 const I32 gimme = GIMME_V;
2518 LEAVE_with_name("grep"); /* exit outer scope */
2519 (void)POPMARK; /* pop src */
2520 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2521 (void)POPMARK; /* pop dst */
2522 SP = PL_stack_base + POPMARK; /* pop original mark */
2523 if (gimme == G_SCALAR) {
2524 if (PL_op->op_private & OPpGREP_LEX) {
2525 SV* const sv = sv_newmortal();
2526 sv_setiv(sv, items);
2534 else if (gimme == G_ARRAY)
2541 ENTER_with_name("grep_item"); /* enter inner scope */
2544 src = PL_stack_base[*PL_markstack_ptr];
2546 if (PL_op->op_private & OPpGREP_LEX)
2547 PAD_SVl(PL_op->op_targ) = src;
2551 RETURNOP(cLOGOP->op_other);
2565 if (CxMULTICALL(&cxstack[cxstack_ix]))
2569 cxstack_ix++; /* temporarily protect top context */
2572 if (gimme == G_SCALAR) {
2575 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2576 if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2577 && !SvMAGICAL(TOPs)) {
2578 *MARK = SvREFCNT_inc(TOPs);
2583 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2585 *MARK = sv_mortalcopy(sv);
2589 else if (SvTEMP(TOPs) && SvREFCNT(TOPs) == 1
2590 && !SvMAGICAL(TOPs)) {
2594 *MARK = sv_mortalcopy(TOPs);
2598 *MARK = &PL_sv_undef;
2602 else if (gimme == G_ARRAY) {
2603 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2604 if (!SvTEMP(*MARK) || SvREFCNT(*MARK) != 1
2605 || SvMAGICAL(*MARK)) {
2606 *MARK = sv_mortalcopy(*MARK);
2607 TAINT_NOT; /* Each item is independent */
2615 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2616 PL_curpm = newpm; /* ... and pop $1 et al */
2619 return cx->blk_sub.retop;
2629 const bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2632 DIE(aTHX_ "Not a CODE reference");
2633 switch (SvTYPE(sv)) {
2634 /* This is overwhelming the most common case: */
2637 if (!(cv = GvCVu((const GV *)sv))) {
2639 cv = sv_2cv(sv, &stash, &gv, 0);
2648 if(isGV_with_GP(sv)) goto we_have_a_glob;
2651 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2653 SP = PL_stack_base + POPMARK;
2661 sv = amagic_deref_call(sv, to_cv_amg);
2662 /* Don't SPAGAIN here. */
2669 DIE(aTHX_ PL_no_usym, "a subroutine");
2670 sym = SvPV_nomg_const(sv, len);
2671 if (PL_op->op_private & HINT_STRICT_REFS)
2672 DIE(aTHX_ "Can't use string (\"%" SVf32 "\"%s) as a subroutine ref while \"strict refs\" in use", sv, len>32 ? "..." : "");
2673 cv = get_cvn_flags(sym, len, GV_ADD|SvUTF8(sv));
2676 cv = MUTABLE_CV(SvRV(sv));
2677 if (SvTYPE(cv) == SVt_PVCV)
2682 DIE(aTHX_ "Not a CODE reference");
2683 /* This is the second most common case: */
2685 cv = MUTABLE_CV(sv);
2693 if (CvCLONE(cv) && ! CvCLONED(cv))
2694 DIE(aTHX_ "Closure prototype called");
2695 if (!CvROOT(cv) && !CvXSUB(cv)) {
2699 /* anonymous or undef'd function leaves us no recourse */
2700 if (CvANON(cv) || !(gv = CvGV(cv))) {
2702 DIE(aTHX_ "Undefined subroutine &%"HEKf" called",
2703 HEKfARG(CvNAME_HEK(cv)));
2704 DIE(aTHX_ "Undefined subroutine called");
2707 /* autoloaded stub? */
2708 if (cv != GvCV(gv)) {
2711 /* should call AUTOLOAD now? */
2714 if ((autogv = gv_autoload_pvn(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2715 GvNAMEUTF8(gv) ? SVf_UTF8 : 0)))
2721 sub_name = sv_newmortal();
2722 gv_efullname3(sub_name, gv, NULL);
2723 DIE(aTHX_ "Undefined subroutine &%"SVf" called", SVfARG(sub_name));
2732 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2733 Perl_get_db_sub(aTHX_ &sv, cv);
2735 PL_curcopdb = PL_curcop;
2737 /* check for lsub that handles lvalue subroutines */
2738 cv = GvCV(gv_HVadd(gv_fetchpvs("DB::lsub", GV_ADDMULTI, SVt_PVHV)));
2739 /* if lsub not found then fall back to DB::sub */
2740 if (!cv) cv = GvCV(PL_DBsub);
2742 cv = GvCV(PL_DBsub);
2745 if (!cv || (!CvXSUB(cv) && !CvSTART(cv)))
2746 DIE(aTHX_ "No DB::sub routine defined");
2749 if (!(CvISXSUB(cv))) {
2750 /* This path taken at least 75% of the time */
2752 I32 items = SP - MARK;
2753 PADLIST * const padlist = CvPADLIST(cv);
2754 PUSHBLOCK(cx, CXt_SUB, MARK);
2756 cx->blk_sub.retop = PL_op->op_next;
2758 if (CvDEPTH(cv) >= 2) {
2759 PERL_STACK_OVERFLOW_CHECK();
2760 pad_push(padlist, CvDEPTH(cv));
2763 PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
2765 AV *const av = MUTABLE_AV(PAD_SVl(0));
2767 /* @_ is normally not REAL--this should only ever
2768 * happen when DB::sub() calls things that modify @_ */
2773 cx->blk_sub.savearray = GvAV(PL_defgv);
2774 GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
2775 CX_CURPAD_SAVE(cx->blk_sub);
2776 cx->blk_sub.argarray = av;
2779 if (items > AvMAX(av) + 1) {
2780 SV **ary = AvALLOC(av);
2781 if (AvARRAY(av) != ary) {
2782 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2785 if (items > AvMAX(av) + 1) {
2786 AvMAX(av) = items - 1;
2787 Renew(ary,items,SV*);
2792 Copy(MARK,AvARRAY(av),items,SV*);
2793 AvFILLp(av) = items - 1;
2801 if ((cx->blk_u16 & OPpENTERSUB_LVAL_MASK) == OPpLVAL_INTRO &&
2803 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2804 /* warning must come *after* we fully set up the context
2805 * stuff so that __WARN__ handlers can safely dounwind()
2808 if (CvDEPTH(cv) == PERL_SUB_DEPTH_WARN && ckWARN(WARN_RECURSION)
2809 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2810 sub_crush_depth(cv);
2811 RETURNOP(CvSTART(cv));
2814 I32 markix = TOPMARK;
2819 /* Need to copy @_ to stack. Alternative may be to
2820 * switch stack to @_, and copy return values
2821 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2822 AV * const av = GvAV(PL_defgv);
2823 const I32 items = AvFILLp(av) + 1; /* @_ is not tieable */
2826 /* Mark is at the end of the stack. */
2828 Copy(AvARRAY(av), SP + 1, items, SV*);
2833 /* We assume first XSUB in &DB::sub is the called one. */
2835 SAVEVPTR(PL_curcop);
2836 PL_curcop = PL_curcopdb;
2839 /* Do we need to open block here? XXXX */
2841 /* CvXSUB(cv) must not be NULL because newXS() refuses NULL xsub address */
2843 CvXSUB(cv)(aTHX_ cv);
2845 /* Enforce some sanity in scalar context. */
2846 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2847 if (markix > PL_stack_sp - PL_stack_base)
2848 *(PL_stack_base + markix) = &PL_sv_undef;
2850 *(PL_stack_base + markix) = *PL_stack_sp;
2851 PL_stack_sp = PL_stack_base + markix;
2859 Perl_sub_crush_depth(pTHX_ CV *cv)
2861 PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH;
2864 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2866 SV* const tmpstr = sv_newmortal();
2867 gv_efullname3(tmpstr, CvGV(cv), NULL);
2868 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2877 SV* const elemsv = POPs;
2878 IV elem = SvIV(elemsv);
2879 AV *const av = MUTABLE_AV(POPs);
2880 const U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2881 const U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > av_len(av));
2882 const bool localizing = PL_op->op_private & OPpLVAL_INTRO;
2883 bool preeminent = TRUE;
2886 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2887 Perl_warner(aTHX_ packWARN(WARN_MISC),
2888 "Use of reference \"%"SVf"\" as array index",
2890 if (SvTYPE(av) != SVt_PVAV)
2897 /* If we can determine whether the element exist,
2898 * Try to preserve the existenceness of a tied array
2899 * element by using EXISTS and DELETE if possible.
2900 * Fallback to FETCH and STORE otherwise. */
2901 if (SvCANEXISTDELETE(av))
2902 preeminent = av_exists(av, elem);
2905 svp = av_fetch(av, elem, lval && !defer);
2907 #ifdef PERL_MALLOC_WRAP
2908 if (SvUOK(elemsv)) {
2909 const UV uv = SvUV(elemsv);
2910 elem = uv > IV_MAX ? IV_MAX : uv;
2912 else if (SvNOK(elemsv))
2913 elem = (IV)SvNV(elemsv);
2915 static const char oom_array_extend[] =
2916 "Out of memory during array extend"; /* Duplicated in av.c */
2917 MEM_WRAP_CHECK_1(elem,SV*,oom_array_extend);
2920 if (!svp || *svp == &PL_sv_undef) {
2923 DIE(aTHX_ PL_no_aelem, elem);
2924 lv = sv_newmortal();
2925 sv_upgrade(lv, SVt_PVLV);
2927 sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
2928 LvTARG(lv) = SvREFCNT_inc_simple(av);
2929 LvTARGOFF(lv) = elem;
2936 save_aelem(av, elem, svp);
2938 SAVEADELETE(av, elem);
2940 else if (PL_op->op_private & OPpDEREF) {
2941 PUSHs(vivify_ref(*svp, PL_op->op_private & OPpDEREF));
2945 sv = (svp ? *svp : &PL_sv_undef);
2946 if (!lval && SvRMAGICAL(av) && SvGMAGICAL(sv)) /* see note in pp_helem() */
2953 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2955 PERL_ARGS_ASSERT_VIVIFY_REF;
2960 Perl_croak_no_modify();
2961 prepare_SV_for_RV(sv);
2964 SvRV_set(sv, newSV(0));
2967 SvRV_set(sv, MUTABLE_SV(newAV()));
2970 SvRV_set(sv, MUTABLE_SV(newHV()));
2977 if (SvGMAGICAL(sv)) {
2978 /* copy the sv without magic to prevent magic from being
2980 SV* msv = sv_newmortal();
2981 sv_setsv_nomg(msv, sv);
2990 SV* const sv = TOPs;
2993 SV* const rsv = SvRV(sv);
2994 if (SvTYPE(rsv) == SVt_PVCV) {
3000 SETs(method_common(sv, NULL));
3007 SV* const sv = cSVOP_sv;
3008 U32 hash = SvSHARED_HASH(sv);
3010 XPUSHs(method_common(sv, &hash));
3015 S_method_common(pTHX_ SV* meth, U32* hashp)
3022 SV * const sv = PL_stack_base + TOPMARK == PL_stack_sp
3023 ? (Perl_croak(aTHX_ "Can't call method \"%"SVf"\" without a "
3024 "package or object reference", SVfARG(meth)),
3026 : *(PL_stack_base + TOPMARK + 1);
3028 PERL_ARGS_ASSERT_METHOD_COMMON;
3032 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on an undefined value",
3037 ob = MUTABLE_SV(SvRV(sv));
3038 else if (!SvOK(sv)) goto undefined;
3040 /* this isn't a reference */
3043 const char * const packname = SvPV_nomg_const(sv, packlen);
3044 const bool packname_is_utf8 = !!SvUTF8(sv);
3045 const HE* const he =
3046 (const HE *)hv_common(
3047 PL_stashcache, NULL, packname, packlen,
3048 packname_is_utf8 ? HVhek_UTF8 : 0, 0, NULL, 0
3052 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
3053 DEBUG_o(Perl_deb(aTHX_ "PL_stashcache hit %p for '%"SVf"'\n",
3058 if (!(iogv = gv_fetchpvn_flags(
3059 packname, packlen, SVf_UTF8 * packname_is_utf8, SVt_PVIO
3061 !(ob=MUTABLE_SV(GvIO(iogv))))
3063 /* this isn't the name of a filehandle either */
3066 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" "
3067 "without a package or object reference",
3070 /* assume it's a package name */
3071 stash = gv_stashpvn(packname, packlen, packname_is_utf8 ? SVf_UTF8 : 0);
3075 SV* const ref = newSViv(PTR2IV(stash));
3076 (void)hv_store(PL_stashcache, packname,
3077 packname_is_utf8 ? -(I32)packlen : (I32)packlen, ref, 0);
3078 DEBUG_o(Perl_deb(aTHX_ "PL_stashcache caching %p for '%"SVf"'\n",
3083 /* it _is_ a filehandle name -- replace with a reference */
3084 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV(MUTABLE_SV(iogv)));
3087 /* if we got here, ob should be a reference or a glob */
3088 if (!ob || !(SvOBJECT(ob)
3089 || (SvTYPE(ob) == SVt_PVGV
3091 && (ob = MUTABLE_SV(GvIO((const GV *)ob)))
3094 Perl_croak(aTHX_ "Can't call method \"%"SVf"\" on unblessed reference",
3095 SVfARG((SvSCREAM(meth) && strEQ(SvPV_nolen_const(meth),"isa"))
3096 ? newSVpvs_flags("DOES", SVs_TEMP)
3100 stash = SvSTASH(ob);
3103 /* NOTE: stash may be null, hope hv_fetch_ent and
3104 gv_fetchmethod can cope (it seems they can) */
3106 /* shortcut for simple names */
3108 const HE* const he = hv_fetch_ent(stash, meth, 0, *hashp);
3110 gv = MUTABLE_GV(HeVAL(he));
3111 if (isGV(gv) && GvCV(gv) &&
3112 (!GvCVGEN(gv) || GvCVGEN(gv)
3113 == (PL_sub_generation + HvMROMETA(stash)->cache_gen)))
3114 return MUTABLE_SV(GvCV(gv));
3118 gv = gv_fetchmethod_sv_flags(stash ? stash : MUTABLE_HV(packsv),
3119 meth, GV_AUTOLOAD | GV_CROAK);
3123 return isGV(gv) ? MUTABLE_SV(GvCV(gv)) : MUTABLE_SV(gv);
3128 * c-indentation-style: bsd
3130 * indent-tabs-mode: nil
3133 * ex: set ts=8 sts=4 sw=4 et: