X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=mg.c;h=004f3193f88d404b06f84d36def777a6af6d2928;hb=c696a6a43b0b5a16f820f8a91db4e187fc9ac45b;hp=8cfe86d96dd3ffcb2319a567290c81a18c3b4cb4;hpb=8e6b4db615e712f1ce0853278b06e6a52c1c0df2;p=p5sagit%2Fp5-mst-13.2.git diff --git a/mg.c b/mg.c index 8cfe86d..004f319 100644 --- a/mg.c +++ b/mg.c @@ -100,7 +100,7 @@ S_save_magic(pTHX_ I32 mgs_ix, SV *sv) SvMAGICAL_off(sv); SvREADONLY_off(sv); - SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT; + SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT; } /* @@ -354,7 +354,7 @@ Perl_mg_find(pTHX_ const SV *sv, int type) return mg; } } - return 0; + return NULL; } /* @@ -641,9 +641,9 @@ Perl_magic_len(pTHX_ SV *sv, MAGIC *mg) } #define SvRTRIM(sv) STMT_START { \ - STRLEN len = SvCUR(sv); \ - char * const p = SvPVX(sv); \ - if (p) { \ + if (SvPOK(sv)) { \ + STRLEN len = SvCUR(sv); \ + char * const p = SvPVX(sv); \ while (len > 0 && isSPACE(p[len-1])) \ --len; \ SvCUR_set(sv, len); \ @@ -680,15 +680,14 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) break; case '\005': /* ^E */ if (nextchar == '\0') { -#ifdef MACOS_TRADITIONAL +#if defined(MACOS_TRADITIONAL) { char msg[256]; sv_setnv(sv,(double)gMacPerl_OSErr); sv_setpv(sv, gMacPerl_OSErr ? GetSysErrText(gMacPerl_OSErr, msg) : ""); } -#else -#ifdef VMS +#elif defined(VMS) { # include # include @@ -700,8 +699,7 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) else sv_setpvn(sv,"",0); } -#else -#ifdef OS2 +#elif defined(OS2) if (!(_emx_env & 0x200)) { /* Under DOS */ sv_setnv(sv, (NV)errno); sv_setpv(sv, errno ? Strerror(errno) : ""); @@ -714,8 +712,7 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) sv_setnv(sv, (NV)Perl_rc); sv_setpv(sv, os2error(Perl_rc)); } -#else -#ifdef WIN32 +#elif defined(WIN32) { DWORD dwErr = GetLastError(); sv_setnv(sv, (NV)dwErr); @@ -734,9 +731,6 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) errno = saveerrno; } #endif -#endif -#endif -#endif SvRTRIM(sv); SvNOK_on(sv); /* what a wonderful hack! */ } @@ -849,8 +843,7 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) { i = t1 - s1; s = rx->subbeg + s1; - if (!rx->subbeg) - break; + assert(rx->subbeg); getrx: if (i >= 0) { @@ -1082,7 +1075,7 @@ Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg) return 0; } } - if ((cp = strchr(elt, ':')) != Nullch) + if ((cp = strchr(elt, ':')) != NULL) *cp = '\0'; if (my_trnlnm(elt, eltbuf, j++)) elt = eltbuf; @@ -1121,7 +1114,7 @@ int Perl_magic_clearenv(pTHX_ SV *sv, MAGIC *mg) { PERL_UNUSED_ARG(sv); - my_setenv(MgPV_nolen_const(mg),Nullch); + my_setenv(MgPV_nolen_const(mg),NULL); return 0; } @@ -1844,20 +1837,6 @@ Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg) } int -Perl_magic_getglob(pTHX_ SV *sv, MAGIC *mg) -{ - PERL_UNUSED_ARG(mg); - if (SvFAKE(sv)) { /* FAKE globs can get coerced */ - SvFAKE_off(sv); - gv_efullname3(sv,((GV*)sv), "*"); - SvFAKE_on(sv); - } - else - gv_efullname3(sv,((GV*)sv), "*"); /* a gv value, be nice */ - return 0; -} - -int Perl_magic_setglob(pTHX_ SV *sv, MAGIC *mg) { GV* gv; @@ -1865,6 +1844,12 @@ Perl_magic_setglob(pTHX_ SV *sv, MAGIC *mg) if (!SvOK(sv)) return 0; + if (SvFLAGS(sv) & SVp_SCREAM + && (SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVGV)) { + /* We're actually already a typeglob, so don't need the stuff below. + */ + return 0; + } gv = gv_fetchsv(sv, GV_ADD, SVt_PVGV); if (sv == (SV*)gv) return 0; @@ -1980,7 +1965,7 @@ int Perl_magic_getdefelem(pTHX_ SV *sv, MAGIC *mg) { dVAR; - SV *targ = Nullsv; + SV *targ = NULL; if (LvTARGLEN(sv)) { if (mg->mg_obj) { SV * const ahv = LvTARG(sv); @@ -1999,7 +1984,7 @@ Perl_magic_getdefelem(pTHX_ SV *sv, MAGIC *mg) LvTARG(sv) = SvREFCNT_inc(targ); LvTARGLEN(sv) = 0; SvREFCNT_dec(mg->mg_obj); - mg->mg_obj = Nullsv; + mg->mg_obj = NULL; mg->mg_flags &= ~MGf_REFCOUNTED; } } @@ -2027,7 +2012,7 @@ Perl_vivify_defelem(pTHX_ SV *sv) { dVAR; MAGIC *mg; - SV *value = Nullsv; + SV *value = NULL; if (!LvTARGLEN(sv) || !(mg = mg_find(sv, PERL_MAGIC_defelem))) return; @@ -2042,7 +2027,7 @@ Perl_vivify_defelem(pTHX_ SV *sv) else { AV* const av = (AV*)LvTARG(sv); if ((I32)LvTARGLEN(sv) < 0 && (I32)LvTARGOFF(sv) > AvFILL(av)) - LvTARG(sv) = Nullsv; /* array can't be extended */ + LvTARG(sv) = NULL; /* array can't be extended */ else { SV** const svp = av_fetch(av, LvTARGOFF(sv), TRUE); if (!svp || (value = *svp) == &PL_sv_undef) @@ -2054,7 +2039,7 @@ Perl_vivify_defelem(pTHX_ SV *sv) LvTARG(sv) = value; LvTARGLEN(sv) = 0; SvREFCNT_dec(mg->mg_obj); - mg->mg_obj = Nullsv; + mg->mg_obj = NULL; mg->mg_flags &= ~MGf_REFCOUNTED; } @@ -2200,7 +2185,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) PL_encoding = newSVsv(sv); } else { - PL_encoding = Nullsv; + PL_encoding = NULL; } } break; @@ -2212,12 +2197,12 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) break; case '\011': /* ^I */ /* NOT \t in EBCDIC */ Safefree(PL_inplace); - PL_inplace = SvOK(sv) ? savesvpv(sv) : Nullch; + PL_inplace = SvOK(sv) ? savesvpv(sv) : NULL; break; case '\017': /* ^O */ if (*(mg->mg_ptr+1) == '\0') { Safefree(PL_osname); - PL_osname = Nullch; + PL_osname = NULL; if (SvOK(sv)) { TAINT_PROPER("assigning to $^O"); PL_osname = savesvpv(sv); @@ -2342,7 +2327,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) PL_ors_sv = newSVsv(sv); } else { - PL_ors_sv = Nullsv; + PL_ors_sv = NULL; } break; case ',': @@ -2352,7 +2337,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) PL_ofs_sv = newSVsv(sv); } else { - PL_ofs_sv = Nullsv; + PL_ofs_sv = NULL; } break; case '[': @@ -2626,10 +2611,10 @@ Perl_sighandler(int sig) dTHX; #endif dSP; - GV *gv = Nullgv; - SV *sv = Nullsv; + GV *gv = NULL; + SV *sv = NULL; SV * const tSv = PL_Sv; - CV *cv = Nullcv; + CV *cv = NULL; OP *myop = PL_op; U32 flags = 0; XPV * const tXpv = PL_Xpv; @@ -2744,7 +2729,7 @@ Perl_sighandler(int sig) (void)rsignal(sig, PL_csighandlerp); #endif #endif /* !PERL_MICRO */ - Perl_die(aTHX_ Nullch); + Perl_die(aTHX_ NULL); } cleanup: if (flags & 1)