mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-07-07 05:06:37 +02:00
more numeric reader tweaks
This commit is contained in:
parent
5a1981bb0c
commit
f51d67a86b
2 changed files with 5 additions and 5 deletions
|
@ -657,9 +657,9 @@ SEXP_API sexp sexp_make_unsigned_integer(sexp ctx, sexp_luint_t x);
|
||||||
#if SEXP_USE_FLONUMS
|
#if SEXP_USE_FLONUMS
|
||||||
#define sexp_fixnum_to_flonum(ctx, x) (sexp_make_flonum(ctx, sexp_unbox_fixnum(x)))
|
#define sexp_fixnum_to_flonum(ctx, x) (sexp_make_flonum(ctx, sexp_unbox_fixnum(x)))
|
||||||
#if SEXP_USE_RATIOS
|
#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))
|
#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
|
#endif
|
||||||
#else
|
#else
|
||||||
#define sexp_fixnum_to_flonum(ctx, x) (x)
|
#define sexp_fixnum_to_flonum(ctx, x) (x)
|
||||||
|
|
6
sexp.c
6
sexp.c
|
@ -1915,6 +1915,8 @@ sexp sexp_read_number (sexp ctx, sexp in, int base) {
|
||||||
if ((c!=EOF) && ! is_separator(c))
|
if ((c!=EOF) && ! is_separator(c))
|
||||||
return sexp_read_error(ctx, "invalid numeric syntax",
|
return sexp_read_error(ctx, "invalid numeric syntax",
|
||||||
sexp_make_character(c), in);
|
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);
|
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])
|
if (isdigit(sexp_string_data(str)[1])
|
||||||
|| sexp_string_data(str)[1] == '.' || sexp_string_data(str)[1] == '#')
|
|| sexp_string_data(str)[1] == '.' || sexp_string_data(str)[1] == '#')
|
||||||
sexp_read_char(ctx, in);
|
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_read(ctx, in) : sexp_read_number(ctx, in, base));
|
||||||
sexp_gc_release1(ctx);
|
sexp_gc_release1(ctx);
|
||||||
return sexp_numberp(in) ? in : SEXP_FALSE;
|
return sexp_numberp(in) ? in : SEXP_FALSE;
|
||||||
|
|
Loading…
Add table
Reference in a new issue