You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I get an empty sol::this_environment when method is called from lua function where object is passed as argument.
When it's called directly from container that is binded to sol it works fine, but when method is called from function where object is passed as argument, sol::this_environment is empty.
One way to fix this is to call some global variable or function before calling this method. I don't know why but this seems to fix the issue.
Here is minimum example.
I have objects in a map that is binded to Lua.
#include"sol/sol.hpp"classC
{
public:C(uint32_t id) : id(id)
{
}
voidfunc(const sol::this_state& s, const sol::this_environment& e)
{
std::cout << "Env " << (e ? "OK!" : "EMPTY!") << std::endl;
}
voidfunc2(const std::string& param, const sol::this_state& s, const sol::this_environment& e)
{
std::cout << "Env " << (e ? "OK! " : "EMPTY! ") << param << std::endl;
}
private:uint32_t id;
};
using ObjectCollection = std::unordered_map<uint32_t, C>;
intmain()
{
sol::state state;
state.open_libraries();
sol::environment environment{state, sol::create};
environment.new_usertype<C>("C",
"func", &C::func,
"func2", &C::func2
);
ObjectCollection objects{};
objects.insert({1, C{1}});
environment["objects"] = objects;
const std::string code = R"( function test1(ob) ob:func() ob:func2("from test1") end function test2(ob) objects[1]:func() -- this call fixes the problem in test2 function ob:func() ob:func2("from test2") end test1(objects[1]) test2(objects[1]) test1(objects[1]))";
state.script(code, environment);
return0;
}
Here is output from code above
Env EMPTY!
Env EMPTY! from test1
Env OK!
Env OK!
Env OK! from test2
Env EMPTY!
Env EMPTY! from test1
I use gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 lua version 5.3
sol single file from latest develop branch 50b62c93 halx99 Sun Dec 12 00:51:19 2021 +0800 Add missing parenthesis for std::max
I get an empty sol::this_environment when method is called from lua function where object is passed as argument.
When it's called directly from container that is binded to sol it works fine, but when method is called from function where object is passed as argument, sol::this_environment is empty.
One way to fix this is to call some global variable or function before calling this method. I don't know why but this seems to fix the issue.
Here is minimum example.
I have objects in a map that is binded to Lua.
Here is output from code above
I use
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
lua version 5.3
sol single file from latest develop branch
50b62c93 halx99 Sun Dec 12 00:51:19 2021 +0800 Add missing parenthesis for std::max
Compile command
gcc lua_example.cpp -o lua_example -Isol2/single/include -I/usr/include/lua5.3 -DSOL_USING_CXX_LUA -O0 -std=c++17 -llua5.3 -lstdc++ -lm
The text was updated successfully, but these errors were encountered: