From: <wsf...@us...> - 2011-01-24 19:27:13
|
Revision: 12400 http://swig.svn.sourceforge.net/swig/?rev=12400&view=rev Author: wsfulton Date: 2011-01-24 19:27:06 +0000 (Mon, 24 Jan 2011) Log Message: ----------- Fix C# typemaps.i so that %apply works doesn't break function returns using the same types, for example, %apply int & { int &x } won't break 'int &foo(int &x);' Modified Paths: -------------- trunk/Lib/csharp/typemaps.i Added Paths: ----------- trunk/Examples/test-suite/li_typemaps_apply.i Added: trunk/Examples/test-suite/li_typemaps_apply.i =================================================================== --- trunk/Examples/test-suite/li_typemaps_apply.i (rev 0) +++ trunk/Examples/test-suite/li_typemaps_apply.i 2011-01-24 19:27:06 UTC (rev 12400) @@ -0,0 +1,46 @@ +%module li_typemaps_apply + +// Test %apply to global primitive type references/pointers to make sure the return types are still okay... mainly for the strongly typed languages. + +%include "typemaps.i" + +#if !defined(SWIGJAVA) // Needs asymmetric type marshalling support for this testcase to work + +%define TMAPS(PRIMTYPE, NAME) +%apply PRIMTYPE *INPUT { PRIMTYPE * } +%apply PRIMTYPE &INPUT { PRIMTYPE & } +%inline %{ +PRIMTYPE *input_ptr_##NAME(PRIMTYPE *v) { static PRIMTYPE stat; stat = *v; return &stat; } +PRIMTYPE &input_ref_##NAME(PRIMTYPE &v) { static PRIMTYPE stat; stat = v; return stat; } +%} + +%apply PRIMTYPE *OUTPUT { PRIMTYPE * } +%apply PRIMTYPE &OUTPUT { PRIMTYPE & } +%inline %{ +PRIMTYPE *output_ptr_##NAME(PRIMTYPE x, PRIMTYPE *v) { static PRIMTYPE stat; stat = x; *v = x; return &stat; } +PRIMTYPE &output_ref_##NAME(PRIMTYPE x, PRIMTYPE &v) { static PRIMTYPE stat; stat = x; v = x; return stat; } +%} + +%apply PRIMTYPE *INOUT { PRIMTYPE * } +%apply PRIMTYPE &INOUT { PRIMTYPE & } +%inline %{ +PRIMTYPE *inout_ptr_##NAME(PRIMTYPE *v) { static PRIMTYPE stat; stat = *v; *v = *v; return &stat; } +PRIMTYPE &inout_ref_##NAME(PRIMTYPE &v) { static PRIMTYPE stat; stat = v; v = v; return stat; } +%} +%enddef + +TMAPS(bool, bool) +TMAPS(int, int) +TMAPS(short, short) +TMAPS(long, long) +TMAPS(unsigned int, uint) +TMAPS(unsigned short, ushort) +TMAPS(unsigned long, ulong) +TMAPS(unsigned char, uchar) +TMAPS(signed char, schar) +TMAPS(float, float) +TMAPS(double, double) +TMAPS(long long, longlong) +TMAPS(unsigned long long, ulonglong) + +#endif Modified: trunk/Lib/csharp/typemaps.i =================================================================== --- trunk/Lib/csharp/typemaps.i 2011-01-18 06:53:59 UTC (rev 12399) +++ trunk/Lib/csharp/typemaps.i 2011-01-24 19:27:06 UTC (rev 12400) @@ -51,13 +51,12 @@ In C# you could then use it like this: double answer = modulename.fadd(10.0, 20.0); - */ %define INPUT_TYPEMAP(TYPE, CTYPE, CSTYPE) -%typemap(ctype) TYPE *INPUT, TYPE &INPUT "CTYPE" -%typemap(imtype) TYPE *INPUT, TYPE &INPUT "CSTYPE" -%typemap(cstype) TYPE *INPUT, TYPE &INPUT "CSTYPE" +%typemap(ctype, out="void *") TYPE *INPUT, TYPE &INPUT "CTYPE" +%typemap(imtype, out="IntPtr") TYPE *INPUT, TYPE &INPUT "CSTYPE" +%typemap(cstype, out="$csclassname") TYPE *INPUT, TYPE &INPUT "CSTYPE" %typemap(csin) TYPE *INPUT, TYPE &INPUT "$csinput" %typemap(csdirectorin) TYPE *INPUT, TYPE &INPUT "$iminput" %typemap(csdirectorout) TYPE *INPUT, TYPE &INPUT "$cscall" @@ -143,18 +142,16 @@ double dptr; double fraction = modulename.modf(5, out dptr); - */ %define OUTPUT_TYPEMAP(TYPE, CTYPE, CSTYPE, TYPECHECKPRECEDENCE) -%typemap(ctype) TYPE *OUTPUT, TYPE &OUTPUT "CTYPE *" -%typemap(imtype) TYPE *OUTPUT, TYPE &OUTPUT "out CSTYPE" -%typemap(cstype) TYPE *OUTPUT, TYPE &OUTPUT "out CSTYPE" +%typemap(ctype, out="void *") TYPE *OUTPUT, TYPE &OUTPUT "CTYPE *" +%typemap(imtype, out="IntPtr") TYPE *OUTPUT, TYPE &OUTPUT "out CSTYPE" +%typemap(cstype, out="$csclassname") TYPE *OUTPUT, TYPE &OUTPUT "out CSTYPE" %typemap(csin) TYPE *OUTPUT, TYPE &OUTPUT "out $csinput" %typemap(csdirectorin) TYPE *OUTPUT, TYPE &OUTPUT "$iminput" %typemap(csdirectorout) TYPE *OUTPUT, TYPE &OUTPUT "$cscall" - %typemap(in) TYPE *OUTPUT, TYPE &OUTPUT %{ $1 = ($1_ltype)$input; %} @@ -250,9 +247,9 @@ */ %define INOUT_TYPEMAP(TYPE, CTYPE, CSTYPE, TYPECHECKPRECEDENCE) -%typemap(ctype) TYPE *INOUT, TYPE &INOUT "CTYPE *" -%typemap(imtype) TYPE *INOUT, TYPE &INOUT "ref CSTYPE" -%typemap(cstype) TYPE *INOUT, TYPE &INOUT "ref CSTYPE" +%typemap(ctype, out="void *") TYPE *INOUT, TYPE &INOUT "CTYPE *" +%typemap(imtype, out="IntPtr") TYPE *INOUT, TYPE &INOUT "ref CSTYPE" +%typemap(cstype, out="$csclassname") TYPE *INOUT, TYPE &INOUT "ref CSTYPE" %typemap(csin) TYPE *INOUT, TYPE &INOUT "ref $csinput" %typemap(csdirectorin) TYPE *INOUT, TYPE &INOUT "$iminput" %typemap(csdirectorout) TYPE *INOUT, TYPE &INOUT "$cscall" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |