Order change in 'pushfuncname'
'pushglobalfuncname' can be quite slow (as it traverses all globals and all loaded modules), so try first to get a name from the code.
This commit is contained in:
10
lauxlib.c
10
lauxlib.c
@@ -94,14 +94,14 @@ static int pushglobalfuncname (lua_State *L, lua_Debug *ar) {
|
|||||||
|
|
||||||
|
|
||||||
static void pushfuncname (lua_State *L, lua_Debug *ar) {
|
static void pushfuncname (lua_State *L, lua_Debug *ar) {
|
||||||
if (pushglobalfuncname(L, ar)) { /* try first a global name */
|
if (*ar->namewhat != '\0') /* is there a name from code? */
|
||||||
lua_pushfstring(L, "function '%s'", lua_tostring(L, -1));
|
|
||||||
lua_remove(L, -2); /* remove name */
|
|
||||||
}
|
|
||||||
else if (*ar->namewhat != '\0') /* is there a name from code? */
|
|
||||||
lua_pushfstring(L, "%s '%s'", ar->namewhat, ar->name); /* use it */
|
lua_pushfstring(L, "%s '%s'", ar->namewhat, ar->name); /* use it */
|
||||||
else if (*ar->what == 'm') /* main? */
|
else if (*ar->what == 'm') /* main? */
|
||||||
lua_pushliteral(L, "main chunk");
|
lua_pushliteral(L, "main chunk");
|
||||||
|
else if (pushglobalfuncname(L, ar)) { /* try a global name */
|
||||||
|
lua_pushfstring(L, "function '%s'", lua_tostring(L, -1));
|
||||||
|
lua_remove(L, -2); /* remove name */
|
||||||
|
}
|
||||||
else if (*ar->what != 'C') /* for Lua functions, use <file:line> */
|
else if (*ar->what != 'C') /* for Lua functions, use <file:line> */
|
||||||
lua_pushfstring(L, "function <%s:%d>", ar->short_src, ar->linedefined);
|
lua_pushfstring(L, "function <%s:%d>", ar->short_src, ar->linedefined);
|
||||||
else /* nothing left... */
|
else /* nothing left... */
|
||||||
|
|||||||
@@ -701,7 +701,7 @@ assert(debug.traceback(print, 4) == print)
|
|||||||
assert(string.find(debug.traceback("hi", 4), "^hi\n"))
|
assert(string.find(debug.traceback("hi", 4), "^hi\n"))
|
||||||
assert(string.find(debug.traceback("hi"), "^hi\n"))
|
assert(string.find(debug.traceback("hi"), "^hi\n"))
|
||||||
assert(not string.find(debug.traceback("hi"), "'debug.traceback'"))
|
assert(not string.find(debug.traceback("hi"), "'debug.traceback'"))
|
||||||
assert(string.find(debug.traceback("hi", 0), "'debug.traceback'"))
|
assert(string.find(debug.traceback("hi", 0), "'traceback'"))
|
||||||
assert(string.find(debug.traceback(), "^stack traceback:\n"))
|
assert(string.find(debug.traceback(), "^stack traceback:\n"))
|
||||||
|
|
||||||
do -- C-function names in traceback
|
do -- C-function names in traceback
|
||||||
@@ -829,7 +829,7 @@ end
|
|||||||
|
|
||||||
co = coroutine.create(function (x) f(x) end)
|
co = coroutine.create(function (x) f(x) end)
|
||||||
a, b = coroutine.resume(co, 3)
|
a, b = coroutine.resume(co, 3)
|
||||||
t = {"'coroutine.yield'", "'f'", "in function <"}
|
t = {"'yield'", "'f'", "in function <"}
|
||||||
while coroutine.status(co) == "suspended" do
|
while coroutine.status(co) == "suspended" do
|
||||||
checktraceback(co, t)
|
checktraceback(co, t)
|
||||||
a, b = coroutine.resume(co)
|
a, b = coroutine.resume(co)
|
||||||
|
|||||||
Reference in New Issue
Block a user