From: Maxim Kokryashkin via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: tarantool-patches@dev.tarantool.org, imun@tarantool.org, skaplun@tarantool.org Subject: [Tarantool-patches] [PATCH luajit] test: adapt tests checking debug line hook trace Date: Fri, 24 Sep 2021 19:27:16 +0300 [thread overview] Message-ID: <20210924162716.101342-1-m.kokryashkin@tarantool.org> (raw) The LuaJIT's virtual machine interprets the bytecode following the return from function (i.e. the one succeeding the call made) and located on the line other than that return bytecode, as a new line trigger for line hooks, unlike Lua does. Here is an example (it is joined in one line intend): debug.sethook(function(_, l) print("LINE: "..l) end, "l") loadstring("\n\ns=nil")() debug.sethook() This chunk prints for LuaJIT: LINE: 3 LINE: 1 But for Lua 5.1 it is only "LINE: 3" in the output. See also https://github.com/tarantool/tarantool/issues/5693. Considering implementation-defined behaviour difference (see also https://luajit.org/status.html) test is disabled for LuaJIT. Closes tarantool/tarantool#5693 Part of tarantool/tarantool#5845 Part of tarantool/tarantool#4473 --- Issue: https://github.com/tarantool/tarantool/issues/5693 GitHub branch: https://github.com/tarantool/luajit/tree/fckxorg/gh-5693-PUC-Rio-debug-line-hook test/PUC-Rio-Lua-5.1-tests/db.lua | 54 ++++++++++++++++--------------- 1 file changed, 28 insertions(+), 26 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..99efe8ef 100644 --- a/test/PUC-Rio-Lua-5.1-tests/db.lua +++ b/test/PUC-Rio-Lua-5.1-tests/db.lua @@ -8,6 +8,26 @@ do local a=1 end +-- The LuaJIT's virtual machine interprets the bytecode +-- following the return from function (i.e. the one succeeding +-- the call made) and located on the line other than that return +-- bytecode, as a new line trigger for line hooks, unlike Lua +-- does. +-- Here is an example (it is joined in one line intend): +--[[ +debug.sethook(function(_, l) print("LINE: "..l) end, "l") loadstring("\n\ns=nil")() debug.sethook() +--]] +-- This chunk prints for LuaJIT: +--[[ +LINE: 3 +LINE: 1 +--]] +-- But for Lua 5.1 it is only "LINE: 3" in the output. +-- See also https://github.com/tarantool/tarantool/issues/5693. +-- Considering implementation-defined behaviour difference +-- (see also https://luajit.org/status.html) test is disabled for +-- LuaJIT. +-- This function is modified to correspond with LuaJIT's line triggers. function test (s, l, p) collectgarbage() -- avoid gc during trace local function f (event, line) @@ -16,7 +36,7 @@ function test (s, l, p) if p then print(l, line) end assert(l == line, "wrong trace!!") end - debug.sethook(f,"l"); loadstring(s)(); debug.sethook() + local cur_line = debug.getinfo(1).currentline; table.insert(l, 1, cur_line); table.insert(l, cur_line); debug.sethook(f,"l"); loadstring(s)(); debug.sethook() assert(table.getn(l) == 0) end @@ -25,7 +45,7 @@ do local a = debug.getinfo(print) assert(a.what == "C" and a.short_src == "[C]") local b = debug.getinfo(test, "SfL") - assert(b.name == nil and b.what == "Lua" and b.linedefined == 11 and + assert(b.name == nil and b.what == "Lua" and b.linedefined == 31 and b.lastlinedefined == b.linedefined + 10 and b.func == test and not string.find(b.short_src, "%[")) assert(b.activelines[b.linedefined + 1] and @@ -95,26 +115,6 @@ repeat assert(g(f) == 'a') until 1 --- FIXME: The LuaJIT's virtual machine interprets the bytecode --- following the return from function (i.e. the one succeeding --- the call made) and located on the line other than that return --- bytecode, as a new line trigger for line hooks, unlike Lua --- does. --- Here is an example (it is joined in one line intend): ---[[ -debug.sethook(function(_, l) print("LINE: "..l) end, "l") loadstring("\n\ns=nil")() debug.sethook() ---]] --- This chunk prints for LuaJIT: ---[[ -LINE: 3 -LINE: 1 ---]] --- But for Lua 5.1 it is only "LINE: 3" in the output. --- See also https://github.com/tarantool/tarantool/issues/5693. --- Considering implementation-defined behaviour difference --- (see also https://luajit.org/status.html) test is disabled for --- LuaJIT. ---[=[ test([[if math.sin(1) then @@ -132,23 +132,25 @@ else end ]], {2,5,6}) +-- Test is adapted to the behaviour of LuaJIT. test([[a=1 repeat a=a+1 until a==3 -]], {1,3,4,3,4}) +]], {1,2,3,4,2,3,4}) test([[ do return end ]], {2}) +-- Test is adapted to the behaviour of LuaJIT. test([[local a a=1 while a<=3 do a=a+1 end -]], {2,3,4,3,4,3,4,3,5}) +]], {1,2,3,4,3,4,3,4,3,5}) test([[while math.sin(1) do if math.sin(1) @@ -168,8 +170,8 @@ test([[for i,v in pairs{'a','b'} do end ]], {1,2,1,2,1,3}) -test([[for i=1,4 do a=1 end]], {1,1,1,1,1}) ---]=] +-- Test is adapted to the behaviour of LuaJIT. +test([[for i=1,4 do a=1 end]], {1,1,1,1}) print'+' -- 2.33.0
next reply other threads:[~2021-09-24 16:27 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-09-24 16:27 Maxim Kokryashkin via Tarantool-patches [this message] 2021-10-11 15:19 ` Sergey Kaplun 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=20210924162716.101342-1-m.kokryashkin@tarantool.org \ --to=tarantool-patches@dev.tarantool.org \ --cc=imun@tarantool.org \ --cc=max.kokryashkin@gmail.com \ --cc=skaplun@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH luajit] test: adapt tests checking debug line hook trace' \ /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