Fix unwrapping of LUA lightuserdata type. Add test case.

This commit is contained in:
Ryan Nevell 2020-02-17 08:45:42 -08:00
parent b465531141
commit 33c59614fc
4 changed files with 29 additions and 0 deletions

View File

@ -15,6 +15,7 @@ top_builddir = @top_builddir@
CPP_TEST_CASES += \
lua_no_module_global \
lua_inherit_getitem \
lua_lightuserdata \
C_TEST_CASES += \

View File

@ -0,0 +1,7 @@
require("import") -- the import fn
require("lua_lightuserdata") -- import lib
local t = lua_lightuserdata
local d = t.get_lightuserdata()
local r = t.check_lighuserdata(d)
assert(r)

View File

@ -0,0 +1,16 @@
%module lua_lightuserdata
%native(get_lightuserdata) int get_lightuserdata(lua_State* L);
%{
int get_lightuserdata(lua_State* L)
{
lua_pushlightuserdata(L, reinterpret_cast<void*>(0x123456));
return 1;
}
%}
%inline %{
bool check_lighuserdata(const void* d) {
return reinterpret_cast<void*>(0x123456) == d;
}
%}

View File

@ -1765,6 +1765,11 @@ SWIGRUNTIME int SWIG_Lua_ConvertPtr(lua_State *L,int index,void **ptr,swig_type
*ptr=0;
return (flags & SWIG_POINTER_NO_NULL) ? SWIG_NullReferenceError : SWIG_OK;
}
if (lua_islightuserdata(L,index))
{
*ptr=lua_touserdata(L,index);
return (flags & SWIG_POINTER_NO_NULL) ? SWIG_NullReferenceError : SWIG_OK;
}
usr=(swig_lua_userdata*)lua_touserdata(L,index); /* get data */
if (usr)
{