summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Peacock <john.peacock@havurah-software.org>2016-01-01 12:01:20 -0600
committerJohn Peacock <john.peacock@havurah-software.org>2016-01-01 12:01:20 -0600
commitcec552f8eea62a130a9ae4a14a74c4e7cbf27bf2 (patch)
treec8eb60f075ec87cf1b35eccdf91698b3b88cd939
parentd90cae31cc05f7b68481c503d143d85f3318a593 (diff)
Resolve https://rt.cpan.org/Ticket/Display.html?id=98744
-rw-r--r--t/coretests.pm4
-rw-r--r--vperl/vpp.pm20
-rw-r--r--vutil/vutil.c29
3 files changed, 10 insertions, 43 deletions
diff --git a/t/coretests.pm b/t/coretests.pm
index b7b953b..52f87e1 100644
--- a/t/coretests.pm
+++ b/t/coretests.pm
@@ -628,6 +628,10 @@ SKIP: {
$v = $CLASS->parse(q[2.6_01]);
is $v->normal, 'v2.601.0', 'Normal strips underscores from alphas'
}
+ { # https://rt.cpan.org/Ticket/Display.html?id=98744
+ $v = $CLASS->new("1.02_003");
+ is $v->numify, '1.020030', 'Ignore underscores for numify';
+ }
}
1;
diff --git a/vperl/vpp.pm b/vperl/vpp.pm
index b209b9b..8ccf88f 100644
--- a/vperl/vpp.pm
+++ b/vperl/vpp.pm
@@ -714,7 +714,6 @@ sub numify {
require Carp;
Carp::croak("Invalid version object");
}
- my $width = $self->{width} || 3;
my $alpha = $self->{alpha} || "";
my $len = $#{$self->{version}};
my $digit = $self->{version}[0];
@@ -724,25 +723,12 @@ sub numify {
warnings::warn($WARN_CATEGORY, 'alpha->numify() is lossy');
}
- for ( my $i = 1 ; $i < $len ; $i++ ) {
+ for ( my $i = 1 ; $i <= $len ; $i++ ) {
$digit = $self->{version}[$i];
- if ( $width < 3 ) {
- my $denom = 10**(3-$width);
- my $quot = int($digit/$denom);
- my $rem = $digit - ($quot * $denom);
- $string .= sprintf("%0".$width."d%d", $quot, $rem);
- }
- else {
- $string .= sprintf("%03d", $digit);
- }
+ $string .= sprintf("%03d", $digit);
}
- if ( $len > 0 ) {
- $digit = $self->{version}[$len];
- $string .= sprintf("%0".$width."d", $digit);
- }
- else # $len = 0
- {
+ if ( $len == 0 ) {
$string .= sprintf("000");
}
diff --git a/vutil/vutil.c b/vutil/vutil.c
index b4a5091..87a04db 100644
--- a/vutil/vutil.c
+++ b/vutil/vutil.c
@@ -819,7 +819,6 @@ Perl_vnumify(pTHX_ SV *vs)
{
SSize_t i, len;
I32 digit;
- int width;
bool alpha = FALSE;
SV *sv;
AV *av;
@@ -834,14 +833,6 @@ Perl_vnumify(pTHX_ SV *vs)
/* see if various flags exist */
if ( hv_exists(MUTABLE_HV(vs), "alpha", 5 ) )
alpha = TRUE;
- {
- SV ** svp = hv_fetchs(MUTABLE_HV(vs), "width", FALSE);
- if ( svp )
- width = SvIV(*svp);
- else
- width = 3;
- }
-
if (alpha) {
Perl_ck_warner(aTHX_ packWARN(WARN_NUMERIC),
@@ -864,28 +855,14 @@ Perl_vnumify(pTHX_ SV *vs)
digit = SvIV(tsv);
}
sv = Perl_newSVpvf(aTHX_ "%d.", (int)PERL_ABS(digit));
- for ( i = 1 ; i < len ; i++ )
+ for ( i = 1 ; i <= len ; i++ )
{
SV * tsv = *av_fetch(av, i, 0);
digit = SvIV(tsv);
- if ( width < 3 ) {
- const int denom = (width == 2 ? 10 : 100);
- const div_t term = div((int)PERL_ABS(digit),denom);
- Perl_sv_catpvf(aTHX_ sv, "%0*d%d", width, term.quot, term.rem);
- }
- else {
- Perl_sv_catpvf(aTHX_ sv, "%0*d", width, (int)digit);
- }
+ Perl_sv_catpvf(aTHX_ sv, "%03d", (int)digit);
}
- if ( len > 0 )
- {
- SV * tsv = *av_fetch(av, len, 0);
- digit = SvIV(tsv);
- Perl_sv_catpvf(aTHX_ sv, "%0*d", width, (int)digit);
- }
- else /* len == 0 */
- {
+ if ( len == 0 ) {
sv_catpvs(sv, "000");
}
return sv;