mirror of
https://github.com/lua/lua.git
synced 2025-02-04 06:13:04 +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
|
** Read multiple lines until a complete Lua statement or an error not
|
||||||
** for an incomplete statement. Start with first line already read in
|
** for an incomplete statement. Start with first line already read in
|
||||||
** the stack.
|
** the stack.
|
||||||
*/
|
*/
|
||||||
static int multiline (lua_State *L) {
|
static int multiline (lua_State *L) {
|
||||||
for (;;) { /* repeat until gets a complete statement */
|
|
||||||
size_t len;
|
size_t len;
|
||||||
const char *line = lua_tolstring(L, 1, &len); /* get what it has */
|
const char *line = lua_tolstring(L, 1, &len); /* get first line */
|
||||||
|
checklocal(line);
|
||||||
|
for (;;) { /* repeat until gets a complete statement */
|
||||||
int status = luaL_loadbuffer(L, line, len, "=stdin"); /* try it */
|
int status = luaL_loadbuffer(L, line, len, "=stdin"); /* try it */
|
||||||
if (!incomplete(L, status) || !pushline(L, 0))
|
if (!incomplete(L, status) || !pushline(L, 0))
|
||||||
return status; /* should not or cannot try to add continuation line */
|
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_pushliteral(L, "\n"); /* add newline... */
|
||||||
lua_insert(L, -2); /* ...between the two lines */
|
lua_insert(L, -2); /* ...between the two lines */
|
||||||
lua_concat(L, 3); /* join them */
|
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)
|
RUN('echo "io.stderr:write(1000)\ncont" | lua -e "require\'debug\'.debug()" 2> %s', out)
|
||||||
checkout("lua_debug> 1000lua_debug> ")
|
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")
|
print("testing warnings")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user