From 6ecb4e7a4eda61860545ddff31fded249f536ebd Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Wed, 5 Feb 2014 05:40:35 +0100 Subject: [PATCH] Calculate exponent the same way as fractions for symmetry in the lexer. "3E-1" should have the same rounding error as "0.3" --- jslex.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/jslex.c b/jslex.c index 3389634..9103eff 100644 --- a/jslex.c +++ b/jslex.c @@ -283,6 +283,7 @@ static inline double lexexponent(js_State *J) static inline int lexnumber(js_State *J) { double n; + double e; if (ACCEPT('0')) { if (ACCEPT('x') || ACCEPT('X')) { @@ -294,19 +295,22 @@ static inline int lexnumber(js_State *J) n = 0; if (ACCEPT('.')) n += lexfraction(J); - n *= pow(10, lexexponent(J)); } else if (ACCEPT('.')) { if (!isdec(PEEK)) return '.'; n = lexfraction(J); - n *= pow(10, lexexponent(J)); } else { n = lexinteger(J); if (ACCEPT('.')) n += lexfraction(J); - n *= pow(10, lexexponent(J)); } + e = lexexponent(J); + if (e < 0) + n /= pow(10, -e); + else if (e > 0) + n *= pow(10, e); + if (isidentifierstart(PEEK)) jsY_error(J, "number with letter suffix");