valist vs va_list typo
[p5sagit/p5-mst-13.2.git] / doop.c
diff --git a/doop.c b/doop.c
index c6270e4..4e5866e 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -1,6 +1,6 @@
 /*    doop.c
  *
- *    Copyright (c) 1991-1997, Larry Wall
+ *    Copyright (c) 1991-1999, Larry Wall
  *
  *    You may distribute under the terms of either the GNU General Public
  *    License or the Artistic License, as specified in the README file.
 #include <signal.h>
 #endif
 
-static I32
+#ifndef PERL_OBJECT
+static I32 do_trans_CC_simple _((SV *sv));
+static I32 do_trans_CC_count _((SV *sv));
+static I32 do_trans_CC_complex _((SV *sv));
+static I32 do_trans_UU_simple _((SV *sv));
+static I32 do_trans_UU_count _((SV *sv));
+static I32 do_trans_UU_complex _((SV *sv));
+static I32 do_trans_UC_simple _((SV *sv));
+static I32 do_trans_CU_simple _((SV *sv));
+static I32 do_trans_UC_trivial _((SV *sv));
+static I32 do_trans_CU_trivial _((SV *sv));
+#endif
+
+STATIC I32
 do_trans_CC_simple(SV *sv)
 {
     dTHR;
@@ -48,7 +61,7 @@ do_trans_CC_simple(SV *sv)
     return matches;
 }
 
-static I32
+STATIC I32
 do_trans_CC_count(SV *sv)
 {
     dTHR;
@@ -74,7 +87,7 @@ do_trans_CC_count(SV *sv)
     return matches;
 }
 
-static I32
+STATIC I32
 do_trans_CC_complex(SV *sv)
 {
     dTHR;
@@ -131,7 +144,7 @@ do_trans_CC_complex(SV *sv)
     return matches;
 }
 
-static I32
+STATIC I32
 do_trans_UU_simple(SV *sv)
 {
     dTHR;
@@ -183,7 +196,7 @@ do_trans_UU_simple(SV *sv)
     return matches;
 }
 
-static I32
+STATIC I32
 do_trans_UU_count(SV *sv)
 {
     dTHR;
@@ -202,16 +215,15 @@ do_trans_UU_count(SV *sv)
     send = s + len;
 
     while (s < send) {
-       if ((uv = swash_fetch(rv, s)) < none) {
-           s += UTF8SKIP(s);
+       if ((uv = swash_fetch(rv, s)) < none)
            matches++;
-       }
+       s += UTF8SKIP(s);
     }
 
     return matches;
 }
 
-static I32
+STATIC I32
 do_trans_UC_simple(SV *sv)
 {
     dTHR;
@@ -264,7 +276,7 @@ do_trans_UC_simple(SV *sv)
     return matches;
 }
 
-static I32
+STATIC I32
 do_trans_CU_simple(SV *sv)
 {
     dTHR;
@@ -327,7 +339,7 @@ do_trans_CU_simple(SV *sv)
 
 /* utf-8 to latin-1 */
 
-static I32
+STATIC I32
 do_trans_UC_trivial(SV *sv)
 {
     dTHR;
@@ -359,7 +371,7 @@ do_trans_UC_trivial(SV *sv)
 
 /* latin-1 to utf-8 */
 
-static I32
+STATIC I32
 do_trans_CU_trivial(SV *sv)
 {
     dTHR;
@@ -393,7 +405,7 @@ do_trans_CU_trivial(SV *sv)
     return matches;
 }
 
-static I32
+STATIC I32
 do_trans_UU_complex(SV *sv)
 {
     dTHR;
@@ -581,10 +593,11 @@ do_trans_UU_complex(SV *sv)
 I32
 do_trans(SV *sv)
 {
+    dTHR;
     STRLEN len;
 
     if (SvREADONLY(sv) && !(PL_op->op_private & OPpTRANS_IDENTICAL))
-       croak(no_modify);
+       croak(PL_no_modify);
 
     (void)SvPV(sv, len);
     if (!len)
@@ -640,8 +653,7 @@ do_join(register SV *sv, SV *del, register SV **mark, register SV **sp)
 
     mark++;
     len = (items > 0 ? (delimlen * (items - 1) ) : 0);
-    if (SvTYPE(sv) < SVt_PV)
-       sv_upgrade(sv, SVt_PV);
+    (void)SvUPGRADE(sv, SVt_PV);
     if (SvLEN(sv) < len + items) {     /* current length is way too short */
        while (items-- > 0) {
            if (*mark && !SvGMAGICAL(*mark) && SvOK(*mark)) {
@@ -767,7 +779,7 @@ do_chop(register SV *astr, register SV *sv)
        }
         return;
     }
-    if (SvTYPE(sv) == SVt_PVHV) {
+    else if (SvTYPE(sv) == SVt_PVHV) {
         HV* hv = (HV*)sv;
        HE* entry;
         (void)hv_iterinit(hv);
@@ -776,6 +788,8 @@ do_chop(register SV *astr, register SV *sv)
             do_chop(astr,hv_iterval(hv,entry));
         return;
     }
+    else if (SvREADONLY(sv))
+       croak(PL_no_modify);
     s = SvPV(sv, len);
     if (len && !SvPOK(sv))
        s = SvPV_force(sv, len);
@@ -819,6 +833,8 @@ do_chomp(register SV *sv)
 
     if (RsSNARF(PL_rs))
        return 0;
+    if (RsRECORD(PL_rs))
+      return 0;
     count = 0;
     if (SvTYPE(sv) == SVt_PVAV) {
        register I32 i;
@@ -832,7 +848,7 @@ do_chomp(register SV *sv)
        }
         return count;
     }
-    if (SvTYPE(sv) == SVt_PVHV) {
+    else if (SvTYPE(sv) == SVt_PVHV) {
         HV* hv = (HV*)sv;
        HE* entry;
         (void)hv_iterinit(hv);
@@ -841,6 +857,8 @@ do_chomp(register SV *sv)
             count += do_chomp(hv_iterval(hv,entry));
         return count;
     }
+    else if (SvREADONLY(sv))
+       croak(PL_no_modify);
     s = SvPV(sv, len);
     if (len && !SvPOKp(sv))
        s = SvPV_force(sv, len);
@@ -909,7 +927,8 @@ do_vop(I32 optype, SV *sv, SV *left, SV *right)
     len = leftlen < rightlen ? leftlen : rightlen;
     lensave = len;
     if (SvOK(sv) || SvTYPE(sv) > SVt_PVMG) {
-       dc = SvPV_force(sv, PL_na);
+       STRLEN n_a;
+       dc = SvPV_force(sv, n_a);
        if (SvCUR(sv) < len) {
            dc = SvGROW(sv, len + 1);
            (void)memzero(dc + SvCUR(sv), len - SvCUR(sv) + 1);
@@ -1048,7 +1067,7 @@ do_kv(ARGSproto)
            RETURN;
        }
 
-       if (!SvRMAGICAL(keys) || !mg_find((SV*)keys,'P'))
+       if (! SvTIED_mg((SV*)keys, 'P'))
            i = HvKEYS(keys);
        else {
            i = 0;
@@ -1067,10 +1086,9 @@ do_kv(ARGSproto)
        if (dokeys)
            XPUSHs(hv_iterkeysv(entry));        /* won't clobber stack_sp */
        if (dovalues) {
-           tmpstr = sv_newmortal();
            PUTBACK;
-           sv_setsv(tmpstr,realhv ?
-                    hv_iterval(hv,entry) : avhv_iterval((AV*)hv,entry));
+           tmpstr = realhv ?
+                    hv_iterval(hv,entry) : avhv_iterval((AV*)hv,entry);
            DEBUG_H(sv_setpvf(tmpstr, "%lu%%%d=%lu",
                            (unsigned long)HeHASH(entry),
                            HvMAX(keys)+1,