This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
misc a2p fixes
[perl5.git] / util.c
diff --git a/util.c b/util.c
index f23e9cb..6e39cb6 100644 (file)
--- a/util.c
+++ b/util.c
@@ -2129,7 +2129,7 @@ Perl_my_popen(pTHX_ const char *cmd, const char *mode)
     register I32 This, that;
     register Pid_t pid;
     SV *sv;
-    I32 doexec = !(*cmd == '-' && cmd[1] == '\0');
+    const I32 doexec = !(*cmd == '-' && cmd[1] == '\0');
     I32 did_pipes = 0;
     int pp[2];
 
@@ -3882,11 +3882,12 @@ Perl_scan_version(pTHX_ const char *s, SV *rv, bool qv)
     const char *pos;
     const char *last;
     int saw_period = 0;
-    int saw_under = 0;
+    int alpha = 0;
     int width = 3;
     AV *av = newAV();
-    SVhv = newSVrv(rv, "version"); /* create an SV and upgrade the RV */
+    SV *hv = newSVrv(rv, "version"); /* create an SV and upgrade the RV */
     (void)sv_upgrade(hv, SVt_PVHV); /* needs to be an HV type */
+
 #ifndef NODEFAULT_SHAREKEYS
     HvSHAREKEYS_on(hv);         /* key-sharing on by default */
 #endif
@@ -3906,16 +3907,16 @@ Perl_scan_version(pTHX_ const char *s, SV *rv, bool qv)
     {
        if ( *pos == '.' )
        {
-           if ( saw_under )
+           if ( alpha )
                Perl_croak(aTHX_ "Invalid version format (underscores before decimal)");
            saw_period++ ;
            last = pos;
        }
        else if ( *pos == '_' )
        {
-           if ( saw_under )
+           if ( alpha )
                Perl_croak(aTHX_ "Invalid version format (multiple underscores)");
-           saw_under = 1;
+           alpha = 1;
            width = pos - last - 1; /* natural width of sub-version */
        }
        pos++;
@@ -3927,9 +3928,9 @@ Perl_scan_version(pTHX_ const char *s, SV *rv, bool qv)
     pos = s;
 
     if ( qv )
-       hv_store((HV *)hv, "qv", 2, &PL_sv_yes, 0);
-    if ( saw_under )
-       hv_store((HV *)hv, "alpha", 5, &PL_sv_yes, 0);
+       hv_store((HV *)hv, "qv", 2, newSViv(qv), 0);
+    if ( alpha )
+       hv_store((HV *)hv, "alpha", 5, newSViv(alpha), 0);
     if ( !qv && width < 3 )
        hv_store((HV *)hv, "width", 5, newSViv(width), 0);
     
@@ -4018,7 +4019,7 @@ Perl_scan_version(pTHX_ const char *s, SV *rv, bool qv)
        av_push(av, newSViv(0));
 
     /* And finally, store the AV in the hash */
-    hv_store((HV *)hv, "version", 7, (SV *)av, 0);
+    hv_store((HV *)hv, "version", 7, newRV_noinc((SV *)av), 0);
     return s;
 }
 
@@ -4067,7 +4068,7 @@ Perl_new_version(pTHX_ SV *ver)
            hv_store((HV *)hv, "width", 5, newSViv(width), 0);
        }
 
-       sav = (AV *)*hv_fetch((HV*)ver, "version", 7, FALSE);
+       sav = (AV *)SvRV(*hv_fetch((HV*)ver, "version", 7, FALSE));
        /* This will get reblessed later if a derived class*/
        for ( key = 0; key <= av_len(sav); key++ )
        {
@@ -4075,7 +4076,7 @@ Perl_new_version(pTHX_ SV *ver)
            av_push(av, newSViv(rev));
        }
 
-       hv_store((HV *)hv, "version", 7, (SV *)av, 0);
+       hv_store((HV *)hv, "version", 7, newRV_noinc((SV *)av), 0);
        return rv;
     }
 #ifdef SvVOK
@@ -4148,11 +4149,11 @@ confused by derived classes which may contain additional hash entries):
 
 =over 4
 
-=item * The SV contains a hash (or a reference to one)
+=item * The SV contains a [reference to a] hash
 
 =item * The hash contains a "version" key
 
-=item * The "version" key has an AV as its value
+=item * The "version" key has [a reference to] an AV as its value
 
 =back
 
@@ -4169,7 +4170,7 @@ Perl_vverify(pTHX_ SV *vs)
     /* see if the appropriate elements exist */
     if ( SvTYPE(vs) == SVt_PVHV
         && hv_exists((HV*)vs, "version", 7)
-        && (sv = *hv_fetch((HV*)vs, "version", 7, FALSE))
+        && (sv = SvRV(*hv_fetch((HV*)vs, "version", 7, FALSE)))
         && SvTYPE(sv) == SVt_PVAV )
        return TRUE;
     else
@@ -4214,7 +4215,7 @@ Perl_vnumify(pTHX_ SV *vs)
 
 
     /* attempt to retrieve the version array */
-    if ( !(av = (AV *)*hv_fetch((HV*)vs, "version", 7, FALSE) ) ) {
+    if ( !(av = (AV *)SvRV(*hv_fetch((HV*)vs, "version", 7, FALSE)) ) ) {
        sv_catpvn(sv,"0",1);
        return sv;
     }
@@ -4227,17 +4228,17 @@ Perl_vnumify(pTHX_ SV *vs)
     }
 
     digit = SvIV(*av_fetch(av, 0, 0));
-    sv_setpvf(sv, "%d.", (int)PERL_ABS(digit));
+    Perl_sv_setpvf(aTHX_ sv, "%d.", (int)PERL_ABS(digit));
     for ( i = 1 ; i < len ; i++ )
     {
        digit = SvIV(*av_fetch(av, i, 0));
        if ( width < 3 ) {
            const int denom = (int)pow(10,(3-width));
            const div_t term = div((int)PERL_ABS(digit),denom);
-           sv_catpvf(sv, "%0*d_%d", width, term.quot, term.rem);
+           Perl_sv_catpvf(aTHX_ sv, "%0*d_%d", width, term.quot, term.rem);
        }
        else {
-           sv_catpvf(sv, "%0*d", width, (int)digit);
+           Perl_sv_catpvf(aTHX_ sv, "%0*d", width, (int)digit);
        }
     }
 
@@ -4246,7 +4247,7 @@ Perl_vnumify(pTHX_ SV *vs)
        digit = SvIV(*av_fetch(av, len, 0));
        if ( alpha && width == 3 ) /* alpha version */
            sv_catpvn(sv,"_",1);
-       sv_catpvf(sv, "%0*d", width, (int)digit);
+       Perl_sv_catpvf(aTHX_ sv, "%0*d", width, (int)digit);
     }
     else /* len == 0 */
     {
@@ -4284,7 +4285,7 @@ Perl_vnormal(pTHX_ SV *vs)
 
     if ( hv_exists((HV*)vs, "alpha", 5 ) )
        alpha = TRUE;
-    av = (AV *)*hv_fetch((HV*)vs, "version", 7, FALSE);
+    av = (AV *)SvRV(*hv_fetch((HV*)vs, "version", 7, FALSE));
 
     len = av_len(av);
     if ( len == -1 )
@@ -4293,10 +4294,10 @@ Perl_vnormal(pTHX_ SV *vs)
        return sv;
     }
     digit = SvIV(*av_fetch(av, 0, 0));
-    sv_setpvf(sv, "v%"IVdf, (IV)digit);
-    for ( i = 1 ; i <= len-1 ; i++ ) {
+    Perl_sv_setpvf(aTHX_ sv, "v%"IVdf, (IV)digit);
+    for ( i = 1 ; i < len ; i++ ) {
        digit = SvIV(*av_fetch(av, i, 0));
-       sv_catpvf(sv, ".%"IVdf, (IV)digit);
+       Perl_sv_catpvf(aTHX_ sv, ".%"IVdf, (IV)digit);
     }
 
     if ( len > 0 )
@@ -4304,9 +4305,9 @@ Perl_vnormal(pTHX_ SV *vs)
        /* handle last digit specially */
        digit = SvIV(*av_fetch(av, len, 0));
        if ( alpha )
-           sv_catpvf(sv, "_%"IVdf, (IV)digit);
+           Perl_sv_catpvf(aTHX_ sv, "_%"IVdf, (IV)digit);
        else
-           sv_catpvf(sv, ".%"IVdf, (IV)digit);
+           Perl_sv_catpvf(aTHX_ sv, ".%"IVdf, (IV)digit);
     }
 
     if ( len <= 2 ) { /* short version, must be at least three */
@@ -4330,7 +4331,6 @@ the original version contained 1 or more dots, respectively
 SV *
 Perl_vstringify(pTHX_ SV *vs)
 {
-    I32 qv = 0;
     if ( SvROK(vs) )
        vs = SvRV(vs);
     
@@ -4338,9 +4338,6 @@ Perl_vstringify(pTHX_ SV *vs)
        Perl_croak(aTHX_ "Invalid version object");
 
     if ( hv_exists((HV *)vs, "qv", 2) )
-       qv = 1;
-    
-    if ( qv )
        return vnormal(vs);
     else
        return vnumify(vs);
@@ -4376,12 +4373,12 @@ Perl_vcmp(pTHX_ SV *lhv, SV *rhv)
        Perl_croak(aTHX_ "Invalid version object");
 
     /* get the left hand term */
-    lav = (AV *)*hv_fetch((HV*)lhv, "version", 7, FALSE);
+    lav = (AV *)SvRV(*hv_fetch((HV*)lhv, "version", 7, FALSE));
     if ( hv_exists((HV*)lhv, "alpha", 5 ) )
        lalpha = TRUE;
 
     /* and the right hand term */
-    rav = (AV *)*hv_fetch((HV*)rhv, "version", 7, FALSE);
+    rav = (AV *)SvRV(*hv_fetch((HV*)rhv, "version", 7, FALSE));
     if ( hv_exists((HV*)rhv, "alpha", 5 ) )
        ralpha = TRUE;