summaryrefslogtreecommitdiffstats
path: root/Python/specialize.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/specialize.c')
-rw-r--r--Python/specialize.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/Python/specialize.c b/Python/specialize.c
index 0fe4e79..8b2d1a1 100644
--- a/Python/specialize.c
+++ b/Python/specialize.c
@@ -2627,28 +2627,21 @@ _Py_Specialize_Send(_PyStackRef receiver_st, _Py_CODEUNIT *instr)
{
PyObject *receiver = PyStackRef_AsPyObjectBorrow(receiver_st);
- assert(ENABLE_SPECIALIZATION);
+ assert(ENABLE_SPECIALIZATION_FT);
assert(_PyOpcode_Caches[SEND] == INLINE_CACHE_ENTRIES_SEND);
- _PySendCache *cache = (_PySendCache *)(instr + 1);
PyTypeObject *tp = Py_TYPE(receiver);
if (tp == &PyGen_Type || tp == &PyCoro_Type) {
if (_PyInterpreterState_GET()->eval_frame) {
SPECIALIZATION_FAIL(SEND, SPEC_FAIL_OTHER);
goto failure;
}
- instr->op.code = SEND_GEN;
- goto success;
+ specialize(instr, SEND_GEN);
+ return;
}
SPECIALIZATION_FAIL(SEND,
_PySpecialization_ClassifyIterator(receiver));
failure:
- STAT_INC(SEND, failure);
- instr->op.code = SEND;
- cache->counter = adaptive_counter_backoff(cache->counter);
- return;
-success:
- STAT_INC(SEND, success);
- cache->counter = adaptive_counter_cooldown();
+ unspecialize(instr);
}
#ifdef Py_STATS