more numeric reader tweaks

This commit is contained in:
Alex Shinn 2011-09-06 00:27:30 +09:00
parent 5a1981bb0c
commit f51d67a86b
2 changed files with 5 additions and 5 deletions

View file

@ -657,9 +657,9 @@ SEXP_API sexp sexp_make_unsigned_integer(sexp ctx, sexp_luint_t x);
#if SEXP_USE_FLONUMS
#define sexp_fixnum_to_flonum(ctx, x) (sexp_make_flonum(ctx, sexp_unbox_fixnum(x)))
#if SEXP_USE_RATIOS
#define sexp_realp(x) (sexp_exact_integerp(x) || sexp_flonump(x))
#else
#define sexp_realp(x) (sexp_exact_integerp(x) || sexp_flonump(x) || sexp_ratiop(x))
#else
#define sexp_realp(x) (sexp_exact_integerp(x) || sexp_flonump(x))
#endif
#else
#define sexp_fixnum_to_flonum(ctx, x) (x)

6
sexp.c
View file

@ -1915,6 +1915,8 @@ sexp sexp_read_number (sexp ctx, sexp in, int base) {
if ((c!=EOF) && ! is_separator(c))
return sexp_read_error(ctx, "invalid numeric syntax",
sexp_make_character(c), in);
else if (tmp < 0)
return sexp_read_error(ctx, "digitless numeric literal", SEXP_NULL, in);
sexp_push_char(ctx, c, in);
}
@ -2386,10 +2388,8 @@ sexp sexp_string_to_number_op (sexp ctx sexp_api_params(self, n), sexp str, sexp
if (isdigit(sexp_string_data(str)[1])
|| sexp_string_data(str)[1] == '.' || sexp_string_data(str)[1] == '#')
sexp_read_char(ctx, in);
else
return SEXP_FALSE;
}
in = ((sexp_string_data(str)[0] == '#') ?
in = ((sexp_string_data(str)[0] == '#') || base == 10 ?
sexp_read(ctx, in) : sexp_read_number(ctx, in, base));
sexp_gc_release1(ctx);
return sexp_numberp(in) ? in : SEXP_FALSE;