From 33c59614fc55d6ef8404b609836dee75db69bd38 Mon Sep 17 00:00:00 2001 From: Ryan Nevell Date: Mon, 17 Feb 2020 08:45:42 -0800 Subject: [PATCH] Fix unwrapping of LUA lightuserdata type. Add test case. --- Examples/test-suite/lua/Makefile.in | 1 + .../test-suite/lua/lua_lightuserdata_runme.lua | 7 +++++++ Examples/test-suite/lua_lightuserdata.i | 16 ++++++++++++++++ Lib/lua/luarun.swg | 5 +++++ 4 files changed, 29 insertions(+) create mode 100644 Examples/test-suite/lua/lua_lightuserdata_runme.lua create mode 100644 Examples/test-suite/lua_lightuserdata.i diff --git a/Examples/test-suite/lua/Makefile.in b/Examples/test-suite/lua/Makefile.in index 63b8692b1..92559bb8f 100644 --- a/Examples/test-suite/lua/Makefile.in +++ b/Examples/test-suite/lua/Makefile.in @@ -15,6 +15,7 @@ top_builddir = @top_builddir@ CPP_TEST_CASES += \ lua_no_module_global \ lua_inherit_getitem \ + lua_lightuserdata \ C_TEST_CASES += \ diff --git a/Examples/test-suite/lua/lua_lightuserdata_runme.lua b/Examples/test-suite/lua/lua_lightuserdata_runme.lua new file mode 100644 index 000000000..d805c2a74 --- /dev/null +++ b/Examples/test-suite/lua/lua_lightuserdata_runme.lua @@ -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) diff --git a/Examples/test-suite/lua_lightuserdata.i b/Examples/test-suite/lua_lightuserdata.i new file mode 100644 index 000000000..08e15c93c --- /dev/null +++ b/Examples/test-suite/lua_lightuserdata.i @@ -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(0x123456)); + return 1; +} +%} + +%inline %{ +bool check_lighuserdata(const void* d) { + return reinterpret_cast(0x123456) == d; +} +%} diff --git a/Lib/lua/luarun.swg b/Lib/lua/luarun.swg index bd764d668..b8ddf000a 100644 --- a/Lib/lua/luarun.swg +++ b/Lib/lua/luarun.swg @@ -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) {