chore: add err guard to capsule destructor and add a move to iostream (#3958)

* Add err guard to capsule destructor

* only uses ostream currently

* can these be noexcept

* Add back header

* fix for older compilers

* This should at least be noexcept

* Add missing move

* Apparently not noexcept for old llvm
This commit is contained in:
Aaron Gokaslan 2022-05-27 14:32:57 -04:00 committed by GitHub
parent 8d14e666e3
commit 68f8010500
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 3 additions and 1 deletions

View File

@ -100,7 +100,7 @@ private:
if (size > remainder) { if (size > remainder) {
str line(pbase(), size - remainder); str line(pbase(), size - remainder);
pywrite(line); pywrite(std::move(line));
pyflush(); pyflush();
} }

View File

@ -1581,6 +1581,8 @@ public:
capsule(const void *value, void (*destructor)(void *)) { capsule(const void *value, void (*destructor)(void *)) {
m_ptr = PyCapsule_New(const_cast<void *>(value), nullptr, [](PyObject *o) { m_ptr = PyCapsule_New(const_cast<void *>(value), nullptr, [](PyObject *o) {
// guard if destructor called while err indicator is set
error_scope error_guard;
auto destructor = reinterpret_cast<void (*)(void *)>(PyCapsule_GetContext(o)); auto destructor = reinterpret_cast<void (*)(void *)>(PyCapsule_GetContext(o));
if (destructor == nullptr) { if (destructor == nullptr) {
if (PyErr_Occurred()) { if (PyErr_Occurred()) {