Skip to content
This repository was archived by the owner on Feb 13, 2025. It is now read-only.

Commit 3131f57

Browse files
author
Anselm Kruis
committed
Stackless issue #137: Add Stackless support to "call" functions
- Add Stackless support to _PyObject_FastCallKeywords(). - Use STACKLESS_PROPOSE_... in a consistent way.
1 parent bf382f2 commit 3131f57

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

Objects/abstract.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2441,6 +2441,7 @@ PyObject *
24412441
_PyObject_FastCallKeywords(PyObject *func, PyObject **stack, Py_ssize_t nargs,
24422442
PyObject *kwnames)
24432443
{
2444+
STACKLESS_GETARG();
24442445
PyObject *kwdict, *result;
24452446
Py_ssize_t nkwargs = (kwnames == NULL) ? 0 : PyTuple_GET_SIZE(kwnames);
24462447

@@ -2450,7 +2451,10 @@ _PyObject_FastCallKeywords(PyObject *func, PyObject **stack, Py_ssize_t nargs,
24502451

24512452
if (PyFunction_Check(func)) {
24522453
/* Fast-path: avoid temporary tuple or dict */
2453-
return _PyFunction_FastCallKeywords(func, stack, nargs, kwnames);
2454+
STACKLESS_PROMOTE_ALL();
2455+
result = _PyFunction_FastCallKeywords(func, stack, nargs, kwnames);
2456+
STACKLESS_ASSERT();
2457+
return result;
24542458
}
24552459

24562460
if (nkwargs > 0) {
@@ -2463,7 +2467,9 @@ _PyObject_FastCallKeywords(PyObject *func, PyObject **stack, Py_ssize_t nargs,
24632467
kwdict = NULL;
24642468
}
24652469

2470+
STACKLESS_PROMOTE_ALL();
24662471
result = _PyObject_FastCallDict(func, stack, nargs, kwdict);
2472+
STACKLESS_ASSERT();
24672473
Py_XDECREF(kwdict);
24682474
return result;
24692475
}

Python/ceval.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3659,9 +3659,11 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag)
36593659
assert(PyTuple_CheckExact(callargs));
36603660
func = TOP();
36613661

3662+
STACKLESS_PROPOSE_ALL();
36623663
READ_TIMESTAMP(intr0);
36633664
result = do_call_core(func, callargs, kwargs);
36643665
READ_TIMESTAMP(intr1);
3666+
STACKLESS_ASSERT();
36653667
Py_DECREF(func);
36663668
Py_DECREF(callargs);
36673669
Py_XDECREF(kwargs);
@@ -5526,16 +5528,16 @@ call_function(PyObject ***pp_stack, Py_ssize_t oparg, PyObject *kwnames
55265528

55275529
stack = (*pp_stack) - nargs - nkwargs;
55285530

5531+
STACKLESS_PROPOSE_ALL();
55295532
READ_TIMESTAMP(*pintr0);
55305533
if (PyFunction_Check(func)) {
5531-
STACKLESS_PROPOSE_ALL();
55325534
x = fast_function(func, stack, nargs, kwnames);
5533-
STACKLESS_ASSERT();
55345535
}
55355536
else {
55365537
x = _PyObject_FastCallKeywords(func, stack, nargs, kwnames);
55375538
}
55385539
READ_TIMESTAMP(*pintr1);
5540+
STACKLESS_ASSERT();
55395541

55405542
Py_DECREF(func);
55415543
}
@@ -5851,7 +5853,6 @@ do_call_core(PyObject *func, PyObject *callargs, PyObject *kwdict)
58515853
PCALL(PCALL_OTHER);
58525854
#endif
58535855

5854-
STACKLESS_PROPOSE_ALL();
58555856
if (PyCFunction_Check(func)) {
58565857
PyThreadState *tstate = PyThreadState_GET();
58575858
C_TRACE(result, PyCFunction_Call(func, callargs, kwdict));
@@ -5860,7 +5861,6 @@ do_call_core(PyObject *func, PyObject *callargs, PyObject *kwdict)
58605861
else {
58615862
result = PyObject_Call(func, callargs, kwdict);
58625863
}
5863-
STACKLESS_ASSERT();
58645864

58655865
return result;
58665866
}

0 commit comments

Comments
 (0)