https://swig.svn.sourceforge.net/svnroot/swig/trunk ........ r10498 | talby | 2008-05-26 22:09:56 +0200 (Pn, 26 maj 2008) | 2 lines run test cases in the Perl set by the --with-perl5 configure option. ........ r10499 | talby | 2008-05-26 23:04:06 +0200 (Pn, 26 maj 2008) | 3 lines The perl5 minherit runtime test will work better if the classes are actually built under SWIGPERL. ........ r10503 | wsfulton | 2008-05-28 11:44:37 +0200 (Śr, 28 maj 2008) | 1 line Fix variable wrappers when using -proxy. Patch from Jan Jezabek ........ r10504 | bhy | 2008-05-28 19:27:48 +0200 (Śr, 28 maj 2008) | 2 lines Fixed SF #1971977: typo in pycontainer.swg (related to -extranative option) ........ r10506 | wsfulton | 2008-05-29 02:45:28 +0200 (Cz, 29 maj 2008) | 1 line Fix variable wrappers when using -noproxy ........ r10508 | bhy | 2008-05-30 15:53:33 +0200 (Pt, 30 maj 2008) | 1 line Fixed SF #1976978, apply the macros for primitive types to std::wstring ........ r10511 | olly | 2008-05-30 18:11:27 +0200 (Pt, 30 maj 2008) | 4 lines Fix typo in handling of /*@SWIG[...]*/ comments in the scanner. This just meant we were only actually looking for /*@SWI at the start of the comment, so was pretty harmless in practice. ........ r10515 | wsfulton | 2008-06-02 22:10:40 +0200 (Pn, 02 cze 2008) | 1 line Fix samename testcase for c# and java ........ r10516 | wsfulton | 2008-06-02 22:15:39 +0200 (Pn, 02 cze 2008) | 1 line Fix enums when using -noproxy ........ r10518 | bhy | 2008-06-07 13:20:07 +0200 (So, 07 cze 2008) | 4 lines Added a test case for keyword renaming. Now it works for Python in SWIG's -c++ mode, but in C mode it doesn't work! (you can try with make keyword_rename.ctest) ........ r10519 | bhy | 2008-06-07 15:40:51 +0200 (So, 07 cze 2008) | 1 line fixed keyword_rename.ctest tese case, caused by a mistake in Swig/naming.c ........ r10527 | mgossage | 2008-06-17 04:57:15 +0200 (Wt, 17 cze 2008) | 1 line [lua] bugfix 1938142 (bool& and bool* support) ........ r10530 | wsfulton | 2008-06-19 22:02:13 +0200 (Cz, 19 cze 2008) | 1 line Add R keyword support. Rename keywords for successful compilation of Java and C# code. More consistent keyword warnings across the different languages. ........ r10531 | wsfulton | 2008-06-19 23:15:48 +0200 (Cz, 19 cze 2008) | 1 line add complete list of R reserved words ........ r10536 | wsfulton | 2008-06-21 13:35:33 +0200 (So, 21 cze 2008) | 1 line better terminology for static types ........ r10537 | wsfulton | 2008-06-21 13:42:48 +0200 (So, 21 cze 2008) | 1 line remove raise as keyword test- it conflicts with _raise in LIBCMT on windows ........ r10539 | wsfulton | 2008-06-21 17:21:29 +0200 (So, 21 cze 2008) | 1 line Lua example warning removal fixes for vc++ ........ r10540 | wsfulton | 2008-06-21 17:23:02 +0200 (So, 21 cze 2008) | 1 line Remove some vc++ /W4 warnings ........ r10541 | wsfulton | 2008-06-21 18:04:55 +0200 (So, 21 cze 2008) | 1 line minor vc++ /W4 warning fixes ........ r10542 | wsfulton | 2008-06-21 21:07:51 +0200 (So, 21 cze 2008) | 1 line 'byte' is already used in Ruby on windows, so use another keyword ........ r10543 | wsfulton | 2008-06-21 22:45:32 +0200 (So, 21 cze 2008) | 1 line Fix crashing in the Ruby reject method in the STL wrappers ........ r10544 | wsfulton | 2008-06-21 22:48:28 +0200 (So, 21 cze 2008) | 1 line Fix crashing in the Ruby reject method in the STL wrappers ........ r10545 | wsfulton | 2008-06-21 22:49:10 +0200 (So, 21 cze 2008) | 1 line remove unnecessary variable int the char **STRING_ARRAY out typemap ........ r10546 | wsfulton | 2008-06-21 23:07:49 +0200 (So, 21 cze 2008) | 1 line Fix Ruby C++ example dependencies in dsp files ........ r10547 | wsfulton | 2008-06-22 00:25:36 +0200 (N, 22 cze 2008) | 1 line Fix unused parameter warnings in python when using gcc's -W -Wall options ........ r10548 | wsfulton | 2008-06-22 00:26:35 +0200 (N, 22 cze 2008) | 1 line Fix virtual destructor ........ r10549 | wsfulton | 2008-06-22 01:25:20 +0200 (N, 22 cze 2008) | 1 line various warning fixes ........ r10550 | wsfulton | 2008-06-22 02:09:11 +0200 (N, 22 cze 2008) | 1 line Another fix for the JVM hanging on exit problem when using directors ........ r10551 | wsfulton | 2008-06-22 02:09:51 +0200 (N, 22 cze 2008) | 1 line documentation sections update ........ r10552 | wsfulton | 2008-06-22 02:18:10 +0200 (N, 22 cze 2008) | 1 line more docs on defining macros for the thread hanging problem ........ r10558 | wsfulton | 2008-06-22 23:30:20 +0200 (N, 22 cze 2008) | 1 line fix unused parms in last commit for C code ........ r10559 | wsfulton | 2008-06-23 00:12:43 +0200 (Pn, 23 cze 2008) | 1 line Suppress unused methods warning for VC++ ........ r10560 | wsfulton | 2008-06-23 22:26:07 +0200 (Pn, 23 cze 2008) | 1 line fix partialcheck-test-suite and parallel make for r, chicken, tcl and php ........ r10561 | wsfulton | 2008-06-23 22:39:41 +0200 (Pn, 23 cze 2008) | 1 line correct message display when running the partialcheck-test-suite make target ........ r10562 | wsfulton | 2008-06-23 23:14:53 +0200 (Pn, 23 cze 2008) | 1 line fix typo ........ r10563 | olly | 2008-06-23 23:23:54 +0200 (Pn, 23 cze 2008) | 3 lines Fix bad use of Python API (untested, since I can't even compile this code on x86-64!) ........ r10564 | olly | 2008-06-24 00:58:03 +0200 (Wt, 24 cze 2008) | 3 lines [PHP] Fix segfault when wrapping a non-class function marked with %newobject (testcase char_strings). ........ r10565 | olly | 2008-06-24 02:27:34 +0200 (Wt, 24 cze 2008) | 3 lines [PHP] Fix assertion failure when handling %typemap(in,numinputs=0) (testcase ignore_parameter). ........ r10566 | olly | 2008-06-24 02:33:08 +0200 (Wt, 24 cze 2008) | 2 lines [PHP] Fix typemap_namespace.i to not try to copy a non-existent typemap. ........ r10567 | olly | 2008-06-24 02:41:07 +0200 (Wt, 24 cze 2008) | 3 lines Clean up dead and unused code in SwigToPhpType(), and rename to GetShadowReturnType(). ........ r10568 | olly | 2008-06-24 02:42:29 +0200 (Wt, 24 cze 2008) | 2 lines Fix cosmetic typo in string constant. ........ r10574 | wsfulton | 2008-06-24 22:10:28 +0200 (Wt, 24 cze 2008) | 1 line zap last entry ........ r10575 | wsfulton | 2008-06-24 22:11:46 +0200 (Wt, 24 cze 2008) | 1 line variable name changes to remove php keywords ........ r10576 | wsfulton | 2008-06-24 22:12:08 +0200 (Wt, 24 cze 2008) | 1 line variable name hiding fix ........ r10577 | wsfulton | 2008-06-24 22:12:43 +0200 (Wt, 24 cze 2008) | 1 line More info about numobjects added ........ r10578 | wsfulton | 2008-06-24 22:13:41 +0200 (Wt, 24 cze 2008) | 1 line update for 1.3.36 release ........ r10579 | wsfulton | 2008-06-24 23:48:46 +0200 (Wt, 24 cze 2008) | 1 line remove deprecated -c commandline option (runtime library generation) ........ r10580 | wsfulton | 2008-06-24 23:53:12 +0200 (Wt, 24 cze 2008) | 1 line correct comment about deprecated option ........ r10582 | wsfulton | 2008-06-25 01:00:27 +0200 (Śr, 25 cze 2008) | 1 line use rsync and ssh to upload releases to SourceForge as ftp no longer works ........ r10584 | wsfulton | 2008-06-25 01:24:48 +0200 (Śr, 25 cze 2008) | 1 line correction for 1.3.36 ........ r10588 | wsfulton | 2008-06-25 02:16:04 +0200 (Śr, 25 cze 2008) | 1 line section update ........ r10589 | wsfulton | 2008-06-25 02:16:40 +0200 (Śr, 25 cze 2008) | 1 line bump version to 1.3.37 ........ r10594 | wsfulton | 2008-06-26 20:33:06 +0200 (Cz, 26 cze 2008) | 1 line correct typo in first entry about %fragment ........ git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@10606 626c5289-ae23-0410-ae9c-e8d60b6d4f22
321 lines
8.4 KiB
Text
321 lines
8.4 KiB
Text
/* ------------------------------------------------------------
|
|
* Primitive type fragments and macros
|
|
* ------------------------------------------------------------ */
|
|
|
|
/*
|
|
This file provide fragments and macros for the C/C++ primitive types.
|
|
|
|
The file defines default fragments for the following types:
|
|
|
|
bool
|
|
signed char
|
|
unsigned char
|
|
signed wchar_t // in C++
|
|
unsigned wchar_t // in C++
|
|
short
|
|
unsigned short
|
|
int
|
|
unsigned int
|
|
float
|
|
size_t
|
|
ptrdiff_t
|
|
|
|
which can always be redefined in the swig target language if needed.
|
|
|
|
The fragments for the following types, however, need to be defined
|
|
in the target language always:
|
|
|
|
long
|
|
unsigned long
|
|
long long
|
|
unsigned long long
|
|
double
|
|
|
|
If they are not provided, an #error directive will appear in the
|
|
wrapped code.
|
|
|
|
--------------------------------------------------------------------
|
|
|
|
This file provides the macro
|
|
|
|
%typemaps_primitive(CheckCode, Type)
|
|
|
|
which generate the typemaps for a primitive type with a given
|
|
checkcode. It is assumed that the primitive type is 'normalized' and
|
|
the corresponding SWIG_AsVal(Type) and SWIG_From(Type) methods are
|
|
provided via fragments.
|
|
|
|
|
|
The following auxiliary macros (explained with bash pseudo code) are
|
|
also defined:
|
|
|
|
%apply_ctypes(Macro)
|
|
for i in C Type
|
|
do
|
|
Macro($i)
|
|
done
|
|
|
|
%apply_cpptypes(Macro)
|
|
for i in C++ Type
|
|
do
|
|
Macro($i)
|
|
done
|
|
|
|
%apply_ctypes_2(Macro2)
|
|
for i in C Type
|
|
do
|
|
for j in C Type
|
|
do
|
|
Macro_2($i, $j)
|
|
done
|
|
done
|
|
|
|
%apply_cpptypes_2(Macro2)
|
|
for i in C++ Type
|
|
do
|
|
for j in C++ Type
|
|
do
|
|
Macro_2($i, $j)
|
|
done
|
|
done
|
|
|
|
%apply_checkctypes(Macro2)
|
|
for i in Check Type
|
|
do
|
|
Macro2(%checkcode($i), $i)
|
|
done
|
|
|
|
*/
|
|
|
|
|
|
/* ------------------------------------------------------------
|
|
* Primitive type fragments
|
|
* ------------------------------------------------------------ */
|
|
/* boolean */
|
|
|
|
%fragment(SWIG_From_frag(bool),"header",fragment=SWIG_From_frag(long)) {
|
|
SWIGINTERN SWIG_Object
|
|
SWIG_From_dec(bool)(bool value)
|
|
{
|
|
return SWIG_From(long)(value ? 1 : 0);
|
|
}
|
|
}
|
|
|
|
%fragment(SWIG_AsVal_frag(bool),"header",fragment=SWIG_AsVal_frag(long)) {
|
|
SWIGINTERN int
|
|
SWIG_AsVal_dec(bool)(SWIG_Object obj, bool *val)
|
|
{
|
|
long v;
|
|
int res = SWIG_AsVal(long)(obj, val ? &v : 0);
|
|
if (SWIG_IsOK(res)) {
|
|
if (val) *val = v ? true : false;
|
|
return res;
|
|
}
|
|
return SWIG_TypeError;
|
|
}
|
|
}
|
|
|
|
/* signed/unsigned char */
|
|
|
|
%numeric_slong(signed char, "<limits.h>", SCHAR_MIN, SCHAR_MAX)
|
|
%numeric_ulong(unsigned char, "<limits.h>", UCHAR_MAX)
|
|
|
|
/* short/unsigned short */
|
|
|
|
%numeric_slong(short, "<limits.h>", SHRT_MIN, SHRT_MAX)
|
|
%numeric_ulong(unsigned short, "<limits.h>", USHRT_MAX)
|
|
|
|
/* int/unsigned int */
|
|
|
|
%numeric_slong(int, "<limits.h>", INT_MIN, INT_MAX)
|
|
%numeric_ulong(unsigned int, "<limits.h>", UINT_MAX)
|
|
|
|
/* signed/unsigned wchar_t */
|
|
|
|
#ifdef __cplusplus
|
|
%numeric_slong(signed wchar_t, "<wchar.h>", WCHAR_MIN, WCHAR_MAX)
|
|
%numeric_ulong(unsigned wchar_t, "<wchar.h>", UWCHAR_MAX)
|
|
#endif
|
|
|
|
/* float */
|
|
|
|
%numeric_double(float, "<float.h>", -FLT_MAX, FLT_MAX)
|
|
|
|
/* long/unsigned long */
|
|
|
|
%ensure_type_fragments(long)
|
|
%ensure_type_fragments(unsigned long)
|
|
|
|
/* long long/unsigned long long */
|
|
|
|
%ensure_type_fragments(long long)
|
|
%ensure_type_fragments(unsigned long long)
|
|
|
|
/* double */
|
|
|
|
%ensure_type_fragments(double)
|
|
|
|
/* size_t */
|
|
|
|
%fragment(SWIG_From_frag(size_t),"header",fragment=SWIG_From_frag(unsigned long)) {
|
|
SWIGINTERNINLINE SWIG_Object
|
|
SWIG_From_dec(size_t)(size_t value)
|
|
{
|
|
return SWIG_From(unsigned long)(%numeric_cast(value, unsigned long));
|
|
}
|
|
}
|
|
|
|
%fragment(SWIG_AsVal_frag(size_t),"header",fragment=SWIG_AsVal_frag(unsigned long)) {
|
|
SWIGINTERNINLINE int
|
|
SWIG_AsVal_dec(size_t)(SWIG_Object obj, size_t *val)
|
|
{
|
|
unsigned long v;
|
|
int res = SWIG_AsVal(unsigned long)(obj, val ? &v : 0);
|
|
if (SWIG_IsOK(res) && val) *val = %numeric_cast(v, size_t);
|
|
return res;
|
|
}
|
|
}
|
|
|
|
/* ptrdiff_t */
|
|
|
|
%fragment(SWIG_From_frag(ptrdiff_t),"header",fragment=SWIG_From_frag(long)) {
|
|
SWIGINTERNINLINE SWIG_Object
|
|
SWIG_From_dec(ptrdiff_t)(ptrdiff_t value)
|
|
{
|
|
return SWIG_From(long)(%numeric_cast(value,long));
|
|
}
|
|
}
|
|
|
|
%fragment(SWIG_AsVal_frag(ptrdiff_t),"header",fragment=SWIG_AsVal_frag(long)) {
|
|
SWIGINTERNINLINE int
|
|
SWIG_AsVal_dec(ptrdiff_t)(SWIG_Object obj, ptrdiff_t *val)
|
|
{
|
|
long v;
|
|
int res = SWIG_AsVal(long)(obj, val ? &v : 0);
|
|
if (SWIG_IsOK(res) && val) *val = %numeric_cast(v, ptrdiff_t);
|
|
return res;
|
|
}
|
|
}
|
|
|
|
|
|
%fragment("SWIG_CanCastAsInteger","header",
|
|
fragment=SWIG_AsVal_frag(double),
|
|
fragment="<float.h>",
|
|
fragment="<math.h>") {
|
|
SWIGINTERNINLINE int
|
|
SWIG_CanCastAsInteger(double *d, double min, double max) {
|
|
double x = *d;
|
|
if ((min <= x && x <= max)) {
|
|
double fx = floor(x);
|
|
double cx = ceil(x);
|
|
double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */
|
|
if ((errno == EDOM) || (errno == ERANGE)) {
|
|
errno = 0;
|
|
} else {
|
|
double summ, reps, diff;
|
|
if (rd < x) {
|
|
diff = x - rd;
|
|
} else if (rd > x) {
|
|
diff = rd - x;
|
|
} else {
|
|
return 1;
|
|
}
|
|
summ = rd + x;
|
|
reps = diff/summ;
|
|
if (reps < 8*DBL_EPSILON) {
|
|
*d = rd;
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/* ------------------------------------------------------------
|
|
* Generate the typemaps for primitive type
|
|
* ------------------------------------------------------------ */
|
|
|
|
#define %typemaps_primitive(Code, Type) %typemaps_asvalfromn(%arg(Code), Type)
|
|
|
|
/* ------------------------------------------------------------
|
|
* Primitive Type Macros
|
|
* ------------------------------------------------------------ */
|
|
|
|
/* useful macros to derive typemap declarations from primitive types */
|
|
|
|
%define _apply_macro(macro, arg2, arg1...)
|
|
#if #arg1 != ""
|
|
macro(%arg(arg1),arg2);
|
|
#else
|
|
macro(arg2);
|
|
#endif
|
|
%enddef
|
|
|
|
/* Apply macro to the C-types */
|
|
%define %apply_ctypes(Macro, Arg2...)
|
|
_apply_macro(Macro, bool , Arg2);
|
|
_apply_macro(Macro, signed char , Arg2);
|
|
_apply_macro(Macro, unsigned char , Arg2);
|
|
_apply_macro(Macro, short , Arg2);
|
|
_apply_macro(Macro, unsigned short , Arg2);
|
|
_apply_macro(Macro, int , Arg2);
|
|
_apply_macro(Macro, unsigned int , Arg2);
|
|
_apply_macro(Macro, long , Arg2);
|
|
_apply_macro(Macro, unsigned long , Arg2);
|
|
_apply_macro(Macro, long long , Arg2);
|
|
_apply_macro(Macro, unsigned long long , Arg2);
|
|
_apply_macro(Macro, float , Arg2);
|
|
_apply_macro(Macro, double , Arg2);
|
|
_apply_macro(Macro, char , Arg2);
|
|
_apply_macro(Macro, wchar_t , Arg2);
|
|
_apply_macro(Macro, size_t , Arg2);
|
|
_apply_macro(Macro, ptrdiff_t , Arg2);
|
|
%enddef
|
|
|
|
/* apply the Macro2(Type1, Type2) to all C types */
|
|
#define %apply_ctypes_2(Macro2) %apply_ctypes(%apply_ctypes, Macro2)
|
|
|
|
|
|
/* apply the Macro(Type) to all C++ types */
|
|
%define %apply_cpptypes(Macro, Arg2...)
|
|
%apply_ctypes(Macro, Arg2)
|
|
_apply_macro(Macro, std::size_t, Arg2);
|
|
_apply_macro(Macro, std::ptrdiff_t, Arg2);
|
|
_apply_macro(Macro, std::string, Arg2);
|
|
_apply_macro(Macro, std::wstring, Arg2);
|
|
_apply_macro(Macro, std::complex<float>, Arg2);
|
|
_apply_macro(Macro, std::complex<double>, Arg2);
|
|
%enddef
|
|
|
|
/* apply the Macro2(Type1, Type2) to all C++ types */
|
|
#define %apply_cpptypes_2(Macro2) %apply_cpptypes(%apply_cpptypes, Macro2)
|
|
|
|
/* apply the Macro2(CheckCode,Type) to all Checked Types */
|
|
%define %apply_checkctypes(Macro2)
|
|
Macro2(%checkcode(BOOL), bool);
|
|
Macro2(%checkcode(INT8), signed char);
|
|
Macro2(%checkcode(UINT8), unsigned char);
|
|
Macro2(%checkcode(INT16), short);
|
|
Macro2(%checkcode(UINT16), unsigned short);
|
|
Macro2(%checkcode(INT32), int);
|
|
Macro2(%checkcode(UINT32), unsigned int);
|
|
Macro2(%checkcode(INT64), long);
|
|
Macro2(%checkcode(UINT64), unsigned long);
|
|
Macro2(%checkcode(INT128), long long);
|
|
Macro2(%checkcode(UINT128), unsigned long long);
|
|
Macro2(%checkcode(FLOAT), float);
|
|
Macro2(%checkcode(DOUBLE), double);
|
|
Macro2(%checkcode(CHAR), char);
|
|
Macro2(%checkcode(UNICHAR), wchar_t);
|
|
Macro2(%checkcode(SIZE), size_t);
|
|
Macro2(%checkcode(PTRDIFF), ptrdiff_t);
|
|
%enddef
|
|
|
|
|
|
/* ------------------------------------------------------------
|
|
* Generate the typemaps for all the primitive types with checkcode
|
|
* ------------------------------------------------------------ */
|
|
|
|
%apply_checkctypes(%typemaps_primitive);
|
|
|