fix errors for 32bit arch.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8523 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2006-01-23 00:33:19 +00:00
commit ce94984b71
3 changed files with 60 additions and 71 deletions

View file

@ -161,7 +161,7 @@ if s.type != "void *":
# unsigned long long # unsigned long long
ullmax = 9223372036854775807 #0xffffffffffffffff ullmax = 9223372036854775807 #0xffffffffffffffff
ullmaxd = 922337203685477580.0 ullmaxd = 9007199254740992.0
ullmin = 0 ullmin = 0
ullmind = 0.0 ullmind = 0.0
if ull(ullmin) != ullmin: if ull(ullmin) != ullmin:
@ -177,8 +177,8 @@ if ull(ullmaxd) != ullmaxd:
llmax = 9223372036854775807 #0x7fffffffffffffff llmax = 9223372036854775807 #0x7fffffffffffffff
llmin = -9223372036854775808 llmin = -9223372036854775808
# these are near the largest floats we can still convert into long long # these are near the largest floats we can still convert into long long
llmaxd = 922337203685477580.0 llmaxd = 9007199254740992.0
llmind = -922337203685477580.0 llmind = -9007199254740992.0
if ll(llmin) != llmin: if ll(llmin) != llmin:
raise runtimeerror, "ll(llmin)" raise runtimeerror, "ll(llmin)"
if ll(llmax) != llmax: if ll(llmax) != llmax:

View file

@ -118,14 +118,10 @@ SWIG_AsVal_dec(unsigned long)(PyObject *obj, unsigned long *val)
%#ifdef SWIG_PYTHON_CAST_MODE %#ifdef SWIG_PYTHON_CAST_MODE
{ {
int dispatch = 0; int dispatch = 0;
long v = PyInt_AsLong(obj); unsigned long v = PyLong_AsUnsignedLong(obj);
if (!PyErr_Occurred()) { if (!PyErr_Occurred()) {
if (v >= 0) { if (val) *val = v;
if (val) *val = v; return SWIG_AddCast(SWIG_OK);
return SWIG_AddCast(SWIG_OK);
} else {
return SWIG_OverflowError;
}
} else { } else {
PyErr_Clear(); PyErr_Clear();
} }
@ -157,15 +153,14 @@ SWIG_From_dec(long long)(long long value)
} }
%fragment(SWIG_AsVal_frag(long long),"header", %fragment(SWIG_AsVal_frag(long long),"header",
fragment=SWIG_AsVal_frag(long),
fragment="SWIG_CanCastAsInteger", fragment="SWIG_CanCastAsInteger",
fragment="<limits.h>") { fragment="<limits.h>") {
SWIGINTERN int SWIGINTERN int
SWIG_AsVal_dec(long long)(PyObject *obj, long long *val) SWIG_AsVal_dec(long long)(PyObject *obj, long long *val)
{ {
if (PyInt_Check(obj)) { int res = SWIG_TypeError;
if (val) *val = PyInt_AsLong(obj); if (PyLong_Check(obj)) {
return SWIG_OK;
} else if (PyLong_Check(obj)) {
long long v = PyLong_AsLongLong(obj); long long v = PyLong_AsLongLong(obj);
if (!PyErr_Occurred()) { if (!PyErr_Occurred()) {
if (val) *val = v; if (val) *val = v;
@ -173,30 +168,28 @@ SWIG_AsVal_dec(long long)(PyObject *obj, long long *val)
} else { } else {
PyErr_Clear(); PyErr_Clear();
} }
} } else {
%#ifdef SWIG_PYTHON_CAST_MODE long v;
{ res = SWIG_AsVal(long)(obj,&v);
int dispatch = 0; if (SWIG_IsOK(res)) {
long v = PyInt_AsLong(obj);
if (!PyErr_Occurred()) {
if (val) *val = v; if (val) *val = v;
return SWIG_AddCast(SWIG_OK); return res;
} else {
PyErr_Clear();
}
if (!dispatch) {
const double mant_max = 1LL << DBL_MANT_DIG;
const double mant_min = -mant_max;
double d;
int res = SWIG_AddCast(SWIG_AsVal(double)(obj,&d));
if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, mant_min, mant_max)) {
if (val) *val = (long long)(d);
return res;
}
} }
} }
%#ifdef SWIG_PYTHON_CAST_MODE
{
const double mant_max = 1LL << DBL_MANT_DIG;
const double mant_min = -mant_max;
double d;
res = SWIG_AsVal(double)(obj,&d);
if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, mant_min, mant_max)) {
if (val) *val = (long long)(d);
return SWIG_AddCast(res);
}
res = SWIG_TypeError;
}
%#endif %#endif
return SWIG_TypeError; return res;
} }
} }
@ -220,6 +213,7 @@ SWIG_From_dec(unsigned long long)(unsigned long long value)
SWIGINTERN int SWIGINTERN int
SWIG_AsVal_dec(unsigned long long)(PyObject *obj, unsigned long long *val) SWIG_AsVal_dec(unsigned long long)(PyObject *obj, unsigned long long *val)
{ {
int res = SWIG_TypeError;
if (PyLong_Check(obj)) { if (PyLong_Check(obj)) {
unsigned long long v = PyLong_AsUnsignedLongLong(obj); unsigned long long v = PyLong_AsUnsignedLongLong(obj);
if (!PyErr_Occurred()) { if (!PyErr_Occurred()) {
@ -230,36 +224,25 @@ SWIG_AsVal_dec(unsigned long long)(PyObject *obj, unsigned long long *val)
} }
} else { } else {
unsigned long v; unsigned long v;
int res = SWIG_AsVal(unsigned long)(obj,&v); res = SWIG_AsVal(unsigned long)(obj,&v);
if (SWIG_IsOK(res) && val) *val = v; if (SWIG_IsOK(res)) {
return res; if (val) *val = v;
return res;
}
} }
%#ifdef SWIG_PYTHON_CAST_MODE %#ifdef SWIG_PYTHON_CAST_MODE
{ {
int dispatch = 0; const double mant_max = 1LL << DBL_MANT_DIG;
long v = PyInt_AsLong(obj); double d;
if (!PyErr_Occurred()) { res = SWIG_AsVal(double)(obj,&d);
if (v >= 0) { if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, mant_max)) {
if (val) *val = v; if (val) *val = (unsigned long long)(d);
return SWIG_AddCast(SWIG_OK); return SWIG_AddCast(res);
} else {
return SWIG_OverflowError;
}
} else {
PyErr_Clear();
}
if (!dispatch) {
const double mant_max = 1LL << DBL_MANT_DIG;
double d;
int res = SWIG_AddCast(SWIG_AsVal(double)(obj,&d));
if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, mant_max)) {
if (val) *val = (unsigned long long)(d);
return res;
}
} }
res = SWIG_TypeError;
} }
%#endif %#endif
return SWIG_TypeError; return res;
} }
} }
@ -273,6 +256,7 @@ SWIG_AsVal_dec(unsigned long long)(PyObject *obj, unsigned long long *val)
SWIGINTERN int SWIGINTERN int
SWIG_AsVal_dec(double)(PyObject *obj, double *val) SWIG_AsVal_dec(double)(PyObject *obj, double *val)
{ {
int res = SWIG_TypeError;
if (PyFloat_Check(obj)) { if (PyFloat_Check(obj)) {
if (val) *val = PyFloat_AsDouble(obj); if (val) *val = PyFloat_AsDouble(obj);
return SWIG_OK; return SWIG_OK;
@ -299,7 +283,7 @@ SWIG_AsVal_dec(double)(PyObject *obj, double *val)
PyErr_Clear(); PyErr_Clear();
} }
if (!dispatch) { if (!dispatch) {
long v = PyInt_AsLong(obj); long v = PyLong_AsLong(obj);
if (!PyErr_Occurred()) { if (!PyErr_Occurred()) {
if (val) *val = v; if (val) *val = v;
return SWIG_AddCast(SWIG_AddCast(SWIG_OK)); return SWIG_AddCast(SWIG_AddCast(SWIG_OK));
@ -309,7 +293,7 @@ SWIG_AsVal_dec(double)(PyObject *obj, double *val)
} }
} }
%#endif %#endif
return SWIG_TypeError; return res;
} }
} }

View file

@ -197,6 +197,7 @@ SWIG_AsVal_dec(ptrdiff_t)(SWIG_Object obj, ptrdiff_t *val)
} }
} }
%fragment("SWIG_CanCastAsInteger","header", %fragment("SWIG_CanCastAsInteger","header",
fragment=SWIG_AsVal_frag(double), fragment=SWIG_AsVal_frag(double),
fragment="<float.h>", fragment="<float.h>",
@ -205,21 +206,25 @@ SWIGINTERNINLINE int
SWIG_CanCastAsInteger(double *d, double min, double max) { SWIG_CanCastAsInteger(double *d, double min, double max) {
double x = *d; double x = *d;
if ((min <= x && x <= max)) { if ((min <= x && x <= max)) {
double fx = floor(x); double fx = floor(x);
double rd = ((x - fx) < 0.5) ? fx : ceil(x); /* simple rint */ double cx = ceil(x);
double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */
if ((errno == EDOM) || (errno == ERANGE)) { if ((errno == EDOM) || (errno == ERANGE)) {
errno = 0; errno = 0;
} else { } else {
if (rd == x) { double summ, reps, diff;
return 1; if (rd < x) {
diff = x - rd;
} else if (rd > x) {
diff = rd - x;
} else { } else {
double diff = rd - x; return 1;
double summ = rd + x; }
double reps = diff/summ; summ = rd + x;
if (fabs(reps) < 8*DBL_EPSILON) { reps = diff/summ;
*d = rd; if (reps < 8*DBL_EPSILON) {
return 1; *d = rd;
} return 1;
} }
} }
} }