From a72134e28099dac14765cd84810844c742b34029 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Fri, 20 Jan 2012 11:38:14 +0100 Subject: [PATCH] Fix parsing of hex literals with exponents. --- src/lj_lex.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/lj_lex.c b/src/lj_lex.c index 00daccd5..59d82259 100644 --- a/src/lj_lex.c +++ b/src/lj_lex.c @@ -137,14 +137,17 @@ static int lex_number64(LexState *ls, TValue *tv) /* Parse a number literal. */ static void lex_number(LexState *ls, TValue *tv) { - int c; + int c, xp = 'E'; lua_assert(lj_char_isdigit(ls->current)); - do { + if ((c = ls->current) == '0') { + save_and_next(ls); + if ((ls->current & ~0x20) == 'X') xp = 'P'; + } + while (lj_char_isident(ls->current) || ls->current == '.' || + ((ls->current == '-' || ls->current == '+') && (c & ~0x20) == xp)) { c = ls->current; save_and_next(ls); - } while (lj_char_isident(ls->current) || ls->current == '.' || - ((ls->current == '-' || ls->current == '+') && - ((c & ~0x20) == 'E' || (c & ~0x20) == 'P'))); + } #if LJ_HASFFI c &= ~0x20; if ((c == 'I' || c == 'L' || c == 'U') && !ctype_ctsG(G(ls->L))) -- 2.11.4.GIT