diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-02-10 13:19:36 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2017-02-10 13:19:36 (GMT) |
commit | d2306cec4dc393a106aaac6b7c71a9b241be230d (patch) | |
tree | ce1368518c19fec7fbb18610f3172cb426d734ce /Python/modsupport.c | |
parent | 766af559ad967dcf5b2810331c331fe8773b8ef3 (diff) | |
download | cpython-d2306cec4dc393a106aaac6b7c71a9b241be230d.zip cpython-d2306cec4dc393a106aaac6b7c71a9b241be230d.tar.gz cpython-d2306cec4dc393a106aaac6b7c71a9b241be230d.tar.bz2 |
Backed out changeset f23fa1f7b68f
Sorry, I didn't want to push this change before the review :-( I was pushing a
change into the 2.7 branch.
Diffstat (limited to 'Python/modsupport.c')
-rw-r--r-- | Python/modsupport.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Python/modsupport.c b/Python/modsupport.c index 9637191..e9e025b 100644 --- a/Python/modsupport.c +++ b/Python/modsupport.c @@ -586,6 +586,57 @@ va_build_stack(PyObject **small_stack, Py_ssize_t small_stack_len, } +PyObject * +PyEval_CallFunction(PyObject *callable, const char *format, ...) +{ + va_list vargs; + PyObject *args; + PyObject *res; + + va_start(vargs, format); + + args = Py_VaBuildValue(format, vargs); + va_end(vargs); + + if (args == NULL) + return NULL; + + res = PyEval_CallObject(callable, args); + Py_DECREF(args); + + return res; +} + + +PyObject * +PyEval_CallMethod(PyObject *obj, const char *name, const char *format, ...) +{ + va_list vargs; + PyObject *meth; + PyObject *args; + PyObject *res; + + meth = PyObject_GetAttrString(obj, name); + if (meth == NULL) + return NULL; + + va_start(vargs, format); + + args = Py_VaBuildValue(format, vargs); + va_end(vargs); + + if (args == NULL) { + Py_DECREF(meth); + return NULL; + } + + res = PyEval_CallObject(meth, args); + Py_DECREF(meth); + Py_DECREF(args); + + return res; +} + int PyModule_AddObject(PyObject *m, const char *name, PyObject *o) { |