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);