diff options
-rw-r--r-- | ltests.c | 27 | ||||
-rw-r--r-- | testes/coroutine.lua | 2 | ||||
-rw-r--r-- | testes/gc.lua | 8 | ||||
-rw-r--r-- | testes/locals.lua | 4 | ||||
-rw-r--r-- | testes/main.lua | 6 |
5 files changed, 30 insertions, 17 deletions
@@ -121,7 +121,8 @@ static void warnf (void *ud, const char *msg, int tocont) { | |||
121 | strcat(buff, msg); /* add new message to current warning */ | 121 | strcat(buff, msg); /* add new message to current warning */ |
122 | if (!tocont) { /* message finished? */ | 122 | if (!tocont) { /* message finished? */ |
123 | lua_unlock(L); | 123 | lua_unlock(L); |
124 | if (lua_getglobal(L, "_WARN") == LUA_TNIL) | 124 | lua_getglobal(L, "_WARN"); |
125 | if (!lua_toboolean(L, -1)) | ||
125 | lua_pop(L, 1); /* ok, no previous unexpected warning */ | 126 | lua_pop(L, 1); /* ok, no previous unexpected warning */ |
126 | else { | 127 | else { |
127 | badexit("Unhandled warning in store mode: %s\naborting...\n", | 128 | badexit("Unhandled warning in store mode: %s\naborting...\n", |
@@ -1282,10 +1283,19 @@ static int getindex_aux (lua_State *L, lua_State *L1, const char **pc) { | |||
1282 | } | 1283 | } |
1283 | 1284 | ||
1284 | 1285 | ||
1285 | static void pushcode (lua_State *L, int code) { | 1286 | static const char *const statcodes[] = {"OK", "YIELD", "ERRRUN", |
1286 | static const char *const codes[] = {"OK", "YIELD", "ERRRUN", | 1287 | "ERRSYNTAX", MEMERRMSG, "ERRGCMM", "ERRERR"}; |
1287 | "ERRSYNTAX", MEMERRMSG, "ERRGCMM", "ERRERR"}; | 1288 | |
1288 | lua_pushstring(L, codes[code]); | 1289 | /* |
1290 | ** Avoid these stat codes from being collected, to avoid possible | ||
1291 | ** memory error when pushing them. | ||
1292 | */ | ||
1293 | static void regcodes (lua_State *L) { | ||
1294 | unsigned int i; | ||
1295 | for (i = 0; i < sizeof(statcodes) / sizeof(statcodes[0]); i++) { | ||
1296 | lua_pushboolean(L, 1); | ||
1297 | lua_setfield(L, LUA_REGISTRYINDEX, statcodes[i]); | ||
1298 | } | ||
1289 | } | 1299 | } |
1290 | 1300 | ||
1291 | 1301 | ||
@@ -1508,7 +1518,7 @@ static int runC (lua_State *L, lua_State *L1, const char *pc) { | |||
1508 | lua_pushnumber(L1, (lua_Number)getnum); | 1518 | lua_pushnumber(L1, (lua_Number)getnum); |
1509 | } | 1519 | } |
1510 | else if EQ("pushstatus") { | 1520 | else if EQ("pushstatus") { |
1511 | pushcode(L1, status); | 1521 | lua_pushstring(L1, statcodes[status]); |
1512 | } | 1522 | } |
1513 | else if EQ("pushstring") { | 1523 | else if EQ("pushstring") { |
1514 | lua_pushstring(L1, getstring); | 1524 | lua_pushstring(L1, getstring); |
@@ -1710,7 +1720,7 @@ static int Cfunc (lua_State *L) { | |||
1710 | 1720 | ||
1711 | 1721 | ||
1712 | static int Cfunck (lua_State *L, int status, lua_KContext ctx) { | 1722 | static int Cfunck (lua_State *L, int status, lua_KContext ctx) { |
1713 | pushcode(L, status); | 1723 | lua_pushstring(L, statcodes[status]); |
1714 | lua_setglobal(L, "status"); | 1724 | lua_setglobal(L, "status"); |
1715 | lua_pushinteger(L, ctx); | 1725 | lua_pushinteger(L, ctx); |
1716 | lua_setglobal(L, "ctx"); | 1726 | lua_setglobal(L, "ctx"); |
@@ -1865,6 +1875,9 @@ int luaB_opentests (lua_State *L) { | |||
1865 | void *ud; | 1875 | void *ud; |
1866 | lua_atpanic(L, &tpanic); | 1876 | lua_atpanic(L, &tpanic); |
1867 | lua_setwarnf(L, &warnf, L); | 1877 | lua_setwarnf(L, &warnf, L); |
1878 | lua_pushboolean(L, 0); | ||
1879 | lua_setglobal(L, "_WARN"); /* _WARN = false */ | ||
1880 | regcodes(L); | ||
1868 | atexit(checkfinalmem); | 1881 | atexit(checkfinalmem); |
1869 | lua_assert(lua_getallocf(L, &ud) == debug_realloc); | 1882 | lua_assert(lua_getallocf(L, &ud) == debug_realloc); |
1870 | lua_assert(ud == cast_voidp(&l_memcontrol)); | 1883 | lua_assert(ud == cast_voidp(&l_memcontrol)); |
diff --git a/testes/coroutine.lua b/testes/coroutine.lua index 73333c14..0a4c2ef3 100644 --- a/testes/coroutine.lua +++ b/testes/coroutine.lua | |||
@@ -184,7 +184,7 @@ do | |||
184 | if not T then | 184 | if not T then |
185 | warn("@on") | 185 | warn("@on") |
186 | else -- test library | 186 | else -- test library |
187 | assert(string.find(_WARN, "200")); _WARN = nil | 187 | assert(string.find(_WARN, "200")); _WARN = false |
188 | warn("@normal") | 188 | warn("@normal") |
189 | end | 189 | end |
190 | assert(st == false and coroutine.status(co) == "dead" and msg == 111) | 190 | assert(st == false and coroutine.status(co) == "dead" and msg == 111) |
diff --git a/testes/gc.lua b/testes/gc.lua index 91915c0b..80850f92 100644 --- a/testes/gc.lua +++ b/testes/gc.lua | |||
@@ -372,7 +372,7 @@ if T then | |||
372 | warn("@on"); warn("@store") | 372 | warn("@on"); warn("@store") |
373 | collectgarbage() | 373 | collectgarbage() |
374 | assert(string.find(_WARN, "error in __gc metamethod")) | 374 | assert(string.find(_WARN, "error in __gc metamethod")) |
375 | assert(string.match(_WARN, "@(.-)@") == "expected"); _WARN = nil | 375 | assert(string.match(_WARN, "@(.-)@") == "expected"); _WARN = false |
376 | for i = 8, 10 do assert(s[i]) end | 376 | for i = 8, 10 do assert(s[i]) end |
377 | 377 | ||
378 | for i = 1, 5 do | 378 | for i = 1, 5 do |
@@ -481,7 +481,7 @@ if T then | |||
481 | u = setmetatable({}, {__gc = function () error "@expected error" end}) | 481 | u = setmetatable({}, {__gc = function () error "@expected error" end}) |
482 | u = nil | 482 | u = nil |
483 | collectgarbage() | 483 | collectgarbage() |
484 | assert(string.find(_WARN, "@expected error")); _WARN = nil | 484 | assert(string.find(_WARN, "@expected error")); _WARN = false |
485 | warn("@normal") | 485 | warn("@normal") |
486 | end | 486 | end |
487 | 487 | ||
@@ -657,14 +657,14 @@ if T then | |||
657 | n = n + 1 | 657 | n = n + 1 |
658 | assert(n == o[1]) | 658 | assert(n == o[1]) |
659 | if n == 1 then | 659 | if n == 1 then |
660 | _WARN = nil | 660 | _WARN = false |
661 | elseif n == 2 then | 661 | elseif n == 2 then |
662 | assert(find(_WARN, "@expected warning")) | 662 | assert(find(_WARN, "@expected warning")) |
663 | lastmsg = _WARN -- get message from previous error (first 'o') | 663 | lastmsg = _WARN -- get message from previous error (first 'o') |
664 | else | 664 | else |
665 | assert(lastmsg == _WARN) -- subsequent error messages are equal | 665 | assert(lastmsg == _WARN) -- subsequent error messages are equal |
666 | end | 666 | end |
667 | warn("@store"); _WARN = nil | 667 | warn("@store"); _WARN = false |
668 | error"@expected warning" | 668 | error"@expected warning" |
669 | end} | 669 | end} |
670 | for i = 10, 1, -1 do | 670 | for i = 10, 1, -1 do |
diff --git a/testes/locals.lua b/testes/locals.lua index 0e5e0c74..f5e96244 100644 --- a/testes/locals.lua +++ b/testes/locals.lua | |||
@@ -337,7 +337,7 @@ local function endwarn () | |||
337 | if not T then | 337 | if not T then |
338 | warn("@on") -- back to normal | 338 | warn("@on") -- back to normal |
339 | else | 339 | else |
340 | assert(_WARN == nil) | 340 | assert(_WARN == false) |
341 | warn("@normal") | 341 | warn("@normal") |
342 | end | 342 | end |
343 | end | 343 | end |
@@ -346,7 +346,7 @@ end | |||
346 | local function checkwarn (msg) | 346 | local function checkwarn (msg) |
347 | if T then | 347 | if T then |
348 | assert(string.find(_WARN, msg)) | 348 | assert(string.find(_WARN, msg)) |
349 | _WARN = nil -- reset variable to check next warning | 349 | _WARN = false -- reset variable to check next warning |
350 | end | 350 | end |
351 | end | 351 | end |
352 | 352 | ||
diff --git a/testes/main.lua b/testes/main.lua index de14a088..d2d602de 100644 --- a/testes/main.lua +++ b/testes/main.lua | |||
@@ -393,12 +393,12 @@ if T then -- test library? | |||
393 | -- testing 'warn' | 393 | -- testing 'warn' |
394 | warn("@store") | 394 | warn("@store") |
395 | warn("@123", "456", "789") | 395 | warn("@123", "456", "789") |
396 | assert(_WARN == "@123456789"); _WARN = nil | 396 | assert(_WARN == "@123456789"); _WARN = false |
397 | 397 | ||
398 | warn("zip", "", " ", "zap") | 398 | warn("zip", "", " ", "zap") |
399 | assert(_WARN == "zip zap"); _WARN = nil | 399 | assert(_WARN == "zip zap"); _WARN = false |
400 | warn("ZIP", "", " ", "ZAP") | 400 | warn("ZIP", "", " ", "ZAP") |
401 | assert(_WARN == "ZIP ZAP"); _WARN = nil | 401 | assert(_WARN == "ZIP ZAP"); _WARN = false |
402 | warn("@normal") | 402 | warn("@normal") |
403 | end | 403 | end |
404 | 404 | ||