From efb6f24a610639f91b2d8e81a12be204d4655b44 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Sat, 6 Feb 2010 21:33:45 +0900 Subject: [PATCH] don't push back final char when reading a bignum-sized float (issue 32, part 2) --- opt/bignum.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/opt/bignum.c b/opt/bignum.c index 61bde456..37c94c72 100644 --- a/opt/bignum.c +++ b/opt/bignum.c @@ -223,17 +223,18 @@ sexp sexp_read_bignum (sexp ctx, sexp in, sexp_uint_t init, res = sexp_bignum_fxadd(ctx, res, digit); } if (c=='.' || c=='e' || c=='E') { - if (base != 10) + if (base != 10) { res = sexp_read_error(ctx, "found non-base 10 float", SEXP_NULL, in); - else { + } else { if (c!='.') sexp_push_char(ctx, c, in); /* push the e back */ res = sexp_read_float_tail(ctx, in, sexp_bignum_to_double(res), (sign==-1)); } } else if ((c!=EOF) && ! is_separator(c)) { res = sexp_read_error(ctx, "invalid numeric syntax", sexp_make_character(c), in); + } else { + sexp_push_char(ctx, c, in); } - sexp_push_char(ctx, c, in); sexp_gc_release1(ctx); return sexp_bignum_normalize(res); }