diff --git a/src/cffi.h b/src/cffi.h index fa8a7f6e..ce87a661 100644 --- a/src/cffi.h +++ b/src/cffi.h @@ -379,7 +379,7 @@ struct NativeProxyFuncC final: NativeProxyFuncCBase { }; inline PyObject* _any_c_wrapper(VM* vm, ArgsView args){ - NativeProxyFuncCBase* pf = lambda_get_userdata(args); + NativeProxyFuncCBase* pf = lambda_get_userdata(args.begin()); return (*pf)(vm, args); } diff --git a/src/obj.h b/src/obj.h index 43ddeeb1..810fbe24 100644 --- a/src/obj.h +++ b/src/obj.h @@ -398,9 +398,9 @@ struct Py_ final: PyObject { }; template -inline T lambda_get_userdata(ArgsView args){ - if(args[-1] != PY_NULL) return OBJ_GET(NativeFunc, args[-1]).get_userdata(); - else return OBJ_GET(NativeFunc, args[-2]).get_userdata(); +inline T lambda_get_userdata(PyObject** p){ + if(p[-1] != PY_NULL) return OBJ_GET(NativeFunc, p[-1]).get_userdata(); + else return OBJ_GET(NativeFunc, p[-2]).get_userdata(); } diff --git a/src/vm.h b/src/vm.h index 50b5e888..8623d4fb 100644 --- a/src/vm.h +++ b/src/vm.h @@ -338,7 +338,7 @@ public: void bind##name(Type type, PyObject* (*f)(VM*, PyObject*)){ \ _all_types[type].m##name = f; \ PyObject* nf = bind_method<0>(_t(type), #name, [](VM* vm, ArgsView args){ \ - return lambda_get_userdata(args)(vm, args[0]);\ + return lambda_get_userdata(args.begin())(vm, args[0]);\ }); \ OBJ_GET(NativeFunc, nf).set_userdata(f); \ } @@ -361,7 +361,7 @@ public: PyObject* obj = _t(type); \ _all_types[type].m##name = f; \ PyObject* nf = bind_method<1>(obj, #name, [](VM* vm, ArgsView args){ \ - bool ok = lambda_get_userdata(args)(vm, args[0], args[1]); \ + bool ok = lambda_get_userdata(args.begin())(vm, args[0], args[1]); \ return ok ? vm->True : vm->False; \ }); \ OBJ_GET(NativeFunc, nf).set_userdata(f); \ @@ -382,7 +382,7 @@ public: PyObject* obj = _t(type); \ _all_types[type].m##name = f; \ PyObject* nf = bind_method<1>(obj, #name, [](VM* vm, ArgsView args){ \ - return lambda_get_userdata(args)(vm, args[0], args[1]); \ + return lambda_get_userdata(args.begin())(vm, args[0], args[1]); \ }); \ OBJ_GET(NativeFunc, nf).set_userdata(f); \ } @@ -408,7 +408,7 @@ public: PyObject* obj = _t(type); _all_types[type].m__getitem__ = f; PyObject* nf = bind_method<1>(obj, "__getitem__", [](VM* vm, ArgsView args){ - return lambda_get_userdata(args)(vm, args[0], args[1]); + return lambda_get_userdata(args.begin())(vm, args[0], args[1]); }); OBJ_GET(NativeFunc, nf).set_userdata(f); } @@ -417,7 +417,7 @@ public: PyObject* obj = _t(type); _all_types[type].m__setitem__ = f; PyObject* nf = bind_method<2>(obj, "__setitem__", [](VM* vm, ArgsView args){ - lambda_get_userdata(args)(vm, args[0], args[1], args[2]); + lambda_get_userdata(args.begin())(vm, args[0], args[1], args[2]); return vm->None; }); OBJ_GET(NativeFunc, nf).set_userdata(f); @@ -427,7 +427,7 @@ public: PyObject* obj = _t(type); _all_types[type].m__delitem__ = f; PyObject* nf = bind_method<1>(obj, "__delitem__", [](VM* vm, ArgsView args){ - lambda_get_userdata(args)(vm, args[0], args[1]); + lambda_get_userdata(args.begin())(vm, args[0], args[1]); return vm->None; }); OBJ_GET(NativeFunc, nf).set_userdata(f); @@ -1406,7 +1406,7 @@ inline void VM::bind__hash__(Type type, i64 (*f)(VM*, PyObject*)){ PyObject* obj = _t(type); _all_types[type].m__hash__ = f; PyObject* nf = bind_method<0>(obj, "__hash__", [](VM* vm, ArgsView args){ - i64 ret = lambda_get_userdata(args)(vm, args[0]); + i64 ret = lambda_get_userdata(args.begin())(vm, args[0]); return VAR(ret); }); OBJ_GET(NativeFunc, nf).set_userdata(f); @@ -1416,7 +1416,7 @@ inline void VM::bind__len__(Type type, i64 (*f)(VM*, PyObject*)){ PyObject* obj = _t(type); _all_types[type].m__len__ = f; PyObject* nf = bind_method<0>(obj, "__len__", [](VM* vm, ArgsView args){ - i64 ret = lambda_get_userdata(args)(vm, args[0]); + i64 ret = lambda_get_userdata(args.begin())(vm, args[0]); return VAR(ret); }); OBJ_GET(NativeFunc, nf).set_userdata(f);