[Tarantool-patches] [PATCH v2 luajit 20/45] test: enable <misc/hook_top.lua> LuaJIT test
Sergey Bronnikov
sergeyb at tarantool.org
Fri Aug 23 18:17:15 MSK 2024
Sergey,
On 21.08.2024 11:58, Sergey Kaplun wrote:
> This patch moves the aforementioned test from the <misc> to the <lang/>
> directory, includes it in <index>, 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()
> -
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.tarantool.org/pipermail/tarantool-patches/attachments/20240823/e5a68f57/attachment.htm>
More information about the Tarantool-patches
mailing list