Add Lua pointer reference typemaps
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10363 626c5289-ae23-0410-ae9c-e8d60b6d4f22
diff --git a/CHANGES.current b/CHANGES.current
index 1e18fd4..719e32f 100644
--- a/CHANGES.current
+++ b/CHANGES.current
@@ -1,6 +1,9 @@
Version 1.3.35 (7 April 2008)
=============================
+04/07/2008: wsfulton
+ [Lua] Add missing pointer reference typemaps
+
04/06/2008: wsfulton
Fix stack overflow when using typemap warning suppression, eg
%warnfilter(SWIGWARN_TYPEMAP_CHARLEAK_MSG)
diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk
index 91a89b3..c69b9d8 100644
--- a/Examples/test-suite/common.mk
+++ b/Examples/test-suite/common.mk
@@ -51,6 +51,7 @@
extend_variable \
namespace_union \
nested_comment \
+ operator_overload_break \
overload_complicated \
template_default_pointer \
template_expr
@@ -207,7 +208,6 @@
newobject1 \
ordering \
operator_overload \
- operator_overload_break \
overload_copy \
overload_extend \
overload_rename \
diff --git a/Examples/test-suite/lua/pointer_reference_runme.lua b/Examples/test-suite/lua/pointer_reference_runme.lua
new file mode 100644
index 0000000..959d5a2
--- /dev/null
+++ b/Examples/test-suite/lua/pointer_reference_runme.lua
@@ -0,0 +1,11 @@
+require("import") -- the import fn
+import("pointer_reference",true) -- import code
+
+
+s=pointer_reference.get()
+assert(s.value == 10)
+
+ss = pointer_reference.Struct(20);
+pointer_reference.set(ss);
+assert(pointer_reference.Struct_instance.value == 20)
+
diff --git a/Lib/lua/luatypemaps.swg b/Lib/lua/luatypemaps.swg
index 425f7de..60955fc 100644
--- a/Lib/lua/luatypemaps.swg
+++ b/Lib/lua/luatypemaps.swg
@@ -159,12 +159,16 @@
%}
// Also needed for object ptrs by const ref
-// eg const A* ref_pointer(A* const& a);
+// eg A* const& ref_pointer(A* const& a);
// found in mixed_types.i
-%typemap(in,checkfn="lua_isuserdata") SWIGTYPE* const &($*ltype temp)
+%typemap(in,checkfn="lua_isuserdata") SWIGTYPE *&($*ltype temp)
%{temp=($*ltype)SWIG_MustGetPtr(L,$input,$*descriptor,0,$argnum,"$symname");
$1=&temp;%}
+%typemap(out) SWIGTYPE *&
+%{SWIG_NewPointerObj(L,*$1,$*descriptor,$owner); SWIG_arg++; %}
+
+
// DISOWN-ing typemaps
// if you have an object pointer which must be disowned, use this typemap
// eg. for void destroy_foo(Foo* toDie);