[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Stack with a tail call is missing function names?
- From: Paul K <paulclinger@...>
- Date: Tue, 19 Jun 2012 10:40:21 -0700
I came across this issue and can't figure out if this is my bug or
Lua's feature. I have this simple script that shows a stack trace.
When I have normal calls in the stack, all function names are properly
reported, but with a tail call in the stack, the name of the function
called is not reported as I'd expect it:
Without tail call:
tail @D:/Lua/rem/tail.lua 12 13 Lua upvalue
tail @D:/Lua/rem/tail.lua 12 15 Lua upvalue
tail @D:/Lua/rem/tail.lua 12 15 Lua local
nil @D:/Lua/rem/tail.lua 0 18 main
With tail call:
nil @D:/Lua/rem/tail.lua 12 13 Lua
=(tail call) -1 -1 tail
=(tail call) -1 -1 tail
nil @D:/Lua/rem/tail.lua 0 18 main
Why did "tail" disappear in the first line? And why is it no longer
reported as upvalue?
Here is the script;
local function stack(start)
for i = (start or 0), 100 do
local source = debug.getinfo(i, "Snl")
if not source then break end
print(source.name, source.source, source.linedefined,
source.currentline, source.what, source.namewhat)
if source.what == 'main' then break end
end
print()
end
local function tail(a)
stack(2)
if a <= 1 then return 1
else return tail(a-1) end <-- change this to tail(a-1)+0 to make it
a non-tail call
end
tail(3)
Thanks.
Paul.