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.
diff --git a/lbaselib.c b/lbaselib.c
index 83f61e6..4724e75 100644
--- a/lbaselib.c
+++ b/lbaselib.c
@@ -37,9 +37,20 @@
 }
 
 
+/*
+** 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;
 }
 
diff --git a/manual/manual.of b/manual/manual.of
index eb4e671..4c9c20b 100644
--- a/manual/manual.of
+++ b/manual/manual.of
@@ -6326,12 +6326,10 @@
 
 }
 
-@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).
 
 }
 
diff --git a/testes/all.lua b/testes/all.lua
index 8d727b6..2e6fe03 100644
--- a/testes/all.lua
+++ b/testes/all.lua
@@ -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 @@
 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 @@
 
 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 @@
   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()
diff --git a/testes/main.lua b/testes/main.lua
index 47d84d4..4c09645 100644
--- a/testes/main.lua
+++ b/testes/main.lua
@@ -347,10 +347,26 @@
 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')