mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-22 20:40:18 +00:00
...
This commit is contained in:
parent
c398abb1cb
commit
0529daea64
@ -10,7 +10,6 @@
|
|||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <cstdarg>
|
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
|
24
src/vm.h
24
src/vm.h
@ -207,32 +207,26 @@ public:
|
|||||||
callstack.pop();
|
callstack.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _push_varargs(int n, ...){
|
void _push_varargs(){ }
|
||||||
va_list args;
|
void _push_varargs(PyObject* _0){ PUSH(_0); }
|
||||||
va_start(args, n);
|
void _push_varargs(PyObject* _0, PyObject* _1){ PUSH(_0); PUSH(_1); }
|
||||||
for(int i=0; i<n; i++){
|
void _push_varargs(PyObject* _0, PyObject* _1, PyObject* _2){ PUSH(_0); PUSH(_1); PUSH(_2); }
|
||||||
PyObject* obj = va_arg(args, PyObject*);
|
void _push_varargs(PyObject* _0, PyObject* _1, PyObject* _2, PyObject* _3){ PUSH(_0); PUSH(_1); PUSH(_2); PUSH(_3); }
|
||||||
PUSH(obj);
|
|
||||||
}
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
PyObject* call(PyObject* callable, Args&&... args){
|
PyObject* call(PyObject* callable, Args&&... args){
|
||||||
PUSH(callable);
|
PUSH(callable);
|
||||||
PUSH(_py_null);
|
PUSH(_py_null);
|
||||||
int ARGC = sizeof...(args);
|
_push_varargs(args...);
|
||||||
_push_varargs(ARGC, args...);
|
return vectorcall(sizeof...(args));
|
||||||
return vectorcall(ARGC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
PyObject* call_method(PyObject* self, PyObject* callable, Args&&... args){
|
PyObject* call_method(PyObject* self, PyObject* callable, Args&&... args){
|
||||||
PUSH(callable);
|
PUSH(callable);
|
||||||
PUSH(self);
|
PUSH(self);
|
||||||
int ARGC = sizeof...(args);
|
_push_varargs(args...);
|
||||||
_push_varargs(ARGC, args...);
|
return vectorcall(sizeof...(args));
|
||||||
return vectorcall(ARGC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user