diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2025-04-03 15:31:22 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2025-04-03 15:31:22 -0300 |
| commit | 3dd8ea54daa77345a8f193e871f6792722d8e131 (patch) | |
| tree | cc60485872b1d79774f1866446fa7a355ca0c87d /lauxlib.c | |
| parent | 620f49a7aae8a5c982b21f0accbf2ff9019a55f6 (diff) | |
| download | lua-3dd8ea54daa77345a8f193e871f6792722d8e131.tar.gz lua-3dd8ea54daa77345a8f193e871f6792722d8e131.tar.bz2 lua-3dd8ea54daa77345a8f193e871f6792722d8e131.zip | |
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.
Diffstat (limited to 'lauxlib.c')
| -rw-r--r-- | lauxlib.c | 10 |
1 files changed, 5 insertions, 5 deletions
| @@ -94,14 +94,14 @@ static int pushglobalfuncname (lua_State *L, lua_Debug *ar) { | |||
| 94 | 94 | ||
| 95 | 95 | ||
| 96 | static void pushfuncname (lua_State *L, lua_Debug *ar) { | 96 | static void pushfuncname (lua_State *L, lua_Debug *ar) { |
| 97 | if (pushglobalfuncname(L, ar)) { /* try first a global name */ | 97 | if (*ar->namewhat != '\0') /* is there a name from code? */ |
| 98 | lua_pushfstring(L, "function '%s'", lua_tostring(L, -1)); | ||
| 99 | lua_remove(L, -2); /* remove name */ | ||
| 100 | } | ||
| 101 | else if (*ar->namewhat != '\0') /* is there a name from code? */ | ||
| 102 | lua_pushfstring(L, "%s '%s'", ar->namewhat, ar->name); /* use it */ | 98 | lua_pushfstring(L, "%s '%s'", ar->namewhat, ar->name); /* use it */ |
| 103 | else if (*ar->what == 'm') /* main? */ | 99 | else if (*ar->what == 'm') /* main? */ |
| 104 | lua_pushliteral(L, "main chunk"); | 100 | lua_pushliteral(L, "main chunk"); |
| 101 | else if (pushglobalfuncname(L, ar)) { /* try a global name */ | ||
| 102 | lua_pushfstring(L, "function '%s'", lua_tostring(L, -1)); | ||
| 103 | lua_remove(L, -2); /* remove name */ | ||
| 104 | } | ||
| 105 | else if (*ar->what != 'C') /* for Lua functions, use <file:line> */ | 105 | else if (*ar->what != 'C') /* for Lua functions, use <file:line> */ |
| 106 | lua_pushfstring(L, "function <%s:%d>", ar->short_src, ar->linedefined); | 106 | lua_pushfstring(L, "function <%s:%d>", ar->short_src, ar->linedefined); |
| 107 | else /* nothing left... */ | 107 | else /* nothing left... */ |
