all llvmpy PyCapsule objects have a name.

pycap_get should throw when PyCapsule_GetPointer returns NULL.
This commit is contained in:
Siu Kwan Lam 2012-09-21 14:31:54 -07:00
commit 5debe65fe1

View file

@ -91,11 +91,17 @@ typedef long long llvmwrap_ll;
/* Type ctor/dtor */ /* Type ctor/dtor */
/*===----------------------------------------------------------------------===*/ /*===----------------------------------------------------------------------===*/
static const char PYCAP_OBJECT_NAME[] = "llvm.wrap.h";
// Cast python object to aTYPE // Cast python object to aTYPE
template <typename aTYPE> template <typename aTYPE>
aTYPE pycap_get( PyObject* obj ) aTYPE pycap_get( PyObject* obj )
{ {
return static_cast<aTYPE> ( PyCapsule_GetPointer(obj, NULL) ); void *p = PyCapsule_GetPointer(obj, PYCAP_OBJECT_NAME);
if (!p){
throw py_exception();
}
return static_cast<aTYPE> (p);
} }
// Contruct python object to hold aTYPE pointer // Contruct python object to hold aTYPE pointer
@ -103,7 +109,7 @@ template <typename aTYPE>
PyObject* pycap_new( aTYPE p ) PyObject* pycap_new( aTYPE p )
{ {
if (p){ if (p){
return PyCapsule_New(p, NULL, NULL); return PyCapsule_New(p, PYCAP_OBJECT_NAME, NULL);
} }
Py_RETURN_NONE; Py_RETURN_NONE;
} }