From d270f47328820bfa7da6477a142555d4ebb646b9 Mon Sep 17 00:00:00 2001 From: Siu Kwan Lam Date: Sun, 24 Feb 2013 13:21:42 -0600 Subject: [PATCH] Fix writing to file-like obj in python3.3 --- llvmpy/include/llvm_binding/conversion.h | 2 +- llvmpy/include/llvm_binding/extra.h | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/llvmpy/include/llvm_binding/conversion.h b/llvmpy/include/llvm_binding/conversion.h index abc3749..1c629b7 100644 --- a/llvmpy/include/llvm_binding/conversion.h +++ b/llvmpy/include/llvm_binding/conversion.h @@ -9,7 +9,7 @@ int py_bytes_to(PyObject *bytesobj, llvm::StringRef &strref){ // type check if (!PyBytes_Check(bytesobj)) { // raises TypeError - PyErr_SetString(PyExc_TypeError, "Expecting a str"); + PyErr_SetString(PyExc_TypeError, "Expecting a bytes"); return 0; } // get len and buffer diff --git a/llvmpy/include/llvm_binding/extra.h b/llvmpy/include/llvm_binding/extra.h index 3874bb3..b33a8a0 100644 --- a/llvmpy/include/llvm_binding/extra.h +++ b/llvmpy/include/llvm_binding/extra.h @@ -477,9 +477,13 @@ PyObject* llvm_ParseBitCodeFile(llvm::StringRef Buf, llvm::LLVMContext& Ctx, if (FObj) { std::string ErrStr; M = ParseBitcodeFile(MB, Ctx, &ErrStr); - if (-1 == PyFile_WriteString(ErrStr.c_str(), FObj)) { + auto_pyobject buf = PyBytes_FromString(ErrStr.c_str()); + if (NULL == PyObject_CallMethod(FObj, "write", "O", *buf)){ return NULL; } +// if (-1 == PyFile_WriteString(ErrStr.c_str(), FObj)) { +// return NULL; +// } } else { M = ParseBitcodeFile(MB, Ctx); } @@ -497,9 +501,8 @@ PyObject* llvm_WriteBitcodeToFile(const llvm::Module *M, PyObject* FObj) llvm::WriteBitcodeToFile(M, rso); rso.flush(); StringRef ref = rso.str(); - PyObject* buf = PyBytes_FromStringAndSize(ref.data(), ref.size()); - puts(PyString_AsString(PyObject_Str(PyObject_Type(buf)))); - return PyObject_CallMethod(FObj, "write", "O", buf); + auto_pyobject buf = PyBytes_FromStringAndSize(ref.data(), ref.size()); + return PyObject_CallMethod(FObj, "write", "O", *buf); } static