diff --git a/src/pocketpy.h b/src/pocketpy.h index edca6180..74000490 100644 --- a/src/pocketpy.h +++ b/src/pocketpy.h @@ -128,8 +128,9 @@ void __initializeBuiltinFunctions(VM* _vm) { return vm->PyStr(s); }); + _vm->bindMethod<1>("object", "__eq__", CPP_LAMBDA(vm->PyBool(args[0] == args[1]))); + _vm->bindStaticMethod<1>("type", "__new__", CPP_LAMBDA(args[0]->_type)); - _vm->bindMethod<1>("type", "__eq__", CPP_LAMBDA(vm->PyBool(args[0] == args[1]))); _vm->bindStaticMethod<-1>("range", "__new__", [](VM* vm, const pkpy::ArgList& args) { _Range r; @@ -148,7 +149,6 @@ void __initializeBuiltinFunctions(VM* _vm) { _vm->bindMethod<0>("NoneType", "__repr__", CPP_LAMBDA(vm->PyStr("None"))); _vm->bindMethod<0>("NoneType", "__json__", CPP_LAMBDA(vm->PyStr("null"))); - _vm->bindMethod<1>("NoneType", "__eq__", CPP_LAMBDA(vm->PyBool(args[0] == args[1]))); _vm->bindMethodMulti<1>({"int", "float"}, "__truediv__", [](VM* vm, const pkpy::ArgList& args) { f64 rhs = vm->num_to_float(args[1]); @@ -292,7 +292,7 @@ void __initializeBuiltinFunctions(VM* _vm) { _vm->bindMethod<1>("str", "__eq__", [](VM* vm, const pkpy::ArgList& args) { if(args[0]->is_type(vm->_tp_str) && args[1]->is_type(vm->_tp_str)) return vm->PyBool(vm->PyStr_AS_C(args[0]) == vm->PyStr_AS_C(args[1])); - return vm->PyBool(args[0] == args[1]); // fallback + return vm->PyBool(args[0] == args[1]); }); _vm->bindMethod<1>("str", "__getitem__", [](VM* vm, const pkpy::ArgList& args) { @@ -478,10 +478,6 @@ void __initializeBuiltinFunctions(VM* _vm) { return vm->PyStr(val ? "true" : "false"); }); - _vm->bindMethod<1>("bool", "__eq__", [](VM* vm, const pkpy::ArgList& args) { - return vm->PyBool(args[0] == args[1]); - }); - _vm->bindMethod<1>("bool", "__xor__", [](VM* vm, const pkpy::ArgList& args) { bool _self = vm->PyBool_AS_C(args[0]); bool _obj = vm->PyBool_AS_C(args[1]); diff --git a/src/safestl.h b/src/safestl.h index 58690496..fbf378be 100644 --- a/src/safestl.h +++ b/src/safestl.h @@ -118,7 +118,7 @@ namespace pkpy { return ret; } - void extended_self(const PyVar& self){ + void extend_self(const PyVar& self){ static_assert(std::is_standard_layout_v); PyVar* old_args = _args; uint8_t old_size = _size; @@ -126,8 +126,8 @@ namespace pkpy { _args[0] = self; if(old_size == 0) return; - memcpy(_args+1, old_args, sizeof(PyVar)*old_size); - memset(old_args, 0, sizeof(PyVar)*old_size); + memcpy((void*)(_args+1), (void*)old_args, sizeof(PyVar)*old_size); + memset((void*)old_args, 0, sizeof(PyVar)*old_size); if(old_size >= MAX_POOLING_N || _poolArgList[old_size].size() > 32){ delete[] old_args; }else{ diff --git a/src/vm.h b/src/vm.h index 009c02a9..0108d4e6 100644 --- a/src/vm.h +++ b/src/vm.h @@ -450,7 +450,7 @@ public: if((*callable)->is_type(_tp_bounded_method)){ auto& bm = PyBoundedMethod_AS_C((*callable)); callable = &bm.method; // get unbound method - args.extended_self(bm.obj); + args.extend_self(bm.obj); } if((*callable)->is_type(_tp_native_function)){