mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-26 15:12:01 +00:00
Remove handle_type_name
default implementation, add explicit specializations, adjust tests.
The primary change is: ```diff template <typename T> -struct handle_type_name { - static constexpr auto name = const_name<T>(); -}; +struct handle_type_name; + ``` All other changes are adjustments to restore successful build & test.
This commit is contained in:
parent
66ee131d84
commit
d14d91e02a
@ -872,9 +872,8 @@ template <typename base, typename deleter>
|
|||||||
struct is_holder_type<base, std::unique_ptr<base, deleter>> : std::true_type {};
|
struct is_holder_type<base, std::unique_ptr<base, deleter>> : std::true_type {};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct handle_type_name {
|
struct handle_type_name;
|
||||||
static constexpr auto name = const_name<T>();
|
|
||||||
};
|
|
||||||
template <>
|
template <>
|
||||||
struct handle_type_name<object> {
|
struct handle_type_name<object> {
|
||||||
static constexpr auto name = const_name("object");
|
static constexpr auto name = const_name("object");
|
||||||
@ -968,6 +967,18 @@ struct handle_type_name<type> {
|
|||||||
static constexpr auto name = const_name("type");
|
static constexpr auto name = const_name("type");
|
||||||
};
|
};
|
||||||
template <>
|
template <>
|
||||||
|
struct handle_type_name<capsule> {
|
||||||
|
static constexpr auto name = const_name("capsule");
|
||||||
|
};
|
||||||
|
template <>
|
||||||
|
struct handle_type_name<ellipsis> {
|
||||||
|
static constexpr auto name = const_name("ellipsis");
|
||||||
|
};
|
||||||
|
template <>
|
||||||
|
struct handle_type_name<weakref> {
|
||||||
|
static constexpr auto name = const_name("weakref");
|
||||||
|
};
|
||||||
|
template <>
|
||||||
struct handle_type_name<args> {
|
struct handle_type_name<args> {
|
||||||
static constexpr auto name = const_name("*args");
|
static constexpr auto name = const_name("*args");
|
||||||
};
|
};
|
||||||
@ -975,6 +986,30 @@ template <>
|
|||||||
struct handle_type_name<kwargs> {
|
struct handle_type_name<kwargs> {
|
||||||
static constexpr auto name = const_name("**kwargs");
|
static constexpr auto name = const_name("**kwargs");
|
||||||
};
|
};
|
||||||
|
template <>
|
||||||
|
struct handle_type_name<obj_attr_accessor> {
|
||||||
|
static constexpr auto name = const_name<obj_attr_accessor>();
|
||||||
|
};
|
||||||
|
template <>
|
||||||
|
struct handle_type_name<str_attr_accessor> {
|
||||||
|
static constexpr auto name = const_name<str_attr_accessor>();
|
||||||
|
};
|
||||||
|
template <>
|
||||||
|
struct handle_type_name<item_accessor> {
|
||||||
|
static constexpr auto name = const_name<item_accessor>();
|
||||||
|
};
|
||||||
|
template <>
|
||||||
|
struct handle_type_name<sequence_accessor> {
|
||||||
|
static constexpr auto name = const_name<sequence_accessor>();
|
||||||
|
};
|
||||||
|
template <>
|
||||||
|
struct handle_type_name<list_accessor> {
|
||||||
|
static constexpr auto name = const_name<list_accessor>();
|
||||||
|
};
|
||||||
|
template <>
|
||||||
|
struct handle_type_name<tuple_accessor> {
|
||||||
|
static constexpr auto name = const_name<tuple_accessor>();
|
||||||
|
};
|
||||||
|
|
||||||
template <typename type>
|
template <typename type>
|
||||||
struct pyobject_caster {
|
struct pyobject_caster {
|
||||||
|
@ -1190,6 +1190,15 @@ protected:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
PYBIND11_NAMESPACE_BEGIN(detail)
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct handle_type_name<cpp_function> {
|
||||||
|
static constexpr auto name = const_name("Callable");
|
||||||
|
};
|
||||||
|
|
||||||
|
PYBIND11_NAMESPACE_END(detail)
|
||||||
|
|
||||||
/// Wrapper for Python extension modules
|
/// Wrapper for Python extension modules
|
||||||
class module_ : public object {
|
class module_ : public object {
|
||||||
public:
|
public:
|
||||||
@ -2618,6 +2627,11 @@ public:
|
|||||||
|
|
||||||
PYBIND11_NAMESPACE_BEGIN(detail)
|
PYBIND11_NAMESPACE_BEGIN(detail)
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct handle_type_name<exception<void>> {
|
||||||
|
static constexpr auto name = const_name("Exception");
|
||||||
|
};
|
||||||
|
|
||||||
// Helper function for register_exception and register_local_exception
|
// Helper function for register_exception and register_local_exception
|
||||||
template <typename CppException>
|
template <typename CppException>
|
||||||
exception<CppException> &
|
exception<CppException> &
|
||||||
|
@ -59,6 +59,7 @@ struct sequence_item;
|
|||||||
struct list_item;
|
struct list_item;
|
||||||
struct tuple_item;
|
struct tuple_item;
|
||||||
} // namespace accessor_policies
|
} // namespace accessor_policies
|
||||||
|
// PLEASE KEEP handle_type_name SPECIALIZATIONS IN SYNC.
|
||||||
using obj_attr_accessor = accessor<accessor_policies::obj_attr>;
|
using obj_attr_accessor = accessor<accessor_policies::obj_attr>;
|
||||||
using str_attr_accessor = accessor<accessor_policies::str_attr>;
|
using str_attr_accessor = accessor<accessor_policies::str_attr>;
|
||||||
using item_accessor = accessor<accessor_policies::generic_item>;
|
using item_accessor = accessor<accessor_policies::generic_item>;
|
||||||
|
@ -424,4 +424,4 @@ def test_fn_cast_int_exception():
|
|||||||
def test_return_exception_void():
|
def test_return_exception_void():
|
||||||
with pytest.raises(TypeError) as excinfo:
|
with pytest.raises(TypeError) as excinfo:
|
||||||
m.return_exception_void()
|
m.return_exception_void()
|
||||||
assert "`exception<void>`" in str(excinfo.value)
|
assert "Exception" in str(excinfo.value)
|
||||||
|
@ -41,6 +41,15 @@ class float_ : public py::object {
|
|||||||
};
|
};
|
||||||
} // namespace external
|
} // namespace external
|
||||||
|
|
||||||
|
namespace pybind11 {
|
||||||
|
namespace detail {
|
||||||
|
template <>
|
||||||
|
struct handle_type_name<external::float_> {
|
||||||
|
static constexpr auto name = const_name("float");
|
||||||
|
};
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace pybind11
|
||||||
|
|
||||||
namespace implicit_conversion_from_0_to_handle {
|
namespace implicit_conversion_from_0_to_handle {
|
||||||
// Uncomment to trigger compiler error. Note: Before PR #4008 this used to compile successfully.
|
// Uncomment to trigger compiler error. Note: Before PR #4008 this used to compile successfully.
|
||||||
// void expected_to_trigger_compiler_error() { py::handle(0); }
|
// void expected_to_trigger_compiler_error() { py::handle(0); }
|
||||||
|
Loading…
Reference in New Issue
Block a user