mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-08 13:47:31 +08:00
lex.h (JAVA_FLOAT_RANGE_ERROR): Typo fix.
* lex.h (JAVA_FLOAT_RANGE_ERROR): Typo fix. * lex.c (IS_ZERO): New define. (java_perform_atof): Error on floating point underflow. From-SVN: r37269
This commit is contained in:
parent
f83c165658
commit
099a51500c
@ -1,3 +1,9 @@
|
||||
2000-11-05 Tom Tromey <tromey@cygnus.com>
|
||||
|
||||
* lex.h (JAVA_FLOAT_RANGE_ERROR): Typo fix.
|
||||
* lex.c (IS_ZERO): New define.
|
||||
(java_perform_atof): Error on floating point underflow.
|
||||
|
||||
2000-11-04 Tom Tromey <tromey@cygnus.com>
|
||||
|
||||
* lex.c (java_parse_escape_sequence): Only read two octal
|
||||
|
@ -774,6 +774,12 @@ struct jpa_args
|
||||
int number_beginning;
|
||||
};
|
||||
|
||||
#ifdef REAL_ARITHMETIC
|
||||
#define IS_ZERO(X) (ereal_cmp (X, dconst0) == 0)
|
||||
#else
|
||||
#define IS_ZERO(X) ((X) == 0)
|
||||
#endif
|
||||
|
||||
static void java_perform_atof PARAMS ((PTR));
|
||||
|
||||
static void
|
||||
@ -789,12 +795,36 @@ java_perform_atof (av)
|
||||
SET_REAL_VALUE_ATOF (value,
|
||||
REAL_VALUE_ATOF (a->literal_token, TYPE_MODE (type)));
|
||||
|
||||
if (REAL_VALUE_ISINF (value)
|
||||
|| REAL_VALUE_ISNAN (value))
|
||||
if (REAL_VALUE_ISINF (value) || REAL_VALUE_ISNAN (value))
|
||||
{
|
||||
JAVA_FLOAT_RANGE_ERROR ((a->fflag ? "float" : "double"));
|
||||
value = DCONST0;
|
||||
}
|
||||
else if (IS_ZERO (value))
|
||||
{
|
||||
/* We check to see if the value is really 0 or if we've found an
|
||||
underflow. We do this in the most primitive imaginable way. */
|
||||
int really_zero = 1;
|
||||
char *p = a->literal_token;
|
||||
if (*p == '-')
|
||||
++p;
|
||||
while (*p && *p != 'e' && *p != 'E')
|
||||
{
|
||||
if (*p != '0' && *p != '.')
|
||||
{
|
||||
really_zero = 0;
|
||||
break;
|
||||
}
|
||||
++p;
|
||||
}
|
||||
if (! really_zero)
|
||||
{
|
||||
int i = ctxp->c_line->current;
|
||||
ctxp->c_line->current = number_beginning;
|
||||
java_lex_error ("Floating point literal underflow", 0);
|
||||
ctxp->c_line->current = i;
|
||||
}
|
||||
}
|
||||
|
||||
SET_LVAL_NODE_TYPE (build_real (type, value), type);
|
||||
}
|
||||
|
@ -234,7 +234,7 @@ extern void set_float_handler PARAMS ((jmp_buf));
|
||||
char msg [1024]; \
|
||||
int i = ctxp->c_line->current; \
|
||||
ctxp->c_line->current = number_beginning; \
|
||||
sprintf (msg, "Floating pointer literal exceeds range of `%s'", (m)); \
|
||||
sprintf (msg, "Floating point literal exceeds range of `%s'", (m)); \
|
||||
java_lex_error (msg, 0); \
|
||||
ctxp->c_line->current = i; \
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user