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 * Sam sat on the ground and put his head in his hands. 'I wish I had never
13 * come here, and I don't want to see no more magic,' he said, and fell silent.
15 * [p.363 of _The Lord of the Rings_, II/vii: "The Mirror of Galadriel"]
19 =head1 Magical Functions
20 "Magic" is special data attached to SV structures in order to give them
21 "magical" properties. When any Perl code tries to read from, or assign to,
22 an SV marked as magical, it calls the 'get' or 'set' function associated
23 with that SV's magic. A get is called prior to reading an SV, in order to
24 give it a chance to update its internal value (get on $. writes the line
25 number of the last read filehandle into the SV's IV slot), while
26 set is called after an SV has been written to, in order to allow it to make
27 use of its changed value (set on $/ copies the SV's new value to the
28 PL_rs global variable).
30 Magic is implemented as a linked list of MAGIC structures attached to the
31 SV. Each MAGIC struct holds the type of the magic, a pointer to an array
32 of functions that implement the get(), set(), length() etc functions,
33 plus space for some flags and pointers. For example, a tied variable has
34 a MAGIC structure that contains a pointer to the object associated with the
45 #if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
51 #if defined(HAS_SETGROUPS)
58 # include <sys/pstat.h>
61 #ifdef HAS_PRCTL_SET_NAME
62 # include <sys/prctl.h>
65 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
66 Signal_t Perl_csighandler(int sig, siginfo_t *, void *);
68 Signal_t Perl_csighandler(int sig);
72 /* Missing protos on LynxOS */
73 void setruid(uid_t id);
74 void seteuid(uid_t id);
75 void setrgid(uid_t id);
76 void setegid(uid_t id);
80 * Pre-magic setup and post-magic takedown.
81 * Use the "DESTRUCTOR" scope cleanup to reinstate magic.
91 /* MGS is typedef'ed to struct magic_state in perl.h */
94 S_save_magic_flags(pTHX_ I32 mgs_ix, SV *sv, U32 flags)
100 PERL_ARGS_ASSERT_SAVE_MAGIC_FLAGS;
102 assert(SvMAGICAL(sv));
104 /* we shouldn't really be called here with RC==0, but it can sometimes
105 * happen via mg_clear() (which also shouldn't be called when RC==0,
106 * but it can happen). Handle this case gracefully(ish) by not RC++
107 * and thus avoiding the resultant double free */
108 if (SvREFCNT(sv) > 0) {
109 /* guard against sv getting freed midway through the mg clearing,
110 * by holding a private reference for the duration. */
111 SvREFCNT_inc_simple_void_NN(sv);
115 SAVEDESTRUCTOR_X(S_restore_magic, INT2PTR(void*, (IV)mgs_ix));
117 mgs = SSPTR(mgs_ix, MGS*);
119 mgs->mgs_magical = SvMAGICAL(sv);
120 mgs->mgs_readonly = SvREADONLY(sv) != 0;
121 mgs->mgs_ss_ix = PL_savestack_ix; /* points after the saved destructor */
122 mgs->mgs_bumped = bumped;
124 SvFLAGS(sv) &= ~flags;
128 #define save_magic(a,b) save_magic_flags(a,b,SVs_GMG|SVs_SMG|SVs_RMG)
131 =for apidoc mg_magical
133 Turns on the magical status of an SV. See C<sv_magic>.
139 Perl_mg_magical(pTHX_ SV *sv)
142 PERL_ARGS_ASSERT_MG_MAGICAL;
146 if ((mg = SvMAGIC(sv))) {
148 const MGVTBL* const vtbl = mg->mg_virtual;
150 if (vtbl->svt_get && !(mg->mg_flags & MGf_GSKIP))
157 } while ((mg = mg->mg_moremagic));
158 if (!(SvFLAGS(sv) & (SVs_GMG|SVs_SMG)))
166 Do magic before a value is retrieved from the SV. The type of SV must
167 be >= SVt_PVMG. See C<sv_magic>.
173 Perl_mg_get(pTHX_ SV *sv)
176 const I32 mgs_ix = SSNEW(sizeof(MGS));
179 MAGIC *newmg, *head, *cur, *mg;
181 PERL_ARGS_ASSERT_MG_GET;
183 if (PL_localizing == 1 && sv == DEFSV) return 0;
185 /* We must call svt_get(sv, mg) for each valid entry in the linked
186 list of magic. svt_get() may delete the current entry, add new
187 magic to the head of the list, or upgrade the SV. AMS 20010810 */
189 newmg = cur = head = mg = SvMAGIC(sv);
191 const MGVTBL * const vtbl = mg->mg_virtual;
192 MAGIC * const nextmg = mg->mg_moremagic; /* it may delete itself */
194 if (!(mg->mg_flags & MGf_GSKIP) && vtbl && vtbl->svt_get) {
196 /* taint's mg get is so dumb it doesn't need flag saving */
197 if (!saved && mg->mg_type != PERL_MAGIC_taint) {
198 save_magic(mgs_ix, sv);
202 vtbl->svt_get(aTHX_ sv, mg);
204 /* guard against magic having been deleted - eg FETCH calling
207 (SSPTR(mgs_ix, MGS *))->mgs_magical = 0; /* recalculate flags */
211 /* recalculate flags if this entry was deleted. */
212 if (mg->mg_flags & MGf_GSKIP)
213 (SSPTR(mgs_ix, MGS *))->mgs_magical = 0;
215 else if (vtbl == &PL_vtbl_utf8) {
216 /* get-magic can reallocate the PV */
217 magic_setutf8(sv, mg);
223 /* Have we finished with the new entries we saw? Start again
224 where we left off (unless there are more new entries). */
232 /* Were any new entries added? */
233 if (!have_new && (newmg = SvMAGIC(sv)) != head) {
237 (SSPTR(mgs_ix, MGS *))->mgs_magical = 0; /* recalculate flags */
242 restore_magic(INT2PTR(void *, (IV)mgs_ix));
250 Do magic after a value is assigned to the SV. See C<sv_magic>.
256 Perl_mg_set(pTHX_ SV *sv)
259 const I32 mgs_ix = SSNEW(sizeof(MGS));
263 PERL_ARGS_ASSERT_MG_SET;
265 if (PL_localizing == 2 && sv == DEFSV) return 0;
267 save_magic_flags(mgs_ix, sv, SVs_GMG|SVs_SMG); /* leave SVs_RMG on */
269 for (mg = SvMAGIC(sv); mg; mg = nextmg) {
270 const MGVTBL* vtbl = mg->mg_virtual;
271 nextmg = mg->mg_moremagic; /* it may delete itself */
272 if (mg->mg_flags & MGf_GSKIP) {
273 mg->mg_flags &= ~MGf_GSKIP; /* setting requires another read */
274 (SSPTR(mgs_ix, MGS*))->mgs_magical = 0;
276 if (PL_localizing == 2
277 && PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type))
279 if (vtbl && vtbl->svt_set)
280 vtbl->svt_set(aTHX_ sv, mg);
283 restore_magic(INT2PTR(void*, (IV)mgs_ix));
288 =for apidoc mg_length
290 Reports on the SV's length in bytes, calling length magic if available,
291 but does not set the UTF8 flag on the sv. It will fall back to 'get'
292 magic if there is no 'length' magic, but with no indication as to
293 whether it called 'get' magic. It assumes the sv is a PVMG or
294 higher. Use sv_len() instead.
300 Perl_mg_length(pTHX_ SV *sv)
306 PERL_ARGS_ASSERT_MG_LENGTH;
308 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
309 const MGVTBL * const vtbl = mg->mg_virtual;
310 if (vtbl && vtbl->svt_len) {
311 const I32 mgs_ix = SSNEW(sizeof(MGS));
312 save_magic(mgs_ix, sv);
313 /* omit MGf_GSKIP -- not changed here */
314 len = vtbl->svt_len(aTHX_ sv, mg);
315 restore_magic(INT2PTR(void*, (IV)mgs_ix));
320 (void)SvPV_const(sv, len);
325 Perl_mg_size(pTHX_ SV *sv)
329 PERL_ARGS_ASSERT_MG_SIZE;
331 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
332 const MGVTBL* const vtbl = mg->mg_virtual;
333 if (vtbl && vtbl->svt_len) {
334 const I32 mgs_ix = SSNEW(sizeof(MGS));
336 save_magic(mgs_ix, sv);
337 /* omit MGf_GSKIP -- not changed here */
338 len = vtbl->svt_len(aTHX_ sv, mg);
339 restore_magic(INT2PTR(void*, (IV)mgs_ix));
346 return AvFILLp((const AV *) sv); /* Fallback to non-tied array */
350 Perl_croak(aTHX_ "Size magic not implemented");
359 Clear something magical that the SV represents. See C<sv_magic>.
365 Perl_mg_clear(pTHX_ SV *sv)
367 const I32 mgs_ix = SSNEW(sizeof(MGS));
371 PERL_ARGS_ASSERT_MG_CLEAR;
373 save_magic(mgs_ix, sv);
375 for (mg = SvMAGIC(sv); mg; mg = nextmg) {
376 const MGVTBL* const vtbl = mg->mg_virtual;
377 /* omit GSKIP -- never set here */
379 nextmg = mg->mg_moremagic; /* it may delete itself */
381 if (vtbl && vtbl->svt_clear)
382 vtbl->svt_clear(aTHX_ sv, mg);
385 restore_magic(INT2PTR(void*, (IV)mgs_ix));
390 S_mg_findext_flags(pTHX_ const SV *sv, int type, const MGVTBL *vtbl, U32 flags)
399 assert(!(SvTYPE(sv) == SVt_PVAV && AvPAD_NAMELIST(sv)));
401 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
402 if (mg->mg_type == type && (!flags || mg->mg_virtual == vtbl)) {
414 Finds the magic pointer for type matching the SV. See C<sv_magic>.
420 Perl_mg_find(pTHX_ const SV *sv, int type)
422 return S_mg_findext_flags(aTHX_ sv, type, NULL, 0);
426 =for apidoc mg_findext
428 Finds the magic pointer of C<type> with the given C<vtbl> for the C<SV>. See
435 Perl_mg_findext(pTHX_ const SV *sv, int type, const MGVTBL *vtbl)
437 return S_mg_findext_flags(aTHX_ sv, type, vtbl, 1);
441 Perl_mg_find_mglob(pTHX_ SV *sv)
443 PERL_ARGS_ASSERT_MG_FIND_MGLOB;
444 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
445 /* This sv is only a delegate. //g magic must be attached to
450 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
451 return S_mg_findext_flags(aTHX_ sv, PERL_MAGIC_regex_global, 0, 0);
458 Copies the magic from one SV to another. See C<sv_magic>.
464 Perl_mg_copy(pTHX_ SV *sv, SV *nsv, const char *key, I32 klen)
469 PERL_ARGS_ASSERT_MG_COPY;
471 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
472 const MGVTBL* const vtbl = mg->mg_virtual;
473 if ((mg->mg_flags & MGf_COPY) && vtbl->svt_copy){
474 count += vtbl->svt_copy(aTHX_ sv, mg, nsv, key, klen);
477 const char type = mg->mg_type;
478 if (isUPPER(type) && type != PERL_MAGIC_uvar) {
480 (type == PERL_MAGIC_tied)
482 : (type == PERL_MAGIC_regdata && mg->mg_obj)
485 toLOWER(type), key, klen);
494 =for apidoc mg_localize
496 Copy some of the magic from an existing SV to new localized version of that
497 SV. Container magic (eg %ENV, $1, tie)
498 gets copied, value magic doesn't (eg
501 If setmagic is false then no set magic will be called on the new (empty) SV.
502 This typically means that assignment will soon follow (e.g. 'local $x = $y'),
503 and that will handle the magic.
509 Perl_mg_localize(pTHX_ SV *sv, SV *nsv, bool setmagic)
514 PERL_ARGS_ASSERT_MG_LOCALIZE;
519 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
520 const MGVTBL* const vtbl = mg->mg_virtual;
521 if (PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type))
524 if ((mg->mg_flags & MGf_LOCAL) && vtbl->svt_local)
525 (void)vtbl->svt_local(aTHX_ nsv, mg);
527 sv_magicext(nsv, mg->mg_obj, mg->mg_type, vtbl,
528 mg->mg_ptr, mg->mg_len);
530 /* container types should remain read-only across localization */
531 SvFLAGS(nsv) |= SvREADONLY(sv);
534 if (SvTYPE(nsv) >= SVt_PVMG && SvMAGIC(nsv)) {
535 SvFLAGS(nsv) |= SvMAGICAL(sv);
544 #define mg_free_struct(sv, mg) S_mg_free_struct(aTHX_ sv, mg)
546 S_mg_free_struct(pTHX_ SV *sv, MAGIC *mg)
548 const MGVTBL* const vtbl = mg->mg_virtual;
549 if (vtbl && vtbl->svt_free)
550 vtbl->svt_free(aTHX_ sv, mg);
551 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
552 if (mg->mg_len > 0 || mg->mg_type == PERL_MAGIC_utf8)
553 Safefree(mg->mg_ptr);
554 else if (mg->mg_len == HEf_SVKEY)
555 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
557 if (mg->mg_flags & MGf_REFCOUNTED)
558 SvREFCNT_dec(mg->mg_obj);
565 Free any magic storage used by the SV. See C<sv_magic>.
571 Perl_mg_free(pTHX_ SV *sv)
576 PERL_ARGS_ASSERT_MG_FREE;
578 for (mg = SvMAGIC(sv); mg; mg = moremagic) {
579 moremagic = mg->mg_moremagic;
580 mg_free_struct(sv, mg);
581 SvMAGIC_set(sv, moremagic);
583 SvMAGIC_set(sv, NULL);
589 =for apidoc Am|void|mg_free_type|SV *sv|int how
591 Remove any magic of type I<how> from the SV I<sv>. See L</sv_magic>.
597 Perl_mg_free_type(pTHX_ SV *sv, int how)
599 MAGIC *mg, *prevmg, *moremg;
600 PERL_ARGS_ASSERT_MG_FREE_TYPE;
601 for (prevmg = NULL, mg = SvMAGIC(sv); mg; prevmg = mg, mg = moremg) {
603 moremg = mg->mg_moremagic;
604 if (mg->mg_type == how) {
605 /* temporarily move to the head of the magic chain, in case
606 custom free code relies on this historical aspect of mg_free */
608 prevmg->mg_moremagic = moremg;
609 mg->mg_moremagic = SvMAGIC(sv);
612 newhead = mg->mg_moremagic;
613 mg_free_struct(sv, mg);
614 SvMAGIC_set(sv, newhead);
624 Perl_magic_regdata_cnt(pTHX_ SV *sv, MAGIC *mg)
629 PERL_ARGS_ASSERT_MAGIC_REGDATA_CNT;
632 const REGEXP * const rx = PM_GETRE(PL_curpm);
634 if (mg->mg_obj) { /* @+ */
635 /* return the number possible */
636 return RX_NPARENS(rx);
638 I32 paren = RX_LASTPAREN(rx);
640 /* return the last filled */
642 && (RX_OFFS(rx)[paren].start == -1
643 || RX_OFFS(rx)[paren].end == -1) )
656 Perl_magic_regdatum_get(pTHX_ SV *sv, MAGIC *mg)
660 PERL_ARGS_ASSERT_MAGIC_REGDATUM_GET;
663 const REGEXP * const rx = PM_GETRE(PL_curpm);
665 const I32 paren = mg->mg_len;
670 if (paren <= (I32)RX_NPARENS(rx) &&
671 (s = RX_OFFS(rx)[paren].start) != -1 &&
672 (t = RX_OFFS(rx)[paren].end) != -1)
675 if (mg->mg_obj) /* @+ */
680 if (RX_MATCH_UTF8(rx)) {
681 const char * const b = RX_SUBBEG(rx);
683 i = RX_SUBCOFFSET(rx) +
685 (U8*)(b-RX_SUBOFFSET(rx)+i));
700 Perl_magic_regdatum_set(pTHX_ SV *sv, MAGIC *mg)
702 PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET;
705 Perl_croak_no_modify();
706 NORETURN_FUNCTION_END;
709 #define SvRTRIM(sv) STMT_START { \
711 STRLEN len = SvCUR(sv); \
712 char * const p = SvPVX(sv); \
713 while (len > 0 && isSPACE(p[len-1])) \
715 SvCUR_set(sv, len); \
721 Perl_emulate_cop_io(pTHX_ const COP *const c, SV *const sv)
723 PERL_ARGS_ASSERT_EMULATE_COP_IO;
725 if (!(CopHINTS_get(c) & (HINT_LEXICAL_IO_IN|HINT_LEXICAL_IO_OUT)))
726 sv_setsv(sv, &PL_sv_undef);
730 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_IN)) {
731 SV *const value = cop_hints_fetch_pvs(c, "open<", 0);
736 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_OUT)) {
737 SV *const value = cop_hints_fetch_pvs(c, "open>", 0);
745 S_fixup_errno_string(pTHX_ SV* sv)
747 /* Do what is necessary to fixup the non-empty string in 'sv' for return to
750 PERL_ARGS_ASSERT_FIXUP_ERRNO_STRING;
754 if(strEQ(SvPVX(sv), "")) {
755 sv_catpv(sv, UNKNOWN_ERRNO_MSG);
759 /* In some locales the error string may come back as UTF-8, in which
760 * case we should turn on that flag. This didn't use to happen, and to
761 * avoid as many possible backward compatibility issues as possible, we
762 * don't turn on the flag unless we have to. So the flag stays off for
763 * an entirely ASCII string. We assume that if the string looks like
764 * UTF-8, it really is UTF-8: "text in any other encoding that uses
765 * bytes with the high bit set is extremely unlikely to pass a UTF-8
766 * validity test" (http://en.wikipedia.org/wiki/Charset_detection).
767 * There is a potential that we will get it wrong however, especially
768 * on short error message text. (If it turns out to be necessary, we
769 * could also keep track if the current LC_MESSAGES locale is UTF-8) */
770 if (! IN_BYTES /* respect 'use bytes' */
771 && ! is_ascii_string((U8*) SvPVX_const(sv), SvCUR(sv))
772 && is_utf8_string((U8*) SvPVX_const(sv), SvCUR(sv)))
785 Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
789 const char *s = NULL;
791 const char * const remaining = mg->mg_ptr + 1;
794 PERL_ARGS_ASSERT_MAGIC_GET;
798 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
800 CALLREG_NUMBUF_FETCH(rx,paren,sv);
802 sv_setsv(sv,&PL_sv_undef);
807 nextchar = *remaining;
808 switch (*mg->mg_ptr) {
809 case '\001': /* ^A */
810 if (SvOK(PL_bodytarget)) sv_copypv(sv, PL_bodytarget);
811 else sv_setsv(sv, &PL_sv_undef);
812 if (SvTAINTED(PL_bodytarget))
815 case '\003': /* ^C, ^CHILD_ERROR_NATIVE */
816 if (nextchar == '\0') {
817 sv_setiv(sv, (IV)PL_minus_c);
819 else if (strEQ(remaining, "HILD_ERROR_NATIVE")) {
820 sv_setiv(sv, (IV)STATUS_NATIVE);
824 case '\004': /* ^D */
825 sv_setiv(sv, (IV)(PL_debug & DEBUG_MASK));
827 case '\005': /* ^E */
828 if (nextchar != '\0') {
829 if (strEQ(remaining, "NCODING"))
830 sv_setsv(sv, PL_encoding);
834 #if defined(VMS) || defined(OS2) || defined(WIN32)
838 $DESCRIPTOR(msgdsc,msg);
839 sv_setnv(sv,(NV) vaxc$errno);
840 if (sys$getmsg(vaxc$errno,&msgdsc.dsc$w_length,&msgdsc,0,0) & 1)
841 sv_setpvn(sv,msgdsc.dsc$a_pointer,msgdsc.dsc$w_length);
846 if (!(_emx_env & 0x200)) { /* Under DOS */
847 sv_setnv(sv, (NV)errno);
848 sv_setpv(sv, errno ? my_strerror(errno) : "");
850 if (errno != errno_isOS2) {
851 const int tmp = _syserrno();
852 if (tmp) /* 2nd call to _syserrno() makes it 0 */
855 sv_setnv(sv, (NV)Perl_rc);
856 sv_setpv(sv, os2error(Perl_rc));
858 if (SvOK(sv) && strNE(SvPVX(sv), "")) {
859 fixup_errno_string(sv);
861 # elif defined(WIN32)
863 const DWORD dwErr = GetLastError();
864 sv_setnv(sv, (NV)dwErr);
866 PerlProc_GetOSError(sv, dwErr);
867 fixup_errno_string(sv);
874 # error Missing code for platform
877 SvNOK_on(sv); /* what a wonderful hack! */
879 #endif /* End of platforms with special handling for $^E; others just fall
886 sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno));
888 sv_setnv(sv, (NV)errno);
891 if (errno == errno_isOS2 || errno == errno_isOS2_set)
892 sv_setpv(sv, os2error(Perl_rc));
900 /* Strerror can return NULL on some platforms, which will
901 * result in 'sv' not being considered SvOK. The SvNOK_on()
902 * below will cause just the number part to be valid */
903 sv_setpv(sv, my_strerror(errno));
905 fixup_errno_string(sv);
912 SvNOK_on(sv); /* what a wonderful hack! */
915 case '\006': /* ^F */
916 sv_setiv(sv, (IV)PL_maxsysfd);
918 case '\007': /* ^GLOBAL_PHASE */
919 if (strEQ(remaining, "LOBAL_PHASE")) {
920 sv_setpvn(sv, PL_phase_names[PL_phase],
921 strlen(PL_phase_names[PL_phase]));
924 case '\010': /* ^H */
925 sv_setiv(sv, (IV)PL_hints);
927 case '\011': /* ^I */ /* NOT \t in EBCDIC */
928 sv_setpv(sv, PL_inplace); /* Will undefine sv if PL_inplace is NULL */
930 case '\014': /* ^LAST_FH */
931 if (strEQ(remaining, "AST_FH")) {
933 assert(isGV_with_GP(PL_last_in_gv));
934 SV_CHECK_THINKFIRST_COW_DROP(sv);
935 prepare_SV_for_RV(sv);
937 SvRV_set(sv, SvREFCNT_inc_simple_NN(PL_last_in_gv));
941 else sv_setsv_nomg(sv, NULL);
944 case '\017': /* ^O & ^OPEN */
945 if (nextchar == '\0') {
946 sv_setpv(sv, PL_osname);
949 else if (strEQ(remaining, "PEN")) {
950 Perl_emulate_cop_io(aTHX_ &PL_compiling, sv);
954 sv_setiv(sv, (IV)PL_perldb);
956 case '\023': /* ^S */
958 if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING)
961 sv_setiv(sv, PL_in_eval & ~(EVAL_INREQUIRE));
966 case '\024': /* ^T */
967 if (nextchar == '\0') {
969 sv_setnv(sv, PL_basetime);
971 sv_setiv(sv, (IV)PL_basetime);
974 else if (strEQ(remaining, "AINT"))
975 sv_setiv(sv, TAINTING_get
976 ? (TAINT_WARN_get || PL_unsafe ? -1 : 1)
979 case '\025': /* $^UNICODE, $^UTF8LOCALE, $^UTF8CACHE */
980 if (strEQ(remaining, "NICODE"))
981 sv_setuv(sv, (UV) PL_unicode);
982 else if (strEQ(remaining, "TF8LOCALE"))
983 sv_setuv(sv, (UV) PL_utf8locale);
984 else if (strEQ(remaining, "TF8CACHE"))
985 sv_setiv(sv, (IV) PL_utf8cache);
987 case '\027': /* ^W & $^WARNING_BITS */
988 if (nextchar == '\0')
989 sv_setiv(sv, (IV)((PL_dowarn & G_WARN_ON) ? TRUE : FALSE));
990 else if (strEQ(remaining, "ARNING_BITS")) {
991 if (PL_compiling.cop_warnings == pWARN_NONE) {
992 sv_setpvn(sv, WARN_NONEstring, WARNsize) ;
994 else if (PL_compiling.cop_warnings == pWARN_STD) {
995 sv_setsv(sv, &PL_sv_undef);
998 else if (PL_compiling.cop_warnings == pWARN_ALL) {
999 /* Get the bit mask for $warnings::Bits{all}, because
1000 * it could have been extended by warnings::register */
1001 HV * const bits = get_hv("warnings::Bits", 0);
1002 SV ** const bits_all = bits ? hv_fetchs(bits, "all", FALSE) : NULL;
1004 sv_copypv(sv, *bits_all);
1006 sv_setpvn(sv, WARN_ALLstring, WARNsize);
1009 sv_setpvn(sv, (char *) (PL_compiling.cop_warnings + 1),
1010 *PL_compiling.cop_warnings);
1015 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1016 paren = RX_LASTPAREN(rx);
1018 goto do_numbuf_fetch;
1020 sv_setsv(sv,&PL_sv_undef);
1022 case '\016': /* ^N */
1023 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1024 paren = RX_LASTCLOSEPAREN(rx);
1026 goto do_numbuf_fetch;
1028 sv_setsv(sv,&PL_sv_undef);
1031 if (GvIO(PL_last_in_gv)) {
1032 sv_setiv(sv, (IV)IoLINES(GvIOp(PL_last_in_gv)));
1037 sv_setiv(sv, (IV)STATUS_CURRENT);
1038 #ifdef COMPLEX_STATUS
1039 SvUPGRADE(sv, SVt_PVLV);
1040 LvTARGOFF(sv) = PL_statusvalue;
1041 LvTARGLEN(sv) = PL_statusvalue_vms;
1046 if (GvIOp(PL_defoutgv))
1047 s = IoTOP_NAME(GvIOp(PL_defoutgv));
1051 sv_setpv(sv,GvENAME(PL_defoutgv));
1052 sv_catpvs(sv,"_TOP");
1056 if (GvIOp(PL_defoutgv))
1057 s = IoFMT_NAME(GvIOp(PL_defoutgv));
1059 s = GvENAME(PL_defoutgv);
1063 if (GvIO(PL_defoutgv))
1064 sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
1067 if (GvIO(PL_defoutgv))
1068 sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
1071 if (GvIO(PL_defoutgv))
1072 sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
1082 if (GvIO(PL_defoutgv))
1083 sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
1087 sv_copypv(sv, PL_ors_sv);
1089 sv_setsv(sv, &PL_sv_undef);
1093 IV const pid = (IV)PerlProc_getpid();
1094 if (isGV(mg->mg_obj) || SvIV(mg->mg_obj) != pid) {
1095 /* never set manually, or at least not since last fork */
1097 /* never unsafe, even if reading in a tainted expression */
1100 /* else a value has been assigned manually, so do nothing */
1104 sv_setuid(sv, PerlProc_getuid());
1107 sv_setuid(sv, PerlProc_geteuid());
1110 sv_setgid(sv, PerlProc_getgid());
1113 sv_setgid(sv, PerlProc_getegid());
1115 #ifdef HAS_GETGROUPS
1117 Groups_t *gary = NULL;
1119 I32 num_groups = getgroups(0, gary);
1120 if (num_groups > 0) {
1121 Newx(gary, num_groups, Groups_t);
1122 num_groups = getgroups(num_groups, gary);
1123 for (i = 0; i < num_groups; i++)
1124 Perl_sv_catpvf(aTHX_ sv, " %"IVdf, (IV)gary[i]);
1128 (void)SvIOK_on(sv); /* what a wonderful hack! */
1138 Perl_magic_getuvar(pTHX_ SV *sv, MAGIC *mg)
1140 struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
1142 PERL_ARGS_ASSERT_MAGIC_GETUVAR;
1144 if (uf && uf->uf_val)
1145 (*uf->uf_val)(aTHX_ uf->uf_index, sv);
1150 Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg)
1153 STRLEN len = 0, klen;
1154 const char * const key = MgPV_const(mg,klen);
1157 PERL_ARGS_ASSERT_MAGIC_SETENV;
1161 /* defined environment variables are byte strings; unfortunately
1162 there is no SvPVbyte_force_nomg(), so we must do this piecewise */
1163 (void)SvPV_force_nomg_nolen(sv);
1164 sv_utf8_downgrade(sv, /* fail_ok */ TRUE);
1166 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv");
1172 my_setenv(key, s); /* does the deed */
1174 #ifdef DYNAMIC_ENV_FETCH
1175 /* We just undefd an environment var. Is a replacement */
1176 /* waiting in the wings? */
1178 SV ** const valp = hv_fetch(GvHVn(PL_envgv), key, klen, FALSE);
1180 s = SvOK(*valp) ? SvPV_const(*valp, len) : "";
1184 #if !defined(OS2) && !defined(AMIGAOS) && !defined(WIN32) && !defined(MSDOS)
1185 /* And you'll never guess what the dog had */
1186 /* in its mouth... */
1188 MgTAINTEDDIR_off(mg);
1190 if (s && klen == 8 && strEQ(key, "DCL$PATH")) {
1191 char pathbuf[256], eltbuf[256], *cp, *elt;
1194 my_strlcpy(eltbuf, s, sizeof(eltbuf));
1196 do { /* DCL$PATH may be a search list */
1197 while (1) { /* as may dev portion of any element */
1198 if ( ((cp = strchr(elt,'[')) || (cp = strchr(elt,'<'))) ) {
1199 if ( *(cp+1) == '.' || *(cp+1) == '-' ||
1200 cando_by_name(S_IWUSR,0,elt) ) {
1201 MgTAINTEDDIR_on(mg);
1205 if ((cp = strchr(elt, ':')) != NULL)
1207 if (my_trnlnm(elt, eltbuf, j++))
1213 } while (my_trnlnm(s, pathbuf, i++) && (elt = pathbuf));
1216 if (s && klen == 4 && strEQ(key,"PATH")) {
1217 const char * const strend = s + len;
1219 while (s < strend) {
1223 #ifdef VMS /* Hmm. How do we get $Config{path_sep} from C? */
1224 const char path_sep = '|';
1226 const char path_sep = ':';
1228 s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf,
1229 s, strend, path_sep, &i);
1231 if (i >= (I32)sizeof tmpbuf /* too long -- assume the worst */
1233 || !strchr(tmpbuf, ':') /* no colon thus no device name -- assume relative path */
1235 || *tmpbuf != '/' /* no starting slash -- assume relative path */
1237 || (PerlLIO_stat(tmpbuf, &st) == 0 && (st.st_mode & 2)) ) {
1238 MgTAINTEDDIR_on(mg);
1244 #endif /* neither OS2 nor AMIGAOS nor WIN32 nor MSDOS */
1250 Perl_magic_clearenv(pTHX_ SV *sv, MAGIC *mg)
1252 PERL_ARGS_ASSERT_MAGIC_CLEARENV;
1253 PERL_UNUSED_ARG(sv);
1254 my_setenv(MgPV_nolen_const(mg),NULL);
1259 Perl_magic_set_all_env(pTHX_ SV *sv, MAGIC *mg)
1262 PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV;
1263 PERL_UNUSED_ARG(mg);
1265 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1267 if (PL_localizing) {
1270 hv_iterinit(MUTABLE_HV(sv));
1271 while ((entry = hv_iternext(MUTABLE_HV(sv)))) {
1273 my_setenv(hv_iterkey(entry, &keylen),
1274 SvPV_nolen_const(hv_iterval(MUTABLE_HV(sv), entry)));
1282 Perl_magic_clear_all_env(pTHX_ SV *sv, MAGIC *mg)
1285 PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV;
1286 PERL_UNUSED_ARG(sv);
1287 PERL_UNUSED_ARG(mg);
1289 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1297 #ifdef HAS_SIGPROCMASK
1299 restore_sigmask(pTHX_ SV *save_sv)
1301 const sigset_t * const ossetp = (const sigset_t *) SvPV_nolen_const( save_sv );
1302 (void)sigprocmask(SIG_SETMASK, ossetp, NULL);
1306 Perl_magic_getsig(pTHX_ SV *sv, MAGIC *mg)
1309 /* Are we fetching a signal entry? */
1310 int i = (I16)mg->mg_private;
1312 PERL_ARGS_ASSERT_MAGIC_GETSIG;
1316 const char * sig = MgPV_const(mg, siglen);
1317 mg->mg_private = i = whichsig_pvn(sig, siglen);
1322 sv_setsv(sv,PL_psig_ptr[i]);
1324 Sighandler_t sigstate = rsignal_state(i);
1325 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1326 if (PL_sig_handlers_initted && PL_sig_ignoring[i])
1329 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1330 if (PL_sig_handlers_initted && PL_sig_defaulting[i])
1333 /* cache state so we don't fetch it again */
1334 if(sigstate == (Sighandler_t) SIG_IGN)
1335 sv_setpvs(sv,"IGNORE");
1337 sv_setsv(sv,&PL_sv_undef);
1338 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1345 Perl_magic_clearsig(pTHX_ SV *sv, MAGIC *mg)
1347 PERL_ARGS_ASSERT_MAGIC_CLEARSIG;
1349 magic_setsig(NULL, mg);
1350 return sv_unmagic(sv, mg->mg_type);
1354 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1355 Perl_csighandler(int sig, siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
1357 Perl_csighandler(int sig)
1360 #ifdef PERL_GET_SIG_CONTEXT
1361 dTHXa(PERL_GET_SIG_CONTEXT);
1365 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1366 (void) rsignal(sig, PL_csighandlerp);
1367 if (PL_sig_ignoring[sig]) return;
1369 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1370 if (PL_sig_defaulting[sig])
1371 #ifdef KILL_BY_SIGPRC
1372 exit((Perl_sig_to_vmscondition(sig)&STS$M_COND_ID)|STS$K_SEVERE|STS$M_INHIB_MSG);
1387 (PL_signals & PERL_SIGNALS_UNSAFE_FLAG))
1388 /* Call the perl level handler now--
1389 * with risk we may be in malloc() or being destructed etc. */
1390 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1391 (*PL_sighandlerp)(sig, NULL, NULL);
1393 (*PL_sighandlerp)(sig);
1396 if (!PL_psig_pend) return;
1397 /* Set a flag to say this signal is pending, that is awaiting delivery after
1398 * the current Perl opcode completes */
1399 PL_psig_pend[sig]++;
1401 #ifndef SIG_PENDING_DIE_COUNT
1402 # define SIG_PENDING_DIE_COUNT 120
1404 /* Add one to say _a_ signal is pending */
1405 if (++PL_sig_pending >= SIG_PENDING_DIE_COUNT)
1406 Perl_croak(aTHX_ "Maximal count of pending signals (%lu) exceeded",
1407 (unsigned long)SIG_PENDING_DIE_COUNT);
1411 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1413 Perl_csighandler_init(void)
1416 if (PL_sig_handlers_initted) return;
1418 for (sig = 1; sig < SIG_SIZE; sig++) {
1419 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1421 PL_sig_defaulting[sig] = 1;
1422 (void) rsignal(sig, PL_csighandlerp);
1424 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1425 PL_sig_ignoring[sig] = 0;
1428 PL_sig_handlers_initted = 1;
1432 #if defined HAS_SIGPROCMASK
1434 unblock_sigmask(pTHX_ void* newset)
1436 sigprocmask(SIG_UNBLOCK, (sigset_t*)newset, NULL);
1441 Perl_despatch_signals(pTHX)
1446 for (sig = 1; sig < SIG_SIZE; sig++) {
1447 if (PL_psig_pend[sig]) {
1449 #ifdef HAS_SIGPROCMASK
1450 /* From sigaction(2) (FreeBSD man page):
1451 * | Signal routines normally execute with the signal that
1452 * | caused their invocation blocked, but other signals may
1454 * Emulation of this behavior (from within Perl) is enabled
1458 sigset_t newset, oldset;
1460 sigemptyset(&newset);
1461 sigaddset(&newset, sig);
1462 sigprocmask(SIG_BLOCK, &newset, &oldset);
1463 was_blocked = sigismember(&oldset, sig);
1465 SV* save_sv = newSVpvn((char *)(&newset), sizeof(sigset_t));
1467 SAVEFREESV(save_sv);
1468 SAVEDESTRUCTOR_X(unblock_sigmask, SvPV_nolen(save_sv));
1471 PL_psig_pend[sig] = 0;
1472 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1473 (*PL_sighandlerp)(sig, NULL, NULL);
1475 (*PL_sighandlerp)(sig);
1477 #ifdef HAS_SIGPROCMASK
1486 /* sv of NULL signifies that we're acting as magic_clearsig. */
1488 Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
1493 /* Need to be careful with SvREFCNT_dec(), because that can have side
1494 * effects (due to closures). We must make sure that the new disposition
1495 * is in place before it is called.
1499 #ifdef HAS_SIGPROCMASK
1503 const char *s = MgPV_const(mg,len);
1505 PERL_ARGS_ASSERT_MAGIC_SETSIG;
1508 if (memEQs(s, len, "__DIE__"))
1510 else if (memEQs(s, len, "__WARN__")
1511 && (sv ? 1 : PL_warnhook != PERL_WARNHOOK_FATAL)) {
1512 /* Merge the existing behaviours, which are as follows:
1513 magic_setsig, we always set svp to &PL_warnhook
1514 (hence we always change the warnings handler)
1515 For magic_clearsig, we don't change the warnings handler if it's
1516 set to the &PL_warnhook. */
1519 SV *tmp = sv_newmortal();
1520 Perl_croak(aTHX_ "No such hook: %s",
1521 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1525 if (*svp != PERL_WARNHOOK_FATAL)
1531 i = (I16)mg->mg_private;
1533 i = whichsig_pvn(s, len); /* ...no, a brick */
1534 mg->mg_private = (U16)i;
1538 SV *tmp = sv_newmortal();
1539 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "No such signal: SIG%s",
1540 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1544 #ifdef HAS_SIGPROCMASK
1545 /* Avoid having the signal arrive at a bad time, if possible. */
1548 sigprocmask(SIG_BLOCK, &set, &save);
1550 save_sv = newSVpvn((char *)(&save), sizeof(sigset_t));
1551 SAVEFREESV(save_sv);
1552 SAVEDESTRUCTOR_X(restore_sigmask, save_sv);
1555 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1556 if (!PL_sig_handlers_initted) Perl_csighandler_init();
1558 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1559 PL_sig_ignoring[i] = 0;
1561 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1562 PL_sig_defaulting[i] = 0;
1564 to_dec = PL_psig_ptr[i];
1566 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1567 SvTEMP_off(sv); /* Make sure it doesn't go away on us */
1569 /* Signals don't change name during the program's execution, so once
1570 they're cached in the appropriate slot of PL_psig_name, they can
1573 Ideally we'd find some way of making SVs at (C) compile time, or
1574 at least, doing most of the work. */
1575 if (!PL_psig_name[i]) {
1576 PL_psig_name[i] = newSVpvn(s, len);
1577 SvREADONLY_on(PL_psig_name[i]);
1580 SvREFCNT_dec(PL_psig_name[i]);
1581 PL_psig_name[i] = NULL;
1582 PL_psig_ptr[i] = NULL;
1585 if (sv && (isGV_with_GP(sv) || SvROK(sv))) {
1587 (void)rsignal(i, PL_csighandlerp);
1590 *svp = SvREFCNT_inc_simple_NN(sv);
1592 if (sv && SvOK(sv)) {
1593 s = SvPV_force(sv, len);
1597 if (sv && memEQs(s, len,"IGNORE")) {
1599 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1600 PL_sig_ignoring[i] = 1;
1601 (void)rsignal(i, PL_csighandlerp);
1603 (void)rsignal(i, (Sighandler_t) SIG_IGN);
1607 else if (!sv || memEQs(s, len,"DEFAULT") || !len) {
1609 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1610 PL_sig_defaulting[i] = 1;
1611 (void)rsignal(i, PL_csighandlerp);
1613 (void)rsignal(i, (Sighandler_t) SIG_DFL);
1619 * We should warn if HINT_STRICT_REFS, but without
1620 * access to a known hint bit in a known OP, we can't
1621 * tell whether HINT_STRICT_REFS is in force or not.
1623 if (!strchr(s,':') && !strchr(s,'\''))
1624 Perl_sv_insert_flags(aTHX_ sv, 0, 0, STR_WITH_LEN("main::"),
1627 (void)rsignal(i, PL_csighandlerp);
1629 *svp = SvREFCNT_inc_simple_NN(sv);
1633 #ifdef HAS_SIGPROCMASK
1637 SvREFCNT_dec(to_dec);
1640 #endif /* !PERL_MICRO */
1643 Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg)
1646 PERL_ARGS_ASSERT_MAGIC_SETISA;
1647 PERL_UNUSED_ARG(sv);
1649 /* Skip _isaelem because _isa will handle it shortly */
1650 if (PL_delaymagic & DM_ARRAY_ISA && mg->mg_type == PERL_MAGIC_isaelem)
1653 return magic_clearisa(NULL, mg);
1656 /* sv of NULL signifies that we're acting as magic_setisa. */
1658 Perl_magic_clearisa(pTHX_ SV *sv, MAGIC *mg)
1663 PERL_ARGS_ASSERT_MAGIC_CLEARISA;
1665 /* Bail out if destruction is going on */
1666 if(PL_phase == PERL_PHASE_DESTRUCT) return 0;
1669 av_clear(MUTABLE_AV(sv));
1671 if (SvTYPE(mg->mg_obj) != SVt_PVGV && SvSMAGICAL(mg->mg_obj))
1672 /* This occurs with setisa_elem magic, which calls this
1674 mg = mg_find(mg->mg_obj, PERL_MAGIC_isa);
1677 if (SvTYPE(mg->mg_obj) == SVt_PVAV) { /* multiple stashes */
1678 SV **svp = AvARRAY((AV *)mg->mg_obj);
1679 I32 items = AvFILLp((AV *)mg->mg_obj) + 1;
1681 stash = GvSTASH((GV *)*svp++);
1682 if (stash && HvENAME(stash)) mro_isa_changed_in(stash);
1689 (const GV *)mg->mg_obj
1692 /* The stash may have been detached from the symbol table, so check its
1693 name before doing anything. */
1694 if (stash && HvENAME_get(stash))
1695 mro_isa_changed_in(stash);
1701 Perl_magic_getnkeys(pTHX_ SV *sv, MAGIC *mg)
1703 HV * const hv = MUTABLE_HV(LvTARG(sv));
1706 PERL_ARGS_ASSERT_MAGIC_GETNKEYS;
1707 PERL_UNUSED_ARG(mg);
1710 (void) hv_iterinit(hv);
1711 if (! SvTIED_mg((const SV *)hv, PERL_MAGIC_tied))
1714 while (hv_iternext(hv))
1719 sv_setiv(sv, (IV)i);
1724 Perl_magic_setnkeys(pTHX_ SV *sv, MAGIC *mg)
1726 PERL_ARGS_ASSERT_MAGIC_SETNKEYS;
1727 PERL_UNUSED_ARG(mg);
1729 hv_ksplit(MUTABLE_HV(LvTARG(sv)), SvIV(sv));
1735 =for apidoc magic_methcall
1737 Invoke a magic method (like FETCH).
1739 C<sv> and C<mg> are the tied thingy and the tie magic.
1741 C<meth> is the name of the method to call.
1743 C<argc> is the number of args (in addition to $self) to pass to the method.
1745 The C<flags> can be:
1747 G_DISCARD invoke method with G_DISCARD flag and don't
1749 G_UNDEF_FILL fill the stack with argc pointers to
1752 The arguments themselves are any values following the C<flags> argument.
1754 Returns the SV (if any) returned by the method, or NULL on failure.
1761 Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
1768 PERL_ARGS_ASSERT_MAGIC_METHCALL;
1772 if (flags & G_WRITING_TO_STDERR) {
1776 SAVESPTR(PL_stderrgv);
1780 PUSHSTACKi(PERLSI_MAGIC);
1784 PUSHs(SvTIED_obj(sv, mg));
1785 if (flags & G_UNDEF_FILL) {
1787 PUSHs(&PL_sv_undef);
1789 } else if (argc > 0) {
1791 va_start(args, argc);
1794 SV *const sv = va_arg(args, SV *);
1801 if (flags & G_DISCARD) {
1802 call_sv(meth, G_SCALAR|G_DISCARD|G_METHOD_NAMED);
1805 if (call_sv(meth, G_SCALAR|G_METHOD_NAMED))
1806 ret = *PL_stack_sp--;
1809 if (flags & G_WRITING_TO_STDERR)
1815 /* wrapper for magic_methcall that creates the first arg */
1818 S_magic_methcall1(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
1824 PERL_ARGS_ASSERT_MAGIC_METHCALL1;
1827 if (mg->mg_len >= 0) {
1828 arg1 = newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
1830 else if (mg->mg_len == HEf_SVKEY)
1831 arg1 = MUTABLE_SV(mg->mg_ptr);
1833 else if (mg->mg_type == PERL_MAGIC_tiedelem) {
1834 arg1 = newSViv((IV)(mg->mg_len));
1838 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n - 1, val);
1840 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n, arg1, val);
1844 S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, SV *meth)
1849 PERL_ARGS_ASSERT_MAGIC_METHPACK;
1851 ret = magic_methcall1(sv, mg, meth, 0, 1, NULL);
1858 Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
1860 PERL_ARGS_ASSERT_MAGIC_GETPACK;
1862 if (mg->mg_type == PERL_MAGIC_tiedelem)
1863 mg->mg_flags |= MGf_GSKIP;
1864 magic_methpack(sv,mg,SV_CONST(FETCH));
1869 Perl_magic_setpack(pTHX_ SV *sv, MAGIC *mg)
1875 PERL_ARGS_ASSERT_MAGIC_SETPACK;
1877 /* in the code C<$tied{foo} = $val>, the "thing" that gets passed to
1878 * STORE() is not $val, but rather a PVLV (the sv in this call), whose
1879 * public flags indicate its value based on copying from $val. Doing
1880 * mg_set() on the PVLV temporarily does SvMAGICAL_off(), then calls us.
1881 * So STORE()'s $_[2] arg is a temporarily disarmed PVLV. This goes
1882 * wrong if $val happened to be tainted, as sv hasn't got magic
1883 * enabled, even though taint magic is in the chain. In which case,
1884 * fake up a temporary tainted value (this is easier than temporarily
1885 * re-enabling magic on sv). */
1887 if (TAINTING_get && (tmg = mg_find(sv, PERL_MAGIC_taint))
1888 && (tmg->mg_len & 1))
1890 val = sv_mortalcopy(sv);
1896 magic_methcall1(sv, mg, SV_CONST(STORE), G_DISCARD, 2, val);
1901 Perl_magic_clearpack(pTHX_ SV *sv, MAGIC *mg)
1903 PERL_ARGS_ASSERT_MAGIC_CLEARPACK;
1905 if (mg->mg_type == PERL_MAGIC_tiedscalar) return 0;
1906 return magic_methpack(sv,mg,SV_CONST(DELETE));
1911 Perl_magic_sizepack(pTHX_ SV *sv, MAGIC *mg)
1917 PERL_ARGS_ASSERT_MAGIC_SIZEPACK;
1919 retsv = magic_methcall1(sv, mg, SV_CONST(FETCHSIZE), 0, 1, NULL);
1921 retval = SvIV(retsv)-1;
1923 Perl_croak(aTHX_ "FETCHSIZE returned a negative value");
1925 return (U32) retval;
1929 Perl_magic_wipepack(pTHX_ SV *sv, MAGIC *mg)
1933 PERL_ARGS_ASSERT_MAGIC_WIPEPACK;
1935 Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(CLEAR), G_DISCARD, 0);
1940 Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key)
1945 PERL_ARGS_ASSERT_MAGIC_NEXTPACK;
1947 ret = SvOK(key) ? Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(NEXTKEY), 0, 1, key)
1948 : Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(FIRSTKEY), 0, 0);
1955 Perl_magic_existspack(pTHX_ SV *sv, const MAGIC *mg)
1957 PERL_ARGS_ASSERT_MAGIC_EXISTSPACK;
1959 return magic_methpack(sv,mg,SV_CONST(EXISTS));
1963 Perl_magic_scalarpack(pTHX_ HV *hv, MAGIC *mg)
1967 SV * const tied = SvTIED_obj(MUTABLE_SV(hv), mg);
1968 HV * const pkg = SvSTASH((const SV *)SvRV(tied));
1970 PERL_ARGS_ASSERT_MAGIC_SCALARPACK;
1972 if (!gv_fetchmethod_autoload(pkg, "SCALAR", FALSE)) {
1974 if (HvEITER_get(hv))
1975 /* we are in an iteration so the hash cannot be empty */
1977 /* no xhv_eiter so now use FIRSTKEY */
1978 key = sv_newmortal();
1979 magic_nextpack(MUTABLE_SV(hv), mg, key);
1980 HvEITER_set(hv, NULL); /* need to reset iterator */
1981 return SvOK(key) ? &PL_sv_yes : &PL_sv_no;
1984 /* there is a SCALAR method that we can call */
1985 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(hv), mg, SV_CONST(SCALAR), 0, 0);
1987 retval = &PL_sv_undef;
1992 Perl_magic_setdbline(pTHX_ SV *sv, MAGIC *mg)
1997 PERL_ARGS_ASSERT_MAGIC_SETDBLINE;
1999 /* The magic ptr/len for the debugger's hash should always be an SV. */
2000 if (UNLIKELY(mg->mg_len != HEf_SVKEY)) {
2001 Perl_croak(aTHX_ "panic: magic_setdbline len=%"IVdf", ptr='%s'",
2002 (IV)mg->mg_len, mg->mg_ptr);
2005 /* Use sv_2iv instead of SvIV() as the former generates smaller code, and
2006 setting/clearing debugger breakpoints is not a hot path. */
2007 svp = av_fetch(MUTABLE_AV(mg->mg_obj),
2008 sv_2iv(MUTABLE_SV((mg)->mg_ptr)), FALSE);
2010 if (svp && SvIOKp(*svp)) {
2011 OP * const o = INT2PTR(OP*,SvIVX(*svp));
2013 #ifdef PERL_DEBUG_READONLY_OPS
2014 Slab_to_rw(OpSLAB(o));
2016 /* set or clear breakpoint in the relevant control op */
2018 o->op_flags |= OPf_SPECIAL;
2020 o->op_flags &= ~OPf_SPECIAL;
2021 #ifdef PERL_DEBUG_READONLY_OPS
2022 Slab_to_ro(OpSLAB(o));
2030 Perl_magic_getarylen(pTHX_ SV *sv, const MAGIC *mg)
2033 AV * const obj = MUTABLE_AV(mg->mg_obj);
2035 PERL_ARGS_ASSERT_MAGIC_GETARYLEN;
2038 sv_setiv(sv, AvFILL(obj));
2046 Perl_magic_setarylen(pTHX_ SV *sv, MAGIC *mg)
2049 AV * const obj = MUTABLE_AV(mg->mg_obj);
2051 PERL_ARGS_ASSERT_MAGIC_SETARYLEN;
2054 av_fill(obj, SvIV(sv));
2056 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
2057 "Attempt to set length of freed array");
2063 Perl_magic_cleararylen_p(pTHX_ SV *sv, MAGIC *mg)
2067 PERL_ARGS_ASSERT_MAGIC_CLEARARYLEN_P;
2068 PERL_UNUSED_ARG(sv);
2070 /* Reset the iterator when the array is cleared */
2071 #if IVSIZE == I32SIZE
2072 *((IV *) &(mg->mg_len)) = 0;
2075 *((IV *) mg->mg_ptr) = 0;
2082 Perl_magic_freearylen_p(pTHX_ SV *sv, MAGIC *mg)
2086 PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P;
2087 PERL_UNUSED_ARG(sv);
2089 /* during global destruction, mg_obj may already have been freed */
2090 if (PL_in_clean_all)
2093 mg = mg_find (mg->mg_obj, PERL_MAGIC_arylen);
2096 /* arylen scalar holds a pointer back to the array, but doesn't own a
2097 reference. Hence the we (the array) are about to go away with it
2098 still pointing at us. Clear its pointer, else it would be pointing
2099 at free memory. See the comment in sv_magic about reference loops,
2100 and why it can't own a reference to us. */
2107 Perl_magic_getpos(pTHX_ SV *sv, MAGIC *mg)
2110 SV* const lsv = LvTARG(sv);
2111 MAGIC * const found = mg_find_mglob(lsv);
2113 PERL_ARGS_ASSERT_MAGIC_GETPOS;
2114 PERL_UNUSED_ARG(mg);
2116 if (found && found->mg_len != -1) {
2117 STRLEN i = found->mg_len;
2118 if (found->mg_flags & MGf_BYTES && DO_UTF8(lsv))
2119 i = sv_pos_b2u_flags(lsv, i, SV_GMAGIC|SV_CONST_RETURN);
2128 Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
2131 SV* const lsv = LvTARG(sv);
2138 PERL_ARGS_ASSERT_MAGIC_SETPOS;
2139 PERL_UNUSED_ARG(mg);
2141 found = mg_find_mglob(lsv);
2145 found = sv_magicext_mglob(lsv);
2147 else if (!SvOK(sv)) {
2151 s = SvPV_const(lsv, len);
2156 ulen = sv_or_pv_len_utf8(lsv, s, len);
2166 else if (pos > (SSize_t)len)
2169 found->mg_len = pos;
2170 found->mg_flags &= ~(MGf_MINMATCH|MGf_BYTES);
2176 Perl_magic_getsubstr(pTHX_ SV *sv, MAGIC *mg)
2179 SV * const lsv = LvTARG(sv);
2180 const char * const tmps = SvPV_const(lsv,len);
2181 STRLEN offs = LvTARGOFF(sv);
2182 STRLEN rem = LvTARGLEN(sv);
2183 const bool negoff = LvFLAGS(sv) & 1;
2184 const bool negrem = LvFLAGS(sv) & 2;
2186 PERL_ARGS_ASSERT_MAGIC_GETSUBSTR;
2187 PERL_UNUSED_ARG(mg);
2189 if (!translate_substr_offsets(
2190 SvUTF8(lsv) ? sv_or_pv_len_utf8(lsv, tmps, len) : len,
2191 negoff ? -(IV)offs : (IV)offs, !negoff,
2192 negrem ? -(IV)rem : (IV)rem, !negrem, &offs, &rem
2194 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
2195 sv_setsv_nomg(sv, &PL_sv_undef);
2200 offs = sv_or_pv_pos_u2b(lsv, tmps, offs, &rem);
2201 sv_setpvn(sv, tmps + offs, rem);
2208 Perl_magic_setsubstr(pTHX_ SV *sv, MAGIC *mg)
2211 STRLEN len, lsv_len, oldtarglen, newtarglen;
2212 const char * const tmps = SvPV_const(sv, len);
2213 SV * const lsv = LvTARG(sv);
2214 STRLEN lvoff = LvTARGOFF(sv);
2215 STRLEN lvlen = LvTARGLEN(sv);
2216 const bool negoff = LvFLAGS(sv) & 1;
2217 const bool neglen = LvFLAGS(sv) & 2;
2219 PERL_ARGS_ASSERT_MAGIC_SETSUBSTR;
2220 PERL_UNUSED_ARG(mg);
2224 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
2225 "Attempt to use reference as lvalue in substr"
2227 SvPV_force_nomg(lsv,lsv_len);
2228 if (SvUTF8(lsv)) lsv_len = sv_len_utf8_nomg(lsv);
2229 if (!translate_substr_offsets(
2231 negoff ? -(IV)lvoff : (IV)lvoff, !negoff,
2232 neglen ? -(IV)lvlen : (IV)lvlen, !neglen, &lvoff, &lvlen
2234 Perl_croak(aTHX_ "substr outside of string");
2237 sv_utf8_upgrade_nomg(lsv);
2238 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2239 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2240 newtarglen = sv_or_pv_len_utf8(sv, tmps, len);
2243 else if (SvUTF8(lsv)) {
2245 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2247 utf8 = (char*)bytes_to_utf8((U8*)tmps, &len);
2248 sv_insert_flags(lsv, lvoff, lvlen, utf8, len, 0);
2252 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2255 if (!neglen) LvTARGLEN(sv) = newtarglen;
2256 if (negoff) LvTARGOFF(sv) += newtarglen - oldtarglen;
2262 Perl_magic_gettaint(pTHX_ SV *sv, MAGIC *mg)
2266 PERL_ARGS_ASSERT_MAGIC_GETTAINT;
2267 PERL_UNUSED_ARG(sv);
2268 #ifdef NO_TAINT_SUPPORT
2269 PERL_UNUSED_ARG(mg);
2272 TAINT_IF((PL_localizing != 1) && (mg->mg_len & 1));
2277 Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg)
2281 PERL_ARGS_ASSERT_MAGIC_SETTAINT;
2282 PERL_UNUSED_ARG(sv);
2284 /* update taint status */
2293 Perl_magic_getvec(pTHX_ SV *sv, MAGIC *mg)
2295 SV * const lsv = LvTARG(sv);
2297 PERL_ARGS_ASSERT_MAGIC_GETVEC;
2298 PERL_UNUSED_ARG(mg);
2300 sv_setuv(sv, do_vecget(lsv, LvTARGOFF(sv), LvTARGLEN(sv)));
2306 Perl_magic_setvec(pTHX_ SV *sv, MAGIC *mg)
2308 PERL_ARGS_ASSERT_MAGIC_SETVEC;
2309 PERL_UNUSED_ARG(mg);
2310 do_vecset(sv); /* XXX slurp this routine */
2315 Perl_defelem_target(pTHX_ SV *sv, MAGIC *mg)
2319 PERL_ARGS_ASSERT_DEFELEM_TARGET;
2320 if (!mg) mg = mg_find(sv, PERL_MAGIC_defelem);
2322 if (LvTARGLEN(sv)) {
2324 SV * const ahv = LvTARG(sv);
2325 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, FALSE, 0);
2329 else if (LvSTARGOFF(sv) >= 0) {
2330 AV *const av = MUTABLE_AV(LvTARG(sv));
2331 if (LvSTARGOFF(sv) <= AvFILL(av))
2333 if (SvRMAGICAL(av)) {
2334 SV * const * const svp = av_fetch(av, LvSTARGOFF(sv), 0);
2335 targ = svp ? *svp : NULL;
2338 targ = AvARRAY(av)[LvSTARGOFF(sv)];
2341 if (targ && (targ != &PL_sv_undef)) {
2342 /* somebody else defined it for us */
2343 SvREFCNT_dec(LvTARG(sv));
2344 LvTARG(sv) = SvREFCNT_inc_simple_NN(targ);
2346 SvREFCNT_dec(mg->mg_obj);
2348 mg->mg_flags &= ~MGf_REFCOUNTED;
2357 Perl_magic_getdefelem(pTHX_ SV *sv, MAGIC *mg)
2359 PERL_ARGS_ASSERT_MAGIC_GETDEFELEM;
2361 sv_setsv(sv, defelem_target(sv, mg));
2366 Perl_magic_setdefelem(pTHX_ SV *sv, MAGIC *mg)
2368 PERL_ARGS_ASSERT_MAGIC_SETDEFELEM;
2369 PERL_UNUSED_ARG(mg);
2373 sv_setsv(LvTARG(sv), sv);
2374 SvSETMAGIC(LvTARG(sv));
2380 Perl_vivify_defelem(pTHX_ SV *sv)
2386 PERL_ARGS_ASSERT_VIVIFY_DEFELEM;
2388 if (!LvTARGLEN(sv) || !(mg = mg_find(sv, PERL_MAGIC_defelem)))
2391 SV * const ahv = LvTARG(sv);
2392 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, TRUE, 0);
2395 if (!value || value == &PL_sv_undef)
2396 Perl_croak(aTHX_ PL_no_helem_sv, SVfARG(mg->mg_obj));
2398 else if (LvSTARGOFF(sv) < 0)
2399 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2401 AV *const av = MUTABLE_AV(LvTARG(sv));
2402 if ((I32)LvTARGLEN(sv) < 0 && LvSTARGOFF(sv) > AvFILL(av))
2403 LvTARG(sv) = NULL; /* array can't be extended */
2405 SV* const * const svp = av_fetch(av, LvSTARGOFF(sv), TRUE);
2406 if (!svp || !(value = *svp))
2407 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2410 SvREFCNT_inc_simple_void(value);
2411 SvREFCNT_dec(LvTARG(sv));
2414 SvREFCNT_dec(mg->mg_obj);
2416 mg->mg_flags &= ~MGf_REFCOUNTED;
2420 Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg)
2422 PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS;
2423 Perl_sv_kill_backrefs(aTHX_ sv, MUTABLE_AV(mg->mg_obj));
2428 Perl_magic_setmglob(pTHX_ SV *sv, MAGIC *mg)
2430 PERL_ARGS_ASSERT_MAGIC_SETMGLOB;
2431 PERL_UNUSED_CONTEXT;
2432 PERL_UNUSED_ARG(sv);
2438 Perl_magic_setuvar(pTHX_ SV *sv, MAGIC *mg)
2440 const struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
2442 PERL_ARGS_ASSERT_MAGIC_SETUVAR;
2444 if (uf && uf->uf_set)
2445 (*uf->uf_set)(aTHX_ uf->uf_index, sv);
2450 Perl_magic_setregexp(pTHX_ SV *sv, MAGIC *mg)
2452 const char type = mg->mg_type;
2454 PERL_ARGS_ASSERT_MAGIC_SETREGEXP;
2456 if (type == PERL_MAGIC_qr) {
2457 } else if (type == PERL_MAGIC_bm) {
2461 assert(type == PERL_MAGIC_fm);
2463 return sv_unmagic(sv, type);
2466 #ifdef USE_LOCALE_COLLATE
2468 Perl_magic_setcollxfrm(pTHX_ SV *sv, MAGIC *mg)
2470 PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM;
2473 * RenE<eacute> Descartes said "I think not."
2474 * and vanished with a faint plop.
2476 PERL_UNUSED_CONTEXT;
2477 PERL_UNUSED_ARG(sv);
2479 Safefree(mg->mg_ptr);
2485 #endif /* USE_LOCALE_COLLATE */
2487 /* Just clear the UTF-8 cache data. */
2489 Perl_magic_setutf8(pTHX_ SV *sv, MAGIC *mg)
2491 PERL_ARGS_ASSERT_MAGIC_SETUTF8;
2492 PERL_UNUSED_CONTEXT;
2493 PERL_UNUSED_ARG(sv);
2494 Safefree(mg->mg_ptr); /* The mg_ptr holds the pos cache. */
2496 mg->mg_len = -1; /* The mg_len holds the len cache. */
2501 Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
2511 PERL_ARGS_ASSERT_MAGIC_SET;
2515 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
2517 CALLREG_NUMBUF_STORE((REGEXP * const)rx,paren,sv);
2519 /* Croak with a READONLY error when a numbered match var is
2520 * set without a previous pattern match. Unless it's C<local $1>
2523 if (!PL_localizing) {
2524 Perl_croak_no_modify();
2530 switch (*mg->mg_ptr) {
2531 case '\001': /* ^A */
2532 if (SvOK(sv)) sv_copypv(PL_bodytarget, sv);
2533 else SvOK_off(PL_bodytarget);
2534 FmLINES(PL_bodytarget) = 0;
2535 if (SvPOK(PL_bodytarget)) {
2536 char *s = SvPVX(PL_bodytarget);
2537 while ( ((s = strchr(s, '\n'))) ) {
2538 FmLINES(PL_bodytarget)++;
2542 /* mg_set() has temporarily made sv non-magical */
2544 if ((tmg = mg_find(sv,PERL_MAGIC_taint)) && tmg->mg_len & 1)
2545 SvTAINTED_on(PL_bodytarget);
2547 SvTAINTED_off(PL_bodytarget);
2550 case '\003': /* ^C */
2551 PL_minus_c = cBOOL(SvIV(sv));
2554 case '\004': /* ^D */
2556 s = SvPV_nolen_const(sv);
2557 PL_debug = get_debug_opts(&s, 0) | DEBUG_TOP_FLAG;
2558 if (DEBUG_x_TEST || DEBUG_B_TEST)
2559 dump_all_perl(!DEBUG_B_TEST);
2561 PL_debug = (SvIV(sv)) | DEBUG_TOP_FLAG;
2564 case '\005': /* ^E */
2565 if (*(mg->mg_ptr+1) == '\0') {
2567 set_vaxc_errno(SvIV(sv));
2570 SetLastError( SvIV(sv) );
2573 os2_setsyserrno(SvIV(sv));
2575 /* will anyone ever use this? */
2576 SETERRNO(SvIV(sv), 4);
2581 else if (strEQ(mg->mg_ptr+1, "NCODING")) {
2582 SvREFCNT_dec(PL_encoding);
2583 if (SvOK(sv) || SvGMAGICAL(sv)) {
2584 PL_encoding = newSVsv(sv);
2591 case '\006': /* ^F */
2592 PL_maxsysfd = SvIV(sv);
2594 case '\010': /* ^H */
2595 PL_hints = SvIV(sv);
2597 case '\011': /* ^I */ /* NOT \t in EBCDIC */
2598 Safefree(PL_inplace);
2599 PL_inplace = SvOK(sv) ? savesvpv(sv) : NULL;
2601 case '\016': /* ^N */
2602 if (PL_curpm && (rx = PM_GETRE(PL_curpm))
2603 && (paren = RX_LASTCLOSEPAREN(rx))) goto setparen_got_rx;
2605 case '\017': /* ^O */
2606 if (*(mg->mg_ptr+1) == '\0') {
2607 Safefree(PL_osname);
2610 TAINT_PROPER("assigning to $^O");
2611 PL_osname = savesvpv(sv);
2614 else if (strEQ(mg->mg_ptr, "\017PEN")) {
2616 const char *const start = SvPV(sv, len);
2617 const char *out = (const char*)memchr(start, '\0', len);
2621 PL_compiling.cop_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2622 PL_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2624 /* Opening for input is more common than opening for output, so
2625 ensure that hints for input are sooner on linked list. */
2626 tmp = out ? newSVpvn_flags(out + 1, start + len - out - 1,
2628 : newSVpvs_flags("", SvUTF8(sv));
2629 (void)hv_stores(GvHV(PL_hintgv), "open>", tmp);
2632 tmp = newSVpvn_flags(start, out ? (STRLEN)(out - start) : len,
2634 (void)hv_stores(GvHV(PL_hintgv), "open<", tmp);
2638 case '\020': /* ^P */
2639 PL_perldb = SvIV(sv);
2640 if (PL_perldb && !PL_DBsingle)
2643 case '\024': /* ^T */
2645 PL_basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv));
2647 PL_basetime = (Time_t)SvIV(sv);
2650 case '\025': /* ^UTF8CACHE */
2651 if (strEQ(mg->mg_ptr+1, "TF8CACHE")) {
2652 PL_utf8cache = (signed char) sv_2iv(sv);
2655 case '\027': /* ^W & $^WARNING_BITS */
2656 if (*(mg->mg_ptr+1) == '\0') {
2657 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
2659 PL_dowarn = (PL_dowarn & ~G_WARN_ON)
2660 | (i ? G_WARN_ON : G_WARN_OFF) ;
2663 else if (strEQ(mg->mg_ptr+1, "ARNING_BITS")) {
2664 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
2666 PL_compiling.cop_warnings = pWARN_STD;
2671 int accumulate = 0 ;
2672 int any_fatals = 0 ;
2673 const char * const ptr = SvPV_const(sv, len) ;
2674 for (i = 0 ; i < len ; ++i) {
2675 accumulate |= ptr[i] ;
2676 any_fatals |= (ptr[i] & 0xAA) ;
2679 if (!specialWARN(PL_compiling.cop_warnings))
2680 PerlMemShared_free(PL_compiling.cop_warnings);
2681 PL_compiling.cop_warnings = pWARN_NONE;
2683 /* Yuck. I can't see how to abstract this: */
2685 ((STRLEN *)SvPV_nolen_const(sv)) - 1,
2689 if (!specialWARN(PL_compiling.cop_warnings))
2690 PerlMemShared_free(PL_compiling.cop_warnings);
2691 PL_compiling.cop_warnings = pWARN_ALL;
2692 PL_dowarn |= G_WARN_ONCE ;
2696 const char *const p = SvPV_const(sv, len);
2698 PL_compiling.cop_warnings
2699 = Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings,
2702 if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE))
2703 PL_dowarn |= G_WARN_ONCE ;
2711 if (PL_localizing) {
2712 if (PL_localizing == 1)
2713 SAVESPTR(PL_last_in_gv);
2715 else if (SvOK(sv) && GvIO(PL_last_in_gv))
2716 IoLINES(GvIOp(PL_last_in_gv)) = SvIV(sv);
2719 Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
2720 s = IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
2721 IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
2724 Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
2725 s = IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
2726 IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
2729 IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv));
2732 IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv));
2733 if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
2734 IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L;
2737 IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv));
2741 IO * const io = GvIO(PL_defoutgv);
2744 if ((SvIV(sv)) == 0)
2745 IoFLAGS(io) &= ~IOf_FLUSH;
2747 if (!(IoFLAGS(io) & IOf_FLUSH)) {
2748 PerlIO *ofp = IoOFP(io);
2750 (void)PerlIO_flush(ofp);
2751 IoFLAGS(io) |= IOf_FLUSH;
2760 SV *referent= SvRV(sv);
2761 const char *reftype= sv_reftype(referent, 0);
2762 /* XXX: dodgy type check: This leaves me feeling dirty, but the alternative
2763 * is to copy pretty much the entire sv_reftype() into this routine, or to do
2764 * a full string comparison on the return of sv_reftype() both of which
2765 * make me feel worse! NOTE, do not modify this comment without reviewing the
2766 * corresponding comment in sv_reftype(). - Yves */
2767 if (reftype[0] == 'S' || reftype[0] == 'L') {
2768 IV val= SvIV(referent);
2770 tmpsv= &PL_sv_undef;
2771 Perl_ck_warner(aTHX_ packWARN(WARN_DEPRECATED),
2772 "Setting $/ to a reference to %s as a form of slurp is deprecated, treating as undef",
2773 SvIV(SvRV(sv)) < 0 ? "a negative integer" : "zero"
2777 /* diag_listed_as: Setting $/ to %s reference is forbidden */
2778 Perl_croak(aTHX_ "Setting $/ to a%s %s reference is forbidden",
2779 *reftype == 'A' ? "n" : "", reftype);
2782 SvREFCNT_dec(PL_rs);
2783 PL_rs = newSVsv(tmpsv);
2787 SvREFCNT_dec(PL_ors_sv);
2789 PL_ors_sv = newSVsv(sv);
2797 Perl_croak(aTHX_ "Assigning non-zero to $[ is no longer possible");
2800 #ifdef COMPLEX_STATUS
2801 if (PL_localizing == 2) {
2802 SvUPGRADE(sv, SVt_PVLV);
2803 PL_statusvalue = LvTARGOFF(sv);
2804 PL_statusvalue_vms = LvTARGLEN(sv);
2808 #ifdef VMSISH_STATUS
2810 STATUS_NATIVE_CHILD_SET((U32)SvIV(sv));
2813 STATUS_UNIX_EXIT_SET(SvIV(sv));
2818 # define PERL_VMS_BANG vaxc$errno
2820 # define PERL_VMS_BANG 0
2822 #if defined(WIN32) && ! defined(UNDER_CE)
2823 SETERRNO(win32_get_errno(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0),
2824 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
2826 SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0,
2827 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
2833 /* XXX $< currently silently ignores failures */
2834 const Uid_t new_uid = SvUID(sv);
2835 PL_delaymagic_uid = new_uid;
2836 if (PL_delaymagic) {
2837 PL_delaymagic |= DM_RUID;
2838 break; /* don't do magic till later */
2841 PERL_UNUSED_RESULT(setruid(new_uid));
2844 PERL_UNUSED_RESULT(setreuid(new_uid, (Uid_t)-1));
2846 #ifdef HAS_SETRESUID
2847 PERL_UNUSED_RESULT(setresuid(new_uid, (Uid_t)-1, (Uid_t)-1));
2849 if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */
2851 /* workaround for Darwin's setuid peculiarity, cf [perl #24122] */
2852 if (new_uid != 0 && PerlProc_getuid() == 0)
2853 PERL_UNUSED_RESULT(PerlProc_setuid(0));
2855 PERL_UNUSED_RESULT(PerlProc_setuid(new_uid));
2857 Perl_croak(aTHX_ "setruid() not implemented");
2866 /* XXX $> currently silently ignores failures */
2867 const Uid_t new_euid = SvUID(sv);
2868 PL_delaymagic_euid = new_euid;
2869 if (PL_delaymagic) {
2870 PL_delaymagic |= DM_EUID;
2871 break; /* don't do magic till later */
2874 PERL_UNUSED_RESULT(seteuid(new_euid));
2877 PERL_UNUSED_RESULT(setreuid((Uid_t)-1, new_euid));
2879 #ifdef HAS_SETRESUID
2880 PERL_UNUSED_RESULT(setresuid((Uid_t)-1, new_euid, (Uid_t)-1));
2882 if (new_euid == PerlProc_getuid()) /* special case $> = $< */
2883 PERL_UNUSED_RESULT(PerlProc_setuid(new_euid));
2885 Perl_croak(aTHX_ "seteuid() not implemented");
2894 /* XXX $( currently silently ignores failures */
2895 const Gid_t new_gid = SvGID(sv);
2896 PL_delaymagic_gid = new_gid;
2897 if (PL_delaymagic) {
2898 PL_delaymagic |= DM_RGID;
2899 break; /* don't do magic till later */
2902 PERL_UNUSED_RESULT(setrgid(new_gid));
2905 PERL_UNUSED_RESULT(setregid(new_gid, (Gid_t)-1));
2907 #ifdef HAS_SETRESGID
2908 PERL_UNUSED_RESULT(setresgid(new_gid, (Gid_t)-1, (Gid_t) -1));
2910 if (new_gid == PerlProc_getegid()) /* special case $( = $) */
2911 PERL_UNUSED_RESULT(PerlProc_setgid(new_gid));
2913 Perl_croak(aTHX_ "setrgid() not implemented");
2922 /* XXX $) currently silently ignores failures */
2924 #ifdef HAS_SETGROUPS
2926 const char *p = SvPV_const(sv, len);
2927 Groups_t *gary = NULL;
2928 #ifdef _SC_NGROUPS_MAX
2929 int maxgrp = sysconf(_SC_NGROUPS_MAX);
2934 int maxgrp = NGROUPS;
2939 new_egid = (Gid_t)Atol(p);
2940 for (i = 0; i < maxgrp; ++i) {
2941 while (*p && !isSPACE(*p))
2948 Newx(gary, i + 1, Groups_t);
2950 Renew(gary, i + 1, Groups_t);
2951 gary[i] = (Groups_t)Atol(p);
2954 PERL_UNUSED_RESULT(setgroups(i, gary));
2957 #else /* HAS_SETGROUPS */
2958 new_egid = SvGID(sv);
2959 #endif /* HAS_SETGROUPS */
2960 PL_delaymagic_egid = new_egid;
2961 if (PL_delaymagic) {
2962 PL_delaymagic |= DM_EGID;
2963 break; /* don't do magic till later */
2966 PERL_UNUSED_RESULT(setegid(new_egid));
2969 PERL_UNUSED_RESULT(setregid((Gid_t)-1, new_egid));
2971 #ifdef HAS_SETRESGID
2972 PERL_UNUSED_RESULT(setresgid((Gid_t)-1, new_egid, (Gid_t)-1));
2974 if (new_egid == PerlProc_getgid()) /* special case $) = $( */
2975 PERL_UNUSED_RESULT(PerlProc_setgid(new_egid));
2977 Perl_croak(aTHX_ "setegid() not implemented");
2985 PL_chopset = SvPV_force(sv,len);
2988 /* Store the pid in mg->mg_obj so we can tell when a fork has
2989 occurred. mg->mg_obj points to *$ by default, so clear it. */
2990 if (isGV(mg->mg_obj)) {
2991 if (mg->mg_flags & MGf_REFCOUNTED) /* probably never true */
2992 SvREFCNT_dec(mg->mg_obj);
2993 mg->mg_flags |= MGf_REFCOUNTED;
2994 mg->mg_obj = newSViv((IV)PerlProc_getpid());
2996 else sv_setiv(mg->mg_obj, (IV)PerlProc_getpid());
2999 LOCK_DOLLARZERO_MUTEX;
3000 #ifdef HAS_SETPROCTITLE
3001 /* The BSDs don't show the argv[] in ps(1) output, they
3002 * show a string from the process struct and provide
3003 * the setproctitle() routine to manipulate that. */
3004 if (PL_origalen != 1) {
3005 s = SvPV_const(sv, len);
3006 # if __FreeBSD_version > 410001
3007 /* The leading "-" removes the "perl: " prefix,
3008 * but not the "(perl) suffix from the ps(1)
3009 * output, because that's what ps(1) shows if the
3010 * argv[] is modified. */
3011 setproctitle("-%s", s);
3012 # else /* old FreeBSDs, NetBSD, OpenBSD, anyBSD */
3013 /* This doesn't really work if you assume that
3014 * $0 = 'foobar'; will wipe out 'perl' from the $0
3015 * because in ps(1) output the result will be like
3016 * sprintf("perl: %s (perl)", s)
3017 * I guess this is a security feature:
3018 * one (a user process) cannot get rid of the original name.
3020 setproctitle("%s", s);
3023 #elif defined(__hpux) && defined(PSTAT_SETCMD)
3024 if (PL_origalen != 1) {
3026 s = SvPV_const(sv, len);
3027 un.pst_command = (char *)s;
3028 pstat(PSTAT_SETCMD, un, len, 0, 0);
3031 if (PL_origalen > 1) {
3032 /* PL_origalen is set in perl_parse(). */
3033 s = SvPV_force(sv,len);
3034 if (len >= (STRLEN)PL_origalen-1) {
3035 /* Longer than original, will be truncated. We assume that
3036 * PL_origalen bytes are available. */
3037 Copy(s, PL_origargv[0], PL_origalen-1, char);
3040 /* Shorter than original, will be padded. */
3042 /* Special case for Mac OS X: see [perl #38868] */
3045 /* Is the space counterintuitive? Yes.
3046 * (You were expecting \0?)
3047 * Does it work? Seems to. (In Linux 2.4.20 at least.)
3049 const int pad = ' ';
3051 Copy(s, PL_origargv[0], len, char);
3052 PL_origargv[0][len] = 0;
3053 memset(PL_origargv[0] + len + 1,
3054 pad, PL_origalen - len - 1);
3056 PL_origargv[0][PL_origalen-1] = 0;
3057 for (i = 1; i < PL_origargc; i++)
3059 #ifdef HAS_PRCTL_SET_NAME
3060 /* Set the legacy process name in addition to the POSIX name on Linux */
3061 if (prctl(PR_SET_NAME, (unsigned long)s, 0, 0, 0) != 0) {
3062 /* diag_listed_as: SKIPME */
3063 Perl_croak(aTHX_ "Can't set $0 with prctl(): %s", Strerror(errno));
3068 UNLOCK_DOLLARZERO_MUTEX;
3075 Perl_whichsig_sv(pTHX_ SV *sigsv)
3079 PERL_ARGS_ASSERT_WHICHSIG_SV;
3080 PERL_UNUSED_CONTEXT;
3081 sigpv = SvPV_const(sigsv, siglen);
3082 return whichsig_pvn(sigpv, siglen);
3086 Perl_whichsig_pv(pTHX_ const char *sig)
3088 PERL_ARGS_ASSERT_WHICHSIG_PV;
3089 PERL_UNUSED_CONTEXT;
3090 return whichsig_pvn(sig, strlen(sig));
3094 Perl_whichsig_pvn(pTHX_ const char *sig, STRLEN len)
3098 PERL_ARGS_ASSERT_WHICHSIG_PVN;
3099 PERL_UNUSED_CONTEXT;
3101 for (sigv = (char* const*)PL_sig_name; *sigv; sigv++)
3102 if (strlen(*sigv) == len && memEQ(sig,*sigv, len))
3103 return PL_sig_num[sigv - (char* const*)PL_sig_name];
3105 if (memEQs(sig, len, "CHLD"))
3109 if (memEQs(sig, len, "CLD"))
3116 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3117 Perl_sighandler(int sig, siginfo_t *sip, void *uap)
3119 Perl_sighandler(int sig)
3122 #ifdef PERL_GET_SIG_CONTEXT
3123 dTHXa(PERL_GET_SIG_CONTEXT);
3130 SV * const tSv = PL_Sv;
3134 XPV * const tXpv = PL_Xpv;
3135 I32 old_ss_ix = PL_savestack_ix;
3136 SV *errsv_save = NULL;
3139 if (!PL_psig_ptr[sig]) {
3140 PerlIO_printf(Perl_error_log, "Signal SIG%s received, but no signal handler set.\n",
3145 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3146 /* Max number of items pushed there is 3*n or 4. We cannot fix
3147 infinity, so we fix 4 (in fact 5): */
3148 if (PL_savestack_ix + 15 <= PL_savestack_max) {
3150 PL_savestack_ix += 5; /* Protect save in progress. */
3151 SAVEDESTRUCTOR_X(S_unwind_handler_stack, NULL);
3154 /* sv_2cv is too complicated, try a simpler variant first: */
3155 if (!SvROK(PL_psig_ptr[sig]) || !(cv = MUTABLE_CV(SvRV(PL_psig_ptr[sig])))
3156 || SvTYPE(cv) != SVt_PVCV) {
3158 cv = sv_2cv(PL_psig_ptr[sig], &st, &gv, GV_ADD);
3161 if (!cv || !CvROOT(cv)) {
3162 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "SIG%s handler \"%s\" not defined.\n",
3163 PL_sig_name[sig], (gv ? GvENAME(gv)
3170 sv = PL_psig_name[sig]
3171 ? SvREFCNT_inc_NN(PL_psig_name[sig])
3172 : newSVpv(PL_sig_name[sig],0);
3176 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3177 /* make sure our assumption about the size of the SAVEs are correct:
3178 * 3 for SAVEDESTRUCTOR_X, 2 for SAVEFREESV */
3179 assert(old_ss_ix + 2 + ((flags & 1) ? 3+5 : 0) == PL_savestack_ix);
3182 PUSHSTACKi(PERLSI_SIGNAL);
3185 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3187 struct sigaction oact;
3189 if (sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) {
3192 SV *rv = newRV_noinc(MUTABLE_SV(sih));
3193 /* The siginfo fields signo, code, errno, pid, uid,
3194 * addr, status, and band are defined by POSIX/SUSv3. */
3195 (void)hv_stores(sih, "signo", newSViv(sip->si_signo));
3196 (void)hv_stores(sih, "code", newSViv(sip->si_code));
3197 #if 0 /* XXX TODO: Configure scan for the existence of these, but even that does not help if the SA_SIGINFO is not implemented according to the spec. */
3198 hv_stores(sih, "errno", newSViv(sip->si_errno));
3199 hv_stores(sih, "status", newSViv(sip->si_status));
3200 hv_stores(sih, "uid", newSViv(sip->si_uid));
3201 hv_stores(sih, "pid", newSViv(sip->si_pid));
3202 hv_stores(sih, "addr", newSVuv(PTR2UV(sip->si_addr)));
3203 hv_stores(sih, "band", newSViv(sip->si_band));
3207 mPUSHp((char *)sip, sizeof(*sip));
3215 errsv_save = newSVsv(ERRSV);
3217 call_sv(MUTABLE_SV(cv), G_DISCARD|G_EVAL);
3221 SV * const errsv = ERRSV;
3222 if (SvTRUE_NN(errsv)) {
3223 SvREFCNT_dec(errsv_save);
3225 /* Handler "died", for example to get out of a restart-able read().
3226 * Before we re-do that on its behalf re-enable the signal which was
3227 * blocked by the system when we entered.
3229 #ifdef HAS_SIGPROCMASK
3230 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3236 sigaddset(&set,sig);
3237 sigprocmask(SIG_UNBLOCK, &set, NULL);
3240 /* Not clear if this will work */
3241 (void)rsignal(sig, SIG_IGN);
3242 (void)rsignal(sig, PL_csighandlerp);
3244 #endif /* !PERL_MICRO */
3248 sv_setsv(errsv, errsv_save);
3249 SvREFCNT_dec(errsv_save);
3254 /* pop any of SAVEFREESV, SAVEDESTRUCTOR_X and "save in progress" */
3255 PL_savestack_ix = old_ss_ix;
3257 SvREFCNT_dec_NN(sv);
3258 PL_op = myop; /* Apparently not needed... */
3260 PL_Sv = tSv; /* Restore global temporaries. */
3267 S_restore_magic(pTHX_ const void *p)
3270 MGS* const mgs = SSPTR(PTR2IV(p), MGS*);
3271 SV* const sv = mgs->mgs_sv;
3277 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3278 SvTEMP_off(sv); /* if it's still magical, this value isn't temporary */
3279 #ifdef PERL_OLD_COPY_ON_WRITE
3280 /* While magic was saved (and off) sv_setsv may well have seen
3281 this SV as a prime candidate for COW. */
3283 sv_force_normal_flags(sv, 0);
3285 if (mgs->mgs_readonly)
3287 if (mgs->mgs_magical)
3288 SvFLAGS(sv) |= mgs->mgs_magical;
3293 bumped = mgs->mgs_bumped;
3294 mgs->mgs_sv = NULL; /* mark the MGS structure as restored */
3296 /* If we're still on top of the stack, pop us off. (That condition
3297 * will be satisfied if restore_magic was called explicitly, but *not*
3298 * if it's being called via leave_scope.)
3299 * The reason for doing this is that otherwise, things like sv_2cv()
3300 * may leave alloc gunk on the savestack, and some code
3301 * (e.g. sighandler) doesn't expect that...
3303 if (PL_savestack_ix == mgs->mgs_ss_ix)
3305 UV popval = SSPOPUV;
3306 assert(popval == SAVEt_DESTRUCTOR_X);
3307 PL_savestack_ix -= 2;
3309 assert((popval & SAVE_MASK) == SAVEt_ALLOC);
3310 PL_savestack_ix -= popval >> SAVE_TIGHT_SHIFT;
3313 if (SvREFCNT(sv) == 1) {
3314 /* We hold the last reference to this SV, which implies that the
3315 SV was deleted as a side effect of the routines we called.
3316 So artificially keep it alive a bit longer.
3317 We avoid turning on the TEMP flag, which can cause the SV's
3318 buffer to get stolen (and maybe other stuff). */
3323 SvREFCNT_dec_NN(sv); /* undo the inc in S_save_magic() */
3327 /* clean up the mess created by Perl_sighandler().
3328 * Note that this is only called during an exit in a signal handler;
3329 * a die is trapped by the call_sv() and the SAVEDESTRUCTOR_X manually
3333 S_unwind_handler_stack(pTHX_ const void *p)
3338 PL_savestack_ix -= 5; /* Unprotect save in progress. */
3342 =for apidoc magic_sethint
3344 Triggered by a store to %^H, records the key/value pair to
3345 C<PL_compiling.cop_hints_hash>. It is assumed that hints aren't storing
3346 anything that would need a deep copy. Maybe we should warn if we find a
3352 Perl_magic_sethint(pTHX_ SV *sv, MAGIC *mg)
3355 SV *key = (mg->mg_len == HEf_SVKEY) ? MUTABLE_SV(mg->mg_ptr)
3356 : newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
3358 PERL_ARGS_ASSERT_MAGIC_SETHINT;
3360 /* mg->mg_obj isn't being used. If needed, it would be possible to store
3361 an alternative leaf in there, with PL_compiling.cop_hints being used if
3362 it's NULL. If needed for threads, the alternative could lock a mutex,
3363 or take other more complex action. */
3365 /* Something changed in %^H, so it will need to be restored on scope exit.
3366 Doing this here saves a lot of doing it manually in perl code (and
3367 forgetting to do it, and consequent subtle errors. */
3368 PL_hints |= HINT_LOCALIZE_HH;
3369 CopHINTHASH_set(&PL_compiling,
3370 cophh_store_sv(CopHINTHASH_get(&PL_compiling), key, 0, sv, 0));
3375 =for apidoc magic_clearhint
3377 Triggered by a delete from %^H, records the key to
3378 C<PL_compiling.cop_hints_hash>.
3383 Perl_magic_clearhint(pTHX_ SV *sv, MAGIC *mg)
3387 PERL_ARGS_ASSERT_MAGIC_CLEARHINT;
3388 PERL_UNUSED_ARG(sv);
3390 PL_hints |= HINT_LOCALIZE_HH;
3391 CopHINTHASH_set(&PL_compiling,
3392 mg->mg_len == HEf_SVKEY
3393 ? cophh_delete_sv(CopHINTHASH_get(&PL_compiling),
3394 MUTABLE_SV(mg->mg_ptr), 0, 0)
3395 : cophh_delete_pvn(CopHINTHASH_get(&PL_compiling),
3396 mg->mg_ptr, mg->mg_len, 0, 0));
3401 =for apidoc magic_clearhints
3403 Triggered by clearing %^H, resets C<PL_compiling.cop_hints_hash>.
3408 Perl_magic_clearhints(pTHX_ SV *sv, MAGIC *mg)
3410 PERL_ARGS_ASSERT_MAGIC_CLEARHINTS;
3411 PERL_UNUSED_ARG(sv);
3412 PERL_UNUSED_ARG(mg);
3413 cophh_free(CopHINTHASH_get(&PL_compiling));
3414 CopHINTHASH_set(&PL_compiling, cophh_new_empty());
3419 Perl_magic_copycallchecker(pTHX_ SV *sv, MAGIC *mg, SV *nsv,
3420 const char *name, I32 namlen)
3424 PERL_ARGS_ASSERT_MAGIC_COPYCALLCHECKER;
3425 PERL_UNUSED_ARG(sv);
3426 PERL_UNUSED_ARG(name);
3427 PERL_UNUSED_ARG(namlen);
3429 sv_magic(nsv, &PL_sv_undef, mg->mg_type, NULL, 0);
3430 nmg = mg_find(nsv, mg->mg_type);
3432 if (nmg->mg_flags & MGf_REFCOUNTED) SvREFCNT_dec(nmg->mg_obj);
3433 nmg->mg_ptr = mg->mg_ptr;
3434 nmg->mg_obj = SvREFCNT_inc_simple(mg->mg_obj);
3435 nmg->mg_flags |= MGf_REFCOUNTED;
3441 * c-indentation-style: bsd
3443 * indent-tabs-mode: nil
3446 * ex: set ts=8 sts=4 sw=4 et: