diff --git a/CHANGELOG b/CHANGELOG index 8b89698..45d6a5f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,8 @@ +2014-04-28 0.12.5: +--------------------- + * Fixes memory leaks (#92) + * Fixes tarball (#99) + 2014-03-20 0.12.4: --------------------- * Add dylib_import_library and friends diff --git a/MANIFEST.in b/MANIFEST.in index 295794c..25a211d 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,6 @@ -include CHANGELOG LICENSE README setup.py MANIFEST.in +include CHANGELOG LICENSE README.rst setup.py MANIFEST.in versioneer.py recursive-include llvm * +recursive-include llvmpy * recursive-include www * recursive-include test * recursive-include tools * diff --git a/README.rst b/README.rst index 0fbcd24..a1abf84 100644 --- a/README.rst +++ b/README.rst @@ -30,10 +30,13 @@ Quickstart to separate your custom build from the default system package. Please replace ``LLVM_INSTALL_PATH`` with your own path. -3. Run ``REQUIRES_RTTI=1 make`` to build. +3. Run ``REQUIRES_RTTI=1 make install`` to build and install. **Note**: With LLVM 3.2, the default build configuration has C++ RTTI disabled. However, llvmpy requires RTTI. + + **Note**: Use ``make -j2 install`` to enable concurrent build. + Replace ``2`` with the actual number of processor you have. 4. Get llvm-py and install it:: diff --git a/llvmpy/include/llvm_binding/extra.h b/llvmpy/include/llvm_binding/extra.h index a689b9a..bdd86d3 100644 --- a/llvmpy/include/llvm_binding/extra.h +++ b/llvmpy/include/llvm_binding/extra.h @@ -186,8 +186,8 @@ PyObject* iterator_to_pylist_deref(iterator begin, iterator end, { PyObject* list = PyList_New(0); for(; begin != end; ++begin) { - PyObject* cap = pycapsule_new(&*begin, capsuleName, className); - PyList_Append(list, cap); + auto_pyobject cap = pycapsule_new(&*begin, capsuleName, className); + PyList_Append(list, *cap); } return list; } @@ -198,8 +198,8 @@ PyObject* iterator_to_pylist(iterator begin, iterator end, { PyObject* list = PyList_New(0); for(; begin != end; ++begin) { - PyObject* cap = pycapsule_new(*begin, capsuleName, className); - PyList_Append(list, cap); + auto_pyobject cap = pycapsule_new(*begin, capsuleName, className); + PyList_Append(list, *cap); } return list; } @@ -575,11 +575,11 @@ PyObject* TargetMachine_addPassesToEmitFile( bool status = TM->addPassesToEmitFile(PM, fso, FTy, disableVerify); if (status) { StringRef sr = rso.str(); - PyObject* buf = PyString_FromStringAndSize(sr.data(), sr.size()); + auto_pyobject buf = PyString_FromStringAndSize(sr.data(), sr.size()); if (!buf) { return NULL; } - if (-1 == PyFile_WriteObject(buf, Out, Py_PRINT_RAW)){ + if (-1 == PyFile_WriteObject(*buf, Out, Py_PRINT_RAW)){ return NULL; } Py_RETURN_TRUE; @@ -891,7 +891,8 @@ public: inline virtual void passEnumerate(const llvm::PassInfo * pass_info){ PyObject* passArg = PyString_FromString(pass_info->getPassArgument()); PyObject* passName = PyString_FromString(pass_info->getPassName()); - PyList_Append(List, Py_BuildValue("(OO)", passArg, passName)); + auto_pyobject pair = Py_BuildValue("(OO)", passArg, passName); + PyList_Append(List, *pair); } };