]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Fix parsing of hex literals with exponents.
authorMike Pall <mike>
Fri, 20 Jan 2012 10:38:14 +0000 (11:38 +0100)
committerMike Pall <mike>
Fri, 20 Jan 2012 10:38:14 +0000 (11:38 +0100)
src/lj_lex.c

index 00daccd5489ba1666e2c23217754da4fb27410ee..59d82259269bc9d42679e937e635a38763673f98 100644 (file)
@@ -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)))