Fix for METH_O and -compactdefaultargs, in two parts:
- Don't mark a method as METH_O if it has compactdefaultargs - In SWIG_Python_UnpackTuple, allow for a non-tuple 'args'. Added compatibility for python versions 2.3 and 2.4. These are only partially supported; inheriting from wrapped types looks problematic. Versions older that 2.3 are unlikely ever to work. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/szager-python-builtin@12590 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
48faf20934
commit
90fe22acf7
6 changed files with 63 additions and 7 deletions
|
|
@ -270,7 +270,7 @@ SwigPyStaticVar_repr(PyGetSetDescrObject *descr) {
|
|||
SWIGINTERN int
|
||||
SwigPyStaticVar_traverse(PyObject *self, visitproc visit, void *arg) {
|
||||
PyDescrObject *descr = (PyDescrObject *)self;
|
||||
Py_VISIT(descr->d_type);
|
||||
Py_VISIT((PyObject*) descr->d_type);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -153,4 +153,49 @@ PyObject *PyBool_FromLong(long ok)
|
|||
typedef int Py_ssize_t;
|
||||
# define PY_SSIZE_T_MAX INT_MAX
|
||||
# define PY_SSIZE_T_MIN INT_MIN
|
||||
typedef inquiry lenfunc;
|
||||
typedef intargfunc ssizeargfunc;
|
||||
typedef intintargfunc ssizessizeargfunc;
|
||||
typedef intobjargproc ssizeobjargproc;
|
||||
typedef intintobjargproc ssizessizeobjargproc;
|
||||
typedef getreadbufferproc readbufferproc;
|
||||
typedef getwritebufferproc writebufferproc;
|
||||
typedef getsegcountproc segcountproc;
|
||||
typedef getcharbufferproc charbufferproc;
|
||||
static inline long PyNumber_AsSsize_t (PyObject *x, void*)
|
||||
{
|
||||
long result = 0;
|
||||
PyObject *i = PyNumber_Int(x);
|
||||
if (i) {
|
||||
result = PyInt_AsLong(i);
|
||||
Py_DECREF(i);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if PY_VERSION_HEX < 0x02040000
|
||||
#define Py_VISIT(op) \
|
||||
do { \
|
||||
if (op) { \
|
||||
int vret = visit((op), arg); \
|
||||
if (vret) \
|
||||
return vret; \
|
||||
} \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#if PY_VERSION_HEX < 0x02030000
|
||||
typedef struct {
|
||||
PyTypeObject type;
|
||||
PyNumberMethods as_number;
|
||||
PyMappingMethods as_mapping;
|
||||
PySequenceMethods as_sequence;
|
||||
PyBufferProcs as_buffer;
|
||||
PyObject *name, *slots;
|
||||
} PyHeapTypeObject;
|
||||
#endif
|
||||
|
||||
#if PY_VERSION_HEX < 0x02030000
|
||||
typedef destructor freefunc;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -166,6 +166,14 @@ SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssi
|
|||
}
|
||||
}
|
||||
if (!PyTuple_Check(args)) {
|
||||
if (min <= 1 && max >= 1) {
|
||||
objs[0] = args;
|
||||
register int i;
|
||||
for (i = 1; i < max; ++i) {
|
||||
objs[i] = 0;
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple");
|
||||
return 0;
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -129,8 +129,8 @@ SwigPython_std_pair_repr (PyObject *o)
|
|||
{
|
||||
PyObject *tuple = PyTuple_New(2);
|
||||
assert(tuple);
|
||||
PyTuple_SET_ITEM(tuple, 0, PyObject_GetAttrString(o, "first"));
|
||||
PyTuple_SET_ITEM(tuple, 1, PyObject_GetAttrString(o, "second"));
|
||||
PyTuple_SET_ITEM(tuple, 0, PyObject_GetAttrString(o, (char*) "first"));
|
||||
PyTuple_SET_ITEM(tuple, 1, PyObject_GetAttrString(o, (char*) "second"));
|
||||
PyObject *result = PyObject_Repr(tuple);
|
||||
Py_DECREF(tuple);
|
||||
return result;
|
||||
|
|
@ -139,14 +139,14 @@ SwigPython_std_pair_repr (PyObject *o)
|
|||
SWIGINTERN PyObject*
|
||||
SwigPython_std_pair_getitem (PyObject *a, Py_ssize_t b)
|
||||
{
|
||||
PyObject *result = PyObject_GetAttrString(a, b % 2 ? "second" : "first");
|
||||
PyObject *result = PyObject_GetAttrString(a, b % 2 ? (char*) "second" : (char*) "first");
|
||||
return result;
|
||||
}
|
||||
|
||||
SWIGINTERN int
|
||||
SwigPython_std_pair_setitem (PyObject *a, Py_ssize_t b, PyObject *c)
|
||||
{
|
||||
int result = PyObject_SetAttrString(a, b % 2 ? "second" : "first", c);
|
||||
int result = PyObject_SetAttrString(a, b % 2 ? (char*) "second" : (char*) "first", c);
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue