- 1
- 2
- 3
do debug.getinfo(1).func() end --рекурсия
do debug.getinfo(2).func() end --вылет нахуй интерпретатора 5.3 версии без ошибки.
do debug.getinfo(3).func() end --не существует с таким индексом. Ошибка.
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+3
do debug.getinfo(1).func() end --рекурсия
do debug.getinfo(2).func() end --вылет нахуй интерпретатора 5.3 версии без ошибки.
do debug.getinfo(3).func() end --не существует с таким индексом. Ошибка.
https://www.lua.org/pil/23.1.html
Похоже lua сгнил
> do print(debug.getinfo(2)) end
table: 0000000000d69f00
но:
> do local x = {}; print(x) x() end
table: 0000000000d6a400
stdin:1: attempt to call a table value (local 'x')
stack traceback:
stdin:1: in main chunk
[C]: in ?
currentline -1
namewhat
linedefined -1
isvararg true
lastlinedefined -1
source =[C]
nups 0
func function: 0000000000401dc0
istailcall false
short_src [C]
nparams 0
what C
с do for k,v in pairs(debug.getinfo(0)) do print(k, v) end end выводит фактически аналогичные параметры.
Только отличает ее функция и параметр namewhat (там вроде фиелд написано). Притом что если я вызову func вызовется debug.getinfo.
Значит неожиданно стек вызовов в lua индексируется с 0! И 0 и последние вызовы вызываются из С, так как currentline -1 говорит нам о том что это вызвалось вне луа. Значит если в даном случае вызвать debug.getinfo(1).func() то debug.getinfo вызовет само из себя. следовательно рекурсия.
Тогда что лежит во 2 блоке?
Походу там лежит специальный фрейм для возврата в сишку.
Мы не можем подключиться к серверу www.umi.cms.