Scilab typecheck typemaps fix for C90

Fix mix of mixed declarations and code.
Also redo these typemaps so that the SWIG preprocessor comments don't appear
in the generated code.
This commit is contained in:
William S Fulton 2015-02-11 08:01:42 +00:00
commit 4e86210e74

View file

@ -110,7 +110,8 @@
/* Typecheck typemaps */ /* Typecheck typemaps */
/* ---------------------------------------------------------------------------*/ /* ---------------------------------------------------------------------------*/
%define SCILAB_TYPECHECK(TYPE_CHECK_FUNCTION) %define %scilab_typecheck_generic(PRECEDENCE, TYPE_CHECK_FUNCTION, TYPE)
%typecheck(PRECEDENCE) TYPE {
int *piAddrVar = NULL; int *piAddrVar = NULL;
SciErr sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar); SciErr sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) { if (sciErr.iErr) {
@ -118,11 +119,19 @@
return SWIG_ERROR; return SWIG_ERROR;
} }
$1 = TYPE_CHECK_FUNCTION(pvApiCtx, piAddrVar); $1 = TYPE_CHECK_FUNCTION(pvApiCtx, piAddrVar);
}
%enddef %enddef
/* Scilab equivalent for C integers can be sci_ints or sci_matrix */ /* Scilab equivalent for C integers can be sci_ints or sci_matrix */
%define SCILAB_INTEGERTYPECHECK(INTTYPE) %define %scilab_typecheck_integer(PRECEDENCE, INTTYPE, TYPE)
SCILAB_TYPECHECK(isIntegerType) %typecheck(PRECEDENCE) TYPE {
int *piAddrVar = NULL;
SciErr sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
$1 = isIntegerType(pvApiCtx, piAddrVar);
if ($1 == 1) { if ($1 == 1) {
int iPrec = 0; int iPrec = 0;
sciErr = getMatrixOfIntegerPrecision(pvApiCtx, piAddrVar, &iPrec); sciErr = getMatrixOfIntegerPrecision(pvApiCtx, piAddrVar, &iPrec);
@ -135,39 +144,43 @@
else { else {
$1 = isDoubleType(pvApiCtx, piAddrVar); $1 = isDoubleType(pvApiCtx, piAddrVar);
} }
}
%enddef %enddef
// Double (and Float) have priority over before Integer type. // Double (and Float) have priority over before Integer type.
// Primitive types // Primitive types
%typecheck(SWIG_TYPECHECK_VOIDPTR, noblock=1) SWIGTYPE * { SCILAB_TYPECHECK(isPointerType) } %scilab_typecheck_generic(SWIG_TYPECHECK_VOIDPTR, isPointerType, SWIGTYPE *)
%typecheck(SWIG_TYPECHECK_POINTER, noblock=1) SWIGTYPE * { SCILAB_TYPECHECK(isPointerType) } %scilab_typecheck_generic(SWIG_TYPECHECK_POINTER, isPointerType, SWIGTYPE *)
%typecheck(SWIG_TYPECHECK_BOOL, noblock=1) bool { SCILAB_TYPECHECK(isBooleanType) } %scilab_typecheck_generic(SWIG_TYPECHECK_BOOL, isBooleanType, bool)
%typemap(typecheck, precedence=16, noblock=1) double { SCILAB_TYPECHECK(isDoubleType) } %scilab_typecheck_generic(16, isDoubleType, double)
%typemap(typecheck, precedence=17, noblock=1) float { SCILAB_TYPECHECK(isDoubleType) } %scilab_typecheck_generic(17, isDoubleType, float)
%typecheck(SWIG_TYPECHECK_INT8, noblock=1) signed char { SCILAB_INTEGERTYPECHECK(SCI_INT8) } %scilab_typecheck_integer(SWIG_TYPECHECK_INT8, SCI_INT8, signed char)
%typecheck(SWIG_TYPECHECK_UINT8, noblock=1) unsigned char { SCILAB_INTEGERTYPECHECK(SCI_UINT8) } %scilab_typecheck_integer(SWIG_TYPECHECK_UINT8, SCI_UINT8, unsigned char)
%typecheck(SWIG_TYPECHECK_INT16, noblock=1) short { SCILAB_INTEGERTYPECHECK(SCI_INT16) } %scilab_typecheck_integer(SWIG_TYPECHECK_INT16, SCI_INT16, short)
%typecheck(SWIG_TYPECHECK_UINT16, noblock=1) unsigned short { SCILAB_INTEGERTYPECHECK(SCI_UINT16) } %scilab_typecheck_integer(SWIG_TYPECHECK_UINT16, SCI_UINT16, unsigned short)
%typecheck(SWIG_TYPECHECK_INT32, noblock=1) int, long { SCILAB_INTEGERTYPECHECK(SCI_INT32) } %scilab_typecheck_integer(SWIG_TYPECHECK_INT32, SCI_INT32, int)
%typecheck(SWIG_TYPECHECK_UINT32, noblock=1) unsigned int, unsigned long { SCILAB_INTEGERTYPECHECK(SCI_UINT32) } %scilab_typecheck_integer(SWIG_TYPECHECK_INT32, SCI_INT32, long)
%typecheck(SWIG_TYPECHECK_INT32, noblock=1) enum SWIGTYPE { SCILAB_INTEGERTYPECHECK(SCI_INT32) } %scilab_typecheck_integer(SWIG_TYPECHECK_UINT32, SCI_UINT32, unsigned int)
%typecheck(SWIG_TYPECHECK_CHAR, noblock=1) char { SCILAB_TYPECHECK(isStringType) } %scilab_typecheck_integer(SWIG_TYPECHECK_UINT32, SCI_UINT32, unsigned long)
%scilab_typecheck_integer(SWIG_TYPECHECK_INT32, SCI_INT32, enum SWIGTYPE)
%scilab_typecheck_generic(SWIG_TYPECHECK_CHAR, isStringType, char)
// Arrays // Arrays
%typecheck(SWIG_TYPECHECK_BOOL_ARRAY, noblock=1) bool { SCILAB_TYPECHECK(isBooleanType) } %scilab_typecheck_generic(SWIG_TYPECHECK_BOOL_ARRAY, isBooleanType, bool)
%typemap(typecheck, precedence=1016, noblock=1) double [ANY] { SCILAB_TYPECHECK(isDoubleType) } %scilab_typecheck_generic(1016, isDoubleType, double [ANY])
%typemap(typecheck, precedence=1017, noblock=1) float [ANY] { SCILAB_TYPECHECK(isDoubleType) } %scilab_typecheck_generic(1017, isDoubleType, float [ANY])
%typecheck(SWIG_TYPECHECK_INT8_ARRAY, noblock=1) signed char [ANY] { SCILAB_INTEGERTYPECHECK(SCI_INT8) } %scilab_typecheck_integer(SWIG_TYPECHECK_INT8_ARRAY, SCI_INT8, signed char [ANY])
%typemap(typecheck, precedence=1026, noblock=1) unsigned char [ANY] { SCILAB_INTEGERTYPECHECK(SCI_UINT8) } %scilab_typecheck_integer(1026, SCI_UINT8, unsigned char [ANY])
%typecheck(SWIG_TYPECHECK_INT16_ARRAY, noblock=1) short [ANY] { SCILAB_INTEGERTYPECHECK(SCI_INT16) } %scilab_typecheck_integer(SWIG_TYPECHECK_INT16_ARRAY, SCI_INT16, short [ANY])
%typemap(typecheck, precedence=1036, noblock=1) unsigned short [ANY] { SCILAB_INTEGERTYPECHECK(SCI_UINT16) } %scilab_typecheck_integer(1036, SCI_UINT16, unsigned short [ANY])
%typecheck(SWIG_TYPECHECK_INT32_ARRAY, noblock=1) int [ANY], long [ANY] { SCILAB_INTEGERTYPECHECK(SCI_INT32) } %scilab_typecheck_integer(SWIG_TYPECHECK_INT32_ARRAY, SCI_INT32, int [ANY])
%typemap(typecheck, precedence=1046, noblock=1) unsigned int [ANY] { SCILAB_INTEGERTYPECHECK(SCI_UINT32) } %scilab_typecheck_integer(SWIG_TYPECHECK_INT32_ARRAY, SCI_INT32, long [ANY])
%typemap(typecheck, precedence=1046, noblock=1) unsigned long [ANY] { SCILAB_INTEGERTYPECHECK(SCI_UINT32) } %scilab_typecheck_integer(1046, SCI_UINT32, unsigned int [ANY])
%typecheck(SWIG_TYPECHECK_CHAR_ARRAY, noblock=1) char [ANY] { SCILAB_TYPECHECK(isStringType) } %scilab_typecheck_integer(1046, SCI_UINT32, unsigned long [ANY])
%typecheck(SWIG_TYPECHECK_STRING_ARRAY, noblock=1) char *[ANY], char ** { SCILAB_TYPECHECK(isStringType) } %scilab_typecheck_generic(SWIG_TYPECHECK_CHAR_ARRAY, isStringType, char [ANY])
%scilab_typecheck_generic(SWIG_TYPECHECK_STRING_ARRAY, isStringType, char *[ANY])
%scilab_typecheck_generic(SWIG_TYPECHECK_STRING_ARRAY, isStringType, char **)
/* ---------------------------------------------------------------------------*/ /* ---------------------------------------------------------------------------*/