summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlly Betts <olly@survex.com>2022-10-19 07:29:06 +1300
committerOlly Betts <ojwbetts@gmail.com>2022-10-20 10:14:59 +1300
commita5bc48afeac0b33631b7aeb544e6a23d99b54bf8 (patch)
treef0e9212ac8d5830622d24a5376cf722e2d1d8a6e
parent867e49d7c50aded9afdd36223f05b84645636f15 (diff)
downloadswig-a5bc48afeac0b33631b7aeb544e6a23d99b54bf8.tar.gz
[Lua] Fix type resolution between SWIG-wrapped modules
See #2126
-rw-r--r--CHANGES.current4
-rw-r--r--Examples/test-suite/lua/mod_runme.lua12
-rw-r--r--Lib/lua/luarun.swg2
3 files changed, 17 insertions, 1 deletions
diff --git a/CHANGES.current b/CHANGES.current
index 0a23158a2..ffebbac46 100644
--- a/CHANGES.current
+++ b/CHANGES.current
@@ -7,6 +7,10 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
Version 4.1.0 (in progress)
===========================
+2022-10-19: olly
+ [Lua] #2126 Fix type resolution between multiple SWIG-wrapped
+ modules.
+
2022-10-17: wsfulton
[R] #2385 Add support for std::vector<std::vector<std::string>>.
diff --git a/Examples/test-suite/lua/mod_runme.lua b/Examples/test-suite/lua/mod_runme.lua
new file mode 100644
index 000000000..444a61b20
--- /dev/null
+++ b/Examples/test-suite/lua/mod_runme.lua
@@ -0,0 +1,12 @@
+require("import") -- the import fn
+import("mod_a") -- import lib
+import("mod_b") -- import lib
+
+-- catch "undefined" global variables
+local env = _ENV -- Lua 5.2
+if not env then env = getfenv () end -- Lua 5.1
+setmetatable(env, {__index=function (t,i) error("undefined global variable `"..i.."'",2) end})
+
+c = mod_b.C()
+d = mod_b.D()
+d:DoSomething(c)
diff --git a/Lib/lua/luarun.swg b/Lib/lua/luarun.swg
index 909a5229c..f47fd4fac 100644
--- a/Lib/lua/luarun.swg
+++ b/Lib/lua/luarun.swg
@@ -1789,7 +1789,7 @@ SWIGRUNTIME int SWIG_Lua_ConvertPtr(lua_State *L,int index,void **ptr,swig_type
}
else
{
- cast=SWIG_TypeCheckStruct(usr->type,type); /* performs normal type checking */
+ cast=SWIG_TypeCheck(usr->type->name,type); /* performs normal type checking */
if (cast)
{
int newmemory = 0;