More line ending fixes.
authorRobert Bradshaw <robertwb@math.washington.edu>
Tue, 10 Feb 2009 02:34:51 +0000 (18:34 -0800)
committerRobert Bradshaw <robertwb@math.washington.edu>
Tue, 10 Feb 2009 02:34:51 +0000 (18:34 -0800)
Cython/Compiler/Tests/TestDecorators.py
Cython/Includes/python2.5.pxd

index aabf67499f65363197217db221da7bbb317ce549..7f494351b8b16a8ef032554556858333f716a56e 100644 (file)
@@ -1,25 +1,25 @@
-import unittest\r
-from Cython.TestUtils import TransformTest\r
-from Cython.Compiler.ParseTreeTransforms import DecoratorTransform\r
-\r
-class TestDecorator(TransformTest):\r
-\r
-    def test_decorator(self):\r
-        t = self.run_pipeline([DecoratorTransform(None)], u"""\r
-        def decorator(fun):\r
-            return fun\r
-        @decorator\r
-        def decorated():\r
-            pass\r
-        """)\r
-        \r
-        self.assertCode(u"""\r
-        def decorator(fun):\r
-            return fun\r
-        def decorated():\r
-            pass\r
-        decorated = decorator(decorated)\r
-        """, t)\r
-\r
-if __name__ == '__main__':\r
-    unittest.main()\r
+import unittest
+from Cython.TestUtils import TransformTest
+from Cython.Compiler.ParseTreeTransforms import DecoratorTransform
+
+class TestDecorator(TransformTest):
+
+    def test_decorator(self):
+        t = self.run_pipeline([DecoratorTransform(None)], u"""
+        def decorator(fun):
+            return fun
+        @decorator
+        def decorated():
+            pass
+        """)
+        
+        self.assertCode(u"""
+        def decorator(fun):
+            return fun
+        def decorated():
+            pass
+        decorated = decorator(decorated)
+        """, t)
+
+if __name__ == '__main__':
+    unittest.main()
index 5d08db6df48298a81d9d1923523ee7c539ff1150..f9a25c62788decee44da577559fe4229146c672f 100644 (file)
-# From: Eric Huss <e-huss@netmeridian.com>\r
-#\r
-# Here is my latest copy.  It does not cover 100% of the API.  It should be\r
-# current up to 2.5.\r
-#\r
-# -Eric\r
-\r
-\r
-\r
-\r
-# XXX:\r
-# - Need to support "long long" definitions that are different for different platforms.\r
-# - Support unicode platform dependencies.\r
-# - Add unicode calls.\r
-# - Add setobject calls.\r
-\r
-cdef extern from "stdio.h":\r
-    ctypedef struct FILE:\r
-        pass\r
-\r
-cdef extern from "Python.h":\r
-\r
-    # XXX: This is platform dependent.\r
-    ctypedef unsigned short Py_UNICODE\r
-\r
-    ctypedef struct PyTypeObject:\r
-        pass\r
-\r
-    ctypedef struct PyObject:\r
-        Py_ssize_t ob_refcnt\r
-        PyTypeObject * ob_type\r
-\r
-    ###############################################################################################\r
-    # bool\r
-    ###############################################################################################\r
-    PyObject * Py_False\r
-    PyObject * Py_True\r
-    PyTypeObject PyBool_Type\r
-    int                 PyBool_Check                    (object)                    # Always succeeds.\r
-    object              PyBool_FromLong                 (long)\r
-\r
-    ###############################################################################################\r
-    # buffer\r
-    ###############################################################################################\r
-    PyTypeObject PyBuffer_Type\r
-    int Py_END_OF_BUFFER\r
-    int                 PyBuffer_Check                  (object)                    # Always succeeds.\r
-    object              PyBuffer_FromMemory             (void *, Py_ssize_t)\r
-    object              PyBuffer_FromObject             (object, Py_ssize_t, Py_ssize_t)\r
-    object              PyBuffer_FromReadWriteMemory    (void *, Py_ssize_t)\r
-    object              PyBuffer_FromReadWriteObject    (object, Py_ssize_t, Py_ssize_t)\r
-    object              PyBuffer_New                    (Py_ssize_t)\r
-    int                 PyObject_AsCharBuffer           (object, char **, Py_ssize_t *)    except -1\r
-    int                 PyObject_AsReadBuffer           (object, void **, Py_ssize_t *)    except -1\r
-    int                 PyObject_AsWriteBuffer          (object, void **, Py_ssize_t *)    except -1\r
-    int                 PyObject_CheckReadBuffer        (object)                    # Always succeeds.\r
-\r
-    ###############################################################################################\r
-    # cobject\r
-    ###############################################################################################\r
-    PyTypeObject PyCObject_Type\r
-\r
-    int                 PyCObject_Check(object)                                     # Always succeeds.\r
-    object              PyCObject_FromVoidPtr(void *, void (*)(void*))\r
-    object              PyCObject_FromVoidPtrAndDesc(void *, void *, void (*)(void*,void*))\r
-    void *              PyCObject_AsVoidPtr(object)                                 except NULL\r
-    void *              PyCObject_GetDesc(object)                                   except NULL\r
-    void *              PyCObject_Import(char *, char *)                            except NULL\r
-\r
-    ###############################################################################################\r
-    # compile\r
-    ###############################################################################################\r
-\r
-    ctypedef struct PyCodeObject:\r
-        int       co_argcount\r
-        int       co_nlocals\r
-        int       co_stacksize\r
-        int       co_flags\r
-        PyObject *co_code\r
-        PyObject *co_consts\r
-        PyObject *co_names\r
-        PyObject *co_varnames\r
-        PyObject *co_freevars\r
-        PyObject *co_cellvars\r
-        PyObject *co_filename\r
-        PyObject *co_name\r
-        int       co_firstlineno\r
-        PyObject *co_lnotab\r
-\r
-    int PyCode_Addr2Line(PyCodeObject *, int)\r
-\r
-    ###############################################################################################\r
-    # complex\r
-    ###############################################################################################\r
-    ctypedef struct Py_complex:\r
-        double real\r
-        double imag\r
-\r
-    PyTypeObject PyComplex_Type\r
-\r
-    Py_complex          PyComplex_AsCComplex            (object)                    # Always succeeds.\r
-    int                 PyComplex_Check                 (object)                    # Always succeeds.\r
-    int                 PyComplex_CheckExact            (object)                    # Always succeeds.\r
-    object              PyComplex_FromCComplex          (Py_complex)\r
-    object              PyComplex_FromDoubles           (double, double)\r
-    double              PyComplex_ImagAsDouble          (object)                    except? -1\r
-    double              PyComplex_RealAsDouble          (object)                    except? -1\r
-    Py_complex          _Py_c_diff                      (Py_complex, Py_complex)\r
-    Py_complex          _Py_c_neg                       (Py_complex)\r
-    Py_complex          _Py_c_pow                       (Py_complex, Py_complex)\r
-    Py_complex          _Py_c_prod                      (Py_complex, Py_complex)\r
-    Py_complex          _Py_c_quot                      (Py_complex, Py_complex)\r
-    Py_complex          _Py_c_sum                       (Py_complex, Py_complex)\r
-\r
-    ###############################################################################################\r
-    # dict\r
-    ###############################################################################################\r
-    PyTypeObject PyDict_Type\r
-\r
-    int                 PyDict_Check                    (object)                    # Always succeeds.\r
-    int                 PyDict_CheckExact               (object)                    # Always succeeds.\r
-    void                PyDict_Clear                    (object)\r
-    int                 PyDict_Contains                 (object, object)            except -1\r
-    object              PyDict_Copy                     (object)\r
-    int                 PyDict_DelItem                  (object, object)            except -1\r
-    int                 PyDict_DelItemString            (object, char *)            except -1\r
-    object              PyDict_Items                    (object)\r
-    object              PyDict_Keys                     (object)\r
-    int                 PyDict_Merge                    (object, object, int)       except -1\r
-    int                 PyDict_MergeFromSeq2            (object, object, int)       except -1\r
-    object              PyDict_New                      ()\r
-    # XXX: Pyrex doesn't support pointer to a python object?\r
-    #int                 PyDict_Next                     (object, Py_ssize_t *, object *, object *) # Always succeeds.\r
-    int                 PyDict_SetItem                  (object, object, object)    except -1\r
-    int                 PyDict_SetItemString            (object, char *, object)    except -1\r
-    Py_ssize_t          PyDict_Size                     (object)                    except -1\r
-    int                 PyDict_Update                   (object, object)            except -1\r
-    object              PyDict_Values                   (object)\r
-    # XXX: Borrowed reference.  No exception on NULL.\r
-    #object              PyDict_GetItem                  (object, object)\r
-    # XXX: Borrowed reference.  No exception on NULL\r
-    #object              PyDict_GetItemString            (object, char *)\r
-\r
-\r
-    ###############################################################################################\r
-    # float\r
-    ###############################################################################################\r
-    PyTypeObject PyFloat_Type\r
-    int                 _PyFloat_Pack4                  (double, unsigned char *, int)  except -1\r
-    int                 _PyFloat_Pack8                  (double, unsigned char *, int)  except -1\r
-    double              _PyFloat_Unpack4                (unsigned char *, int)      except? -1\r
-    double              _PyFloat_Unpack8                (unsigned char *, int)      except? -1\r
-    double              PyFloat_AS_DOUBLE               (object)\r
-    double              PyFloat_AsDouble                (object)                    except? -1\r
-    void                PyFloat_AsReprString            (char*, object)\r
-    void                PyFloat_AsString                (char*, object)\r
-    int                 PyFloat_Check                   (object)                    # Always succeeds.\r
-    int                 PyFloat_CheckExact              (object)                    # Always succeeds.\r
-    object              PyFloat_FromDouble              (double)\r
-    object              PyFloat_FromString              (object, char**)\r
-\r
-    ###############################################################################################\r
-    # frame\r
-    ###############################################################################################\r
-\r
-    ctypedef struct PyFrameObject:\r
-        PyFrameObject *f_back\r
-        PyCodeObject  *f_code\r
-        PyObject *f_builtins\r
-        PyObject *f_globals\r
-        PyObject *f_locals\r
-        PyObject *f_trace\r
-        PyObject *f_exc_type\r
-        PyObject *f_exc_value\r
-        PyObject *f_exc_traceback\r
-        int f_lasti\r
-        int f_lineno\r
-        int f_restricted\r
-        int f_iblock\r
-        int f_nlocals\r
-        int f_ncells\r
-        int f_nfreevars\r
-        int f_stacksize\r
-\r
-    ###############################################################################################\r
-    # int\r
-    ###############################################################################################\r
-    PyTypeObject PyInt_Type\r
-    long                PyInt_AS_LONG                   (object)                    # Always succeeds.\r
-    long                PyInt_AsLong                    (object)                    except? -1\r
-    Py_ssize_t          PyInt_AsSsize_t                 (object)                    except? -1\r
-    unsigned long long  PyInt_AsUnsignedLongLongMask    (object)                    except? -1\r
-    unsigned long       PyInt_AsUnsignedLongMask        (object)                    except? -1\r
-    int                 PyInt_Check                     (object)                    # Always succeeds.\r
-    int                 PyInt_CheckExact                (object)                    # Always succeeds.\r
-    object              PyInt_FromLong                  (long)\r
-    object              PyInt_FromSsize_t               (Py_ssize_t)\r
-    object              PyInt_FromString                (char*, char**, int)\r
-    object              PyInt_FromUnicode               (Py_UNICODE*, Py_ssize_t, int)\r
-    long                PyInt_GetMax                    ()                      # Always succeeds.\r
-\r
-    ###############################################################################################\r
-    # iterator\r
-    ###############################################################################################\r
-    int                 PyIter_Check                    (object)                    # Always succeeds.\r
-    object              PyIter_Next                     (object)\r
-\r
-    ###############################################################################################\r
-    # list\r
-    ###############################################################################################\r
-    PyTypeObject PyList_Type\r
-    int                 PyList_Append                   (object, object)            except -1\r
-    object              PyList_AsTuple                  (object)\r
-    int                 PyList_Check                    (object)                    # Always succeeds.\r
-    int                 PyList_CheckExact               (object)                    # Always succeeds.\r
-    int                 PyList_GET_SIZE                 (object)                    # Always suceeds.\r
-    object              PyList_GetSlice                 (object, Py_ssize_t, Py_ssize_t)\r
-    int                 PyList_Insert                   (object, Py_ssize_t, object)       except -1\r
-    object              PyList_New                      (Py_ssize_t)\r
-    int                 PyList_Reverse                  (object)                    except -1\r
-    int                 PyList_SetSlice                 (object, Py_ssize_t, Py_ssize_t, object)  except -1\r
-    Py_ssize_t          PyList_Size                     (object)                    except -1\r
-    int                 PyList_Sort                     (object)                    except -1\r
-\r
-    ###############################################################################################\r
-    # long\r
-    ###############################################################################################\r
-    PyTypeObject PyLong_Type\r
-    int                 _PyLong_AsByteArray             (object, unsigned char *, size_t, int, int) except -1\r
-    object              _PyLong_FromByteArray           (unsigned char *, size_t, int, int)\r
-    size_t              _PyLong_NumBits                 (object)                    except -1\r
-    int                 _PyLong_Sign                    (object)                    # No error.\r
-    long                PyLong_AsLong                   (object)                    except? -1\r
-    long long           PyLong_AsLongLong               (object)                    except? -1\r
-    unsigned long       PyLong_AsUnsignedLong           (object)                    except? -1\r
-    unsigned long       PyLong_AsUnsignedLongMask       (object)                    except? -1\r
-    unsigned long long  PyLong_AsUnsignedLongLong       (object)                    except? -1\r
-    unsigned long long  PyLong_AsUnsignedLongLongMask   (object)                    except? -1\r
-    int                 PyLong_Check                    (object)                    # Always succeeds.\r
-    int                 PyLong_CheckExact               (object)                    # Always succeeds.\r
-    object              PyLong_FromDouble               (double)\r
-    object              PyLong_FromLong                 (long)\r
-    object              PyLong_FromLongLong             (long long)\r
-    object              PyLong_FromUnsignedLong         (unsigned long)\r
-    object              PyLong_FromUnsignedLongLong     (unsigned long long)\r
-    double              PyLong_AsDouble                 (object)                    except? -1\r
-    object              PyLong_FromVoidPtr              (void *)\r
-    void *              PyLong_AsVoidPtr                (object)                    except NULL\r
-    object              PyLong_FromString               (char *, char **, int)\r
-    object              PyLong_FromUnicode              (Py_UNICODE*, Py_ssize_t, int)\r
-\r
-    ###############################################################################################\r
-    # mapping\r
-    ###############################################################################################\r
-    int                 PyMapping_Check                 (object)                    # Always succeeds.\r
-    int                 PyMapping_DelItem               (object, object)            except -1\r
-    int                 PyMapping_DelItemString         (object, char *)            except -1\r
-    object              PyMapping_GetItemString         (object, char *)\r
-    int                 PyMapping_HasKey                (object, object)            # Always succeeds.\r
-    int                 PyMapping_HasKeyString          (object, char *)            # Always succeeds.\r
-    object              PyMapping_Items                 (object)\r
-    object              PyMapping_Keys                  (object)\r
-    Py_ssize_t          PyMapping_Length                (object)                    except -1\r
-    int                 PyMapping_SetItemString         (object, char *, object)    except -1\r
-    Py_ssize_t          PyMapping_Size                  (object)                    except -1\r
-    object              PyMapping_Values                (object)\r
-\r
-    ###############################################################################################\r
-    # mem\r
-    ###############################################################################################\r
-    void                PyMem_Free                      (void * p)\r
-    void *              PyMem_Malloc                    (size_t n)\r
-    void *              PyMem_Realloc                   (void *, size_t)\r
-\r
-    ###############################################################################################\r
-    # modsupport\r
-    ###############################################################################################\r
-    object              Py_BuildValue                   (char *, ...)\r
-    object              Py_VaBuildValue                 (char *, va_list)\r
-\r
-    ###############################################################################################\r
-    # number\r
-    ###############################################################################################\r
-    object              PyNumber_Absolute               (object)\r
-    object              PyNumber_Add                    (object, object)\r
-    object              PyNumber_And                    (object, object)\r
-    Py_ssize_t          PyNumber_AsSsize_t              (object, object)    except? -1\r
-    int                 PyNumber_Check                  (object)                    # Always succeeds.\r
-    # XXX: Pyrex doesn't support pointer to python object?\r
-    #int                 PyNumber_Coerce                 (object*, object*)          except -1\r
-    object              PyNumber_Divide                 (object, object)\r
-    object              PyNumber_Divmod                 (object, object)\r
-    object              PyNumber_Float                  (object)\r
-    object              PyNumber_FloorDivide            (object, object)\r
-    object              PyNumber_InPlaceAdd             (object, object)\r
-    object              PyNumber_InPlaceAnd             (object, object)\r
-    object              PyNumber_InPlaceDivide          (object, object)\r
-    object              PyNumber_InPlaceFloorDivide     (object, object)\r
-    object              PyNumber_InPlaceLshift          (object, object)\r
-    object              PyNumber_InPlaceMultiply        (object, object)\r
-    object              PyNumber_InPlaceOr              (object, object)\r
-    object              PyNumber_InPlacePower           (object, object, object)\r
-    object              PyNumber_InPlaceRemainder       (object, object)\r
-    object              PyNumber_InPlaceRshift          (object, object)\r
-    object              PyNumber_InPlaceSubtract        (object, object)\r
-    object              PyNumber_InPlaceTrueDivide      (object, object)\r
-    object              PyNumber_InPlaceXor             (object, object)\r
-    object              PyNumber_Int                    (object)\r
-    object              PyNumber_Invert                 (object)\r
-    object              PyNumber_Long                   (object)\r
-    object              PyNumber_Lshift                 (object, object)\r
-    object              PyNumber_Multiply               (object, object)\r
-    object              PyNumber_Negative               (object)\r
-    object              PyNumber_Or                     (object, object)\r
-    object              PyNumber_Positive               (object)\r
-    object              PyNumber_Power                  (object, object, object)\r
-    object              PyNumber_Remainder              (object, object)\r
-    object              PyNumber_Rshift                 (object, object)\r
-    object              PyNumber_Subtract               (object, object)\r
-    object              PyNumber_TrueDivide             (object, object)\r
-    object              PyNumber_Xor                    (object, object)\r
-\r
-    ###############################################################################################\r
-    # object\r
-    ###############################################################################################\r
-    int                 PyCallable_Check                (object)                    # Always succeeds.\r
-    int                 PyObject_AsFileDescriptor       (object)                    except -1\r
-    object              PyObject_Call                   (object, object, object)\r
-    object              PyObject_CallFunction           (object, char *, ...)\r
-    object              PyObject_CallFunctionObjArgs    (object, ...)\r
-    object              PyObject_CallMethod             (object, char *, char *, ...)\r
-    object              PyObject_CallMethodObjArgs      (object, object, ...)\r
-    object              PyObject_CallObject             (object, object)\r
-    int                 PyObject_Cmp                    (object, object, int *result)   except -1\r
-    # Use PyObject_Cmp instead.\r
-    #int                 PyObject_Compare                (object, object)\r
-    int                 PyObject_DelAttr                (object, object)            except -1\r
-    int                 PyObject_DelAttrString          (object, char *)            except -1\r
-    int                 PyObject_DelItem                (object, object)            except -1\r
-    int                 PyObject_DelItemString          (object, char *)            except -1\r
-    object              PyObject_Dir                    (object)\r
-    object              PyObject_GetAttr                (object, object)\r
-    object              PyObject_GetAttrString          (object, char *)\r
-    object              PyObject_GetItem                (object, object)\r
-    object              PyObject_GetIter                (object)\r
-    int                 PyObject_HasAttr                (object, object)            # Always succeeds.\r
-    int                 PyObject_HasAttrString          (object, char *)            # Always succeeds.\r
-    long                PyObject_Hash                   (object)                    except -1\r
-    int                 PyObject_IsInstance             (object, object)            except -1\r
-    int                 PyObject_IsSubclass             (object, object)            except -1\r
-    int                 PyObject_IsTrue                 (object)                    except -1\r
-    Py_ssize_t          PyObject_Length                 (object)                    except -1\r
-    int                 PyObject_Not                    (object)                    except -1\r
-    int                 PyObject_Print                  (object, FILE *, int)       except -1\r
-    object              PyObject_Repr                   (object)\r
-    object              PyObject_RichCompare            (object, object, int)\r
-    int                 PyObject_RichCompareBool        (object, object, int)       except -1\r
-    int                 PyObject_SetAttr                (object, object, object)    except -1\r
-    int                 PyObject_SetAttrString          (object, char *, object)    except -1\r
-    int                 PyObject_SetItem                (object, object, object)    except -1\r
-    Py_ssize_t          PyObject_Size                   (object)                    except -1\r
-    object              PyObject_Str                    (object)\r
-    object              PyObject_Type                   (object)\r
-    int                 PyObject_TypeCheck              (object, object)            # Always succeeds.\r
-    object              PyObject_Unicode                (object)\r
-\r
-    ###############################################################################################\r
-    # pyerrors\r
-    ###############################################################################################\r
-    int                 PyErr_BadArgument               ()\r
-    void                PyErr_BadInternalCall           ()\r
-    int                 PyErr_CheckSignals              ()\r
-    void                PyErr_Clear                     ()\r
-    int                 PyErr_ExceptionMatches          (object)\r
-    object              PyErr_Format                    (object, char *, ...)\r
-    int                 PyErr_GivenExceptionMatches     (object, object)\r
-    object              PyErr_NoMemory                  ()\r
-    object              PyErr_Occurred                  ()\r
-    void                PyErr_Restore                   (object, object, object)\r
-    object              PyErr_SetFromErrno              (object)\r
-    object              PyErr_SetFromErrnoWithFilename  (object, char *)\r
-    object              PyErr_SetFromErrnoWithFilenameObject    (object, object)\r
-    void                PyErr_SetInterrupt              ()\r
-    void                PyErr_SetNone                   (object)\r
-    void                PyErr_SetObject                 (object, object)\r
-    void                PyErr_SetString                 (object, char *)\r
-    int                 PyErr_Warn                      (object, char *)\r
-    int                 PyErr_WarnExplicit              (object, char *, char *, int, char *, object)\r
-    void                PyErr_WriteUnraisable           (object)\r
-\r
-    ###############################################################################################\r
-    # pyeval\r
-    # Be extremely careful with these functions.\r
-    ###############################################################################################\r
-\r
-    ctypedef struct PyThreadState:\r
-        PyFrameObject * frame\r
-        int recursion_depth\r
-        void * curexc_type, * curexc_value, * curexc_traceback\r
-        void * exc_type, * exc_value, * exc_traceback\r
-\r
-    void                PyEval_AcquireLock              ()\r
-    void                PyEval_ReleaseLock              ()\r
-    void                PyEval_AcquireThread            (PyThreadState *)\r
-    void                PyEval_ReleaseThread            (PyThreadState *)\r
-    PyThreadState*      PyEval_SaveThread               ()\r
-    void                PyEval_RestoreThread            (PyThreadState *)\r
-\r
-    ###############################################################################################\r
-    # pystate\r
-    # Be extremely careful with these functions.  Read PEP 311 for more detail.\r
-    ###############################################################################################\r
-\r
-    ctypedef int PyGILState_STATE\r
-    PyGILState_STATE    PyGILState_Ensure               ()\r
-    void                PyGILState_Release              (PyGILState_STATE)\r
-\r
-    ctypedef struct PyInterpreterState:\r
-        pass\r
-\r
-    PyThreadState*      PyThreadState_New               (PyInterpreterState *)\r
-    void                PyThreadState_Clear             (PyThreadState *)\r
-    void                PyThreadState_Delete            (PyThreadState *)\r
-    PyThreadState*      PyThreadState_Get               ()\r
-    PyThreadState*      PyThreadState_Swap              (PyThreadState *tstate)\r
-    # XXX: Borrowed reference.\r
-    #object              PyThreadState_GetDict          ()\r
-\r
-    ###############################################################################################\r
-    # run\r
-    # Functions for embedded interpreters are not included.\r
-    ###############################################################################################\r
-    ctypedef struct PyCompilerFlags:\r
-        int cf_flags\r
-\r
-    ctypedef struct _node:\r
-        pass\r
-\r
-    ctypedef void (*PyOS_sighandler_t)(int)\r
-\r
-    void                PyErr_Display                   (object, object, object)\r
-    void                PyErr_Print                     ()\r
-    void                PyErr_PrintEx                   (int)\r
-    char *              PyOS_Readline                   (FILE *, FILE *, char *)\r
-    PyOS_sighandler_t   PyOS_getsig                     (int)\r
-    PyOS_sighandler_t   PyOS_setsig                     (int, PyOS_sighandler_t)\r
-    _node *             PyParser_SimpleParseFile        (FILE *, char *, int)       except NULL\r
-    _node *             PyParser_SimpleParseFileFlags   (FILE *, char *, int,\r
-                                                         int)                       except NULL\r
-    _node *             PyParser_SimpleParseString      (char *, int)               except NULL\r
-    _node *             PyParser_SimpleParseStringFlagsFilename(char *, char *,\r
-                                                         int, int)                  except NULL\r
-    _node *             PyParser_SimpleParseStringFlags (char *, int, int)          except NULL\r
-    int                 PyRun_AnyFile                   (FILE *, char *)            except -1\r
-    int                 PyRun_AnyFileEx                 (FILE *, char *, int)       except -1\r
-    int                 PyRun_AnyFileExFlags            (FILE *, char *, int,\r
-                                                         PyCompilerFlags *)         except -1\r
-    int                 PyRun_AnyFileFlags              (FILE *, char *,\r
-                                                         PyCompilerFlags *)         except -1\r
-    object              PyRun_File                      (FILE *, char *, int,\r
-                                                         object, object)\r
-    object              PyRun_FileEx                    (FILE *, char *, int,\r
-                                                         object, object, int)\r
-    object              PyRun_FileExFlags               (FILE *, char *, int,\r
-                                                         object, object, int,\r
-                                                         PyCompilerFlags *)\r
-    object              PyRun_FileFlags                 (FILE *, char *, int,\r
-                                                         object, object,\r
-                                                         PyCompilerFlags *)\r
-    int                 PyRun_InteractiveLoop           (FILE *, char *)            except -1\r
-    int                 PyRun_InteractiveLoopFlags      (FILE *, char *,\r
-                                                         PyCompilerFlags *)         except -1\r
-    int                 PyRun_InteractiveOne            (FILE *, char *)            except -1\r
-    int                 PyRun_InteractiveOneFlags       (FILE *, char *,\r
-                                                         PyCompilerFlags *)         except -1\r
-    int                 PyRun_SimpleFile                (FILE *, char *)            except -1\r
-    int                 PyRun_SimpleFileEx              (FILE *, char *, int)       except -1\r
-    int                 PyRun_SimpleFileExFlags         (FILE *, char *, int,\r
-                                                         PyCompilerFlags *)         except -1\r
-    int                 PyRun_SimpleString              (char *)                    except -1\r
-    int                 PyRun_SimpleStringFlags         (char *, PyCompilerFlags *) except -1\r
-    object              PyRun_String                    (char *, int, object,\r
-                                                         object)\r
-    object              PyRun_StringFlags               (char *, int, object,\r
-                                                         object, PyCompilerFlags *)\r
-    int                 Py_AtExit                       (void (*func)())\r
-    object              Py_CompileString                (char *, char *, int)\r
-    object              Py_CompileStringFlags           (char *, char *, int, PyCompilerFlags *)\r
-    void                Py_Exit                         (int)\r
-    int                 Py_FdIsInteractive              (FILE *, char *)            # Always succeeds.\r
-    char *              Py_GetBuildInfo                 ()\r
-    char *              Py_GetCompiler                  ()\r
-    char *              Py_GetCopyright                 ()\r
-    char *              Py_GetExecPrefix                ()\r
-    char *              Py_GetPath                      ()\r
-    char *              Py_GetPlatform                  ()\r
-    char *              Py_GetPrefix                    ()\r
-    char *              Py_GetProgramFullPath           ()\r
-    char *              Py_GetProgramName               ()\r
-    char *              Py_GetPythonHome                ()\r
-    char *              Py_GetVersion                   ()\r
-\r
-    ###############################################################################################\r
-    # sequence\r
-    ###############################################################################################\r
-    int                 PySequence_Check                (object)                    # Always succeeds.\r
-    object              PySequence_Concat               (object, object)\r
-    int                 PySequence_Contains             (object, object)            except -1\r
-    Py_ssize_t          PySequence_Count                (object, object)            except -1\r
-    int                 PySequence_DelItem              (object, Py_ssize_t)        except -1\r
-    int                 PySequence_DelSlice             (object, Py_ssize_t, Py_ssize_t) except -1\r
-    object              PySequence_Fast                 (object, char *)\r
-    int                 PySequence_Fast_GET_SIZE        (object)\r
-    object              PySequence_GetItem              (object, Py_ssize_t)\r
-    object              PySequence_GetSlice             (object, Py_ssize_t, Py_ssize_t)\r
-    object              PySequence_ITEM                 (object, int)\r
-    int                 PySequence_In                   (object, object)            except -1\r
-    object              PySequence_InPlaceConcat        (object, object)\r
-    object              PySequence_InPlaceRepeat        (object, Py_ssize_t)\r
-    Py_ssize_t          PySequence_Index                (object, object)            except -1\r
-    Py_ssize_t          PySequence_Length               (object)                    except -1\r
-    object              PySequence_List                 (object)\r
-    object              PySequence_Repeat               (object, Py_ssize_t)\r
-    int                 PySequence_SetItem              (object, Py_ssize_t, object) except -1\r
-    int                 PySequence_SetSlice             (object, Py_ssize_t, Py_ssize_t, object) except -1\r
-    Py_ssize_t          PySequence_Size                 (object)                    except -1\r
-    object              PySequence_Tuple                (object)\r
-\r
-    ###############################################################################################\r
-    # string\r
-    ###############################################################################################\r
-    PyTypeObject PyString_Type\r
-    # Pyrex cannot support resizing because you have no choice but to use\r
-    # realloc which may call free() on the object, and there's no way to tell\r
-    # Pyrex to "forget" reference counting for the object.\r
-    #int                 _PyString_Resize                (object *, Py_ssize_t)             except -1\r
-    char *              PyString_AS_STRING              (object)                    # Always succeeds.\r
-    object              PyString_AsDecodedObject        (object, char *, char *)\r
-    object              PyString_AsEncodedObject        (object, char *, char *)\r
-    object              PyString_AsEncodedString        (object, char *, char *)\r
-    char *              PyString_AsString               (object)                    except NULL\r
-    int                 PyString_AsStringAndSize        (object, char **, Py_ssize_t *)    except -1\r
-    int                 PyString_Check                  (object)                    # Always succeeds.\r
-    int                 PyString_CHECK_INTERNED         (object)                    # Always succeeds.\r
-    int                 PyString_CheckExact             (object)                    # Always succeeds.\r
-    # XXX: Pyrex doesn't support pointer to a python object?\r
-    #void                PyString_Concat                 (object *, object)\r
-    # XXX: Pyrex doesn't support pointer to a python object?\r
-    #void                PyString_ConcatAndDel           (object *, object)\r
-    object              PyString_Decode                 (char *, int, char *, char *)\r
-    object              PyString_DecodeEscape           (char *, int, char *, int, char *)\r
-    object              PyString_Encode                 (char *, int, char *, char *)\r
-    object              PyString_Format                 (object, object)\r
-    object              PyString_FromFormat             (char*, ...)\r
-    object              PyString_FromFormatV            (char*, va_list)\r
-    object              PyString_FromString             (char *)\r
-    object              PyString_FromStringAndSize      (char *, Py_ssize_t)\r
-    Py_ssize_t          PyString_GET_SIZE               (object)                    # Always succeeds.\r
-    object              PyString_InternFromString       (char *)\r
-    # XXX: Pyrex doesn't support pointer to a python object?\r
-    #void                PyString_InternImmortal         (object*)\r
-    # XXX: Pyrex doesn't support pointer to a python object?\r
-    #void                PyString_InternInPlace          (object*)\r
-    object              PyString_Repr                   (object, int)\r
-    Py_ssize_t          PyString_Size                   (object)                    except -1\r
-\r
-    # Disgusting hack to access internal object values.\r
-    ctypedef struct PyStringObject:\r
-        int ob_refcnt\r
-        PyTypeObject * ob_type\r
-        int ob_size\r
-        long ob_shash\r
-        int ob_sstate\r
-        char * ob_sval\r
-\r
-    ###############################################################################################\r
-    # tuple\r
-    ###############################################################################################\r
-    PyTypeObject PyTuple_Type\r
-    # See PyString_Resize note about resizing.\r
-    #int                 _PyTuple_Resize                 (object*, Py_ssize_t)              except -1\r
-    int                 PyTuple_Check                   (object)                    # Always succeeds.\r
-    int                 PyTuple_CheckExact              (object)                    # Always succeeds.\r
-    Py_ssize_t          PyTuple_GET_SIZE                (object)                    # Always succeeds.\r
-    object              PyTuple_GetSlice                (object, Py_ssize_t, Py_ssize_t)\r
-    object              PyTuple_New                     (Py_ssize_t)\r
-    object              PyTuple_Pack                    (Py_ssize_t, ...)\r
-    Py_ssize_t          PyTuple_Size                    (object)                    except -1\r
-\r
-    ###############################################################################################\r
-    # Dangerous things!\r
-    # Do not use these unless you really, really know what you are doing.\r
-    ###############################################################################################\r
-    void                Py_INCREF                       (object)\r
-    void                Py_XINCREF                      (object)\r
-    void                Py_DECREF                       (object)\r
-    void                Py_XDECREF                      (object)\r
-    void                Py_CLEAR                        (object)\r
-\r
-    # XXX: Stolen reference.\r
-    void                PyTuple_SET_ITEM                (object, Py_ssize_t, value)\r
-    # XXX: Borrowed reference.\r
-    object              PyTuple_GET_ITEM                (object, Py_ssize_t)\r
-    # XXX: Borrowed reference.\r
-    object              PyTuple_GetItem                 (object, Py_ssize_t)\r
-    # XXX: Stolen reference.\r
-    int                 PyTuple_SetItem                 (object, Py_ssize_t, object)       except -1\r
-\r
-    # XXX: Steals reference.\r
-    int                 PyList_SetItem                  (object, Py_ssize_t, object)       except -1\r
-    # XXX: Borrowed reference\r
-    object              PyList_GetItem                  (object, Py_ssize_t)\r
-    # XXX: Borrowed reference, no NULL on error.\r
-    object              PyList_GET_ITEM                 (object, Py_ssize_t)\r
-    # XXX: Stolen reference.\r
-    void                PyList_SET_ITEM                 (object, Py_ssize_t, object)\r
-\r
-    # XXX: Borrowed reference.\r
-    object              PySequence_Fast_GET_ITEM        (object, Py_ssize_t)\r
-\r
-    # First parameter _must_ be a PyStringObject.\r
-    object              _PyString_Join                  (object, object)\r
+# From: Eric Huss <e-huss@netmeridian.com>
+#
+# Here is my latest copy.  It does not cover 100% of the API.  It should be
+# current up to 2.5.
+#
+# -Eric
+
+
+
+
+# XXX:
+# - Need to support "long long" definitions that are different for different platforms.
+# - Support unicode platform dependencies.
+# - Add unicode calls.
+# - Add setobject calls.
+
+cdef extern from "stdio.h":
+    ctypedef struct FILE:
+        pass
+
+cdef extern from "Python.h":
+
+    # XXX: This is platform dependent.
+    ctypedef unsigned short Py_UNICODE
+
+    ctypedef struct PyTypeObject:
+        pass
+
+    ctypedef struct PyObject:
+        Py_ssize_t ob_refcnt
+        PyTypeObject * ob_type
+
+    ###############################################################################################
+    # bool
+    ###############################################################################################
+    PyObject * Py_False
+    PyObject * Py_True
+    PyTypeObject PyBool_Type
+    int                 PyBool_Check                    (object)                    # Always succeeds.
+    object              PyBool_FromLong                 (long)
+
+    ###############################################################################################
+    # buffer
+    ###############################################################################################
+    PyTypeObject PyBuffer_Type
+    int Py_END_OF_BUFFER
+    int                 PyBuffer_Check                  (object)                    # Always succeeds.
+    object              PyBuffer_FromMemory             (void *, Py_ssize_t)
+    object              PyBuffer_FromObject             (object, Py_ssize_t, Py_ssize_t)
+    object              PyBuffer_FromReadWriteMemory    (void *, Py_ssize_t)
+    object              PyBuffer_FromReadWriteObject    (object, Py_ssize_t, Py_ssize_t)
+    object              PyBuffer_New                    (Py_ssize_t)
+    int                 PyObject_AsCharBuffer           (object, char **, Py_ssize_t *)    except -1
+    int                 PyObject_AsReadBuffer           (object, void **, Py_ssize_t *)    except -1
+    int                 PyObject_AsWriteBuffer          (object, void **, Py_ssize_t *)    except -1
+    int                 PyObject_CheckReadBuffer        (object)                    # Always succeeds.
+
+    ###############################################################################################
+    # cobject
+    ###############################################################################################
+    PyTypeObject PyCObject_Type
+
+    int                 PyCObject_Check(object)                                     # Always succeeds.
+    object              PyCObject_FromVoidPtr(void *, void (*)(void*))
+    object              PyCObject_FromVoidPtrAndDesc(void *, void *, void (*)(void*,void*))
+    void *              PyCObject_AsVoidPtr(object)                                 except NULL
+    void *              PyCObject_GetDesc(object)                                   except NULL
+    void *              PyCObject_Import(char *, char *)                            except NULL
+
+    ###############################################################################################
+    # compile
+    ###############################################################################################
+
+    ctypedef struct PyCodeObject:
+        int       co_argcount
+        int       co_nlocals
+        int       co_stacksize
+        int       co_flags
+        PyObject *co_code
+        PyObject *co_consts
+        PyObject *co_names
+        PyObject *co_varnames
+        PyObject *co_freevars
+        PyObject *co_cellvars
+        PyObject *co_filename
+        PyObject *co_name
+        int       co_firstlineno
+        PyObject *co_lnotab
+
+    int PyCode_Addr2Line(PyCodeObject *, int)
+
+    ###############################################################################################
+    # complex
+    ###############################################################################################
+    ctypedef struct Py_complex:
+        double real
+        double imag
+
+    PyTypeObject PyComplex_Type
+
+    Py_complex          PyComplex_AsCComplex            (object)                    # Always succeeds.
+    int                 PyComplex_Check                 (object)                    # Always succeeds.
+    int                 PyComplex_CheckExact            (object)                    # Always succeeds.
+    object              PyComplex_FromCComplex          (Py_complex)
+    object              PyComplex_FromDoubles           (double, double)
+    double              PyComplex_ImagAsDouble          (object)                    except? -1
+    double              PyComplex_RealAsDouble          (object)                    except? -1
+    Py_complex          _Py_c_diff                      (Py_complex, Py_complex)
+    Py_complex          _Py_c_neg                       (Py_complex)
+    Py_complex          _Py_c_pow                       (Py_complex, Py_complex)
+    Py_complex          _Py_c_prod                      (Py_complex, Py_complex)
+    Py_complex          _Py_c_quot                      (Py_complex, Py_complex)
+    Py_complex          _Py_c_sum                       (Py_complex, Py_complex)
+
+    ###############################################################################################
+    # dict
+    ###############################################################################################
+    PyTypeObject PyDict_Type
+
+    int                 PyDict_Check                    (object)                    # Always succeeds.
+    int                 PyDict_CheckExact               (object)                    # Always succeeds.
+    void                PyDict_Clear                    (object)
+    int                 PyDict_Contains                 (object, object)            except -1
+    object              PyDict_Copy                     (object)
+    int                 PyDict_DelItem                  (object, object)            except -1
+    int                 PyDict_DelItemString            (object, char *)            except -1
+    object              PyDict_Items                    (object)
+    object              PyDict_Keys                     (object)
+    int                 PyDict_Merge                    (object, object, int)       except -1
+    int                 PyDict_MergeFromSeq2            (object, object, int)       except -1
+    object              PyDict_New                      ()
+    # XXX: Pyrex doesn't support pointer to a python object?
+    #int                 PyDict_Next                     (object, Py_ssize_t *, object *, object *) # Always succeeds.
+    int                 PyDict_SetItem                  (object, object, object)    except -1
+    int                 PyDict_SetItemString            (object, char *, object)    except -1
+    Py_ssize_t          PyDict_Size                     (object)                    except -1
+    int                 PyDict_Update                   (object, object)            except -1
+    object              PyDict_Values                   (object)
+    # XXX: Borrowed reference.  No exception on NULL.
+    #object              PyDict_GetItem                  (object, object)
+    # XXX: Borrowed reference.  No exception on NULL
+    #object              PyDict_GetItemString            (object, char *)
+
+
+    ###############################################################################################
+    # float
+    ###############################################################################################
+    PyTypeObject PyFloat_Type
+    int                 _PyFloat_Pack4                  (double, unsigned char *, int)  except -1
+    int                 _PyFloat_Pack8                  (double, unsigned char *, int)  except -1
+    double              _PyFloat_Unpack4                (unsigned char *, int)      except? -1
+    double              _PyFloat_Unpack8                (unsigned char *, int)      except? -1
+    double              PyFloat_AS_DOUBLE               (object)
+    double              PyFloat_AsDouble                (object)                    except? -1
+    void                PyFloat_AsReprString            (char*, object)
+    void                PyFloat_AsString                (char*, object)
+    int                 PyFloat_Check                   (object)                    # Always succeeds.
+    int                 PyFloat_CheckExact              (object)                    # Always succeeds.
+    object              PyFloat_FromDouble              (double)
+    object              PyFloat_FromString              (object, char**)
+
+    ###############################################################################################
+    # frame
+    ###############################################################################################
+
+    ctypedef struct PyFrameObject:
+        PyFrameObject *f_back
+        PyCodeObject  *f_code
+        PyObject *f_builtins
+        PyObject *f_globals
+        PyObject *f_locals
+        PyObject *f_trace
+        PyObject *f_exc_type
+        PyObject *f_exc_value
+        PyObject *f_exc_traceback
+        int f_lasti
+        int f_lineno
+        int f_restricted
+        int f_iblock
+        int f_nlocals
+        int f_ncells
+        int f_nfreevars
+        int f_stacksize
+
+    ###############################################################################################
+    # int
+    ###############################################################################################
+    PyTypeObject PyInt_Type
+    long                PyInt_AS_LONG                   (object)                    # Always succeeds.
+    long                PyInt_AsLong                    (object)                    except? -1
+    Py_ssize_t          PyInt_AsSsize_t                 (object)                    except? -1
+    unsigned long long  PyInt_AsUnsignedLongLongMask    (object)                    except? -1
+    unsigned long       PyInt_AsUnsignedLongMask        (object)                    except? -1
+    int                 PyInt_Check                     (object)                    # Always succeeds.
+    int                 PyInt_CheckExact                (object)                    # Always succeeds.
+    object              PyInt_FromLong                  (long)
+    object              PyInt_FromSsize_t               (Py_ssize_t)
+    object              PyInt_FromString                (char*, char**, int)
+    object              PyInt_FromUnicode               (Py_UNICODE*, Py_ssize_t, int)
+    long                PyInt_GetMax                    ()                      # Always succeeds.
+
+    ###############################################################################################
+    # iterator
+    ###############################################################################################
+    int                 PyIter_Check                    (object)                    # Always succeeds.
+    object              PyIter_Next                     (object)
+
+    ###############################################################################################
+    # list
+    ###############################################################################################
+    PyTypeObject PyList_Type
+    int                 PyList_Append                   (object, object)            except -1
+    object              PyList_AsTuple                  (object)
+    int                 PyList_Check                    (object)                    # Always succeeds.
+    int                 PyList_CheckExact               (object)                    # Always succeeds.
+    int                 PyList_GET_SIZE                 (object)                    # Always suceeds.
+    object              PyList_GetSlice                 (object, Py_ssize_t, Py_ssize_t)
+    int                 PyList_Insert                   (object, Py_ssize_t, object)       except -1
+    object              PyList_New                      (Py_ssize_t)
+    int                 PyList_Reverse                  (object)                    except -1
+    int                 PyList_SetSlice                 (object, Py_ssize_t, Py_ssize_t, object)  except -1
+    Py_ssize_t          PyList_Size                     (object)                    except -1
+    int                 PyList_Sort                     (object)                    except -1
+
+    ###############################################################################################
+    # long
+    ###############################################################################################
+    PyTypeObject PyLong_Type
+    int                 _PyLong_AsByteArray             (object, unsigned char *, size_t, int, int) except -1
+    object              _PyLong_FromByteArray           (unsigned char *, size_t, int, int)
+    size_t              _PyLong_NumBits                 (object)                    except -1
+    int                 _PyLong_Sign                    (object)                    # No error.
+    long                PyLong_AsLong                   (object)                    except? -1
+    long long           PyLong_AsLongLong               (object)                    except? -1
+    unsigned long       PyLong_AsUnsignedLong           (object)                    except? -1
+    unsigned long       PyLong_AsUnsignedLongMask       (object)                    except? -1
+    unsigned long long  PyLong_AsUnsignedLongLong       (object)                    except? -1
+    unsigned long long  PyLong_AsUnsignedLongLongMask   (object)                    except? -1
+    int                 PyLong_Check                    (object)                    # Always succeeds.
+    int                 PyLong_CheckExact               (object)                    # Always succeeds.
+    object              PyLong_FromDouble               (double)
+    object              PyLong_FromLong                 (long)
+    object              PyLong_FromLongLong             (long long)
+    object              PyLong_FromUnsignedLong         (unsigned long)
+    object              PyLong_FromUnsignedLongLong     (unsigned long long)
+    double              PyLong_AsDouble                 (object)                    except? -1
+    object              PyLong_FromVoidPtr              (void *)
+    void *              PyLong_AsVoidPtr                (object)                    except NULL
+    object              PyLong_FromString               (char *, char **, int)
+    object              PyLong_FromUnicode              (Py_UNICODE*, Py_ssize_t, int)
+
+    ###############################################################################################
+    # mapping
+    ###############################################################################################
+    int                 PyMapping_Check                 (object)                    # Always succeeds.
+    int                 PyMapping_DelItem               (object, object)            except -1
+    int                 PyMapping_DelItemString         (object, char *)            except -1
+    object              PyMapping_GetItemString         (object, char *)
+    int                 PyMapping_HasKey                (object, object)            # Always succeeds.
+    int                 PyMapping_HasKeyString          (object, char *)            # Always succeeds.
+    object              PyMapping_Items                 (object)
+    object              PyMapping_Keys                  (object)
+    Py_ssize_t          PyMapping_Length                (object)                    except -1
+    int                 PyMapping_SetItemString         (object, char *, object)    except -1
+    Py_ssize_t          PyMapping_Size                  (object)                    except -1
+    object              PyMapping_Values                (object)
+
+    ###############################################################################################
+    # mem
+    ###############################################################################################
+    void                PyMem_Free                      (void * p)
+    void *              PyMem_Malloc                    (size_t n)
+    void *              PyMem_Realloc                   (void *, size_t)
+
+    ###############################################################################################
+    # modsupport
+    ###############################################################################################
+    object              Py_BuildValue                   (char *, ...)
+    object              Py_VaBuildValue                 (char *, va_list)
+
+    ###############################################################################################
+    # number
+    ###############################################################################################
+    object              PyNumber_Absolute               (object)
+    object              PyNumber_Add                    (object, object)
+    object              PyNumber_And                    (object, object)
+    Py_ssize_t          PyNumber_AsSsize_t              (object, object)    except? -1
+    int                 PyNumber_Check                  (object)                    # Always succeeds.
+    # XXX: Pyrex doesn't support pointer to python object?
+    #int                 PyNumber_Coerce                 (object*, object*)          except -1
+    object              PyNumber_Divide                 (object, object)
+    object              PyNumber_Divmod                 (object, object)
+    object              PyNumber_Float                  (object)
+    object              PyNumber_FloorDivide            (object, object)
+    object              PyNumber_InPlaceAdd             (object, object)
+    object              PyNumber_InPlaceAnd             (object, object)
+    object              PyNumber_InPlaceDivide          (object, object)
+    object              PyNumber_InPlaceFloorDivide     (object, object)
+    object              PyNumber_InPlaceLshift          (object, object)
+    object              PyNumber_InPlaceMultiply        (object, object)
+    object              PyNumber_InPlaceOr              (object, object)
+    object              PyNumber_InPlacePower           (object, object, object)
+    object              PyNumber_InPlaceRemainder       (object, object)
+    object              PyNumber_InPlaceRshift          (object, object)
+    object              PyNumber_InPlaceSubtract        (object, object)
+    object              PyNumber_InPlaceTrueDivide      (object, object)
+    object              PyNumber_InPlaceXor             (object, object)
+    object              PyNumber_Int                    (object)
+    object              PyNumber_Invert                 (object)
+    object              PyNumber_Long                   (object)
+    object              PyNumber_Lshift                 (object, object)
+    object              PyNumber_Multiply               (object, object)
+    object              PyNumber_Negative               (object)
+    object              PyNumber_Or                     (object, object)
+    object              PyNumber_Positive               (object)
+    object              PyNumber_Power                  (object, object, object)
+    object              PyNumber_Remainder              (object, object)
+    object              PyNumber_Rshift                 (object, object)
+    object              PyNumber_Subtract               (object, object)
+    object              PyNumber_TrueDivide             (object, object)
+    object              PyNumber_Xor                    (object, object)
+
+    ###############################################################################################
+    # object
+    ###############################################################################################
+    int                 PyCallable_Check                (object)                    # Always succeeds.
+    int                 PyObject_AsFileDescriptor       (object)                    except -1
+    object              PyObject_Call                   (object, object, object)
+    object              PyObject_CallFunction           (object, char *, ...)
+    object              PyObject_CallFunctionObjArgs    (object, ...)
+    object              PyObject_CallMethod             (object, char *, char *, ...)
+    object              PyObject_CallMethodObjArgs      (object, object, ...)
+    object              PyObject_CallObject             (object, object)
+    int                 PyObject_Cmp                    (object, object, int *result)   except -1
+    # Use PyObject_Cmp instead.
+    #int                 PyObject_Compare                (object, object)
+    int                 PyObject_DelAttr                (object, object)            except -1
+    int                 PyObject_DelAttrString          (object, char *)            except -1
+    int                 PyObject_DelItem                (object, object)            except -1
+    int                 PyObject_DelItemString          (object, char *)            except -1
+    object              PyObject_Dir                    (object)
+    object              PyObject_GetAttr                (object, object)
+    object              PyObject_GetAttrString          (object, char *)
+    object              PyObject_GetItem                (object, object)
+    object              PyObject_GetIter                (object)
+    int                 PyObject_HasAttr                (object, object)            # Always succeeds.
+    int                 PyObject_HasAttrString          (object, char *)            # Always succeeds.
+    long                PyObject_Hash                   (object)                    except -1
+    int                 PyObject_IsInstance             (object, object)            except -1
+    int                 PyObject_IsSubclass             (object, object)            except -1
+    int                 PyObject_IsTrue                 (object)                    except -1
+    Py_ssize_t          PyObject_Length                 (object)                    except -1
+    int                 PyObject_Not                    (object)                    except -1
+    int                 PyObject_Print                  (object, FILE *, int)       except -1
+    object              PyObject_Repr                   (object)
+    object              PyObject_RichCompare            (object, object, int)
+    int                 PyObject_RichCompareBool        (object, object, int)       except -1
+    int                 PyObject_SetAttr                (object, object, object)    except -1
+    int                 PyObject_SetAttrString          (object, char *, object)    except -1
+    int                 PyObject_SetItem                (object, object, object)    except -1
+    Py_ssize_t          PyObject_Size                   (object)                    except -1
+    object              PyObject_Str                    (object)
+    object              PyObject_Type                   (object)
+    int                 PyObject_TypeCheck              (object, object)            # Always succeeds.
+    object              PyObject_Unicode                (object)
+
+    ###############################################################################################
+    # pyerrors
+    ###############################################################################################
+    int                 PyErr_BadArgument               ()
+    void                PyErr_BadInternalCall           ()
+    int                 PyErr_CheckSignals              ()
+    void                PyErr_Clear                     ()
+    int                 PyErr_ExceptionMatches          (object)
+    object              PyErr_Format                    (object, char *, ...)
+    int                 PyErr_GivenExceptionMatches     (object, object)
+    object              PyErr_NoMemory                  ()
+    object              PyErr_Occurred                  ()
+    void                PyErr_Restore                   (object, object, object)
+    object              PyErr_SetFromErrno              (object)
+    object              PyErr_SetFromErrnoWithFilename  (object, char *)
+    object              PyErr_SetFromErrnoWithFilenameObject    (object, object)
+    void                PyErr_SetInterrupt              ()
+    void                PyErr_SetNone                   (object)
+    void                PyErr_SetObject                 (object, object)
+    void                PyErr_SetString                 (object, char *)
+    int                 PyErr_Warn                      (object, char *)
+    int                 PyErr_WarnExplicit              (object, char *, char *, int, char *, object)
+    void                PyErr_WriteUnraisable           (object)
+
+    ###############################################################################################
+    # pyeval
+    # Be extremely careful with these functions.
+    ###############################################################################################
+
+    ctypedef struct PyThreadState:
+        PyFrameObject * frame
+        int recursion_depth
+        void * curexc_type, * curexc_value, * curexc_traceback
+        void * exc_type, * exc_value, * exc_traceback
+
+    void                PyEval_AcquireLock              ()
+    void                PyEval_ReleaseLock              ()
+    void                PyEval_AcquireThread            (PyThreadState *)
+    void                PyEval_ReleaseThread            (PyThreadState *)
+    PyThreadState*      PyEval_SaveThread               ()
+    void                PyEval_RestoreThread            (PyThreadState *)
+
+    ###############################################################################################
+    # pystate
+    # Be extremely careful with these functions.  Read PEP 311 for more detail.
+    ###############################################################################################
+
+    ctypedef int PyGILState_STATE
+    PyGILState_STATE    PyGILState_Ensure               ()
+    void                PyGILState_Release              (PyGILState_STATE)
+
+    ctypedef struct PyInterpreterState:
+        pass
+
+    PyThreadState*      PyThreadState_New               (PyInterpreterState *)
+    void                PyThreadState_Clear             (PyThreadState *)
+    void                PyThreadState_Delete            (PyThreadState *)
+    PyThreadState*      PyThreadState_Get               ()
+    PyThreadState*      PyThreadState_Swap              (PyThreadState *tstate)
+    # XXX: Borrowed reference.
+    #object              PyThreadState_GetDict          ()
+
+    ###############################################################################################
+    # run
+    # Functions for embedded interpreters are not included.
+    ###############################################################################################
+    ctypedef struct PyCompilerFlags:
+        int cf_flags
+
+    ctypedef struct _node:
+        pass
+
+    ctypedef void (*PyOS_sighandler_t)(int)
+
+    void                PyErr_Display                   (object, object, object)
+    void                PyErr_Print                     ()
+    void                PyErr_PrintEx                   (int)
+    char *              PyOS_Readline                   (FILE *, FILE *, char *)
+    PyOS_sighandler_t   PyOS_getsig                     (int)
+    PyOS_sighandler_t   PyOS_setsig                     (int, PyOS_sighandler_t)
+    _node *             PyParser_SimpleParseFile        (FILE *, char *, int)       except NULL
+    _node *             PyParser_SimpleParseFileFlags   (FILE *, char *, int,
+                                                         int)                       except NULL
+    _node *             PyParser_SimpleParseString      (char *, int)               except NULL
+    _node *             PyParser_SimpleParseStringFlagsFilename(char *, char *,
+                                                         int, int)                  except NULL
+    _node *             PyParser_SimpleParseStringFlags (char *, int, int)          except NULL
+    int                 PyRun_AnyFile                   (FILE *, char *)            except -1
+    int                 PyRun_AnyFileEx                 (FILE *, char *, int)       except -1
+    int                 PyRun_AnyFileExFlags            (FILE *, char *, int,
+                                                         PyCompilerFlags *)         except -1
+    int                 PyRun_AnyFileFlags              (FILE *, char *,
+                                                         PyCompilerFlags *)         except -1
+    object              PyRun_File                      (FILE *, char *, int,
+                                                         object, object)
+    object              PyRun_FileEx                    (FILE *, char *, int,
+                                                         object, object, int)
+    object              PyRun_FileExFlags               (FILE *, char *, int,
+                                                         object, object, int,
+                                                         PyCompilerFlags *)
+    object              PyRun_FileFlags                 (FILE *, char *, int,
+                                                         object, object,
+                                                         PyCompilerFlags *)
+    int                 PyRun_InteractiveLoop           (FILE *, char *)            except -1
+    int                 PyRun_InteractiveLoopFlags      (FILE *, char *,
+                                                         PyCompilerFlags *)         except -1
+    int                 PyRun_InteractiveOne            (FILE *, char *)            except -1
+    int                 PyRun_InteractiveOneFlags       (FILE *, char *,
+                                                         PyCompilerFlags *)         except -1
+    int                 PyRun_SimpleFile                (FILE *, char *)            except -1
+    int                 PyRun_SimpleFileEx              (FILE *, char *, int)       except -1
+    int                 PyRun_SimpleFileExFlags         (FILE *, char *, int,
+                                                         PyCompilerFlags *)         except -1
+    int                 PyRun_SimpleString              (char *)                    except -1
+    int                 PyRun_SimpleStringFlags         (char *, PyCompilerFlags *) except -1
+    object              PyRun_String                    (char *, int, object,
+                                                         object)
+    object              PyRun_StringFlags               (char *, int, object,
+                                                         object, PyCompilerFlags *)
+    int                 Py_AtExit                       (void (*func)())
+    object              Py_CompileString                (char *, char *, int)
+    object              Py_CompileStringFlags           (char *, char *, int, PyCompilerFlags *)
+    void                Py_Exit                         (int)
+    int                 Py_FdIsInteractive              (FILE *, char *)            # Always succeeds.
+    char *              Py_GetBuildInfo                 ()
+    char *              Py_GetCompiler                  ()
+    char *              Py_GetCopyright                 ()
+    char *              Py_GetExecPrefix                ()
+    char *              Py_GetPath                      ()
+    char *              Py_GetPlatform                  ()
+    char *              Py_GetPrefix                    ()
+    char *              Py_GetProgramFullPath           ()
+    char *              Py_GetProgramName               ()
+    char *              Py_GetPythonHome                ()
+    char *              Py_GetVersion                   ()
+
+    ###############################################################################################
+    # sequence
+    ###############################################################################################
+    int                 PySequence_Check                (object)                    # Always succeeds.
+    object              PySequence_Concat               (object, object)
+    int                 PySequence_Contains             (object, object)            except -1
+    Py_ssize_t          PySequence_Count                (object, object)            except -1
+    int                 PySequence_DelItem              (object, Py_ssize_t)        except -1
+    int                 PySequence_DelSlice             (object, Py_ssize_t, Py_ssize_t) except -1
+    object              PySequence_Fast                 (object, char *)
+    int                 PySequence_Fast_GET_SIZE        (object)
+    object              PySequence_GetItem              (object, Py_ssize_t)
+    object              PySequence_GetSlice             (object, Py_ssize_t, Py_ssize_t)
+    object              PySequence_ITEM                 (object, int)
+    int                 PySequence_In                   (object, object)            except -1
+    object              PySequence_InPlaceConcat        (object, object)
+    object              PySequence_InPlaceRepeat        (object, Py_ssize_t)
+    Py_ssize_t          PySequence_Index                (object, object)            except -1
+    Py_ssize_t          PySequence_Length               (object)                    except -1
+    object              PySequence_List                 (object)
+    object              PySequence_Repeat               (object, Py_ssize_t)
+    int                 PySequence_SetItem              (object, Py_ssize_t, object) except -1
+    int                 PySequence_SetSlice             (object, Py_ssize_t, Py_ssize_t, object) except -1
+    Py_ssize_t          PySequence_Size                 (object)                    except -1
+    object              PySequence_Tuple                (object)
+
+    ###############################################################################################
+    # string
+    ###############################################################################################
+    PyTypeObject PyString_Type
+    # Pyrex cannot support resizing because you have no choice but to use
+    # realloc which may call free() on the object, and there's no way to tell
+    # Pyrex to "forget" reference counting for the object.
+    #int                 _PyString_Resize                (object *, Py_ssize_t)             except -1
+    char *              PyString_AS_STRING              (object)                    # Always succeeds.
+    object              PyString_AsDecodedObject        (object, char *, char *)
+    object              PyString_AsEncodedObject        (object, char *, char *)
+    object              PyString_AsEncodedString        (object, char *, char *)
+    char *              PyString_AsString               (object)                    except NULL
+    int                 PyString_AsStringAndSize        (object, char **, Py_ssize_t *)    except -1
+    int                 PyString_Check                  (object)                    # Always succeeds.
+    int                 PyString_CHECK_INTERNED         (object)                    # Always succeeds.
+    int                 PyString_CheckExact             (object)                    # Always succeeds.
+    # XXX: Pyrex doesn't support pointer to a python object?
+    #void                PyString_Concat                 (object *, object)
+    # XXX: Pyrex doesn't support pointer to a python object?
+    #void                PyString_ConcatAndDel           (object *, object)
+    object              PyString_Decode                 (char *, int, char *, char *)
+    object              PyString_DecodeEscape           (char *, int, char *, int, char *)
+    object              PyString_Encode                 (char *, int, char *, char *)
+    object              PyString_Format                 (object, object)
+    object              PyString_FromFormat             (char*, ...)
+    object              PyString_FromFormatV            (char*, va_list)
+    object              PyString_FromString             (char *)
+    object              PyString_FromStringAndSize      (char *, Py_ssize_t)
+    Py_ssize_t          PyString_GET_SIZE               (object)                    # Always succeeds.
+    object              PyString_InternFromString       (char *)
+    # XXX: Pyrex doesn't support pointer to a python object?
+    #void                PyString_InternImmortal         (object*)
+    # XXX: Pyrex doesn't support pointer to a python object?
+    #void                PyString_InternInPlace          (object*)
+    object              PyString_Repr                   (object, int)
+    Py_ssize_t          PyString_Size                   (object)                    except -1
+
+    # Disgusting hack to access internal object values.
+    ctypedef struct PyStringObject:
+        int ob_refcnt
+        PyTypeObject * ob_type
+        int ob_size
+        long ob_shash
+        int ob_sstate
+        char * ob_sval
+
+    ###############################################################################################
+    # tuple
+    ###############################################################################################
+    PyTypeObject PyTuple_Type
+    # See PyString_Resize note about resizing.
+    #int                 _PyTuple_Resize                 (object*, Py_ssize_t)              except -1
+    int                 PyTuple_Check                   (object)                    # Always succeeds.
+    int                 PyTuple_CheckExact              (object)                    # Always succeeds.
+    Py_ssize_t          PyTuple_GET_SIZE                (object)                    # Always succeeds.
+    object              PyTuple_GetSlice                (object, Py_ssize_t, Py_ssize_t)
+    object              PyTuple_New                     (Py_ssize_t)
+    object              PyTuple_Pack                    (Py_ssize_t, ...)
+    Py_ssize_t          PyTuple_Size                    (object)                    except -1
+
+    ###############################################################################################
+    # Dangerous things!
+    # Do not use these unless you really, really know what you are doing.
+    ###############################################################################################
+    void                Py_INCREF                       (object)
+    void                Py_XINCREF                      (object)
+    void                Py_DECREF                       (object)
+    void                Py_XDECREF                      (object)
+    void                Py_CLEAR                        (object)
+
+    # XXX: Stolen reference.
+    void                PyTuple_SET_ITEM                (object, Py_ssize_t, value)
+    # XXX: Borrowed reference.
+    object              PyTuple_GET_ITEM                (object, Py_ssize_t)
+    # XXX: Borrowed reference.
+    object              PyTuple_GetItem                 (object, Py_ssize_t)
+    # XXX: Stolen reference.
+    int                 PyTuple_SetItem                 (object, Py_ssize_t, object)       except -1
+
+    # XXX: Steals reference.
+    int                 PyList_SetItem                  (object, Py_ssize_t, object)       except -1
+    # XXX: Borrowed reference
+    object              PyList_GetItem                  (object, Py_ssize_t)
+    # XXX: Borrowed reference, no NULL on error.
+    object              PyList_GET_ITEM                 (object, Py_ssize_t)
+    # XXX: Stolen reference.
+    void                PyList_SET_ITEM                 (object, Py_ssize_t, object)
+
+    # XXX: Borrowed reference.
+    object              PySequence_Fast_GET_ITEM        (object, Py_ssize_t)
+
+    # First parameter _must_ be a PyStringObject.
+    object              _PyString_Join                  (object, object)