Commit f6159408 authored by gabrieldemarmiesse's avatar gabrieldemarmiesse

Removed an outdated pxd, added a declaration of exc.pxd and made two examples for exceptions.

parent 7f3987e0
# 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 succeeds.
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)
...@@ -153,6 +153,13 @@ cdef extern from "Python.h": ...@@ -153,6 +153,13 @@ cdef extern from "Python.h":
# PyErr_SetFromErrno(type);" when the system call returns an # PyErr_SetFromErrno(type);" when the system call returns an
# error. # error.
PyObject* PyErr_SetFromErrnoWithFilenameObject(object type, object filenameObject) except NULL
# Similar to PyErr_SetFromErrno(), with the additional behavior
# that if filenameObject is not NULL, it is passed to the
# constructor of type as a third parameter.
# In the case of OSError exception, this is used to define
# the filename attribute of the exception instance.
PyObject* PyErr_SetFromErrnoWithFilename(object type, char *filename) except NULL PyObject* PyErr_SetFromErrnoWithFilename(object type, char *filename) except NULL
# Return value: Always NULL. Similar to PyErr_SetFromErrno(), # Return value: Always NULL. Similar to PyErr_SetFromErrno(),
# with the additional behavior that if filename is not NULL, it is # with the additional behavior that if filename is not NULL, it is
......
...@@ -4,4 +4,4 @@ cdef extern from "string.h": ...@@ -4,4 +4,4 @@ cdef extern from "string.h":
cdef char* data = "hfvcakdfagbcffvschvxcdfgccbcfhvgcsnfxjh" cdef char* data = "hfvcakdfagbcffvschvxcdfgccbcfhvgcsnfxjh"
cdef char* pos = strstr(needle='akd', haystack=data) cdef char* pos = strstr(needle='akd', haystack=data)
print(pos != NULL) print(pos is not NULL)
from libc.stdio cimport FILE, fopen from libc.stdio cimport FILE, fopen
from libc.stdlib cimport malloc, free
from cpython.exc cimport PyErr_SetFromErrnoWithFilenameObject
def open_file():
def main():
cdef FILE* p cdef FILE* p
p = fopen("spam.txt", "r") p = fopen("spam.txt", "r")
if p == NULL: if p is NULL:
raise OSError("Couldn't open the spam file") PyErr_SetFromErrnoWithFilenameObject(OSError, "spam.txt")
# ... ...
def allocating_memory(number=10):
cdef double *my_array = <double *> malloc(number * sizeof(double))
if not my_array:
raise MemoryError()
...
free(my_array)
...@@ -419,7 +419,7 @@ compatible types.:: ...@@ -419,7 +419,7 @@ compatible types.::
cdef void* ptr cdef void* ptr
def __dealloc__(self): def __dealloc__(self):
if self.ptr != NULL: if self.ptr is not NULL:
free(self.ptr) free(self.ptr)
@staticmethod @staticmethod
......
...@@ -131,7 +131,7 @@ It currently supports OpenMP, but later on more backends might be supported. ...@@ -131,7 +131,7 @@ It currently supports OpenMP, but later on more backends might be supported.
with nogil, parallel(): with nogil, parallel():
local_buf = <int *> malloc(sizeof(int) * size) local_buf = <int *> malloc(sizeof(int) * size)
if local_buf == NULL: if local_buf is NULL:
abort() abort()
# populate our local buffer in a sequential loop # populate our local buffer in a sequential loop
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment