Add missing syms to global.sym; update magic doc
[p5sagit/p5-mst-13.2.git] / pp.c
diff --git a/pp.c b/pp.c
index e071ee3..d7725b8 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -248,8 +248,11 @@ PP(pp_rv2cv)
     /* We usually try to add a non-existent subroutine in case of AUTOLOAD. */
     /* (But not in defined().) */
     CV *cv = sv_2cv(TOPs, &stash, &gv, !(op->op_flags & OPf_SPECIAL));
-
-    if (!cv)
+    if (cv) {
+       if (CvCLONE(cv))
+           cv = (CV*)sv_2mortal((SV*)cv_clone(cv));
+    }
+    else
        cv = (CV*)&sv_undef;
     SETs((SV*)cv);
     RETURN;
@@ -619,7 +622,7 @@ PP(pp_pow)
 {
     dSP; dATARGET; tryAMAGICbin(pow,opASSIGN); 
     {
-      dPOPTOPnnrl_ul;
+      dPOPTOPnnrl;
       SETn( pow( left, right) );
       RETURN;
     }
@@ -629,7 +632,7 @@ PP(pp_multiply)
 {
     dSP; dATARGET; tryAMAGICbin(mult,opASSIGN); 
     {
-      dPOPTOPnnrl_ul;
+      dPOPTOPnnrl;
       SETn( left * right );
       RETURN;
     }
@@ -639,7 +642,7 @@ PP(pp_divide)
 {
     dSP; dATARGET; tryAMAGICbin(div,opASSIGN); 
     {
-      dPOPPOPnnrl_ul;
+      dPOPPOPnnrl;
       double value;
       if (right == 0.0)
        DIE("Illegal division by zero");
@@ -681,7 +684,7 @@ PP(pp_modulo)
          SETi( left % right );
       }
       else {
-       register double left = USE_LEFT(TOPs) ? SvNV(TOPs) : 0.0;
+       register double left = TOPn;
        if (left < 0.0)
          SETu( (right - (U_V(-left) - 1) % right) - 1 );
        else