From: <wsf...@us...> - 2010-12-14 21:38:43
|
Revision: 12347 http://swig.svn.sourceforge.net/swig/?rev=12347&view=rev Author: wsfulton Date: 2010-12-14 21:38:36 +0000 (Tue, 14 Dec 2010) Log Message: ----------- Fix expansion in array typemaps Modified Paths: -------------- trunk/CHANGES.current trunk/Examples/test-suite/common.mk trunk/Source/Swig/typemap.c Added Paths: ----------- trunk/Examples/test-suite/java/typemap_arrays_runme.java trunk/Examples/test-suite/python/typemap_arrays_runme.py trunk/Examples/test-suite/typemap_arrays.i Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2010-12-14 21:11:02 UTC (rev 12346) +++ trunk/CHANGES.current 2010-12-14 21:38:36 UTC (rev 12347) @@ -5,6 +5,10 @@ Version 2.0.2 (in progress) =========================== +2010-12-14: wsfulton + Fix $basemangle expansion in array typemaps. For example if type is int *[3], + $basemangle expands to _p_int. + 2010-12-07: iant Check that we are using a sufficiently new version of the 6g or 8g Go compiler during configure time. If not, disable Go. Modified: trunk/Examples/test-suite/common.mk =================================================================== --- trunk/Examples/test-suite/common.mk 2010-12-14 21:11:02 UTC (rev 12346) +++ trunk/Examples/test-suite/common.mk 2010-12-14 21:38:36 UTC (rev 12347) @@ -397,6 +397,7 @@ typedef_scope \ typedef_sizet \ typedef_struct \ + typemap_arrays \ typemap_delete \ typemap_global_scope \ typemap_namespace \ Added: trunk/Examples/test-suite/java/typemap_arrays_runme.java =================================================================== --- trunk/Examples/test-suite/java/typemap_arrays_runme.java (rev 0) +++ trunk/Examples/test-suite/java/typemap_arrays_runme.java 2010-12-14 21:38:36 UTC (rev 12347) @@ -0,0 +1,19 @@ +import typemap_arrays.*; + +public class typemap_arrays_runme { + + static { + try { + System.loadLibrary("typemap_arrays"); + } catch (UnsatisfiedLinkError e) { + System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e); + System.exit(1); + } + } + + public static void main(String argv[]) { + if (typemap_arrays.sumA(null) != 60) + throw new RuntimeException("Sum is wrong"); + } +} + Added: trunk/Examples/test-suite/python/typemap_arrays_runme.py =================================================================== --- trunk/Examples/test-suite/python/typemap_arrays_runme.py (rev 0) +++ trunk/Examples/test-suite/python/typemap_arrays_runme.py 2010-12-14 21:38:36 UTC (rev 12347) @@ -0,0 +1,5 @@ +from typemap_arrays import * + +if sumA(None) != 60: + raise RuntimeError, "Sum is wrong" + Added: trunk/Examples/test-suite/typemap_arrays.i =================================================================== --- trunk/Examples/test-suite/typemap_arrays.i (rev 0) +++ trunk/Examples/test-suite/typemap_arrays.i 2010-12-14 21:38:36 UTC (rev 12347) @@ -0,0 +1,30 @@ +%module typemap_arrays + +// Test that previously non-working array typemaps special variables are working + +%typemap(in) SWIGTYPE[ANY] { + _should_not_be_used_and_will_not_compile_ +} + +// Check $basemangle expands to _p_int and $basetype expands to int * +%typemap(in) int *nums[3] (int *temp[3]) { + $basetype var1$basemangle = new int(10); + $basetype var2$basemangle = new int(20); + $basetype var3$basemangle = new int(30); + temp[0] = var1_p_int; + temp[1] = var2_p_int; + temp[2] = var3_p_int; + $1 = temp; +} + +%inline %{ +int sumA(int *nums[3]) { + int sum = 0; + for (int i=0; i<3; ++i) { + int *p = nums[i]; + if (p) + sum += *p; + } + return sum; +} +%} Modified: trunk/Source/Swig/typemap.c =================================================================== --- trunk/Source/Swig/typemap.c 2010-12-14 21:11:02 UTC (rev 12346) +++ trunk/Source/Swig/typemap.c 2010-12-14 21:38:36 UTC (rev 12347) @@ -963,7 +963,7 @@ { SwigType *star_type, *amp_type, *base_type, *lex_type; SwigType *ltype, *star_ltype, *amp_ltype; - String *mangle, *star_mangle, *amp_mangle, *base_mangle, *base_name; + String *mangle, *star_mangle, *amp_mangle, *base_mangle, *base_name, *base_type_str; String *descriptor, *star_descriptor, *amp_descriptor; String *ts; char *sc; @@ -1132,21 +1132,20 @@ /* Base type */ if (SwigType_isarray(type)) { - SwigType *bt = Copy(type); - Delete(SwigType_pop_arrays(bt)); - base_type = SwigType_str(bt, 0); - Delete(bt); + base_type = Copy(type); + Delete(SwigType_pop_arrays(base_type)); } else { base_type = SwigType_base(type); } - base_name = SwigType_namestr(base_type); + base_type_str = SwigType_str(base_type, 0); + base_name = SwigType_namestr(base_type_str); if (index == 1) { Replace(s, "$basetype", base_name, DOH_REPLACE_ANY); replace_local_types(locals, "$basetype", base_name); } strcpy(varname, "basetype"); - Replace(s, var, base_type, DOH_REPLACE_ANY); + Replace(s, var, base_type_str, DOH_REPLACE_ANY); replace_local_types(locals, var, base_name); base_mangle = SwigType_manglestr(base_type); @@ -1155,8 +1154,9 @@ strcpy(varname, "basemangle"); Replace(s, var, base_mangle, DOH_REPLACE_ANY); Delete(base_mangle); + Delete(base_name); + Delete(base_type_str); Delete(base_type); - Delete(base_name); lex_type = SwigType_base(rtype); if (index == 1) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |