From 2c42b82799168efb250c00c332d5fa243986410f Mon Sep 17 00:00:00 2001 From: AndrewBC Date: Sun, 12 Jun 2011 05:54:08 -0500 Subject: [PATCH] Moar py3k updates... Still segfaulting, in PyArg_ParseTuple of _wLLVMLoadLibraryPermanently for some reason. :| --- llvm/_core.c | 51 ++++++++++++++++++++++++++++++-------------------- llvm/extra.cpp | 8 +++++++- llvm/wrap.h | 32 +++++++++++++++---------------- 3 files changed, 54 insertions(+), 37 deletions(-) diff --git a/llvm/_core.c b/llvm/_core.c index b844561..b9ce878 100644 --- a/llvm/_core.c +++ b/llvm/_core.c @@ -66,7 +66,7 @@ _wLLVMModuleCreateWithName(PyObject *self, PyObject *args) const char *s; LLVMModuleRef module; - if (!PyArg_ParseTuple(args, "s", &s)) + if (!PyArg_ParseTuple(args, "y#", &s)) return NULL; module = LLVMModuleCreateWithName(s); @@ -101,10 +101,10 @@ _wLLVMVerifyModule(PyObject *self, PyObject *args) (void) LLVMVerifyModule(m, LLVMReturnStatusAction, &outmsg); if (outmsg) { - ret = PyString_FromString(outmsg); + ret = PyBytes_FromString(outmsg); LLVMDisposeMessage(outmsg); } else { - ret = PyString_FromString(""); + ret = PyBytes_FromString(""); } return ret; @@ -124,14 +124,14 @@ _get_asm_or_bc(asm_or_bc_fn_t fn, PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "O", &obj)) return NULL; - start = PyString_AsString(obj); - len = PyString_Size(obj); + start = PyBytes_AsString(obj); + len = PyBytes_Size(obj); outmsg = 0; m = fn(start, len, &outmsg); if (!m) { if (outmsg) { - ret = PyString_FromString(outmsg); + ret = PyBytes_FromString(outmsg); LLVMDisposeMessage(outmsg); return ret; } else { @@ -168,7 +168,7 @@ _wLLVMGetBitcodeFromModule(PyObject *self, PyObject *args) if (!(bytes = LLVMGetBitcodeFromModule(m, &len))) Py_RETURN_NONE; - ret = PyString_FromStringAndSize((char *)bytes, (Py_ssize_t)len); + ret = PyBytes_FromStringAndSize((char *)bytes, (Py_ssize_t)len); LLVMDisposeMessage((char *)bytes); return ret; } @@ -193,10 +193,10 @@ _wLLVMLinkModules(PyObject *self, PyObject *args) if (!LLVMLinkModules(dest, src, &errmsg)) { if (errmsg) { - ret = PyString_FromString(errmsg); + ret = PyBytes_FromString(errmsg); LLVMDisposeMessage(errmsg); } else { - ret = PyString_FromString("Link error"); + ret = PyBytes_FromString("Link error"); } return ret; } @@ -430,7 +430,7 @@ _wLLVMConstString(PyObject *self, PyObject *args) int dont_null_terminate; LLVMValueRef val; - if (!PyArg_ParseTuple(args, "si", &s, &dont_null_terminate)) + if (!PyArg_ParseTuple(args, "y#i", &s, &dont_null_terminate)) return NULL; val = LLVMConstString(s, strlen(s), dont_null_terminate); @@ -647,7 +647,7 @@ _wLLVMBuildInvoke(PyObject *self, PyObject *args) LLVMBasicBlockRef then_blk, catch_blk; LLVMValueRef inst; - if (!PyArg_ParseTuple(args, "OOOOOs", &obj1, &obj2, &obj3, &obj4, &obj5, &name)) + if (!PyArg_ParseTuple(args, "OOOOOy#", &obj1, &obj2, &obj3, &obj4, &obj5, &name)) return NULL; #ifdef LLVM_PY_USE_PYCAPSULE @@ -763,13 +763,13 @@ _wLLVMCreateMemoryBufferWithContentsOfFile(PyObject *self, PyObject *args) char *outmsg; PyObject *ret; - if (!PyArg_ParseTuple(args, "s", &path)) + if (!PyArg_ParseTuple(args, "y#", &path)) return NULL; if (!LLVMCreateMemoryBufferWithContentsOfFile(path, &ref, &outmsg)) { ret = ctor_LLVMMemoryBufferRef(ref); } else { - ret = PyString_FromString(outmsg); + ret = PyBytes_FromString(outmsg); LLVMDisposeMessage(outmsg); } @@ -786,7 +786,7 @@ _wLLVMCreateMemoryBufferWithSTDIN(PyObject *self, PyObject *args) if (!LLVMCreateMemoryBufferWithSTDIN(&ref, &outmsg)) { ret = ctor_LLVMMemoryBufferRef(ref); } else { - ret = PyString_FromString(outmsg); + ret = PyBytes_FromString(outmsg); LLVMDisposeMessage(outmsg); } @@ -921,7 +921,7 @@ _wLLVMTargetDataAsString(PyObject *self, PyObject *args) return NULL; tdrep = LLVMCopyStringRepOfTargetData(td); - ret = PyString_FromString(tdrep); + ret = PyBytes_FromString(tdrep); LLVMDisposeMessage(tdrep); return ret; } @@ -979,7 +979,7 @@ _wLLVMCreateExecutionEngine(PyObject *self, PyObject *args) error = LLVMCreateJITCompilerForModule(&ee, mod, 1 /*fast*/, &outmsg); if (error) { - ret = PyString_FromString(outmsg); + ret = PyBytes_FromString(outmsg); LLVMDisposeMessage(outmsg); } else { ret = ctor_LLVMExecutionEngineRef(ee); @@ -1043,10 +1043,10 @@ _wLLVMRemoveModule2(PyObject *self, PyObject *args) ret = ctor_LLVMModuleRef(mod_new); } else { if (outmsg) { - ret = PyString_FromString(outmsg); + ret = PyBytes_FromString(outmsg); LLVMDisposeMessage(outmsg); } else { - ret = PyString_FromString("error"); + ret = PyBytes_FromString("error"); } } @@ -1216,17 +1216,19 @@ _wrap_objintlist2obj(LLVMGetIntrinsic, LLVMModuleRef, LLVMTypeRef, static PyObject * _wLLVMLoadLibraryPermanently(PyObject *self, PyObject *args) { + // XXX TODO: Figure out why this is segfaulting const char *filename; char *outmsg; PyObject *ret; - if (!PyArg_ParseTuple(args, "s", &filename)) + if (!PyArg_ParseTuple(args, "y#", &filename)) { return NULL; + } outmsg = 0; if (!LLVMLoadLibraryPermanently(filename, &outmsg)) { if (outmsg) { - ret = PyString_FromString(outmsg); + ret = PyBytes_FromString(outmsg); LLVMDisposeMessage(outmsg); return ret; } @@ -1256,9 +1258,18 @@ _wPyCObjectVoidPtrToPyLong(PyObject *self, PyObject *args) /* Python member method table */ /*===----------------------------------------------------------------------===*/ +#ifdef LLVM_PY_USE_PYCAPSULE + +#define _method( func ) { # func , ( PyCFunction )_w ## func , METH_VARARGS , NULL }, +#define _pass( P ) _method( LLVMAdd ## P ## Pass ) + +#else + #define _method( func ) { # func , _w ## func , METH_VARARGS }, #define _pass( P ) _method( LLVMAdd ## P ## Pass ) +#endif + static PyMethodDef core_methods[] = { /* Modules */ diff --git a/llvm/extra.cpp b/llvm/extra.cpp index 8b990f9..bd1f5ab 100644 --- a/llvm/extra.cpp +++ b/llvm/extra.cpp @@ -433,16 +433,22 @@ unsigned char *LLVMGetBitcodeFromModule(LLVMModuleRef module, unsigned *lenp) /* Return 0 on failure (with errmsg filled in), 1 on success. */ unsigned LLVMLoadLibraryPermanently(const char* filename, char **errmsg) { + printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1"); assert(filename); + printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2"); assert(errmsg); + printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3"); /* Note: the LLVM API returns true on failure. Don't ask why. */ std::string msg; + printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4"); if (llvm::sys::DynamicLibrary::LoadLibraryPermanently(filename, &msg)) { + printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5"); *errmsg = strdup(msg.c_str()); + printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@6"); return 0; } - + printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7"); return 1; } diff --git a/llvm/wrap.h b/llvm/wrap.h index aee1c49..cfd294f 100644 --- a/llvm/wrap.h +++ b/llvm/wrap.h @@ -36,7 +36,7 @@ #define LLVM_PY_WRAP_H /* Project-wide setting */ -#if (PY_MAJOR_VERSION >= 3) +#if PY_MAJOR_VERSION >= 3 #define LLVM_PY_USE_PYCAPSULE #endif @@ -135,7 +135,7 @@ PyObject *make_list_from_LLVMValueRef_array(LLVMValueRef *p, unsigned n); *** PyCapsule Calls ****************************************************************************** *****************************************************************************/ - +#error "Capsule @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" /** * Wrap LLVM functions of the type @@ -330,7 +330,7 @@ _w ## func (PyObject *self, PyObject *args) \ { \ const char *arg1; \ \ - if (!PyArg_ParseTuple(args, "s", &arg1)) \ + if (!PyArg_ParseTuple(args, "y#", &arg1)) \ return NULL; \ \ return ctor_ ## outtype ( func (arg1)); \ @@ -363,7 +363,7 @@ _w ## func (PyObject *self, PyObject *args) \ if (!(arg1 = ( intype1 )get_object_arg(args))) \ return NULL; \ \ - return PyString_FromString( func (arg1)); \ + return PyBytes_FromString( func (arg1)); \ } /** @@ -395,7 +395,7 @@ _w ## func (PyObject *self, PyObject *args) \ const char *arg2; \ intype1 arg1; \ \ - if (!PyArg_ParseTuple(args, "Os", &obj1, &arg2)) \ + if (!PyArg_ParseTuple(args, "Oy#", &obj1, &arg2)) \ return NULL; \ \ arg1 = ( intype1 ) PyCapsule_GetPointer(obj1, NULL); \ @@ -416,7 +416,7 @@ _w ## func (PyObject *self, PyObject *args) \ const char *arg2; \ intype1 arg1; \ \ - if (!PyArg_ParseTuple(args, "Os", &obj1, &arg2)) \ + if (!PyArg_ParseTuple(args, "Oy#", &obj1, &arg2)) \ return NULL; \ \ arg1 = ( intype1 ) PyCapsule_GetPointer(obj1, NULL); \ @@ -479,7 +479,7 @@ _w ## func (PyObject *self, PyObject *args) \ intype2 arg2; \ const char *arg3; \ \ - if (!PyArg_ParseTuple(args, "OOs", &obj1, &obj2, &arg3)) \ + if (!PyArg_ParseTuple(args, "OOy#", &obj1, &obj2, &arg3)) \ return NULL; \ \ arg1 = ( intype1 ) PyCapsule_GetPointer(obj1, NULL); \ @@ -588,7 +588,7 @@ _w ## func (PyObject *self, PyObject *args) \ const char *arg2; \ intype3 arg3; \ \ - if (!PyArg_ParseTuple(args, "OsO", &obj1, &arg2, &obj3)) \ + if (!PyArg_ParseTuple(args, "Oy#O", &obj1, &arg2, &obj3)) \ return NULL; \ \ arg1 = ( intype1 ) PyCapsule_GetPointer(obj1, NULL); \ @@ -612,7 +612,7 @@ _w ## func (PyObject *self, PyObject *args) \ int arg3; \ const char *arg4; \ \ - if (!PyArg_ParseTuple(args, "OOis", &obj1, &obj2, &arg3, &arg4)) \ + if (!PyArg_ParseTuple(args, "OOiy#", &obj1, &obj2, &arg3, &arg4)) \ return NULL; \ \ arg1 = ( intype1 ) PyCapsule_GetPointer(obj1, NULL); \ @@ -635,7 +635,7 @@ _w ## func (PyObject *self, PyObject *args) \ intype3 arg3; \ const char *arg4; \ \ - if (!PyArg_ParseTuple(args, "OOOs", &obj1, &obj2, &obj3, &arg4)) \ + if (!PyArg_ParseTuple(args, "OOOy#", &obj1, &obj2, &obj3, &arg4)) \ return NULL; \ \ arg1 = ( intype1 ) PyCapsule_GetPointer(obj1, NULL); \ @@ -709,7 +709,7 @@ _w ## func (PyObject *self, PyObject *args) \ intype4 arg4; \ const char *arg5; \ \ - if (!PyArg_ParseTuple(args, "OOOOs", &obj1, &obj2, &obj3, &obj4, &arg5)) \ + if (!PyArg_ParseTuple(args, "OOOOy#", &obj1, &obj2, &obj3, &obj4, &arg5)) \ return NULL; \ \ arg1 = ( intype1 ) PyCapsule_GetPointer(obj1, NULL); \ @@ -735,7 +735,7 @@ _w ## func (PyObject *self, PyObject *args) \ intype4 arg4; \ const char *arg5; \ \ - if (!PyArg_ParseTuple(args, "OiOOs", &obj1, &arg2, &obj3, &obj4, &arg5)) \ + if (!PyArg_ParseTuple(args, "OiOOy#", &obj1, &arg2, &obj3, &obj4, &arg5)) \ return NULL; \ \ arg1 = ( intype1 ) PyCapsule_GetPointer(obj1, NULL); \ @@ -931,7 +931,7 @@ _w ## func (PyObject *self, PyObject *args) \ unsigned arg3n; \ outtype ret; \ \ - if (!PyArg_ParseTuple(args, "OOOs", &obj1, &obj2, &obj3, &arg4))\ + if (!PyArg_ParseTuple(args, "OOOy#", &obj1, &obj2, &obj3, &arg4))\ return NULL; \ \ arg1 = ( intype1 ) PyCapsule_GetPointer(obj1, NULL); \ @@ -963,7 +963,7 @@ _w ## func (PyObject *self, PyObject *args) \ return NULL; \ \ val = func (arg1); \ - ret = PyString_FromString(val); \ + ret = PyBytes_FromString(val); \ LLVMDisposeMessage(val); \ return ret; \ } @@ -1201,7 +1201,7 @@ _w ## func (PyObject *self, PyObject *args) \ if (!(arg1 = ( intype1 )get_object_arg(args))) \ return NULL; \ \ - return PyString_FromString( func (arg1)); \ + return PyBytes_FromString( func (arg1)); \ } /** @@ -1800,7 +1800,7 @@ _w ## func (PyObject *self, PyObject *args) \ return NULL; \ \ val = func (arg1); \ - ret = PyString_FromString(val); \ + ret = PyBytes_FromString(val); \ LLVMDisposeMessage(val); \ return ret; \ }