Re: [PATCH for _66] Makefile.SH problem on dos/djgpp
[p5sagit/p5-mst-13.2.git] / pp_hot.c
index 9fbd176..dd5ef14 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -1027,8 +1027,11 @@ do_readline(void)
                    IoFLAGS(io) &= ~IOf_START;
                    IoLINES(io) = 0;
                    if (av_len(GvAVn(last_in_gv)) < 0) {
-                       SV *tmpstr = newSVpv("-", 1); /* assume stdin */
-                       av_push(GvAVn(last_in_gv), tmpstr);
+                       do_open(last_in_gv,"-",1,FALSE,0,0,Nullfp);
+                       sv_setpvn(GvSV(last_in_gv), "-", 1);
+                       SvSETMAGIC(GvSV(last_in_gv));
+                       fp = IoIFP(io);
+                       goto have_fp;
                    }
                }
                fp = nextargv(last_in_gv);
@@ -1176,6 +1179,7 @@ do_readline(void)
        }
        RETURN;
     }
+  have_fp:
     if (gimme == G_SCALAR) {
        sv = TARG;
        if (SvROK(sv))
@@ -1774,9 +1778,19 @@ PP(pp_leavesub)
     TAINT_NOT;
     if (gimme == G_SCALAR) {
        MARK = newsp + 1;
-       if (MARK <= SP)
-           *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
-       else {
+       if (MARK <= SP) {
+           if (cxsub.cv && CvDEPTH(cxsub.cv) > 1) {
+               if (SvTEMP(TOPs)) {
+                   *MARK = SvREFCNT_inc(TOPs);
+                   FREETMPS;
+                   sv_2mortal(*MARK);
+               } else {
+                   FREETMPS;
+                   *MARK = sv_mortalcopy(TOPs);
+               }
+           } else
+               *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
+       } else {
            MEXTEND(MARK, 0);
            *MARK = &sv_undef;
        }