Version v5.7.1 Development release working toward v5.8
--------------
____________________________________________________________________________
+[ 10495] By: jhi on 2001/06/10 10:55:34
+ Log: Subject: Re: pragma/locale.t #107
+ From: Hugo <hv@crypt.compulink.co.uk>
+ Date: Sun, 10 Jun 2001 11:23:30 +0100
+ Message-Id: <200106101023.LAA32085@crypt.compulink.co.uk>
+
+ Encapsulate the scan of the decimal radix separator.
+ Branch: perl
+ ! embed.h embed.pl proto.h sv.c
+____________________________________________________________________________
+[ 10494] By: jhi on 2001/06/10 03:00:17
+ Log: Try to grok numbers both with the locale specific separator
+ and with the usual "." (if different from the lss); add a test
+ to locale.t to do also a little bit of math in addition to just
+ equalness testing; remove extraneous logic as suggested in
+
+ Subject: Re: pragma/locale.t #107
+ From: Nicholas Clark <nick@ccl4.org>
+ Date: Sat, 9 Jun 2001 22:37:36 +0100
+ Message-ID: <20010609223735.Y76396@plum.flirble.org>
+ Branch: perl
+ ! sv.c t/pragma/locale.t
+____________________________________________________________________________
+[ 10493] By: jhi on 2001/06/10 01:25:23
+ Log: Metaconfig unit change for #10492.
+ Branch: metaconfig/U/perl
+ ! Extensions.U
+____________________________________________________________________________
+[ 10492] By: jhi on 2001/06/10 01:23:59
+ Log: Subject: [PATCH] Don't build Thread.pm if USEITHREADS
+ From: Artur Bergman <artur@contiller.se>
+ Date: Sat, 09 Jun 2001 21:03:51 +0200
+ Message-ID: <B7483FB6.1398%artur@contiller.se>
+ Branch: perl
+ ! Configure
+____________________________________________________________________________
+[ 10491] By: jhi on 2001/06/10 01:15:40
+ Log: Integrate perlio.
+ Branch: perl
+ !> perlsfio.h
+____________________________________________________________________________
+[ 10490] By: jhi on 2001/06/10 01:08:26
+ Log: Do locale specific separator if only in locale.
+ Branch: perl
+ ! util.c
+____________________________________________________________________________
+[ 10489] By: nick on 2001/06/09 19:13:25
+ Log: Make XS/Typemap compile (but fail) with sfio
+ Branch: perlio
+ ! perlsfio.h
+____________________________________________________________________________
+[ 10488] By: nick on 2001/06/09 19:12:51
+ Log: Re-integrate mainline
+ Branch: perlio
+ !> embed.h embed.pl embedvar.h intrpvar.h perl.h perlapi.h
+ !> proto.h sv.c util.c
+____________________________________________________________________________
+[ 10487] By: nick on 2001/06/09 16:26:29
+ Log: Integrate mainline
+ Branch: perlio
+ !> (integrate 31 files)
+____________________________________________________________________________
+[ 10486] By: jhi on 2001/06/09 16:11:51
+ Log: Subject: [PATCH] New attempt to clone callack
+ From: Artur Bergman <artur@contiller.se>
+ Date: Thu, 07 Jun 2001 11:52:16 +0200
+ Message-ID: <B7451B6F.12B7%artur@contiller.se>
+ Branch: perl
+ ! embedvar.h intrpvar.h perlapi.h sv.c
+____________________________________________________________________________
+[ 10485] By: jhi on 2001/06/09 15:23:52
+ Log: Numeric conversion tweaks suggested by Hugo and Nicholas.
+ Branch: perl
+ ! embed.h embed.pl perl.h proto.h sv.c util.c
+____________________________________________________________________________
+[ 10484] By: jhi on 2001/06/09 14:47:25
+ Log: Subject: Re: pragma/locale.t #107
+ From: Nicholas Clark <nick@ccl4.org>
+ Date: Sat, 9 Jun 2001 16:26:10 +0100
+ Message-ID: <20010609162609.V76396@plum.flirble.org>
+
+ A missing NVification.
+ Branch: perl
+ ! sv.c
+____________________________________________________________________________
+[ 10483] By: jhi on 2001/06/08 19:40:32
+ Log: Redo the #10482, there already was a test script for formats.
+ Branch: perl
+ - t/io/format.t
+ ! MANIFEST t/op/write.t
+____________________________________________________________________________
+[ 10482] By: jhi on 2001/06/08 19:34:45
+ Log: Twisted format testing, from Merijn.
+ Branch: perl
+ + t/io/format.t
+ ! MANIFEST
+____________________________________________________________________________
+[ 10481] By: jhi on 2001/06/08 19:21:56
+ Log: More \p{In...} testing, combined with \N{...}.
+ Branch: perl
+ ! lib/utf8_heavy.pl t/op/pat.t
+____________________________________________________________________________
+[ 10480] By: jhi on 2001/06/08 14:16:06
+ Log: Metaconfig changes for #10479.
+ Branch: metaconfig
+ ! U/Glossary.patch
+ Branch: metaconfig/U/perl
+ ! d_modfl.U
+____________________________________________________________________________
+[ 10479] By: jhi on 2001/06/08 14:15:32
+ Log: Be inspired more by Hugo-- introduce HAS_MODFL_POW32_BUG.
+ Branch: perl
+ ! Configure Porting/Glossary Porting/config.sh Porting/config_H
+ ! config_h.SH configure.com epoc/config.sh pp.c uconfig.h
+ ! uconfig.sh vos/config.alpha.def vos/config.ga.def
+ ! win32/config.bc win32/config.gc win32/config.vc
+____________________________________________________________________________
+[ 10478] By: jhi on 2001/06/08 12:20:41
+ Log: Subject: Re: [PATCH perl@10439] fix old $^S description in perlvms.pod
+ From: "Craig A. Berry" <craigberry@mac.com>
+ Date: Thu, 7 Jun 2001 14:27:20 -0500
+ Message-Id: <a05100e01b7458075db7d@[172.16.52.1]>
+ Branch: perl
+ ! vms/perlvms.pod
+____________________________________________________________________________
+[ 10477] By: jhi on 2001/06/08 12:19:00
+ Log: Subject: [PATCH] Unresolved symbol in ext/re/re.xs
+ From: Gisle Aas <gisle@ActiveState.com>
+ Date: 07 Jun 2001 17:04:29 -0700
+ Message-ID: <lrae3jsupe.fsf@caliper.ActiveState.com>
+ Branch: perl
+ ! ext/re/re.xs
+____________________________________________________________________________
+[ 10476] By: jhi on 2001/06/08 01:35:42
+ Log: Update Changes.
+ Branch: perl
+ ! Changes patchlevel.h
+____________________________________________________________________________
[ 10475] By: jhi on 2001/06/08 00:53:45
Log: Regen Glossary et alia.
Branch: perl
# $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
#
-# Generated on Fri Jun 8 18:06:31 EET DST 2001 [metaconfig 3.0 PL70]
+# Generated on Sun Jun 10 05:21:37 EET DST 2001 [metaconfig 3.0 PL70]
# (with additional metaconfig patches by perlbug@perl.org)
cat >c1$$ <<EOF
esac
;;
Thread|thread)
- case "$usethreads" in
- true|$define|y) avail_ext="$avail_ext $xxx" ;;
+ case "$usethreads" in
+ true|$define|y)
+ case "$useithreads" in
+ $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
+ esac
esac
;;
IPC/SysV|ipc/sysv)
#define gv_share S_gv_share
# endif
#define grok_number S_grok_number
+#define grok_numeric_radix S_grok_numeric_radix
#endif
#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
#define check_uni S_check_uni
#define gv_share(a) S_gv_share(aTHX_ a)
# endif
#define grok_number(a,b,c) S_grok_number(aTHX_ a,b,c)
+#define grok_numeric_radix(a,b) S_grok_numeric_radix(aTHX_ a,b)
#endif
#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
#define check_uni() S_check_uni(aTHX)
# endif
#define S_grok_number CPerlObj::S_grok_number
#define grok_number S_grok_number
+#define S_grok_numeric_radix CPerlObj::S_grok_numeric_radix
+#define grok_numeric_radix S_grok_numeric_radix
#endif
#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
#define S_check_uni CPerlObj::S_check_uni
s |SV* |gv_share |SV *sv
# endif
s |int |grok_number |const char *pv|STRLEN len|UV *valuep
+s |bool |grok_numeric_radix|const char **sp|const char *send
#endif
#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
#if !defined(PERL_PATCHLEVEL_H_IMPLICIT) && !defined(LOCAL_PATCH_COUNT)
static char *local_patches[] = {
NULL
- ,"DEVEL10475"
+ ,"DEVEL10495"
,NULL
};
STATIC SV* S_gv_share(pTHX_ SV *sv);
# endif
STATIC int S_grok_number(pTHX_ const char *pv, STRLEN len, UV *valuep);
+STATIC int S_grok_numeric_radix(pTHX_ const char **sp, const char *send);
#endif
#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
#define IS_NUMBER_NEG 0x08 /* leading minus sign */
#define IS_NUMBER_INFINITY 0x10 /* this is big */
+static bool
+S_grok_numeric_radix(pTHX_ const char **sp, const char *send)
+{
+#ifdef USE_LOCALE_NUMERIC
+ if (PL_numeric_radix_sv && IN_LOCALE) {
+ STRLEN len;
+ char* radix = SvPV(PL_numeric_radix_sv, len);
+ if (*sp + len <= send && memEQ(*sp, radix, len)) {
+ *sp += len;
+ return TRUE;
+ }
+ }
+ /* always try "." if numeric radix didn't match because
+ * we may have data from different locales mixed */
+#endif
+ if (*sp < send && **sp == '.') {
+ ++*sp;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+#define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send)
+
static int
S_grok_number(pTHX_ const char *pv, STRLEN len, UV *valuep)
{
const char max_mod_10 = UV_MAX % 10 + '0';
int numtype = 0;
int sawinf = 0;
- char* radix = ".";
- STRLEN radixlen = 1;
-
while (isSPACE(*s))
s++;
else if (*s == '+')
s++;
-#ifdef USE_LOCALE_NUMERIC
- if (PL_numeric_radix_sv && IN_LOCALE)
- radix = SvPV(PL_numeric_radix_sv, radixlen);
-#endif
-
/* next must be digit or the radix separator or beginning of infinity */
if (isDIGIT(*s)) {
/* UVs are at least 32 bits, so the first 9 decimal digits cannot
*valuep = value;
skip_value:
- if (s + radixlen <= send && memEQ(s, radix, radixlen)) {
- s += radixlen;
+ if (GROK_NUMERIC_RADIX(&s, send)) {
numtype |= IS_NUMBER_NOT_INT;
while (isDIGIT(*s)) /* optional digits after the radix */
s++;
}
}
- else if (s + radixlen <= send && memEQ(s, radix, radixlen)) {
- s += radixlen;
- numtype |= IS_NUMBER_NOT_INT;
- /* no digits before the radix means we need digits after it */
- if (isDIGIT(*s)) {
- do {
- s++;
- } while (isDIGIT(*s));
- numtype |= IS_NUMBER_IN_UV;
- if (valuep) {
- /* integer approximation is valid - it's 0. */
- *valuep = 0;
- }
- }
- else
- return 0;
+ else if (GROK_NUMERIC_RADIX(&s, send)) {
+ numtype |= IS_NUMBER_NOT_INT;
+ /* no digits before the radix means we need digits after it */
+ if (isDIGIT(*s)) {
+ do {
+ s++;
+ } while (isDIGIT(*s));
+ numtype |= IS_NUMBER_IN_UV;
+ if (valuep) {
+ /* integer approximation is valid - it's 0. */
+ *valuep = 0;
+ }
+ }
+ else
+ return 0;
}
else if (*s == 'I' || *s == 'i') {
- s++; if (*s != 'N' && *s != 'n') return 0;
+ s++; if (*s != 'N' && *s != 'n') return 0;
s++; if (*s != 'F' && *s != 'f') return 0;
s++; if (*s == 'I' || *s == 'i') {
s++; if (*s != 'N' && *s != 'n') return 0;
sv_upgrade(sv, SVt_PVNV);
else
sv_upgrade(sv, SVt_NV);
-#if defined(USE_LONG_DOUBLE)
+#ifdef USE_LONG_DOUBLE
DEBUG_c({
STORE_NUMERIC_LOCAL_SET_STANDARD();
PerlIO_printf(Perl_debug_log,
if (SvNOKp(sv) && !(SvIOK(sv) || SvPOK(sv))) {
SvNOK_on(sv);
}
- else if (SvIOKp(sv) &&
- (!SvPOKp(sv) || !grok_number(SvPVX(sv), SvCUR(sv),NULL)))
- {
+ else if (SvIOKp(sv)) {
SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
#ifdef NV_PRESERVES_UV
SvNOK_on(sv);
# and mingw32 uses said silly CRT
$have_setlocale = 0 if $^O eq 'MSWin32' && $Config{cc} =~ /^(cl|gcc)/i;
-my $last = $have_setlocale ? 116 : 98;
+my $last = $have_setlocale ? &last : &last_without_setlocale;
print "1..$last\n";
check_taint_not 98, $a;
+sub last_without_setlocale { 98 }
+
# I think we've seen quite enough of taint.
# Let us do some *real* locale work now,
# unless setlocale() is missing (i.e. minitest).
my $w = 0;
local $SIG{__WARN__} =
sub {
- print "# @_";
+ print "# @_\n";
$w++;
};
tryneoalpha($Locale, 110, $e == $c);
}
- tryneoalpha($Locale, 111, $w == 0);
-
my $f = "1.23";
+ my $g = 2.34;
- debug "# 112..114: f = $f, locale = $Locale\n";
+ debug "# 111..115: f = $f, g = $g, locale = $Locale\n";
- tryneoalpha($Locale, 112, $f == 1.23);
+ tryneoalpha($Locale, 111, $f == 1.23);
- tryneoalpha($Locale, 113, $f == $x);
+ tryneoalpha($Locale, 112, $f == $x);
- tryneoalpha($Locale, 114, $f == $c);
+ tryneoalpha($Locale, 113, $f == $c);
+
+ tryneoalpha($Locale, 114, abs(($f + $g) - 3.57) < 0.01);
+
+ tryneoalpha($Locale, 115, $w == 0);
}
# Does taking lc separately differ from taking
my $y = "aa";
my $z = "AB";
- tryneoalpha($Locale, 115,
+ tryneoalpha($Locale, 116,
lcA($x, $y) == 1 && lcB($x, $y) == 1 ||
lcA($x, $z) == 0 && lcB($x, $z) == 0);
}
# utf8 and locales do not mix.
debug "# skipping UTF-8 locale '$Locale'\n";
push @utf8locale, $Locale;
- $utf8skip{116}++;
+ $utf8skip{117}++;
} else {
use locale;
use locale;
next unless lc $y eq $x;
push @f, $x unless $x =~ /$y/i && $y =~ /$x/i;
}
- tryneoalpha($Locale, 116, @f == 0);
+ tryneoalpha($Locale, 117, @f == 0);
if (@f) {
- print "# failed 116 locale '$Locale' characters @f\n"
+ print "# failed 117 locale '$Locale' characters @f\n"
}
}
}
# Recount the errors.
-foreach (99..$last) {
+foreach (&last_without_setlocale()+1..$last) {
if ($Problem{$_} || !defined $Okay{$_} || !@{$Okay{$_}}) {
if ($_ == 102) {
print "# The failure of test 102 is not necessarily fatal.\n";
}
}
+sub last { 117 }
+
# eof
I32 offcount; /* number of digits in least significant part */
#ifdef USE_LOCALE_NUMERIC
- if (PL_numeric_radix_sv)
+ if (PL_numeric_radix_sv && IN_LOCALE)
point = SvPV(PL_numeric_radix_sv, pointlen);
#endif