-
-
Notifications
You must be signed in to change notification settings - Fork 577
Open
Description
Simple example to reproduce:
#include <sol/sol.hpp>
int main() {
sol::state state;
state.open_libraries(sol::lib::base, sol::lib::coroutine);
constexpr std::string_view name = "foo";
constexpr unsigned key = 42;
sol::table table(state, sol::create);
table[key] = name;
state.set_function("f", [=]{
auto r = table[key]; // crash
// sol::object r = table[key]; // ok
return r;
});
state.script(R"lua(
print('begin script')
co = coroutine.wrap(function()
print('co')
print(f())
end)
co()
print('end script')
)lua");
return 0;
}- It leads to SIGSEGV with Lua 5.3.5: https://godbolt.org/z/jzeP5h1Wz
- Does not crash with Lua 5.4.0 but prints
nilinstead offoo: https://godbolt.org/z/3oe8785fE
stack trace with [LuaJIT](https://github.com/LuaJIT/LuaJIT/commit/a4f56a459a588ae768801074b46ba0adcfb49eb1):
Thread 1 (Thread 0x7ffff7eb07c0 (LWP 37790) "sol_test"):
#0 0x00007ffff7f02e75 in lj_cont_dispatch () from /home/elsid/dev/LuaJIT/build/gcc/debug/install/lib/libluajit-5.1.so.2
No symbol table info available.
#1 0x00007ffff7f03a04 in lj_ff_coroutine_wrap_aux () from /home/elsid/dev/LuaJIT/build/gcc/debug/install/lib/libluajit-5.1.so.2
No symbol table info available.
#2 0x00007ffff7f246fe in lua_pcall (L=0x7ffff7ec1380, nargs=0, nresults=-1, errfunc=1) at lj_api.c:1151
g = 0x7ffff7ec13e0
oldh = 0 '\000'
ef = 16
status = 32767
#3 0x0000555555564ec6 in sol::basic_protected_function<sol::stack_reference, true, sol::basic_reference<false> >::luacall<true> (this=0x7fffffffe0f0, argcount=0, result_count_=-1, h=...) at /home/elsid/dev/sol2/include/sol/protected_function.hpp:315
No locals.
#4 0x000055555556404a in sol::basic_protected_function<sol::stack_reference, true, sol::basic_reference<false> >::invoke<true>(sol::types<>, std::integer_sequence<unsigned long>, long, sol::detail::protected_handler<true, sol::basic_reference<false> >&) const (this=0x7fffffffe0f0, n=0, h=...) at /home/elsid/dev/sol2/include/sol/protected_function.hpp:346
stacksize = 2
poststacksize = 2
firstreturn = 1
returncount = 0
code = sol::call_status::ok
#5 0x000055555556209f in sol::basic_protected_function<sol::stack_reference, true, sol::basic_reference<false> >::call<>() const (this=0x7fffffffe0f0) at /home/elsid/dev/sol2/include/sol/protected_function.hpp:254
h = {m_L = 0x7ffff7ec1380, target = @0x7fffffffe100, stack_index = 1}
pushcount = 0
#6 0x00005555555621c8 in sol::basic_protected_function<sol::stack_reference, true, sol::basic_reference<false> >::operator()<>() const (this=0x7fffffffe0f0) at /home/elsid/dev/sol2/include/sol/protected_function.hpp:213
No locals.
#7 0x0000555555560636 in sol::state_view::do_string (this=0x7fffffffe4d8, code=..., chunkname=..., mode=sol::load_mode::any) at /home/elsid/dev/sol2/include/sol/state_view.hpp:339
basechunkname = "\nprint('start')\nco = coroutine.wrap(function()\n print('co')\n print(f())\nend)\nco()\nprint('end')\n", '\000' <repeats 410 times>
chunknametarget = 0x7fffffffe110 "\nprint('start')\nco = coroutine.wrap(function()\n print('co')\n print(f())\nend)\nco()\nprint('end')\n"
x = sol::load_status::ok
pf = {<sol::basic_object<sol::stack_reference>> = {<sol::basic_object_base<sol::stack_reference>> = {<sol::stack_reference> = {<sol::stateless_stack_reference> = {m_index = 1}, luastate = 0x7ffff7ec1380}, <No data fields>}, <No data fields>}, m_error_handler = {<sol::stateless_reference> = {ref = 5}, luastate = 0x7ffff7ec1380}}
#8 0x0000555555562230 in sol::state_view::safe_script<sol::protected_function_result (&)(lua_State*, sol::protected_function_result), (sol::meta::enable_t)0> (this=0x7fffffffe4d8, code=..., on_error=@0x5555555602c7: {sol::protected_function_result (lua_State *, sol::protected_function_result)} 0x5555555602c7 <sol::script_default_on_error(lua_State*, sol::protected_function_result)>, chunkname=..., mode=sol::load_mode::any) at /home/elsid/dev/sol2/include/sol/state_view.hpp:384
pfr = {<sol::proxy_base<sol::protected_function_result>> = {<sol::proxy_base_tag> = {<No data fields>}, <No data fields>}, L = 0x7fffffffe3e0, index = 1431676772, returncount = 21845, popcount = -135523456, err = 32767}
#9 0x00005555555606f6 in sol::state_view::safe_script (this=0x7fffffffe4d8, code=..., chunkname=..., mode=sol::load_mode::any) at /home/elsid/dev/sol2/include/sol/state_view.hpp:409
No locals.
#10 0x0000555555560759 in sol::state_view::script (this=0x7fffffffe4d8, code=..., chunkname=..., mode=sol::load_mode::any) at /home/elsid/dev/sol2/include/sol/state_view.hpp:562
No locals.
#11 0x000055555555a51c in main () at /home/elsid/dev/sol_test/src/main.cpp:21
state = {<std::unique_ptr<lua_State, sol::detail::state_deleter>> = {_M_t = {<std::__uniq_ptr_impl<lua_State, sol::detail::state_deleter>> = {_M_t = {<std::_Tuple_impl<0, lua_State*, sol::detail::state_deleter>> = {<std::_Tuple_impl<1, sol::detail::state_deleter>> = {<std::_Head_base<1, sol::detail::state_deleter, true>> = {_M_head_impl = {<No data fields>}}, <No data fields>}, <std::_Head_base<0, lua_State*, false>> = {_M_head_impl = 0x7ffff7ec1380}, <No data fields>}, <No data fields>}}, <No data fields>}}, <sol::state_view> = {L = 0x7ffff7ec1380, reg = {<sol::basic_object<sol::basic_reference<false> >> = {<sol::basic_object_base<sol::basic_reference<false> >> = {<sol::basic_reference<false>> = {<sol::stateless_reference> = {ref = 1}, luastate = 0x7ffff7ec1380}, <No data fields>}, <No data fields>}, <No data fields>}, global = {<sol::basic_object<sol::basic_reference<false> >> = {<sol::basic_object_base<sol::basic_reference<false> >> = {<sol::basic_reference<false>> = {<sol::stateless_reference> = {ref = 2}, luastate = 0x7ffff7ec1380}, <No data fields>}, <No data fields>}, <No data fields>}}, <No data fields>}
name = {_M_len = 3, _M_str = 0x555555567c65 "foo"}
key = 42
table = {<sol::basic_object<sol::basic_reference<false> >> = {<sol::basic_object_base<sol::basic_reference<false> >> = {<sol::basic_reference<false>> = {<sol::stateless_reference> = {ref = 3}, luastate = 0x7ffff7ec1380}, <No data fields>}, <No data fields>}, <No data fields>}
Traces of Lua calls:
auto r = table[key];
luaL_newstate
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_pushvalue L = 0x7f08fe6ac380 idx = -10000
luaL_ref L = 0x7f08fe6ac380 t = -10000
lua_type L = 0x7f08fe6ac380 idx = -10000
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_pushvalue L = 0x7f08fe6ac380 idx = -10002
luaL_ref L = 0x7f08fe6ac380 t = -10000
lua_atpanic L = 0x7f08fe6ac380 panicf = 1
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_pushcclosure L = 0x7f08fe6ac380 fn = 1 n = 0
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_pushvalue L = 0x7f08fe6ac380 idx = -1
luaL_ref L = 0x7f08fe6ac380 t = -10000
lua_settop L = 0x7f08fe6ac380 idx = -2
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_rawgeti L = 0x7f08fe6ac380 idx = -10000 n = 3
lua_type L = 0x7f08fe6ac380 idx = -1
lua_setfield L = 0x7f08fe6ac380 idx = -10002 k = sol.🔩
luaL_unref L = 0x7f08fe6ac380 t = -10000 ref = 3
lua_pushlightuserdata L = 0x7f08fe6ac380 p = 0x560935cff75b
lua_setfield L = 0x7f08fe6ac380 idx = -10002 k = sol.☢☢
lua_pushthread L = 0x7f08fe6ac380
lua_setfield L = 0x7f08fe6ac380 idx = -10002 k = sol.📌
lua_checkstack L = 0x7f08fe6ac380 sz = 23
lua_checkstack L = 0x7f08fe6ac380 sz = 23
lua_pushstring L = 0x7f08fe6ac380 s = _LOADED
lua_tolstring L = 0x7f08fe6ac380 idx = -1 len = 0
lua_gettable L = 0x7f08fe6ac380 idx = -10000
lua_type L = 0x7f08fe6ac380 idx = -1
lua_type L = 0x7f08fe6ac380 idx = -1
lua_settop L = 0x7f08fe6ac380 idx = -2
lua_createtable L = 0x7f08fe6ac380 narr = 0 nrec = 0
lua_pushstring L = 0x7f08fe6ac380 s = _LOADED
lua_tolstring L = 0x7f08fe6ac380 idx = -1 len = 0
lua_pushvalue L = 0x7f08fe6ac380 idx = -2
lua_settable L = 0x7f08fe6ac380 idx = -10000
lua_getfield L = 0x7f08fe6ac380 idx = -1 k = base
lua_type L = 0x7f08fe6ac380 idx = -1
lua_settop L = 0x7f08fe6ac380 idx = -2
lua_pushcclosure L = 0x7f08fe6ac380 fn = 1 n = 0
lua_pushstring L = 0x7f08fe6ac380 s = base
lua_tolstring L = 0x7f08fe6ac380 idx = -1 len = 0
lua_call L = 0x7f08fe6ac380 nargs = 1 nresults = 1
luaopen_base L = 0x7f08fe6ac380
lua_pushvalue L = 0x7f08fe6ac380 idx = -1
lua_setfield L = 0x7f08fe6ac380 idx = -3 k = base
lua_pushvalue L = 0x7f08fe6ac380 idx = -1
lua_setfield L = 0x7f08fe6ac380 idx = -10002 k = base
lua_replace L = 0x7f08fe6ac380 idx = -2
lua_settop L = 0x7f08fe6ac380 idx = -2
lua_checkstack L = 0x7f08fe6ac380 sz = 23
lua_checkstack L = 0x7f08fe6ac380 sz = 23
lua_pushstring L = 0x7f08fe6ac380 s = _LOADED
lua_tolstring L = 0x7f08fe6ac380 idx = -1 len = 0
lua_gettable L = 0x7f08fe6ac380 idx = -10000
lua_type L = 0x7f08fe6ac380 idx = -1
lua_type L = 0x7f08fe6ac380 idx = -1
lua_getfield L = 0x7f08fe6ac380 idx = -1 k = base
lua_type L = 0x7f08fe6ac380 idx = -1
lua_pushvalue L = 0x7f08fe6ac380 idx = -1
lua_setfield L = 0x7f08fe6ac380 idx = -10002 k = base
lua_replace L = 0x7f08fe6ac380 idx = -2
lua_settop L = 0x7f08fe6ac380 idx = -2
lua_createtable L = 0x7f08fe6ac380 narr = 0 nrec = 0
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_pushvalue L = 0x7f08fe6ac380 idx = -1
luaL_ref L = 0x7f08fe6ac380 t = -10000
lua_settop L = 0x7f08fe6ac380 idx = -2
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_rawgeti L = 0x7f08fe6ac380 idx = -10000 n = 3
lua_type L = 0x7f08fe6ac380 idx = -1
lua_gettop L = 0x7f08fe6ac380
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_pushnumber L = 0x7f08fe6ac380 n = 42
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_pushlstring L = 0x7f08fe6ac380 s = foo l = 3
lua_tolstring L = 0x7f08fe6ac380 idx = -1 len = 0
lua_settable L = 0x7f08fe6ac380 idx = 1
lua_settop L = 0x7f08fe6ac380 idx = -1
lua_settop L = 0x7f08fe6ac380 idx = -2
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_rawgeti L = 0x7f08fe6ac380 idx = -10000 n = 3
lua_type L = 0x7f08fe6ac380 idx = -1
luaL_ref L = 0x7f08fe6ac380 t = -10000
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_pushnil L = 0x7f08fe6ac380
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_newuserdata L = 0x7f08fe6ac380 sz = 31
lua_checkstack L = 0x7f08fe6ac380 sz = 21
luaL_newmetatable L = 0x7f08fe6ac380 tname = sol.sol::function_detail::functor_function<main()::<lambda()>, false, true>.user♻
lua_pushstring L = 0x7f08fe6ac380 s = sol.sol::function_detail::functor_function<main()::<lambda()>, false, true>.user♻
lua_tolstring L = 0x7f08fe6ac380 idx = -1 len = 0
lua_setfield L = 0x7f08fe6ac380 idx = -2 k = __name
lua_pushcclosure L = 0x7f08fe6ac380 fn = 1 n = 0
lua_setfield L = 0x7f08fe6ac380 idx = -2 k = __gc
lua_setmetatable L = 0x7f08fe6ac380 objindex = -2
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_pushcclosure L = 0x7f08fe6ac380 fn = 1 n = 2
lua_setfield L = 0x7f08fe6ac380 idx = -10002 k = f
lua_settop L = 0x7f08fe6ac380 idx = -1
luaL_loadbuffer L = 0x7f08fe6ac380 buff =
print('begin script')
co = coroutine.wrap(function()
print('co')
print(f())
end)
co()
print('end script')
sz = 115 name =
print('begin script')
co = coroutine.wrap(function()
print('co')
print(f())
end)
co()
print('end script')
lua_getfield L = 0x7f08fe6ac380 idx = -10002 k = sol.🔩
lua_type L = 0x7f08fe6ac380 idx = -1
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_pushvalue L = 0x7f08fe6ac380 idx = -1
luaL_ref L = 0x7f08fe6ac380 t = -10000
lua_settop L = 0x7f08fe6ac380 idx = -2
lua_gettop L = 0x7f08fe6ac380
lua_type L = 0x7f08fe6ac380 idx = -1
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_pushvalue L = 0x7f08fe6ac380 idx = 1
lua_gettop L = 0x7f08fe6ac380
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_rawgeti L = 0x7f08fe6ac380 idx = -10000 n = 5
lua_type L = 0x7f08fe6ac380 idx = -1
lua_replace L = 0x7f08fe6ac380 idx = -3
lua_gettop L = 0x7f08fe6ac380
lua_gettop L = 0x7f08fe6ac380
lua_pcall L = 0x7f08fe6ac380 nargs = 0 nresults = -1 errfunc = 1
lua_type L = 0x7f08fe6b1280 idx = -10004
lua_touserdata L = 0x7f08fe6b1280 idx = -10004
lua_settop L = 0x7f08fe6b1280 idx = 0
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_rawgeti L = 0x7f08fe6ac380 idx = -10000 n = 4
lua_type L = 0x7f08fe6ac380 idx = -1
lua_gettop L = 0x7f08fe6ac380
lua_gettop L = 0x7f08fe6b1280
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_pushnumber L = 0x7f08fe6ac380 n = 42
lua_gettable L = 0x7f08fe6ac380 idx = 1
lua_type L = 0x7f08fe6ac380 idx = -1
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_pushvalue L = 0x7f08fe6ac380 idx = -1
luaL_ref L = 0x7f08fe6ac380 t = -10000
lua_settop L = 0x7f08fe6ac380 idx = -1
lua_checkstack L = 0x7f08fe6ac380 sz = 21
lua_rawgeti L = 0x7f08fe6ac380 idx = -10000 n = 6
lua_type L = 0x7f08fe6ac380 idx = -1
luaL_unref L = 0x7f08fe6ac380 t = -10000 ref = 6
lua_replace L = 0x7f08fe6b1280 idx = 1
lua_settop L = 0x7f08fe6b1280 idx = 1
lua_settop L = 0x7f08fe6ac380 idx = -2
sol::object r = table[key];
luaL_newstate
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_pushvalue L = 0x7f4a71b79380 idx = -10000
luaL_ref L = 0x7f4a71b79380 t = -10000
lua_type L = 0x7f4a71b79380 idx = -10000
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_pushvalue L = 0x7f4a71b79380 idx = -10002
luaL_ref L = 0x7f4a71b79380 t = -10000
lua_atpanic L = 0x7f4a71b79380 panicf = 1
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_pushcclosure L = 0x7f4a71b79380 fn = 1 n = 0
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_pushvalue L = 0x7f4a71b79380 idx = -1
luaL_ref L = 0x7f4a71b79380 t = -10000
lua_settop L = 0x7f4a71b79380 idx = -2
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_rawgeti L = 0x7f4a71b79380 idx = -10000 n = 3
lua_type L = 0x7f4a71b79380 idx = -1
lua_setfield L = 0x7f4a71b79380 idx = -10002 k = sol.🔩
luaL_unref L = 0x7f4a71b79380 t = -10000 ref = 3
lua_pushlightuserdata L = 0x7f4a71b79380 p = 0x557089cfd7b3
lua_setfield L = 0x7f4a71b79380 idx = -10002 k = sol.☢☢
lua_pushthread L = 0x7f4a71b79380
lua_setfield L = 0x7f4a71b79380 idx = -10002 k = sol.📌
lua_checkstack L = 0x7f4a71b79380 sz = 23
lua_checkstack L = 0x7f4a71b79380 sz = 23
lua_pushstring L = 0x7f4a71b79380 s = _LOADED
lua_tolstring L = 0x7f4a71b79380 idx = -1 len = 0
lua_gettable L = 0x7f4a71b79380 idx = -10000
lua_type L = 0x7f4a71b79380 idx = -1
lua_type L = 0x7f4a71b79380 idx = -1
lua_settop L = 0x7f4a71b79380 idx = -2
lua_createtable L = 0x7f4a71b79380 narr = 0 nrec = 0
lua_pushstring L = 0x7f4a71b79380 s = _LOADED
lua_tolstring L = 0x7f4a71b79380 idx = -1 len = 0
lua_pushvalue L = 0x7f4a71b79380 idx = -2
lua_settable L = 0x7f4a71b79380 idx = -10000
lua_getfield L = 0x7f4a71b79380 idx = -1 k = base
lua_type L = 0x7f4a71b79380 idx = -1
lua_settop L = 0x7f4a71b79380 idx = -2
lua_pushcclosure L = 0x7f4a71b79380 fn = 1 n = 0
lua_pushstring L = 0x7f4a71b79380 s = base
lua_tolstring L = 0x7f4a71b79380 idx = -1 len = 0
lua_call L = 0x7f4a71b79380 nargs = 1 nresults = 1
luaopen_base L = 0x7f4a71b79380
lua_pushvalue L = 0x7f4a71b79380 idx = -1
lua_setfield L = 0x7f4a71b79380 idx = -3 k = base
lua_pushvalue L = 0x7f4a71b79380 idx = -1
lua_setfield L = 0x7f4a71b79380 idx = -10002 k = base
lua_replace L = 0x7f4a71b79380 idx = -2
lua_settop L = 0x7f4a71b79380 idx = -2
lua_checkstack L = 0x7f4a71b79380 sz = 23
lua_checkstack L = 0x7f4a71b79380 sz = 23
lua_pushstring L = 0x7f4a71b79380 s = _LOADED
lua_tolstring L = 0x7f4a71b79380 idx = -1 len = 0
lua_gettable L = 0x7f4a71b79380 idx = -10000
lua_type L = 0x7f4a71b79380 idx = -1
lua_type L = 0x7f4a71b79380 idx = -1
lua_getfield L = 0x7f4a71b79380 idx = -1 k = base
lua_type L = 0x7f4a71b79380 idx = -1
lua_pushvalue L = 0x7f4a71b79380 idx = -1
lua_setfield L = 0x7f4a71b79380 idx = -10002 k = base
lua_replace L = 0x7f4a71b79380 idx = -2
lua_settop L = 0x7f4a71b79380 idx = -2
lua_createtable L = 0x7f4a71b79380 narr = 0 nrec = 0
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_pushvalue L = 0x7f4a71b79380 idx = -1
luaL_ref L = 0x7f4a71b79380 t = -10000
lua_settop L = 0x7f4a71b79380 idx = -2
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_rawgeti L = 0x7f4a71b79380 idx = -10000 n = 3
lua_type L = 0x7f4a71b79380 idx = -1
lua_gettop L = 0x7f4a71b79380
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_pushnumber L = 0x7f4a71b79380 n = 42
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_pushlstring L = 0x7f4a71b79380 s = foo l = 3
lua_tolstring L = 0x7f4a71b79380 idx = -1 len = 0
lua_settable L = 0x7f4a71b79380 idx = 1
lua_settop L = 0x7f4a71b79380 idx = -1
lua_settop L = 0x7f4a71b79380 idx = -2
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_rawgeti L = 0x7f4a71b79380 idx = -10000 n = 3
lua_type L = 0x7f4a71b79380 idx = -1
luaL_ref L = 0x7f4a71b79380 t = -10000
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_pushnil L = 0x7f4a71b79380
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_newuserdata L = 0x7f4a71b79380 sz = 31
lua_checkstack L = 0x7f4a71b79380 sz = 21
luaL_newmetatable L = 0x7f4a71b79380 tname = sol.sol::function_detail::functor_function<main()::<lambda()>, false, true>.user♻
lua_pushstring L = 0x7f4a71b79380 s = sol.sol::function_detail::functor_function<main()::<lambda()>, false, true>.user♻
lua_tolstring L = 0x7f4a71b79380 idx = -1 len = 0
lua_setfield L = 0x7f4a71b79380 idx = -2 k = __name
lua_pushcclosure L = 0x7f4a71b79380 fn = 1 n = 0
lua_setfield L = 0x7f4a71b79380 idx = -2 k = __gc
lua_setmetatable L = 0x7f4a71b79380 objindex = -2
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_pushcclosure L = 0x7f4a71b79380 fn = 1 n = 2
lua_setfield L = 0x7f4a71b79380 idx = -10002 k = f
lua_settop L = 0x7f4a71b79380 idx = -1
luaL_loadbuffer L = 0x7f4a71b79380 buff =
print('begin script')
co = coroutine.wrap(function()
print('co')
print(f())
end)
co()
print('end script')
sz = 115 name =
print('begin script')
co = coroutine.wrap(function()
print('co')
print(f())
end)
co()
print('end script')
lua_getfield L = 0x7f4a71b79380 idx = -10002 k = sol.🔩
lua_type L = 0x7f4a71b79380 idx = -1
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_pushvalue L = 0x7f4a71b79380 idx = -1
luaL_ref L = 0x7f4a71b79380 t = -10000
lua_settop L = 0x7f4a71b79380 idx = -2
lua_gettop L = 0x7f4a71b79380
lua_type L = 0x7f4a71b79380 idx = -1
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_pushvalue L = 0x7f4a71b79380 idx = 1
lua_gettop L = 0x7f4a71b79380
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_rawgeti L = 0x7f4a71b79380 idx = -10000 n = 5
lua_type L = 0x7f4a71b79380 idx = -1
lua_replace L = 0x7f4a71b79380 idx = -3
lua_gettop L = 0x7f4a71b79380
lua_gettop L = 0x7f4a71b79380
lua_pcall L = 0x7f4a71b79380 nargs = 0 nresults = -1 errfunc = 1
lua_type L = 0x7f4a71b7e290 idx = -10004
lua_touserdata L = 0x7f4a71b7e290 idx = -10004
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_rawgeti L = 0x7f4a71b79380 idx = -10000 n = 4
lua_type L = 0x7f4a71b79380 idx = -1
lua_gettop L = 0x7f4a71b79380
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_pushnumber L = 0x7f4a71b79380 n = 42
lua_gettable L = 0x7f4a71b79380 idx = 1
lua_type L = 0x7f4a71b79380 idx = -1
lua_checkstack L = 0x7f4a71b79380 sz = 21
lua_pushvalue L = 0x7f4a71b79380 idx = -1
luaL_ref L = 0x7f4a71b79380 t = -10000
lua_settop L = 0x7f4a71b79380 idx = -2
lua_settop L = 0x7f4a71b79380 idx = -2
lua_settop L = 0x7f4a71b7e290 idx = 0
lua_checkstack L = 0x7f4a71b7e290 sz = 21
lua_rawgeti L = 0x7f4a71b79380 idx = -10000 n = 6
lua_type L = 0x7f4a71b79380 idx = -1
lua_xmove from = 0x7f4a71b79380 to = 0x7f4a71b7e290 n = 1
luaL_unref L = 0x7f4a71b79380 t = -10000 ref = 6
lua_gettop L = 0x7f4a71b79380
lua_remove L = 0x7f4a71b79380 idx = 1
luaL_unref L = 0x7f4a71b79380 t = -10000 ref = 5
luaL_unref L = 0x7f4a71b79380 t = -10000 ref = 3
luaL_unref L = 0x7f4a71b79380 t = -10000 ref = 2
luaL_unref L = 0x7f4a71b79380 t = -10000 ref = 1
lua_close L = 0x7f4a71b79380
lua_touserdata L = 0x7f4a71b79380 idx = 1
luaL_unref L = 0x7f4a71b79380 t = -10000 ref = 4
diff
@@ -18,7 +18,7 @@
lua_type L = <ptr1> idx = -1
lua_setfield L = <ptr1> idx = -10002 k = sol.🔩
luaL_unref L = <ptr1> t = -10000 ref = 3
-lua_pushlightuserdata L = <ptr1> p = 0x560935cff75b
+lua_pushlightuserdata L = <ptr1> p = 0x557089cfd7b3
lua_setfield L = <ptr1> idx = -10002 k = sol.☢☢
lua_pushthread L = <ptr1>
lua_setfield L = <ptr1> idx = -10002 k = sol.📌
@@ -136,12 +136,10 @@
lua_pcall L = <ptr1> nargs = 0 nresults = -1 errfunc = 1
lua_type L = <ptr2> idx = -10004
lua_touserdata L = <ptr2> idx = -10004
-lua_settop L = <ptr2> idx = 0
lua_checkstack L = <ptr1> sz = 21
lua_rawgeti L = <ptr1> idx = -10000 n = 4
lua_type L = <ptr1> idx = -1
lua_gettop L = <ptr1>
-lua_gettop L = <ptr2>
lua_checkstack L = <ptr1> sz = 21
lua_pushnumber L = <ptr1> n = 42
lua_gettable L = <ptr1> idx = 1
@@ -149,11 +147,20 @@
lua_checkstack L = <ptr1> sz = 21
lua_pushvalue L = <ptr1> idx = -1
luaL_ref L = <ptr1> t = -10000
-lua_settop L = <ptr1> idx = -1
-lua_checkstack L = <ptr1> sz = 21
+lua_settop L = <ptr1> idx = -2
+lua_settop L = <ptr1> idx = -2
+lua_settop L = <ptr2> idx = 0
+lua_checkstack L = <ptr2> sz = 21
lua_rawgeti L = <ptr1> idx = -10000 n = 6
lua_type L = <ptr1> idx = -1
+lua_xmove from = <ptr1> to = <ptr2> n = 1
luaL_unref L = <ptr1> t = -10000 ref = 6
-lua_replace L = <ptr2> idx = 1
-lua_settop L = <ptr2> idx = 1
-lua_settop L = <ptr1> idx = -2
+lua_gettop L = <ptr1>
+lua_remove L = <ptr1> idx = 1
+luaL_unref L = <ptr1> t = -10000 ref = 5
+luaL_unref L = <ptr1> t = -10000 ref = 3
+luaL_unref L = <ptr1> t = -10000 ref = 2
+luaL_unref L = <ptr1> t = -10000 ref = 1
+lua_close L = <ptr1>
+lua_touserdata L = <ptr1> idx = 1
+luaL_unref L = <ptr1> t = -10000 ref = 4Metadata
Metadata
Assignees
Labels
No labels