From 5debe65fe1d4f86f3234aa681760f381833bfff1 Mon Sep 17 00:00:00 2001 From: Siu Kwan Lam Date: Fri, 21 Sep 2012 14:31:54 -0700 Subject: [PATCH] all llvmpy PyCapsule objects have a name. pycap_get should throw when PyCapsule_GetPointer returns NULL. --- llvm/wrap.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/llvm/wrap.h b/llvm/wrap.h index 509a898..a57a46e 100644 --- a/llvm/wrap.h +++ b/llvm/wrap.h @@ -91,11 +91,17 @@ typedef long long llvmwrap_ll; /* Type ctor/dtor */ /*===----------------------------------------------------------------------===*/ +static const char PYCAP_OBJECT_NAME[] = "llvm.wrap.h"; + // Cast python object to aTYPE template aTYPE pycap_get( PyObject* obj ) { - return static_cast ( PyCapsule_GetPointer(obj, NULL) ); + void *p = PyCapsule_GetPointer(obj, PYCAP_OBJECT_NAME); + if (!p){ + throw py_exception(); + } + return static_cast (p); } // Contruct python object to hold aTYPE pointer @@ -103,7 +109,7 @@ template PyObject* pycap_new( aTYPE p ) { if (p){ - return PyCapsule_New(p, NULL, NULL); + return PyCapsule_New(p, PYCAP_OBJECT_NAME, NULL); } Py_RETURN_NONE; }