mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
use std::type_index
This commit is contained in:
parent
a5cb806749
commit
3b4d43714d
File diff suppressed because one or more lines are too long
@ -6,13 +6,13 @@
|
|||||||
namespace pkpy {
|
namespace pkpy {
|
||||||
|
|
||||||
#define PY_CLASS(T, mod, name) \
|
#define PY_CLASS(T, mod, name) \
|
||||||
static Type _type(VM* vm) { return vm->_cxx_typeid_map[&typeid(T)]; } \
|
static Type _type(VM* vm) { return vm->_cxx_typeid_map[typeid(T)]; } \
|
||||||
static PyObject* register_class(VM* vm, PyObject* mod, Type base=0) { \
|
static PyObject* register_class(VM* vm, PyObject* mod, Type base=0) { \
|
||||||
std::string_view mod_name = PK_OBJ_GET(Str, mod->attr("__name__")).sv(); \
|
std::string_view mod_name = PK_OBJ_GET(Str, mod->attr("__name__")).sv(); \
|
||||||
if(mod_name != #mod) throw std::runtime_error(_S("register_class() failed: ", mod_name, " != ", #mod).str()); \
|
if(mod_name != #mod) throw std::runtime_error(_S("register_class() failed: ", mod_name, " != ", #mod).str()); \
|
||||||
PyObject* type = vm->new_type_object(mod, #name, base); \
|
PyObject* type = vm->new_type_object(mod, #name, base); \
|
||||||
mod->attr().set(#name, type); \
|
mod->attr().set(#name, type); \
|
||||||
vm->_cxx_typeid_map[&typeid(T)] = PK_OBJ_GET(Type, type); \
|
vm->_cxx_typeid_map[typeid(T)] = PK_OBJ_GET(Type, type); \
|
||||||
T::_register(vm, mod, type); \
|
T::_register(vm, mod, type); \
|
||||||
return type; \
|
return type; \
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <random>
|
#include <random>
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#include <typeinfo>
|
#include <typeindex>
|
||||||
#include <initializer_list>
|
#include <initializer_list>
|
||||||
|
|
||||||
#define PK_VERSION "1.4.4"
|
#define PK_VERSION "1.4.4"
|
||||||
|
@ -123,7 +123,7 @@ public:
|
|||||||
std::map<std::string_view, CodeObject_> _cached_codes;
|
std::map<std::string_view, CodeObject_> _cached_codes;
|
||||||
|
|
||||||
// typeid -> Type
|
// typeid -> Type
|
||||||
std::map<const std::type_info*, Type> _cxx_typeid_map;
|
std::map<const std::type_index, Type> _cxx_typeid_map;
|
||||||
|
|
||||||
void (*_ceval_on_step)(VM*, Frame*, Bytecode bc) = nullptr;
|
void (*_ceval_on_step)(VM*, Frame*, Bytecode bc) = nullptr;
|
||||||
|
|
||||||
@ -436,7 +436,7 @@ public:
|
|||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
Type _find_type_in_cxx_typeid_map(){
|
Type _find_type_in_cxx_typeid_map(){
|
||||||
auto it = _cxx_typeid_map.find(&typeid(T));
|
auto it = _cxx_typeid_map.find(typeid(T));
|
||||||
if(it == _cxx_typeid_map.end()){
|
if(it == _cxx_typeid_map.end()){
|
||||||
#if __GNUC__ || __clang__
|
#if __GNUC__ || __clang__
|
||||||
throw std::runtime_error(__PRETTY_FUNCTION__ + std::string(" failed: T not found"));
|
throw std::runtime_error(__PRETTY_FUNCTION__ + std::string(" failed: T not found"));
|
||||||
|
@ -23,7 +23,8 @@ def generate_python_sources():
|
|||||||
|
|
||||||
namespace pkpy{
|
namespace pkpy{
|
||||||
'''
|
'''
|
||||||
for key, value in sources.items():
|
for key in sorted(sources.keys()):
|
||||||
|
value = sources[key]
|
||||||
header += f' inline const char kPythonLibs_{key}[] = {value};\n'
|
header += f' inline const char kPythonLibs_{key}[] = {value};\n'
|
||||||
header += '}\n'
|
header += '}\n'
|
||||||
return header
|
return header
|
||||||
|
Loading…
x
Reference in New Issue
Block a user