Use handle::is_none() instead of raw ptrs

This commit is contained in:
Ivan Smirnov 2016-08-29 02:38:47 +01:00
parent f5e8b6d9cb
commit 984c762485
3 changed files with 13 additions and 13 deletions

View File

@ -155,7 +155,7 @@ public:
PYBIND11_NOINLINE bool load(handle src, bool convert) { PYBIND11_NOINLINE bool load(handle src, bool convert) {
if (!src || !typeinfo) if (!src || !typeinfo)
return false; return false;
if (src.ptr() == Py_None) { if (src.is_none()) {
value = nullptr; value = nullptr;
return true; return true;
} else if (PyType_IsSubtype(Py_TYPE(src.ptr()), typeinfo->type)) { } else if (PyType_IsSubtype(Py_TYPE(src.ptr()), typeinfo->type)) {
@ -180,7 +180,7 @@ public:
const void *existing_holder = nullptr) { const void *existing_holder = nullptr) {
void *src = const_cast<void *>(_src); void *src = const_cast<void *>(_src);
if (src == nullptr) if (src == nullptr)
return handle(Py_None).inc_ref(); return none();
auto &internals = get_internals(); auto &internals = get_internals();
@ -408,7 +408,7 @@ template <> class type_caster<void_type> {
public: public:
bool load(handle, bool) { return false; } bool load(handle, bool) { return false; }
static handle cast(void_type, return_value_policy /* policy */, handle /* parent */) { static handle cast(void_type, return_value_policy /* policy */, handle /* parent */) {
return handle(Py_None).inc_ref(); return none();
} }
PYBIND11_TYPE_CASTER(void_type, _("None")); PYBIND11_TYPE_CASTER(void_type, _("None"));
}; };
@ -420,7 +420,7 @@ public:
bool load(handle h, bool) { bool load(handle h, bool) {
if (!h) { if (!h) {
return false; return false;
} else if (h.ptr() == Py_None) { } else if (h.is_none()) {
value = nullptr; value = nullptr;
return true; return true;
} }
@ -446,7 +446,7 @@ public:
if (ptr) if (ptr)
return capsule(ptr).release(); return capsule(ptr).release();
else else
return handle(Py_None).inc_ref(); return none();
} }
template <typename T> using cast_op_type = void*&; template <typename T> using cast_op_type = void*&;
@ -558,12 +558,12 @@ protected:
template <> class type_caster<char> : public type_caster<std::string> { template <> class type_caster<char> : public type_caster<std::string> {
public: public:
bool load(handle src, bool convert) { bool load(handle src, bool convert) {
if (src.ptr() == Py_None) return true; if (src.is_none()) return true;
return type_caster<std::string>::load(src, convert); return type_caster<std::string>::load(src, convert);
} }
static handle cast(const char *src, return_value_policy /* policy */, handle /* parent */) { static handle cast(const char *src, return_value_policy /* policy */, handle /* parent */) {
if (src == nullptr) return handle(Py_None).inc_ref(); if (src == nullptr) return none();
return PyUnicode_FromString(src); return PyUnicode_FromString(src);
} }
@ -581,12 +581,12 @@ public:
template <> class type_caster<wchar_t> : public type_caster<std::wstring> { template <> class type_caster<wchar_t> : public type_caster<std::wstring> {
public: public:
bool load(handle src, bool convert) { bool load(handle src, bool convert) {
if (src.ptr() == Py_None) return true; if (src.is_none()) return true;
return type_caster<std::wstring>::load(src, convert); return type_caster<std::wstring>::load(src, convert);
} }
static handle cast(const wchar_t *src, return_value_policy /* policy */, handle /* parent */) { static handle cast(const wchar_t *src, return_value_policy /* policy */, handle /* parent */) {
if (src == nullptr) return handle(Py_None).inc_ref(); if (src == nullptr) return none();
return PyUnicode_FromWideChar(src, (ssize_t) wcslen(src)); return PyUnicode_FromWideChar(src, (ssize_t) wcslen(src));
} }
@ -757,7 +757,7 @@ public:
bool load(handle src, bool convert) { bool load(handle src, bool convert) {
if (!src || !typeinfo) { if (!src || !typeinfo) {
return false; return false;
} else if (src.ptr() == Py_None) { } else if (src.is_none()) {
value = nullptr; value = nullptr;
return true; return true;
} else if (PyType_IsSubtype(Py_TYPE(src.ptr()), typeinfo->type)) { } else if (PyType_IsSubtype(Py_TYPE(src.ptr()), typeinfo->type)) {

View File

@ -20,7 +20,7 @@ template <typename Return, typename... Args> struct type_caster<std::function<Re
typedef typename std::conditional<std::is_same<Return, void>::value, void_type, Return>::type retval_type; typedef typename std::conditional<std::is_same<Return, void>::value, void_type, Return>::type retval_type;
public: public:
bool load(handle src_, bool) { bool load(handle src_, bool) {
if (src_.ptr() == Py_None) if (src_.is_none())
return true; return true;
src_ = detail::get_function(src_); src_ = detail::get_function(src_);
@ -62,7 +62,7 @@ public:
template <typename Func> template <typename Func>
static handle cast(Func &&f_, return_value_policy policy, handle /* parent */) { static handle cast(Func &&f_, return_value_policy policy, handle /* parent */) {
if (!f_) if (!f_)
return handle(Py_None).inc_ref(); return none();
auto result = f_.template target<Return (*)(Args...)>(); auto result = f_.template target<Return (*)(Args...)>();
if (result) if (result)

View File

@ -1143,7 +1143,7 @@ inline void keep_alive_impl(handle nurse, handle patient) {
if (!nurse || !patient) if (!nurse || !patient)
pybind11_fail("Could not activate keep_alive!"); pybind11_fail("Could not activate keep_alive!");
if (patient.ptr() == Py_None || nurse.ptr() == Py_None) if (patient.is_none() || nurse.is_none())
return; /* Nothing to keep alive or nothing to be kept alive by */ return; /* Nothing to keep alive or nothing to be kept alive by */
cpp_function disable_lifesupport( cpp_function disable_lifesupport(