diff --git a/CHANGES.current b/CHANGES.current index db28fbc2c..fda995085 100644 --- a/CHANGES.current +++ b/CHANGES.current @@ -5,7 +5,11 @@ See the RELEASENOTES file for a summary of changes in each release. Version 2.0.2 (in progress) =========================== -2010-01-17: wsfulton +2011-01-30: wsfulton + Fix overloading with const pointer reference (SWIGTYPE *const&) parameters for a + number of scripting languages. + +2011-01-17: wsfulton New warning for smart pointers if only some of the classes in the inheritance chain are marked as smart pointer, eg, %shared_ptr should be used for all classes in an inheritance hierarchy, so this new warning highlights code where this is @@ -14,12 +18,12 @@ Version 2.0.2 (in progress) example.i:12: Warning 520: Base class 'A' of 'B' is not similarly marked as a smart pointer. example.i:16: Warning 520: Derived class 'C' of 'B' is not similarly marked as a smart pointer. -2010-01-14: wsfulton +2011-01-14: wsfulton Added some missing multi-argument typemaps: (char *STRING, size_t LENGTH) and (char *STRING, int LENGTH). Documentation for this updated. Java patch from Volker Grabsch. -2010-01-11: iant +2011-01-11: iant Require Go version 7077 or later. 2010-12-30: klickverbot diff --git a/Examples/test-suite/csharp/pointer_reference_runme.cs b/Examples/test-suite/csharp/pointer_reference_runme.cs index d00555199..2b9f526af 100644 --- a/Examples/test-suite/csharp/pointer_reference_runme.cs +++ b/Examples/test-suite/csharp/pointer_reference_runme.cs @@ -12,6 +12,9 @@ public class pointer_reference_runme { Struct ss = new Struct(20); pointer_reference.set(ss); if (Struct.instance.value != 20) throw new Exception("set test failed"); + + if (pointer_reference.overloading(1) != 111) throw new Exception("overload test 1 failed"); + if (pointer_reference.overloading(ss) != 222) throw new Exception("overload test 2 failed"); } } diff --git a/Examples/test-suite/java/pointer_reference_runme.java b/Examples/test-suite/java/pointer_reference_runme.java index e8bd6800e..284951611 100644 --- a/Examples/test-suite/java/pointer_reference_runme.java +++ b/Examples/test-suite/java/pointer_reference_runme.java @@ -19,5 +19,8 @@ public class pointer_reference_runme { Struct ss = new Struct(20); pointer_reference.set(ss); if (Struct.getInstance().getValue() != 20) throw new RuntimeException("set test failed"); + + if (pointer_reference.overloading(1) != 111) throw new RuntimeException("overload test 1 failed"); + if (pointer_reference.overloading(ss) != 222) throw new RuntimeException("overload test 2 failed"); } } diff --git a/Examples/test-suite/lua/pointer_reference_runme.lua b/Examples/test-suite/lua/pointer_reference_runme.lua index 959d5a2a3..428c76998 100644 --- a/Examples/test-suite/lua/pointer_reference_runme.lua +++ b/Examples/test-suite/lua/pointer_reference_runme.lua @@ -9,3 +9,5 @@ ss = pointer_reference.Struct(20); pointer_reference.set(ss); assert(pointer_reference.Struct_instance.value == 20) +assert(pointer_reference.overloading(1) == 111) +assert(pointer_reference.overloading(ss) == 222) diff --git a/Examples/test-suite/php/pointer_reference_runme.php b/Examples/test-suite/php/pointer_reference_runme.php index 782760a37..52946177e 100644 --- a/Examples/test-suite/php/pointer_reference_runme.php +++ b/Examples/test-suite/php/pointer_reference_runme.php @@ -11,5 +11,8 @@ pointer_reference::set($ss); $i = Struct::instance(); check::equal($i->value, 20, "pointer_reference::set() failed"); +check::equal(pointer_reference::overloading(1), 111, "overload test 1 failed"); +check::equal(pointer_reference::overloading($ss), 222, "overload test 2 failed"); + check::done(); ?> diff --git a/Examples/test-suite/pointer_reference.i b/Examples/test-suite/pointer_reference.i index c57a32374..b9e126fd4 100644 --- a/Examples/test-suite/pointer_reference.i +++ b/Examples/test-suite/pointer_reference.i @@ -35,6 +35,12 @@ void set(Struct *const& s) { Struct *const& get() { return Struct::pInstance; } +int overloading(int i) { + return 111; +} +int overloading(Struct *const& s) { + return 222; +} %} %{ diff --git a/Examples/test-suite/python/pointer_reference_runme.py b/Examples/test-suite/python/pointer_reference_runme.py new file mode 100644 index 000000000..e1a1a1f4b --- /dev/null +++ b/Examples/test-suite/python/pointer_reference_runme.py @@ -0,0 +1,16 @@ +import pointer_reference + +s = pointer_reference.get() +if s.value != 10: + raise RuntimeError, "get test failed" + +ss = pointer_reference.Struct(20) +pointer_reference.set(ss) +if pointer_reference.cvar.Struct_instance.value != 20: + raise RuntimeError, "set test failed" + +if pointer_reference.overloading(1) != 111: + raise RuntimeError, "overload test 1 failed" + +if pointer_reference.overloading(ss) != 222: + raise RuntimeError, "overload test 2 failed" diff --git a/Lib/php/php.swg b/Lib/php/php.swg index ed336d6d2..db3b3ed09 100644 --- a/Lib/php/php.swg +++ b/Lib/php/php.swg @@ -446,6 +446,12 @@ _v = (SWIG_ConvertPtr(*$input, (void**)&tmp, $1_descriptor, 0) >= 0); } +%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE *const& +{ + void *tmp; + _v = (SWIG_ConvertPtr(*$input, (void**)&tmp, $*1_descriptor, 0) >= 0); +} + %typecheck(SWIG_TYPECHECK_VOIDPTR) void * { void *tmp; diff --git a/Lib/typemaps/swigtype.swg b/Lib/typemaps/swigtype.swg index f57766962..bd113e278 100644 --- a/Lib/typemaps/swigtype.swg +++ b/Lib/typemaps/swigtype.swg @@ -301,7 +301,7 @@ %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER,noblock=1) SWIGTYPE *const& { void *vptr = 0; - int res = SWIG_ConvertPtr($input, &vptr, $descriptor, 0); + int res = SWIG_ConvertPtr($input, &vptr, $*descriptor, 0); $1 = SWIG_CheckState(res); }