Change to use $^O and &Cwd:cwd
[p5sagit/p5-mst-13.2.git] / pp_hot.c
index 4b885d4..63362c4 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -226,20 +226,8 @@ PP(pp_padsv)
     if (op->op_flags & OPf_MOD) {
        if (op->op_private & OPpLVAL_INTRO)
            SAVECLEARSV(curpad[op->op_targ]);
-        else if (op->op_private & (OPpDEREF_HV|OPpDEREF_AV)) {
-           SV* sv = curpad[op->op_targ];
-            if (SvGMAGICAL(sv))
-                mg_get(sv);
-            if (!SvOK(sv)) {
-                if (SvREADONLY(sv))
-                    croak(no_modify);
-                (void)SvUPGRADE(sv, SVt_RV);
-                SvRV(sv) = (op->op_private & OPpDEREF_HV ?
-                            (SV*)newHV() : (SV*)newAV());
-                SvROK_on(sv);
-                SvSETMAGIC(sv);
-            }
-        }
+        else if (op->op_private & (OPpDEREF_HV|OPpDEREF_AV))
+           provide_ref(op, curpad[op->op_targ]);
     }
     RETURN;
 }
@@ -385,7 +373,7 @@ PP(pp_print)
                    goto just_say_no;
 
            if (IoFLAGS(io) & IOf_FLUSH)
-               if (fflush(fp) == EOF)
+               if (Fflush(fp) == EOF)
                    goto just_say_no;
        }
     }
@@ -1218,18 +1206,8 @@ PP(pp_helem)
            DIE(no_helem, key);
        if (op->op_private & OPpLVAL_INTRO)
            save_svref(svp);
-       else if (op->op_private & (OPpDEREF_HV|OPpDEREF_AV)) {
-           SV* sv = *svp;
-           if (SvGMAGICAL(sv))
-               mg_get(sv);
-           if (!SvOK(sv)) {
-               (void)SvUPGRADE(sv, SVt_RV);
-               SvRV(sv) = (op->op_private & OPpDEREF_HV ?
-                           (SV*)newHV() : (SV*)newAV());
-               SvROK_on(sv);
-               SvSETMAGIC(sv);
-           }
-       }
+       else if (op->op_private & (OPpDEREF_HV|OPpDEREF_AV))
+           provide_ref(op, *svp);
     }
     PUSHs(svp ? *svp : &sv_undef);
     RETURN;
@@ -1742,8 +1720,10 @@ PP(pp_entersub)
     if ((op->op_private & OPpENTERSUB_DB) && !CvXSUB(cv)) {
        sv = GvSV(DBsub);
        save_item(sv);
-       if (SvFLAGS(cv) & (SVpcv_ANON | SVpcv_CLONED)) /* Is GV potentially non-unique? */
+       if (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED)) {
+           /* GV is potentially non-unique */
            sv_setsv(sv, newRV((SV*)cv));
+       }
        else {
            gv = CvGV(cv);
            gv_efullname(sv,gv);
@@ -1898,23 +1878,31 @@ PP(pp_aelem)
            DIE(no_aelem, elem);
        if (op->op_private & OPpLVAL_INTRO)
            save_svref(svp);
-       else if (op->op_private & (OPpDEREF_HV|OPpDEREF_AV)) {
-           SV* sv = *svp;
-           if (SvGMAGICAL(sv))
-               mg_get(sv);
-           if (!SvOK(sv)) {
-               (void)SvUPGRADE(sv, SVt_RV);
-               SvRV(sv) = (op->op_private & OPpDEREF_HV ?
-                           (SV*)newHV() : (SV*)newAV());
-               SvROK_on(sv);
-               SvSETMAGIC(sv);
-           }
-       }
+       else if (op->op_private & (OPpDEREF_HV|OPpDEREF_AV))
+           provide_ref(op, *svp);
     }
     PUSHs(svp ? *svp : &sv_undef);
     RETURN;
 }
 
+void
+provide_ref(op, sv)
+OP* op;
+SV* sv;
+{
+    if (SvGMAGICAL(sv))
+       mg_get(sv);
+    if (!SvOK(sv)) {
+       if (SvREADONLY(sv))
+           croak(no_modify);
+       (void)SvUPGRADE(sv, SVt_RV);
+       SvRV(sv) = (op->op_private & OPpDEREF_HV ?
+                   (SV*)newHV() : (SV*)newAV());
+       SvROK_on(sv);
+       SvSETMAGIC(sv);
+    }
+}
+
 PP(pp_method)
 {
     dSP;