From 29478ef990eadb04c9c1ff4a803b7c5172b31399 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 29 May 2007 00:39:44 +0000 Subject: Merged revisions 55588-55630 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/p3yk ........ r55598 | neal.norwitz | 2007-05-26 10:44:02 +0800 (Sat, 26 May 2007) | 1 line Fix refleak on infinite recursion ........ r55599 | neal.norwitz | 2007-05-26 10:47:45 +0800 (Sat, 26 May 2007) | 1 line Add news entry about overidding isinstance/issubclass (PEP 3119) ........ r55629 | brett.cannon | 2007-05-29 08:06:59 +0800 (Tue, 29 May 2007) | 3 lines Delete the cstubs module. Used as input to Modules/cgen.py to generate the gl module which has already been removed. ........ --- Misc/NEWS | 2 + Modules/cstubs | 1362 ---------------------------------------------------- Objects/abstract.c | 4 +- 3 files changed, 5 insertions(+), 1363 deletions(-) delete mode 100644 Modules/cstubs diff --git a/Misc/NEWS b/Misc/NEWS index 5fc8c5b..9f54b48 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -26,6 +26,8 @@ TO DO Core and Builtins ----------------- +- PEP 3119: isinstance() and issubclass() can be overridden. + - Remove BaseException.message. - Remove tuple parameter unpacking (PEP 3113). diff --git a/Modules/cstubs b/Modules/cstubs deleted file mode 100644 index c8c7dd5..0000000 --- a/Modules/cstubs +++ /dev/null @@ -1,1362 +0,0 @@ - -/* -Input used to generate the Python module "glmodule.c". -The stub generator is a Python script called "cgen.py". - -Each definition must be contained on one line: - - - - can be: void, short, long (XXX maybe others?) - - can be: char, string, short, float, long, or double - string indicates a null terminated string; - if is char and begins with a *, the * is stripped - and is changed into string - - has the form or [] - where can be - s: arg is sent - r: arg is received (arg is a pointer) - and can be (N and I are numbers): - N - argI - retval - N*argI - N*I - N*retval - In the case where the subscript consists of two parts - separated by *, the first part is the width of the matrix, and - the second part is the length of the matrix. This order is - opposite from the order used in C to declare a two-dimensional - matrix. -*/ - -/* - * An attempt has been made to make this module switch threads on qread - * calls. It is far from safe, though. - */ - -#include -#include - -#ifdef __sgi -extern int devport(); -extern int textwritemask(); -extern int pagewritemask(); -extern int gewrite(); -extern int gettp(); -#endif - -#include "Python.h" -#include "cgensupport.h" - -/* -Some stubs are too complicated for the stub generator. -We can include manually written versions of them here. -A line starting with '%' gives the name of the function so the stub -generator can include it in the table of functions. -*/ - -% qread - -static PyObject * -gl_qread(self, args) - PyObject *self; - PyObject *args; -{ - long retval; - short arg1 ; - Py_BEGIN_ALLOW_THREADS - retval = qread( & arg1 ); - Py_END_ALLOW_THREADS - { PyObject *v = PyTuple_New( 2 ); - if (v == NULL) return NULL; - PyTuple_SetItem(v, 0, mknewlongobject(retval)); - PyTuple_SetItem(v, 1, mknewshortobject(arg1)); - return v; - } -} - - -/* -varray -- an array of v.. calls. -The argument is an array (maybe list or tuple) of points. -Each point must be a tuple or list of coordinates (x, y, z). -The points may be 2- or 3-dimensional but must all have the -same dimension. Float and int values may be mixed however. -The points are always converted to 3D double precision points -by assuming z=0.0 if necessary (as indicated in the man page), -and for each point v3d() is called. -*/ - -% varray - -static PyObject * -gl_varray(self, args) - PyObject *self; - PyObject *args; -{ - PyObject *v, *w=NULL; - int i, n, width; - double vec[3]; - PyObject * (*getitem)(PyObject *, int); - - if (!PyArg_GetObject(args, 1, 0, &v)) - return NULL; - - if (PyList_Check(v)) { - n = PyList_Size(v); - getitem = PyList_GetItem; - } - else if (PyTuple_Check(v)) { - n = PyTuple_Size(v); - getitem = PyTuple_GetItem; - } - else { - PyErr_BadArgument(); - return NULL; - } - - if (n == 0) { - Py_INCREF(Py_None); - return Py_None; - } - if (n > 0) - w = (*getitem)(v, 0); - - width = 0; - if (w == NULL) { - } - else if (PyList_Check(w)) { - width = PyList_Size(w); - } - else if (PyTuple_Check(w)) { - width = PyTuple_Size(w); - } - - switch (width) { - case 2: - vec[2] = 0.0; - /* Fall through */ - case 3: - break; - default: - PyErr_BadArgument(); - return NULL; - } - - for (i = 0; i < n; i++) { - w = (*getitem)(v, i); - if (!PyArg_GetDoubleArray(w, 1, 0, width, vec)) - return NULL; - v3d(vec); - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* -vnarray, nvarray -- an array of n3f and v3f calls. -The argument is an array (list or tuple) of pairs of points and normals. -Each pair is a tuple (NOT a list) of a point and a normal for that point. -Each point or normal must be a tuple (NOT a list) of coordinates (x, y, z). -Three coordinates must be given. Float and int values may be mixed. -For each pair, n3f() is called for the normal, and then v3f() is called -for the vector. - -vnarray and nvarray differ only in the order of the vector and normal in -the pair: vnarray expects (v, n) while nvarray expects (n, v). -*/ - -static PyObject *gen_nvarray(); /* Forward */ - -% nvarray - -static PyObject * -gl_nvarray(self, args) - PyObject *self; - PyObject *args; -{ - return gen_nvarray(args, 0); -} - -% vnarray - -static PyObject * -gl_vnarray(self, args) - PyObject *self; - PyObject *args; -{ - return gen_nvarray(args, 1); -} - -/* Generic, internal version of {nv,nv}array: inorm indicates the - argument order, 0: normal first, 1: vector first. */ - -static PyObject * -gen_nvarray(args, inorm) - PyObject *args; - int inorm; -{ - PyObject *v, *w, *wnorm, *wvec; - int i, n; - float norm[3], vec[3]; - PyObject * (*getitem)(PyObject *, int); - - if (!PyArg_GetObject(args, 1, 0, &v)) - return NULL; - - if (PyList_Check(v)) { - n = PyList_Size(v); - getitem = PyList_GetItem; - } - else if (PyTuple_Check(v)) { - n = PyTuple_Size(v); - getitem = PyTuple_GetItem; - } - else { - PyErr_BadArgument(); - return NULL; - } - - for (i = 0; i < n; i++) { - w = (*getitem)(v, i); - if (!PyTuple_Check(w) || PyTuple_Size(w) != 2) { - PyErr_BadArgument(); - return NULL; - } - wnorm = PyTuple_GetItem(w, inorm); - wvec = PyTuple_GetItem(w, 1 - inorm); - if (!PyArg_GetFloatArray(wnorm, 1, 0, 3, norm) || - !PyArg_GetFloatArray(wvec, 1, 0, 3, vec)) - return NULL; - n3f(norm); - v3f(vec); - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* nurbssurface(s_knots[], t_knots[], ctl[][], s_order, t_order, type). - The dimensions of ctl[] are computed as follows: - [len(s_knots) - s_order], [len(t_knots) - t_order] -*/ - -% nurbssurface - -static PyObject * -gl_nurbssurface(self, args) - PyObject *self; - PyObject *args; -{ - long arg1 ; - double * arg2 ; - long arg3 ; - double * arg4 ; - double *arg5 ; - long arg6 ; - long arg7 ; - long arg8 ; - long ncoords; - long s_byte_stride, t_byte_stride; - long s_nctl, t_nctl; - long s, t; - PyObject *v, *w, *pt; - double *pnext; - if (!PyArg_GetLongArraySize(args, 6, 0, &arg1)) - return NULL; - if ((arg2 = PyMem_NEW(double, arg1 )) == NULL) { - return PyErr_NoMemory(); - } - if (!PyArg_GetDoubleArray(args, 6, 0, arg1 , arg2)) - return NULL; - if (!PyArg_GetLongArraySize(args, 6, 1, &arg3)) - return NULL; - if ((arg4 = PyMem_NEW(double, arg3 )) == NULL) { - return PyErr_NoMemory(); - } - if (!PyArg_GetDoubleArray(args, 6, 1, arg3 , arg4)) - return NULL; - if (!PyArg_GetLong(args, 6, 3, &arg6)) - return NULL; - if (!PyArg_GetLong(args, 6, 4, &arg7)) - return NULL; - if (!PyArg_GetLong(args, 6, 5, &arg8)) - return NULL; - if (arg8 == N_XYZ) - ncoords = 3; - else if (arg8 == N_XYZW) - ncoords = 4; - else { - PyErr_BadArgument(); - return NULL; - } - s_nctl = arg1 - arg6; - t_nctl = arg3 - arg7; - if (!PyArg_GetObject(args, 6, 2, &v)) - return NULL; - if (!PyList_Check(v) || PyList_Size(v) != s_nctl) { - PyErr_BadArgument(); - return NULL; - } - if ((arg5 = PyMem_NEW(double, s_nctl*t_nctl*ncoords )) == NULL) { - return PyErr_NoMemory(); - } - pnext = arg5; - for (s = 0; s < s_nctl; s++) { - w = PyList_GetItem(v, s); - if (w == NULL || !PyList_Check(w) || - PyList_Size(w) != t_nctl) { - PyErr_BadArgument(); - return NULL; - } - for (t = 0; t < t_nctl; t++) { - pt = PyList_GetItem(w, t); - if (!PyArg_GetDoubleArray(pt, 1, 0, ncoords, pnext)) - return NULL; - pnext += ncoords; - } - } - s_byte_stride = sizeof(double) * ncoords; - t_byte_stride = s_byte_stride * s_nctl; - nurbssurface( arg1 , arg2 , arg3 , arg4 , - s_byte_stride , t_byte_stride , arg5 , arg6 , arg7 , arg8 ); - PyMem_DEL(arg2); - PyMem_DEL(arg4); - PyMem_DEL(arg5); - Py_INCREF(Py_None); - return Py_None; -} - -/* nurbscurve(knots, ctlpoints, order, type). - The length of ctlpoints is len(knots)-order. */ - -%nurbscurve - -static PyObject * -gl_nurbscurve(self, args) - PyObject *self; - PyObject *args; -{ - long arg1 ; - double * arg2 ; - long arg3 ; - double * arg4 ; - long arg5 ; - long arg6 ; - int ncoords, npoints; - int i; - PyObject *v; - double *pnext; - if (!PyArg_GetLongArraySize(args, 4, 0, &arg1)) - return NULL; - if ((arg2 = PyMem_NEW(double, arg1 )) == NULL) { - return PyErr_NoMemory(); - } - if (!PyArg_GetDoubleArray(args, 4, 0, arg1 , arg2)) - return NULL; - if (!PyArg_GetLong(args, 4, 2, &arg5)) - return NULL; - if (!PyArg_GetLong(args, 4, 3, &arg6)) - return NULL; - if (arg6 == N_ST) - ncoords = 2; - else if (arg6 == N_STW) - ncoords = 3; - else { - PyErr_BadArgument(); - return NULL; - } - npoints = arg1 - arg5; - if (!PyArg_GetObject(args, 4, 1, &v)) - return NULL; - if (!PyList_Check(v) || PyList_Size(v) != npoints) { - PyErr_BadArgument(); - return NULL; - } - if ((arg4 = PyMem_NEW(double, npoints*ncoords )) == NULL) { - return PyErr_NoMemory(); - } - pnext = arg4; - for (i = 0; i < npoints; i++) { - if (!PyArg_GetDoubleArray(PyList_GetItem(v, i), 1, 0, ncoords, pnext)) - return NULL; - pnext += ncoords; - } - arg3 = (sizeof(double)) * ncoords; - nurbscurve( arg1 , arg2 , arg3 , arg4 , arg5 , arg6 ); - PyMem_DEL(arg2); - PyMem_DEL(arg4); - Py_INCREF(Py_None); - return Py_None; -} - -/* pwlcurve(points, type). - Points is a list of points. Type must be N_ST. */ - -%pwlcurve - -static PyObject * -gl_pwlcurve(self, args) - PyObject *self; - PyObject *args; -{ - PyObject *v; - long type; - double *data, *pnext; - long npoints, ncoords; - int i; - if (!PyArg_GetObject(args, 2, 0, &v)) - return NULL; - if (!PyArg_GetLong(args, 2, 1, &type)) - return NULL; - if (!PyList_Check(v)) { - PyErr_BadArgument(); - return NULL; - } - npoints = PyList_Size(v); - if (type == N_ST) - ncoords = 2; - else { - PyErr_BadArgument(); - return NULL; - } - if ((data = PyMem_NEW(double, npoints*ncoords)) == NULL) { - return PyErr_NoMemory(); - } - pnext = data; - for (i = 0; i < npoints; i++) { - if (!PyArg_GetDoubleArray(PyList_GetItem(v, i), 1, 0, ncoords, pnext)) - return NULL; - pnext += ncoords; - } - pwlcurve(npoints, data, sizeof(double)*ncoords, type); - PyMem_DEL(data); - Py_INCREF(Py_None); - return Py_None; -} - - -/* Picking and Selecting */ - -static short *pickbuffer = NULL; -static long pickbuffersize; - -static PyObject * -pick_select(args, func) - PyObject *args; - void (*func)(); -{ - if (!PyArg_GetLong(args, 1, 0, &pickbuffersize)) - return NULL; - if (pickbuffer != NULL) { - PyErr_SetString(PyExc_RuntimeError, - "pick/gselect: already picking/selecting"); - return NULL; - } - if ((pickbuffer = PyMem_NEW(short, pickbuffersize)) == NULL) { - return PyErr_NoMemory(); - } - (*func)(pickbuffer, pickbuffersize); - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -endpick_select(args, func) - PyObject *args; - long (*func)(); -{ - PyObject *v, *w; - int i, nhits, n; - if (pickbuffer == NULL) { - PyErr_SetString(PyExc_RuntimeError, - "endpick/endselect: not in pick/select mode"); - return NULL; - } - nhits = (*func)(pickbuffer); - if (nhits < 0) { - nhits = -nhits; /* How to report buffer overflow otherwise? */ - } - /* Scan the buffer to see how many integers */ - n = 0; - for (; nhits > 0; nhits--) { - n += 1 + pickbuffer[n]; - } - v = PyList_New(n); - if (v == NULL) - return NULL; - /* XXX Could do it nicer and interpret the data structure here, - returning a list of lists. But this can be done in Python... */ - for (i = 0; i < n; i++) { - w = PyInt_FromLong((long)pickbuffer[i]); - if (w == NULL) { - Py_DECREF(v); - return NULL; - } - PyList_SetItem(v, i, w); - } - PyMem_DEL(pickbuffer); - pickbuffer = NULL; - return v; -} - -extern void pick(), gselect(); -extern long endpick(), endselect(); - -%pick -static PyObject *gl_pick(self, args) PyObject *self, *args; { - return pick_select(args, pick); -} - -%endpick -static PyObject *gl_endpick(self, args) PyObject *self, *args; { - return endpick_select(args, endpick); -} - -%gselect -static PyObject *gl_gselect(self, args) PyObject *self, *args; { - return pick_select(args, gselect); -} - -%endselect -static PyObject *gl_endselect(self, args) PyObject *self, *args; { - return endpick_select(args, endselect); -} - - -/* XXX The generator botches this one. Here's a quick hack to fix it. */ - -/* XXX The generator botches this one. Here's a quick hack to fix it. */ - -% getmatrix float r[16] - -static PyObject * -gl_getmatrix(self, args) - PyObject *self; - PyObject *args; -{ - Matrix arg1; - PyObject *v, *w; - int i, j; - getmatrix( arg1 ); - v = PyList_New(16); - if (v == NULL) { - return PyErr_NoMemory(); - } - for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) { - w = mknewfloatobject(arg1[i][j]); - if (w == NULL) { - Py_DECREF(v); - return NULL; - } - PyList_SetItem(v, i*4+j, w); - } - return v; -} - -/* Here's an alternate version that returns a 4x4 matrix instead of - a vector. Unfortunately it is incompatible with loadmatrix and - multmatrix... */ - -% altgetmatrix float r[4][4] - -static PyObject * -gl_altgetmatrix(self, args) - PyObject *self; - PyObject *args; -{ - Matrix arg1; - PyObject *v, *w; - int i, j; - getmatrix( arg1 ); - v = PyList_New(4); - if (v == NULL) { - return NULL; - } - for (i = 0; i < 4; i++) { - w = PyList_New(4); - if (w == NULL) { - Py_DECREF(v); - return NULL; - } - PyList_SetItem(v, i, w); - } - for (i = 0; i < 4; i++) { - for (j = 0; j < 4; j++) { - w = mknewfloatobject(arg1[i][j]); - if (w == NULL) { - Py_DECREF(v); - return NULL; - } - PyList_SetItem(PyList_GetItem(v, i), j, w); - } - } - return v; -} - -% lrectwrite - -static PyObject * -gl_lrectwrite(self, args) - PyObject *self; - PyObject *args; -{ - short x1 ; - short y1 ; - short x2 ; - short y2 ; - string parray ; - PyObject *s; -#if 0 - int pixcount; -#endif - if (!PyArg_GetShort(args, 5, 0, &x1)) - return NULL; - if (!PyArg_GetShort(args, 5, 1, &y1)) - return NULL; - if (!PyArg_GetShort(args, 5, 2, &x2)) - return NULL; - if (!PyArg_GetShort(args, 5, 3, &y2)) - return NULL; - if (!PyArg_GetString(args, 5, 4, &parray)) - return NULL; - if (!PyArg_GetObject(args, 5, 4, &s)) - return NULL; -#if 0 -/* Don't check this, it breaks experiments with pixmode(PM_SIZE, ...) */ - pixcount = (long)(x2+1-x1) * (long)(y2+1-y1); - if (!PyString_Check(s) || PyString_Size(s) != pixcount*sizeof(long)) { - PyErr_SetString(PyExc_RuntimeError, - "string arg to lrectwrite has wrong size"); - return NULL; - } -#endif - lrectwrite( x1 , y1 , x2 , y2 , (unsigned long *) parray ); - Py_INCREF(Py_None); - return Py_None; -} - -% lrectread - -static PyObject * -gl_lrectread(self, args) - PyObject *self; - PyObject *args; -{ - short x1 ; - short y1 ; - short x2 ; - short y2 ; - PyObject *parray; - int pixcount; - if (!PyArg_GetShort(args, 4, 0, &x1)) - return NULL; - if (!PyArg_GetShort(args, 4, 1, &y1)) - return NULL; - if (!PyArg_GetShort(args, 4, 2, &x2)) - return NULL; - if (!PyArg_GetShort(args, 4, 3, &y2)) - return NULL; - pixcount = (long)(x2+1-x1) * (long)(y2+1-y1); - parray = PyString_FromStringAndSize((char *)NULL, pixcount*sizeof(long)); - if (parray == NULL) - return NULL; /* No memory */ - lrectread(x1, y1, x2, y2, (unsigned long *) PyString_AsString(parray)); - return parray; -} - -% readdisplay - -static PyObject * -gl_readdisplay(self, args) - PyObject *self; - PyObject *args; -{ - short x1, y1, x2, y2; - unsigned long *parray, hints; - long size, size_ret; - PyObject *rv; - - if ( !PyArg_Parse(args, "hhhhl", &x1, &y1, &x2, &y2, &hints) ) - return 0; - size = (long)(x2+1-x1) * (long)(y2+1-y1); - rv = PyString_FromStringAndSize((char *)NULL, size*sizeof(long)); - if ( rv == NULL ) - return NULL; - parray = (unsigned long *)PyString_AsString(rv); - size_ret = readdisplay(x1, y1, x2, y2, parray, hints); - if ( size_ret != size ) { - printf("gl_readdisplay: got %ld pixels, expected %ld\n", - size_ret, size); - PyErr_SetString(PyExc_RuntimeError, "readdisplay returned unexpected length"); - return NULL; - } - return rv; -} - -/* Desperately needed, here are tools to compress and decompress - the data manipulated by lrectread/lrectwrite. - - gl.packrect(width, height, packfactor, bigdata) --> smalldata - makes 'bigdata' 4*(packfactor**2) times smaller by: - - turning it into B/W (a factor 4) - - replacing squares of size pacfactor by one - representative - - gl.unpackrect(width, height, packfactor, smalldata) --> bigdata - is the inverse; the numeric arguments must be *the same*. - - Both work best if width and height are multiples of packfactor - (in fact unpackrect will leave garbage bytes). -*/ - -% packrect - -static PyObject * -gl_packrect(self, args) - PyObject *self; - PyObject *args; -{ - long width, height, packfactor; - char *s; - PyObject *unpacked, *packed; - int pixcount, packedcount, x, y, r, g, b; - unsigned long pixel; - unsigned char *p; - unsigned long *parray; - if (!PyArg_GetLong(args, 4, 0, &width)) - return NULL; - if (!PyArg_GetLong(args, 4, 1, &height)) - return NULL; - if (!PyArg_GetLong(args, 4, 2, &packfactor)) - return NULL; - if (!PyArg_GetString(args, 4, 3, &s)) /* For type checking only */ - return NULL; - if (!PyArg_GetObject(args, 4, 3, &unpacked)) - return NULL; - if (width <= 0 || height <= 0 || packfactor <= 0) { - PyErr_SetString(PyExc_RuntimeError, "packrect args must be > 0"); - return NULL; - } - pixcount = width*height; - packedcount = ((width+packfactor-1)/packfactor) * - ((height+packfactor-1)/packfactor); - if (PyString_Size(unpacked) != pixcount*sizeof(long)) { - PyErr_SetString(PyExc_RuntimeError, - "string arg to packrect has wrong size"); - return NULL; - } - packed = PyString_FromStringAndSize((char *)NULL, packedcount); - if (packed == NULL) - return NULL; - parray = (unsigned long *) PyString_AsString(unpacked); - p = (unsigned char *) PyString_AsString(packed); - for (y = 0; y < height; y += packfactor, parray += packfactor*width) { - for (x = 0; x < width; x += packfactor) { - pixel = parray[x]; - r = pixel & 0xff; - g = (pixel >> 8) & 0xff; - b = (pixel >> 16) & 0xff; - *p++ = (30*r+59*g+11*b) / 100; - } - } - return packed; -} - -% unpackrect - -static unsigned long unpacktab[256]; -static int unpacktab_inited = 0; - -static PyObject * -gl_unpackrect(self, args) - PyObject *self; - PyObject *args; -{ - long width, height, packfactor; - char *s; - PyObject *unpacked, *packed; - int pixcount, packedcount; - register unsigned char *p; - register unsigned long *parray; - if (!unpacktab_inited) { - register int white; - for (white = 256; --white >= 0; ) - unpacktab[white] = white * 0x010101L; - unpacktab_inited++; - } - if (!PyArg_GetLong(args, 4, 0, &width)) - return NULL; - if (!PyArg_GetLong(args, 4, 1, &height)) - return NULL; - if (!PyArg_GetLong(args, 4, 2, &packfactor)) - return NULL; - if (!PyArg_GetString(args, 4, 3, &s)) /* For type checking only */ - return NULL; - if (!PyArg_GetObject(args, 4, 3, &packed)) - return NULL; - if (width <= 0 || height <= 0 || packfactor <= 0) { - PyErr_SetString(PyExc_RuntimeError, "packrect args must be > 0"); - return NULL; - } - pixcount = width*height; - packedcount = ((width+packfactor-1)/packfactor) * - ((height+packfactor-1)/packfactor); - if (PyString_Size(packed) != packedcount) { - PyErr_SetString(PyExc_RuntimeError, - "string arg to unpackrect has wrong size"); - return NULL; - } - unpacked = PyString_FromStringAndSize((char *)NULL, pixcount*sizeof(long)); - if (unpacked == NULL) - return NULL; - parray = (unsigned long *) PyString_AsString(unpacked); - p = (unsigned char *) PyString_AsString(packed); - if (packfactor == 1 && width*height > 0) { - /* Just expand bytes to longs */ - register int x = width * height; - do { - *parray++ = unpacktab[*p++]; - } while (--x >= 0); - } - else { - register int y; - for (y = 0; y < height-packfactor+1; - y += packfactor, parray += packfactor*width) { - register int x; - for (x = 0; x < width-packfactor+1; x += packfactor) { - register unsigned long pixel = unpacktab[*p++]; - register int i; - for (i = packfactor*width; (i-=width) >= 0;) { - register int j; - for (j = packfactor; --j >= 0; ) - parray[i+x+j] = pixel; - } - } - } - } - return unpacked; -} - -% gversion -static PyObject * -gl_gversion(self, args) - PyObject *self; - PyObject *args; -{ - char buf[20]; - gversion(buf); - return PyString_FromString(buf); -} - - -/* void clear - Manual because of clash with termcap */ -%clear -static PyObject * -gl_clear(self, args) - PyObject *self; - PyObject *args; -{ - __GLclear( ); - Py_INCREF(Py_None); - return Py_None; -} - -/* End of manually written stubs */ - -%% - -long getshade -if !solaris void devport short s long s -void rdr2i long s long s -void rectfs short s short s short s short s -void rects short s short s short s short s -void rmv2i long s long s -void noport -void popviewport -void clearhitcode -void closeobj -void cursoff -void curson -void doublebuffer -void finish -void gconfig -void ginit -void greset -void multimap -void onemap -void popattributes -void popmatrix -void pushattributes -void pushmatrix -void pushviewport -void qreset -void RGBmode -void singlebuffer -void swapbuffers -void gsync -void gflush -void tpon -void tpoff -void clkon -void clkoff -void ringbell -#void callfunc -void gbegin -void textinit -void initnames -void pclos -void popname -if !solaris void spclos -void zclear -void screenspace -void reshapeviewport -void winpush -void winpop -void foreground -void endfullscrn -if !solaris void endpupmode -void fullscrn -if !solaris void pupmode -void winconstraints -void pagecolor short s -void textcolor short s -void color short s -void curveit short s -void font short s -void linewidth short s -void setlinestyle short s -void setmap short s -void swapinterval short s -void writemask short s -if !solaris void textwritemask short s -void qdevice short s -void unqdevice short s -void curvebasis short s -void curveprecision short s -void loadname short s -void passthrough short s -void pushname short s -void setmonitor short s -if !solaris void setshade short s -void setpattern short s -if !solaris void pagewritemask short s -# -void callobj long s -void delobj long s -void editobj long s -void makeobj long s -void maketag long s -void chunksize long s -void compactify long s -void deltag long s -void lsrepeat long s -void objinsert long s -void objreplace long s -void winclose long s -void blanktime long s -void freepup long s -# This is not in the library!? -###void pupcolor long s -# -void backbuffer long s -void frontbuffer long s -if !solaris void lsbackup long s -void resetls long s -void lampon long s -void lampoff long s -void setbell long s -void blankscreen long s -void depthcue long s -void zbuffer long s -void backface long s -# -void cmov2i long s long s -void draw2i long s long s -void move2i long s long s -void pnt2i long s long s -void patchbasis long s long s -void patchprecision long s long s -void pdr2i long s long s -void pmv2i long s long s -void rpdr2i long s long s -void rpmv2i long s long s -void xfpt2i long s long s -void objdelete long s long s -void patchcurves long s long s -void minsize long s long s -void maxsize long s long s -void keepaspect long s long s -void prefsize long s long s -void stepunit long s long s -void fudge long s long s -void winmove long s long s -# -void attachcursor short s short s -void deflinestyle short s short s -void noise short s short s -void picksize short s short s -void qenter short s short s -void setdepth short s short s -void cmov2s short s short s -void draw2s short s short s -void move2s short s short s -void pdr2s short s short s -void pmv2s short s short s -void pnt2s short s short s -void rdr2s short s short s -void rmv2s short s short s -void rpdr2s short s short s -void rpmv2s short s short s -void xfpt2s short s short s -# -void cmov2 float s float s -void draw2 float s float s -void move2 float s float s -void pnt2 float s float s -void pdr2 float s float s -void pmv2 float s float s -void rdr2 float s float s -void rmv2 float s float s -void rpdr2 float s float s -void rpmv2 float s float s -void xfpt2 float s float s -# -void loadmatrix float s[4*4] -# Really [4][4] -void multmatrix float s[4*4] -# Really [4][4] -void crv float s[3*4] -# Really [4][3] -void rcrv float s[4*4] -# Really [4][4] -# -# Methods that have strings. -# -void addtopup long s char *s long s -void charstr char *s -void getport char *s -long strwidth char *s -long winopen char *s -void wintitle char *s -# -# Methods that have 1 long (# of elements) and an array -# -void polf long s float s[3*arg1] -void polf2 long s float s[2*arg1] -void poly long s float s[3*arg1] -void poly2 long s float s[2*arg1] -void crvn long s float s[3*arg1] -void rcrvn long s float s[4*arg1] -# -void polf2i long s long s[2*arg1] -void polfi long s long s[3*arg1] -void poly2i long s long s[2*arg1] -void polyi long s long s[3*arg1] -# -void polf2s long s short s[2*arg1] -void polfs long s short s[3*arg1] -void polys long s short s[3*arg1] -void poly2s long s short s[2*arg1] -# -void defcursor short s u_short s[128] -# Is this useful? -void writepixels short s u_short s[arg1] -# Should be unsigned short... -void defbasis long s float s[4*4] -if !solaris void gewrite short s short s[arg1] -# -void rotate short s char s -# This is not in the library!? -###void setbutton short s char s -void rot float s char s -# -void circfi long s long s long s -void circi long s long s long s -void cmovi long s long s long s -void drawi long s long s long s -void movei long s long s long s -void pnti long s long s long s -void newtag long s long s long s -void pdri long s long s long s -void pmvi long s long s long s -void rdri long s long s long s -void rmvi long s long s long s -void rpdri long s long s long s -void rpmvi long s long s long s -void xfpti long s long s long s -# -void circ float s float s float s -void circf float s float s float s -void cmov float s float s float s -void draw float s float s float s -void move float s float s float s -void pnt float s float s float s -void scale float s float s float s -void translate float s float s float s -void pdr float s float s float s -void pmv float s float s float s -void rdr float s float s float s -void rmv float s float s float s -void rpdr float s float s float s -void rpmv float s float s float s -void xfpt float s float s float s -# -void RGBcolor short s short s short s -void RGBwritemask short s short s short s -void setcursor short s short s short s -void tie short s short s short s -void circfs short s short s short s -void circs short s short s short s -void cmovs short s short s short s -void draws short s short s short s -void moves short s short s short s -void pdrs short s short s short s -void pmvs short s short s short s -void pnts short s short s short s -void rdrs short s short s short s -void rmvs short s short s short s -void rpdrs short s short s short s -void rpmvs short s short s short s -void xfpts short s short s short s -void curorigin short s short s short s -void cyclemap short s short s short s -# -void patch float s[4*4] float s[4*4] float s[4*4] -void splf long s float s[3*arg1] u_short s[arg1] -void splf2 long s float s[2*arg1] u_short s[arg1] -void splfi long s long s[3*arg1] u_short s[arg1] -void splf2i long s long s[2*arg1] u_short s[arg1] -void splfs long s short s[3*arg1] u_short s[arg1] -void splf2s long s short s[2*arg1] u_short s[arg1] -###void defpattern short s short s u_short s[arg2*arg2/16] -# -void rpatch float s[4*4] float s[4*4] float s[4*4] float s[4*4] -# -# routines that send 4 floats -# -void ortho2 float s float s float s float s -void rect float s float s float s float s -void rectf float s float s float s float s -void xfpt4 float s float s float s float s -# -void textport short s short s short s short s -void mapcolor short s short s short s short s -void scrmask short s short s short s short s -void setvaluator short s short s short s short s -void viewport short s short s short s short s -void shaderange short s short s short s short s -void xfpt4s short s short s short s short s -void rectfi long s long s long s long s -void recti long s long s long s long s -void xfpt4i long s long s long s long s -void prefposition long s long s long s long s -# -void arc float s float s float s short s short s -void arcf float s float s float s short s short s -void arcfi long s long s long s short s short s -void arci long s long s long s short s short s -# -void bbox2 short s short s float s float s float s float s -void bbox2i short s short s long s long s long s long s -void bbox2s short s short s short s short s short s short s -void blink short s short s short s short s short s -void ortho float s float s float s float s float s float s -void window float s float s float s float s float s float s -void lookat float s float s float s float s float s float s short s -# -void perspective short s float s float s float s -void polarview float s short s short s short s -# XXX getichararray not supported -#void writeRGB short s char s[arg1] char s[arg1] char s[arg1] -# -void arcfs short s short s short s short s short s -void arcs short s short s short s short s short s -void rectcopy short s short s short s short s short s short s -if !solaris void RGBcursor short s short s short s short s short s short s short s -# -long getbutton short s -long getcmmode -long getlsbackup -long getresetls -long getdcm -long getzbuffer -long ismex -long isobj long s -long isqueued short s -long istag long s -# -long genobj -long gentag -long getbuffer -long getcolor -long getdisplaymode -long getfont -long getheight -long gethitcode -long getlstyle -long getlwidth -long getmap -long getplanes -long getwritemask -long qtest -long getlsrepeat -long getmonitor -long getopenobj -long getpattern -long winget -long winattach -long getothermonitor -long newpup -# -long getvaluator short s -void winset long s -long dopup long s -void getdepth short r short r -void getcpos short r short r -void getsize long r long r -void getorigin long r long r -void getviewport short r short r short r short r -if !solaris void gettp short r short r short r short r -void getgpos float r float r float r float r -void winposition long s long s long s long s -void gRGBcolor short r short r short r -void gRGBmask short r short r short r -void getscrmask short r short r short r short r -###void gRGBcursor short r short r short r short r short r short r short r short r -void getmcolor short s short r short r short r -void mapw long s short s short s float r float r float r float r float r float r -void mapw2 long s short s short s float r float r -###void defrasterfont short s short s short s Fontchar s[arg3] short s short s[4*arg5] -###long qread short r -void getcursor short r u_short r u_short r long r -# -# For these we receive arrays of stuff -# -###void getdev long s short s[arg1] short r[arg1] -#XXX not generated correctly yet -#void getmatrix float r[16] -###long readpixels short s short r[retval] -###long readRGB short s char r[retval] char r[retval] char r[retval] -###long blkqread short s short r[arg1] -# -# New 4D routines -# -void cmode -void concave long s -void curstype long s -void drawmode long s -void gammaramp short s[256] short s[256] short s[256] -long getbackface -long getdescender -long getdrawmode -long getmmode -long getsm -long getvideo long s -void imakebackground -void lmbind short s short s -void lmdef long s long s long s float s[arg3] -void mmode long s -void normal float s[3] -void overlay long s -void RGBrange short s short s short s short s short s short s short s short s -if !solaris void setvideo long s long s -void shademodel long s -void underlay long s -# -# New Personal Iris/GT Routines -# -void bgnclosedline -void bgnline -void bgnpoint -void bgnpolygon -void bgnsurface -void bgntmesh -void bgntrim -void endclosedline -void endline -void endpoint -void endpolygon -void endsurface -void endtmesh -void endtrim -void blendfunction long s long s -void c3f float s[3] -void c3i long s[3] -void c3s short s[3] -void c4f float s[4] -void c4i long s[4] -void c4s short s[4] -void colorf float s -void cpack long s -void czclear long s long s -void dglclose long s -long dglopen char *s long s -long getgdesc long s -void getnurbsproperty long s float r -void glcompat long s long s -void iconsize long s long s -void icontitle char *s -void lRGBrange short s short s short s short s short s short s long s long s -void linesmooth long s -void lmcolor long s -void logicop long s -###long lrectread short s short s short s short s long r[retval] -###void lrectwrite short s short s short s short s long s[(arg2-arg1+1)*(arg4-arg3+1)] -### Now manual, with string last arg -###long rectread short s short s short s short s short r[retval] -###void rectwrite short s short s short s short s short s[(arg2-arg1+1)*(arg4-arg3+1)] -void lsetdepth long s long s -void lshaderange short s short s long s long s -void n3f float s[3] -void noborder -void pntsmooth long s -void readsource long s -void rectzoom float s float s -void sbox float s float s float s float s -void sboxi long s long s long s long s -void sboxs short s short s short s short s -void sboxf float s float s float s float s -void sboxfi long s long s long s long s -void sboxfs short s short s short s short s -void setnurbsproperty long s float s -void setpup long s long s long s -void smoothline long s -void subpixel long s -void swaptmesh -long swinopen long s -void v2f float s[2] -void v2i long s[2] -void v2s short s[2] -void v3f float s[3] -void v3i long s[3] -void v3s short s[3] -void v4f float s[4] -void v4i long s[4] -void v4s short s[4] -void videocmd long s -long windepth long s -void wmpack long s -void zdraw long s -void zfunction long s -void zsource long s -void zwritemask long s -# -# uses doubles -# -void v2d double s[2] -void v3d double s[3] -void v4d double s[4] -# -# Why isn't this here? -# -void pixmode long s long s -# -# New in IRIX 4.0 -# -long qgetfd -void dither long s diff --git a/Objects/abstract.c b/Objects/abstract.c index dc66893..20e1711 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2137,8 +2137,10 @@ PyObject_IsInstance(PyObject *inst, PyObject *cls) if (checker != NULL) { PyObject *res; int ok = -1; - if (Py_EnterRecursiveCall(" in __instancecheck__")) + if (Py_EnterRecursiveCall(" in __instancecheck__")) { + Py_DECREF(checker); return ok; + } res = PyObject_CallFunctionObjArgs(checker, inst, NULL); Py_LeaveRecursiveCall(); Py_DECREF(checker); -- cgit v0.12