mirror of
https://github.com/lua/lua.git
synced 2026-07-27 00:19:07 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
934fdd481c | ||
|
|
9ac9d23f41 | ||
|
|
1b0f943da7 |
8
lgc.c
8
lgc.c
@@ -553,8 +553,12 @@ static lu_mem traversetable (global_State *g, Table *h) {
|
||||
traverseweakvalue(g, h);
|
||||
else if (!weakvalue) /* strong values? */
|
||||
traverseephemeron(g, h, 0);
|
||||
else /* all weak */
|
||||
linkgclist(h, g->allweak); /* nothing to traverse now */
|
||||
else { /* all weak */
|
||||
if (g->gcstate == GCSpropagate)
|
||||
linkgclist(h, g->grayagain); /* must visit again its metatable */
|
||||
else
|
||||
linkgclist(h, g->allweak); /* must clear collected entries */
|
||||
}
|
||||
}
|
||||
else /* not weak */
|
||||
traversestrongtable(g, h);
|
||||
|
||||
@@ -940,6 +940,8 @@ static void constructor (LexState *ls, expdesc *t) {
|
||||
if (ls->t.token == '}') break;
|
||||
closelistfield(fs, &cc);
|
||||
field(ls, &cc);
|
||||
checklimit(fs, cc.tostore + cc.na + cc.nh, INT_MAX/2,
|
||||
"items in a constructor");
|
||||
} while (testnext(ls, ',') || testnext(ls, ';'));
|
||||
check_match(ls, '}', '{', line);
|
||||
lastlistfield(fs, &cc);
|
||||
|
||||
3
lua.c
3
lua.c
@@ -302,7 +302,8 @@ static int collectargs (char **argv, int *first) {
|
||||
case '-': /* '--' */
|
||||
if (argv[i][2] != '\0') /* extra characters after '--'? */
|
||||
return has_error; /* invalid option */
|
||||
*first = i + 1;
|
||||
/* if there is a script name, it comes after '--' */
|
||||
*first = (argv[i + 1] != NULL) ? i + 1 : 0;
|
||||
return args;
|
||||
case '\0': /* '-' */
|
||||
return args; /* script "name" is '-' */
|
||||
|
||||
@@ -301,6 +301,16 @@ collectgarbage()
|
||||
assert(next(a) == string.rep('$', 11))
|
||||
|
||||
|
||||
if T then -- bug since 5.3: all-weak tables are not being revisited
|
||||
T.gcstate("propagate")
|
||||
local t = setmetatable({}, {__mode = "kv"})
|
||||
T.gcstate("atomic") -- 't' was visited
|
||||
setmetatable(t, {__mode = "kv"})
|
||||
T.gcstate("pause") -- its new metatable is not being visited
|
||||
assert(getmetatable(t).__mode == "kv")
|
||||
end
|
||||
|
||||
|
||||
-- 'bug' in 5.1
|
||||
a = {}
|
||||
local t = {x = 10}
|
||||
|
||||
@@ -90,7 +90,7 @@ prepfile[[
|
||||
1, a
|
||||
)
|
||||
]]
|
||||
RUN('lua - < %s > %s', prog, out)
|
||||
RUN('lua - -- < %s > %s', prog, out)
|
||||
checkout("1\tnil\n")
|
||||
|
||||
RUN('echo "print(10)\nprint(2)\n" | lua > %s', out)
|
||||
@@ -133,7 +133,7 @@ checkout("-h\n")
|
||||
prepfile("print(package.path)")
|
||||
|
||||
-- test LUA_PATH
|
||||
RUN('env LUA_INIT= LUA_PATH=x lua %s > %s', prog, out)
|
||||
RUN('env LUA_INIT= LUA_PATH=x lua -- %s > %s', prog, out)
|
||||
checkout("x\n")
|
||||
|
||||
-- test LUA_PATH_version
|
||||
@@ -346,7 +346,7 @@ RUN([[lua -e"_PROMPT='' _PROMPT2=''" -i < %s > %s]], prog, out)
|
||||
checkprogout("6\n10\n10\n\n")
|
||||
|
||||
prepfile("a = [[b\nc\nd\ne]]\n=a")
|
||||
RUN([[lua -e"_PROMPT='' _PROMPT2=''" -i < %s > %s]], prog, out)
|
||||
RUN([[lua -e"_PROMPT='' _PROMPT2=''" -i -- < %s > %s]], prog, out)
|
||||
checkprogout("b\nc\nd\ne\n\n")
|
||||
|
||||
-- input interrupted in continuation line
|
||||
@@ -478,12 +478,14 @@ assert(not os.remove(out))
|
||||
-- invalid options
|
||||
NoRun("unrecognized option '-h'", "lua -h")
|
||||
NoRun("unrecognized option '---'", "lua ---")
|
||||
NoRun("unrecognized option '-Ex'", "lua -Ex")
|
||||
NoRun("unrecognized option '-Ex'", "lua -Ex --")
|
||||
NoRun("unrecognized option '-vv'", "lua -vv")
|
||||
NoRun("unrecognized option '-iv'", "lua -iv")
|
||||
NoRun("'-e' needs argument", "lua -e")
|
||||
NoRun("syntax error", "lua -e a")
|
||||
NoRun("'-l' needs argument", "lua -l")
|
||||
NoRun("-i", "lua -- -i") -- handles -i as a script name
|
||||
|
||||
|
||||
|
||||
if T then -- test library?
|
||||
|
||||
Reference in New Issue
Block a user