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:
Tom Tromey 2000-11-06 05:35:53 +00:00 committed by Tom Tromey
parent f83c165658
commit 099a51500c
3 changed files with 39 additions and 3 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -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; \
}