mirror of
https://github.com/pocketpy/pocketpy
synced 2025-11-05 03:00:17 +00:00
remove retv.
This commit is contained in:
parent
bf8b91b9f8
commit
5e156d9d0c
@ -40,7 +40,8 @@ public:
|
|||||||
|
|
||||||
auto info = &type_info::of<T>();
|
auto info = &type_info::of<T>();
|
||||||
int slot = ((std::is_same_v<dynamic_attr, Args> || ...) ? -1 : 0);
|
int slot = ((std::is_same_v<dynamic_attr, Args> || ...) ? -1 : 0);
|
||||||
void* data = py_newobject(retv, steal<type>(cls).index(), slot, sizeof(instance));
|
void* data =
|
||||||
|
py_newobject(py_retval(), steal<type>(cls).index(), slot, sizeof(instance));
|
||||||
new (data) instance{instance::Flag::Own, operator new (info->size), info};
|
new (data) instance{instance::Flag::Own, operator new (info->size), info};
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|||||||
@ -34,13 +34,9 @@ inline auto raise_call(Args&&... args) {
|
|||||||
|
|
||||||
using type = decltype(result);
|
using type = decltype(result);
|
||||||
if constexpr(std::is_same_v<type, bool>) {
|
if constexpr(std::is_same_v<type, bool>) {
|
||||||
if(result != false) {
|
if(result != false) { return result; }
|
||||||
return result;
|
|
||||||
}
|
|
||||||
} else if constexpr(std::is_same_v<type, int>) {
|
} else if constexpr(std::is_same_v<type, int>) {
|
||||||
if(result != -1) {
|
if(result != -1) { return result; }
|
||||||
return result;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
static_assert(dependent_false<type>, "invalid return type");
|
static_assert(dependent_false<type>, "invalid return type");
|
||||||
}
|
}
|
||||||
@ -84,10 +80,10 @@ class attribute_error : public std::runtime_error {
|
|||||||
|
|
||||||
inline object::operator bool () const { return raise_call<py_bool>(m_ptr); }
|
inline object::operator bool () const { return raise_call<py_bool>(m_ptr); }
|
||||||
|
|
||||||
#define PKBIND_BINARY_OPERATOR(name, lop, rop) \
|
#define PKBIND_BINARY_OPERATOR(name, lop, rop) \
|
||||||
inline object operator name (handle lhs, handle rhs) { \
|
inline object operator name (handle lhs, handle rhs) { \
|
||||||
raise_call<py_binaryop>(lhs.ptr(), rhs.ptr(), lop, rop); \
|
raise_call<py_binaryop>(lhs.ptr(), rhs.ptr(), lop, rop); \
|
||||||
return object(retv, object::realloc_t{}); \
|
return object::from_ret(); \
|
||||||
}
|
}
|
||||||
|
|
||||||
PKBIND_BINARY_OPERATOR(==, __eq__, __eq__)
|
PKBIND_BINARY_OPERATOR(==, __eq__, __eq__)
|
||||||
|
|||||||
@ -18,21 +18,6 @@ namespace pkbind {
|
|||||||
|
|
||||||
class handle;
|
class handle;
|
||||||
|
|
||||||
struct retv_t {
|
|
||||||
py_Ref value;
|
|
||||||
|
|
||||||
void operator= (py_Ref ref) & { py_assign(value, ref); }
|
|
||||||
|
|
||||||
operator py_Ref () & {
|
|
||||||
assert(value && "return value is not initialized");
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void operator= (handle value) &;
|
|
||||||
|
|
||||||
operator handle () &;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// hold the object long time.
|
/// hold the object long time.
|
||||||
struct object_pool {
|
struct object_pool {
|
||||||
inline static int cache = -1;
|
inline static int cache = -1;
|
||||||
@ -143,8 +128,6 @@ private:
|
|||||||
void (*init)(T&) = nullptr;
|
void (*init)(T&) = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline retv_t retv;
|
|
||||||
|
|
||||||
inline std::unordered_map<std::type_index, py_Type>* m_type_map = nullptr;
|
inline std::unordered_map<std::type_index, py_Type>* m_type_map = nullptr;
|
||||||
|
|
||||||
} // namespace pkbind
|
} // namespace pkbind
|
||||||
|
|||||||
@ -261,7 +261,7 @@ public:
|
|||||||
|
|
||||||
object(handle h, ref_t) : handle(h) {}
|
object(handle h, ref_t) : handle(h) {}
|
||||||
|
|
||||||
static object from_ret() { return object(retv, realloc_t{}); }
|
static object from_ret() { return object(py_retval(), realloc_t{}); }
|
||||||
|
|
||||||
operator object_pool::object_ref () const { return {m_ptr, m_index}; }
|
operator object_pool::object_ref () const { return {m_ptr, m_index}; }
|
||||||
|
|
||||||
@ -281,13 +281,6 @@ T borrow(handle h) {
|
|||||||
return T(h, object::realloc_t{});
|
return T(h, object::realloc_t{});
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void retv_t::operator= (handle h) & { py_assign(value, h.ptr()); }
|
|
||||||
|
|
||||||
inline retv_t::operator handle () & {
|
|
||||||
assert(value && "return value is not initialized");
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
static_assert(std::is_trivially_copyable_v<name>);
|
static_assert(std::is_trivially_copyable_v<name>);
|
||||||
static_assert(std::is_trivially_copyable_v<handle>);
|
static_assert(std::is_trivially_copyable_v<handle>);
|
||||||
|
|
||||||
|
|||||||
@ -101,7 +101,7 @@ public:
|
|||||||
iterator& operator++ () {
|
iterator& operator++ () {
|
||||||
int result = raise_call<py_next>(m_ptr);
|
int result = raise_call<py_next>(m_ptr);
|
||||||
if(result == 1) {
|
if(result == 1) {
|
||||||
m_value = object(retv, realloc_t{});
|
m_value = object::from_ret();
|
||||||
} else if(result == 0) {
|
} else if(result == 0) {
|
||||||
m_value = object();
|
m_value = object();
|
||||||
}
|
}
|
||||||
@ -125,7 +125,7 @@ private:
|
|||||||
template <typename Dervied>
|
template <typename Dervied>
|
||||||
iterator interface<Dervied>::begin() const {
|
iterator interface<Dervied>::begin() const {
|
||||||
raise_call<py_iter>(ptr());
|
raise_call<py_iter>(ptr());
|
||||||
return iterator(retv);
|
return iterator(py_retval());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Dervied>
|
template <typename Dervied>
|
||||||
|
|||||||
@ -16,9 +16,6 @@ inline bool initialized = false;
|
|||||||
inline void initialize(int object_pool_size = 1024) {
|
inline void initialize(int object_pool_size = 1024) {
|
||||||
if(!initialized) { py_initialize(); }
|
if(!initialized) { py_initialize(); }
|
||||||
|
|
||||||
// initialize ret.
|
|
||||||
retv.value = py_retval();
|
|
||||||
|
|
||||||
// initialize object pool.
|
// initialize object pool.
|
||||||
object_pool::initialize(object_pool_size);
|
object_pool::initialize(object_pool_size);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user