mirror of
https://github.com/lua/lua
synced 2024-11-25 14:20:41 +03:00
Function 'warn' is vararg
Instead of a 'tocont' flag, the function 'warn' in Lua now receives all message pieces as multiple arguments in a single call. Besides being simpler to use, this implementation ensures that Lua code cannot create unfinished warnings.
This commit is contained in:
parent
514d942748
commit
14edd364c3
15
lbaselib.c
15
lbaselib.c
@ -37,9 +37,20 @@ static int luaB_print (lua_State *L) {
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** Creates a warning with all given arguments.
|
||||
** Check first for errors; otherwise an error may interrupt
|
||||
** the composition of a warning, leaving it unfinished.
|
||||
*/
|
||||
static int luaB_warn (lua_State *L) {
|
||||
const char *msg = luaL_checkstring(L, 1);
|
||||
lua_warning(L, msg, lua_toboolean(L, 2));
|
||||
int n = lua_gettop(L); /* number of arguments */
|
||||
int i;
|
||||
luaL_checkstring(L, 1); /* at least one argument */
|
||||
for (i = 2; i <= n; i++)
|
||||
luaL_checkstring(L, i); /* make sure all arguments are strings */
|
||||
for (i = 1; i <= n; i++) /* compose warning */
|
||||
lua_warning(L, lua_tostring(L, i), 1);
|
||||
lua_warning(L, "", 0); /* close warning */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -6326,12 +6326,10 @@ The current value of this variable is @St{Lua 5.4}.
|
||||
|
||||
}
|
||||
|
||||
@LibEntry{warn (message [, tocont])|
|
||||
@LibEntry{warn (msg1, @Cdots)|
|
||||
|
||||
Emits a warning with the given message.
|
||||
A message in a call with @id{tocont} true should be
|
||||
continued in another call to this function.
|
||||
The default for @id{tocont} is false.
|
||||
Emits a warning with a message composed by the concatenation
|
||||
of all its arguments (which should be strings).
|
||||
|
||||
}
|
||||
|
||||
|
@ -5,8 +5,8 @@
|
||||
|
||||
local version = "Lua 5.4"
|
||||
if _VERSION ~= version then
|
||||
warn(string.format(
|
||||
"This test suite is for %s, not for %s\nExiting tests", version, _VERSION))
|
||||
warn("This test suite is for ", version,
|
||||
", not for ", _VERSION, "\nExiting tests")
|
||||
return
|
||||
end
|
||||
|
||||
@ -190,16 +190,13 @@ assert(dofile('verybig.lua', true) == 10); collectgarbage()
|
||||
dofile('files.lua')
|
||||
|
||||
if #msgs > 0 then
|
||||
warn("#tests not performed:", true)
|
||||
for i=1,#msgs do
|
||||
warn("\n ", true); warn(msgs[i], true)
|
||||
end
|
||||
warn("\n")
|
||||
local m = table.concat(msgs, "\n ")
|
||||
warn("#tests not performed:\n ", m, "\n")
|
||||
end
|
||||
|
||||
print("(there should be two warnings now)")
|
||||
warn("#This is ", true); warn("an expected", true); warn(" warning")
|
||||
warn("#This is", true); warn(" another one")
|
||||
warn("#This is ", "an expected", " warning")
|
||||
warn("#This is", " another one")
|
||||
|
||||
-- no test module should define 'debug'
|
||||
assert(debug == nil)
|
||||
@ -216,9 +213,10 @@ _G.showmem = showmem
|
||||
|
||||
end --)
|
||||
|
||||
local _G, showmem, print, format, clock, time, difftime, assert, open =
|
||||
local _G, showmem, print, format, clock, time, difftime,
|
||||
assert, open, warn =
|
||||
_G, showmem, print, string.format, os.clock, os.time, os.difftime,
|
||||
assert, io.open
|
||||
assert, io.open, warn
|
||||
|
||||
-- file with time of last performed test
|
||||
local fname = T and "time-debug.txt" or "time.txt"
|
||||
@ -262,7 +260,7 @@ if not usertests then
|
||||
local diff = (clocktime - lasttime) / lasttime
|
||||
local tolerance = 0.05 -- 5%
|
||||
if (diff >= tolerance or diff <= -tolerance) then
|
||||
print(format("WARNING: time difference from previous test: %+.1f%%",
|
||||
warn(format("#time difference from previous test: %+.1f%%",
|
||||
diff * 100))
|
||||
end
|
||||
assert(open(fname, "w")):write(clocktime):close()
|
||||
|
@ -347,10 +347,26 @@ NoRun("syntax error", "lua -e a")
|
||||
NoRun("'-l' needs argument", "lua -l")
|
||||
|
||||
|
||||
if T then -- auxiliary library?
|
||||
if T then -- test library?
|
||||
print("testing 'not enough memory' to create a state")
|
||||
NoRun("not enough memory", "env MEMLIMIT=100 lua")
|
||||
|
||||
-- testing 'warn'
|
||||
warn("@123", "456", "789")
|
||||
assert(_WARN == "@123456789")
|
||||
end
|
||||
|
||||
do
|
||||
-- 'warn' must get at least one argument
|
||||
local st, msg = pcall(warn)
|
||||
assert(string.find(msg, "string expected"))
|
||||
|
||||
-- 'warn' does not leave unfinished warning in case of errors
|
||||
-- (message would appear in next warning)
|
||||
st, msg = pcall(warn, "SHOULD NOT APPEAR", {})
|
||||
assert(string.find(msg, "string expected"))
|
||||
end
|
||||
|
||||
print('+')
|
||||
|
||||
print('testing Ctrl C')
|
||||
|
Loading…
Reference in New Issue
Block a user