Syntax should not allow numbers touching identifiers
Code like 'a = 1print()' should not be accepted.
diff --git a/llex.c b/llex.c
index b0bab37..bb81cec 100644
--- a/llex.c
+++ b/llex.c
@@ -228,6 +228,8 @@
save_and_next(ls);
else break;
}
+ if (lislalnum(ls->current)) /* is numeral touching an alpha num? */
+ save_and_next(ls); /* force an error */
save(ls, '\0');
if (luaO_str2num(luaZ_buffer(ls->buff), &obj) == 0) /* format error? */
lexerror(ls, "malformed number", TK_FLT);
diff --git a/testes/literals.lua b/testes/literals.lua
index fc45d4a..27f9377 100644
--- a/testes/literals.lua
+++ b/testes/literals.lua
@@ -306,4 +306,13 @@
assert(not load"a = '\\345'")
assert(not load"a = [=x]")
+local function malformednum (n, exp)
+ local s, msg = load("return " .. n)
+ assert(not s and string.find(msg, exp))
+end
+
+malformednum("0xe-", "near <eof>")
+malformednum("0xep-p", "malformed number")
+malformednum("1print()", "malformed number")
+
print('OK')