Integrate from ansi branch to mainline.
[p5sagit/p5-mst-13.2.git] / sv.c
diff --git a/sv.c b/sv.c
index bcb87c2..9a7f075 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -2355,7 +2355,7 @@ sv_magic(register SV *sv, SV *obj, int how, char *name, I32 namlen)
     mg->mg_moremagic = SvMAGIC(sv);
 
     SvMAGIC(sv) = mg;
-    if (!obj || obj == sv || how == '#')
+    if (!obj || obj == sv || how == '#' || how == 'r')
        mg->mg_obj = obj;
     else {
        dTHR;
@@ -2435,6 +2435,9 @@ sv_magic(register SV *sv, SV *obj, int how, char *name, I32 namlen)
     case 'q':
        mg->mg_virtual = &vtbl_packelem;
        break;
+    case 'r':
+       mg->mg_virtual = &vtbl_regexp;
+       break;
     case 'S':
        mg->mg_virtual = &vtbl_sig;
        break;
@@ -2627,8 +2630,7 @@ sv_clear(register SV *sv)
     if (SvOBJECT(sv)) {
        dTHR;
        if (defstash) {         /* Still have a symbol table? */
-           dTHR;
-           dSP;
+           djSP;
            GV* destructor;
 
            ENTER;
@@ -3217,6 +3219,10 @@ screamer2:
        }
     }
 
+#ifdef WIN32
+    win32_strip_return(sv);
+#endif
+
     return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
 }
 
@@ -3498,9 +3504,10 @@ newRV(SV *ref)
     return sv;
 }
 
-#ifdef CRIPPLED_CC
+
+
 SV *
-newRV_noinc(SV *ref)
+Perl_newRV_noinc(SV *ref)
 {
     register SV *sv;
 
@@ -3508,7 +3515,6 @@ newRV_noinc(SV *ref)
     SvREFCNT_dec(ref);
     return sv;
 }
-#endif /* CRIPPLED_CC */
 
 /* make an exact duplicate of old */
 
@@ -3694,20 +3700,20 @@ sv_2cv(SV *sv, HV **st, GV **gvp, I32 lref)
     }
 }
 
-#ifndef SvTRUE
 I32
-SvTRUE(register SV *sv)
+sv_true(register SV *sv)
 {
+    dTHR;
     if (!sv)
        return 0;
     if (SvGMAGICAL(sv))
        mg_get(sv);
     if (SvPOK(sv)) {
-       register XPV* Xpv;
-       if ((Xpv = (XPV*)SvANY(sv)) &&
-               (*Xpv->xpv_pv > '0' ||
-               Xpv->xpv_cur > 1 ||
-               (Xpv->xpv_cur && *Xpv->xpv_pv != '0')))
+       register XPV* tXpv;
+       if ((tXpv = (XPV*)SvANY(sv)) &&
+               (*tXpv->xpv_pv > '0' ||
+               tXpv->xpv_cur > 1 ||
+               (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
            return 1;
        else
            return 0;
@@ -3723,39 +3729,31 @@ SvTRUE(register SV *sv)
        }
     }
 }
-#endif /* !SvTRUE */
 
-#ifndef SvIV
 IV
-SvIV(register SV *sv)
+sv_iv(register SV *sv)
 {
     if (SvIOK(sv))
        return SvIVX(sv);
     return sv_2iv(sv);
 }
-#endif /* !SvIV */
 
-#ifndef SvUV
 UV
-SvUV(register SV *sv)
+sv_uv(register SV *sv)
 {
     if (SvIOK(sv))
        return SvUVX(sv);
     return sv_2uv(sv);
 }
-#endif /* !SvUV */
 
-#ifndef SvNV
 double
-SvNV(register SV *sv)
+sv_nv(register SV *sv)
 {
     if (SvNOK(sv))
        return SvNVX(sv);
     return sv_2nv(sv);
 }
-#endif /* !SvNV */
 
-#ifdef CRIPPLED_CC
 char *
 sv_pvn(SV *sv, STRLEN *lp)
 {
@@ -3765,7 +3763,6 @@ sv_pvn(SV *sv, STRLEN *lp)
     }
     return sv_2pv(sv, lp);
 }
-#endif
 
 char *
 sv_pvn_force(SV *sv, STRLEN *lp)
@@ -4667,6 +4664,10 @@ sv_dump(SV *sv)
                sv_catpv(d, " ),");
            }
        }
+    case SVt_PVBM:
+       if (SvTAIL(sv)) sv_catpv(d, "TAIL,");
+       if (SvCOMPILED(sv))     sv_catpv(d, "COMPILED,");
+       break;
     }
 
     if (*(SvEND(d) - 1) == ',')
@@ -4863,3 +4864,6 @@ sv_dump(SV *sv)
 }
 #endif
 
+
+
+