Lines Matching defs:pto

46 static void partial_setvectorcall(partialobject *pto);
49 partial_call(partialobject *pto, PyObject *args, PyObject *kwargs);
65 partialobject *pto;
96 pto = (partialobject *)type->tp_alloc(type, 0);
97 if (pto == NULL)
100 pto->fn = func;
105 Py_DECREF(pto);
109 pto->args = nargs;
112 pto->args = PySequence_Concat(pargs, nargs);
114 if (pto->args == NULL) {
115 Py_DECREF(pto);
118 assert(PyTuple_Check(pto->args));
123 pto->kw = PyDict_New();
127 pto->kw = kw;
130 pto->kw = PyDict_Copy(kw);
134 pto->kw = PyDict_Copy(pkw);
135 if (kw != NULL && pto->kw != NULL) {
136 if (PyDict_Merge(pto->kw, kw, 1) != 0) {
137 Py_DECREF(pto);
142 if (pto->kw == NULL) {
143 Py_DECREF(pto);
147 partial_setvectorcall(pto);
148 return (PyObject *)pto;
152 partial_clear(partialobject *pto)
154 Py_CLEAR(pto->fn);
155 Py_CLEAR(pto->args);
156 Py_CLEAR(pto->kw);
157 Py_CLEAR(pto->dict);
162 partial_traverse(partialobject *pto, visitproc visit, void *arg)
164 Py_VISIT(Py_TYPE(pto));
165 Py_VISIT(pto->fn);
166 Py_VISIT(pto->args);
167 Py_VISIT(pto->kw);
168 Py_VISIT(pto->dict);
173 partial_dealloc(partialobject *pto)
175 PyTypeObject *tp = Py_TYPE(pto);
177 PyObject_GC_UnTrack(pto);
178 if (pto->weakreflist != NULL) {
179 PyObject_ClearWeakRefs((PyObject *) pto);
181 (void)partial_clear(pto);
182 tp->tp_free(pto);
191 partial_vectorcall_fallback(PyThreadState *tstate, partialobject *pto,
195 pto->vectorcall = NULL;
197 return _PyObject_MakeTpCall(tstate, (PyObject *)pto,
202 partial_vectorcall(partialobject *pto, PyObject *const *args,
207 /* pto->kw is mutable, so need to check every time */
208 if (PyDict_GET_SIZE(pto->kw)) {
209 return partial_vectorcall_fallback(tstate, pto, args, nargsf, kwnames);
218 PyObject **pto_args = _PyTuple_ITEMS(pto->args);
219 Py_ssize_t pto_nargs = PyTuple_GET_SIZE(pto->args);
223 return _PyObject_VectorcallTstate(tstate, pto->fn,
233 PyObject *ret = _PyObject_VectorcallTstate(tstate, pto->fn,
260 ret = _PyObject_VectorcallTstate(tstate, pto->fn,
268 /* Set pto->vectorcall depending on the parameters of the partial object */
270 partial_setvectorcall(partialobject *pto)
272 if (_PyVectorcall_Function(pto->fn) == NULL) {
274 pto->vectorcall = NULL;
280 pto->vectorcall = (vectorcallfunc)partial_vectorcall;
286 partial_call(partialobject *pto, PyObject *args, PyObject *kwargs)
288 assert(PyCallable_Check(pto->fn));
289 assert(PyTuple_Check(pto->args));
290 assert(PyDict_Check(pto->kw));
294 if (PyDict_GET_SIZE(pto->kw) == 0) {
303 kwargs2 = PyDict_Copy(pto->kw);
318 PyObject *args2 = PySequence_Concat(pto->args, args);
324 PyObject *res = PyObject_Call(pto->fn, args2, kwargs2);
357 partial_repr(partialobject *pto)
365 status = Py_ReprEnter((PyObject *)pto);
376 assert (PyTuple_Check(pto->args));
377 n = PyTuple_GET_SIZE(pto->args);
380 PyTuple_GET_ITEM(pto->args, i)));
385 assert (PyDict_Check(pto->kw));
386 for (i = 0; PyDict_Next(pto->kw, &i, &key, &value);) {
395 result = PyUnicode_FromFormat("%s(%R%U)", Py_TYPE(pto)->tp_name,
396 pto->fn, arglist);
400 Py_ReprLeave((PyObject *)pto);
412 partial_reduce(partialobject *pto, PyObject *unused)
414 return Py_BuildValue("O(O)(OOOO)", Py_TYPE(pto), pto->fn, pto->fn,
415 pto->args, pto->kw,
416 pto->dict ? pto->dict : Py_None);
420 partial_setstate(partialobject *pto, PyObject *state)
458 Py_SETREF(pto->fn, fn);
459 Py_SETREF(pto->args, fnargs);
460 Py_SETREF(pto->kw, kw);
461 Py_XSETREF(pto->dict, dict);
462 partial_setvectorcall(pto);