From: Maxim Kokryashkin via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: tarantool-patches@dev.tarantool.org, imun@tarantool.org, skaplun@tarantool.org, m.shishatskiy@tarantool.org Subject: [Tarantool-patches] [PATCH luajit v2] test: adapt test checking tail calls debug info Date: Wed, 13 Oct 2021 15:37:44 +0300 [thread overview] Message-ID: <20211013123744.2418018-1-m.kokryashkin@tarantool.org> (raw) In-Reply-To: <YWRSVwrhha+hnfcw@root> LuaJIT does not provide information about tail calls, unlike Lua does. getfenv() behavior for this test set is also different in LuaJIT, because tail calls do not provide additional call frame. Part of tarantool/tarantool#5870 --- GitHub branch: https://github.com/tarantool/luajit/tree/fckxorg/gh-5702-adapt-getfenv-getinfo-PUC-Rio CI: https://github.com/tarantool/tarantool/tree/fckxorg/gh-5702-adapt-getfenv-getinfo-PUC-Rio Issue: https://github.com/tarantool/tarantool/issues/5702 See also: https://luajit.org/status.html test/PUC-Rio-Lua-5.1-tests/db.lua | 58 +++++++++++++------------------ 1 file changed, 24 insertions(+), 34 deletions(-) diff --git a/test/PUC-Rio-Lua-5.1-tests/db.lua b/test/PUC-Rio-Lua-5.1-tests/db.lua index 56f59ea8..cfe54cac 100644 --- a/test/PUC-Rio-Lua-5.1-tests/db.lua +++ b/test/PUC-Rio-Lua-5.1-tests/db.lua @@ -380,19 +380,20 @@ end -- tests for tail calls +-- LuaJIT does not provide information about tail calls, +-- unlike Lua does. See also https://luajit.org/status.html. +-- getfenv() behavior is also different here, because tail calls +-- do not provide additional call frame for LuaJIT. +-- See also https://github.com/tarantool/tarantool/issues/5702. +-- This function is adapted to LuaJIT behavior. local function f (x) if x then assert(debug.getinfo(1, "S").what == "Lua") local tail = debug.getinfo(2) - assert(not pcall(getfenv, 3)) - assert(tail.what == "tail" and tail.short_src == "(tail call)" and - tail.linedefined == -1 and tail.func == nil) - assert(debug.getinfo(3, "f").func == g1) + assert(pcall(getfenv, 3)) + assert(tail.what == "Lua" and tail.linedefined == 403 and tail.func == g1) assert(getfenv(3)) - assert(debug.getinfo(4, "S").what == "tail") - assert(not pcall(getfenv, 5)) - assert(debug.getinfo(5, "S").what == "main") - assert(getfenv(5)) + assert(debug.getinfo(3, "S").what == "main") print"+" end end @@ -403,43 +404,32 @@ function g1(x) g(x) end local function h (x) local f=g1; return f(x) end --- FIXME: LuaJIT does not provide information about tail calls, --- unlike Lua does. See also https://luajit.org/status.html. --- getfenv() behaviour is also different here, because tail calls --- do not provide additional call frame for LuaJIT and level --- number should be changed. --- Test is disabled for LuaJIT. --- See also https://github.com/tarantool/tarantool/issues/5702. --- h(true) +h(true) local b = {} --- FIXME: Behavior is different for LuaJIT. See the comment above. --- Test is disabled for LuaJIT. --- debug.sethook(function (e) table.insert(b, e) end, "cr") --- h(false) --- debug.sethook() -local res = {"return", -- first return (from sethook) - "call", "call", "call", "call", - "return", "tail return", "return", "tail return", - "call", -- last call (to sethook) +debug.sethook(function (e) table.insert(b, e) end, "cr") +-- This fucntions is adapted to LuaJIT behavior. See the comment above. +h(false) +debug.sethook() +-- This chunk is adapted to LuaJIT behavior. See the comment above. +local res = {"call", -- first return (from sethook) + "call", "call", "call", "return", + "return", "call" } --- FIXME: Behavior is different for LuaJIT. See the comment above. --- Test is disabled for LuaJIT. --- for _, k in ipairs(res) do assert(k == table.remove(b, 1)) end +for _, k in ipairs(res) do assert(k == table.remove(b, 1)) end -lim = 30000 +lim = 2 +-- This function is adapted to LuaJIT behavior. See the comment above. local function foo (x) if x==0 then - assert(debug.getinfo(lim+2).what == "main") - for i=2,lim do assert(debug.getinfo(i, "S").what == "tail") end + assert(debug.getinfo(lim + 1,"S").what == "main") + assert(debug.getinfo(lim, "S").what == "main") else return foo(x-1) end end --- FIXME: Behavior is different for LuaJIT. --- See the comment to `h()` above. Test is disabled for LuaJIT. --- foo(lim) +foo(lim) print"+" -- 2.33.0
next prev parent reply other threads:[~2021-10-13 12:37 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-09-30 14:40 [Tarantool-patches] [PATCH luajit] " Maxim Kokryashkin via Tarantool-patches 2021-10-11 15:03 ` Sergey Kaplun via Tarantool-patches 2021-10-13 12:37 ` Maxim Kokryashkin via Tarantool-patches [this message] 2022-06-01 16:21 ` [Tarantool-patches] [PATCH luajit v2] " Igor Munkin via Tarantool-patches 2022-06-20 12:47 ` [Tarantool-patches] [PATCH luajit] " Igor Munkin via Tarantool-patches
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20211013123744.2418018-1-m.kokryashkin@tarantool.org \ --to=tarantool-patches@dev.tarantool.org \ --cc=imun@tarantool.org \ --cc=m.shishatskiy@tarantool.org \ --cc=max.kokryashkin@gmail.com \ --cc=skaplun@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH luajit v2] test: adapt test checking tail calls debug info' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox