This commit is contained in:
blueloveTH 2023-09-27 17:57:40 +08:00
parent 53528c767b
commit 4e1e08df61
2 changed files with 5 additions and 5 deletions

View File

@ -113,7 +113,7 @@ void _bind(VM* vm, PyObject* obj, const char* sig, Ret(T::*func)(Params...)){
return VAR(self.REF().FGET()); \ return VAR(self.REF().FGET()); \
}); });
#define PY_STRUCT_LIKE_OBJECT(T) \ #define PY_STRUCT_LIKE(T) \
static_assert(std::is_trivially_copyable<T>::value); \ static_assert(std::is_trivially_copyable<T>::value); \
vm->bind_func<1>(type, "from_struct", [](VM* vm, ArgsView args){ \ vm->bind_func<1>(type, "from_struct", [](VM* vm, ArgsView args){ \
C99Struct& s = CAST(C99Struct&, args[0]); \ C99Struct& s = CAST(C99Struct&, args[0]); \

View File

@ -42,7 +42,7 @@ namespace pkpy{
void PyVec2::_register(VM* vm, PyObject* mod, PyObject* type){ void PyVec2::_register(VM* vm, PyObject* mod, PyObject* type){
PY_STRUCT_LIKE_OBJECT(PyVec2) PY_STRUCT_LIKE(PyVec2)
vm->bind_constructor<3>(type, [](VM* vm, ArgsView args){ vm->bind_constructor<3>(type, [](VM* vm, ArgsView args){
float x = CAST_F(args[1]); float x = CAST_F(args[1]);
@ -101,7 +101,7 @@ namespace pkpy{
} }
void PyVec3::_register(VM* vm, PyObject* mod, PyObject* type){ void PyVec3::_register(VM* vm, PyObject* mod, PyObject* type){
PY_STRUCT_LIKE_OBJECT(PyVec3) PY_STRUCT_LIKE(PyVec3)
vm->bind_constructor<4>(type, [](VM* vm, ArgsView args){ vm->bind_constructor<4>(type, [](VM* vm, ArgsView args){
float x = CAST_F(args[1]); float x = CAST_F(args[1]);
@ -138,7 +138,7 @@ namespace pkpy{
} }
void PyVec4::_register(VM* vm, PyObject* mod, PyObject* type){ void PyVec4::_register(VM* vm, PyObject* mod, PyObject* type){
PY_STRUCT_LIKE_OBJECT(PyVec4) PY_STRUCT_LIKE(PyVec4)
vm->bind_constructor<1+4>(type, [](VM* vm, ArgsView args){ vm->bind_constructor<1+4>(type, [](VM* vm, ArgsView args){
float x = CAST_F(args[1]); float x = CAST_F(args[1]);
@ -183,7 +183,7 @@ namespace pkpy{
#undef BIND_VEC_FUNCTION_1 #undef BIND_VEC_FUNCTION_1
void PyMat3x3::_register(VM* vm, PyObject* mod, PyObject* type){ void PyMat3x3::_register(VM* vm, PyObject* mod, PyObject* type){
PY_STRUCT_LIKE_OBJECT(PyMat3x3) PY_STRUCT_LIKE(PyMat3x3)
vm->bind_constructor<-1>(type, [](VM* vm, ArgsView args){ vm->bind_constructor<-1>(type, [](VM* vm, ArgsView args){
if(args.size() == 1+0) return VAR_T(PyMat3x3, Mat3x3::zeros()); if(args.size() == 1+0) return VAR_T(PyMat3x3, Mat3x3::zeros());