X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d7f8258414f300cc6656bb00cec982a7324f2056..3cebfef17b54f9dacc386f090827b8badb2773d2:/wxPython/src/libpy.c diff --git a/wxPython/src/libpy.c b/wxPython/src/libpy.c index f53df745f2..131b635d0d 100644 --- a/wxPython/src/libpy.c +++ b/wxPython/src/libpy.c @@ -203,12 +203,49 @@ SWIG_TypeName(const swig_type_info *ty) { return ty->name; } +/* + Compare two type names skipping the space characters, therefore + "char*" == "char *" and "Class" == "Class", etc. + + Return 0 when the two name types are equivalent, as in + strncmp, but skipping ' '. +*/ +static int +SWIG_TypeNameComp(const char *f1, const char *l1, + const char *f2, const char *l2) { + for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { + while ((*f1 == ' ') && (f1 != l1)) ++f1; + while ((*f2 == ' ') && (f2 != l2)) ++f2; + if (*f1 != *f2) return *f1 - *f2; + } + return (l1 - f1) - (l2 - f2); +} + +/* + Check type equivalence in a name list like ||... +*/ +static int +SWIG_TypeEquiv(const char *nb, const char *tb) { + int equiv = 0; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (!equiv && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = SWIG_TypeNameComp(nb, ne, tb, te) == 0; + if (*ne) ++ne; + } + return equiv; +} + + /* Search for a swig_type_info structure */ SWIGRUNTIME(swig_type_info *) SWIG_TypeQuery(const char *name) { swig_type_info *ty = swig_type_list; while (ty) { - if (ty->str && (strcmp(name,ty->str) == 0)) return ty; + if (ty->str && (SWIG_TypeEquiv(ty->str,name))) return ty; if (ty->name && (strcmp(name,ty->name) == 0)) return ty; ty = ty->prev; } @@ -279,7 +316,6 @@ SWIG_UnpackData(char *c, void *ptr, int sz) { } #endif - /*********************************************************************** * python.swg * @@ -353,27 +389,6 @@ SWIGIMPORT(int) SWIG_Python_ConvertPacked(PyObject *, void *, int SWIGIMPORT(PyObject *) SWIG_Python_NewPackedObj(void *, int sz, swig_type_info *); SWIGIMPORT(void) SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]); -/* ----------------------------------------------------------------------------- - * the needed conversions between C++ and python - * ----------------------------------------------------------------------------- */ -/* basic types */ -/* - utilities -*/ -SWIGIMPORT(char* ) SWIG_PyObj_AsCharPtr(PyObject *obj, swig_type_info* pchar_info); -SWIGIMPORT(PyObject *) SWIG_PyObj_FromCharPtr(const char* cptr); -SWIGIMPORT(unsigned long) SWIG_PyObj_AsUnsignedLong(PyObject * obj); -SWIGIMPORT(long) SWIG_PyObj_AsLongInRange(PyObject * obj, const char* type, - long min_value, long max_value); -SWIGIMPORT(unsigned long) SWIG_PyObj_AsUnsignedLongInRange(PyObject *obj, const char* type, - unsigned long max_value); -SWIGIMPORT(char *) SWIG_PyObj_AsNewCharPtr(PyObject *obj, swig_type_info* pchar_info); -SWIGIMPORT(void) SWIG_PyObj_AsCharPtrAndSize(PyObject *obj, swig_type_info* pchar_info, - char** cptr, size_t* size); -SWIGIMPORT(void) SWIG_PyObj_AsCharArray(PyObject *obj, swig_type_info* pchar_info, - char* carray, size_t size); -SWIGIMPORT(PyObject *) SWIG_PyObj_FromCharArray(const char* carray, size_t size); -SWIGIMPORT(float) SWIG_PyObj_AsFloatConv(PyObject *obj, py_objasdbl_conv pyconv); #else @@ -441,19 +456,51 @@ swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) { statichere PyTypeObject varlinktype = { PyObject_HEAD_INIT(0) - 0, - (char *)"swigvarlink", /* Type name */ - sizeof(swig_varlinkobject), /* Basic size */ - 0, /* Itemsize */ - 0, /* Deallocator */ - (printfunc) swig_varlink_print, /* Print */ - (getattrfunc) swig_varlink_getattr, /* get attr */ - (setattrfunc) swig_varlink_setattr, /* Set attr */ - 0, /* tp_compare */ - (reprfunc) swig_varlink_repr, /* tp_repr */ + 0, /* Number of items in variable part (ob_size) */ + (char *)"swigvarlink", /* Type name (tp_name) */ + sizeof(swig_varlinkobject), /* Basic size (tp_basicsize) */ + 0, /* Itemsize (tp_itemsize) */ + 0, /* Deallocator (tp_dealloc) */ + (printfunc) swig_varlink_print, /* Print (tp_print) */ + (getattrfunc) swig_varlink_getattr, /* get attr (tp_getattr) */ + (setattrfunc) swig_varlink_setattr, /* Set attr (tp_setattr) */ + 0, /* tp_compare */ + (reprfunc) swig_varlink_repr, /* tp_repr */ 0, /* tp_as_number */ - 0, /* tp_as_mapping*/ - 0, /* tp_hash */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + 0, /* tp_flags */ + 0, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ }; /* Create a variable linking object for use later */ @@ -564,10 +611,10 @@ cobject: type_error: if (flags & SWIG_POINTER_EXCEPTION) { if (ty && c) { - char *temp = (char *) malloc(64+strlen(ty->name)+strlen(c)); - sprintf(temp,"Type error. Got %s, expected %s", c, ty->name); - PyErr_SetString(PyExc_TypeError, temp); - free((char *) temp); + PyObject *err = + PyString_FromFormat("Type error. Got %s, expected %s",c,ty->name); + PyErr_SetObject(PyExc_TypeError, err); + Py_DECREF(err); } else { PyErr_SetString(PyExc_TypeError,"Expected a pointer"); } @@ -605,10 +652,10 @@ type_error: if (flags) { if (ty && c) { - char *temp = (char *) malloc(64+strlen(ty->name)+strlen(c)); - sprintf(temp,"Type error. Got %s, expected %s", c, ty->name); - PyErr_SetString(PyExc_TypeError, temp); - free((char *) temp); + PyObject *err = + PyString_FromFormat("Type error. Got %s, expected %s",c,ty->name); + PyErr_SetObject(PyExc_TypeError, err); + Py_DECREF(err); } else { PyErr_SetString(PyExc_TypeError,"Expected a pointer"); } @@ -666,196 +713,6 @@ SWIG_Python_NewPackedObj(void *ptr, int sz, swig_type_info *type) { return PyString_FromString(result); } -/* ----------------------------------------------------------------------------- - * the needed conversions between C++ and python - * ----------------------------------------------------------------------------- */ - -#include -#include -#include - -SWIGRUNTIME(unsigned long) -SWIG_PyObj_AsUnsignedLong(PyObject * obj) -{ - if (PyLong_Check(obj)) { - return PyLong_AsUnsignedLong(obj); - } else { - long i = PyInt_AsLong(obj); - if ( !PyErr_Occurred() && (i < 0)) { - PyErr_SetString(PyExc_TypeError, "negative value for unsigned type"); - } - return i; - } -} - -SWIGRUNTIME(long) -SWIG_PyObj_AsLongInRange(PyObject * obj, const char* type, - long min_value, long max_value) -{ - long value = PyInt_Check(obj) ? PyInt_AsLong(obj) : PyLong_AsLongLong(obj); - if (!PyErr_Occurred()) { - if (value < min_value) { - PyObject *err = - PyString_FromFormat("value %ld is less than '%s' minimum %ld", - value, type, min_value); - - PyErr_SetObject(PyExc_OverflowError, err); - Py_XDECREF(err); - } else if (value > max_value) { - PyObject *err = - PyString_FromFormat("value %ld is greater than '%s' maximum %ld", - value, type, max_value); - PyErr_SetObject(PyExc_OverflowError, err); - Py_XDECREF(err); - } - } - return value; -} - -SWIGRUNTIME(unsigned long) -SWIG_PyObj_AsUnsignedLongInRange(PyObject *obj, const char* type, - unsigned long max_value) -{ - unsigned long value = SWIG_PyObj_AsUnsignedLong(obj); - if (!PyErr_Occurred()) { - if (value > max_value) { - PyObject *err = - PyString_FromFormat("value %ld is greater than '%s' minimum %ld", - value, type, max_value); - PyErr_SetObject(PyExc_OverflowError, err); - Py_XDECREF(err); - } - } - return value; -} - -SWIGRUNTIME(float) -SWIG_PyObj_AsFloatConv(PyObject *obj, py_objasdbl_conv pyconv) -{ - double value = pyconv(obj); - if (!PyErr_Occurred()) { - if (value < FLT_MIN) { - PyObject *err = - PyString_FromFormat("value %g is less than float minimum %g", - value, FLT_MIN); - PyErr_SetObject(PyExc_OverflowError, err); - Py_XDECREF(err); - } else if (value > FLT_MAX) { - PyObject *err = - PyString_FromFormat("value %g is greater than float maximum %g", - value, FLT_MAX); - PyErr_SetObject(PyExc_OverflowError, err); - Py_XDECREF(err); - } - } - return (float) value; -} - -SWIGRUNTIME(void) -SWIG_PyObj_AsCharPtrAndSize(PyObject *obj, swig_type_info* pchar_info, - char** cptr, size_t* size) -{ - int psize; - if ((!pchar_info) || SWIG_ConvertPtr(obj,(void **)cptr, pchar_info, 0) == -1) { - if (pchar_info && PyErr_Occurred()) PyErr_Clear(); - PyString_AsStringAndSize(obj, cptr, &psize); - *size = (size_t) psize; - } else { - /* don't like strlen, but ... */ - *size = (*cptr) ? (strlen(*cptr) + 1) : 0; - } -} - - -SWIGRUNTIME(char*) -SWIG_PyObj_AsNewCharPtr(PyObject *obj, swig_type_info* pchar_info) -{ - char *res = 0; - char* cptr; size_t csize; - SWIG_PyObj_AsCharPtrAndSize(obj, pchar_info, &cptr, &csize); - if (!PyErr_Occurred() && cptr) { - /* we add the '0' terminator if needed */ - size_t size = (csize && !(cptr[csize - 1])) ? csize : csize + 1; - if (size) { -#ifdef __cplusplus - res = new char[size]; -#else - res = malloc(size); -#endif - if (csize) memcpy(res, cptr, csize); - if (csize < size) res[csize] = 0; - } - } - return res; -} - -SWIGRUNTIME(PyObject *) -SWIG_PyObj_FromCharArray(const char* carray, size_t size) -{ - if (size > INT_MAX) { - PyObject *err = - PyString_FromFormat("a char array of size %d is not allowed in python", - size); - PyErr_SetObject(PyExc_TypeError, err); - Py_XDECREF(err); - Py_INCREF(Py_None); - return Py_None; - } else { - int psize = (int) size; - return PyString_FromStringAndSize(carray, psize); - } -} - -SWIGRUNTIME(void) -SWIG_PyObj_AsCharArray(PyObject *obj, swig_type_info* pchar_info, - char* carray, size_t size) -{ - char* cptr; size_t csize; - SWIG_PyObj_AsCharPtrAndSize(obj, pchar_info, &cptr, &csize); - if (!PyErr_Occurred()) { - /* in C (but not in C++) you can do: - - char x[5] = "hello"; - - ie, assing the array using an extra '0' char. Here, - we assume the C behavior... - */ - if ((csize == size + 1) && !(cptr[csize-1])) --csize; - if (csize > size) { - PyObject *err = - PyString_FromFormat("a char array of maximum size %d is expected", - size); - PyErr_SetObject(PyExc_TypeError, err); - Py_XDECREF(err); - } else { - if (csize) memcpy(carray, cptr, csize); - if (csize < size) memset(carray + csize, 0, size - csize); - } - } -} - -SWIGRUNTIME(PyObject *) -SWIG_PyObj_FromCharPtr(const char* cptr) -{ - if (cptr) { - return PyString_FromString(cptr); - } else { - Py_INCREF(Py_None); - return Py_None; - } -} - -SWIGRUNTIME(char* ) -SWIG_PyObj_AsCharPtr(PyObject *obj, swig_type_info* pchar_info) -{ - char* ptr; - if (SWIG_ConvertPtr(obj,(void **)&ptr, pchar_info, 0) == -1) { - if (PyErr_Occurred()) PyErr_Clear(); - ptr = PyString_AsString(obj); - } - return ptr; -} - /* Install Constants */ SWIGRUNTIME(void) SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { @@ -870,7 +727,12 @@ SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { obj = PyFloat_FromDouble(constants[i].dvalue); break; case SWIG_PY_STRING: - obj = SWIG_PyObj_FromCharPtr((char *) constants[i].pvalue); + if (constants[i].pvalue) { + obj = PyString_FromString((char *) constants[i].pvalue); + } else { + Py_INCREF(Py_None); + obj = Py_None; + } break; case SWIG_PY_POINTER: obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0); @@ -900,7 +762,6 @@ SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { #endif - /* -------- TYPES TABLE (BEGIN) -------- */ #define SWIGTYPE_p_char swig_types[0] @@ -916,42 +777,47 @@ static swig_type_info *swig_types[2]; #define SWIG_name "_swigrun" -#include -#include -#include +/* Auxiliar swig macros */ -#ifndef SWIGSTATIC #ifdef __cplusplus -#define SWIGSTATIC(a) static inline a -#else +#define SWIGSTATICINLINE(a) static inline a #define SWIGSTATIC(a) static a -#endif -#endif +#define swig_new_array(type, size) (new type[(size)]) +#define swig_delete_array(cptr) delete[] cptr +#define swig_const_cast(type,a) const_cast(a) +#define swig_static_cast(type,a) static_cast(a) +#define swig_reinterpret_cast(type,a) reinterpret_cast(a) -#ifndef numeric_cast -#ifdef __cplusplus #ifdef HAVE_NUMERIC_CAST -#define numeric_cast(type,a) numeric_cast(a) +#define swig_numeric_cast(type,a) numeric_cast(a) #else -#define numeric_cast(type,a) static_cast(a) -#endif -#else -#define numeric_cast(type,a) (type)(a) -#endif +#define swig_numeric_cast(type,a) static_cast(a) #endif +#else /* C case */ - -#define SWIG_PyObj_FromSignedChar PyInt_FromLong -#define SWIG_PyObj_FromUnsignedChar PyInt_FromLong -#define SWIG_PyObj_FromShort PyInt_FromLong -#define SWIG_PyObj_FromUnsignedShort PyInt_FromLong -#define SWIG_PyObj_FromInt PyInt_FromLong -#define SWIG_PyObj_FromLong PyInt_FromLong -#define SWIG_PyObj_FromFloat PyFloat_FromDouble -#define SWIG_PyObj_FromDouble PyFloat_FromDouble -#define SWIG_PyObj_FromFloat PyFloat_FromDouble -#define SWIG_PyObj_FromDouble PyFloat_FromDouble +#define SWIGSTATICINLINE(a) static a +#define SWIGSTATIC(a) static a +#define swig_new_array(type, size) ((type*) malloc((size)*sizeof(type))) +#define swig_delete_array(cptr) free((char*)cptr) +#define swig_const_cast(type,a) (type)(a) +#define swig_static_cast(type,a) (type)(a) +#define swig_reinterpret_cast(type,a) (type)(a) +#define swig_numeric_cast(type,a) (type)(a) + +#endif /* __cplusplus */ + + +#define SWIG_FromSignedChar PyInt_FromLong +#define SWIG_FromUnsignedChar PyInt_FromLong +#define SWIG_FromShort PyInt_FromLong +#define SWIG_FromUnsignedShort PyInt_FromLong +#define SWIG_FromInt PyInt_FromLong +#define SWIG_FromLong PyInt_FromLong +#define SWIG_FromFloat PyFloat_FromDouble +#define SWIG_FromDouble PyFloat_FromDouble +#define SWIG_FromFloat PyFloat_FromDouble +#define SWIG_FromDouble PyFloat_FromDouble #ifdef __cplusplus extern "C" { @@ -963,7 +829,7 @@ static PyMethodDef SwigMethods[] = { /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ -static swig_type_info _swigt__p_char[] = {{"_p_char", 0, "char *", 0},{"_p_char"},{0}}; +static swig_type_info _swigt__p_char[] = {{"_p_char", 0, "char *", 0, 0, 0, 0},{"_p_char", 0, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 0, 0}}; static swig_type_info *swig_types_initial[] = { _swigt__p_char,