mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-04 10:41:11 +02:00
zsh-workers/8609
This commit is contained in:
parent
0d3528817d
commit
e697a4eaaa
1 changed files with 17 additions and 4 deletions
21
Src/math.c
21
Src/math.c
|
@ -184,9 +184,20 @@ static int type[TOKCOUNT] =
|
|||
static int
|
||||
zzlex(void)
|
||||
{
|
||||
char decimal = '.', thousands = ',';
|
||||
int cct = 0;
|
||||
#ifdef USE_LOCALE
|
||||
struct lconv *lc;
|
||||
#endif
|
||||
|
||||
yyval.type = MN_INTEGER;
|
||||
|
||||
#ifdef USE_LOCALE
|
||||
lc = localeconv();
|
||||
decimal = *(lc->decimal_point);
|
||||
thousands = *(lc->thousands_sep);
|
||||
#endif
|
||||
|
||||
for (;; cct = 0)
|
||||
switch (*ptr++) {
|
||||
case '+':
|
||||
|
@ -324,7 +335,9 @@ zzlex(void)
|
|||
case ':':
|
||||
return COLON;
|
||||
case ',':
|
||||
return COMMA;
|
||||
case '.':
|
||||
if (*(ptr-1) == thousands) return COMMA;
|
||||
else break;
|
||||
case '\0':
|
||||
ptr--;
|
||||
return EOI;
|
||||
|
@ -349,15 +362,15 @@ zzlex(void)
|
|||
}
|
||||
/* Fall through! */
|
||||
default:
|
||||
if (idigit(*--ptr) || *ptr == '.') {
|
||||
if (idigit(*--ptr) || *ptr == decimal) {
|
||||
char *nptr;
|
||||
for (nptr = ptr; idigit(*nptr); nptr++);
|
||||
|
||||
if (*nptr == '.' || *nptr == 'e' || *nptr == 'E') {
|
||||
if (*nptr == decimal || *nptr == 'e' || *nptr == 'E') {
|
||||
/* it's a float */
|
||||
yyval.type = MN_FLOAT;
|
||||
yyval.u.d = strtod(ptr, &nptr);
|
||||
if (ptr == nptr || *nptr == '.') {
|
||||
if (ptr == nptr || *nptr == decimal ) {
|
||||
zerr("bad floating point constant", NULL, 0);
|
||||
return EOI;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue