From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 854946FC82; Thu, 30 Sep 2021 17:41:11 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 854946FC82 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1633012871; bh=sE7QjshQiFbB+TXOvFvl46YZYBHX0IfdNk6EctZ89bw=; h=To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=tMyxzuLAssKMOzmMoz4KWx7qcYt3hoEt8zdUmo7rizwn35bBlJTWWn+/HBKtYeEo0 CwL3JQWdeKrEtuOlGIibbsAzjdMstGCwOeeiezj8q1789S48nDZx8kO3/E0I/xbni7 7nkUNB/x9SeV+4D5GGVG/fGphaDogc9YqDnqx0Fk= Received: from mail-lf1-f52.google.com (mail-lf1-f52.google.com [209.85.167.52]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id CE1986FC82 for ; Thu, 30 Sep 2021 17:41:09 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org CE1986FC82 Received: by mail-lf1-f52.google.com with SMTP id i25so26304678lfg.6 for ; Thu, 30 Sep 2021 07:41:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=wCoU+9CgRxGBg9toGbBgJnpNOdjG+FzijZi8OuLQfOo=; b=wwyKRWfK/UZ/W9uPT0oJWr0uCP8Pb7mNiQBfKqNMUU+Oj3xs2GeKE1jcIYIDhAK5MQ DiR/kpp9EnvimVt8W2HFkJKDJd9zCGZr2YV3aXUaWb9Sh/riFYGKxAS12LtQXglLFoty Y5d+h0uodg/99/J8LiZ9LM21zmaUSIdVZxAgq3xpOWFhpe2iucQUWWIBWNa5oupreCwm Xuu6bOtKFjU1g3mIODQy1w7Xs6kTc9+J3vHr59v28a2tE/5cnfo2ECEC2IbcVXg+n57Z Bi0hGRV/1/dNQW76z0A0vwaN0xIktINLJ2Q+wAxltTjg/LRWAPB61sVqJzJKwuVs0TeC MmoQ== X-Gm-Message-State: AOAM533e228w9PEPIBnOxnpcGqO9HbE02PR8DGq/j87PsvxIpTChE+yY LEpdu2cfTwGg+woVsHgtlCl8rHgn4W/qTQ== X-Google-Smtp-Source: ABdhPJwuRI2lRLvoF9Q2Yk0GHKgWrc3+H1EIcx8czCmNN+OO/2H1Z/f+sE2tpFbgWzM0TyquGaL7vA== X-Received: by 2002:a05:6512:3a92:: with SMTP id q18mr2809869lfu.519.1633012859096; Thu, 30 Sep 2021 07:40:59 -0700 (PDT) Received: from localhost.localdomain ([93.175.28.45]) by smtp.gmail.com with ESMTPSA id y26sm353320ljy.112.2021.09.30.07.40.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Sep 2021 07:40:58 -0700 (PDT) X-Google-Original-From: Maxim Kokryashkin To: tarantool-patches@dev.tarantool.org, imun@tarantool.org, skaplun@tarantool.org, m.shishatskiy@tarantool.org Date: Thu, 30 Sep 2021 17:40:56 +0300 Message-Id: <20210930144056.1679061-1-m.kokryashkin@tarantool.org> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH luajit] test: adapt test checking tail calls debug info X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Maxim Kokryashkin via Tarantool-patches Reply-To: Maxim Kokryashkin Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" 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