Skip to content

Commit 862097f

Browse files
committed
fix compiler warnings
1 parent 2dd7568 commit 862097f

File tree

1 file changed

+56
-38
lines changed

1 file changed

+56
-38
lines changed

Modules/_functoolsmodule.c

Lines changed: 56 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -459,9 +459,11 @@ partial_vectorcall(partialobject *pto, PyObject *const *args,
459459
}
460460

461461
/* Calculate total kw size and positions of items to override */
462-
Py_ssize_t *positions, small_positions[_PY_FASTCALL_SMALL_STACK];
462+
PyObject *tot_kwnames;
463+
PyObject **stack, *small_stack[_PY_FASTCALL_SMALL_STACK];
463464
tot_nkwds = pto_nkwds + nkwds;
464465
if (nkwds) {
466+
Py_ssize_t *positions, small_positions[_PY_FASTCALL_SMALL_STACK];
465467
ALLOCATE_STACK(Py_ssize_t, nkwds, small_positions, positions);
466468
for (Py_ssize_t i=0; i < nkwds; i++) {
467469
positions[i] = -1;
@@ -476,12 +478,61 @@ partial_vectorcall(partialobject *pto, PyObject *const *args,
476478
}
477479
}
478480
}
481+
tot_nargskw = tot_nargs + tot_nkwds;
482+
483+
/* Allocate Stack */
484+
ALLOCATE_STACK(PyObject, tot_nargskw, small_stack, stack);
485+
486+
/* Copy Pto Keywords to stack */
487+
memcpy(stack + tot_nargs, pto_kwvals, pto_nkwds * sizeof(PyObject*));
488+
DEALLOCATE_STACK(small_pto_kwvals, pto_kwvals);
489+
490+
/* Copy New Keywords to stack */
491+
tot_kwnames = PyTuple_New(tot_nkwds);
492+
for (Py_ssize_t i=0; i < pto_nkwds; i++) {
493+
key = pto_kwkeys[i];
494+
PyTuple_SET_ITEM(tot_kwnames, i, key);
495+
Py_INCREF(key);
496+
}
497+
DEALLOCATE_STACK(small_pto_kwkeys, pto_kwkeys);
498+
499+
Py_ssize_t k = 0;
500+
Py_ssize_t j;
501+
for (Py_ssize_t i=0; i < nkwds; i++) {
502+
key = PyTuple_GET_ITEM(kwnames, i);
503+
val = args[nargs + i];
504+
j = positions[i];
505+
if (j != -1) {
506+
stack[tot_nargs + j] = val;
507+
}
508+
else {
509+
PyTuple_SET_ITEM(tot_kwnames, pto_nkwds + k, key);
510+
Py_INCREF(key);
511+
stack[tot_nargs + pto_nkwds + k] = val;
512+
k++;
513+
}
514+
}
515+
DEALLOCATE_STACK(small_positions, positions);
479516
}
480-
tot_nargskw = tot_nargs + tot_nkwds;
517+
else {
518+
tot_nargskw = tot_nargs + tot_nkwds;
481519

482-
/* Allocate Stack */
483-
PyObject **stack, *small_stack[_PY_FASTCALL_SMALL_STACK];
484-
ALLOCATE_STACK(PyObject, tot_nargskw, small_stack, stack);
520+
/* Allocate Stack */
521+
ALLOCATE_STACK(PyObject, tot_nargskw, small_stack, stack);
522+
523+
/* Copy Pto Keywords to stack */
524+
memcpy(stack + tot_nargs, pto_kwvals, pto_nkwds * sizeof(PyObject*));
525+
DEALLOCATE_STACK(small_pto_kwvals, pto_kwvals);
526+
527+
/* Copy New Keywords to stack */
528+
tot_kwnames = PyTuple_New(tot_nkwds);
529+
for (Py_ssize_t i=0; i < pto_nkwds; i++) {
530+
key = pto_kwkeys[i];
531+
PyTuple_SET_ITEM(tot_kwnames, i, key);
532+
Py_INCREF(key);
533+
}
534+
DEALLOCATE_STACK(small_pto_kwkeys, pto_kwkeys);
535+
}
485536

486537
/* Copy Positionals to stack */
487538
if (pto_phcount) {
@@ -506,39 +557,6 @@ partial_vectorcall(partialobject *pto, PyObject *const *args,
506557
memcpy(stack + pto_nargs, args, nargs * sizeof(PyObject*));
507558
}
508559

509-
/* Copy Pto Keywords to stack */
510-
memcpy(stack + tot_nargs, pto_kwvals, pto_nkwds * sizeof(PyObject*));
511-
DEALLOCATE_STACK(small_pto_kwvals, pto_kwvals);
512-
513-
/* Copy New Keywords to stack */
514-
PyObject *tot_kwnames = PyTuple_New(tot_nkwds);
515-
for (Py_ssize_t i=0; i < pto_nkwds; i++) {
516-
key = pto_kwkeys[i];
517-
PyTuple_SET_ITEM(tot_kwnames, i, key);
518-
Py_INCREF(key);
519-
}
520-
DEALLOCATE_STACK(small_pto_kwkeys, pto_kwkeys);
521-
522-
if (nkwds) {
523-
Py_ssize_t k = 0;
524-
Py_ssize_t j;
525-
for (Py_ssize_t i=0; i < nkwds; i++) {
526-
key = PyTuple_GET_ITEM(kwnames, i);
527-
val = args[nargs + i];
528-
j = positions[i];
529-
if (j != -1) {
530-
stack[tot_nargs + j] = val;
531-
}
532-
else {
533-
PyTuple_SET_ITEM(tot_kwnames, pto_nkwds + k, key);
534-
Py_INCREF(key);
535-
stack[tot_nargs + pto_nkwds + k] = val;
536-
k++;
537-
}
538-
}
539-
DEALLOCATE_STACK(small_positions, positions);
540-
}
541-
542560
/* Call / Maintenance / Return */
543561
ret = _PyObject_VectorcallTstate(tstate, pto->fn, stack, tot_nargs, tot_kwnames);
544562
DEALLOCATE_STACK(small_stack, stack);

0 commit comments

Comments
 (0)