<!DOCTYPE html>
<html data-lt-installed="true">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body style="padding-bottom: 1px;">
<p>Sergey,<br>
</p>
<div class="moz-cite-prefix">On 21.08.2024 11:58, Sergey Kaplun
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:a29a8cded952ba4a21a11839d3c5eb04843ebfa4.1724228998.git.skaplun@tarantool.org">
<pre class="moz-quote-pre" wrap="">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
---</pre>
</blockquote>
thanks for the patch! LGTM<br>
<blockquote type="cite"
cite="mid:a29a8cded952ba4a21a11839d3c5eb04843ebfa4.1724228998.git.skaplun@tarantool.org">
<pre class="moz-quote-pre" wrap="">
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()
-
</pre>
</blockquote>
</body>
<lt-container></lt-container>
</html>