mirror of
https://github.com/lua/lua.git
synced 2024-11-23 02:03:55 +08:00
Local declaration in the REPL generates a warning
This commit is contained in:
parent
20d42ccaae
commit
e4f418f07c
18
lua.c
18
lua.c
@ -587,15 +587,28 @@ static int addreturn (lua_State *L) {
|
||||
}
|
||||
|
||||
|
||||
static void checklocal (const char *line) {
|
||||
static const size_t szloc = sizeof("local") - 1;
|
||||
static const char space[] = " \t";
|
||||
line += strspn(line, space); /* skip spaces */
|
||||
if (strncmp(line, "local", szloc) == 0 && /* "local"? */
|
||||
strchr(space, *(line + szloc)) != NULL) { /* followed by a space? */
|
||||
lua_writestringerror("%s\n",
|
||||
"warning: locals do not survive across lines in interactive mode");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** Read multiple lines until a complete Lua statement or an error not
|
||||
** for an incomplete statement. Start with first line already read in
|
||||
** the stack.
|
||||
*/
|
||||
static int multiline (lua_State *L) {
|
||||
size_t len;
|
||||
const char *line = lua_tolstring(L, 1, &len); /* get first line */
|
||||
checklocal(line);
|
||||
for (;;) { /* repeat until gets a complete statement */
|
||||
size_t len;
|
||||
const char *line = lua_tolstring(L, 1, &len); /* get what it has */
|
||||
int status = luaL_loadbuffer(L, line, len, "=stdin"); /* try it */
|
||||
if (!incomplete(L, status) || !pushline(L, 0))
|
||||
return status; /* should not or cannot try to add continuation line */
|
||||
@ -603,6 +616,7 @@ static int multiline (lua_State *L) {
|
||||
lua_pushliteral(L, "\n"); /* add newline... */
|
||||
lua_insert(L, -2); /* ...between the two lines */
|
||||
lua_concat(L, 3); /* join them */
|
||||
line = lua_tolstring(L, 1, &len); /* get what is has */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -263,6 +263,15 @@ assert(string.find(getoutput(), "error calling 'print'"))
|
||||
RUN('echo "io.stderr:write(1000)\ncont" | lua -e "require\'debug\'.debug()" 2> %s', out)
|
||||
checkout("lua_debug> 1000lua_debug> ")
|
||||
|
||||
do -- test warning for locals
|
||||
RUN('echo " local x" | lua -i > %s 2>&1', out)
|
||||
assert(string.find(getoutput(), "warning: "))
|
||||
|
||||
RUN('echo "local1 = 10\nlocal1 + 3" | lua -i > %s 2>&1', out)
|
||||
local t = getoutput()
|
||||
assert(not string.find(t, "warning"))
|
||||
assert(string.find(t, "13"))
|
||||
end
|
||||
|
||||
print("testing warnings")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user