scilab: fix typechecks

This commit is contained in:
Simon Marchetto 2014-03-28 17:41:07 +01:00
commit be4e09daa9

View file

@ -105,27 +105,19 @@
/* Typecheck typemaps */
/* ---------------------------------------------------------------------------*/
%define SCILAB_TYPECHECK(TYPE)
SciErr sciErr;
%define SCILAB_TYPECHECK(TYPE_CHECK_FUNCTION)
int *piAddrVar = NULL;
int iType = 0;
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
SciErr sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
sciErr = getVarType(pvApiCtx, piAddrVar, &iType);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
$1 = (iType == TYPE) ? 1 : 0;
$1 = TYPE_CHECK_FUNCTION(pvApiCtx, piAddrVar);
%enddef
/* Scilab equivalent for C integers can be sci_ints or sci_matrix */
%define SCILAB_INTEGERTYPECHECK(INTTYPE)
SCILAB_TYPECHECK(sci_ints)
SCILAB_TYPECHECK(isIntegerType)
if ($1 == 1) {
int iPrec = 0;
sciErr = getMatrixOfIntegerPrecision(pvApiCtx, piAddrVar, &iPrec);
@ -136,34 +128,41 @@
$1 = (iPrec == INTTYPE) ? 1 : 0;
}
else {
$1 = (iType == sci_matrix) ? 1 : 0;
$1 = isDoubleType(pvApiCtx, piAddrVar);
}
%enddef
// Primitive types
%typecheck(SWIG_TYPECHECK_CHAR) char { SCILAB_TYPECHECK(sci_strings) }
// For overloading, check Double (and Float) before Integer type.
%typecheck(SWIG_TYPECHECK_VOIDPTR) SWIGTYPE * { SCILAB_TYPECHECK(isPointerType) }
%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE * { SCILAB_TYPECHECK(isPointerType) }
%typecheck(SWIG_TYPECHECK_BOOL) bool { SCILAB_TYPECHECK(isBooleanType) }
%typecheck(SWIG_TYPECHECK_CHAR) char { SCILAB_TYPECHECK(isStringType) }
%typemap(typecheck, precedence=16) double { SCILAB_TYPECHECK(isDoubleType) }
%typemap(typecheck, precedence=17) float { SCILAB_TYPECHECK(isDoubleType) }
%typecheck(SWIG_TYPECHECK_INT8) signed char { SCILAB_INTEGERTYPECHECK(SCI_INT8) }
%typecheck(SWIG_TYPECHECK_UINT8) unsigned char { SCILAB_INTEGERTYPECHECK(SCI_UINT8) }
%typecheck(SWIG_TYPECHECK_INT16) short { SCILAB_INTEGERTYPECHECK(SCI_INT16) }
%typecheck(SWIG_TYPECHECK_UINT16) unsigned short { SCILAB_INTEGERTYPECHECK(SCI_UINT16) }
%typecheck(SWIG_TYPECHECK_INT32) int, long { SCILAB_INTEGERTYPECHECK(SCI_INT32) }
%typecheck(SWIG_TYPECHECK_UINT32) unsigned int, unsigned long { SCILAB_INTEGERTYPECHECK(SCI_UINT32) }
%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE * { SCILAB_TYPECHECK(sci_pointer) }
%typecheck(SWIG_TYPECHECK_INT32) enum SWIGTYPE { SCILAB_INTEGERTYPECHECK(SCI_INT32) }
%typecheck(SWIG_TYPECHECK_INT32) enum SWIGTYPE { SCILAB_INTEGERTYPECHECK(SCI_INT32) }
// Arrays
%typecheck(SWIG_TYPECHECK_CHAR_ARRAY) char [ANY] { SCILAB_TYPECHECK(sci_strings) }
%typecheck(SWIG_TYPECHECK_CHAR_ARRAY) char [ANY] { SCILAB_TYPECHECK(isString) }
/* * TODO: add an option to select default integers mapping? */
/* C-integers mapped to Scilab sci_matrix (TODO: add int64 & uint64 for Scilab 6) */
%typecheck(SWIG_TYPECHECK_INT8_ARRAY) signed char [ANY] { SCILAB_TYPECHECK(sci_matrix) }
//%typecheck(SWIG_TYPECHECK_UINT8_ARRAY) unsigned char [ANY] { SCILAB_TYPECHECK(sci_matrix) }
%typecheck(SWIG_TYPECHECK_INT16_ARRAY) short [ANY] { SCILAB_TYPECHECK(sci_matrix) }
//%typecheck(SWIG_TYPECHECK_UINT16_ARRAY) unsigned short [ANY] { SCILAB_TYPECHECK(sci_matrix) }
%typecheck(SWIG_TYPECHECK_INT32_ARRAY) int [ANY], long [ANY] { SCILAB_TYPECHECK(sci_matrix) }
//%typecheck(SWIG_TYPECHECK_UINT32_ARRAY) unsigned int [ANY], unsigned long [ANY] { SCILAB_TYPECHECK(sci_matrix) }
%typecheck(SWIG_TYPECHECK_INT8_ARRAY) signed char [ANY] { SCILAB_TYPECHECK(isDoubleType) }
//%typecheck(SWIG_TYPECHECK_UINT8_ARRAY) unsigned char [ANY] { SCILAB_TYPECHECK(isDoubleType) }
%typecheck(SWIG_TYPECHECK_INT16_ARRAY) short [ANY] { SCILAB_TYPECHECK(isDoubleType) }
//%typecheck(SWIG_TYPECHECK_UINT16_ARRAY) unsigned short [ANY] { SCILAB_TYPECHECK(isDoubleType) }
%typecheck(SWIG_TYPECHECK_INT32_ARRAY) int [ANY], long [ANY] { SCILAB_TYPECHECK(isDoubleType) }
//%typecheck(SWIG_TYPECHECK_UINT32_ARRAY) unsigned int [ANY], unsigned long [ANY] { SCILAB_TYPECHECK(isDoubleType) }
/* C-integers mapped to Scilab integers (TODO: add int64 & uint64 for Scilab 6) */
/*
%typecheck(SWIG_TYPECHECK_INT8_ARRAY) signed char [ANY] { SCILAB_INTEGERTYPECHECK(SCI_INT8) }
@ -174,10 +173,10 @@
%typecheck(SWIG_TYPECHECK_UINT32_ARRAY) unsigned int [ANY], unsigned long [ANY] { SCILAB_INTEGERTYPECHECK(SCI_INT32) }
*/
%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) double [ANY] { SCILAB_TYPECHECK(sci_matrix) }
%typecheck(SWIG_TYPECHECK_FLOAT_ARRAY) float [ANY] { SCILAB_TYPECHECK(sci_matrix) }
%typecheck(SWIG_TYPECHECK_BOOL_ARRAY) bool { SCILAB_TYPECHECK(sci_boolean) }
%typecheck(SWIG_TYPECHECK_STRING_ARRAY) char ** { SCILAB_TYPECHECK(sci_strings) }
%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) double [ANY] { SCILAB_TYPECHECK(isDoubleType) }
%typecheck(SWIG_TYPECHECK_FLOAT_ARRAY) float [ANY] { SCILAB_TYPECHECK(isDoubleType) }
%typecheck(SWIG_TYPECHECK_BOOL_ARRAY) bool { SCILAB_TYPECHECK(isBooleanType) }
%typecheck(SWIG_TYPECHECK_STRING_ARRAY) char ** { SCILAB_TYPECHECK(isString) }
/* -----------------------------------------------------------------------------*/
/* Constants and enums to Scilab variables