MM_Unix patch for use under CVS
[p5sagit/p5-mst-13.2.git] / gv.c
diff --git a/gv.c b/gv.c
index 98526ca..8bb1f10 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -285,8 +285,19 @@ I32 autoload;
     }
     else if (autoload) {
        CV* cv = GvCV(gv);
-       if (!cv || (!CvROOT(cv) && !CvXSUB(cv))) {
-           GV* autogv = gv_autoload4(GvSTASH(gv), name, nend - name, TRUE);
+       if (!CvROOT(cv) && !CvXSUB(cv)) {
+           GV* stubgv;
+           GV* autogv;
+
+           if (CvANON(cv))
+               stubgv = gv;
+           else {
+               stubgv = CvGV(cv);
+               if (GvCV(stubgv) != cv)         /* orphaned import */
+                   stubgv = gv;
+           }
+           autogv = gv_autoload4(GvSTASH(stubgv),
+                                 GvNAME(stubgv), GvNAMELEN(stubgv), TRUE);
            if (autogv)
                gv = autogv;
        }
@@ -1333,7 +1344,7 @@ int flags;
     EXTEND(sp, notfound + 5);
     PUSHs(lr>0? right: left);
     PUSHs(lr>0? left: right);
-    PUSHs( assign ? &sv_undef : boolSV(lr>0) );
+    PUSHs( lr > 0 ? &sv_yes : ( assign ? &sv_undef : &sv_no ));
     if (notfound) {
       PUSHs( sv_2mortal(newSVpv((char *)AMG_names[method + assignshift],0)) );
     }