Sergey, On 21.08.2024 11:58, Sergey Kaplun wrote: > This patch moves the aforementioned test from the to the > directory, includes it in , and names the subtests. > > Part of tarantool/tarantool#9398 > --- thanks for the patch! LGTM > test/LuaJIT-tests/lang/hook_top.lua | 59 +++++++++++++++++++++++++++++ > test/LuaJIT-tests/lang/index | 1 + > test/LuaJIT-tests/misc/hook_top.lua | 55 --------------------------- > 3 files changed, 60 insertions(+), 55 deletions(-) > create mode 100644 test/LuaJIT-tests/lang/hook_top.lua > delete mode 100644 test/LuaJIT-tests/misc/hook_top.lua > > diff --git a/test/LuaJIT-tests/lang/hook_top.lua b/test/LuaJIT-tests/lang/hook_top.lua > new file mode 100644 > index 00000000..4cab2559 > --- /dev/null > +++ b/test/LuaJIT-tests/lang/hook_top.lua > @@ -0,0 +1,59 @@ > +local t = {} > +for i = 1, 26 do t[i] = string.char(96 + i) end > + > +local function tcheck(t1, t2) > + assert(#t1 == #t2) > + for i = 1, #t1 do assert(t1[i] == t2[i]) end > +end > + > +local function foo1(...) -- VARG RETM > + return ... > +end > + > +local function foo2(...) -- VARG UCLO RETM > + local function dummy() end > + return ... > +end > + > +local function foo3(...) -- VARG UCLO -> RETM > + do return ... end > + local function dummy() end > +end > + > +local function foo4() -- UCLO UCLO RET > + do > + local x > + local function dummy() return x end > + end > +end > + > +local function foo5(a) > + assert(a == "bar") > +end > + > +do --- Run hook on each bytecode instruction. > + local called = false > + debug.sethook(function() local x = "wrong"; called = true end, "", 1) > + tcheck(t, {foo1(unpack(t))}) -- CALLM TSETM > + assert(called) > + called = false > + tcheck(t, {foo2(unpack(t))}) > + assert(called) > + called = false > + tcheck(t, {foo3(unpack(t))}) > + assert(called) > + called = false > + foo4() > + assert(called) > + debug.sethook(nil) > +end > + > +do --- Set local variable given to a function inside the hook. > + debug.sethook(function() > + local name, val = debug.getlocal(2, 1) > + assert(name == "a" and val == nil) > + debug.setlocal(2, 1, "bar") > + debug.sethook(nil) > + end, "c") > + foo5() > +end > diff --git a/test/LuaJIT-tests/lang/index b/test/LuaJIT-tests/lang/index > index ae59bc56..327b40fe 100644 > --- a/test/LuaJIT-tests/lang/index > +++ b/test/LuaJIT-tests/lang/index > @@ -10,6 +10,7 @@ dualnum.lua > for.lua > hook_active.lua > hook_line.lua > +hook_top.lua > length.lua > lightud.lua > modulo.lua > diff --git a/test/LuaJIT-tests/misc/hook_top.lua b/test/LuaJIT-tests/misc/hook_top.lua > deleted file mode 100644 > index f809fcea..00000000 > --- a/test/LuaJIT-tests/misc/hook_top.lua > +++ /dev/null > @@ -1,55 +0,0 @@ > - > -local t = {} > -for i=1,26 do t[i] = string.char(96+i) end > - > -local function tcheck(t1, t2) > - assert(#t1 == #t2) > - for i=1,#t1 do assert(t1[i] == t2[i]) end > -end > - > -local function foo1(...) -- VARG RETM > - return ... > -end > - > -local function foo2(...) -- VARG UCLO RETM > - local function dummy() end > - return ... > -end > - > -local function foo3(...) -- VARG UCLO -> RETM > - do return ... end > - local function dummy() end > -end > - > -local function foo4() -- UCLO UCLO RET > - do > - local x > - local function dummy() return x end > - end > -end > - > -called = false > -debug.sethook(function() local x = "wrong"; called = true end, "", 1) > -tcheck(t, {foo1(unpack(t))}) -- CALLM TSETM > -assert(called) > -called = false > -tcheck(t, {foo2(unpack(t))}) > -assert(called) > -called = false > -tcheck(t, {foo2(unpack(t))}) > -assert(called) > -called = false > -foo4() > -assert(called) > - > -debug.sethook(function() > - local name, val = debug.getlocal(2, 1) > - assert(name == "a" and val == nil) > - debug.setlocal(2, 1, "bar") > - debug.sethook(nil) > -end, "c") > -local function foo5(a) > - assert(a == "bar") > -end > -foo5() > -