Calculate exponent the same way as fractions for symmetry in the lexer.

"3E-1" should have the same rounding error as "0.3"
This commit is contained in:
Tor Andersson
2014-02-05 05:40:35 +01:00
parent 7573f4238e
commit 6ecb4e7a4e

10
jslex.c
View File

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