mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 03:20:18 +00:00
Merge branch 'main' of https://github.com/pocketpy/pocketpy
This commit is contained in:
commit
f05f48631d
@ -4,60 +4,60 @@
|
||||
|
||||
namespace pkbind {
|
||||
|
||||
class module : public object {
|
||||
PKBIND_TYPE_IMPL(object, module, tp_module)
|
||||
class module_ : public object {
|
||||
PKBIND_TYPE_IMPL(object, module_, tp_module)
|
||||
|
||||
static module __main__() { return module(py_getmodule("__main__"), object::ref_t{}); }
|
||||
static module_ __main__() { return module_(py_getmodule("__main__"), object::ref_t{}); }
|
||||
|
||||
static module import(const char* name) {
|
||||
static module_ import(const char* name) {
|
||||
raise_call<py_import>(name);
|
||||
return borrow<module>(py_retval());
|
||||
return borrow<module_>(py_retval());
|
||||
}
|
||||
|
||||
static module create(const char* name) {
|
||||
static module_ create(const char* name) {
|
||||
auto m = py_newmodule(name);
|
||||
return steal<module>(m);
|
||||
return steal<module_>(m);
|
||||
}
|
||||
|
||||
module def_submodule(const char* name, const char* doc = nullptr) {
|
||||
module_ def_submodule(const char* name, const char* doc = nullptr) {
|
||||
// auto package = (attr("__package__").cast<std::string>() += ".") +=
|
||||
// attr("__name__").cast<std::string_view>();
|
||||
auto fname = (attr("__name__").cast<std::string>() += ".") += name;
|
||||
auto m = py_newmodule(fname.c_str());
|
||||
setattr(*this, name, m);
|
||||
return module(m, object::ref_t{});
|
||||
return module_(m, object::ref_t{});
|
||||
}
|
||||
|
||||
template <typename Fn, typename... Extras>
|
||||
module& def(const char* name, Fn&& fn, const Extras... extras) {
|
||||
module_& def(const char* name, Fn&& fn, const Extras... extras) {
|
||||
impl::bind_function<false, false>(*this, name, std::forward<Fn>(fn), extras...);
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
using module_ = module;
|
||||
using module = module_;
|
||||
|
||||
#define PYBIND11_EMBEDDED_MODULE(name, variable) \
|
||||
static void _pkbind_register_##name(::pkbind::module& variable); \
|
||||
static void _pkbind_register_##name(::pkbind::module_& variable); \
|
||||
namespace pkbind::impl { \
|
||||
auto _module_##name = [] { \
|
||||
::pkbind::action::register_start([] { \
|
||||
auto m = ::pkbind::module(py_newmodule(#name), ::pkbind::object::ref_t{}); \
|
||||
auto m = ::pkbind::module_::create(#name); \
|
||||
_pkbind_register_##name(m); \
|
||||
}); \
|
||||
return 1; \
|
||||
}(); \
|
||||
} \
|
||||
static void _pkbind_register_##name(::pkbind::module& variable)
|
||||
static void _pkbind_register_##name(::pkbind::module_& variable)
|
||||
|
||||
#define PYBIND11_MODULE(name, variable) \
|
||||
static void _pkbind_register_##name(::pkbind::module& variable); \
|
||||
static void _pkbind_register_##name(::pkbind::module_& variable); \
|
||||
extern "C" PK_EXPORT bool py_module_initialize() { \
|
||||
auto m = ::pkbind::module::create(#name); \
|
||||
auto m = ::pkbind::module_::create(#name); \
|
||||
_pkbind_register_##name(m); \
|
||||
py_assign(py_retval(), m.ptr()); \
|
||||
return true; \
|
||||
} \
|
||||
static void _pkbind_register_##name(::pkbind::module& variable)
|
||||
static void _pkbind_register_##name(::pkbind::module_& variable)
|
||||
|
||||
} // namespace pkbind
|
||||
|
Loading…
x
Reference in New Issue
Block a user