Tarantool development patches archive
 help / color / mirror / Atom feed
* [Tarantool-patches] [PATCH luajit] test: adapt test checking tail calls debug info
@ 2021-09-30 14:40 Maxim Kokryashkin via Tarantool-patches
  2021-10-11 15:03 ` Sergey Kaplun via Tarantool-patches
  0 siblings, 1 reply; 3+ messages in thread
From: Maxim Kokryashkin via Tarantool-patches @ 2021-09-30 14:40 UTC (permalink / raw)
  To: tarantool-patches, imun, skaplun, m.shishatskiy

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.

Closes tarantool/tarantool#5702
Part of tarantool/tarantool#5845
Part of tarantool/tarantool#4473
---
GitHub branch: https://github.com/tarantool/luajit/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 | 61 +++++++++++++------------------
 1 file changed, 26 insertions(+), 35 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..a94f07ab 100644
--- a/test/PUC-Rio-Lua-5.1-tests/db.lua
+++ b/test/PUC-Rio-Lua-5.1-tests/db.lua
@@ -378,21 +378,22 @@ if jit_is_enabled then
   jit.on()
 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)
+    -- End of single assert
     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,33 @@ 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)
+-- This fucntions is adapted to LuaJIT behavior. See the comment above.
+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
+-- This chunk is adapted to LuaJIT behavior. See the comment above.
+lim = 2
 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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Tarantool-patches] [PATCH luajit] test: adapt test checking tail calls debug info
  2021-09-30 14:40 [Tarantool-patches] [PATCH luajit] test: adapt test checking tail calls debug info Maxim Kokryashkin via Tarantool-patches
@ 2021-10-11 15:03 ` Sergey Kaplun via Tarantool-patches
  2021-10-13 12:37   ` [Tarantool-patches] [PATCH luajit v2] " Maxim Kokryashkin via Tarantool-patches
  0 siblings, 1 reply; 3+ messages in thread
From: Sergey Kaplun via Tarantool-patches @ 2021-10-11 15:03 UTC (permalink / raw)
  To: Maxim Kokryashkin; +Cc: tarantool-patches

Hi, Maxim!

Thanks for the patch!
LGTM, except a few nits below.

On 30.09.21, Maxim Kokryashkin wrote:
> 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.
> 
> Closes tarantool/tarantool#5702
> Part of tarantool/tarantool#5845
> Part of tarantool/tarantool#4473

Looks like it should be 5870 instead 4473. Also, 5845 is already
closed.

> ---
> GitHub branch: https://github.com/tarantool/luajit/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 | 61 +++++++++++++------------------
>  1 file changed, 26 insertions(+), 35 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..a94f07ab 100644
> --- a/test/PUC-Rio-Lua-5.1-tests/db.lua
> +++ b/test/PUC-Rio-Lua-5.1-tests/db.lua
> @@ -378,21 +378,22 @@ if jit_is_enabled then
>    jit.on()
>  end
>  
> -

Nit: this change is excess.

>  -- 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)
> +    -- End of single assert

Don't get this comment.

>      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,33 @@ 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)
> +-- This fucntions is adapted to LuaJIT behavior. See the comment above.

Nit: This comment is excess IMHO: here nothing is changed.
Feel free to ignore.

> +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
> +-- This chunk is adapted to LuaJIT behavior. See the comment above.

Please mention the function nearby the comment as it was done before.
Here and above.

> +lim = 2
>  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
> 

-- 
Best regards,
Sergey Kaplun

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Tarantool-patches] [PATCH luajit v2] test: adapt test checking tail calls debug info
  2021-10-11 15:03 ` Sergey Kaplun via Tarantool-patches
@ 2021-10-13 12:37   ` Maxim Kokryashkin via Tarantool-patches
  0 siblings, 0 replies; 3+ messages in thread
From: Maxim Kokryashkin via Tarantool-patches @ 2021-10-13 12:37 UTC (permalink / raw)
  To: tarantool-patches, imun, skaplun, m.shishatskiy

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


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-10-13 12:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-30 14:40 [Tarantool-patches] [PATCH luajit] test: adapt test checking tail calls debug info Maxim Kokryashkin via Tarantool-patches
2021-10-11 15:03 ` Sergey Kaplun via Tarantool-patches
2021-10-13 12:37   ` [Tarantool-patches] [PATCH luajit v2] " Maxim Kokryashkin via Tarantool-patches

Tarantool development patches archive

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://lists.tarantool.org/tarantool-patches/0 tarantool-patches/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 tarantool-patches tarantool-patches/ https://lists.tarantool.org/tarantool-patches \
		tarantool-patches@dev.tarantool.org.
	public-inbox-index tarantool-patches

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git