]> granicus.if.org Git - python/commitdiff
Renamed Grandly (I think).
authorRoger E. Masse <rmasse@newcnri.cnri.reston.va.us>
Mon, 9 Dec 1996 20:10:36 +0000 (20:10 +0000)
committerRoger E. Masse <rmasse@newcnri.cnri.reston.va.us>
Mon, 9 Dec 1996 20:10:36 +0000 (20:10 +0000)
Modules/arraymodule.c

index 19ffe478a8920ac3f34a00547f1ff4de417e53d1..194d76b6a71af1455839b3d4ae62d7a83c3eea2b 100644 (file)
@@ -34,7 +34,7 @@ PERFORMANCE OF THIS SOFTWARE.
 /* An array is a uniform list -- all items have the same type.
    The item type is restricted to simple C types like int or float */
 
-#include "allobjects.h"
+#include "Python.h"
 #include "modsupport.h"
 #include "ceval.h"
 #ifdef STDC_HEADERS
@@ -48,55 +48,55 @@ struct arrayobject; /* Forward */
 struct arraydescr {
        int typecode;
        int itemsize;
-       object * (*getitem) FPROTO((struct arrayobject *, int));
-       int (*setitem) FPROTO((struct arrayobject *, int, object *));
+       PyObject * (*getitem) Py_FPROTO((struct arrayobject *, int));
+       int (*setitem) Py_FPROTO((struct arrayobject *, int, PyObject *));
 };
 
 typedef struct arrayobject {
-       OB_VARHEAD
+       PyObject_VAR_HEAD
        char *ob_item;
        struct arraydescr *ob_descr;
 } arrayobject;
 
-staticforward typeobject Arraytype;
+staticforward PyTypeObject Arraytype;
 
 #define is_arrayobject(op) ((op)->ob_type == &Arraytype)
 
 /* Forward */
-static object *newarrayobject PROTO((int, struct arraydescr *));
+static PyObject *newarrayobject Py_PROTO((int, struct arraydescr *));
 #if 0
-static int getarraysize PROTO((object *));
+static int getarraysize Py_PROTO((PyObject *));
 #endif
-static object *getarrayitem PROTO((object *, int));
-static int setarrayitem PROTO((object *, int, object *));
+static PyObject *getarrayitem Py_PROTO((PyObject *, int));
+static int setarrayitem Py_PROTO((PyObject *, int, PyObject *));
 #if 0
-static int insarrayitem PROTO((object *, int, object *));
-static int addarrayitem PROTO((object *, object *));
+static int insarrayitem Py_PROTO((PyObject *, int, PyObject *));
+static int addarrayitem Py_PROTO((PyObject *, PyObject *));
 #endif
 
-static object *
+static PyObject *
 c_getitem(ap, i)
        arrayobject *ap;
        int i;
 {
-       return newsizedstringobject(&((char *)ap->ob_item)[i], 1);
+       return PyString_FromStringAndSize(&((char *)ap->ob_item)[i], 1);
 }
 
 static int
 c_setitem(ap, i, v)
        arrayobject *ap;
        int i;
-       object *v;
+       PyObject *v;
 {
        char x;
-       if (!getargs(v, "c;array item must be char", &x))
+       if (!PyArg_Parse(v, "c;array item must be char", &x))
                return -1;
        if (i >= 0)
                     ((char *)ap->ob_item)[i] = x;
        return 0;
 }
 
-static object *
+static PyObject *
 b_getitem(ap, i)
        arrayobject *ap;
        int i;
@@ -104,127 +104,127 @@ b_getitem(ap, i)
        long x = ((char *)ap->ob_item)[i];
        if (x >= 128)
                x -= 256;
-       return newintobject(x);
+       return PyInt_FromLong(x);
 }
 
 static int
 b_setitem(ap, i, v)
        arrayobject *ap;
        int i;
-       object *v;
+       PyObject *v;
 {
        char x;
-       if (!getargs(v, "b;array item must be integer", &x))
+       if (!PyArg_Parse(v, "b;array item must be integer", &x))
                return -1;
        if (i >= 0)
                     ((char *)ap->ob_item)[i] = x;
        return 0;
 }
 
-static object *
+static PyObject *
 h_getitem(ap, i)
        arrayobject *ap;
        int i;
 {
-       return newintobject((long) ((short *)ap->ob_item)[i]);
+       return PyInt_FromLong((long) ((short *)ap->ob_item)[i]);
 }
 
 static int
 h_setitem(ap, i, v)
        arrayobject *ap;
        int i;
-       object *v;
+       PyObject *v;
 {
        short x;
-       if (!getargs(v, "h;array item must be integer", &x))
+       if (!PyArg_Parse(v, "h;array item must be integer", &x))
                return -1;
        if (i >= 0)
                     ((short *)ap->ob_item)[i] = x;
        return 0;
 }
 
-static object *
+static PyObject *
 i_getitem(ap, i)
        arrayobject *ap;
        int i;
 {
-       return newintobject((long) ((int *)ap->ob_item)[i]);
+       return PyInt_FromLong((long) ((int *)ap->ob_item)[i]);
 }
 
 static int
 i_setitem(ap, i, v)
        arrayobject *ap;
        int i;
-       object *v;
+       PyObject *v;
 {
        int x;
-       if (!getargs(v, "i;array item must be integer", &x))
+       if (!PyArg_Parse(v, "i;array item must be integer", &x))
                return -1;
        if (i >= 0)
                     ((int *)ap->ob_item)[i] = x;
        return 0;
 }
 
-static object *
+static PyObject *
 l_getitem(ap, i)
        arrayobject *ap;
        int i;
 {
-       return newintobject(((long *)ap->ob_item)[i]);
+       return PyInt_FromLong(((long *)ap->ob_item)[i]);
 }
 
 static int
 l_setitem(ap, i, v)
        arrayobject *ap;
        int i;
-       object *v;
+       PyObject *v;
 {
        long x;
-       if (!getargs(v, "l;array item must be integer", &x))
+       if (!PyArg_Parse(v, "l;array item must be integer", &x))
                return -1;
        if (i >= 0)
                     ((long *)ap->ob_item)[i] = x;
        return 0;
 }
 
-static object *
+static PyObject *
 f_getitem(ap, i)
        arrayobject *ap;
        int i;
 {
-       return newfloatobject((double) ((float *)ap->ob_item)[i]);
+       return PyFloat_FromDouble((double) ((float *)ap->ob_item)[i]);
 }
 
 static int
 f_setitem(ap, i, v)
        arrayobject *ap;
        int i;
-       object *v;
+       PyObject *v;
 {
        float x;
-       if (!getargs(v, "f;array item must be float", &x))
+       if (!PyArg_Parse(v, "f;array item must be float", &x))
                return -1;
        if (i >= 0)
                     ((float *)ap->ob_item)[i] = x;
        return 0;
 }
 
-static object *
+static PyObject *
 d_getitem(ap, i)
        arrayobject *ap;
        int i;
 {
-       return newfloatobject(((double *)ap->ob_item)[i]);
+       return PyFloat_FromDouble(((double *)ap->ob_item)[i]);
 }
 
 static int
 d_setitem(ap, i, v)
        arrayobject *ap;
        int i;
-       object *v;
+       PyObject *v;
 {
        double x;
-       if (!getargs(v, "d;array item must be float", &x))
+       if (!PyArg_Parse(v, "d;array item must be float", &x))
                return -1;
        if (i >= 0)
                     ((double *)ap->ob_item)[i] = x;
@@ -245,7 +245,7 @@ static struct arraydescr descriptors[] = {
 /* If we ever allow items larger than double, we must change reverse()! */
        
 
-static object *
+static PyObject *
 newarrayobject(size, descr)
        int size;
        struct arraydescr *descr;
@@ -253,61 +253,61 @@ newarrayobject(size, descr)
        arrayobject *op;
        size_t nbytes;
        if (size < 0) {
-               err_badcall();
+               PyErr_BadInternalCall();
                return NULL;
        }
        nbytes = size * descr->itemsize;
        /* Check for overflow */
        if (nbytes / descr->itemsize != size) {
-               return err_nomem();
+               return PyErr_NoMemory();
        }
-       op = NEW(arrayobject, 1);
+       op = PyMem_NEW(arrayobject, 1);
        if (op == NULL) {
-               return err_nomem();
+               return PyErr_NoMemory();
        }
        if (size <= 0) {
                op->ob_item = NULL;
        }
        else {
-               op->ob_item = NEW(char, nbytes);
+               op->ob_item = PyMem_NEW(char, nbytes);
                if (op->ob_item == NULL) {
-                       DEL(op);
-                       return err_nomem();
+                       PyMem_DEL(op);
+                       return PyErr_NoMemory();
                }
        }
        op->ob_type = &Arraytype;
        op->ob_size = size;
        op->ob_descr = descr;
-       NEWREF(op);
-       return (object *) op;
+       _Py_NewReference(op);
+       return (PyObject *) op;
 }
 
 #if 0
 static int
 getarraysize(op)
-       object *op;
+       PyObject *op;
 {
        if (!is_arrayobject(op)) {
-               err_badcall();
+               PyErr_BadInternalCall();
                return -1;
        }
        return ((arrayobject *)op) -> ob_size;
 }
 #endif
 
-static object *
+static PyObject *
 getarrayitem(op, i)
-       object *op;
+       PyObject *op;
        int i;
 {
        register arrayobject *ap;
        if (!is_arrayobject(op)) {
-               err_badcall();
+               PyErr_BadInternalCall();
                return NULL;
        }
        ap = (arrayobject *)op;
        if (i < 0 || i >= ap->ob_size) {
-               err_setstr(IndexError, "array index out of range");
+               PyErr_SetString(PyExc_IndexError, "array index out of range");
                return NULL;
        }
        return (*ap->ob_descr->getitem)(ap, i);
@@ -317,19 +317,19 @@ static int
 ins1(self, where, v)
        arrayobject *self;
        int where;
-       object *v;
+       PyObject *v;
 {
        char *items;
        if (v == NULL) {
-               err_badcall();
+               PyErr_BadInternalCall();
                return -1;
        }
        if ((*self->ob_descr->setitem)(self, -1, v) < 0)
                return -1;
        items = self->ob_item;
-       RESIZE(items, char, (self->ob_size+1) * self->ob_descr->itemsize);
+       PyMem_RESIZE(items, char, (self->ob_size+1) * self->ob_descr->itemsize);
        if (items == NULL) {
-               err_nomem();
+               PyErr_NoMemory();
                return -1;
        }
        if (where < 0)
@@ -347,12 +347,12 @@ ins1(self, where, v)
 #if 0
 static int
 insarrayitem(op, where, newitem)
-       object *op;
+       PyObject *op;
        int where;
-       object *newitem;
+       PyObject *newitem;
 {
        if (!is_arrayobject(op)) {
-               err_badcall();
+               PyErr_BadInternalCall();
                return -1;
        }
        return ins1((arrayobject *)op, where, newitem);
@@ -360,11 +360,11 @@ insarrayitem(op, where, newitem)
 
 static int
 addarrayitem(op, newitem)
-       object *op;
-       object *newitem;
+       PyObject *op;
+       PyObject *newitem;
 {
        if (!is_arrayobject(op)) {
-               err_badcall();
+               PyErr_BadInternalCall();
                return -1;
        }
        return ins1((arrayobject *)op,
@@ -379,8 +379,8 @@ array_dealloc(op)
        arrayobject *op;
 {
        if (op->ob_item != NULL)
-               DEL(op->ob_item);
-       DEL(op);
+               PyMem_DEL(op->ob_item);
+       PyMem_DEL(op);
 }
 
 static int
@@ -390,18 +390,18 @@ array_compare(v, w)
        int len = (v->ob_size < w->ob_size) ? v->ob_size : w->ob_size;
        int i;
        for (i = 0; i < len; i++) {
-               object *ai, *bi;
+               PyObject *ai, *bi;
                int cmp;
-               ai = getarrayitem((object *)v, i);
-               bi = getarrayitem((object *)w, i);
+               ai = getarrayitem((PyObject *)v, i);
+               bi = getarrayitem((PyObject *)w, i);
                if (ai && bi)
-                       cmp = cmpobject(ai, bi);
+                       cmp = PyObject_Compare(ai, bi);
                else
                        cmp = -1;
-               XDECREF(ai);
-               XDECREF(bi);
+               Py_XDECREF(ai);
+               Py_XDECREF(bi);
                if (cmp != 0) {
-                       err_clear(); /* XXX Can't report errors here */
+                       PyErr_Clear(); /* XXX Can't report errors here */
                        return cmp;
                }
        }
@@ -415,19 +415,19 @@ array_length(a)
        return a->ob_size;
 }
 
-static object *
+static PyObject *
 array_item(a, i)
        arrayobject *a;
        int i;
 {
        if (i < 0 || i >= a->ob_size) {
-               err_setstr(IndexError, "array index out of range");
+               PyErr_SetString(PyExc_IndexError, "array index out of range");
                return NULL;
        }
-       return getarrayitem((object *)a, i);
+       return getarrayitem((PyObject *)a, i);
 }
 
-static object *
+static PyObject *
 array_slice(a, ilow, ihigh)
        arrayobject *a;
        int ilow, ihigh;
@@ -448,23 +448,23 @@ array_slice(a, ilow, ihigh)
                return NULL;
        memcpy(np->ob_item, a->ob_item + ilow * a->ob_descr->itemsize,
               (ihigh-ilow) * a->ob_descr->itemsize);
-       return (object *)np;
+       return (PyObject *)np;
 }
 
-static object *
+static PyObject *
 array_concat(a, bb)
        arrayobject *a;
-       object *bb;
+       PyObject *bb;
 {
        int size;
        arrayobject *np;
        if (!is_arrayobject(bb)) {
-               err_badarg();
+               PyErr_BadArgument();
                return NULL;
        }
 #define b ((arrayobject *)bb)
        if (a->ob_descr != b->ob_descr) {
-               err_badarg();
+               PyErr_BadArgument();
                return NULL;
        }
        size = a->ob_size + b->ob_size;
@@ -475,11 +475,11 @@ array_concat(a, bb)
        memcpy(np->ob_item, a->ob_item, a->ob_size*a->ob_descr->itemsize);
        memcpy(np->ob_item + a->ob_size*a->ob_descr->itemsize,
               b->ob_item, b->ob_size*b->ob_descr->itemsize);
-       return (object *)np;
+       return (PyObject *)np;
 #undef b
 }
 
-static object *
+static PyObject *
 array_repeat(a, n)
        arrayobject *a;
        int n;
@@ -501,14 +501,14 @@ array_repeat(a, n)
                memcpy(p, a->ob_item, nbytes);
                p += nbytes;
        }
-       return (object *) np;
+       return (PyObject *) np;
 }
 
 static int
 array_ass_slice(a, ilow, ihigh, v)
        arrayobject *a;
        int ilow, ihigh;
-       object *v;
+       PyObject *v;
 {
        char *item;
        int n; /* Size of replacement array */
@@ -523,16 +523,16 @@ array_ass_slice(a, ilow, ihigh, v)
                        int ret;
                        v = array_slice(b, 0, n);
                        ret = array_ass_slice(a, ilow, ihigh, v);
-                       DECREF(v);
+                       Py_DECREF(v);
                        return ret;
                }
                if (b->ob_descr != a->ob_descr) {
-                       err_badarg();
+                       PyErr_BadArgument();
                        return -1;
                }
        }
        else {
-               err_badarg();
+               PyErr_BadArgument();
                return -1;
        }
        if (ilow < 0)
@@ -552,14 +552,15 @@ array_ass_slice(a, ilow, ihigh, v)
                        item + ihigh*a->ob_descr->itemsize,
                        (a->ob_size-ihigh)*a->ob_descr->itemsize);
                a->ob_size += d;
-               RESIZE(item, char, a->ob_size*a->ob_descr->itemsize);
+               PyMem_RESIZE(item, char, a->ob_size*a->ob_descr->itemsize);
                                                /* Can't fail */
                a->ob_item = item;
        }
        else if (d > 0) { /* Insert d items */
-               RESIZE(item, char, (a->ob_size + d)*a->ob_descr->itemsize);
+               PyMem_RESIZE(item, char,
+                            (a->ob_size + d)*a->ob_descr->itemsize);
                if (item == NULL) {
-                       err_nomem();
+                       PyErr_NoMemory();
                        return -1;
                }
                memmove(item + (ihigh+d)*a->ob_descr->itemsize,
@@ -579,10 +580,11 @@ static int
 array_ass_item(a, i, v)
        arrayobject *a;
        int i;
-       object *v;
+       PyObject *v;
 {
        if (i < 0 || i >= a->ob_size) {
-               err_setstr(IndexError, "array assignment index out of range");
+               PyErr_SetString(PyExc_IndexError,
+                                "array assignment index out of range");
                return -1;
        }
        if (v == NULL)
@@ -592,56 +594,56 @@ array_ass_item(a, i, v)
 
 static int
 setarrayitem(a, i, v)
-       object *a;
+       PyObject *a;
        int i;
-       object *v;
+       PyObject *v;
 {
        if (!is_arrayobject(a)) {
-               err_badcall();
+               PyErr_BadInternalCall();
                return -1;
        }
        return array_ass_item((arrayobject *)a, i, v);
 }
 
-static object *
+static PyObject *
 ins(self, where, v)
        arrayobject *self;
        int where;
-       object *v;
+       PyObject *v;
 {
        if (ins1(self, where, v) != 0)
                return NULL;
-       INCREF(None);
-       return None;
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
-static object *
+static PyObject *
 array_insert(self, args)
        arrayobject *self;
-       object *args;
+       PyObject *args;
 {
        int i;
-       object *v;
-       if (!getargs(args, "(iO)", &i, &v))
+       PyObject *v;
+       if (!PyArg_Parse(args, "(iO)", &i, &v))
                return NULL;
        return ins(self, i, v);
 }
 
-static object *
+static PyObject *
 array_append(self, args)
        arrayobject *self;
-       object *args;
+       PyObject *args;
 {
-       object *v;
-       if (!getargs(args, "O", &v))
+       PyObject *v;
+       if (!PyArg_Parse(args, "O", &v))
                return NULL;
        return ins(self, (int) self->ob_size, v);
 }
 
-static object *
+static PyObject *
 array_byteswap(self, args)
        arrayobject *self;
-       object *args;
+       PyObject *args;
 {
        char *p;
        int i;
@@ -682,25 +684,25 @@ array_byteswap(self, args)
                }
                break;
        default:
-               err_setstr(RuntimeError,
+               PyErr_SetString(PyExc_RuntimeError,
                           "don't know how to byteswap this array type");
                return NULL;
        }
-       INCREF(None);
-       return None;
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
-static object *
+static PyObject *
 array_reverse(self, args)
        arrayobject *self;
-       object *args;
+       PyObject *args;
 {
        register int itemsize = self->ob_descr->itemsize;
        register char *p, *q;
        char tmp[sizeof(double)]; /* Assume that's the max item size */
 
        if (args != NULL) {
-               err_badarg();
+               PyErr_BadArgument();
                return NULL;
        }
 
@@ -715,103 +717,103 @@ array_reverse(self, args)
                }
        }
        
-       INCREF(None);
-       return None;
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
 /* The following routines were adapted from listobject.c but not converted.
    To make them work you will have to work! */
 
 #if 0
-static object *
+static PyObject *
 array_index(self, args)
        arrayobject *self;
-       object *args;
+       PyObject *args;
 {
        int i;
        
        if (args == NULL) {
-               err_badarg();
+               PyErr_BadArgument();
                return NULL;
        }
        for (i = 0; i < self->ob_size; i++) {
-               if (cmpobject(self->ob_item[i], args) == 0)
-                       return newintobject((long)i);
+               if (PyObject_Compare(self->ob_item[i], args) == 0)
+                       return PyInt_FromLong((long)i);
        }
-       err_setstr(ValueError, "array.index(x): x not in array");
+       PyErr_SetString(PyExc_ValueError, "array.index(x): x not in array");
        return NULL;
 }
 #endif
 
 #if 0
-static object *
+static PyObject *
 array_count(self, args)
        arrayobject *self;
-       object *args;
+       PyObject *args;
 {
        int count = 0;
        int i;
        
        if (args == NULL) {
-               err_badarg();
+               PyErr_BadArgument();
                return NULL;
        }
        for (i = 0; i < self->ob_size; i++) {
-               if (cmpobject(self->ob_item[i], args) == 0)
+               if (PyObject_Compare(self->ob_item[i], args) == 0)
                        count++;
        }
-       return newintobject((long)count);
+       return PyInt_FromLong((long)count);
 }
 #endif
 
 #if 0
-static object *
+static PyObject *
 array_remove(self, args)
        arrayobject *self;
-       object *args;
+       PyObject *args;
 {
        int i;
        
        if (args == NULL) {
-               err_badarg();
+               PyErr_BadArgument();
                return NULL;
        }
        for (i = 0; i < self->ob_size; i++) {
-               if (cmpobject(self->ob_item[i], args) == 0) {
-                       if (array_ass_slice(self, i, i+1, (object *)NULL) != 0)
+               if (PyObject_Compare(self->ob_item[i], args) == 0) {
+                       if (array_ass_slice(self, i, i+1, (PyObject *)NULL) != 0)
                                return NULL;
-                       INCREF(None);
-                       return None;
+                       Py_INCREF(Py_None);
+                       return Py_None;
                }
                        
        }
-       err_setstr(ValueError, "array.remove(x): x not in array");
+       PyErr_SetString(PyExc_ValueError, "array.remove(x): x not in array");
        return NULL;
 }
 #endif
 
-static object *
+static PyObject *
 array_fromfile(self, args)
        arrayobject *self;
-       object *args;
+       PyObject *args;
 {
-       object *f;
+       PyObject *f;
        int n;
        FILE *fp;
-       if (!getargs(args, "(Oi)", &f, &n))
+       if (!PyArg_Parse(args, "(Oi)", &f, &n))
                return NULL;
-       fp = getfilefile(f);
+       fp = PyFile_AsFile(f);
        if (fp == NULL) {
-               err_setstr(TypeError, "arg1 must be open file");
+               PyErr_SetString(PyExc_TypeError, "arg1 must be open file");
                return NULL;
        }
        if (n > 0) {
                char *item = self->ob_item;
                int itemsize = self->ob_descr->itemsize;
                int nread;
-               RESIZE(item, char, (self->ob_size + n) * itemsize);
+               PyMem_RESIZE(item, char, (self->ob_size + n) * itemsize);
                if (item == NULL) {
-                       err_nomem();
+                       PyErr_NoMemory();
                        return NULL;
                }
                self->ob_item = item;
@@ -820,189 +822,191 @@ array_fromfile(self, args)
                              itemsize, n, fp);
                if (nread < n) {
                        self->ob_size -= (n - nread);
-                       RESIZE(item, char, self->ob_size*itemsize);
+                       PyMem_RESIZE(item, char, self->ob_size*itemsize);
                        self->ob_item = item;
-                       err_setstr(EOFError, "not enough items in file");
+                       PyErr_SetString(PyExc_EOFError,
+                                        "not enough items in file");
                        return NULL;
                }
        }
-       INCREF(None);
-       return None;
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
-static object *
+static PyObject *
 array_tofile(self, args)
        arrayobject *self;
-       object *args;
+       PyObject *args;
 {
-       object *f;
+       PyObject *f;
        FILE *fp;
-       if (!getargs(args, "O", &f))
+       if (!PyArg_Parse(args, "O", &f))
                return NULL;
-       fp = getfilefile(f);
+       fp = PyFile_AsFile(f);
        if (fp == NULL) {
-               err_setstr(TypeError, "arg must be open file");
+               PyErr_SetString(PyExc_TypeError, "arg must be open file");
                return NULL;
        }
        if (self->ob_size > 0) {
                if (fwrite(self->ob_item, self->ob_descr->itemsize,
                           self->ob_size, fp) != self->ob_size) {
-                       err_errno(IOError);
+                       PyErr_SetFromErrno(PyExc_IOError);
                        clearerr(fp);
                        return NULL;
                }
        }
-       INCREF(None);
-       return None;
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
-static object *
+static PyObject *
 array_fromlist(self, args)
        arrayobject *self;
-       object *args;
+       PyObject *args;
 {
        int n;
-       object *list;
+       PyObject *list;
        int itemsize = self->ob_descr->itemsize;
-       if (!getargs(args, "O", &list))
+       if (!PyArg_Parse(args, "O", &list))
                return NULL;
-       if (!is_listobject(list)) {
-               err_setstr(TypeError, "arg must be list");
+       if (!PyList_Check(list)) {
+               PyErr_SetString(PyExc_TypeError, "arg must be list");
                return NULL;
        }
-       n = getlistsize(list);
+       n = PyList_Size(list);
        if (n > 0) {
                char *item = self->ob_item;
                int i;
-               RESIZE(item, char, (self->ob_size + n) * itemsize);
+               PyMem_RESIZE(item, char, (self->ob_size + n) * itemsize);
                if (item == NULL) {
-                       err_nomem();
+                       PyErr_NoMemory();
                        return NULL;
                }
                self->ob_item = item;
                self->ob_size += n;
                for (i = 0; i < n; i++) {
-                       object *v = getlistitem(list, i);
+                       PyObject *v = PyList_GetItem(list, i);
                        if ((*self->ob_descr->setitem)(self,
                                        self->ob_size - n + i, v) != 0) {
                                self->ob_size -= n;
-                               RESIZE(item, char, self->ob_size * itemsize);
+                               PyMem_RESIZE(item, char,
+                                                 self->ob_size * itemsize);
                                self->ob_item = item;
                                return NULL;
                        }
                }
        }
-       INCREF(None);
-       return None;
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
-static object *
+static PyObject *
 array_tolist(self, args)
        arrayobject *self;
-       object *args;
+       PyObject *args;
 {
-       object *list = newlistobject(self->ob_size);
+       PyObject *list = PyList_New(self->ob_size);
        int i;
        if (list == NULL)
                return NULL;
        for (i = 0; i < self->ob_size; i++) {
-               object *v = getarrayitem((object *)self, i);
+               PyObject *v = getarrayitem((PyObject *)self, i);
                if (v == NULL) {
-                       DECREF(list);
+                       Py_DECREF(list);
                        return NULL;
                }
-               setlistitem(list, i, v);
+               PyList_SetItem(list, i, v);
        }
        return list;
 }
 
-static object *
+static PyObject *
 array_fromstring(self, args)
        arrayobject *self;
-       object *args;
+       PyObject *args;
 {
        char *str;
        int n;
        int itemsize = self->ob_descr->itemsize;
-       if (!getargs(args, "s#", &str, &n))
+       if (!PyArg_Parse(args, "s#", &str, &n))
                return NULL;
        if (n % itemsize != 0) {
-               err_setstr(ValueError,
+               PyErr_SetString(PyExc_ValueError,
                           "string length not a multiple of item size");
                return NULL;
        }
        n = n / itemsize;
        if (n > 0) {
                char *item = self->ob_item;
-               RESIZE(item, char, (self->ob_size + n) * itemsize);
+               PyMem_RESIZE(item, char, (self->ob_size + n) * itemsize);
                if (item == NULL) {
-                       err_nomem();
+                       PyErr_NoMemory();
                        return NULL;
                }
                self->ob_item = item;
                self->ob_size += n;
                memcpy(item + (self->ob_size - n) * itemsize, str, itemsize*n);
        }
-       INCREF(None);
-       return None;
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
-static object *
+static PyObject *
 array_tostring(self, args)
        arrayobject *self;
-       object *args;
+       PyObject *args;
 {
-       if (!getargs(args, ""))
+       if (!PyArg_Parse(args, ""))
                return NULL;
-       return newsizedstringobject(self->ob_item,
+       return PyString_FromStringAndSize(self->ob_item,
                                    self->ob_size * self->ob_descr->itemsize);
 }
 
-static struct methodlist array_methods[] = {
-       {"append",      (method)array_append},
-       {"byteswap",    (method)array_byteswap},
+static PyMethodDef array_methods[] = {
+       {"append",      (PyCFunction)array_append},
+       {"byteswap",    (PyCFunction)array_byteswap},
 /*     {"count",       (method)array_count},*/
-       {"fromfile",    (method)array_fromfile},
-       {"fromlist",    (method)array_fromlist},
-       {"fromstring",  (method)array_fromstring},
+       {"fromfile",    (PyCFunction)array_fromfile},
+       {"fromlist",    (PyCFunction)array_fromlist},
+       {"fromstring",  (PyCFunction)array_fromstring},
 /*     {"index",       (method)array_index},*/
-       {"insert",      (method)array_insert},
-       {"read",        (method)array_fromfile},
+       {"insert",      (PyCFunction)array_insert},
+       {"read",        (PyCFunction)array_fromfile},
 /*     {"remove",      (method)array_remove},*/
-       {"reverse",     (method)array_reverse},
+       {"reverse",     (PyCFunction)array_reverse},
 /*     {"sort",        (method)array_sort},*/
-       {"tofile",      (method)array_tofile},
-       {"tolist",      (method)array_tolist},
-       {"tostring",    (method)array_tostring},
-       {"write",       (method)array_tofile},
+       {"tofile",      (PyCFunction)array_tofile},
+       {"tolist",      (PyCFunction)array_tolist},
+       {"tostring",    (PyCFunction)array_tostring},
+       {"write",       (PyCFunction)array_tofile},
        {NULL,          NULL}           /* sentinel */
 };
 
-static object *
+static PyObject *
 array_getattr(a, name)
        arrayobject *a;
        char *name;
 {
        if (strcmp(name, "typecode") == 0) {
                char tc = a->ob_descr->typecode;
-               return newsizedstringobject(&tc, 1);
+               return PyString_FromStringAndSize(&tc, 1);
        }
        if (strcmp(name, "itemsize") == 0) {
-               return newintobject((long)a->ob_descr->itemsize);
+               return PyInt_FromLong((long)a->ob_descr->itemsize);
        }
        if (strcmp(name, "__members__") == 0) {
-               object *list = newlistobject(2);
+               PyObject *list = PyList_New(2);
                if (list) {
-                       setlistitem(list, 0, newstringobject("typecode"));
-                       setlistitem(list, 1, newstringobject("itemsize"));
-                       if (err_occurred()) {
-                               DECREF(list);
+                       PyList_SetItem(list, 0, PyString_FromString("typecode"));
+                       PyList_SetItem(list, 1, PyString_FromString("itemsize"));
+                       if (PyErr_Occurred()) {
+                               Py_DECREF(list);
                                list = NULL;
                        }
                }
                return list;
        }
-       return findmethod(array_methods, (object *)a, name);
+       return Py_FindMethod(array_methods, (PyObject *)a, name);
 }
 
 static int
@@ -1013,7 +1017,7 @@ array_print(a, fp, flags)
 {
        int ok = 0;
        int i, len;
-       object *v;
+       PyObject *v;
        len = a->ob_size;
        if (len == 0) {
                fprintf(fp, "array('%c')", a->ob_descr->typecode);
@@ -1021,9 +1025,9 @@ array_print(a, fp, flags)
        }
        if (a->ob_descr->typecode == 'c') {
                fprintf(fp, "array('c', ");
-               v = array_tostring(a, (object *)NULL);
-               ok = printobject(v, fp, 0);
-               XDECREF(v);
+               v = array_tostring(a, (PyObject *)NULL);
+               ok = PyObject_Print(v, fp, 0);
+               Py_XDECREF(v);
                fprintf(fp, ")");
                return ok;
        }
@@ -1032,70 +1036,70 @@ array_print(a, fp, flags)
                if (i > 0)
                        fprintf(fp, ", ");
                v = (a->ob_descr->getitem)(a, i);
-               ok = printobject(v, fp, 0);
-               XDECREF(v);
+               ok = PyObject_Print(v, fp, 0);
+               Py_XDECREF(v);
        }
        fprintf(fp, "])");
        return ok;
 }
 
-static object *
+static PyObject *
 array_repr(a)
        arrayobject *a;
 {
        char buf[256];
-       object *s, *t, *comma, *v;
+       PyObject *s, *t, *comma, *v;
        int i, len;
        len = a->ob_size;
        if (len == 0) {
                sprintf(buf, "array('%c')", a->ob_descr->typecode);
-               return newstringobject(buf);
+               return PyString_FromString(buf);
        }
        if (a->ob_descr->typecode == 'c') {
                sprintf(buf, "array('c', ");
-               s = newstringobject(buf);
-               v = array_tostring(a, (object *)NULL);
-               t = reprobject(v);
-               XDECREF(v);
-               joinstring_decref(&s, t);
-               joinstring_decref(&s, newstringobject(")"));
+               s = PyString_FromString(buf);
+               v = array_tostring(a, (PyObject *)NULL);
+               t = PyObject_Repr(v);
+               Py_XDECREF(v);
+               PyString_ConcatAndDel(&s, t);
+               PyString_ConcatAndDel(&s, PyString_FromString(")"));
                return s;
        }
        sprintf(buf, "array('%c', [", a->ob_descr->typecode);
-       s = newstringobject(buf);
-       comma = newstringobject(", ");
-       for (i = 0; i < len && !err_occurred(); i++) {
+       s = PyString_FromString(buf);
+       comma = PyString_FromString(", ");
+       for (i = 0; i < len && !PyErr_Occurred(); i++) {
                if (i > 0)
-                       joinstring(&s, comma);
+                       PyString_Concat(&s, comma);
                v = (a->ob_descr->getitem)(a, i);
-               t = reprobject(v);
-               XDECREF(v);
-               joinstring_decref(&s, t);
+               t = PyObject_Repr(v);
+               Py_XDECREF(v);
+               PyString_ConcatAndDel(&s, t);
        }
-       XDECREF(comma);
-       joinstring_decref(&s, newstringobject("])"));
+       Py_XDECREF(comma);
+       PyString_ConcatAndDel(&s, PyString_FromString("])"));
        return s;
 }
 
-static sequence_methods array_as_sequence = {
-       (inquiry)array_length,                  /*sq_length*/
+static PySequenceMethods array_as_sequence = {
+       (inquiry)array_length,          /*sq_length*/
        (binaryfunc)array_concat,               /*sq_concat*/
        (intargfunc)array_repeat,               /*sq_repeat*/
-       (intargfunc)array_item,                 /*sq_item*/
+       (intargfunc)array_item,         /*sq_item*/
        (intintargfunc)array_slice,             /*sq_slice*/
        (intobjargproc)array_ass_item,          /*sq_ass_item*/
        (intintobjargproc)array_ass_slice,      /*sq_ass_slice*/
 };
 
-statichere typeobject Arraytype = {
-       OB_HEAD_INIT(&Typetype)
+statichere PyTypeObject Arraytype = {
+       PyObject_HEAD_INIT(&PyType_Type)
        0,
        "array",
        sizeof(arrayobject),
        0,
-       (destructor)array_dealloc,      /*tp_dealloc*/
+       (destructor)array_dealloc,                      /*tp_dealloc*/
        (printfunc)array_print,         /*tp_print*/
-       (getattrfunc)array_getattr,     /*tp_getattr*/
+       (getattrfunc)array_getattr,                     /*tp_getattr*/
        0,                              /*tp_setattr*/
        (cmpfunc)array_compare,         /*tp_compare*/
        (reprfunc)array_repr,           /*tp_repr*/
@@ -1105,62 +1109,63 @@ statichere typeobject Arraytype = {
 };
 
 
-static object *
+static PyObject *
 a_array(self, args)
-       object *self;
-       object *args;
+       PyObject *self;
+       PyObject *args;
 {
        char c;
-       object *initial = NULL;
+       PyObject *initial = NULL;
        struct arraydescr *descr;
-       if (!getargs(args, "c", &c)) {
-               err_clear();
-               if (!getargs(args, "(cO)", &c, &initial))
+       if (!PyArg_Parse(args, "c", &c)) {
+               PyErr_Clear();
+               if (!PyArg_Parse(args, "(cO)", &c, &initial))
                        return NULL;
-               if (!is_listobject(initial) && !is_stringobject(initial)) {
-                       err_setstr(TypeError,
+               if (!PyList_Check(initial) && !PyString_Check(initial)) {
+                       PyErr_SetString(PyExc_TypeError,
                                   "array initializer must be list or string");
                        return NULL;
                }
        }
        for (descr = descriptors; descr->typecode != '\0'; descr++) {
                if (descr->typecode == c) {
-                       object *a;
+                       PyObject *a;
                        int len;
-                       if (initial == NULL || !is_listobject(initial))
+                       if (initial == NULL || !PyList_Check(initial))
                                len = 0;
                        else
-                               len = getlistsize(initial);
+                               len = PyList_Size(initial);
                        a = newarrayobject(len, descr);
                        if (a == NULL)
                                return NULL;
                        if (len > 0) {
                                int i;
                                for (i = 0; i < len; i++) {
-                                       object *v = getlistitem(initial, i);
+                                       PyObject *v =
+                                                PyList_GetItem(initial, i);
                                        if (setarrayitem(a, i, v) != 0) {
-                                               DECREF(a);
+                                               Py_DECREF(a);
                                                return NULL;
                                        }
                                }
                        }
-                       if (initial != NULL && is_stringobject(initial)) {
-                               object *v =
+                       if (initial != NULL && PyString_Check(initial)) {
+                               PyObject *v =
                                  array_fromstring((arrayobject *)a, initial);
                                if (v == NULL) {
-                                       DECREF(a);
+                                       Py_DECREF(a);
                                        return NULL;
                                }
-                               DECREF(v);
+                               Py_DECREF(v);
                        }
                        return a;
                }
        }
-       err_setstr(ValueError, "bad typecode (must be c, b, h, l, f or d)");
+       PyErr_SetString(PyExc_ValueError, "bad typecode (must be c, b, h, l, f or d)");
        return NULL;
 }
 
-static struct methodlist a_methods[] = {
+static PyMethodDef a_methods[] = {
        {"array",       a_array},
        {NULL,          NULL}           /* sentinel */
 };
@@ -1168,5 +1173,5 @@ static struct methodlist a_methods[] = {
 void
 initarray()
 {
-       initmodule("array", a_methods);
+       Py_InitModule("array", a_methods);
 }